iOS开发核心动画之画图板
1. 效果图
2. 用一个View来描述画图板,给画图板添加拖动的手势
// 从xib中加载
- (void)awakeFromNib
{
[self setUpGesture];
}
// 代码创建
- (instancetype)initWithFrame:(CGRect)frame
{
if (self = [super initWithFrame:frame]) {
[self setUpGesture];
}
return self;
}
// 初始化添加拖动手势
- (void)setUpGesture
{
UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)];
[self addGestureRecognizer:pan];
self.color = [UIColor blackColor];
self.width = 1;
}
3. 监听手势方法
1> 判断拖动开始拖动设置为路径的的起始点,添加路径并保存路径,将当前路径添加到数组中
设置路径的相关属性(颜色/宽度/圆角)
2> 拖动过程中的点添加直线重绘
// 监听手势方法
- (void)pan:(UIPanGestureRecognizer *)pan
{
// 获取当前触摸点
CGPoint curP = [pan locationInView:self];
if (pan.state == UIGestureRecognizerStateBegan) { // 开始拖动
// 获取开始点
CGPoint startP = curP;
// 创建路径
LDBezierPath *path = [[LDBezierPath alloc] init];
self.path = path;
[self.pathArray addObject:path];
// 设置宽度
[path setLineWidth:self.width];
// 设置颜色
[path setLineColor:self.color];
// 设置圆角
[path setLineJoinStyle:kCGLineJoinRound];
[path setLineCapStyle:kCGLineCapRound];
// 添加起始点
[path moveToPoint:startP];
} else if (pan.state == UIGestureRecognizerStateChanged) {
// 添加直线
[self.path addLineToPoint:curP];
// 重绘
[self setNeedsDisplay];
}
}
4. 绘制, 遍历数组中的路径,判断是否是图片,如果是图片则将图片绘制上去,反之为路径,直接绘制路径
// 绘制
- (void)drawRect:(CGRect)rect {
// 变量路径数组重绘
for (LDBezierPath *path in self.pathArray) {
if (path.class == [UIImage class]) {
UIImage *image = (UIImage *)path;
[image drawInRect:rect];
NSLog(@"%@", image);
} else {
[path.lineColor set];
[path stroke];
}
}
}
5. 图片保存
// 保存
- (void)save
{
if (self.pathArray.count) {
// 1.开启位图上下文
UIGraphicsBeginImageContextWithOptions(self.bounds.size, NO, 0);
// 2.获取当前上下文
CGContextRef ref = UIGraphicsGetCurrentContext();
// 3.将view的layer渲染到位图上下文总
[self.layer renderInContext:ref];
// 4.获取位图上下文中的image
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
// 5.关闭位图上下文
UIGraphicsEndImageContext();
// 6.将图片保存到相册
UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
} else {
[MBProgressHUD showError:@"没有图片可保存"];
}
}
- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo
{
[MBProgressHUD showSuccess:@"保存成功"];
}
转载于:https://www.cnblogs.com/Xfsrn/p/5000349.html
iOS开发核心动画之画图板相关推荐
- iOS开发核心动画之Quartz2D绘图
一. Quartz2D的绘制不同图形 1. 绘图步骤 1> 自定义一个View 2> 在- (void)drawrectangle方法中进行绘图 获取当前上下文 CGContextRef ...
- iOS学习——核心动画之Layer基础
iOS学习--核心动画之Layer基础 1.CALayer是什么? CALayer我们又称它叫做层.在每个UIView内部都有一个layer这样一个属性,UIView之所以能够显示,就是因为它里面有这 ...
- iOS 开发之动画篇 - 从 UIView 动画说起
毋庸置疑的:在iOS开发中,制作动画效果是最让开发者享受的环节之一.一个设计严谨.精细的动画效果能给用户耳目一新的效果,吸引他们的眼光 -- 这对于app而言是非常重要的. 本文作为动画文集的第一篇, ...
- iOS CoreAnimation 核心动画系列博客索引
学了这些文章能做什么,了解核心动画各个类能做什么,产品有些简单的视图平移.旋转.折叠.抖动的需求,都能搞了 我们写博客的目的是学习研究之后做记录,捎带让别人指教,就是这么简单 博客文章都是对同一个领域 ...
- iOS开发-动画总结
一.简介 IOS 动画主要是指Core Animation框架.官方使用文档地址为:Core Animation Guide. Core Animation是IOS和OS X平台上负责图形渲染与动画的 ...
- ios开发学习--动画(Animation)效果源码分享--系列教程1
Genie View 介绍: 实现所谓的genie effect.即点击最小化或删除按钮,视图会被吸进某个地方. http://ios.itmdc.com/forum.p ...
- iOS 开发之动画篇 - Transform和KeyFrame动画
原文发布于http://www.jianshu.com/p/a071bba99a1b 序言 追求美好是人的天性,这是猿们无法避免的.我们总是追求更为酷炫的实现,如果足够仔细,我们不难发现一个好的动画通 ...
- IOS开发之——动画-转场动画(98)
一 概述 CATransition转场动画介绍 专场动画属性及过渡效果 示例(动画切换模拟转场动画) 二 CATransition专场动画介绍 nCATransition是CAAnimation的子类 ...
- iOS开发中动画之点赞图标放大效果
大多数手机App的点赞图标在我们点击的时候都会有一个放大的效果,随后还原.之前公司App有点赞功能但却没有这个放大之后还原的效果,于是研究一下准备将该效果添加到项目中. 思路:为点赞图标添加一个动画, ...
最新文章
- ERP与EWM集成配置---ERP 端(一)
- (原創) 标准的makefile写法 (C/C++)
- CG-CTF-Web-层层递进
- ICCV2019 | 腾讯优图13篇论文入选,其中3篇被选为Oral
- java hibernate回滚_Spring Hibernate 测试事务不能回滚
- sgu 101 domino
- linux 帐号 配置sftp_Linux 下sftp配置之密钥方式登录详解
- 量化研究: Julia还是Matlab?
- linux shell编程文本处理命令grep
- python库-密码学库pynacl
- java实现csdn免积分工具_CSDN免积分下载工具
- Spring Boot配置QueryDSL(生成Query查询实体类,查询数据)
- Verilog无符号除法器-状态机实现
- 关于ppp、PPPoE、PPTP、L2TP、IPSec协议的简单认识
- The semaphore timeout period has expired
- activiti流程图下发任务报错,不能正常流转到下一个处理步骤
- java中boot是什么,Spring boot是什么
- 骁龙780G和麒麟990哪个好
- 结构化数据和半结构化数据和非结构化数据
- matlab里颜色直方图的画法
热门文章
- template与图片懒加载
- POSIX正则表达式 验证电子邮件地址
- 三天打工生活终于结束了
- 笔试算法题--汪仔换道具
- Osmocom-BB 相关资源、知识分享
- docker 与tomcat整合
- 华三 交换 IRF V7
- android-解决 Android N 上 报错:android.os.FileUriExposedException
- Could not load type 'System.Web.Mvc.ViewPagedynamic' in asp.net mvc2 after publishing the website
- 精通CSS+DIV基础总结(三)