CAShapeLayer的使用[1]
CAShapeLayer的使用[1]
使用CoreAnimation绘制动画带来的系统开销非常的小,CoreAnimation通常都是使用GPU的.
CAShapeLayer属于CoreAnimation中很重要的一种layer,无论是作为mask还是作为进度条显示都非常的好用,我用CAShapeLayer实现了如下复杂的效果.
// // RootViewController.m // // Copyright (c) 2014年 Y.X. All rights reserved. // #import "RootViewController.h" #import "UIImage+ImageEffects.h"@interface RootViewController ()@property (nonatomic, strong) UIView *showView; @property (nonatomic, strong) CAShapeLayer *oneReferenceLayer; @property (nonatomic, strong) CAShapeLayer *maskLayer;@end#define DEGREES(degrees) ((M_PI * (degrees))/ 180.f)@implementation RootViewController- (void)handlePan:(UIPanGestureRecognizer *)recognizer {// 拖拽CGPoint translation = [recognizer translationInView:self.view];recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x,recognizer.view.center.y + translation.y);[recognizer setTranslation:CGPointMake(0, 0) inView:self.view];// 关闭CoreAnimation实时动画绘制(核心) [CATransaction setDisableActions:YES];_maskLayer.position = recognizer.view.center; }- (void)viewDidLoad {[super viewDidLoad];/* ====== 背景View ====== */UIImageView *imageView = [[UIImageView alloc] initWithFrame:self.view.bounds];imageView.image = [UIImage imageNamed:@"back"];[self.view addSubview:imageView];/* ====== 作为mask的View ====== */_maskLayer = [CAShapeLayer layer];// 贝塞尔曲线(创建一个圆)UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(0, 0)radius:100startAngle:DEGREES(0)endAngle:DEGREES(360)clockwise:YES];// 获取path_maskLayer.path = path.CGPath;_maskLayer.position = CGPointMake(_showView.bounds.size.width/2.f,_showView.bounds.size.height/2.f);// 设置填充颜色为透明_maskLayer.fillColor = [UIColor blackColor].CGColor;_maskLayer.position = self.view.center;UIView *blurView = [[UIView alloc] initWithFrame:self.view.bounds];blurView.backgroundColor = [UIColor blackColor];[self.view addSubview:blurView];blurView.layer.mask = _maskLayer;blurView.layer.contents = (__bridge id)([[UIImage imageNamed:@"back"] blurImage].CGImage);/* ====== 透明的View,用于maskView中的ShapeLayer的参考View(用于拖拽) ====== */_showView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)];_showView.backgroundColor = [UIColor clearColor];_showView.center = self.view.center;[self.view addSubview:_showView];UIPanGestureRecognizer *recognizer = \[[UIPanGestureRecognizer alloc] initWithTarget:selfaction:@selector(handlePan:)];[_showView addGestureRecognizer:recognizer]; }@end
这个地方很关键哦,没有关闭的话会非常的卡顿的.
shapeLayer作为mask的一些技巧.
CAShapeLayer的使用[1]相关推荐
- 贝塞尔结合CAShapeLayer绘制路线,CABasicAnimation实现的小动画
最近项目需求,做的一个标识正在直播的小动画,代码如下: #import "YGIsOnLiveAnmationView.h" @interface YGIsOnLiveAnmati ...
- iOS通过CAShapeLayer和UIBezierPath画环形进度条
UIBezierPath可以绘制矢量路径,而CAShapeLayer是Layer的子类,可以在屏幕进行绘制,本文主要思想是:CAShapeLayer按照UIBezierPath的矢量路径进行绘制. 效 ...
- iOS动画系列之八:使用CAShapeLayer绘画动态流量图
这篇文章通过使用CAShapeLayer和UIBezierPath来画出一个动态显示剩余流量的小动画. 最终实现的效果如下: Paste_Image.png 动态效果图: shapeLayerAni. ...
- UIBezierPath和CAShapeLayer创建不规则View(Swift 3.0)
最近一个朋友在做图片处理的 App,想要实现类似 MOLDIV App 拼图的UI效果(如何创建不规则的 view),就问我有什么想法.我首先想到的就是 UIBezierPath+CAShapeLay ...
- 贝塞尔曲线与CAShapeLayer的关系以及Stroke动画
1.贝塞尔曲线与CAShapeLayer的关系 1.1CAShapeLayer须要一个形状才干生效,贝塞尔曲线能够创建基于矢量的路径.进而能够给CAShapeLayer提供路径,路径会闭环. ...
- 使用CAShapeLayer实现一个音量大小动态改变的控件
一.案例演示 对于实时显示语音音量大小的需求,发现很多人的实现方式通过预放置多张图进行切换进行完成的.这样的处理,不但会浪费App的资源存储空间,而且效率也不高.对于符合某一定规律动态改变的图形,我们 ...
- CAShapeLayer和CAGradientLayer
两个动画效果来了解一下CALayer的两个重要的subClass,CAGradientLayer和CAShapeLayer. 微视录制视频的时候那个进度效果和Spark相机类似,但是个人还是比较喜欢S ...
- CAShapeLayer + UIBezierPath
UIBezierPath: UIBezierPath是在 UIKit 中的一个类,继承于NSObject,可以创建基于矢量的路径.使用此类可以定义常见的圆形.多边形等形状 .我们使用直线.弧(arc) ...
- UIBezierPath和CAShapeLayer画直线、CGContextRef画直线两种方案
在view的相关方法中可直接使用UIBezierPath和CAShapeLayer画图形- (void)makeBezierPath {/**CAShapeLayer属于QuartzCore框架,继承 ...
- 关于CAShapeLayer的一些实用案例和技巧
一.使用CAShapeLayer实现复杂的View的遮罩效果 1.1.案例演示 最近在整理一个聊天的项目的时候,发送图片的时候,会有一个三角的指向效果,指向这张图片的发送者.服务端返回给我们的图片只是 ...
最新文章
- 海思3559A上编译LIVE555源码操作步骤
- 悟道 · 文溯详解:蛋白质序列的大规模预训练
- Intel Realsense pyrealsense rs.decimation_filter()类(通过使用具有特定内核大小的中值执行下采样)(抽取过滤器/抽取滤波器)
- 【项目管理】ITTO-资源管理
- serial driver 1
- Visual Studio 2010 旗舰版安装图解
- Centos7作为VNCserver,本地使用VNCViewer连接
- 带宽与码元的关系_再遇到码元、速率、、带宽【9】
- python3爬取教务系统_python requests模拟登陆正方教务管理系统,并爬取成绩
- 数据可视化之单属性(字段)
- Linux下安装配置Redis
- 001LeetCode--TwoSum
- linux调sqlloader命令,Linux环境SQLLDR导入出现SQLLOADER-553、509错误
- 对文件生成MD5文件配置表
- 光耦w314的各引脚图_P621 光耦
- 20【材料】相关专业调剂信息!一直更新!
- 采用汇编语言对c语言函数调用的方法求平均数 汇编实验报告,汇编措辞调用C措辞求平均数.doc...
- 王道数据结构线性表:有读者认为直接去掉p结点会造成断链?
- PC版微信如何输入换行符
- 18个最佳代码编辑器/IDE推荐
热门文章
- 在有原来的数据的情况下,恢复数据库的数据
- Python的元组被设计成不可变的影响
- ubuntu 转mysql_(转)Ubuntu 16.04下安装MySQL
- ios nstimer实现延时_iOS中定时器NSTimer的使用
- java 优化线程_Java | 多线程调优(下):如何优化多线程上下文切换?
- python支持向量机回归_机器学习实战-支持向量机原理、Python实现和可视化(分类)...
- python读取配置文件获取所有键值对_python读取配置文件
- tstringlist怎么查看是否存在该数据_注意!研究生招生信息只公开1个月!应该怎么用?...
- 计算机专业刚毕业本科生,计算机专业应届本科毕业生自我鉴定
- linux安装pgsql源码包解压,在Linux(centos)中使用源码安装pgRouting