我有一个动画视图。动画结束后,我想通过将其隐藏设置为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;
答案 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; } ];