4

我有一种方法可以为其中一个子视图设置动画UIWindow,然后将其从UIWindow使用中删除removeFromSuperview。但是当我放在removeFromSuperview动画块之后,动画永远不会显示,因为在动画播放之前removeFromSuperview删除了UIView:-(UIWindow我怎样才能延迟removeFromSuperview动画先播放,然后删除子视图?我[NSThread sleepForTimeInterval:1];在动画块之后尝试过,但那没有有预期的效果,因为动画出于某种原因也睡着了。

我的这种方法的代码:

  - (void) animateAndRemove
    {
     NSObject *mainWindow = [[UIApplication sharedApplication] keyWindow];

     [UIView beginAnimations:nil context:nil];
        [UIView setAnimationDuration:0.8]; 
     UIView *theView = nil;
     for (UIView *currentView in [mainWindow subviews])
     {
      if (currentView.tag == 666)
      {
       currentView.backgroundColor = [UIColor colorWithRed:0.8 green:0.8 blue:0.8 alpha:0.0];
       theView = currentView;
       }
     }
     [UIView setAnimationTransition:  UIViewAnimationTransitionNone forView:theView cache:YES];
      [UIView commitAnimations]; 



 //[NSThread sleepForTimeInterval:1];

 [theView removeFromSuperview];


    }
4

2 回答 2

16

您应该在动画块中使用委托机制来决定动画结束时要做什么。对于您的情况,请使用

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDelegate:theView];
[UIView setAnimationDidStopSelector:@selector(removeFromSuperview)];
 ....

这确保[theView removeFromSuperview]将在动画完成后调用。

于 2010-04-16T13:15:00.247 回答
7

如果您的目标是 iOS 4.0 以上,您可以使用动画块:

[UIView animateWithDuration:0.2
     animations:^{view.alpha = 0.0;}
     completion:^(BOOL finished){ [view removeFromSuperview]; }];

(以上代码来自苹果的 UIView 文档)

于 2011-04-28T17:03:00.827 回答