//触摸开始

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{

//    1,获取对应的touch对象

UITouch *touch = [touches anyObject];

//    2,通过touch对象获取手指触摸对象

CGPoint startPoint = [touch locationInView:touch.view];

//    3,创建小数组,保存当前路径所有点

NSMutableArray *subPoints = [NSMutableArray array];

//    4,手指触摸对象起点存于数组

[subPoints addObject:[NSValue valueWithCGPoint:startPoint]];

//    5,小数组存入大数组

[self.totalPoints addObject:subPoints];

}

//移动

-(void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{

//    1,获取对应的touch对象

UITouch *touch = [touches anyObject];

//    2,通过touch对象获取手指触摸对象

CGPoint movePoint = [touch locationInView:touch.view];

//    3,从大数组中取出当前路径对应的小数组

NSMutableArray *subPoints = [self.totalPoints lastObject];

//    4,手指触摸对象起点存于数组

[subPoints addObject:[NSValue valueWithCGPoint:movePoint]];

//    5,调用drawRect方法重回视图

[self setNeedsDisplay];

}

//触摸结束

-(void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{

[self touchesMoved:touches withEvent:event];

}

//画图

- (void)drawRect:(CGRect)rect {

//    1.获取图形上下文

CGContextRef ctx = UIGraphicsGetCurrentContext();

//    2.遍历大数组取出小数组

for(NSMutableArray *subPointArray in self.totalPoints)

{

for (int index = 0 ; index < subPointArray.count ; index++)

{

//            3.1取出小数组

CGPoint point = [subPointArray[index] CGPointValue];

//            3.2绘制线段

if(0 == index){

//                绘制起点

CGContextMoveToPoint(ctx, point.x, point.y);

}else{

//                绘制终点

CGContextAddLineToPoint(ctx, point.x, point.y);

}

}

}

CGContextSetLineCap(ctx, kCGLineCapRound);

CGContextSetLineJoin(ctx, kCGLineJoinRound);

CGContextSetLineWidth(ctx, 10);

//    渲染

CGContextStrokePath(ctx);

}

//  清屏

-(void)clean

{

[self.totalPoints removeAllObjects];

[self setNeedsDisplay];

}

//  撤销

-(void)back

{

[self.totalPoints removeLastObject];

[self setNeedsDisplay];

}

[ios]quartz2d画板功功能实现核心代码的更多相关文章

  1. 利用WxJava实现网站集成微信登录功能,核心代码竟然不超过10行

    最近网站PC端集成微信扫码登录,踩了不少坑,在此记录下实现过程和注意事项. 本文目录 一.微信开放平台操作步骤1.创建“网站应用”2.获取AppID和AppSecret二.开发指南三.开发实战1.po ...

  2. 代码规范[iOS]

    一.文件系统 二.代码结构 三.常量  宏 四.布局方式  数据持久化 五.网络 六.类目.延展 七.内存.线程 八.其他 九.版本控制.上线相关 十.附录1(公共库) 十一.附录2(公共类目) 十二 ...

  3. [IOS]Swift 遍历预制的本地资源文件

    我事先放了一堆svg文件,但是我是批量使用的,想要直接遍历他们加入到一个list中来,那我直接就遍历他们的名称,把他们的名字组成一个array. var ss:NSString = NSBundle. ...

  4. [ios]利用alertView 插入数据都数据库。笔记

    利用alertView 插入数据都数据库 -(void)addItemToList { UIAlertView *alter=[[UIAlertViewalloc]initWithTitle:@&qu ...

  5. [ios]关于用FMDB 操作数据库 删除 tableView 后刷新

    刚了解使用fmdb,从数据库获取数据 绑定到一个可变数组classNameItems //从ClassList表取得数据 FMResultSet *classInfo=[db executeQuery ...

  6. [ios]新手笔记-。-UIPickerView 关于伪造循环效果和延时滚动效果

    查找了网上资料,循环效果绝大部分都是增加行数来制造循环的错觉,延时滚动就是利用NSTimer间隔出发滚动事件来制造滚动效果. 代码: #import <UIKit/UIKit.h>#imp ...

  7. cocos2d-x 3.1.1 学习笔记[17] 关于这些活动功能

    供cocos2d-x通常使用的方法,我有一个好脸色.这项研究真的奖励. 向导首先,定义,实施一系列连续动作. 对于我们的行动能回调函数,我们必须申报并加以实施. void callBack(); vo ...

  8. iOS地图多个自定义大头针绘制核心代码

    首先需要自定义一个包含经纬度,title,subtitle的数据模型 #import <Foundation/Foundation.h> #import <MapKit/MapKit ...

  9. ios开发视频播放后台下载功能实现 :1,ios播放视频 ,包含基于AVPlayer播放器,2,实现下载,iOS后台下载(多任务同时下载,单任务下载,下载进度,下载百分比,文件大小,下载状态)(真机调试功能正常)

    ABBPlayerKit ios开发视频播放后台下载功能实现 : 代码下载地址:https://github.com/niexiaobo/ABBPlayerKit github资料学习和下载地址:ht ...

随机推荐

  1. 分布式统一配置平台-Disconf.Net

    源码地址:https://github.com/qkbao/Disconf.Net 作者:青客宝  联系qq:后续奉上 为了更好的解决分布式环境下多台服务实例的配置统一管理问题,本文提出了一套完整的分 ...

  2. 老李分享:MySql的insert语句的性能优化方案

    老李分享:MySql的insert语句的性能优化方案   性能优化一直是测试人员比较感兴趣的内容,poptest在培训学员的时候也加大了性能测试调优的方面的内容,而性能优化需要经验的积累,经验的积累依 ...

  3. Gym 101257G 24 (概率+二分)

    题意: 有一道分值为sa的题,n个人比赛写这道题,按照递减的顺序给出每个人的当前分数,和每个人写不出这道题的概率,让你输出有反超现象出现的期望 思路:由于之前把题目翻译错了导致很久没有相通,后来看了别 ...

  4. Android 开发之错误整理java.lang.SecurityException: Requires READ_PHONE_STATE: Neither user 10088 nor current process has android.permission.READ_PHONE_STATE.

    java.lang.SecurityException: Requires READ_PHONE_STATE: Neither user 10088 nor current process has a ...

  5. 上传图片转为base64格式预览并压缩图片(不兼容IE9以下浏览器,兼容移动端ios,android)

    前些天公司要求在微信移动端做上传图片并预览的功能,要求能够调用摄像头拍照并立即预览. 在网上搜了一些方法,开始自己写了个简单的功能实现代码.结果发现移动端拍照出来的图片动不动就2M+,又因为要批量上传 ...

  6. STM32固件库文件分析

    STM32固件库文件分析 1.汇编编写的启动文件 startup/stm32f10x.hd.s:设置堆栈指针,设置pc指针,初始化中断向量,配置系统时钟,对用c库函数_main最后去c语言世界里. 2 ...

  7. 跨web浏览器的IC卡读卡器解决方案

    BS结构的程序,如果要与IC卡读卡器通信本身就是件不容易解决的事情.微软的activex ocx技术将这种应用限制在IE浏览器上了,不兼容其它的浏览器.而Chrome使用插件也不兼容IE和其他的浏览器 ...

  8. linux sed命令就是这么简单

    概述 sed命令是一个面向字符流的非交互式编辑器,也就是说sed不允许用户与它进行交互操作.sed是按行来处理文本内容的.在shell中,使用sed来批量修改文本内容是非常方便的. sed命令的选项 ...

  9. MySQL之字符集-校对规则

    一.字符集(Character set) 是多个字符(英文字符,汉字字符,或者其他国家语言字符)的集合,字符集种类较多,每个字符集包含的字符个数不同. 特点: ①字符编码方式是用一个或多个字节表示字符 ...

  10. xLua中导出Dotween

    前言 在xlua的lua脚本中使用dotween,官方的文档中有提到可以导出,但未介绍详细的步骤,相信比较多的朋友有需要,刚好项目中也在使用xlua和dotween,所以做个笔记. 基础知识: xLu ...