【问题标题】:Removing superview is already done before animation在动画之前删除超级视图已经完成
【发布时间】:2012-06-20 17:00:57
【问题描述】:

我有一个应用程序,其中电影视图是一种加载屏幕,它位于我的根控制器 splitViewController 之上。电影完成后,我想将其从超级视图中删除,动画。我现在正在使用这段代码,mpmctr 我的电影控制器是:

[UIView beginAnimations:@"blablablab" context:NULL];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:splitViewController.view.superview cache:NO];
[UIView setAnimationDuration:.5];
[mpMCtr.view removeFromSuperview];
[UIView commitAnimations];

当这段代码运行时,mpmctr 会从父视图中移除自己,但不会设置动画。当 splitviewcontroller 已经在屏幕上时,就会发生这种情况。

我使用此代码将 mpmctr 放在委托方法 didfinishlaunching 中的视图上。

[window addSubview:splitViewController.view];
[splitViewController.view addSubview:mpMCtr.view];

希望大家能帮我解决这个问题

提前致谢。

【问题讨论】:

    标签: xcode ipad uiview core-animation


    【解决方案1】:

    UIView 动画无法通过动画从父视图中移除,但您可以将其 alpha 设置为零,然后您可以执行此操作以在动画完成后移除视图。

    [UIView setAnimationDidStopSelector:@selector(removeMyView)];
    
    
    - (void) removeMyView
    {
    
        [mpMCtr.view removeFromSuperview];
    }
    

    【讨论】:

    • 这实际上是错误的。自 iOS 4.0(自 2010 年起)以来,您就可以使用 UIView 动画来做到这一点。苹果自己的示例代码甚至可以做到。
    【解决方案2】:

    尽管MDT says,您实际上可以使用 UIView 动画来动画化视图的移除。您只需使用 iOS 4 中引入的基于块的 API。

    这是来自Apples documentation for transitionWithView:duration:options:animations:completion:的确切示例代码

    [UIView transitionWithView:containerView
                      duration:0.2
                      options:UIViewAnimationOptionTransitionFlipFromLeft
                      animations:^{
                          [fromView removeFromSuperview];
                          [containerView addSubview:toView]; }
                      completion:NULL];
    

    它将从左侧翻转,删除 fromView 并将 toView 添加到 containerView(添加它们的视图从中删除)。

    【讨论】:

      猜你喜欢
      • 2019-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-19
      • 2016-03-09
      • 1970-01-01
      相关资源
      最近更新 更多