2011-10-22 46 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]; 

好运!

相关问题