我有以下代码在我的应用中动画一些视图:
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上没有动画。奇怪的是,块中的代码被调用并且视图确实更新,只是没有考虑动画持续时间。
是否有理由不调用此块?
答案 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];