[ios]quartz2d画板功功能实现核心代码
//触摸开始
-(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画板功功能实现核心代码的更多相关文章
- 利用WxJava实现网站集成微信登录功能,核心代码竟然不超过10行
最近网站PC端集成微信扫码登录,踩了不少坑,在此记录下实现过程和注意事项. 本文目录 一.微信开放平台操作步骤1.创建“网站应用”2.获取AppID和AppSecret二.开发指南三.开发实战1.po ...
- 代码规范[iOS]
一.文件系统 二.代码结构 三.常量 宏 四.布局方式 数据持久化 五.网络 六.类目.延展 七.内存.线程 八.其他 九.版本控制.上线相关 十.附录1(公共库) 十一.附录2(公共类目) 十二 ...
- [IOS]Swift 遍历预制的本地资源文件
我事先放了一堆svg文件,但是我是批量使用的,想要直接遍历他们加入到一个list中来,那我直接就遍历他们的名称,把他们的名字组成一个array. var ss:NSString = NSBundle. ...
- [ios]利用alertView 插入数据都数据库。笔记
利用alertView 插入数据都数据库 -(void)addItemToList { UIAlertView *alter=[[UIAlertViewalloc]initWithTitle:@&qu ...
- [ios]关于用FMDB 操作数据库 删除 tableView 后刷新
刚了解使用fmdb,从数据库获取数据 绑定到一个可变数组classNameItems //从ClassList表取得数据 FMResultSet *classInfo=[db executeQuery ...
- [ios]新手笔记-。-UIPickerView 关于伪造循环效果和延时滚动效果
查找了网上资料,循环效果绝大部分都是增加行数来制造循环的错觉,延时滚动就是利用NSTimer间隔出发滚动事件来制造滚动效果. 代码: #import <UIKit/UIKit.h>#imp ...
- cocos2d-x 3.1.1 学习笔记[17] 关于这些活动功能
供cocos2d-x通常使用的方法,我有一个好脸色.这项研究真的奖励. 向导首先,定义,实施一系列连续动作. 对于我们的行动能回调函数,我们必须申报并加以实施. void callBack(); vo ...
- iOS地图多个自定义大头针绘制核心代码
首先需要自定义一个包含经纬度,title,subtitle的数据模型 #import <Foundation/Foundation.h> #import <MapKit/MapKit ...
- ios开发视频播放后台下载功能实现 :1,ios播放视频 ,包含基于AVPlayer播放器,2,实现下载,iOS后台下载(多任务同时下载,单任务下载,下载进度,下载百分比,文件大小,下载状态)(真机调试功能正常)
ABBPlayerKit ios开发视频播放后台下载功能实现 : 代码下载地址:https://github.com/niexiaobo/ABBPlayerKit github资料学习和下载地址:ht ...
随机推荐
- Oracle DQL查询语言整理
select * from t_hq_ryxx; select nianl, xingm from t_hq_ryxx; select nianl as 年龄, xingm as 姓名 from t_ ...
- Mysql数据库读写分离Amoeba
1.理解读写分离的原理 随着一个网站的业务不断扩展,数据不断增加,数据库的压力也会越来越大,对数据库或者SQL的基本优化可能达不到最终的效果,我们可以采用读写分离的策略来改变现状.读写分离现在被大量应 ...
- Linux集群
集群的起源: 集群并不是一个全新的概念,其实早在七十年代计算机厂商和研究机构就开始了对集群系统的研究和开发.由于主要用于科学工程计算,所以这些系统并不为大家所熟知.直到Linux集群的出现,集群的概念 ...
- 【Egret】里使用audio标签达到默认播放背景音乐
方法一 <audio id="bgmMusic" style="position:absolute;" src="resource/assets ...
- 在VB6/VBA中使用正则表达式
一.关于起因 最近在Office的QQ群里问如何在一串字符串中提取数值并加总的问题.如果使用正则表达式可以非常迅速的解决这个问题. 那么今天我就探讨一下在VB6/VBA中使用正则表达式的方法及代码,另 ...
- TCP/IP笔记(四)IP协议
前言 IP相当于OSI参考模型的第3层--网络层:主要作用是"实现终端节点之间的通信"又称"点对点通信". IP作为整个TCP/IP中至关重要的协议,主要负责将 ...
- iptables初探
一,前言 本来想起个名字叫做"小白都是怎么学习iptables的?"或者"你为什么还不了解iptables?"等等,就像简书上的头条文章,虽然被说成" ...
- 五分钟秒懂Java日志组件
Java中有许多种日志记录方式,有些API有占位符,有些API没占位符,初学的人可能会搞不清楚这些日志组件的由来.我一开始的时候也是很懵逼的,后来一点点弄懂了于是就又了这篇文章. 在Java中进行日志 ...
- 查看mac上的隐藏文件
打开终端敲入(最好是复制),这样就可以隐藏隐藏文件: defaults write com.apple.finder AppleShowAllFiles -boolean false ; killal ...
- ArcGIS API for JavaScript 4.2学习笔记[27] 网络分析之最短路径分析【RouteTask类】
要说网页端最经典的GIS应用,非网络分析莫属了. 什么?你没用过?百度高德谷歌地图的路线分析就是活生生的例子啊!只不过它们是根据大实际背景优化了结果显示而已. 这个例子使用RouteTask进行网络分 ...