我有这个应用程序使用哪个可以绘制基本形状,如矩形,日食,圆形,文本等。 我还允许在画布上存储为点集的自由形式绘图。
用户还可以通过操作选择对象时出现的选择控制柄来调整大小并移动这些对象。 此外,用户应该能够缩放和平移画布。
我需要一些关于如何有效实现此绘图功能的输入。 我记得以下事情 -
对于主画布和每个插入的对象都有一个UIView - 使对应的rect无效并重绘在UIView的drawRect函数中与rect相交的所有对象。
有一个UIView并使用CALayer? 每个人都不断提及CALayer,我对此并不太了解,在我冒险进入之前我想快速输入一下这条路线是否值得一试。 比如,https://developer.apple.com/library/ios/#qa/qa1708/_index.html
将UIImageView作为画布,在绘制每个对象时,我们这样做 i)将对象绘制到屏幕外的CGContext中,基本上,通过使用UIGraphicsBeginImageContext创建一个新的CGContext,绘制形状,从这个CG上下文中提取图像并将其用作UIImageView的图像属性的源,但是这里我如何只使一个部分无效UIImageView的内容,以便只刷新该区域。
您能否建议一下最好的方法是什么? 有没有其他有效的方法来完成这项工作?
感谢。
答案 0 :(得分:1)
使用UIImage可以更有效地渲染多个对象。但是,在移动和修改单个对象时,使用CALayer会更有效,因为您不必修改其他对象。所以我认为最好的方法是使用UIImage进行常规绘图,使用CALayer进行修改的形状。换句话说:
但是OpenGL仍然是最有效的解决方案,但如果你没有太多的对象可以绘制,那就不要理会了。
答案 1 :(得分:1)
如果要绘制多边形,则必须使用Quartz
框架,并使用基于CALayer
的绘图方法。您将CALayers
放入UIImageView
,UIView
或UIView
的视图并不重要。我会说UIImageView
,因为你不需要{{1}}的属性或绘图方法。