我需要在iOS 3.2上实现非常自定义的动画
因此,在4.0之前,我既不能使用块动画也不可以使用UIKit动画。我尝试使用Core Animation。

这是我的代码:

[CATransaction begin];
[CATransaction setAnimationDuration: 3.0];
[CATransaction setDisableActions: YES];
someView.frame = CGRectMake(endX, 0, endWidth, height);
// a lot of another property changes
[CATransaction commit];


不幸的是,它不起作用:视图立即更改大小/不透明度,没有任何动画。

这是我的尝试:


我将新框架设置为不查看,而是设置其图层(someView.layer.frame = ...)-甚至更糟,因为未调整视图的子视图大小。
我将禁用操作选项设置为是和否。


解决方案要求:


必须支持iOS 3.2(无块)。
动画必须应用于不同的视图(因此,必须应用于不同的图层)。
动画曲线非常困难,因此我不能使用预定义的动画曲线(或使用CA语言的MediaTimingFunction)。

最佳答案

您发布的代码明确禁用了动画。这是罪魁祸首:

[CATransaction setDisableActions: YES];


通过发出该调用,您交易中所做的所有更改将立即提交,而不会进行动画处理。摆脱那条线,所做的更改应设置动画。

如果需要自定义曲线,则可能需要使用CABasicAnimation,如其他人建议的那样。实际上,CAAnimation对象仅适用于单个图层,因此您必须创建多个CAAnimation对象。

或者,您应该能够使用CATransaction方法setAnimationTimingFunction,并将您创建的自定义计时函数传递给它。请参阅CAMediaTimingFunction类参考。特别要看一下方法functionWithControlPoints ::::,该方法使您可以通过为描述您的计时功能的贝塞尔曲线指定控制点来创建计时功能。您限于一个从0,0开始到1,1结束的立方贝塞尔曲线。尽管我看到了实现更复杂效果的hack,但是并没有直接支持更复杂的计时功能。

10-06 07:56