我有一个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吗? 请帮我看看。
答案 0 :(得分:0)
考虑使用png图像而不是手动绘制所有内容。获取更多信息here.
自定义...具有UIImage背景完全依赖于 用于渲染图像资源的GPU保存在磁盘上。
...
drawRect方法依赖于Core Graphics来进行自定义绘图, 但它的主要缺点在于它处理触摸事件的方式:每个 按下按钮的时间,setNeedsDisplay强制重绘;不 只有一次,但每次点击两次。这不是一个好用的 CPU和内存......