我有一个带有一堆UIImageViews的ViewController,我需要将它们发送到前面并动画到视图的中心。
我尝试在转换UIView动画之前调用了bringSubviewToFront,似乎发生的事情是视图被发送到堆栈的顶部,但是动画没有发生(即使完成处理程序日志显示就像动画DID发生)。
第二次按下触发动画的按钮(考虑到这次视图已经在顶部索引,动画就像它应该的那样发生)
继承我的代码:
- (void)beginAnimationWithSelectedCountry:(UIView *)countryView
{
if (!countryView) return;
[self.view bringSubviewToFront:countryView];
[UIView animateWithDuration:0.6f delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{
countryView.center = CGPointMake(self.view.center.x, self.view.center.y);
} completion:^(BOOL finished) {
NSLog(@"Animation complete");
}];
}
有什么想法?我已经在这几个小时了。<
由于
编辑: 如果我注释掉了bringSubviewToFront,那么代码可以完美地执行动画(除了视图在其他一些视图下),所以我很确定问题出在线上:
[self.view bringSubviewToFront:countryView];
下面是我目前所拥有的截图,可能会对此问题有所了解: http://d.pr/i/PKoa
答案 0 :(得分:6)
呼叫:
[self.view layoutSubviews];
紧接着:
[self.view bringSubviewToFront:countryView];
它将解决您的问题。
答案 1 :(得分:3)
致电时
[self.view bringSubviewToFront:countryView];
触发新的视图布局事件。您可以通过在控制器上的“viewDidLayoutSubviews”中设置断点来检查这一点。
我遇到了类似的问题:'viewDidLayoutSubviews'方法中我自己的代码通过重置我试图设置动画的对象的帧来取消动画。
答案 2 :(得分:0)
尝试将UIViewAnimationOptionAllowAnimatedContent
添加到选项中。我几乎可以肯定这是一个这个选项的情况,但如果没有,请使用其他选项。你也可以尝试安排一个块来在下一个runloop上执行你的动画,这是一个祝福,我发现,有动画。