10

我有一个带有一堆 UIImageViews 的 ViewController,我需要将它们发送到前面并动画到视图的中心。

我曾尝试在投射 UIView 动画之前调用bringSubviewToFront,似乎正在发生的事情是视图被发送到堆栈的顶部,但动画没有发生(即使完成处理程序日志显示好像动画确实发生了)。

我第二次按下触发动画的按钮(考虑到这次视图已经在顶部索引,动画按原样发生)

这是我的代码:

- (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

4

3 回答 3

6

称呼:

[self.view layoutSubviews];

紧接着:

[self.view bringSubviewToFront:countryView];

它会解决你的问题。

于 2014-04-22T20:23:24.407 回答
3

你打电话时

[self.view bringSubviewToFront:countryView];

您触发了一个新的视图布局事件。您可以通过在控制器上的“viewDidLayoutSubviews”中设置断点来检查这一点。

我有一个类似的问题:我自己在“viewDidLayoutSubviews”方法中的代码通过重置我试图动画的对象的帧取消了我的动画。

于 2012-12-13T15:59:04.260 回答
0

尝试添加UIViewAnimationOptionAllowAnimatedContent选项。我几乎可以肯定这是此选项的一种情况,但如果不是,请使用其他选项。您还可以尝试安排一个块在下一个 runloop 上执行您的动画,我发现这对动画来说是一种祝福。

于 2012-10-22T20:59:18.707 回答