有没有办法迫使核心动画运行它的线程?(Is there a way to force Core An

2019-08-31 18:24发布

核心动画使用一个后台线程做的工作。 现在的问题是这样的:我有一个繁重的计算在主线程怎么回事。 核心动画立即冻结,直到计算完成。 然后继续完成它的动画。 我记得读取CA在处理时间的低优先级,这意味着无论主线程想要做的是高研所,比在同一时间任何花哨的动画会做更多的可能是文件内。

我想迫使核心动画与在任何情况下,主线程很好安排它的后台线程。 或可替代一个单独的线程将运行在主线程之外的重计算。 我试过了,但还是CA冻结,直到这样做了。 我希望调度快速切换CA和计算之间的处理时间。

怎么会CA被迫继续工作? 如果事情不只是慢一点,这很好。 但最重要的是,所有的东西不断从用户的角度看会。

Answer 1:

不要在主线程上运行大量计算,因为它们会阻止用户界面,并导致糟糕的用户体验。 在后台线程运行。

尽管如此,iPhone是一款单核系统,因此,如果计算盯住CPU在一个线程,每其他线程的性能可能陷于停顿附近。 如果可以的话,试着将你的计算为更小的元素和运行它们在一个NSOperationQueue NSOperations。 如果你确保计算部分并不如此之小,为他们创造一个的NSOperation的开销过大,这可能会提供节流计算一下,让你的动画没有被放慢的一种手段。

核心动画往往会进行一些计算前期的,动画可以运行之前,因此这些可以通过你的繁重的计算线程得到减缓。 您可能还能够在-animationDidStart内启动重计算:委托方法为您CAAnimation,使得计算仅揭开序幕当动画正在进行中。 我相信,一个动画的进度使用比其启动计算较少,因此它可能是能够更好地与您的繁重的计算共存。



Answer 2:

您可以使用[CATransaction flush]刷新核心的动画,如果你不让runloop顺其自然



Answer 3:

我不知道,但你可以尝试致电[NSThread setThreadPriority:1.0]如果你在另一个线程上运行您的CA。



文章来源: Is there a way to force Core Animation to run it's thread?