Swift - 在新线程中绘制UIView

时间:2014-12-11 15:07:29

标签: ios iphone multithreading swift uiview

我有一个UIView。在函数 drawRect()中,我在它上面绘制一个网格(垂直和水平线)。当我在iPhone 4S上运行我的应用程序时 - fps不够高。没有界面,一切都很好,但如果屏幕上还有其他内容 - fps会掉下来。

我尽可能地优化了绘图功能。例如,我没有使用 CGContextAddLineToPoint()。而不是我使用 CGContextStrokeRect()绘制线条,因为我可以看到 - 最后一个工作得更快。

无论如何 - 应用仍然不够快。 iPhone 4S和新型号的图形内核很少,所以我想,我可以通过在另一个线程中绘制网格来加快我的应用程序

我试着这样做

override func drawRect(rect: CGRect) {
    let context = UIGraphicsGetCurrentContext()
    let screenScale = self.window!.screen.scale
    let queue = NSOperationQueue()

    queue.addOperationWithBlock() {
        drawGrid(context, rect: rect, screenScale: screenScale)
    }
}

但由于某种原因,绘制的网格比原来要小两倍。

那么我做错了什么,我可以使用Swift在单独的线程中绘制UIView吗? 请帮我看看。

1 个答案:

答案 0 :(得分:0)

考虑使用png图像而不是手动绘制所有内容。获取更多信息here.

  

自定义...具有UIImage背景完全依赖于   用于渲染图像资源的GPU保存在磁盘上。

...

  

drawRect方法依赖于Core Graphics来进行自定义绘图,   但它的主要缺点在于它处理触摸事件的方式:每个   按下按钮的时间,setNeedsDisplay强制重绘;不   只有一次,但每次点击两次。这不是一个好用的   CPU和内存......