2010-08-03 73 views
4

我有一個子圖層UIView,它由幾個圖層組成(主要是CAShapeLayers和幾個CATextLayers)。我的問題是,如果我動畫使用動畫塊beginAnimationscommitAnimations)調整大小的UIView和重新佈局在子層覆蓋layoutSubviews,則所述層不與UIView動畫。動畫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]; 

所以問題是,認爲正確的動畫,但子層都沒有。我可以看到視圖在不斷增大和縮小,但子層立即增長,然後保持新的更大尺寸。調整視圖大小時調整視圖子圖層的最佳方式是什麼?我如何使用父視圖以相同的方式創建動畫?

+0

你有沒有找到答案?我和諾亞有同樣的問題。 Brandon提供的解決方案稍微有點不同,因爲它只是將子圖層縮放爲圖層的一部分,而不是在動畫期間實際重新繪製它們的新大小。 – 2011-01-25 20:37:59

回答

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動畫...方法。 – 2011-10-18 09:43:54