2013-12-16 5 views
2

CAAction 프로토콜은 제대로 문서화되지 않은 것으로 보이며 책과 블로그에는 거의 언급되지 않았습니다. 그것의 유일한 방법을위한 논쟁, runActionForKey:object:arguments:는, 조금 신비하다. 내 경험상, "객체"인수는 항상 CALayer 인 것처럼 보이고 "인수"사전은 항상 nil입니다.CAAction의 runActionForKey : object : arguments : 인수에는 어떤 값을 사용할 수 있습니까?

프로토콜이 Core Animation의 여러 위치에서 사용되도록 설계된 것 같습니다. 그렇지 않으면 레이어 인수의 유형을 정의하지 않는 이유와 사용되지 않는 추가 사전이있는 이유는 무엇입니까? 하지만 알 수있는 한, CALayer과 함께 사용됩니다. 그 맞습니까? 위의 결론이 사실이 아닌 사례가있는 사람이 있습니까?

답변

1

아니요, CAAction은 다른 API에서 사용되지 않았습니다. 프로토콜이 설계되었을 때, 나중에 유용하게 쓰일 수 있도록하기 위해 범용으로 남았지 만, 아무것도 나오지 않았습니다.

고유 한 레이어 액션을 정의하고 호출하는 것이 간단합니다. 인위적인 예는 이벤트 특정 데이터 일종의 통과 히트 테스트 레이어로 "mouseDown"조치 파견 될 수있다 : 당신이 액션이 애니메이션을 추가 할 수 없습니다 것

다음
CALayer *layer = myHitTest(…); 
[[layer actionForKey:@“mouseDown”] 
runActionForKey:@“mouseDown” object:layer arguments:@{…}]; 

을, 그래서 구현하는 것이 이벤트를 처리하는 클래스의 CAAction 프로토콜을 사용하고 해당 클래스의 인스턴스를 레이어의 actions 사전에 넣습니다.

1

CAAction 유일한 실제 사용 암시 애니메이션의 기초로이다 - 즉, 그것은

myLayer.position = // ... whatever ... 

같은 식으로 층의 변화를 애니메이션 마법 수있는 메카니즘의 중심에 위치 (UIView의 기본 기본 레이어가 아니라고 가정). 작업 검색 메커니즘의 완전한 설명은

, 내 책을 참조하십시오

http://www.apeth.com/iOSBook/ch17.html#_actions_2

+0

감사합니다, @ 매트를. 나는 당신의 책을 가지고 있고, 나는 이미 그것을 읽었습니다. (지난 주이 장에서 많은 시간을 보냈습니다!) 검색 메커니즘에 연결하는 방법을 이해합니다. 필자가 언급 한 이상한 점을 감안할 때, 프로토콜의 설계와 사용법을 이해하려고 노력했습니다. 나는 블록을 사용하여'CAAction'을 생성하기위한 래퍼 (wrapper)를 만들고 가능한 경우 인터페이스를 단순화하기를 원했습니다. –

+0

@matt에게도 감사합니다.하지만 Ch 17에서 두 가지 오류/누락이 있다고 생각합니다. 액션 검색에 연결. Nil을 반환해도 애니메이션이 비활성화되지 않습니다. [1.2] (https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreAnimation_guide/ReactingtoLayerChanges/ReactingtoLayerChanges)에 따라 검색이 계속됩니다. html # // apple_ref/doc/uid/TP40004514-CH7-SW2). NSNull을 반환하면 검색을 중단하지만 (1.3). 두 번째로, 트리거는 KVC 속성에도있을 수 있습니다 (애니메이션 가능하지 않은 경우에도 동일한 링크). –

+0

@chrisco 검색 결과가 책의 최신판에 정확하게 설명되어 있다고 생각합니다. KVC를 사용하여 검색을 시작하는 것에 대해 감사드립니다. 아직 다른 에디션이 있다면 추가해 보겠습니다. – matt