0
我正試圖在CAGradientLayer上對變換進行動畫處理,但無論我做什麼,我都無法使變化發生。這段代碼運行後,圖層仍然不可見(即scale.y仍然是0.0f)。CALayer上的CABasicAnimation變換出現問題
@implementation NickView
+(Class) layerClass {
return [CAGradientLayer class];
}
- (void) didMoveToWindow {
self.backgroundColor = [UIColor clearColor];
CAGradientLayer* gLayer = (CAGradientLayer*)self.layer;
[gLayer setColors:
[NSArray arrayWithObjects:
(id) [UIColor blackColor].CGColor,
(id) [UIColor redColor].CGColor,
(id) [UIColor blackColor].CGColor,
nil]];
gLayer.transform = CATransform3DMakeScale(1.0, 0.0f, 1.0f);
[self performSelector:@selector(doAnimation) withObject:nil afterDelay:3.0f];
}
- (void) doAnimation {
CABasicAnimation* a = [CABasicAnimation animationWithKeyPath:@"transform.scale.y"];
a.delegate = self;
a.duration = 5.0f;
a.toValue = [NSNumber numberWithFloat:1.0f];
[self.layer addAnimation:a forKey:@"anim"];
}
}
有誰知道爲什麼,這並不在該層的scale.y結果是動畫回到1?
這是因爲'CALayer'沒有名爲'transform.scale.y'的屬性。 –
@ZeusAlexander但它是一個非常有效的動畫關鍵路徑。請再次閱讀[文檔](https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreAnimation_guide/Articles/Layers.html#//apple_ref/doc/uid/TP40006082-SW1)。 –
將self.layer投射到漸變圖層並在之後進行動畫處理會不會有點奇怪?我以爲你會添加自己的圖層,並通過伊娃引用它。如果在doAnimation中設置斷點並檢查狀態會發生什麼?如果您改變其他一些屬性的動畫會發生什麼?注意:顯式動畫永遠不會改變實際值,所以在動畫之後數值會跳回原來的狀態,這是你所看到的嗎? –