想要在视图动画完成后显示新视图

时间:2014-03-06 17:24:33

标签: ios iphone

我有一个动画视图。动画结束后,我想通过将其隐藏设置为false来显示新视图。

我在动画块代码之后将hidden设置为false,但似乎动画是在一个单独的线程上完成的。当动画块仍在播放时,视图将被取消隐藏

// start animation block    
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:2];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut ];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:mCards[r] cache:YES];

//   mCards[0].image = [UIImage imageNamed:@"card.png"]; //begin
int id=TarretWheel[r];
mCards[r].image = gCardImages[id]; //end

// Start animtion
[UIView commitAnimations];

// show view
mBackground.hidden=false;

2 个答案:

答案 0 :(得分:2)

你可以(最好是,实际上)在UIView上使用更新的基于块的动画方法。请查看以下内容(它有一个完整的块,这正是您所需要的):

[UIView animateWithDuration:0.5 animations:^{

} completion:^(BOOL finished) {

}];

编辑: 在您的情况下,您可能需要options的其他变体。

另外,澄清为什么你应该使用基于块的方法;来自文档(对于beginAnimations:context:):

  

在iOS 4.0及更高版本中不鼓励使用此方法。你应该用   基于块的动画方法来指定你的动画。

答案 1 :(得分:0)

我的回答与Joe相同,但我建议使用不同的API,允许您使用配置块。

[UIView animateWithDuration:2 
                      delay:0.0 
                      options:UIViewAnimationOptionTransitionFlipFromLeft|UIViewAnimationOptionCurveEaseOut | 
                      animations:^{

                         //   mCards[0].image = [UIImage imageNamed:@"card.png"]; //begin
                         int id=TarretWheel[r];
                         mCards[r].image = gCardImages[id]; //end

                 }
                 completion:^(BOOL finished){
                       mBackground.hidden=false;
                 }
 ];