본문 바로가기

iOS Programming

iOS 키보드 뷰 객체 가져오기. 오늘 문득 iOS 키보드 표면위에 뷰를 하나 얹을 수 없을까 하는 의문이 들었습니다.몇 번 시도해보다 안되나 싶어 포기하고 있는데페친인 강명수님 (https://www.facebook.com/montesoul) 이 자료를 찾아 주신 도움으로 해결하였습니다. 찾아주신 자료는 http://www.cocoawithlove.com/2009/04/showing-message-over-iphone-keyboard.html?m=1 이거였는데 아주 오래전 4.0 이전 버전에만 작동되는 코드인거 같습니다. 제가 약간의 수정으로 iOS 7.0에서 키보드 뷰 핸들을 가져오도록 했는데요, 6.0과 5.0 에서는 테스트를 해보지 못했습니다. 수정된 코드는 아래와 같습니다. - (UIView *)keyboardView { NSA.. 더보기
UITextField / UITextView 입력 커서 이동 UITextField와 UITextView에서의 입력 커서를 제어하려면UITextInput 프로토콜 메서드를 이용해야 합니다.현재 커서의 위치 정보는 NSRange의 정수값이 아닌 NSObject에서 계승받은 UITextPosition으로 관리됩니다.이유는 UITextPosition API 문서에 잘 나와 있습니다. Some documents contain nested elements (for example, HTML tags and embedded objects) and you need to track both absolute position and position in the visible text.The WebKit framework, which the iPhone text system is bas.. 더보기
NSLog를 확장하여 사용하기 - 로그로 가득찬 로그콘솔을 보다 보기 쉽게 구현하자. 프로그래밍을 하다보면 코드 중간중간 로그를 찍어 데이터나 실행위치를 확인하며 디버깅을 하는 경우가 많습니다.코코아 프로그래밍에서는 NSLog 함수를 이용하여 콘솔화면에 찍히는 값을 확인하는데요.아래처럼 함수의 실행위치와 변수값을 확인하는 용도로 많이 사용합니다. 그런데 실행위치를 알기 위해 매번 진입위치를 나타내도록 함수명을 하드코딩하기도 합니다.그러나 이마저도 로그만으로 정확한 코드 위치를 알아내기란 거의 불가능하며,더군다나 코드의 여기저기 들어가 있는 로그들로 인해 빠르게 스크롤되는 콘솔창에서 원하는 로그 기록을 찾는 과정에서 무시하지 못할 정도의 시간을 보내기도 합니다. 이러한 단점들을 보완하기 위해 NSLog를 확장하는 LogEx라는 매크로를 정의하여 사용해 보겠습니다. 우선, pch 파일 (Pr.. 더보기
XML 데이터를 NSArray와 NSDictionary로 구조화하자. 서버 연동 앱을 개발하다 보면 서버로 부터 XML을 받아 파싱하여 처리하는 경우가 많습니다.최근에는 JSON을 많이 쓰긴 합니다만 자바로 구축된 시스템은 여전히 XML을 많이 사용합니다. 이 때 파싱된 결과를 NSArray와 NSDictionary로 구조화하여 쉽게 핸들링할 수 있는 방법을 소개하고자 합니다.JSON의 경우 파싱모듈 자체에 배열과 딕셔너리로 구조화해주는 오픈소스가 제공됩니다만xml은 약간의 구글링으로 직접 구현해야 합니다. 아레의 XML형식으로 된 연락처 데이터가 있다고 가정해 봅시다. 둘리 서울 여의도 010-1111-1111 010-2222-2222 aaaa@me.com aaaa@gmail.com 희동이 서울 신림동 010-3333-3333 010-4444-4444 bbbb@me.co.. 더보기
뉴아이패드(2012) 레티나 이미지 메모리 가용성에 관한 고찰 필자는 아직 국내에 출시되지 않은 아이패드 3세대를 미국 현지 친척에게 부탁하여 어렵게 전달받았습니다.아이패드3 출시 이전 레티나 채용에 대해 필자는 매우 부정적이었습니다.고해상도 2048x1536을 위한 이미지로딩과 처리를 위해서는 매인메모리가 최소한 2기가는 되어야 한다는게 필자의 생각이었고메모리를 2기가로 탑재한다고 해도 2기가의 메모리에 전력공급을 위한 배터리 성능 문제와 발열 문제등을 예상하여아이패드3에는 레티나가 지원되지 않을 것이며, 만일 나온다면 매인메모리는 반드시 2기가 이상이어야 한다는게 필자의 주장이었습니다.순전히 개발자 입장에서의 주장이었죠. 그러나 막상 아이패드 3세대는 물리적 해상도 2048x1536으로 나왔고 메모리는 아이패드2의 2배인 1기가로 알려졌습니다.필자는 궁금했습니다.. 더보기
Xcode 4.2 도움말 설정하기 이번에 나온 Xcode 4.2 seed 버전에는 iOS 5.0 Library Documentation 을 포함하고 있습니다만. 웹링크로 되어 있고 버그인지는 모르겠으나 실제 들어가 보면 로그인화면이 뜨고 index.html 이 lock 되어 있다고 나오면서 도움말이 보이지 않습니다. 이를 해결하는 방법은 아래와 같습니다. Xcode -> Preferences -> Downloads -> Documentation -> Check and Install Now 를 눌러주면 됩니다. 그리고 혹시 iOS 4.3 Library Documentation을 함께 이용하고 싶으시면 위의 화면에서 '+' 버튼 누르고 http://developer.apple.com/rss/com.apple.adc.documentation... 더보기
xcode4 초간단 살펴보기 오늘 xcode4가 정식 출시되었다 하여 깔아 보았습니다. 현재 필자가 진헹하고 있는 모든 프로젝트가 xcode3 기반이기 때문에 xcode4로 업그레이드 하지 않고 별도의 폴더에 설치하였습니다. 필자가 알아 본 바에 의하면 3과 4의 프로젝트가 호환이 가능하다고는 하나 이번에 출시된 버전이 GM seed 2 버전과 동일하며 그 버전의 경우 버그가 다수 있다고 합니다. 트위터의 @godrm 님의 의견을 인용하면 xcode와 IB가 합쳐지다 보니 좀만 프로젝트 덩치가 커지면 팍팍 느려지구요... 디버깅하다가 크래쉬 잘 나구요... SVN 쪽은 90% 이상 크래쉬 ㅜㅜ Fix-it 위치도 가끔 깨지고. 위와 같은 문제가 있다고 합니다. 그래서 당분간 xcode4는 심심할 때 익숙해지기 위한 워밍업 용도로만 .. 더보기
구글 챠트를 이용해 iOS에서 챠트 쉽게 구현하기 iOS SDK 에 없는 것 중 하나가 챠트입니다. 저도 요즘 간단히 만들고 있는 어플들에 챠트를 넣고 싶은데.... 직접 만들어 버릴까 생각하다가 시간이 만만치 않게 걸릴거 같아서 이리저리 찾아 보던 중 구글 차트라는게 있더군요. 항상 온라인에 연결되어 있어야 한다는 것과 구글 서비스의 무결성과 네트워크 상태의 무결성을 담보로 해야 한다는 단점이 있지만... 아쉬운대로 무료 어플에 간단히 적용할 수 있는 꽤 괜찮은 방법 같습니다. 방법은 간단합니다. 챠트를 보여주고자 하는 데이터를 url로 구성해서 호출 해주기만 하면 구글에서 해당 챠트를 이미지로 만들어 되돌려 줍니다. 브라우저 주소창에서 http://chart.apis.google.com/chart?cht=p3&chd=t:60,25,15&chs=300.. 더보기
아이폰에서 유튜브 플레이하는 코드 - (void)embedYouTube:(NSString*)url frame:(CGRect)frame { NSString* embedHTML = @"\ \ \ "; NSString* html = [NSString stringWithFormat:embedHTML, url, frame.size.width, frame.size.height]; if(videoView == nil) { videoView = [[UIWebView alloc] initWithFrame:frame]; [self.view addSubview:videoView]; } [videoView loadHTMLString:html baseURL:nil]; } 더보기
UIWebView에서 현재의 웹주소와 웹문서 제목 가져오기 - (void)webViewDidFinishLoad:(UIWebView *)webView { // 웹주소 NSString *addr = [[webView.request URL] absoluteString]; // 웹문서 제목 NSString* title = [webView stringByEvaluatingJavaScriptFromString: @"document.title"]; } 더보기