iOS 7动画块未被调用

时间:2013-09-18 19:21:51

标签: ios objective-c-blocks uiviewanimation ios7

我有以下代码在我的应用中动画一些视图:

void (^animate)() = ^() {
    CGRect leftFrame = centerFrame;
    leftFrame.origin.x -= centerFrame.size.width;
    newViewController.view.frame = centerFrame;
    oldViewController.view.frame = leftFrame;
};

if (animated) {
    [UIView animateWithDuration:0.3f
                          delay:0.0f
                        options:nil
                     animations:animate
                     completion:^(BOOL finished){}];
} else {
    animate();
}

这在iOS 6上正确动画,但在iOS 7上没有动画。奇怪的是,块中的代码被调用并且视图确实更新,只是没有考虑动画持续时间。

是否有理由不调用此块?

6 个答案:

答案 0 :(得分:2)

我遇到了同样的问题:在iOS7中没有动画的情况下,在iOS6中执行类似于魅力的动画块。

不确定这是否对您有帮助,但我将动画触发器移动到viewDidAppear:,现在它已被动画化了。

所以对你来说这可能是这样的:

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    animate();
    // do your other stuff here...
}

答案 1 :(得分:2)

您的动画可能会与另一个竞争动画块碰撞,也许是在转换期间由UIKit调用的动画块。不要将nil传递给动画选项,而是使用:

UIViewAnimationOptionOverrideInheritedOptions | UIViewAnimationOptionBeginFromCurrentState

看看这是否有帮助。

答案 2 :(得分:2)

iOS6和iOS7之间的回归完全相同。

就我而言,这是因为animateWithDuration:UIView动画出现在屏幕上之前被调用了。

在iOS7中,您似乎不应在控件animateWithDuration:上调用-(void)viewDidAppear:(BOOL)animated之前致电UIViewController

答案 3 :(得分:1)

我遇到了同样的问题。结果对我来说,我需要引用UITableViewCell的一个不同部分,比我在iOS 6中设置动画。这可能是一个类似的问题。

答案 4 :(得分:1)

iOS 7中的自动布局可能会给您带来麻烦。我刚遇到同样的问题。您需要为约束设置动画,而不是为框架设置动画。

请参阅Are NSLayoutConstraints animatable?了解如何操作。

答案 5 :(得分:0)

尝试使用:

[UIView setAnimationsEnabled:YES];