Iphone 在单独的线程中绘制/呈现UIView,以便NSTimer始终及时触发

Iphone 在单独的线程中绘制/呈现UIView,以便NSTimer始终及时触发,iphone,objective-c,cocoa-touch,multithreading,core-animation,Iphone,Objective C,Cocoa Touch,Multithreading,Core Animation,我正在使用NSTimer在应用程序的主视图中触发drawRect。drawRect绘制一些图像,并使用kCGBlendModeScreen(绝对必须)混合每个图像。然而,drawRect只需要比期望的稍长一点的时间,因此计时器并不总是以期望的速率触发(更像是频率的一半) 我已经尽可能地优化了所使用的图形,因此我想知道是否可以通过创建一个新视图,并从计时器回调方法中创建的线程中调用该视图的drawRect来“外包”图形。(换句话说,通过线程调用新视图的drawRect,例如[someNewView

我正在使用NSTimer在应用程序的主视图中触发drawRect。drawRect绘制一些图像,并使用kCGBlendModeScreen(绝对必须)混合每个图像。然而,drawRect只需要比期望的稍长一点的时间,因此计时器并不总是以期望的速率触发(更像是频率的一半)

我已经尽可能地优化了所使用的图形,因此我想知道是否可以通过创建一个新视图,并从计时器回调方法中创建的线程中调用该视图的drawRect来“外包”图形。(换句话说,通过线程调用新视图的drawRect,例如[someNewView setNeedsDisplay]…)

如果是这样的话,我应该如何在代码中处理类似的事情

我会使用核心动画,但我记得读到它不支持alpha混合模式。如果我错了,我愿意看到一些示例代码,这些代码允许在单独的变换中对所有图像进行动画处理(例如,每个图像进行单独的旋转),同时仍然可以使用我目前正在实现的kCGBlendModeScreen使它们能够混合


谢谢你的提示

答案是“否”。您永远不应该从次线程绘制(或使用UIKit进行任何操作)。如果您遇到性能问题,您应该在绘图之前在另一个线程上执行所有计算,以便绘图所需时间最少。

花费时间的肯定不是计算,而是绘图本身。那么,关于CA的问题呢?我已经对这个主题进行了很多研究,但几乎没有什么明确的结果(代码方面),但也许我只是没有搜索正确的关键字?不幸的是,使用CA不太可能提高性能。如果您所做的只是使用
kCGBlendModeScreen
绘制图像,我不明白为什么CA会更快。有什么方法可以预渲染图像吗?没有,我必须预渲染成千上万的图像。但是CA使用OpenGL,所以我希望能加快一点速度,即使只是稍微加快一点。我只是希望避免OpenGL的复杂性,尽管我认为我最终只是在推迟不可避免的事情。@Mike Apple提供了一个名为CATiledLayer的类,它是从多个线程中提取的。您可以使用它来提高性能。