콘텐츠로 건너뛰기
Home » iOS » Page 2

iOS

iOS에서 메일 작성 화면을 통해 메일 보내기

앱 내에서 메일을 보내려면 MFMailComposeViewController 클래스를 사용한다. 물론 mailto 방식의 URL을 보내어 메일 앱을 실행하는 방법도 있지만 앱 내에서 메일을 작성해서 보내기 위한 방법으로는 이를 사용한다.이를 활용하기 위해서는 MessageUI.framework 를 연결해야 하고 <MessageUI/MessageUI.h> 파일을 임포트해야 한다. 주소록에서 이메일을 받기 위해서는 주소록의 ABPeoplePickerViewController를 사용해야 한다. 다음은 예시

[팁] 아이폰에 설치된 폰트 확인하기

이 내용은 절대적으로 필요한 내용은 아니지만, 아이폰에 들어있는 폰트들의 이름을 fast enumeration을 통해 표시하는 간단한 코드 -(void) enumerateFonts { for (NSString *familyName in [UIFont familyNames]) { NSLog(@”font family = %@”, familyName); for (NSString *fontName in [UIFont fontNamesForFamilyName:familyName]) { NSLog(@”\t%@”,fontName); } } }

[iOS] 간단한 시계 만들기

심심해서 만들어보는 아날로그 시계

꼭 심심해서라기보다는 코어그래픽 예제 쯤으로… 사실 이렇게 노가다로 그림 그리는 앱을 별로 만들어보지는 못한 것 같아서 시작해본다. 만들고자 하는 앱은 아날로그 시계이며, 유형을 꼭 선택하라면 Pie Clock 쯤 되겠다. 즉, 시/분/초를 나타내는 파이 그래프를 중첩하여 현재 시간을 표현하는 것이다. 이는 의의로 상당히 간단하게 표현할 수 있다.더 보기 »[iOS] 간단한 시계 만들기

[Cocoa] 코어데이터 스택을 수동으로 세팅하기

코어데이터 코어데이터 코어데이터. 쉽지도 않은 내용인데 이 블로그에서 최근에 코어데이터를 지긋지긋하게 많이도 다루는 것 같다. ㅠㅡㅠ 하지만 언젠가는 피가되고 살이될 코어데이터에 대한 내용이다.
이미 “간단한” 저장은 아주 손쉽게 Keyed Archiver를 사용하여 인코딩한 객체를 파일로 바로 저장하는 것은 살펴보았다. 하지만 만약, 저장한 주소록에 사람이 수백만명이라면 엄청나게 많은 데이터가 앱이 실행될 때 한번에 메모리로 로드되어 올라갈 것이다. (이것이 아카이빙으로 내용을 저장할 때의 한계이다. 많은 데이터는 결국 한 번에 로딩해서 안고 있어야 하는 부담이 있다.)
하지만 코어데이터는 굉장히 빠르게 영구저장소를 계속해서 액세스하고, 자동으로 차등저장 및 로딩을 지원하기 때문에 데이터세트가 어느 정도까지는 커져도 괜찮다. (적어도 나는 그렇게 알고 있다.)
iOS라면 UIManagedDocument를 사용하면 문서파일 자체를 코어데이터 영구저장소 파일(데이터베이스 파일)로 바로 사용할 수 있다. 이 내용은 이미 살펴본 바가 있는데, 문제는 NSManagedDocument 라는 것은 아직 공식적으로 존재하지 않는 클래스이다. (아 이런…) 결국 코코아 앱을 시작할 때 코어데이터를 적용해주지 않으면… 콸콸콸콸…

update: macOS에서는 NSPersistentDocument 라는 클래스가 있어서 코어데이터와 NSDocument를 긴밀하게 통합하여 사용할 수 있다.

더 보기 »[Cocoa] 코어데이터 스택을 수동으로 세팅하기

[UIKit] UIView를 이미지로 캡쳐하기, UIImage를 파일로 만들기

UIView를 UIImage로 캡쳐하는 방법 NSView를 이미지로 캡쳐하는 방법에는 여러가지가 있는데, 캡쳐한 이미지를 파일로 저장하기 간편하게 쓰는 방법은 NSBitmapImageRep 클래스를 사용해서 현재 포커스된 뷰의 영역을 바로 캡쳐하는 것이다. (그 외에 PDF데이터를 바로 추출하거나, 뷰의 CALayer를 NSImage 상에서 렌더하는 방법등 여러 가지 방법이 있을 수 있다.) 코코아 터치에서는 NSBitmapImageRep 와 같은 클래스가 없다. 대신에 비트맵 이미지를 그래픽 컨텍스트에서 얻을 수 있다는 점을 이용하여 다음과 같은 방법을 쓸 수 있다. -(UIImage*)captureView:(UIView *)theView { UIGraphicsBeginImageContextWithOptions(theView.bounds.size, theView.isOpaque, 1.0); ; UIImage *resultImage = UIGraphicsGetImageFromCurrentImageContext(); return UIImage; }… 더 보기 »[UIKit] UIView를 이미지로 캡쳐하기, UIImage를 파일로 만들기

