2012-06-24 64 views
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?

+0

這是因爲'CALayer'沒有名爲'transform.scale.y'的屬性。 –

+0

@ZeusAlexander但它是一個非常有效的動畫關鍵路徑。請再次閱讀[文檔](https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreAnimation_guide/Articles/Layers.html#//apple_ref/doc/uid/TP40006082-SW1)。 –

+0

將self.layer投射到漸變圖層並在之後進行動畫處理會不會有點奇怪?我以爲你會添加自己的圖層,並通過伊娃引用它。如果在doAnimation中設置斷點並檢查狀態會發生什麼?如果您改變其他一些屬性的動畫會發生什麼?注意:顯式動畫永遠不會改變實際值,所以在動畫之後數值會跳回原來的狀態,這是你所看到的嗎? –

回答

0

我似乎記得使用0的比例會導致圖層摺疊爲零大小。嘗試使用.001而不是0的尺寸。