一个UINavigationController的视图转换动画持续多久?

20

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

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

2个回答

27

iOS 7及其后续版本中,您可以通过设置UINavigationController委托并使用以下方法来获取精确值:

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

如果默认时长将来发生变化,这是一种未来可靠的方法。目前它的值为0.35秒。


23

没有包含这个值的常量。但是,可以使用以下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


45
在iOS 8上,动画持续时间似乎为0.2秒。(现在有一个常量可以使用:UINavigationControllerHideShowBarDuration - zekel
1
这个评论应该是一个答案,它帮助了我很多很多次。 - fpg1503
6
这个常数只适用于导航栏的动画,而不适用于视图控制器本身的视图。 - Ben Gottlieb
1
UINavigationController.hideShowBarDuration 的时间似乎比推入/弹出动画要快。 - Bryan Bryce

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接