2011-10-22 48 views
1

我有一個CAGradientLayer,我想在用戶拖動手指時縮放。但是,當我設置框架時,圖層會以新尺寸動畫。這也發生在其他屬性上,包括start/endPoint。爲什麼我的CAGradientLayer會動畫所有更改?

下面是一個例子:

_gradient.frame = CGRectMake(0, 480-toHeight, 320, toHeight); 

然而,如果我只把這個當用戶已經拖10個左右的像素,該層不只是跳轉到新的大小,它動畫平滑,但快速緩解動畫。我肯定這不是在動畫塊中調用的。爲了進一步調試,我還將UIView的框架設置在相同的範圍內,並且不進行動畫製作。

我是CALayers的新手,所以也許我做的事情是錯的。

+1

你能發表一些代碼嗎? – mjisrawi

+0

你有沒有把你的代碼包裝在.. \t'[UIView beginAnimations:nil context:NULL];'它是'commit' ..或者在打開它後忘了'commit'?所以@mjisrawi說..張貼一些代碼.. – rptwsthi

回答

9

默認情況下,CALayer的大部分屬性都是動畫。你需要禁用這些隱式動畫:

[CATransaction begin]; 
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions]; 
// change layer's properties 
_gradient.frame = newFrame; 
[CATransaction commit]; 

Here is a good sample來幫助你學習核心動畫。

+0

真棒!你好,男人! – HotJard

3

從核心動畫編程指南:

「更改動畫層屬性的值,使得該層隱含動畫與舊值新值的變化。」

所以,如果你不想動畫,你需要告訴iOS的不明確與動畫:

[CATransaction begin]; 
[CATransaction setAnimationDuration:0.0]; 
_gradient.frame = CGRectMake(0, 480-toHeight, 320, toHeight); 
[CATransaction commit]; 

好運!

相關問題