美文网首页
带背景图片的画板功能实现

带背景图片的画板功能实现

作者: SimonYang966 | 来源:发表于2019-12-28 16:56 被阅读0次

1.实现效果图

drawingBoard.gif

2.画板主要功能:

1.画线
2.撤销上一步操作
3.清空当前画板
4.橡皮擦
5.保存所画内容

3.两种画板制作思路:

3.1 drawRect + Touch操作(TouchesBegan、TouchesMoved以及TouchesEnd)

我们需要保存所有的线,假如用户已经画了4条线,在画第五条线的时候(第5条线TouchMoved的过程中),第5条线每画一个点,就要将前面4条线在drawRect方法里重绘一下,否则,前面的画的线就会丢失。
可能存在的问题:因为这些drawrect都是保存在内存中的,每次都叠加前面的绘图操作,很容易引起内存的爆炸。所以使用时得格外注意。

如何解决这个问题呢?我们可以看看CAShapeLayer方法

3.2 CAShapeLayer + UIBeizerPath +Touch操作(TouchesBegan、TouchesMoved以及TouchesEnd)

使用CAShapeLayer+ UIBeizerPath 来绘图,不需要用到drawRect,使用CAShapeLayer方法的本质上就是创建了很多
子CAShapeLayer,每个子CAShapeLayer对象都单独保存了一个path,所以最后在屏幕显示时,系统会将当前view的layer以及它的所有子layer都渲染出来。无形之中,其实我们创建了很多子CAShapeLayer对象,而这些CAShapeLayer据说时GPU管理的的(不懂??),对内存优化确实挺大。(大家可以测试了看看)


4.橡皮擦功能

设计思路:
1.在ViewController模块,准备一个ImageView,并设置相应的图片,imageView添加到self.view当中。
2.在imageView添加一个子view(SCDrawingView),我们将要在这个子view上做一些touchesBegan、TouchesMoved以及TouchedEnd操作。
3.创建SCStrokeLine对象,我们将要用这个对象存储每次画的path,以及每条path的一些属性(线宽、线条颜色、blendMode)

悲伤的是,如果要用到橡皮擦功能,我们就不能用CAShapeLayer去画线条了,至少暂时我没找到解决方法。

5.保存所画内容

按照步骤4可知,我们准备了一个imageView,以及在imageView添加了子view(SCDrawingView),最后我们要将所画的内容保存成一张图片。
这时候,我们需要用到一个方法:

  • (void)renderInContext:(CGContextRef)ctx;
    注意,我们应该在imageView上去开一个图形上下文,将imageView的layer渲染到当前的上下文中,因为我们在imageView中添加了子view(SCDrawingView),换句话说imageView的layer也包含了SCDrawingView对象的layer,因此我们需要将imageview的layer渲染到画板上,这样才能得到SCDrawingView所画的带背景的线条。

6.Demo下载

https://github.com/SmileYang966/drawingBoard

相关文章

  • 带背景图片的画板功能实现

    1.实现效果图 2.画板主要功能: 1.画线2.撤销上一步操作3.清空当前画板4.橡皮擦5.保存所画内容 3.两种...

  • ios开发实现画板功能

    ios开发实现画板功能 ios开发实现画板功能

  • 画板功能的实现

    最近项目中用到了一个客户签字的功能,具体步骤就是客户签字确认,App把客户的签字生成一张PNG图片上传到服务器,服...

  • iOS 画板--UIBezierPath和CAShapeLaye

    iOS 画板--UIBezierPath和CAShapeLayer实现 最近在做的项目中,用到画板的功能,现在项目...

  • unity实现画板功能

    如题、公司想做早教方面的小游戏、文档中有连线需求 找了几个帖子、直接复制粘贴、运行、不是自己想要的功能、于是尝试改...

  • 画画板功能实现

    1 获取一张背景图片 BitmpFactory.decodeResource 2 创建一个副本 3 设置image...

  • android实现画板功能

    这两天闲来无事做了一个简易的画板程序,和大家分享一下。效果图: 这是一个灰常简单的画板,不过麻雀虽小,五脏俱全: ...

  • android各种效果库

    可能是最优雅的切换布局的方法 动态切换布局控件android 实现画板功能 本例详细分析了一个画板功能的实现过程,...

  • 02Canvas 画板

    1.功能描述 实现画画功能,并可切换画笔颜色、细条粗细。可保存、清空画板。 2.思路 创建画板——》监听鼠标(触屏...

  • iOS CAShapeLayer+UIBezierPath设置k

    最近在写一个类似画板的需求。 功能实现参考文章:内存恶鬼drawRect - 谈画图功能的内存优化 功能实现参考D...

网友评论

      本文标题:带背景图片的画板功能实现

      本文链接:https://www.haomeiwen.com/subject/jqvsoctx.html