Ios 自定义转换动画animationControllerForPresentedController和animateTransition之间的未知延迟
我的目标是使平滑动画从第一个视图控制器开始,到第二个视图控制器结束 我正在尝试使用符合Ios 自定义转换动画animationControllerForPresentedController和animateTransition之间的未知延迟,ios,iphone,swift,animation,uiviewcontroller,Ios,Iphone,Swift,Animation,Uiviewcontroller,我的目标是使平滑动画从第一个视图控制器开始,到第二个视图控制器结束 我正在尝试使用符合UIViewControllerAnimatedTransitioning和UIViewControllerTransitioningDelegate协议的对象进行转换动画。 我在故事板中设置了两个视图控制器(VC),并将它们与segue(默认显示)连接起来。我还在第一个VC中创建了unwind segue方法,并在第二个VC中为其设置了一个按钮 我有个奇怪的问题。 我的对象有方法 func animation
UIViewControllerAnimatedTransitioning
和UIViewControllerTransitioningDelegate
协议的对象进行转换动画。
我在故事板中设置了两个视图控制器(VC),并将它们与segue(默认显示)连接起来。我还在第一个VC中创建了unwind segue方法,并在第二个VC中为其设置了一个按钮
我有个奇怪的问题。
我的对象有方法
func animationControllerForPresentedController(presented: UIViewController, presentingController presenting: UIViewController, sourceController source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
self.presenting = true
NSLog("start")
return self
}
func animateTransition(transitionContext: UIViewControllerContextTransitioning) {
if presenting {
NSLog("Animation Push")
transitionPush(transitionContext)
}
else {
NSLog("Animation Pop")
transitionPop(transitionContext)
}
}
从第一个VC到第二个VC和从第二个VC到第一个VC,我有两种不同的动画方法。
当我激活segue时,我在animationControllerForPresentedController
和animateTransition
方法之间有一个非常奇怪的延迟。有时可能是1秒左右,我的整个过渡动画必须是1秒加上这个意外的延迟太大了。
这是一份日志:
2015-02-08 19:52:33.528 MyApp[1318:119598] start
2015-02-08 19:52:33.979 MyApp[1318:119598] Animation Push
我不知道为什么会出现这种延迟,是否有办法消除或减少这种延迟?我试图检查这是否是我的代码,但我没有找到任何证据。请随意询问更多信息。我也有同样的问题。您可能没有从主线程触发动画(presentViewController调用) 这为我解决了问题(目标C代码): 我在讨论中找到了解决办法,作者–
tamas.zahola
[self presentViewController:myViewController animated:YES completion:nil];
dispatch_async(dispatch_get_main_queue(), ^{}); // <--- this line
[自我呈现视图控制器:myViewController动画:是完成:无];
dispatch_async(dispatch_get_main_queue(),^{});// 我也经历过这种情况。在我的例子中,我看到从使用自定义动画转换推送视图控制器到调用animateTransition(使用transitionContext:)
方法之间有0.7秒的延迟。最终用户很容易察觉到延迟
问题是,我正在推的视图控制器正在从主线程上的资源目录加载一些大图像
预加载图像解决了我的问题。你能解决这个问题吗?我也遇到了同样的问题。我看到了这篇关于ios8错误的帖子。我尝试了一些变通办法,但还没有找到任何可行的办法@我暂时把这个问题放在一边,但我很快就会回来讨论它。但是现在我有一些想法。首先,我在编辑部分的另一个主题的回答中描述了这一点,我也认为这可能是我的模型,它处理数据太长,导致了这样的延迟。不管怎样,我会回到这个问题,并尝试写一个答案,当我完成。但是你可以查看我指定的点。@flinth我也遇到了同样的问题,从我按下按钮到动画开始之间大约有半秒的延迟,即使一切都在主屏幕上thread@startupthekid我现在更改了动画方法,所以在本例中没有发现问题。但是,我有一个类似的延迟问题,我的自定义字体没有复制到设备上。当我用那个字体打开VC时,系统试图找到它并搜索所有字体(我想)来找到这个。当我修复字体复制的问题时,这个延迟消失了。我向苹果公司发射了一个bug,但我无法重复这个bug。但是,这种不存在的自定义字体延迟完全是这种情况下的问题,所以,检查一下这个,也许你有类似的。。。我很快会回到这个问题上,并写一个答案:我会有一个:)这对我不起作用。可能由于某种原因,主线程已经被阻塞,从而阻止了转换的发生?或者按钮以某种方式被停用?这很奇怪-因为我在调用出现时看到主线程,但您的代码有助于解决此问题,一般解决方案是检查目标视图控制器将使用的每个资源。遗憾的是,我没有写清楚这个问题的编辑/答案,但我的问题发生了,因为我的包中没有自定义字体。iOS检查所有字体库以找到它,如果它不存在,请更换。有一次我耽搁了。您面临的问题基本相同-同步加载资源需要太多时间。我不会考虑缺少字体的情况,但是的,这非常有意义。堆垛机上到处埋藏着许多智慧的小金块。非常感谢。在我的例子中,这是因为我在UIView组件中调用sizeToFit(),这导致了很大的延迟
[self presentViewController:myViewController animated:YES completion:nil];
dispatch_async(dispatch_get_main_queue(), ^{}); // <--- this line