猫猫学IOS(三十四)UI之Quartz2D画画板的实现
来源:互联网 发布:监控淘宝产品宣传素材 编辑:程序博客网 时间:2024/05/01 13:49
猫猫分享,必须精品
原创文章,欢迎转载。转载请注明:翟乃玉的博客
地址:http://blog.csdn.net/u013357243?viewmode=contents
源码:http://blog.csdn.net/u013357243/article/details/45533403
效果:
实现过程:
首先用storyboard搭建界面,没有什么好说的。
然后就是注意的功能了,这里用了触摸事件来搭配Quartz2D的路径来画画。
思路就是把路径放到数组中
@property (nonatomic, strong) NSMutableArray *paths;
这里注意 如果用c语言的这个方式
CGMutablePathRef path = CGPathCreateMutable(); CGPathMoveToPoint(path, NULL, 20, 20); CGPathAddLineToPoint(path, NULL, 100, 100);
画的话,是不能放到oc的数组中的,所以用了UIBezierPath创建一个路径对象。
UIBezierPath *path = [UIBezierPath bezierPath];
然后就是把路径放到数组中,渲染
注意:刚刚开始我没有调用重绘方法,然后悲剧了,啥都没有。郁闷老半天。
重绘:
调用drawRect方法重回视图
[self setNeedsDisplay];
代码实现
开始触摸:
// 开始触摸- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ // 1.获取手指对应UITouch对象 UITouch *touch = [touches anyObject]; // 2.通过UITouch对象获取手指触摸的位置 CGPoint startPoint = [touch locationInView:touch.view]; // 3.当用户手指按下的时候创建一条路径 UIBezierPath *path = [UIBezierPath bezierPath]; // 3.1设置路径的相关属性 [path setLineJoinStyle:kCGLineJoinRound]; [path setLineCapStyle:kCGLineCapRound]; [path setLineWidth:10]; // 4.设置当前路径的起点 [path moveToPoint:startPoint]; // 5.将路径添加到数组中 [self.paths addObject:path];}
移动:
// 移动- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{ // 1.获取手指对应UITouch对象 UITouch *touch = [touches anyObject]; // 2.通过UITouch对象获取手指触摸的位置 CGPoint movePoint = [touch locationInView:touch.view]; // 3.取出当前的path UIBezierPath *currentPaht = [self.paths lastObject]; // 4.设置当前路径的终点 [currentPaht addLineToPoint:movePoint]; // 6.调用drawRect方法重回视图 [self setNeedsDisplay];}
回退和清屏方法:
- (void)clearView{ [self.paths removeAllObjects]; [self setNeedsDisplay];}- (void)backView{ [self.paths removeLastObject]; [self setNeedsDisplay];}
画线方法就是遍历数组中的UIBezierPath对象来实现
// 画线- (void)drawRect:(CGRect)rect{ [[UIColor redColor] set]; // 边路数组绘制所有的线段 for (UIBezierPath *path in self.paths) { [path stroke]; }}
12 2
- 猫猫学IOS(三十四)UI之Quartz2D画画板的实现
- (素材源码)猫猫学IOS(三十四)UI之Quartz2D画画板的实现
- 猫猫学IOS(三十四)UI之Quartz2D画画板的实现
- AJ学IOS(34)UI之Quartz2D画画板的实现
- 猫猫学IOS(二十八)UI之Quartz2D简单介绍
- 猫猫学IOS(三十一)UI之Quartz2D图形上下文栈
- 猫猫学IOS(三十一)UI之Quartz2D图形上下文栈
- AJ学IOS(28)UI之Quartz2D简单介绍
- 猫猫学IOS(二十九)UI之Quartz2D自定义下载控件_画各种图形
- (素材源码)猫猫学IOS(二十九)UI之Quartz2D自定义下载控件
- 猫猫学IOS(三十)UI之Quartz2D画图片画文字
- 猫猫学IOS(三十二)UI之Quartz2D矩阵操作和图片剪切
- 猫猫学IOS(三十三)UI之Quartz2D雪花飘落效果刷帧
- 猫猫学IOS(三十五)UI之Quartz2D仿真支付宝手势解锁_代理获得密码。
- 猫猫学IOS(三十三)UI之Quartz2D雪花飘落效果刷帧
- IOS开发UI:Quartz2D的使用
- (素材源码)猫猫学IOS(三十五)UI之Quartz2D仿真支付宝手势解锁_代理获得密码。
- (素材源码)猫猫学IOS(三十五)UI之Quartz2D仿真支付宝手势解锁_代理获得密码。
- 批处理for语句从入门到精通
- OC 经典设置器和经典访问器
- Android异步消息处理机制完全解析,带你从源码的角度彻底理解
- 如何利用论坛做推广 | 一个每天可以吸引50粉丝的推广思路
- 程序算出一个文件夹中所有文件的行数
- 猫猫学IOS(三十四)UI之Quartz2D画画板的实现
- 设计模式(行为型)之中介者模式(Mediator Pattern)
- 下列组件安装失败 Microsoft Visual Studio 2010 Ultimate - CHS
- java中内部类的访问调用
- python学习系列(四)--- 获得输入参数
- 四种方案解决ScrollView嵌套ListView问题
- java代码获取当前类类名、方法名
- HTML脚本相关问题
- Java基础知识复习(二)