3

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

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 上没有动画。奇怪的是,块内的代码确实被调用并且视图确实更新,只是没有考虑动画持续时间。

这个块没有被调用是有原因的吗?

4

6 回答 6

2

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

就我而言,这是由于在它的动画出现在屏幕上animateWithDuration:之前被调用的事实。UIView

在 iOS7 中,您似乎不应该在调用 controlanimateWithDuration:之前-(void)viewDidAppear:(BOOL)animated调用UIViewController

于 2013-11-23T18:01:48.913 回答
2

我遇到了同样的问题:在 iOS6 中像魅力一样工作的动画块在 iOS7 中没有动画的情况下执行。

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

所以对你来说,这可能看起来像这样:

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    animate();
    // do your other stuff here...
}
于 2013-09-21T17:22:56.117 回答
2

您的动画可能与另一个竞争动画块发生冲突,可能是在过渡期间由 UIKit 调用的动画块。不要传递nil给动画选项,而是使用:

UIViewAnimationOptionOverrideInheritedOptions | UIViewAnimationOptionBeginFromCurrentState

看看这是否有帮助。

于 2013-09-23T18:13:28.230 回答
1

我遇到了同样的问题。结果对我来说,我需要引用我正在制作动画的 UITableViewCell 的不同部分,而不是我在 iOS 6 中所做的。这对你来说可能是一个类似的问题。

于 2013-09-21T02:00:07.023 回答
1

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

请参阅NSLayoutConstraints 是否可设置动画?如何做到这一点。

于 2013-09-21T19:47:38.930 回答
0

try using :

[UIView setAnimationsEnabled:YES];

于 2013-09-23T17:40:08.410 回答