Animation Overview

OSXDEV

Jump to: navigation, 찾기

목차

[편집] Introduction to Animation Overview

이 도큐멘트는 Max OS X에서 프로그래머에게 제공하는 애니메이션 기능에 대한 일반적인 소개를 위한 것이다.

이 도큐멘트는 코코아 어플리케이션에서 애니메이션을 사용하고자 하는 모든 개발자들을 위한 것이다. 애니메이션에 대한 사전지식이 없다면 이 문서가 좋은 출발점이 될 것이지만, 그 전에 코코아 어플리케이션에서 뷰를 사용하는 법에 대한 기본적인 개념은 잘 알고 있어야 한다. 그래픽 프로그래밍에 대한 이해가 필요한 것은 아니지만, 그런 지식이 도움은 될 것이다.

수준있는 코코아 개발자이고 이미 애니메이션 기법을 잘 알고 있다면, 이 책은 코코아 어플리케이션에서 애니메이션을 효과적으로 사용하는 법과 그 애니메이션들이 Mac OS X 사용자 experience와 효과적으로 융화되기 위한 팁 정도로만 생각하고 읽으면 된다.

[편집] Organization of This Document

이 도큐멘트는 다음과 같은 장으로 구성된다:

- "What is Animation?" 은 애니메이션이 무것이며 Mac OS X에서 어떻게 사용되는 지를 설명한다.

- "Animation Basics"는 애니메이션의 기본적인 구성요소를 설명한다.

- "Mac OS X Animation Technologies"는 애니메이션을 위해 Mac OS X가 제공하는 기술들을 설명한다.

- "Choosing the Animation Technology for Your Application"은 코어 애니메이션의 레이어와 레이어를 가진 뷰의 강점에 대해 알아보고 당신의 어플리케이션에 가장 적당한 것을 선택하기 위한 가이드라인을 제공한다.

[편집] See Also

코어 애니메이션과 코코아 애니메이션 클래스들을 위한 보다 자세한 정보는 다음 리소스들을 보라.

- Core Animation Overview는 당신의 어플리케이션에서 코어 애니메이션을 활용하는 것에 대한 자세한 정보를 제공한다.

- Animation Programming Guide for Cocoa는 어플리케이션 키트에서 제공하는 애니메이션 클래스와 프로토콜을 설명한다

[편집] What Is Animation?

애니메이션은 이미지들을 연속적으로 빠르게 보여줌으로서 동작의 잔상을 제공하는 시각적인 기법이다. 각각의 이미지들은 다리가 조금 움직인다던지, 카의 바퀴가 조금 돌아간다던지 하는 작은 변화를 가진다. 이러한 이미지들이 빠르게 보여졌을때, 당신의 눈이 세밀한 부분을 채우게 되고 움직임의 잔상이 완성되는 것이다.

당신의 어플리케이션에서 적당히 사용되었을 때, 애니메이션은 보다 동적인 룩&필을 제공하면서 사용자의 느낌을 향상시킬 수 있다.. 유저 인터페이스 요소들을 스크린 위에서 부드럽게 움직이게 하고, 단계적으로 페이드 인, 아웃 시키고, 시각적인 효과를 가진 새로운 커스텀 컨트롤을 만드는 것은 사용자에게 영화적인 컴퓨팅 환경을 만드는 것으로 결합된다.

[편집] Animation in Mac OS X

Mac OS X의 사용자 인터페이스에는 애니메이션의 예가 아주 많다

  • 어플리케이션이 사용자의 주의를 요할 때 독의 아이콘이 뛰는 것.
  • 쉬트와 드로어들이 나타나고 숨겨질 때 사용하는 애니메이션.
  • 진행중인 오퍼레이션의 길이를 나타내기 위해 프로그레스 인디케이터가 움직이는 것.
  • 아이콘을 독으로 드래그 하면 새로운 아이콘이 독에 추가되기 위해 갈라지는 것.
  • 패널에서 깜박거리는 디폴트 버튼.

어플리케이션들 또한 풍부한 동적 사용자 환경을 제공하기 위해 애니메이션을 효과적으로 사용할 수 있다. 예를들면, 어떤 버디가 접근가능 상태에서 벗어난다는 것을 알리기 위해 , 사운드를 들려주고 애니메이션 한다. 사운드는 상태의 변화를 당신에게 알려주고 애니메이션은 이벤트를 알리기 위해 해당 어플리케이션 집중하게 한다.

