Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 自定义转换动画animationControllerForPresentedController和animateTransition之间的未知延迟_Ios_Iphone_Swift_Animation_Uiviewcontroller - Fatal编程技术网

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