The Requirements of an Image Browser Application

OSXDEV

Jump to: navigation, 찾기

Image Kit Programming Guide > Browsing Images로 이동


이 섹션은 완전한 기능의 이미지 브라우저 어플리케이션을 작성하는 데 필요한 이미지 키트 클래스들과 프로토콜들에 대한 훑어보기를 제공하고 그런 어플리케이션이 어떻게 동작하는지를 설명한다. 이 섹션을 읽고나면, 프로그래밍 과제에 대해 단계별 방식을 제공하는 다음 챕터들을 읽을 준비가 될 것이다.


[편집] 이미지 브라우저 어플리케이션을 위한 이미지 키트 클래스와 프로토콜

이미지 브라우저 어플리케이션에는 몇가지 요구사항이 있다. 게다가 IKImageBrowserView 클래스의 인스턴스를 만들기 위해서는, 이미지 브라우저에서 보여줄 아이템들을 제공하는 데이터 소스를 당신이 제공해야 한다. IKImageBrowserDataSource와 IKImageBrowserItem 프로토콜에서 필수적인 메소드들을 구현해야만 한다.

IKImageBrowserDataSource 프로토콜은 데이터 소스에 접근하기 위한 메소드들을 정의한다. 이 프로토콜을 이용해서 아이템들을 더하고, 제거하고, 이동하고, 아이템 개별 또는 그룹에 대한 정보를 얻는다. 당신의 어플리케이션은 두개의 메소드를 구현해야 한다.

  • numberOfItemsInImageBrowser:는 이미지 브라우저에 있는 아이템들의 개수를 리턴한다.
  • imageBrowser:itemAtIndex:는 지정된 인덱스에 위치하는 오브젝트를 리턴한다. 리턴된 오브젝트는 IKImageBrowserItem 프로토콜에서 필수적인 메소드들을 구현해야 한다.

편집을 지원하거나 그룹 정보를 리턴하는 메소드는 부가적인 것이다. 자세한 내용은 IKImageBrowserDataSource Protocol Reference를 보라.

IKImageBrowserItem 프로토콜은 브라우저 뷰가 데이터 소스로부터 특정 아이템을 엑세스할 때 사용하는 필수적인 메소드와 부가적인 메소드를 정의한다. 다음의 세개 메소드를 구현해야 한다 :

  • imageRepresentationType은 이미지 리프리젠테이션 타입을 리턴한다. 이미지 브라우저 뷰는 다양한 이미지 리프리젠테이션을 다룰 수 있다. 이미지 브라우저 뷰가 어떤 리프리젠테이션 타입을 사용할 것인지를 적당한 상수를 리턴하는 방식으로 지정해야 한다. 표 3-1에 상수들이 나열되어있다.
  • imageUID는 데이터 소스 아이템을 유일하게 인식할 수 있는 스트링, 아이템의 패쓰를 나타내는 스트링같은 것을 리턴한다.
  • imageRepresentation은 이미지 브라우저 뷰의 아이템에 대한 리프리젠테이션(이미지에 대한 패쓰 같은)을 리턴한다. 리프리젠테이션은 이미지 리프리젠테이션 타입과 일치해야 한다.

부가적으로 이미지의 버전, 제목, 부제목 그리고 아이템이 선택가능한지를 리턴하는 메소드를 구현할 수 있다. 보다 자세한 사항은 IKImageBrowserItem Protocol Reference를 보라.

표 3-1 이미지 리프리젠테이션과 타입


이미지 리프리젠테이션 상수 이미지 리프리젠테이션 데이터 타입
IKImageBrowserPathRepresentationType 경로 (NSString 오브젝트)
IKImageBrowserNSURLRepresentationType NSURL 오브젝트
IKImageBrowserNSImageRepresentationType NSImage 오브젝트
IKImageBrowserCGImageRepresentationType CGImage 오브젝트
IKImageBrowserCGImageSourceRepresentationType CGImageSource 오브젝트
IKImageBrowserNSDataRepresentationType NSData 오브젝트
IKImageBrowserNSBitmapImageRepresentationType NSBitmapImageRep 오브젝트
IKImageBrowserQTMovieRepresentationType QTMovie 오브젝트
IKImageBrowserQTMoviePathRepresentationType QTMovie 오브젝트에 대한 경로(NSString 오브젝트)
IKImageBrowserQCCompositionRepresentationType QCComposition 오브젝트
IKImageBrowserQCCompositionPathRepresentationType QCComposition 오브젝트에 대한 경로 (NSString 오브젝트)
IKImageBrowserQuickLookPathRepresentationType Quick Look 프레임워크를 이용해 오브젝트를 로드하기 위한 경로 (NSString 오브젝트)
IKImageBrowserIconRefRepresentationType IconRef 오브젝트
IKImageBrowserIconRefPathRepresentationType IconRefPath 오브젝트에 대한 경로 (NSString 오브젝트)

