iOS:需要投入开发高效(性能明智)的绘图应用程序

时间:2012-02-13 18:18:37

标签: ios uikit uiimageview calayer quartz-graphics

我有这个应用程序使用哪个可以绘制基本形状,如矩形,日食,圆形,文本等。 我还允许在画布上存储为点集的自由形式绘图。

用户还可以通过操作选择对象时出现的选择控制柄来调整大小并移动这些对象。 此外,用户应该能够缩放和平移画布。

我需要一些关于如何有效实现此绘图功能的输入。 我记得以下事情 -

  1. 使用UIView的InvalidateRect和drawRect
  2. 对于主画布和每个插入的对象都有一个UIView - 使对应的rect无效并重绘在UIView的drawRect函数中与rect相交的所有对象。

    1. 有一个UIView并使用CALayer? 每个人都不断提及CALayer,我对此并不太了解,在我冒险进入之前我想快速输入一下这条路线是否值得一试。 比如,https://developer.apple.com/library/ios/#qa/qa1708/_index.html

    2. 将UIImageView作为画布,在绘制每个对象时,我们这样做 i)将对象绘制到屏幕外的CGContext中,基本上,通过使用UIGraphicsBeginImageContext创建一个新的CGContext,绘制形状,从这个CG上下文中提取图像并将其用作UIImageView的图像属性的源,但是这里我如何只使一个部分无效UIImageView的内容,以便只刷新该区域。

    3. 您能否建议一下最好的方法是什么? 有没有其他有效的方法来完成这项工作?

      感谢。

2 个答案:

答案 0 :(得分:1)

使用UIImage可以更有效地渲染多个对象。但是,在移动和修改单个对象时,使用CALayer会更有效,因为您不必修改其他对象。所以我认为最好的方法是使用UIImage进行常规绘图,使用CALayer进行修改的形状。换句话说:

  • 使用CALayer绘制正在添加或修改的形状,但不要在UIImage上绘制
  • 使用UIImage绘制其他形状

但是OpenGL仍然是最有效的解决方案,但如果你没有太多的对象可以绘制,那就不要理会了。

答案 1 :(得分:1)

如果要绘制多边形,则必须使用Quartz框架,并使用基于CALayer的绘图方法。您将CALayers放入UIImageViewUIViewUIView的视图并不重要。我会说UIImageView,因为你不需要{{1}}的属性或绘图方法。