iphone - UIView removeFromSuperView 动画延迟

标签 iphone animation uiview commitanimations

我有一个方法,可以对 UIWindow 的一个 subview 进行动画处理,然后使用 removeFromSuperview 将其从 UIWindow 中删除。但是当我将 removeFromSuperview 放在动画 block 之后时,动画永远不会显示,因为 removeFromSuperview 之前从 UIWindow 中删除了 UIView动画播放:-( 如何延迟 removeFromSuperview 以便先播放动画,然后删除 subview ?我在动画 block 之后尝试了 [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];


    }

最佳答案

您应该在动画 block 中使用委托(delegate)机制来决定动画结束时要执行的操作。对于您的情况,请使用

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

这可以确保在动画完成后调用[theView removeFromSuperview]

关于iphone - UIView removeFromSuperView 动画延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2653139/

相关文章:

ios - pan码更新center后UIView frame和center不相关?

swift - 在运行时获取 subview 的实际宽度(Swift 4)

ios - 显示带有图像的 View Controller 3 秒

javascript - 使用 Jquery 和 '.css' 的 CSS 动画

css - Angular 1.3.3 - ngAnimate 1.3.3 不添加类

ios - 移动 subview 时,如何将其 subview 保留在其父 View 中的同一位置?

iphone - 如何增加UITabbar的大小

iphone - 在运行时检测我的 iPhone 应用程序是从哪个国家/地区的 App Store 下载的?

iphone - FBSession 的 Facebook SDK 3.0 权限数组持有错误的权限

javascript - Google charts - 阶梯式图表动画