프론트 로우는 유저 인터페이스 전체적으로 애니메이션을 사용한다. 예를 들면, 프론트로우가 활성화 될 때 Max OS 아쿠아 인터페이스에서 프론트 로우 인터페이스로 모드가 전환된다는 것을 보여주기 위해 장면전환 효과가 활용된다. 메뉴에서 아래쪽으로 네비게이트 할 때, 예전 메뉴를 왼쪽으로 밀어내면서 새로운 메뉴가 오른쪽에서 밀려나온다. 위쪽 메뉴로 가면 , 장면전환은 반대로 일어나면서 당신이 컨텍스트를 유지하게 해 준다.

타임머신에서 느껴지는 거리감은 선형적인 시간의 경과를 직관적으로 나타낸다. 오래된 파일 시스템의 스냅샷은 좀 더 멀리 보여지며, 당신이 복구하려 하는 버전을 찾기 위해 이동할 수 있도록 한다.

그림 1-1 타임 머신 사용자 인터페이스

그림: A_Cocoa_AnimationOverview_Time_machine.jpg


iTunes 7.0의 커버플로우 인터페이스는 앨범과 영화의 커버를 매력적인 방법으로 보여준다. 컨텐트 사이를 브라우징하면 이미지가 사용자에게 정면으로 보여지도록 애니메이트 된다. 이것은 영화적 컴퓨팅 환경의 아주 멋진 예가 된다. 그리고 커버플로우 사용자 인터페이스는 이미지들이 나란히 나열되는 경우보다 적은 공간에 많은 내용물을 보여준다.

그림 1-2 iTunes 7.0 커버플로우 사용자 인터페이스

그림:A_Cocoa_AnimationOvervier_Coverflow.jpg


아주 작은 애니메이션의 사용일지라도 커뮤니케이션을 잘 할 수 있다. iSync 메뉴는 싱크가 진행중이라는 것을 보여주기 위해 부가적 애니메이트를 한다(그림 1-3). 이 모든 경우에서 어플리케이션은 애니메이션의 사용을 통해 추가적인 정보와 컨텐스트를 사용자에게 제공한다 .

그림 1-3 iSync 메뉴 상태 아이템

그림:A_Cocoa_AnimationOverview_Isync_icon.jpg


[편집] Using Animation in Your Applications

당신의 어플리케이션에서 애니메이션을 도입하는 방법은 어플리케이션이 제공하는 인터페이스 타입에 크게 의존한다. 아쿠아 사용자 인터페이스를 사용하는 어플리케이션은 커스텀 컨트롤이나 뷰를 만들면 가장 잘 애니메이션이 적용된다. 교육용 프로그램, 간단한 게임처럼 어플리케이션이 자신만의 사용자 인터페이스를 가지거나 프론트 로우처럼 풀-스크린 어플리케이션이라면, 사용자에게 어느 정도의 애니메이션이 적당한지를 결정할 여지가 훨씬 더 크다.

애니메이션과 시각 효과의 적절한 사용은, 평범한 시스템 유틸리티가 풍부한 시각적 경험을 사용자에게 제공하도록 해주어, 어플리케이션에 주목할 만한 경쟁력을 제공하게 된다.

[편집] Animation Basics

모든 애니메이션에 요구되는 몇가지 기본적인 어트리뷰트들이 있다 : 애니메이트 할 오브젝트가 있어야 하고, 어떤 타입의 애니메이션일지를 지정해야 하며 그 애니메이션이 얼마나 오래갈지를 지정해야 한다.

이 챕터는, 개념적인 용어로, Mac OS X 애니메이션 기술들에 공통적인 기본 애니메이션 기법들을 다룬다.

[편집] Animation Target Object

각각의 애니메이션은 애니메이션이 영향을 끼칠 시각적인 요소를 가져야 한다. 이것을 애니메이션 타겟 오브젝트라 생각할 수 있다. 애니메이션 타겟 오브젝트는 사용자에게 보여지는 내용물을 제공한다. 애니메이션은 애니메이션 타겟 오브젝트에 전체적으로 혹은 좌표계에서의 위치나 그려지는 컬러와 같은 타겟의 특정 프라퍼티에만 동작하도록 할 수 있다.

애니메이션들은 애니메이션 타겟 오브젝트를 가진다. 당신이 애니메이션을 explicitly 하게 작동시키는 게 아니라, 애니메이션 타겟 오브젝트가 애니메이션을 작동시키고 멈춘다.

[편집] Types of Animation

Mac OS X 애니메이션은 세가지 다른 타입의 애니메이션을 지원한다; 베이직 애니메이션, 키프레임 애니메이션 그리고 트랜지션 애니메이션이다.

