2014-05-23 2 views
1

CATransaction을 사용하여 코어 애니메이션 작업을하고 있습니다. 애니메이션이 완료되면 캡쳐하여 뷰 컨트롤러의 데이터로 처리 할 수 ​​있도록 캡처하기 위해 setCompletionBlock을 사용하고 있지만 애니메이션을 중단 가능하게하려고합니다. 예 : 내가거래 완료 블록 성공 또는 실패

[self.layer의 removeAllAnimations]

를 호출 할 때 애니메이션이 중지해야하지만 애니메이션이 성공 또는 실패하면 setCompletionBlock도 을 알아야한다. 이 완료된 블록과 CAAnimationGroup으로 통과 finished 변수는이 위임을 통과 finished 변수 수도 있으므로 UIView의 애니메이션

이 가능하다. CATransaction으로 어떻게 동일한 작업을 수행 할 수 있습니까?

답변

2

키 - 값 코딩을 사용하면 원하는 변수를 나중에 완료 블록에서 선택할 수있는 현재 트랜잭션으로 전달할 수 있습니다. CATransaction, CAAnimation, CALayer, 그들은 모두 당신이 만들고 마음의 콘텐츠에 사용할 수있는 임의의 키 - 값 쌍을 허용합니다.

https://developer.apple.com/library/ios/documentation/graphicsimaging/Reference/CATransaction_class/Introduction/Introduction.html#//apple_ref/occ/clm/CATransaction/setValue:forKey:

+0

나는 CAAnimation 개체와의 CALayer 객체에 임의의 키/값 쌍을 부착 트릭을 사용했습니다 그것은 잘 작동합니다. 그러나 CATransaction은 클래스 메소드 일뿐입니다. CATransaction 인스턴스와 상호 작용하는 방법을 모르며 CATransaction과 같은 클래스에 키/값 쌍을 연결하는 방법을 모릅니다. 설명 할 수 있니? –

+0

관련된 인스턴스가 없습니다. 당신은'[CATransaction setValue : @YES forKey : @ "cancell"]'라고 말하고'if ([CATransaction valueForKey : @ "cancelled"])'로 나중에 그것을 집어들 것입니다. 내가 제공 한 문서에 대한 링크를 보셨습니까? – matt

+0

그래, 중첩 된 CATransactions의 범위가있는 것 같습니다. 수동 프로세스가 어떻게 이루어지는 지, 서브 레이어의 모든 변경 사항도 취소되었는지 확인해야합니다. 이 답변이지만, 언급 한 이유로 그것을 사용하기로 결정했다. UIView와 CAAnimationGroup은 당신을 위해 그것을 추적합니다. 그래서 더 이상 사용할 수 없게 될 때까지는 지금 당장 제가 고수하고 있습니다. – kungfoo