(Cocoa) 날짜와 시간을 다루기

updated

Swift를 사용해서 Date를 다루는 방법은 새로 작성된 글을 참고하세요.
 

들어가며

날짜와 시간을 위한 프로그래밍을 위해서는 기본적으로 NSDate를 사용한다. NSDate는 2001년 1월 1일 자정을 기점으로 현재시간 (혹은 특정 시점)까지의 초단위로 경과한 시간을 저장하고 있는 객체이다.(Epoch가 아니라 21세기의 시작시점을 기준으로 하고 있다!) 이렇게 단순히 누적된 초 시간으로는 두 시점의 선/후 관계를 파악하는 등의 단순 비교 작업은 가능하지만, 구체적인 날짜나 요일에 연관된 작업을 하기는 매우 어렵다. 예를 들어 올해 크리스마스가 무슨 요일인지를 구하는 일은 NSDate 객체 만으로는 사실상 매우 힘들다.
더 보기 »(Cocoa) 날짜와 시간을 다루기

iOS에서 SQLite 사용방법

관련하여 새롭게 작성된 글이 있으니, 이 글을 읽어주세요: [새로 작성된] iOS에서 SQLite3 사용방법

자주 쓰이지는 않지만, 현재로서는 미리 만들어 놓은 데이터를 검색하여 사용하는 가장 단순한(?) 방법이다. (코어데이터는 데이터 셋을 미리 만들어 사용하기가 까다롭다) 대신, 애플은 영구저장소를 활용하는 방법으로 코어데이터를 밀고 있기 때문에 SQL과 관련한 내용을 애플 개발자 문서에서 친절하게 소개하고 있는 자료는 좀 드물다. 대신 SQL의 C인터페이스를 설명하는 글은 인터넷에서 많이 있으므로 적절하게 찾아보면 된다.
더 보기 »iOS에서 SQLite 사용방법

[iOS] UIScrollView 사용법

업데이트 UIScrollView를 Swift에서 사용하는 방법에 대한 (적어도 이 글 보다는 나은) 새 버전을 참고하세요. UIScrollView는 gesture recognizer를 내장하여 실제 뷰 영역보다도 큰 영역을 스크롤하여 내용을 볼 수 있도록 해주는 클래스이다. 사진 앨범 앱의 사진 보기 화면에서 이 스크롤뷰가 사용된다. (카메라롤의 사진 목록 역시 스크롤뷰로 구현되어 있다.) 스크롤뷰는 관성 이동은 물론 내부 컨텐츠를 확대/축소하는 방법을 아주 간단히 처리할 수 있어 주로 이미지와 관련된 화면에서 상당히 유용하게 활용할 수 있다. 스크롤뷰를 사용하는 방법은 UIViewController와 거의 유사하다. 인스턴스를 생성해서 하위뷰를 추가해주면 된다. 스크롤뷰의… 더 보기 »[iOS] UIScrollView 사용법

20120103 :: [팁] 프로토타입 셀을 서브클래싱하기

프로토타입 셀에 라벨 등의 서브 뷰를 삽입하면 각각의 서브뷰에 tag 값을 주어 -viewWithTag: 메소드를 통해 접근이 가능하다. 하지만 태그를 일일이 외우는 것은 직관적이지 못하므로 (물론 편리하긴하지만) 셀의 하위 구조가 복잡한 경우에는 그닥 즐겨 쓸만한 일이 아니다. 이를 아울렛을 통해 접근하고 제어할 수 있다면 좀 더 편리할 것이다. 이런 경우에는 프로토타입 셀을 서브 클래싱할 수 있다. 즉 UITableViewCell 클래스의 하위 클래스를 만들고 이를 IB에서 명시해주면 된다. 먼저 스토리보드에서 테이블 뷰 안에 있는 프로토타입 셀에 이것 저것 넣고 싶은 레이블이나 이미지뷰등을 넣는다.… 더 보기 »20120103 :: [팁] 프로토타입 셀을 서브클래싱하기