我需要在iOS 3.2上实现非常定制的动画,所以在4.0之前,我既不能使用块动画,也不能使用UIKit动画。我试着用核心动画。
这是我的密码:
[CATransaction begin];
[CATransaction setAnimationDuration: 3.0];
[CATransaction setDisableActions: YES];
someView.frame = CGRectMake(endX, 0, endWidth, height);
// a lot of another property changes
[CATransaction commit];不幸的是,它不能工作:视图立即改变大小/不透明度,没有任何动画。
以下是我的尝试:
解决方案要求:
发布于 2012-07-04 02:08:43
您发布的代码显式禁用动画。这条线是罪魁祸首:
[CATransaction setDisableActions: YES];通过调用,您的事务中所做的所有更改都将立即提交,而不需要动画。去掉这一行,变化就会活跃起来。
如果您需要一个自定义曲线,您可能需要使用CABasicAnimation,就像其他人建议的那样。实际上,CAAnimation对象只适用于单个层,因此您必须创建多个CAAnimation对象。
或者,您应该能够使用CATransaction方法setAnimationTimingFunction,并将创建的自定义计时函数传递给它。请参阅CAMediaTimingFunction类引用。特别是查看functionWithControlPoints:方法,它允许您通过为描述定时函数的bezier曲线指定控制点来创建定时函数。您只限于从0,0开始,以1,1结尾的单个三次bezier。没有对更复杂的计时函数的直接支持,尽管我已经看到了实现更复杂效果的黑客。
发布于 2012-07-03 12:05:51
不确定这是否是您想要的,但您可以使用UIView动画
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:3.0];
someView.frame = CGRectMake(endX, 0, endWidth, height);
// a lot of another property changes
[UIView commitAnimations];发布于 2012-07-03 12:31:18
如果您只想拥有一个定制的计时函数,那么您可以使用一个CABasicAnimation来完成它。您可以创建一个定制的定时函数(这是一个从(0,0)到(1,1)的bezier曲线,其中有两个控制点可以指定。
如果这对您来说还不够(如果您需要超过2个控制点来执行计时功能),那么您必须使用一个CAKeyframeAnumation。然后您可以指定任意数量的值(使用values属性(数组))。
在这两种情况下,您都会为键盘“框架”创建一个动画对象,并将动画添加到视图层。请注意,显式地动画属性不会更改值,因此在动画te框架之后将返回其原始值,除非您同时动画化并更改该值。
https://stackoverflow.com/questions/11310493
复制相似问题