[편집] Basic Animation

베이직 애니메이션- 심플 애니메이션 또는 단일 키프레임 애니메이션이라고도 알려진 - 은 출발 값에서 타겟 값까지 일련의 중간 값들을 처리한다. 그 중간값들은 애니메이션이 지정된 시간만큼 발생할 때 계산되거나, 보간된다. 베이직 애니메이션은 당신이 타겟 오브젝트의 프라퍼티 값을 지정하여 애니메이트 하게 한다.


베이직 애니메이션은 다음의 어떤 값들을 보간하여 동작할 수 있다.


  • integer와 double
  • CGRect, CGPoint, CGSize 그리고 CGAffineTransform 구조체
  • CATransform3D 데이터 구조체
  • CGColor와 CGImage 레퍼런스


[편집] Keyframe Animation

키프레임 애니메이션은 베이직 애니메이션과 유사하지만 타겟 값의 배열을 지정할 수 있게 해준다. 즉, 애니메이션 기간동안 각각의 타겟값에 도달하게 된다. 키프레임 애니메이션의 키프레임들은 베이직 애니메이션에서 지원하는 어떤 타입이든 상관없으며, 일련의 CGPoint로 분리될 수 있는 CoreGraphics 패쓰가 될 수도 있다. 베이직 애니메이션과 마찬가지로, 키프레임 애니메이션은 애니메이션 타겟 오브젝트의 지정된 프라퍼티 위에서 애니메이션이 동작한다.


[편집] Transition Animation

트랜지션 애니메이션은 애니메이션 타겟 오브젝트가 보이게 되거나 숨겨질는 방식을 결정하는 시각적 효과를 지정한다. 예를 들어, 애니메이션 타겟 오브젝트를 보이게 하는 것은 디스플레이의 옆면에서 뷰로 밀고 들어오는 방식으로 지정하는 것 처럼 말이다. 트랜지션 애니메이션은 Core Image 필터를 이용해 수행된다.


트랜지션 애니메이션이 애니메이션 타겟 오브젝트 전체에 영향을 미치므로, 타겟 오브젝트의 프라퍼티를 지정하는 것은 불필요하다.

[편집] Animation Timing

애니메이션의 전체적인 타이밍은 몇가지 요소에 의해 결정된다: 기간, 패이싱, 그리고 반복 비헤비어이다.

기간은 출발 혹은 현재 값에서부터 타겟 상태까지 애니메이션이 가지는 시간의 길이를 초로 측정한 것이다.

애니메이션의 패이싱은 보간되는 값들이 애니메이션의 기간동안 어느정도 퍼져있는가를 결정한다. 예를 들어, 0부터 5까지 5초의 기간을 가지는 단일 키프레임 애니메이션과 직선적인 패이싱은 기간동안 중간 값들이 동일하게 퍼지도록 한다. "EaseIn"패이싱을 가지는 동일한 애니메이션은 시작은 천천히 하고, 애니메이션이 진행됨에 따라 점점 빨라지도록 한다. 애니메이션은 같은 기간을 가지고 동일한 값을 향해 가지만, 애니메이션 중에 지나는 중간값들은 다르다.

애니메이션의 반복은 두가지로 지정될 수 있다: 애니메이션이 반복될 횟수 혹은 애니메이션이 반복을 계속할 시간을 지정한다. 예를 들어, 15초의 반복시간을 지정하면 5초짜리 애니메이션이 3번 반복한다. 애니메이션이 반복을 하면서 정방향만 재생할 것인지 역방향으로도 재생할 것인지를 지정할 수도 있다.

[편집] Mac OS X Animation Technologies

복잡한 애니메이션과 시각적인 효과를 어플리케이션에 구성하는 것은 적당한 애니메이션 퍼모먼스를 얻기 위해 개발자에게 openGL과 같은 로-레벨 그래픽 API를 요구하는 어려운 일일 수 있다. Mac OS X는 카본과 코코아 어플리케이션에서 하이-레벨 API를 이용해서 풍부하게 애니메이션이 들어간 인터페이스를 가진 어플리케이션을 쉽게 만들어 낼 수 있는 몇가지 기술을 제공한다.


[편집] Core Animation

