본문 바로가기

프로그래밍/iOS243

XCODE, 네비게이션바의 Function 목록에 함께 나오는 주석문 작성하기 #pragma mark 코멘트를 어쩌고 저쩌고로 적습니다 #pragma mark - 보통 위에걸 많이 쓰고 아래 것들도 준비되어 있다. 협업에 필요하고, 소스 가독성에 중요한 것들이다. //???: 질문 //!!!: 중요한고 //MARK: 마크할 것들 //TODO: 해야될 것들 //FIXME: 고쳐야 될 것들 출처 : http://www.devlab.pe.kr/86 2011. 11. 8.
컨텐츠의 사이즈에 맞추어 UILabel 크기 변경하기 기존의 글에서 UILabel을 이용하여 컨텐츠를 보여주는 다양한 방법에 대해 이야기 하였습니다. - 두줄 이상을 표시하기 - 문자열 크기에 맞추어 UILabel frame 크기 변경하기 하지만 위의 링크에서 두번째 글의 경우에는 특정한 상황에서 매우 비정상적인 결과를 보여줍니다. 방법을 찾다 보니 sizeWithFont 메서드가 문제가 있는 메서드이더군요. 다음의 방법을 사용하는것이 가장 확실한 방법인듯 합니다. - (void)applicationDidFinishLaunching:(UIApplication *)application { NSString *string = @"I have a very beautiful girl-friend. but she is not love me after last week.. 2011. 11. 2.
UIWebView 내의 컨텐츠 이벤트 가로채기 UIWebView 클래스를 이용하다보면, 가끔 로딩한 웹뷰 컨텐츠 내에서 어떤 이벤트가 일어나는지 가로채고 싶을 때가 있습니다. 예 를 들면, Resource 폴더 내에 내가 원하는 .html 파일을 넣고, 그 폴더에서 Get 방식으로 파라미터를 특정 서버에 전달하는 경우에 정작 사용자가 만든 프로그램 내에서는 이 이벤트가 어떻게 서버로 흘러 들어가는지를 포착하기가 어려운 것이 현실입니다. UIWebView는 로딩만 할뿐, 안에 로딩된 컨텐츠가 어떻게 전달되는지는 미궁이겟죠.. 그러나 역시나 이러한 이벤트에 대한 사용 가능한 함수가 있었네요. 이용법은 다음과 같습니다. @interface WebBrowserTutorialAppDelegate : NSObject { 일단 델리게이트 부분에 웹뷰 델리게이트를.. 2011. 10. 27.
싱글톤에 관련한 간단한 팁 싱글톤패턴 공부하면서알게됐는데 + (id) sharedInstance { static Singleton * instance; @synchronized(self) { if (instance==nil) { instance = [[self alloc] init]; } } return instance; } + (id) sharedInstance { static Singleton * instance; if (instance==nil) { @synchronized(self) { if (instance==nil) { instance = [[self alloc] init]; } } } return instance; } @synchronized 를 쓰는 이유가 멀티스레드에서 안정성을 보장받기위해서 쓰는데요 if(inst.. 2011. 10. 25.
프로젝트에 프로젝트 삽입 간혹 프로젝트를 진행하다가 외부 라이브러리를 사용할 경우가 생긴다. 많은 경우 이미 라이브러리 형태로 컴파일 된 .a 파일이나 .dylib 파일을 가져다 사용하면 간편하고 좋기는 하지만 때때로 이러한 라이브러리들을 제공하지 않거나 (물론 직접 컴파일 하면 되지만...) 혹은 소스를 좀 건드릴 필요가 있을 때는 라이브러리를 포함시키기보다는 소스를 직접 포함시키거나 아니면 프로젝트를 통째로 진행중인 프로젝트에 포함시켜버린다. 그런데 오늘 아무리 해도 프로젝트의 빈 껍데기만 들어갈 뿐 실제 프로젝트가 현재 프로젝트에 삽입되지 않는 현상을 발견하였다. 뭐 고수들이야 이미 잘 알고 있는 문제이겠지만 난 이 것을 해결하느라 2시간여를 꼬박 보냈다...ㅠ.ㅠ 문제는 이렇게 한 프로젝트가 다른 프로젝트 내에 삽입 되기.. 2011. 10. 25.
UiimageView에 이미지를 적용시 이미지 공백으로 나타날 경우 UIimageView에 이미지를 동적으로 적용할 경우 간혹 이미지가 표시되지 않는 경우가 생긴다. 나의 경우에는 ViewDidLoad에서 바로 적용했을 경우 나타나지 않아서 혹시나 하는 생각에 Delay를 0.5초가량 주니까 이미지가 표시됐다. 아마도, 너무 빨리 로드가 되서 그런것 같다. 혹시 모르니 체크해 보자. 2011. 10. 11.
아이폰에서의 문자열 지역화(Localization) 아이폰에서의 문자열 지역화(Localization) 문지열의 지역화를 위해서는 Localizable.strings 파일을 생성하여 "키값" = "실데이터"; 로 지역화를 해주면 됩니다. 실제 코드에서는 스트링 값대신 NSLocalizedString(@”키값”, @”설명”) 형태로 사용하시면 됩니다. 1. view-based Application 프로젝트를 생성 2. Resource 디렉토리에 Localizable.strings 파일을 생성 3. Localizable.strings 파일을 선택하고 Info에서 Make File Localizable>Add 4. Localizable.strings 아래의 English 파일에 입력 "Language" = "English"; "Greeting" = "Hello.. 2011. 10. 11.
NSXMLParser로 XML 데이터 얻어오기 참고 사이트 아이폰 개발센터 의 Introduction to Event-Driven XML Programming Guide for Cocoa 와 블로그 http://cocoadev.tistory.com/245 를 참고 하였습니다. 1. 접속 NSURL *url = [[NSURL alloc] initWithString:@"http://sites.google.com/site/iphonesdktutorials/xml/Books.xml"]; NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:url]; 대상 XML (NSString 타입)의 주소를 인자로 NSURL 을 생성한다. NSXMLParser 오브젝트를 수신된 url을 인자로 초기화 .. 2011. 10. 11.
아이폰3GS와 아이폰4의 이미지 모두 맞추기 아이폰3GS와 아이폰4의 해상다고 다르다는걸 알고 계실텐데요.. 그럼 개발시에 두가지 사이즈를 모두 고려해서 코딩을 해야 하는가에 대한 질문에 대답은.. NO 입니다. 아이폰3GS와 아이폰4의 해상도를 두개 다 맞추는 방법은 아주 쉽습니다.(애플사가 고려한 것이지요) 어플에서 좌표는 아이폰3GS 좌표계를 그대로 쓰시고, 이미지만 2가지로 제작하면 됩니다. ImageName.png 와 ImageName@2x.png 이 2가지를 만들면 되구요. 뒤에 @2x 붙은게 아이폰4용이고, 딱 2배 크기로 늘려둔 이미지입니다. 실제 이미지를 호출할때는 ImageName.png 만 호출하시면 되구요.(여기서 확장자까지 전부 써주셔야 합니다) 레티나에서는 자동으로 ImageName@2x.png를 불러와서 2배 뻥티기한 좌.. 2011. 10. 11.
Custom URL Scheme, handleOpenURL를 이용하여 HTML에서 앱 실행하기 HTML의 href를 이용하여 애플리케이션을 실행할 수 있다.우선 openURL.html에 html코드를 저장하고 openJs.js에 javascript를 저장한다. 이 HTML 페이지는 버턴을 누르면 iPhone E-mail Application이 실행될 것이다. 그리고 Call Application을 클릭하면 Saltfactory Apps이 실행이 될 것이다. saltfactory's openURL Send E-mail Call Application function touchedUpMailButton() { var email = "saltfactory@gmail.com"; var subject = "open application on HTML"; var body = "tutoiral openURL E.. 2011. 10. 11.
페이지 넘김 효과 구현 import해야 할 Framework : * layer와 CATransaction 사용을 위해 QuartzCore Framework를 import 해야 함. *CATransaction은 다중의 layer 계층에서 발생하는 변경사항을 일괄처리하는 Core Animation 메카니즘으로 layer 계층에서 발생하는 모든 변경사항을 감지하여 처리한다. *CATransition은 layer가 다른 상태로 이행하는 Animation의 처리를 담당하는 클래스다. *예제코드 // 트랜잭션 시작을 알림 [CATransaction begin]; // 속성 지정 (자세한 내용은 API 문서 참조...^^;;;) [CATransaction setValue:[NSNumber numberWithBool:YES] forKey:k.. 2011. 10. 11.
탭바와 피커 피커 (Picker) 사용 시 유의점 일반적으로 인어페이스 빌더에서 컨트롤을 선택하다 컨텐츠 뷰에 놓고 설정하는 일반적인 방식으로는 피커를 사용할 수 없음. 피커를 사용하기 위해서는 '피커 델리게이트(Picker delegate)'와 '피커 데이터소스(Picker dataSource'를 사용하여야 함. - Picker에서의 delegate의 역할 : 각 행과 각 해당 행에 속한 컴포넌트 중에서 실제로 무엇을 그릴 지 결정 피커는 델리게이터에게 문자열(NSString) 또는 주어진 컴포넌트의 특정 위치에 내용을 그리기 위한 뷰(NSView)를 요청 - Picker에서의 dataSource의 역할 : 데이터 소스는 피커에게 몇 개의 목록이 각각의 컴포넌트를 구성하고 있는 지 알려줌. 데이터 소스는 델리게이트.. 2011. 10. 7.
이미지 늘리기 카톡이나 메세지를 보면 이미지가 해당텍스트에 맞추어서 상하좌우로 늘어나는 것을 볼 수 있다. 아래의 메소드를 이용하여 구현한다. image = [[UIImage imageNamed:@"image.png"] stretchableImageWithLeftCapWidth:0 topCapHeight:0]; stretchableImageWithLeftCapWidth : 왼쪽에서부터 해당위치의 값을 잘라 늘린다. topCapHeight: 위에서부터 해당위치의 값을 잘라 늘린다. image.frame 을 사용하면 해당 크기만큼 이미지가 늘어난다. 2011. 10. 7.
네이게이션바에 이미지 버튼 올리기 아이폰 네비게이션바에 버튼을 넣는 방법입니다. 네비게이션바에 백그라운드 이미지를 넣은 경우에는 버튼 영역이 정상적으로 나오지 않아서 확인 중입니다. ^^;; UIImage *image = [UIImage imageNamed:@"right.png"]; UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; [button setBackgroundImage: [image stretchableImageWithLeftCapWidth:7.0 topCapHeight:0.0] forState:UIControlStateNormal]; [button setBackgroundImage: [[UIImage imageNamed: @"right_clicked.png"].. 2011. 10. 7.
Stretchable Image를 이용해 App. Size를 줄여보자. iPhone 사용하시다 보면, 다들 이런 경험 있으시죠? ^^ iOS App Store에서 App.을 다운로드 받을때, 20 MB 이상인 녀석들은 3G 인터넷을 통해 다운로드 받을 수 없습니다. App Download에 제한이 걸리게 되면, App 판매량에도 분명 영향을 미칠것입니다. 자 그럼 어떻게 이 뚱뚱한 App 녀석을 다이어트 시켜야 할까요? 최근에 알게된 것중에 하나 인데, 소개 해보려고 합니다. Stretchable Image 즉, 확대 가능한 이미지를 사용함으로써, Image Size를 줄이고, 궁극적으로는 Application Size를 줄일 수 있습니다. Android개발을 해보신 분들이라면, 9 patch Image라는 녀석을 아실텐데요, 그녀석과 흡사하지만 덜 파워풀한녀석입니다 ㅎ 실.. 2011. 10. 7.
아이폰 SMS 말풍선을 만들어 보기 참고 : http://vimeo.com/8718829 혼자 구현해보다가 몇가지 문제를 해결하지 못하고 성질버려서 구굴링한 결과 동영상으로 튜토리얼까지 만든 사이트를 찾았습니다. 위 사이트는 오른쪽, 왼쪽 말풍선 두개를 사용하는데 전 왼쪽용 말풍선을 도저히 구하지 못해서 결국 이미지를 반전시켰습니다. 나중에 사용할 요량으로 우선 저장 //MainViewController.h @interface MainViewController : UITableViewController { NSMutableArray *arrSms; } @property (nonatomic, retain) NSMutableArray *arrSms; - (void)initResource; @end //MainViewController.m #i.. 2011. 10. 7.
아이폰에서나인패치드 이미지처럼 사용하는 방법 출처: http://www.bit-101.com/blog/?p=2275 Skinning UIKit (iPhone) Sliders Jul 26 2009 Published by keith under iPhone, Objective C In my recently released app, Wire Draw (which you can read more about here) I wanted to create a color picker to allow the users to choose the colors of lines. Unfortunately there isn’t a color picker control in UIKit. I did find one on line, with full code on how to i.. 2011. 10. 7.
GuruLinks: 아이폰 앱 76개 소스코드, 강좌, 개발 팁 링크모음 아이폰 개발시 도움이 되는 각종 팁 , 튜토리얼, 소스코드 링크 모음입니다. 제가 주로 트위터를 통해서 공개한 것들입니다만, 워낙 간헐적으로 트위팅 한듯해서 좀더 링크를 모아서 포스팅 합니다. 한글판 앱스토어 리뷰 가이드라인은 아이폰 앱 개발자분들은 꼭 한번 읽어보셔야 합니다. Open Source iPhone Apps List – 43 App Store Apps So Far ! 아이폰 앱들중에 앱스토어에 등록되어 있으면서도, 소스가 공개되어 있는 앱들의 모음입니다. 관련 앱을 개발할 때 참고하면 아주 유용하게 사용할수 있을것입니다. 트위터 클라이언트 Natsulion, Tweetee,Tweetero,Twitterfon ( 많은분들이 사용하시는 EchoFon 입니다 ) 등이 있어서 트위터 관련 소스를 얻.. 2011. 8. 10.
Mac OS X의 터미널에서 하위 .svn 폴더 모두 삭제하기 - Mac OS X의 터미널에서 하위 .svn 폴더 모두 삭제하기 - 출처 : http://lambert.tistory.com/264 터미널을 실행 SVN을 싹 지우고 싶은 폴더 경로에서 아래와 같이 실행 find . -type d -name .svn -depth -exec rm -rf {} \; 혹시나 안되면 sudo find . -type d -name .svn -depth -exec rm -rf {} \; 로 앞에 sudo를 붙이고 해보자. 2011. 8. 3.
backBarButtonItem 은 적용이 안된다?? >>>>>>>>>>>>>>>>>>>>>>>>>>> 위와 같이 만들고 싶다면.. 어떻게??? >>>>>>>>>>>>>>>>>>>>>>>>>>>> backBarButtonItem 쓰면 된다라고 하는데 backBarButtonItem 이 안먹힌다 라고 많이 한다 나도 그랬고.. 안되는게 아니라 쓰이는 방법이 다르다.. Main 에서 호출 한 Sub에서 돌아 올때 back 을 컨스텀 하게 바꾸기 위해서는 Sub 에 - (void)viewDidLoad { [super viewDidLoad]; UIBarButtonItem *left = [[UIBarButtonItem alloc] initWithTitle:@"my Back" style:UIBarButtonItemStyleBordered target:self // e.. 2011. 7. 29.
UITableViewCell의 프로퍼티 외에 이것이 지원하는 프로퍼티와 메소드 제목은 뭔소리인지 잘 이해가 안간다 하지만 내가 원하는 부분인 것 같아 적어 놓는다. contentView : 셀 내용이 나오는 뷰를 가리킨다. 읽기 전용 backgroundView: 셀의 배경 뷰를 가리킨다. 애플리케이션이 직접 설정할 수 있다. 배경 뷰는 UITableViewCell전체 영역의 배경으로 사용된다. selectedBackgroundView: 셀이 선택되었을 때 사용될 배경 뷰를 가리킨다. 이것 역시 애플리케이션이 직접 설정할 수 있다. accessoryType과 accessoryView : 액세서리 뷰의 타입을 지정한다. accessoryType은 표준 액세서리 뷰의 종류를 지정하고, accessoryView는 커스텀 액세러리 뷰를 지정한다. 이 두 개는 서로 배타적이다. 즉 acces.. 2011. 7. 26.
TableView 스타일 정리 // // _6_UITableViewViewController.h #import @interface _6_UITableViewViewController : UIViewController { UITableView *tView; NSArray *photoArray; } @property(retain, nonatomic) IBOutlet UITableView *tView; @property(readonly) IBOutlet NSArray *photoArray; -(NSArray *)createPhotoData; @end // // _6_UITableViewViewController.m #import "_6_UITableViewViewController.h" @implementation _6_UITableVie.. 2011. 7. 26.
iOS 개발자 라이센스 비교 1. 아이폰 개발 라이센스 비교 ~!! ▷ 개인은 고민할 필요가 없이 개인개발자 라이센스를 구매하여 사용 하시면 되겠습니다. 해당 라이센스가 필요한 이유는 라이센스 없이는 휴대폰으로 테스트 조치 불가하기 때문입니다. 앱스토어 등록시도 당연히 필요하구요 (1년 99$) ▷ 기업용이라면 회사계정으로 하나 구매해서 사용하시면되는데, 개인용과 크게 다른 건 없는 거 같아요 (기능상으로는... ) ▷ 회사가 조금 큰 경우는 엔터프라이즈 개발 라이센스를 구매하셔야 됩니다. (1년에 299$ ) 이녀석은 차이가 좀 많이 있어요. 아래와 같이 비교를 해놓았으니 참고하시구요 라이센스 유형 배포 방식 기기등록 필요여부 애플심의 유효기일 개인개발자(1인) (99$) (iphone developer progam) - indi.. 2011. 7. 13.
webview에서 Link 클릭했을때 이벤트 얻기 웹뷰에서 html로 변경한 데이터를 출력한 후에... 그 내용중에 링크 부분을 클릭하면.... 사파리창이나 해당웹뷰에서 새로운 페이지가 열리는것이 아니라... 제가 만든 메소드를 실행하고 싶은데..... 링크부분을 클릭했을때 발생하는 함수가 무엇인가요?? 가능은 할까요? ㅠㅠㅠ --------------------------------- 자답입니다..... http://surgeworks.com/surgeworks/lab-mobile/iphone/how-to-override-uiwebview-links-request-action-with-your-own-custom-method 이미 자답하셨네요. ㅎㅎ - (BOOL)webView:(UIWebView*)theWebView shouldStartLoadWit.. 2011. 7. 12.