Iphone setAnimationBeginsFromCurrentState=是在iOS 5或iPad上不工作吗?

Iphone setAnimationBeginsFromCurrentState=是在iOS 5或iPad上不工作吗?,iphone,ios,ipad,core-animation,Iphone,Ios,Ipad,Core Animation,当另一个动画启动时,我的动画在飞行中不会从当前状态拾取,即使我的所有动画块都配置有: setAnimationBeginsFromCurrentState=YES 对于基于块的动画(自iOS 4以来的新方法),设置了UIViewAnimationOptionBeginFromCurrentState选项也是如此 在我所有的旧设备上,这一切都非常有效。在iOS 5和iPad模拟器上,情况并非如此。有解决办法吗 (注意:它似乎适用于所有测试的设备,但不适用于模拟器。) 以下是一个在4.3或5.0

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

setAnimationBeginsFromCurrentState=YES
对于基于块的动画(自iOS 4以来的新方法),设置了
UIViewAnimationOptionBeginFromCurrentState
选项也是如此

在我所有的旧设备上,这一切都非常有效。在iOS 5和iPad模拟器上,情况并非如此。有解决办法吗

(注意:它似乎适用于所有测试的设备,但不适用于模拟器。)

以下是一个在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。不应该发生。可能是糟糕的选项组合?

以下是一个有效的示例:

        [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模拟器上的工作方式与其他任何地方一样。所以有一个反例


您是否可以按照另一条注释的要求,实际显示不起作用的代码?(您已经显示了第二个动画的示例代码,但没有显示第一个动画,因此无法进行测试。)

您在视图动画块中说的是
self.layer.transform=
。视图动画块用于设置视图动画。可以通过设置视图的可设置动画的属性(而不是层的可设置动画的属性)来完成此操作

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


因此,解决方案是说
self.transform=
(如果self是一个视图),或者根本不使用基于块的动画-使用核心动画(例如cabasicanition)来设置层的动画。

我在iPad模拟器上在ios5上做基于块的动画,它们从当前状态开始就很好-没有多大帮助,但我不认为它们是“坏的”——你能发布一些你的动画代码吗?我有同样的问题,但在设备上也是如此。我不明白为什么这个问题被标记下来了。其他动画看起来完全一样。只是设置了一个不同的变换。基本上,我只是调用一个将转换作为参数的方法。这很好,但我刚刚提供了在iOS5iPad模拟器上运行良好的代码。在我看来,现在你的工作就是提供在iOS5 iPad模拟器上无法正常工作的代码。如果你没有,怎么会有人看到有问题?