UINavigationController 上视图之间的过渡动​​画有多长?

Posted

技术标签:

【中文标题】UINavigationController 上视图之间的过渡动​​画有多长?【英文标题】:How long is the animation of the transition between views on a UINavigationController? 【发布时间】:2011-09-30 10:27:16 【问题描述】:

理想情况下,会有某种常量包含这个值。

我正在实现具有自己的过渡动画的代码,并且我希望它们具有与平台过渡动画相同的长度。

【问题讨论】:

【参考方案1】:

iOS 7 及更高版本中,您可以通过设置 UINavigationController 委托并使用以下方法获得准确的值:

- (void)navigationController:(UINavigationController *)navigationController
      willShowViewController:(UIViewController *)viewController
                    animated:(BOOL)animated 
    NSTimeInterval duration = [viewController.transitionCoordinator transitionDuration];
  

如果默认持续时间会改变,这是未来的证明方法。目前它的值为 0.35 秒。

【讨论】:

【参考方案2】:

没有包含这个值的常量。但是,使用以下UINavigationControllerDelegate 方法:

- (void) navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated

    startTime = [[NSDate date] retain];


- (void) navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated

    NSLog(@"Duration %f", [[NSDate date] timeIntervalSinceDate: startTime]);

...我可以看到持续时间约为 0.35 秒

有趣的是,视图的不同部分需要不同的时间才能转换到位。有关详细信息,请参阅这篇精彩的博文:

http://www.iclarified.com/12396/a-closer-look-at-iphone-transition-animations

【讨论】:

ios 8 上,动画持续时间似乎是 0.2 秒。 (现在有一个常量可以参考:UINavigationControllerHideShowBarDuration。) 这条评论应该是一个答案,它帮助了我很多次 这个常量只适用于导航栏的动画,不适用于viewController视图本身。 UINavigationController.hideShowBarDuration 的时间似乎比推/弹动画快。

以上是关于UINavigationController 上视图之间的过渡动​​画有多长?的主要内容,如果未能解决你的问题,请参考以下文章

带有主 UINavigationController 和详细 UINavigationController 的 UISplitViewcontroller

带有 UINavigationController 的 UITabBarController,在 hidesBottomBarWhenPushed 上隐藏 UINavigationController

在 UINavigationController 内的 UITabBarcontroller 中添加 UINavigationController?

UINavigationController 与 AppDelegate 中的 UISegmentedControl 切换 UINavigationController 的 rootviewcontr

从一个 UINavigationController 到另一个 UINavigationController (Swift iOS 9, xcode 7)

UINavigationController