2014-07-12 4 views
3

AVPlayerLayer에서 "축소"애니메이션을 만들려고하고 있지만 비디오 콘텐츠가 화면에서 사라지 자마자. AVPlayerLayer를 유지하면서 UIView를 애니메이트하지만 AVPlayerLayer는 작동하지 않습니다. 그것을 애니메이션화하는 올바른 방법은 무엇입니까?AVPlayerLayer 애니메이션 축소

CGRect oldBounds = playerLayer.bounds; 
CGRect newBounds = oldBounds; 
newBounds.size = CGSizeZero; 
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"bounds"]; 
animation.duration = 5.f; 
animation.beginTime = CACurrentMediaTime(); 
animation.fromValue = [NSValue valueWithCGRect:oldBounds]; 
animation.toValue = [NSValue valueWithCGRect:newBounds]; 


[playerLayer addAnimation:animation forKey:@"shrink"]; 
+1

해결 방법을 찾으셨습니까? 나는 AVPlayerLayer가 UIView를 지원하는 것과 비슷한 것을하려고 노력하고있다. – jlw

+0

같은 문제가 있습니다. – Greensource

답변

0

iOS는보기로 제어 할 때 애니메이션을 기본적으로 해제합니다. 그러나 UIView에서 속성에 애니메이션을 적용하면 레이어의 애니메이션 기능이 잠시 켜지고 실행될 레이어에 애니메이션 매개 변수가 전송 된 다음 레이어의 애니메이션 기능이 해제됩니다. 즉, 애니메이션은 레이어가 아니라 UIView를 제어합니다.

그렇다면 내 AVPlayerLayer를 통해 내 UIView를 통해 애니메이션을 생성하는 방법을 알 수 없습니다. 위에서 언급 한 내용은 작동 방법에 관한 것이었지만 지금은 작동하지 않습니다. ㅎ.

0

이것은 놀랄 일이 아닙니다. AVPlayerLayerQuartzCore 프레임 워크 내에 존재하지 않거나 CA 클래스 접두사가 없으므로 특수 레이어 클래스입니다. 또한 비디오 프레임을 디스플레이에 렌더링하기 위해 고도로 최적화되어 있습니다. AVPlayerLayer에 UIKit을 통해 간접적으로 또는 직접 Core Animation을 통해 애니메이션을 추가하려고하면 이상한 행동이 발생합니다.

아마 모든 종류의 애니메이션을 AVPlayerLayer에 적용하는 유일한 방법은 호스트보기의 스냅 샷을 만들거나 레이어 내용을 그래픽 컨텍스트에 직접 렌더링하는 것입니다. 그러나 후자가 작동하지 않는다면 놀라지 않을 것입니다. AVPlayerLayer에는 Core Animation에서 렌더링 할 수있는 백업 저장소가 없을 수 있습니다.