是否setAnimationBeginsFromCurrentState=YES在ios5或iPad上不起作用?



我的动画不会从当前状态中拾取,而在飞行中,当另一个启动时,即使我所有的动画块都配置为:

setAnimationBeginsFromCurrentState=YES

对于基于块的动画(iOS 4以来的新方法)也是如此,使用UIViewAnimationOptionBeginFromCurrentState选项集。

在我所有的旧设备上,这工作得很好。在iOS 5和iPad Simulator上则不然。有解决办法吗?

(注意:它似乎在所有测试的设备上工作。只是不是模拟器。)

下面是一个在4.3或5.0 iPad模拟器中不工作的例子:

[UIView animateWithDuration:0.5 
                      delay:1.0f 
                    options:UIViewAnimationOptionCurveEaseIn | UIViewAnimationOptionBeginFromCurrentState | 
 UIViewAnimationOptionOverrideInheritedDuration | UIViewAnimationOptionOverrideInheritedCurve 
                 animations:^{
                     self.layer.transform = CATransform3DScale(CATransform3DIdentity, 0.5f, 0.5f, 1.0f);
                 }  
                 completion:^(BOOL finished) {
                    [self performSelector:@selector(finishedScaling)];
                 }];

另一个动画开始设置转换比例为0.1,0.1(=非常小)。在飞行过程中,这个动画开始播放,并试图将其拉回0.5,0.5。当启动时,先前启动的动画突然以0.1,0.1(=非常小)结束。然后从0.1回调到0.5。不应该发生的。也许是一个糟糕的期权组合?

您在视图动画块中说self.layer.transform =。视图动画块用于使视图动画化。你可以通过设置视图的可动画属性来实现,而不是图层的可动画属性。

此外,如果self是一个视图,那么self.layer.transform是不可隐式动画化的。你不能隐式地(即通过设置属性)动画视图的底层。当你输入self.layer.transform =时,图层总是会跳转到新的值。

所以解决方案是说self.transform =(如果self是一个视图),否则根本不使用基于块的动画-使用核心动画(例如CABasicAnimation)来动画图层

下面是一个有效的例子:

        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationDuration:1];
        CGPoint p = v.center;
        p.x += 100;
        v.center = p;
        [UIView commitAnimations];
        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationBeginsFromCurrentState:YES];
        [UIView setAnimationDuration:1];
        CGPoint p2 = v.center;
        p2.y = 0; // and try changing x to y
        v.center = p2;
        [UIView commitAnimations];

使用setAnimationBeginsFromCurrentState:YES,这两个动画一起工作,一起改变视图的x和y位置。如果没有它,第一个动画将表示为在第二个动画开始之前向右"跳转"。所以我会说setAnimationBeginsFromCurrentState:YES仍然在正确地做它的工作。它在iPad模拟器上的工作方式和其他地方一样。这里有一个反例

你能按照另一个注释的要求,实际显示不工作的代码吗?(您已经显示了第二个动画的示例代码,但没有显示第一个动画的示例代码,因此无法进行测试。)

最新更新