[편집] 샘플 이미지 브라우저 어플리케이션이 동작하는 방법

당신이 이 챕터 이후 만들게 될 샘플 어플리케이션이 런치되면, 두 개의 뮤터블 어레이를 얼로케이트 한다. 하나는 이미지 브라우저 뷰에 디스플레이 될 이미지를 나타내고(이미지 어레이), 다른 하나는 이미지 브라우저 뷰에 가져와야 하는 이미지를 나타낸다(이미지 가져오기 어레이). 처음에는, 두 어레이 모두 비어있다. 그 후 어플리케이션이 셀의 스타일이나 아이템의 이동시 애니메이트 될 것인지 등 이미지 브라우저 뷰에 대한 셋업작업을 한다. 셋업이 완료되면, 이미지 브라우저 뷰를 가지고 있는 윈도우가 가진 이미지 없이 열린다. 이미지 브라우저 뷰는 수직방향의 스크롤 바를 가지고 있다. 윈도우는 이미지를 가져오기 위한 버튼을 가지고 있다.

이미지 가져오기 버튼을 누르면 이미지들을 이미지 브라우저 뷰로 가져오기 위한 액션을 발생시킨다. 어플리케이션은 NSOpenPanel 클래스의 인스턴스를 이용해서 사용자의 선택을 요청한다. 사용자가 선택을 하면, 열기 패널이 그 선택을 경로로 리턴한다. 이 어플리케이션은 파일이나 폴더 모두 선택 가능하다. 폴더는 파일을 가지거나 폴더를 가질 수 있고 둘 다 가지고 있을 수 있다. 그러나 파일이 이미지 브라우저 뷰에 더해질 수 있는 유일한 아이템이므로, 어플리케이션은 모든 경로를 뒤져서 단일 파일을 찾아내야 한다.

어플리케이션은 각각의 파일에 대해 데이터 소스 오브젝트 - 이미지 오브젝트-를 만든다. 오브젝트는 파일로의 경로(NSString 오브젝트로 나타내지는 )를 나타내는 하나의 인스턴스 변수를 가진다. 각각의 이미지 오브젝트는 이미지 가져오기 어레이에 더해진다. 모든 오브젝트들이 그 어레이에 더해지고 나면, 어플리케이션은 그 어레이를 이미지 어레이에 더한다. 그러면 어플리케이션은 이미지 가져오기 어레이의 모든 오브젝트들을 제거하여 다른 이미지들을 가져올 수 있도록 준비해 둔다. 마지막으로 어플리케이션은 IKImageBrowserView클래스의 reloadData를 호출하여 이미지 브라우저 뷰에 이미지 가져오기 어레이에 나타난 이미지들로 채운다.

이미지 브라우저 어플리케이션은 그 구현에 있어서 5가지로 크게 구분된다:

  • nib파일. 이미지 브라우저 뷰(IKImageBrowserView 클래스)를 윈도우에 붙인다. 수직방향 스크롤러가 있어야 하므로 스크롤 뷰를 더하고, 이미지 가져오기를 위한 버튼도 더한다.
  • 윈도우 컨트롤러. 이것이 메인 클래스이다. Xcode에서 만들고 Interface Builder에서 인스턴스화 한다. 윈도우 컨트롤러는 이미지 브라우저 뷰의 데이터 소스이다. 컨트롤러가 이미지 브라우저 뷰에 있는 아이템을 나타내는 이미지 오브젝트를 위한 뮤터블 어레이와 이미지 가져오기 오브젝트를 위한 뮤터블 어레이를 관리한다. Interface Builder에서, 이미지 브라우저 뷰와 윈도우 컨트롤러간의 적당한 연결을 만들어 줘야 한다.
  • IKImageBrowserDataSource 프로토콜. 이 프로토콜에서 필수적인 메소드들을 구현해 줘야 한다 : numberOfItemsInImageBrowser:와 imageBrowser:itemAtIndex:.
  • IKImageBrowserItem 프로토콜. 이미지 브라우저 뷰에서 단일 아이템을 나타내는 이미지 오브젝트를 위한 인터페이스를 선언해야 한다. 이미지 오브젝트를 위한 구현에서, 이 프로토콜을 위한 필수 메소드들을 제공해 줘야 한다: imageUID, imageRepresentationType, 그리고 imageRepresentation.
  • 이미지 가져오기. Open 패널을 설정하고, 모든 경로들이 개별 아이템이 될 때까지 경로를 추적하는 코드를 작성한다.

이어지는 섹션들은 이미지 브라우저 어플리케이션을 작성하기 위한 단계별 방법을 제공한다.