我一直在寻找this thread,因为我试图实现同样的事情。但是,我发现Canvas类是作为UIImageView的子类实现的。我试图做同样的事情,除了在UIView。如何使用UIView而不是UIImageView影响此解决方案的实施?我看到self.image
使用了几次,但我不知道如何改变,因为我不认为这在通用UIView中可用。Swift:在UIView中绘制基于触摸的UIBezierPath
0
A
回答
0
在回答这个问题时,首先将self.image绘制到绘图上下文中,然后将绘图应用到顶部,最后将图像更新为旧图像,并在顶部绘制新内容。
既然你只是想添加一个UIBezierPath,我只需要创建一个CAShapeLayer,放入你的bezier路径,并将它放在你的视图背景层(self.view.layer)之上。 DrawRect不需要做任何事情。
0
是的,您可以将其作为UIView
子类实现。您的模型应该保存触摸事件的位置(或从这些位置构建的路径),然后该视图的drawRect
可以呈现这些路径。或者,您也可以创建与这些路径关联的对象CAShapeLayer
。两种方法都很好。
注意,有一些优点,以使快照的方法(保存为UIImage
)对象,你在UIImageView
或手动两种显示绘制你的UIView
子类的drawRect
。随着您的绘图变得越来越复杂,如果您的drawRect
必须重新绘制所有路径段(因为与单个屏幕手势相关联的触摸很多,所以它可能会惊人地快速变为数千个位置),您将开始遇到性能问题。一触即发。恕我直言,我认为你引用的其他答案太过分了,每创建一个新快照touchesMoved
。当您查看Retina iPad或iPhone 6 plus的全分辨率图像时,这是在每次触摸事件时创建的大图像快照。我个人采用混合方式:我的drawRect
或CAShapeLayer
将呈现与当前手势相关联的当前路径(或touchesBegan
和touchesEnded
之间的touchesMoved
事件的集合),但是当手势完成时,它将创建新的快照。
相关问题
- 1. 如何使用UIBezierPath在可可触摸中绘制多边形
- 2. 在swift中使用UIBezierPath绘制形状
- 3. UIBezierPath中风在触摸中重绘多次
- 4. 基于CGPoint在屏幕上绘制UIView
- 5. 如何在UIView上触摸移动绘制任意路径
- 6. 在可可触摸中实现基于触摸的旋转
- 7. 在ColorPicker UIView上限制触摸 - iOS
- 8. 检测上UIBezierPath中风触摸,不填
- 9. iOS基于Swift Time的线条绘制
- 10. 基于Swift中的触摸正确地移动Sprite
- 11. 获取位于触摸位置的uiview
- 12. Lua Gideros:绘制触摸线
- 13. 在基于动画CGPoint的UIView中绘制一条线。
- 14. UIBezierPath平滑曲线手指触摸绘图
- 15. Swift iOS - 检测触摸拖动从外部输入UIView UIView
- 16. 当我触摸UIVIew
- 17. 在UIView上触摸事件
- 18. 使用UIBezierPath绘制圆角使用UIBezierPath
- 19. UIView:如何专门限制触摸
- 20. UIView中的UIBezierPath动画
- 21. 多的UIView与UIBezierPath
- 22. 旋转时的触摸绘制
- 23. 真实图像或绘图在UIView移动与触摸?
- 24. 用UIView绘制渐变画()用swift
- 25. 可可触摸 - 用触摸点绘制核心图形
- 26. 用UIBezierPath绘制一条线
- 27. 绘制饼图与UIBezierPath
- 28. iOS - 检测UIView中的触摸?
- 29. UIView子类,触摸事件
- 30. UIView触摸位置坐标
如果我使用UIImage并制作快照,我可以编辑已绘制的形状吗?这听起来对我来说,如果他们是在一个图像中,他们不会被编辑,我只能在他们之上画更多的东西,而不会删除我已经绘制的任何东西。这是我想要做的一个关键功能,所以如果这是不可能的,我必须用UIView来完成。 – NumberOneRobot 2014-12-01 20:10:22
显然,快照将不可编辑(当然,超出像素编辑)。但是,如果保留用于生成该快照的模型对象(例如路径),则可以编辑模型,然后在理论上随时重新生成快照。因此,我建议快照不是模型(正如其他问题的接受答案似乎暗示的那样),而只是一种渲染优化,可以避免每次更新模型时重新绘制所有旧路径。 – Rob 2014-12-01 20:36:42
因此,保存一张图片,也许每次我创建一个新的贝塞尔路径,然后每次添加一条新路径时,我都会从图像和路径创建一个新图像?那么,而不是必须重新渲染具有巨大潜在点数的贝塞尔路径,而是只需渲染图像,它只是指定的像素? – NumberOneRobot 2014-12-01 20:48:10