콘텐츠로 건너뛰기
Home » Development » Cocoa » Page 6

Cocoa

[iOS/OSX] 코어애니메이션 기본 개념

코어 애니메이션의 레이어

레이어 객체는 3차원 공간에 구성된 2차원 평면으로, 코어 애니메이션의 핵심이 되는 개념이다. 뷰와 비슷하게 레이어는 2차원 면의 기하학적 좌표정보, 콘텐츠, 시각적 속성등을 관리하게 된다. 하지만 뷰와는 달리 레이어는 그 스스로의 외양에 대해서는 정의하지 않는다. 레이어는 단지 비트맵을 둘러싸고 있는 상태 정보만을 관리한다. 이 비트맵은 뷰의 그려진 결과물이거나 지정한 비트맵 파일의 내용일 수 있다. 따라서 앱에서 사용하는 메인 레이어는 일종의 데이터 모델로 취급할 수 있으며 이러한 점은 애니메이션에 영향을 주는 것이므로 기억하고 넘어가야 한다.
더 보기 »[iOS/OSX] 코어애니메이션 기본 개념

[Cocoa] Undo/Redo 구현하는 법

Undo 구현하기

코코아앱 (Foundation 명령줄 도구에서도 사용할 수 있다)에서 실행취소(Undo) 기능을 구현하는 방법에 대해 알아보자. 실행 취소를 구현하는 방법은 “이전 상태를 그대로 저장”하였다가 되돌리는 방법을 생각해 볼 수 있는데, “이전 상태”에 대한 명확한 범위를 정하기가 생각보다 쉽지 않다. 또한, 앱이 나중에 확장, 변형된다면 “상태”를 매번 업데이트해야 하고 이는 관리나 유지보수 측면에서도 그리 바람직한 방법이 아니다.더 보기 »[Cocoa] Undo/Redo 구현하는 법

iOS에서 SQLite3 사용하는 방법 (Objective-C)

Swift3 버전에 대한 SQLite3 사용법은 이 포스트를 참고하시라.

예전에 쓴 글이 있기는 하지만, 그냥 요리법처럼 쓴 글이기도 하거니와 소스코드에서 뭔가 글자가 빠지는 등(syntax highlighter를 안써야 겠지만 기존 글 고치기가 귀찮아…) 문제가 많아 내용을 보충해서 다시 작성.
애플은 SQLite3를 직접 인터페이스하는 것보다는 코어데이터를 사용하라고 권장하고 있고, (실제로 있다가 빠진 것인지는 알 수 없으나 그런 주장을 하는 사람들이 종종 있다) 애플 개발자 문서에서도 관련 내용을 내렸다고 한다. (하지만 이는 사실이 아닐 거라 생각한다. 왜냐면 iOS에서 SQLite3를 인터페이스 하는 부분은 전적으로 libsqlite3를 사용하는 것이고, 이에 대한 문서는 SQLite3 홈페이지에 가면 있기 때문이다) 더 보기 »iOS에서 SQLite3 사용하는 방법 (Objective-C)

UIActionSheet

액션시트는 아이폰의 화면 아래에서 밀려 올라와 여러 선택 지 중 하나를 선택할 수 있는 옵션을 제공하는 기능이다. 물론 iOS는 UIAlertView도 제공하고 있는데, 액션 시트는 보다 넓은 공간을 사용할 수 있고 선택지를 많이 넣을 수 도 있다. UIAlertView는 웹에서의 alert,confirm,prompt등의 기능에 대응되는 개념이고, 액션 시트는 보다 커스터마이징한 개념이라고 봐도 되겠다. 주로 “삭제하기”등 되돌릴 수 없는 액션에 대해 최종 확인을 위한 UI로 많이 쓰이고, 그외에 특정 액션을 수행할 때 선택지를 제공하는 경우에 쓰인다.

더 보기 »UIActionSheet

[Cocoa] Nib 파일로부터 객체 읽어오기

Nib 파일

nib파일은 인터페이스 빌더에서 생성한 객체들을 직렬화하여 저장하는 파일로, UI를 구성하는 객체들(편의상 인터페이스 객체라 부르겠음)을 저장하게 된다. 이 파일에는 인터페이스 빌더를 통해 추가한 인터페이스 객체들(창, 뷰, 버튼 컨트롤 등)과 이러한 객체들의 세부 설정(스타일, 색상, 폰트 등), 그리고 객체들 간의 연결(connection)정보가 모두 포함된다. 이 모든 인터페이스 객체의 초기화와 설정은 프로그래밍을 통해 코드 상에서 수행할 수 있지만, 인터페이스 빌더를 사용하면 시각적으로 결과물을 즉시 확인할 수 있고 작성해야 하는 코드의 양을 엄청나게 줄일 수 있다. (GUI를 코드로 초기화하는 것은 상당한 양의 코드를 작성해야 하는 큰 일이다.)
더 보기 »[Cocoa] Nib 파일로부터 객체 읽어오기

(Cocoa) NSAlert 팝업 사용하기