코어 애니메이션은 Mac OS X v10.5에서 처음 선보이는 Objective-C 프레임워크로서,난해한 그래픽과 수학적 기술 없이도 실시간 애니메이션과 시각적인 장면전환을 더함으로서 당신이 만드는 어플리케이션에 대한 제품의 가치를 극적으로 높여준다. 코어 애니메이션을 사용하면 텍스트, 2차원 그래픽스, OpenGL, 쿼츠 컴포저 컴포지션과 퀵타임 비디오를 동시에, 투명도 효과와 코어 이미지필터와 효과들과 함께 역동적으로 렌더하고 애니메이트 할 수 있다.


코어 애니메이션은 고속의 2D 레이어를 만드는 엔진이다. 사용자 인터페이스를 분리된 레이어로 나눔으로서 코어 애니메이션 인터페이스를 만들 수 있다. 그 레이어들을 합치면 완성된 사용자 인터페이스를 완성할 수 있다. 그림 2-1은 코어 애니메이션 사용자 인터페이스를 각각의 레이어로 쪼개 놓은 것을 보여준다.

Media:A_Cocoa_AnimationOverview_Anim_layer_interface.mov


그림 2-1 각각의 레이어로 쪼갠 코어 애니메이션 사용자 인터페이스

그림 2-1 각각의 레이어로 쪼갠 코어 애니메이션 사용자 인터페이스


레이어는 내포된 레이어 트리- 뷰를 사용하는 코코아 어플리케이션을 개발해 본 개발자에게는 친숙한 개념일 것이다 - 에서 정렬된다. 각각의 시각적인 레이어 트리는, 레이어 컨텐트를 캐시하고 필요에 따라 재빨리 그 컨텐츠를 스크린에 합성해 내는 각각의 렌더트리에 의해 뒷받침된다. 당신의 어플리케이션은 컨텐트가 변하지 않는 이상 힘들게 다시 그려낼 필요가 없다.


레이어의 기본적인 위치와 평면에 더해, 각각의 레이어는 레이어의 컨텐트가 렌더될 때 적용되는 다음과 같은 부가적인 시각적 프라퍼티를 가지고 있다:


- 부가적인 배경 색

- 레이어가 둥근 모서리를 디스플레이 할 수 있도록 하는, 부가적인 모서리 반경

- 컨텐트가 합셩되지 전에 레이어의 뒤에서 적용되는 부가적인 코어 이미지 필터의 배열

- 레이어의 컨텐트를 그 배경과 합성하기 위해 사용하는 코어 이미지 필터

- 레이어와 그 서브레이어의 컨텐트에 적용되는 부가적인 코어 이미지 필터의 배열

- 레이어의 투명도에 대한 컨트롤

- 컬러, 오프셋, 투명도 그리고 블러 반경을 포함하는 부가적인 그림자를 그리는데 사용되는 매개변수

- 지정된 굵기와 색상으로 그려지는 부가적인 외곽선


코어 애니메이션이 2D 레이어를 만드는 엔진이지만, 투영 트랜스포메이션을 사용하는 준 3D 장면을 만들는 것도 지원한다. 모든 레이어들은 컨텐트에 적용되는 3차원 트랜스폼 행렬과 그 서브레이어에 적용되는 두번째 3차원 트랜스폼 행렬을 가지고 있다. 그 투영기법을 사용하면, 사용자에게 깊이를 제공하는 멋진 사용자 인터페이스를 만들 수 있다. (그림 2-2)

그림:A_Cocoa_AnimationOverview_Desktop.jpg

그림 2-2 코어 애니메이션 3D 인터페이스


[편집] Animating Layers

코어 애니메이션은 레이어의 시각적인 프라퍼티를 애니메이팅 하는 두가지 방법으로 내재적, 명시적 방법을 지원한다.


Implicit 애니메이션은 애니메이션 가능한 레이어 프라퍼티에 새로운 값을 설정하게 되면 자동적으로 발생한다. 코어 애니메이션은 그 애니메이션의 지정된 프레임 율에, 분리된 쓰레드에서 실행하는 것을 전적으로 책임지며 당신의 어플리케이션은 다른 이벤트를 얼마든지 처리할 수 있다. 예를 들어, frame 프라퍼티를 newFrame 값으로 할당하면, textLayer 오브젝트는 부드럽게 새로운 위치로 움직인다.


 textLayer.frame = newFrame


각각의 레이어의 애니메이션 가능한 프라퍼티는 연결된 implicit 애니메이션을 가지고 있다. 기본 애니메이션을 오버라이드 하여 레이어 프라퍼티에 대해 당신의 커스텀 애니메이션을 제공할 수 있다. 어떤 레이어 프라퍼티에 대해서, 잠깐 동안 혹은 지속적으로 애니메이션 하지 않도록 할 수도 있다.


