epo*_*gee 3 cocoa cocoa-touch core-animation objective-c objective-c-blocks
该视图编程指南适用于iOS告诉我们,基于块的动画是前进的道路,而不是现在几乎弃用begin/ commit风格的动画:
注意:如果您正在为iOS 4或更高版本编写应用程序,则应使用基于块的方法来设置动画内容.有关如何使用这些方法的信息,请参阅"使用基于块的方法启动动画".
但是现在我处于需要使用自定义计时功能的情况,CAMediaTimingFunction因此我使用了CATransactions和CABasicAnimations.这些类使用相同的语义语言与类似方法已过时的UIView动画风格[CATransaction begin]和[CATransaction commit].在应用程序中间只是感觉很奇怪,其他一切都是基于块的.
有没有办法将像CAMediaTimingFunctions 这样的概念与基于块的动画结合起来?
我想要"阻止"的一段示例代码如下所示:*
[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];
Run Code Online (Sandbox Code Playgroud)
我已经为我的另一个问题做了一个示例项目,其中包含上面的代码.它在github上.
但是现在我处于需要使用自定义计时功能CAMediaTimingFunction的情况,因此我使用了CATransactions和CABasicAnimations.这些类使用与已弃用的UIView动画样式相同的语义语言,使用[CATransaction begin]和[CATransaction commit]等方法.在应用程序中间只是感觉很奇怪,其他一切都是基于块的.
我认为你误读了文档.
基于块的动画是进行UIView动画的方式.期.完全停止.
此声明与CoreAnimation不对应.您仍然必须使用开始/提交CoreAnimation.不要假设CA开始和提交都很糟糕,只是因为更高级别的构造(UIView)不赞成使用begin/commit.
有没有办法将像CAMediaTimingFunctions这样的概念与基于块的动画结合起来?