iOS视图编程指南告诉我们,基于块的动画是未来的趋势,而不是现在几乎被弃用的begin
/commit
样式动画:
注意:如果您正在为iOS 4或更高版本编写应用程序,则应改用基于块的方法来动画显示内容。有关如何使用这些方法的信息,请参见“使用基于块的方法启动动画”。
但是现在我遇到了需要使用自定义计时函数CAMediaTimingFunction
的情况,所以我使用了CATransaction
和CABasicAnimation
。这些类使用与已弃用的UIView动画样式相同的语义语言,例如[CATransaction begin]
和[CATransaction commit]
方法。在一切都是基于块的应用程序中,这感觉很奇怪。
是否有一种方法可以将CAMediaTimingFunction
等概念与基于块的动画结合起来?
更新1:
我想要“块化”的示例代码如下所示:*
[CATransaction begin];
{
[CATransaction setValue:[NSNumber numberWithFloat:3.0f] forKey:kCATransactionAnimationDuration];
CGPoint low = CGPointMake(0.150, 0.000);
CGPoint high = CGPointMake(0.500, 0.000);
[CATransaction begin];
{
CAMediaTimingFunction* perfectIn = [CAMediaTimingFunction functionWithControlPoints:low.x :low.y :1.0 - high.x :1.0 - high.y];
[CATransaction setAnimationTimingFunction: perfectIn];
CABasicAnimation *fadeIn = [CABasicAnimation animationWithKeyPath:@"opacity"];
fadeIn.fromValue = [NSNumber numberWithFloat:0];
fadeIn.toValue = [NSNumber numberWithFloat:1.0];
[viewB.layer addAnimation:fadeIn forKey:@"animateOpacity"];
}
[CATransaction commit];
}
[CATransaction commit];
更新2
我为我另一个问题制作了一个示例项目,其中包含上述代码。 它在github上。
UIView
上创建一个类别,其中包含一个将CAAnimation
相关内容封装在一个漂亮的块中的方法,怎么样? - Paul.s