2012-10-17 47 views
10

我有一个视图控制器与一群我需要发送到前和动画的视图的中心的UIImageViews的。的iOS bringSubviewToFront阻断的UIView动画

我试图在投射UIView动画之前调用bringSubviewToFront,看起来发生的是视图发送到栈顶,但动画不会发生(即使完成处理程序日志显示为if动画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代码与动画完美地执行(除了认为是在一些其他的看法),所以我敢肯定preety问题是与线:

[self.view bringSubviewToFront:countryView]; 

下面有什么,我现在有一个截图可以阐明这个问题一些光: http://d.pr/i/PKoa

+0

我将开始与如─return语句还有,看看你的方法,甚至被称为与NSLog的首次周围。 – CodaFi

+0

已经选中,因为我发布了“动画完整”日志被称为两次。谢谢您的好意 –

+1

做到这一点 - 把动画称为animateCountry第二种方法把动画代码在里面 - 在开始的方法调用bringSubViewToFront - 然后调用[自我performSelector:animateCountry ...它会工作。 –

回答

0

尝试增加UIViewAnimationOptionAllowAnimatedContent的选项。我几乎可以肯定,这是这种选择的一种情况,但如果不是,请与其他选项一起玩。你也可以尝试安排一个模块在下一个runloop上执行你的动画,这是我发现的带有动画的祝福。

3

当你调用

[self.view bringSubviewToFront:countryView]; 

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

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

+2

嗨巴里,谢谢你让我们知道是什么导致它失败。无论如何,你是否知道解决这个问题? –

6

电话:

[self.view layoutSubviews];

右后:

[self.view bringSubviewToFront:countryView];

这将解决您的问题。