画板
搭建界面
- 顶部view
- UIToolbar,会自动对里面的控件做自动布局
- 在toolbar里面拖入item
- 保存按钮在最右侧Flexible Space
- 隐藏状态栏:prefersStatusBarHidden YES
- 底部view
- ios9之后才出来的StackView
- 在stackview里面添加button
- stackView属性
- distribution:fillEqually
- spacing 20
画图
- 绑定drawView
- 添加手势Pan _ awakeFromNib
- pan手势方法里面画线
- 判断手势状态
- begin:
- 创建路径,搞一个成员属性,保存路径(能不能写在awakeFromNib中?--可以,一个路径可以描述多条线-->但是,一个路径只能对应一个状态,示例程序里每一个路径都是不同的状态)
- 获取当前手指的点
- moveToPoint
- change:
- 添加线到手指所在的点
- begin:
- 判断手势状态
- 搞一个数组,记录绘制的所有路径
设置线的状态属性
- 清屏、撤销、橡皮擦、选择颜色、设置线宽(应该写到画板里面)
- 在画板内部提供方法,谁的事情谁来处理
-
清屏
- 清空数组self.pathArray removeAllObjects
- 重绘 setNeedsDisplay
-
撤销
- 删除数组中最后一个元素
- 重绘
-
设置颜色
- 颜色只能在drawRect方法里面设置
- 自定义路径
- 定义一个属性,记录当前路径的颜色
- drawView
- 定义颜色属性
- drawRect:绘制颜色
-
设置线宽
- 下一次手指开始拖动的路径
- 定义一个成员属性lineWidth
- 设置默认线宽为1
- 线的连接样式joinRound
- 设置顶角样式CapStyle:Round
-
橡皮擦
- setColor whiteColor
保存照片到系统相册
- 把绘制的内容保存到系统相册中
- 对画板生成一张图片,把图片写到系统相册
- 开启位图上下文(画板的大小)
- renderInContext:
- 生成一张图片
- 关闭上下文
- 写到系统相册
- UIImageWriteToSavePhotosAlbum(写入哪张图片,写入完成时调用哪个方法,其他信息) 第一次执行这个代码会弹出一个框
- completionSelector,写入完成时候调用的方法,必须按照要求规范去写,不能瞎写image:didFinishSavingWithError:
从系统相册中选择照片
- 从底部modal出相册
- 系统提供的控制器
- 弹出系统相册选择控制器
- UIImagePickerController
- self presentViewController:animated:
- 设置照片的来源
- .sourceType
- libray
- camera
- album
- .sourceType
- 点击照片的时候,把照片给画板
- 代理(里三步系统做好了)
- .delegate = self
- 遵守协议:两个协议
- UINavigationControllDelegate
- UIPickerControllerDelegate
- imagePickerController:代理方法
- info:字典%@打印一下
- drawView定义image属性
- 重写setImage方法
- 图片也要放到数组当中去
- OC当中数组可以放两种不同的数据类型,但是swift不可以
- drawRect:方法中判断如果是图片就采用图片的画法,如果不是就是路径
- image:drawInRect
- 代理方法中,添加imageView,添加手势
- pan.view就是手势所在的view
- 允许支持多个手势
- 长按手势
- 开始的时候闪一下,改alpha值
- 把图片绘制到画板中
- 截屏
- UIImageView不可以,用UIView试一下
- 透明的UIView
- UIImageView添加到UIView里面
- 手势还是加给UIImageView
- 长按手势的时候,对UIView截屏
- HandleView
- 代理
- 手动dismiss