Explicit 애니메이션은 코어 애니메이션 애니메이션 플래스의 인스턴스를 만들어서 구성할 수 있으며, 타겟 레이어와 프라퍼티를 설정할 수도 있다. 프라퍼티의 실제 값은 변하지 않고 현재 값 레이어 프라퍼티에만 영향을 미치는 레이어 프라퍼티를 명시적으로 애니메이팅 한다. 예를 들어, 레이어에 주의를 끌기 위해서, 트랜스포메이션 행렬을 이용해서 그 레이어를 360도 회전시키려 할 수 있다. 이 애니메이션은 레이어의 디스플레이에는 영향을 미치지만, 그 트랜스폼 매트릭스는 그대로 남는다.


[편집] Layout Management

코어 애니메이션 레이어는 레이어를 그 슈퍼레이어에 상대적으로 위치시키는 고전적인 코코아 뷰 모델을 지원한다 - "strings and sprints"라고 불리는 스타일이다. 더해서, 코어 애니메이션은 또한 보다 일반적인 레이아웃 매니저 메카니즘을 제공하여 당신이 직접 레이아웃 매니저를 작성할 수 있게 한다. 커스텀 레이아웃 매니저는 연결된 레이어의 서브레이어들에 대한 레이아웃을 제공할 책임을 진다.


커스텀 레이아웃 매니저를 사용하면, 당신의 어플리케이션은 implicit 애니메이션을 이용해 복잡한 애니메이션을 만들 수 있다. 레이어의 위치, 크기, 혹은 트랜스폼 행렬을 업데이트하면 새로운 값으로 애니메이트 한다. CoverFlow 스타일의 애니메이션은 커스텀 레이아웃 매니저를 이용해 가능하다.


코어 애니메이션은 constraint의 세트를 이용해 레이어를 구성하는 constraint 레이아웃 매니저 클래스를 제공한다. 각각의 지정된 constraint는 슈퍼 레이어 혹은 인접한 레이어에 대한 평면 어트리뷰트에 대해 상대적인 레이어 평면 어트리뷰트를 설명한다(좌, 우, 위, 아래 면 또는 수평, 수직 중심점). 예를 들어 constraint매니저를 사용하면 레이어 A는 중앙에서 항상 레이어 B보다 5포인트 아래에 위치하도록 레이어를 정의할 수 있다. 레이어 B를 새로운 위치로 이동시키면 레이어 A는 자동적으로 레이어 B에 상대적으로 위치한다.

[편집] NSView Integration with Core Animation

코코아 NSView 클래스는 코어 애니메이션과 레이어에 대해 두가지 방법으로 함께한다. 첫번째 타입은 레이어 호스팅이다. 레이어 호스팅 뷰는 어플리케이션에 의해 설정된 코어 애니메이션 레이어-트리를 디스플레이 한다. 레이어를 직접 수정해서 레이어 컨텐트와 인터액트하는 것은 어플리케이션의 책임이다. 레이어 호스팅 뷰는 어플리케이션이 코어 애니메이션 사용자 인터페이스를 디스플레이하는 방법이다.


다음과 같이 뷰 aView가 코어 애니메이션 레이어인 rootLayer 레이어를 호스트한다고 지정한다:

 
// aView is an existing view in a window
// rootLayer is the root layer of a layer tree
 
[aView setLayer:rootLayer];
[aView setWantsLayer:YES];


레이어-호스팅 뷰를 이용해 작업할때는, 보통 NSView를 서브클래스하고 키 입력이나 마우스 클릭과 같은 사용자 입력 이벤트는 필요하다면 코어 애니메이션 레이어를 수정해 가며, 그 서브클래스에서 처리한다.


NSView 와 코어 애니메이션이 함께 하는 두번째 타입은 layer-backed 뷰이다. Layer-backed 뷰는 코어 애니메이션 레이어를 backing store로 이용하여, 뷰가 스크린을 리프레시하는 책임으로부터 벗어나게 한다. 뷰는 그 컨튼트가 실제로 변경될 때만 다시 그려낸다. 뷰와 그 하부에 대해 layer-backing을 가능하게 하는 것은 다음 코드를 이용한다:


// aView is an existing view in a window
[aView setWantsLayer:YES];
 