NSAlert는 프로그램 실행 중 발생한 어떤 예외 상황을 사용자에게 알리고 가능한 경우 그에 대한 적절한 처리 방법을 사용자로 하여금 선택할 수 있게 하는 대화상자이다. 자바 스크립트의 alert 창과 비슷한데, NSAlert는 훨씬 더 다양한 속성과 하부 기능을 사용해서 confirm 이나 prompt와 같은 기능도 동시에 수행할 수 있게 한다.

더 보기 »(Cocoa) NSAlert 팝업 사용하기

[Cocoa Touch] 뷰 트랜지션 애니메이션 구현하기

트랜지션(transition)은 뷰가 갑자기 나타내거나 없어지거는 것과 관련하여 보다 나은 사용자 경험을 제공할 수 있도록 해준다. 트랜지션 역시 뷰 애니메이션이므로 UIView의 애니메이션 메소드를 사용하거나 코어 애니메이션을 사용하여 구현하는 두 가지 방법 중 하나를 선택할 수 있다. UIView 애니메이션으로 뷰 트랜지션 구현 UIView 애니메이션에서 지원하는 트랜지션은 크게 두 가지로 나뉜다. 기존의 뷰의 서브 뷰들을 바꾸기 – 비교적 작은 뷰의 변경에 속한다. 뷰를 새로운 뷰로 대체하기 – 화면상에서 변경이 일어나는 영역이 많을 때 뷰 트랜지션은 뷰 컨트롤러에 의한 트랜지션과는 다르다. 뷰 컨트롤러 트랜지션은… 더 보기 »[Cocoa Touch] 뷰 트랜지션 애니메이션 구현하기

iOS 앱의 구조

아이폰 앱 강좌를 검색하다보면 IB없이 만들기와 관련된 강좌가 상당히 많다. 즉 인터페이스 빌더 없이 모든 UI를 코드로 제어하는 형태로 앱을 개발하는 방법이다. 초보자에게는 추천하기 어렵고 또한 이렇게 코드로 UI를 구성하면 준비해야 하는 코드가 상당히 많아지는데, nib 파일로부터 객체가 생성되는 부분 특히 이렇게 어디선가 갑자기 툭 튀어나오는 객체들을 어떻게 처리해야 할지에 대해서는 좀 난감한 부분들이 있다보니 nib 파일을 사용하지 않는 방식으로 개발을 많이 하고 있는 것 같다.

그래서 오늘은 iOS앱의 구조에 대해 잠시 살펴보도록 하겠다. 분명 IB, 즉 nib 파일을 사용하는 방식은 빠른 시간안에 UI 레이아웃을 구성하고 시각적으로 조정하므로 별도의 컴파일없이 시각적으로 결과물을 확인할 수 있다는 점에서 장점을 가진다. nib 파일에 대한 이해가 어느 정도 충족된다면 인터페이스 빌더를 사용하여 앱을 개발하는 것이 그다지 나쁜 것만은 아님을 알 수 있을 것이다.

더 보기 »iOS 앱의 구조

[Cocoa] Pasteboard를 사용하여 복사/붙여넣기

페이스트 보드 사용하기

임의의 클래스를 페이스트 보드로 복사하고 또 읽어와서 붙여넣기를 하려면 객체의 데이터를 직렬화된 데이터나 프로퍼티 리스트로 변경할 수 있어야 한다. 따라서 이 글을 읽기 전에 이와 관련된 문서들을 먼저 읽을 것을 권한다.

페이스트 보드

복사/붙여넣기를 하면 컴퓨터 메모리의 특정한 영역에 해당 데이터를 복사해두고 필요시에 (심지어는 다른 애플리케이션에서도) 이 데이터를 언제든 꺼내어 쓸 수 있다. 이 영역은 페이스트보드 서버에 의해 관리되는데, 코코아 앱에서는 NSPasteboard 객체를 통해 이 서버의 서비스에 접근할 수 있다. 페이스트 보드는 단순히 복사/붙여넣기 작업에만 관련되지 않고 드래그앤드롭이나 시스템 서비스 호출 시 데이터를 넘겨주는 데에 사용될 수 있는데, 이를 위해 페이스트 보드 서버는 몇 가지 종류의 페이스트 보드를 마련해두고 있으며, 일반적으로 많이 쓰이는 페이스트 보드에 대해서는 고유한 이름이 붙어 있다.

더 보기 »[Cocoa] Pasteboard를 사용하여 복사/붙여넣기

[Objective-C] 메소드를 동적으로 추가하기

보통 객체에 필요한 메소드는 해당 객체의 클래스에서 미리 정의된다. 그러나 경우에 따라서는 객체에 동적으로 메소드를 추가해야 하는 경우가 있다. (도대체 언제?) 실행 시간에 동적으로 메소드를 추가하는 경우는 상상하기 어려운데, 코어 데이터를 사용할 때 자동으로 생성되는 모델 클래스에서 볼 수 있는 @dynamic 지시어가 붙은 프로퍼티 선언이 여기에 해당한다고 볼 수 있다.

더 보기 »[Objective-C] 메소드를 동적으로 추가하기