我正試圖在CALayer上實現自定義屬性的動畫。我已經設置了財產作爲動態的,它主要是工作。在我的應用程序中,我可能會有一個或多個此圖層的實例,所有這些實例都應該同時進行動畫製作。但是,有時當動畫被觸發時,一些圖層不會執行動畫。他們簡單地直接跳到最終值。從CABasicAnimation執行不可靠
在嘗試調試問題時,它看起來像動畫開始時,具有問題的圖層在其動畫屬性的最終值的模型圖層上重繪。剩下的圖層僅在動畫屬性的瞬態值上重繪其表示層。它通常是最後一個有問題的圖層,但有時它是隨機圖層。
它很零星,我不確定接下來要看的地方。
這裏的代碼,觸發動畫片段:
@dynamic aspectModeFraction;
- (id<CAAction>)actionForKey:(NSString *)key
{
if ([key isEqualToString:@"aspectModeFraction"])
{
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:key];
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
animation.fromValue = @([[self presentationLayer] aspectModeFraction]);
animation.duration = 2.0f;
animation.delegate = self;
return animation;
}
return [super actionForKey:key];
}
+ (BOOL)needsDisplayForKey:(NSString *)key {
if ([@"fullRect" isEqualToString:key]) { return YES; }
if ([@"localRect" isEqualToString:key]) { return YES; }
if ([@"screens" isEqualToString:key]) { return YES; }
if ([@"aspectModeFraction" isEqualToString:key]) { return YES; }
return [super needsDisplayForKey:key];
}
你是如何要求動畫?根據我的經驗,使用鍵值編碼始終有效。所以如果你說'myLayer.aspectModeFraction = whatever',試着說'[myLayer setValue:whatever forKey:@「aspectModeFraction」]''看看是否有所作爲。 – matt 2014-08-30 05:25:09