我正在使用绘图应用程序,用户可以选择工具,并在屏幕上移动手指形状,就像大多数此类应用程序一样。
所有图纸都发生在drawRect:
子类中的UIView
方法中:
for (UIBezierPath p in [self.paths copy]) {
[p stroke];
}
当然我得到了上下文,我使用CGContextSaveGState并恢复,但大致这是它的工作原理。
每当用户将手指从屏幕上释放并且NSMutableArray
被调用时,UIBezierPath
就会添加setNeedsDisplay
:
[self.myView.paths addObject:bezierpath];
[self.myView setNeedsDisplay];
一切都运行良好但是如果用户继续绘图,有一段时间,数组包含很多UIBeazierPaths
,并且在某些时候绘图过程开始工作越来越慢。
我知道drawRect:
方法非常昂贵,但我无法找到更好的方法。
我的问题是如何改善表现?你知道其他任何方法可以提高效率吗?
目前我正在考虑计算包含bezier路径的最小矩形,一旦用户添加新项目,我可以拨打setNeedsDisplayInRect:
而不是setNeedsDisplay
,但我不知道这是一个很好的解决方案,任何想法都非常受欢迎?
提前致谢。