2010-08-03 6 views
4

하위 레이어로 구성된 UIView은 여러 레이어 (주로 CAShapeLayers, 소수는 CATextLayers)로 구성되어 있습니다. I가 가진 문제는이 애니메이션 블록 (beginAnimations, commitAnimations)를 사용 UIView 크기 조정 및 의 부층 재 레이아웃 layoutSubviews 재정의 애니메이션이면 층이 UIView와 애니메이션 아니라는 것이다. 그래서 문제가 뷰가 제대로 애니메이션하지만 서브 레이어가 아닌된다는 점이다UIView 및 하위 레이어 애니메이션

miniView.backgroundColor = [UIColor orangeColor]; 

[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:1.0f]; 
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 
[UIView setAnimationRepeatCount:MAXFLOAT]; 
[UIView setAnimationRepeatAutoreverses:YES]; 

miniView.frame = newFrame; 

[UIView commitAnimations]; 

:

는 아래 UIView의 프레임 애니메이션을 내 코드입니다. 보기가 커지고 축소되는 것을 볼 수 있지만 하위 레이어는 즉시 커지고 새로운 큰 크기로 유지됩니다. 보기 크기를 조정할 때보기의 하위 계층 크기를 조정하는 가장 좋은 방법은 무엇입니까? 그리고 부모 뷰를 사용하여 같은 방식으로 애니메이션을 만드는 방법은 무엇입니까?

+0

답변을 찾으셨습니까? 나는 노아와 똑같은 문제가있다. Brandon에서 제공하는 솔루션은 하위 레이어를 애니메이션 중에 새로운 크기로 실제로 다시 그리는 대신 레이어의 일부로 확장 한 이후로 약간 다릅니다. –

답변

1

정말 문제를 해결하기 위해 더 많은 코드가 필요하지만보기 대신 miniView의 레이어를 애니메이션으로 만들 수 있습니다.

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.scale"]; 
animation.fromValue = [NSNumber numberWithFloat:0.0]; 
animation.toValue = [NSNumber numberWithFloat:1.0]; 
// additional setup... 

[miniView.layer layoutIfNeeded]; 
[miniView.layer addAnimation:animation forKey:@"whateverYouWant"]; 

UIKit 애니메이션을 사용하는 대신이 방법을 사용하면 유연성이 높아집니다.

+1

비슷한 문제가있었습니다. 이 게시물은 나에게 힌트를 주었다. UIView 애니메이션은 UIKit 뷰 등에서 만 작동합니다. CALayer 객체를 애니메이트하려면 CoreAnimation API를 사용하고 UIView animate ... 메서드를 사용하지 않아야합니다. –

관련 문제