iOS : need inputs in developing efficient ( performance wise ) drawing app

标签 ios uikit uiimageview calayer quartz-graphics

我有这个应用程序,可以使用它绘制基本形状,如矩形、 eclipse 、圆形、文本等。 我还允许在 Canvas 上以点集的形式存储自由形式的绘图。

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

我需要一些关于如何有效实现此绘图功能的输入。 我有以下几点想法 -

  1. 使用 UIView 的 InvalidateRect 和 drawRect

为主 Canvas 和每个插入的对象创建一个 UIView - 在 UIView 的 drawRect 函数中使相应的矩形无效并重绘与该矩形相交的所有对象。

  1. 有 UIView 并使用 CALayer 吗? 每个人都不断提到 CALayer ,我对此不太了解,在我冒险之前,我想快速了解这条路线是否值得采取。 喜欢,https://developer.apple.com/library/ios/#qa/qa1708/_index.html

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

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

谢谢。

最佳答案

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

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

但 OpenGL 仍然是最有效的解决方案,但如果您没有太多要绘制的对象,请不要为此烦恼。

关于iOS : need inputs in developing efficient ( performance wise ) drawing app,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9265728/

相关文章:

ios - 图像被关闭后,UIImage 后面的模糊不会消失

ios - UIImageView 触摸方法

javascript - iPad 方向更改上网站内容的全面刷新

ios - iOS文件创建可访问所有应用程序

iphone - 重叠 UITableViewCell 内容 View

ios - textField shouldChangeCharactersInRange 正在执行用户操作后一步

objective-c - 调整 UIImageView 数组中单个图像的大小

ios - PFQuery findObjectsInBackgroundWithBlock 没有被调用?

ios - UITableViewCell backgroundView 未出现在设备上

iphone - 为什么当我执行 PerformSelectorInBackground :? 时没有自动释放池