核心动画使用一个后台线程做的工作。 现在的问题是这样的:我有一个繁重的计算在主线程怎么回事。 核心动画立即冻结,直到计算完成。 然后继续完成它的动画。 我记得读取CA在处理时间的低优先级,这意味着无论主线程想要做的是高研所,比在同一时间任何花哨的动画会做更多的可能是文件内。
我想迫使核心动画与在任何情况下,主线程很好安排它的后台线程。 或可替代一个单独的线程将运行在主线程之外的重计算。 我试过了,但还是CA冻结,直到这样做了。 我希望调度快速切换CA和计算之间的处理时间。
怎么会CA被迫继续工作? 如果事情不只是慢一点,这很好。 但最重要的是,所有的东西不断从用户的角度看会。
不要在主线程上运行大量计算,因为它们会阻止用户界面,并导致糟糕的用户体验。 在后台线程运行。
尽管如此,iPhone是一款单核系统,因此,如果计算盯住CPU在一个线程,每其他线程的性能可能陷于停顿附近。 如果可以的话,试着将你的计算为更小的元素和运行它们在一个NSOperationQueue NSOperations。 如果你确保计算部分并不如此之小,为他们创造一个的NSOperation的开销过大,这可能会提供节流计算一下,让你的动画没有被放慢的一种手段。
核心动画往往会进行一些计算前期的,动画可以运行之前,因此这些可以通过你的繁重的计算线程得到减缓。 您可能还能够在-animationDidStart内启动重计算:委托方法为您CAAnimation,使得计算仅揭开序幕当动画正在进行中。 我相信,一个动画的进度使用比其启动计算较少,因此它可能是能够更好地与您的繁重的计算共存。
您可以使用[CATransaction flush]
刷新核心的动画,如果你不让runloop顺其自然
我不知道,但你可以尝试致电[NSThread setThreadPriority:1.0]
如果你在另一个线程上运行您的CA。