代码之家  ›  专栏  ›  技术社区  ›  dbotha

如何在CocoaTouch早期结束动画?

  •  0
  • dbotha  · 技术社区  · 15 年前

    我有一个uinavigationcontroller,当我异步连接到服务器时,我在上面推一个“加载屏幕”uiviewcontroller。推挤是隐式动画与滑动效果。如果连接时出现错误,我会弹出加载屏幕控制器(再次设置动画),并向用户显示警告。

    如果我在动画完成后弹出视图控制器,一切都很好,但是如果动画还没有完成奇怪的事情发生。通常加载屏幕视图保持在屏幕上,即使它已从导航控制器堆栈弹出。我很肯定这个问题与正在进行的动画有关。例如,这个人为的代码片段总是让secondcontroller的视图留在屏幕上:

    [navController pushViewController: secondController animated: YES];
    [navController popToRootViewControllerAnimated: YES];
    NSAssert([delegate.navigationController.viewControllers count] == 1, @"oops");
    

    我当前的解决方法是向导航控制器注册一个委托,并实现导航控制器:didshowviewcontroller:animated:method。然后我只在知道第一个推动画完成时弹出加载屏幕控制器。不过,我更喜欢早点结束动画。

    对于导航控制器视图的所有子视图,我尝试调用层树中所有层的RemoveAllanimation。虽然这种方法很早就结束了动画,但在弹出加载屏幕视图后,它仍然经常保持显示。所以基本上,有没有一个正确的方法来提前结束动画,或者我应该继续我的工作?

    2 回复  |  直到 15 年前
        1
  •  0
  •   Matt Long    15 年前

    很难知道为什么在推完根视图控制器之后,你会立即弹出它,但是当我不得不做这种事情时,我让被推的视图控制器决定它是否需要弹出。因此,在第二个控制器的-viewdidload中,确定弹出到根视图的条件是否为真。如果是的话,打电话从那里出来

    [[self navigationController] popViewControllerAnimated:YES];
    

    此外,这并不能解决您的问题,但您可能需要考虑使用-presentmodalview控制器推送“加载屏幕”:

    - (void)presentModalViewController:(UIViewController *)modalViewController animated:(BOOL)animated
    

    它相当于流行音乐:

    - (void)dismissModalViewControllerAnimated:(BOOL)animated
    
        2
  •  0
  •   Nathan de Vries    15 年前

    完全未测试,但您是否尝试从视图控制器视图的核心动画层中删除所有动画?

    [[[secondController view] layer] removeAllAnimations];
    
    推荐文章