뷰에 대한 layer backing이 사용가능하게 되면, 뷰와 그 모든 서브뷰들은 코어 애니메이션 레이어 트리에 의해 미러링된다. 뷰는 표준 아쿠아 컨트롤 또는 커스텀 뷰가 될 수 있다. 뷰와 그 서브뷰는 여전히 응답-체인안에 있으므로, 여전히 이벤트를 수신하고, 다른 뷰들과 같이 동작한다. 그러나 리드로잉이 필요할 때 컨텐트에 변화가 없다면, 어플리케이션이 아닌 렌더트리가 리드로우를 관리한다.


캐시 리드로잉 제공 외에, layer-backed 뷰는 다음과 같이 수많은 진보된 코어 애니메이션 레이어 프라퍼티의 시각적 프라퍼티를 보여준다:


- 뷰의 투명도 조절

- NSShadow 오브젝트를 이용해 지정하는 부가적인 그림자

- 뷰의 뒤에서 컨텐트가 합성되기 전에 컨텐트에 적용되고 부가적인 코어 이미지 필터의 배열.

- 뷰의 컨텐트를 그 배경과 합성하기 위해 사용되는 코어 이미지 필터

- 뷰와 그 서브뷰의 컨텐트에 적용되는 부가적인 코어 이미지 필터의 배열


Note: layer-backed모드에서 뷰를 사용할때, 레이어를 직접 수정하지 말고, NSView클래스에 노출되어 있는 레이어 메소드를 사용하도록 한다.


layer-backed 뷰에 대한 보다 자세한 정보는 View Programming Guide for Cocoa를 보라


[편집] Cocoa Animation Proxies

코어 애니메이션으로부터 단서를 얻어, Application Kit는 애니메이션 프락시를 통해 일반화된 애니메이션 장치의 개념을 지원한다.


NSAnimatablePropertyContainer 프로토콜을 지원하는 클래스들은 키-밸류 코딩에 호환되는 모든 프라퍼티에 대해 implicit 애니메이션을 지원한다. 애니메이션 프락시를 통해 실행하면, 코어 애니메이션에서 얻을 수 있는 것과 동일한 implicit 애니메이션을 얻을 수 있다.


예를 들어, 다음의 코드조각은 aView가 새로운 위치에서 디스플레이 되도록 한다


[aView setFrame:NSMakeRect(100.0,100.0,300.0,300.0)];


그러나, 애니메이션 프락시와 함께 같은 뷰 메소드를 사용하면 , aView는 새로운 위치로 부드럽게 이동한다


[[aView animator] setFrame:NSMakeRect(100.0,100.0,300.0,300.0)];


렌더 트리 프라퍼티에 직접 매핑하는 프라퍼티만 애니메이션을 하도록 하는 코어 애니메이션과 달리, Application Kit은 그 클래스가 NSAnimatablePropertyContainer 프로토콜을 구현하기만 하면 모든 키-밸류 코딩에 호환되는 프라퍼티들이 애니메이트 되도록 한다. 그 프라퍼티들을 애니메이팅 하는 것은 뷰가 그 컨텐츠를 다시 그리도록 하지만 그 프라퍼티들을 직접 애니메이팅 하는 것보다는 훨씬 수월하다. 코어 애니메이션 레이어를 함께 사용하면 애니메이트 되는 프라퍼티에 대한 디폴트 implicit 애니메이션을 변경할 수 있다.


Note: float, double, NSPoint, NSSize, NSrect들은 뷰가 layer-backing 가능으로 설정되어야 할 필요없이, NSAnimatablePropertyContainer의 메소드 animator에 의해 리턴되는 프락시를 이용해 애니메이트 가능하다.


코코아 애니메이션과 NSAnimatablePropertyContainer 프로토콜에 대한 추가적인 정보는 Animation Programming Guide for Cocoa를 보라.


[편집] Transitioning to and from Full Screen Mode

NSView 클래스는 풀 스크린 모드로 왔다갔다 할 때 손쉽게 사용할 수 있는 뷰 트랜지션 애니메이션 메소드를 제공한다. enterFullScreenMode:withOption:은 뷰가 넘어가면서 코어 애니메이션 트랜지션 애니메이션 동작할 타겟 스크린을 지정할 수 있게 한다. 풀 스크린 모드에서 빠져나오는 것은 exitFullScreenModeWithOption:을 사용하면 된다. 뷰가 풀 스크린 모드인지 아닌지는 isInFullScreenMode 메소드를 사용해 테스트 한다.


[편집] Additional Animation Support

NSAnimation과 NSViewAnimation 클래스들은 NSAnimationPropertyContainer 프로토콜 보다 단순하지만 덜 강력한 애니메이션 기능을 제공한다.


