- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前有一个免费的手绘 iPad 应用程序,它通过 touches 方法中的四边形曲线将线条添加到可变路径,然后在新区域上调用 setNeedsDisplayInRect。
问题是当绘图(路径)变得相当大时,重绘需要更长的时间,并开始陷入困境。以及每当用户更改画笔大小或颜色时,它都会将其应用于重绘时先前绘制的路径的重叠部分。
为了解决这个问题,我在 touchesEnded 的后台线程中调用 renderInContext,并将它与绘图 View 后面的 imageview 中的另一个 UIImage 合并。然后清除绘图 View 。
这也有帮助,因此当用户点击保存时,绘图通常已经呈现在单个 UIImage 中 - 准备就绪。
这在其他设备上运行良好,但在 iPad 3 视网膜显示屏上,性能非常糟糕,并且当用户在快速绘图时多次抬起手指时往往会崩溃。
我正在寻求有关处理此类情况的最佳实践的任何类型的建议?除了添加额外的 View 以在后台渲染以防止主线程和后台线程一次访问相同的 View - 这听起来相当 hack-ish - 我觉得我正在打败一匹死马?
最佳答案
在我当前的应用程序中,我做了一个在 iPad 2 和 3 上都能正常工作的工作实现,无论路径长度或路径数量如何。似乎显卡更擅长绘制大量小路径而不是一些大路径,并且任何一个都比将图像渲染到上下文中更快。所以,我所做的就是即使用户不断地绘制,我也会将路径分成许多较小的路径并将它们添加到数组中。这种方法给了我一个优点和一个缺点。
优点:清晰地缩放和重绘图像的能力
缺点:无法进行像素完美删除
至于多种颜色,我创建了 UIBezierPath
的子类包括颜色属性。由于颜色现在可以通过 NSCoding
进行序列化,它们很容易保存。此外,我还有一个“笔划”对象,它包含用户在一个连续笔划中创建的所有路径。这样我就可以正确处理撤消/重做。
希望这些信息有所帮助。
关于ios - 在 iPad 3 上渲染手绘上下文的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15149451/
我是一名优秀的程序员,十分优秀!