//触摸开始

-(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. java之泛型解说

    1.集合中只能装入引用数据类型,不能装入基本数据类型.如,装入int类型的数值123会自动装箱. 2.开发人员装入集合的数据类型不确定,所以它被设计成可以装入所有的Object. 3.新的问题产生,装 ...

  2. Think In Java_读书笔记_042516

    面向对象程序设计方式: 1, 万物皆对象. 2,程序是对象的集合,他们通过发送消息来告知彼此所要做的.(个人理解,比如你调用方法的时候需要去调用某个对象的某个方法,必须传相应的参数,这些参数列表就相当 ...

  3. 微信小程序支付简单小结与梳理

    前言 公司最近在做微信小程序,被分配到做支付这一块,现在对这一块做一个简单的总结和梳理. 支付,对于购物来说,可以说是占据了十分重要的一块,毕竟能收到钱才是重点. 当然在开发之前,我们需要有下面这些东 ...

  4. 混合式app ionic2.x 手动搭建开发环境教程分享(nodejs,jdk,ant,androidsdk)

    1.ionic简介 为什么选用ionic: 彻底开源且免费 性能优异 基于红的发紫的AngularJs 漂亮的UI 强大的命令行(基于更热门的nodejs) 开发团队非常活跃 ngCordova,将主 ...

  5. nginx反向代理的nginx.conf配置

    下面的配置是nginx.conf的示例 nginx反向代理 就是说把跨域的url通过本地代理的方式,变成同域的请求,如此来解决跨域问题 该配置下 通过http://localhost/html5/路径 ...

  6. Oracle数据库报错:索引中丢失 IN 或 OUT 参数

    另外,我记得好像以前也有这样的错误发生,当时的错误原因是,参数类型和数据库的类型不匹配引起的. 所以,如果有这种错误发生,应该仔细检查每个字段赋值的地方,检查类型及非空. 也可能是传参数问题,传参数过 ...

  7. ios app网址说明

    URLforBrowser = 'https://itunes.apple.com/cn/app/wan-huo-shi-shang-zhu-li-ren/id1077705***'; URLfori ...

  8. 使用HttpClient进行Get方式通信

    下载apache包 http://hc.apache.org/downloads.cgi 比较eclipse自带api,简单,易上手 实例: package zw1; import java.io.I ...

  9. 面试题 ARC

    什么是ARC ?ARC主要解决什么问题? ARC:自动引用计数. 要点..当对象被创建时 retain count+1, 当对象被release时 retain count-1, 当retain co ...

  10. Android系统--输入系统(八)Reader线程_使用EventHub读取事件

    Android系统--输入系统(八)Reader线程_使用EventHub读取事件 1. Reader线程工作流程 获得事件 size_t count = mEventHub->getEvent ...