NSAnimation은 기본적인 타이밍 기능과 곡선 계산 진행, 애니메이션 비헤비어에 간단히 영향을 미칠 수 있는 델리게이트 메카니즘 그리고 애니메이션 구성을 묶는 기능을 제공한다


NSViewAnimation은 NSAnimation의 concrete 서브클래스로서, 애니메이팅 뷰 프레임의 변경(위치와 공간 모두)과 간단한 페이드-인, 페이드-아웃 효과 수행, 4개의 미리 지정된 프로그레스 커브를 사용할 수 있도록 한다. 뷰 애니메이션은 블로킹, 어싱크로너스 또는 쓰레드 어싱크로너스 할 수 있지만, 뷰 프레임 좌표계의 연속적인 증가는 뷰 인스턴스 그 자신에 의해 즉각 보간된다.


당신의 어플리케이션이 Mac OS X v10.5 이후에서 배포된다면, NSWindow와 NSView 클래스들에서 제공하는 애니메이션 프락시가 NSAnimation을 직접 사용하는 것보다 훨씬 편하다는 것을 알게 될 것이다.


NSAnimation과 NSViewAnimation은 Mac OS X v10.4 이후로 사용가능하다. NSAnimation과 NSViewAnimation에 대한 추가 정보는 Animation Programming Guide for Cocoa를 보라.

[편집] Choosing the Animation Technology for Your Application

당신의 어플리케이션이 사용할 애니메이션 기술을 선택하는 것은 모험일 것이다.

이 장에서는 당신의 어플리케이션이 코어 애니메이션, non-layer-backed 코코아 뷰, layer-backed 코코아 뷰중 어떤 것을 선택할지 혹은 기술들을 결합할지 결정하기 위한 가이드라인을 제공한다. 또한 코어 애니메이션과 layer-backed 코코아 뷰에 의해 제공되는 기능에 대한 요약을 제공한다.

[편집] Guidance

당신의 어플리케이션에 애니메이션을 더할때, 다음의 가이드 라인이 적당한 기술을 선택하는 데 도움이 될 것이다:


  • 사용자 인터페이스중 고정적이고, 회전하지 않는 아쿠아 컨트롤들만 필요한 곳에는 코코아 뷰를 사용하라.
  • 사용자 인터페이스에서 뷰나 윈도우의 프레임에서 간단한 애니메이션이 필요하다면 코코아 뷰와 윈도우에의해 지원되는 애니메이터 프락시 사용을 고려해 보라.
  • 사용자 인터페이스중 회전된 아쿠아 컨트롤을 디스플레이하고 사용하는 기능이 필요하다면, layer-backed 코코아 뷰를 사용하라.
  • 퍼포먼스 시험결과 당신의 커스컴 뷰가 프로세서나 시간을 많이 잡아먹는다면, layer-backed 코코아 뷰 사용을 고려해 보라. layer-backed 뷰는 non-layer-backed 뷰보다 메모리를 더 많이 사용한다는 것을 명심하라.
  • 당신의 커스텀 뷰가 방대한 이벤트 핸들링이 필요하다면 layer-backed 코코아 뷰를 사용하라
  • 유저 인터페이스의 일부가 적당한 그래픽과 애니메이션이 필요하고 아쿠아 컨트롤에 의존하지 않는다면, 코어 애니메이션 레이어를 직접 사용하는 것을 고려해보라. 레이어를 직접 사용하는 것은 모든 사용자 이벤트(마우스와 키보드 인터액션)를 당신이 직접 루트 레이어를 품고 있는 뷰를 오버라이드 해서 만들어야 한다.


그 반면에, 코어 애니메이션레이어는 코코아 뷰에 비해 계산이 많은 작업을 가볍게 할 수 있다. 코어 애니메이션 레이어를 사용하면 이런식으로 작은 구성요소로부터 인터페이스를 만들어 낼 수 있다. 코어 애니메이션 레이어 수천개의 레이어 오브젝트로 구성된 계층을 디스플레이 해야 할 때 이점을 준다.

[편집] Hybrid View/Core Animation Applications

하나의 사용자 인터페이스에 layer-backed 뷰, 레이어를 깔지 않은 뷰 그리고 레이어를 포함하는 뷰를 모두 조합할 때 주의할 점이 두가지 있다.

  • layer-backed 뷰의 모든 서브뷰들은 자동적으로 레이어가 back된다. 퍼포먼스를 향상시키기 위해서, layer-backed 뷰의 아랫단계 뷰를 애니메이션이 필요하다거나 캐쉬 드로잉이 필요한 경우가 아니라면 만들지 않아야 한다.
  • layer-hosting 뷰에는 layer-backed 뷰에 의해 관리되는 레이어 계층안에 넣기보다는 커스텀 코어 애니메이션 레이어를 host해야 한다.

