2009-07-16 5 views
72

나는 으로 CALayer과 애니메이션을 개념화하는 데 어려움을 겪고 있습니다. UIView의 자신의 애니메이션 방법입니다. "Core Animation"을 여기에 던지십시오. 어쩌면 누군가가 이러한 개념을 고차원 적으로 표현할 수 있기 때문에 상황을 시각화하고 UIView 애니메이션을 마이그레이션해야하는 이유를 시각화 할 수 있습니다 (지금은 매우 익숙합니다) iPhone에서 CALayer 애니메이션에 이르기까지. Cocoa-Touch의 모든 뷰는 자동으로 레이어를 가져옵니다. 그리고 하나의 및/또는 다른 하나를 움직일 수 있습니다.?!? 함께 사용해도 되나요?!? 하지만 왜? 그 선은 어디 있니? 각각의 프로/죄수는 무엇입니까?UIView animation 대 ​​CALayers

Core Animation Programming Guide는 즉시 & Timing Classes로 건너 뜁니다.이 다양한 곡들이 왜 존재하고 서로 관련이 있는지 이해해야합니다.

+3

이것은 탁월한 범용 질문이었으며 모든 대답이 우수합니다. 이 스레드에서 모두에게 투표했습니다. – mobibob

+0

큰 질문입니다. 누구든지 UIView의 CALayer 애니메이션에 대한 모범 사례를 알고 있습니까?내 예제에서는 3D 효과가 필요하고 UIView의 '프레임'이 레이어와 정렬되지 않아 레이어가 애니메이션으로 표시됩니다 (버튼의 경우 탭이 더 이상 일치하지 않음). – Marc

답변

53

안구 캔디의 컨트롤 및 레이어보기를 사용합니다. 레이어는 이벤트를 수신하지 않으므로 이러한 경우에는보기를 사용하는 것이 더 쉽지만 스프라이트 나 배경 등을 애니메이션으로 만들려면 레이어가 의미가 있습니다. 이벤트는 레이어를 통해 백킹보기로 전달되므로 이벤트를 망치지 않고도 시각적으로 표현할 수 있습니다. 시각적 인 표현을 위해 사용중인 뷰를 오버레이하여 탭 이벤트를 직접 본래의 뷰로 전달해야합니다.

+1

그 덕분에, 덕분에 :) – Spanky

+0

이것은 좋은 대답입니다. 고맙습니다! – Warpling

9

UIView 변환은 2D 뿐이며 LAyer 변환은 3D가 될 수 있으며 3D 소재를 사용하려면이 변환을 사용해야합니다. UIView 변환 또는 CALayer 변환을 변경하면 UIView 애니메이션이 작동합니다. 따라서 기본 수준에서는보기가 아닌 계층을 사용하여 작업 할 때 훨씬 더 많은 조작을 할 수 있습니다.

24

UIView은 항상 CALayer으로 렌더링됩니다. UIView 메서드를 사용하여 뷰에 애니메이션을 적용하면 효과적으로 CALayer 하위를 조작 할 수 있습니다.

간단한 작업이 필요한 경우 UIView 방법을 사용하십시오. 보다 복잡한 상황의 경우 또는 특정보기와 관련되지 않은 레이어를 원하면 CALayers을 사용하십시오.

20

저는 지난 한 해 동안 여러 가지 앱을 만들었습니다. 엄지 손가락의 규칙은 다음과 같습니다.

  1. UIView가 원하는 것을 수행 할 때까지 사용하십시오.
  2. 그런 다음 CoreAnimation으로 이동하십시오. 하지만 너무 많이 들어가기 전에 ...
  3. 몇 개 이상의 애니메이션을 작성하려면 Cocos2D를 사용하십시오.
+0

Cocos2D는 무엇을 더 잘하고 있습니까? OpenGL ES에서 누락 된 터치 이벤트 처리 및 기타 많은 것들과 관련하여 다른 문제가 있습니까? – Thanks

+0

Cocos2D는 많은 편의 메소드를 추가하므로 코드가 훨씬 더 간단합니다. 그들은 훌륭한 내장 효과를 가지고 있습니다. 간단히 말해서, 애니메이션을 많이 사용하는 경우 Cocos2D를 사용하는 경우 OpenGL ES 또는 Core Animation보다 적은 코드를 작성할 수 있습니다. 그들은 그들 만의 터치 처리 방법을 가지고 있기 때문에 전혀 문제가되지 않습니다. –

+13

내 제안은 게임을 작성하지 않는 한 Cocos2D를 사용하지 않는 것입니다. 나는 그것이 실제로 최상의 유스 케이스라고 생각한다. 그래도 가능한 한 오랫동안 UIView 애니메이션을 사용해야하며 그 이상으로 CoreAnimation을 사용해야한다는 것에 동의합니다. –

2

"Cocos2D가 더 잘하고있는 것"에 대한 Chris의 답변을 오해하고 있는지 잘 모르겠습니까? OpenGL ES에서 누락 된 터치 이벤트 처리 및 기타 많은 것들에 대해 다른 문제가 있습니까?

실제로 Cocos2D는 OpenGL ES 프레임 워크를 기반으로하지 않습니다. 훌륭한 2D 게임 엔진이지만 많은 부분 렌더링을 위해 OpenGL을 구현합니다. 물리 라이브러리에 첨부되어 애니메이션에 대한 많은 흥미로운 가능성을 제공합니다. Chris는 맞습니다. 실제로 코딩은 훨씬 적습니다.