[편집] Example: A Hybrid Application

코코아 슬라이드 샘플코드는 뷰/layer-backed 뷰 사용자 인터페이스 혼용의 예이다. 그림 3-1은 해당 뷰 계층을 보여준다.

그림:A_Cocoa_AnimationOverview_Content_view.jpg

그림3-1 layer-backed뷰와 전통적인 뷰 사용자 인터페이스의 혼용

SlideCollection뷰는 layer-backed뷰이며, 결과적으로 모든 Slide 서브뷰들은 마찬가지로 layer-backed이다. Layer-backed 뷰는 이 부분의 사용자 인터페이스에 이용되었는 데 그 이유는:


  • 슬라이드가 회전을 포함한 애니메이션을 요구한다; 뷰 애니메이션 프락시는 layer-backed하지 않는 이상 회전을 지원하지 않기 때문에 어쩔 수 없이 non-layer-backed 뷰를 사용할 수 밖에 없다.
  • 슬라이드는 표준 아쿠아 체크박스와 연동한다; 이 때문에 아쿠아 컨트롤을 제공하지 않는 Core Animation을 직접 사용하지 못한다. 코어 애니메이션에서 아쿠아 컨트롤의 모양과 느낌을 모방하는 것은 권장하지 않는다; Mac OS X의 차후 버전에서는 변경될 수 있다.

아쿠아 체크박스는 회전된 상태에서도 동작해야 하므로 non-layer-backed 뷰를 사용하는 것은 선택사항이 아니다;

  • 슬라이드는 그리기 복잡하다; layer-backed 뷰를 사용함으로서; 슬라이더의 컨텐트만 다시 그려진다.

윈도우 하단에 있는 사용자 인터페이스 부분은 layer-backed가 아닌 표준 아쿠아 컨트롤로 만들어졌다. 그 컨트롤들은 layer-backed 뷰 계층에 들어올 필요가 없다; 그들은 회전되지도 않을 것이고 캐시 드로잉으로 그다지 이익을 보지도 못한다.

[편집] Summary of Layer and View Capabilities

다음은 코어 애니메이션 레이어와 layer-backed 뷰의 공통적인 기능과 상대적인 장단점에 대한 간략한 요약이다.

[편집] Common Capabilities

  • 레이어와 layer-backed 뷰 모두 부모에 상대적인 좌표계를 가지는 내포된 계층 모델을 지원한다.
  • 레이어와 layer-backed 뷰 모두 손실된 부분을 다시 그려내기 위해 어플리케이션의 협조가 필요없는 캐시된 컨텐트를 지원한다.
  • 레이어와 layer-backed 뷰 모두 최대한의 미디어 타입을 지원한다.
  • 레이어와 layer-backed 뷰 모두 서브레이어/서브뷰의 바깥에서 다른 레이어/뷰에 의한 레이어/뷰의 오버래핑을 지원한다.


[편집] Layer Advantages

  • 레이어는 layer-backed 뷰에서 볼 수 없는 모서리 반경이나 외곽선과 같은 몇가지 시각적인 프라퍼티를 지원한다.
  • 서브레이어들은 레이어의 바운드 바깥에 있을 수도 있다.
  • 레이어는 복잡한 마스킹을 지원한다
  • 레이어는 계산이 많은 작업을 가볍게 한다
  • 레이어는 복잡한 트랜스폼을 지원한다
  • 레이아웃 매니저는 레이어의 위치를 잡는 것을 보다 유연하게 통제한다.

[편집] Advantages of Layer-Backed Views

  • Layer-backed 뷰는 응답 체인에 참여한다.
  • Layer-backed 뷰는 사용자 이벤트를 받는다.
  • Layer-backed 뷰는 드래그 앤 드랍을 지원한다.
  • Layer-backed 뷰는 액세서빌리티를 지원한다.
  • Layer-backed 뷰는 모든 표준 아쿠아 컨트롤과 뷰를 지원한다.
  • Layer-backed 뷰는 스크롤을 지원한다.
  • Layer-backed 뷰는 텍스트 입력을 지원한다.


번역자 사용자:LingoStar
원본문서링크 http://developer.apple.com/documentation/GraphicsImaging/Conceptual/Animation_Overview/index.html (Last Updated - 2007-10-29)