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]相关推荐

  1. 贝塞尔结合CAShapeLayer绘制路线,CABasicAnimation实现的小动画

    最近项目需求,做的一个标识正在直播的小动画,代码如下: #import "YGIsOnLiveAnmationView.h" @interface YGIsOnLiveAnmati ...

  2. iOS通过CAShapeLayer和UIBezierPath画环形进度条

    UIBezierPath可以绘制矢量路径,而CAShapeLayer是Layer的子类,可以在屏幕进行绘制,本文主要思想是:CAShapeLayer按照UIBezierPath的矢量路径进行绘制. 效 ...

  3. iOS动画系列之八:使用CAShapeLayer绘画动态流量图

    这篇文章通过使用CAShapeLayer和UIBezierPath来画出一个动态显示剩余流量的小动画. 最终实现的效果如下: Paste_Image.png 动态效果图: shapeLayerAni. ...

  4. UIBezierPath和CAShapeLayer创建不规则View(Swift 3.0)

    最近一个朋友在做图片处理的 App,想要实现类似 MOLDIV App 拼图的UI效果(如何创建不规则的 view),就问我有什么想法.我首先想到的就是 UIBezierPath+CAShapeLay ...

  5. 贝塞尔曲线与CAShapeLayer的关系以及Stroke动画

    1.贝塞尔曲线与CAShapeLayer的关系    1.1CAShapeLayer须要一个形状才干生效,贝塞尔曲线能够创建基于矢量的路径.进而能够给CAShapeLayer提供路径,路径会闭环.   ...

  6. 使用CAShapeLayer实现一个音量大小动态改变的控件

    一.案例演示 对于实时显示语音音量大小的需求,发现很多人的实现方式通过预放置多张图进行切换进行完成的.这样的处理,不但会浪费App的资源存储空间,而且效率也不高.对于符合某一定规律动态改变的图形,我们 ...

  7. CAShapeLayer和CAGradientLayer

    两个动画效果来了解一下CALayer的两个重要的subClass,CAGradientLayer和CAShapeLayer. 微视录制视频的时候那个进度效果和Spark相机类似,但是个人还是比较喜欢S ...

  8. CAShapeLayer + UIBezierPath

    UIBezierPath: UIBezierPath是在 UIKit 中的一个类,继承于NSObject,可以创建基于矢量的路径.使用此类可以定义常见的圆形.多边形等形状 .我们使用直线.弧(arc) ...

  9. UIBezierPath和CAShapeLayer画直线、CGContextRef画直线两种方案

    在view的相关方法中可直接使用UIBezierPath和CAShapeLayer画图形- (void)makeBezierPath {/**CAShapeLayer属于QuartzCore框架,继承 ...

  10. 关于CAShapeLayer的一些实用案例和技巧

    一.使用CAShapeLayer实现复杂的View的遮罩效果 1.1.案例演示 最近在整理一个聊天的项目的时候,发送图片的时候,会有一个三角的指向效果,指向这张图片的发送者.服务端返回给我们的图片只是 ...

最新文章

  1. 海思3559A上编译LIVE555源码操作步骤
  2. 悟道 · 文溯详解:蛋白质序列的大规模预训练
  3. Intel Realsense pyrealsense rs.decimation_filter()类(通过使用具有特定内核大小的中值执行下采样)(抽取过滤器/抽取滤波器)
  4. 【项目管理】ITTO-资源管理
  5. serial driver 1
  6. Visual Studio 2010 旗舰版安装图解
  7. Centos7作为VNCserver,本地使用VNCViewer连接
  8. 带宽与码元的关系_再遇到码元、速率、、带宽【9】
  9. python3爬取教务系统_python requests模拟登陆正方教务管理系统,并爬取成绩
  10. 数据可视化之单属性(字段)
  11. Linux下安装配置Redis
  12. 001LeetCode--TwoSum
  13. linux调sqlloader命令,Linux环境SQLLDR导入出现SQLLOADER-553、509错误
  14. 对文件生成MD5文件配置表
  15. 光耦w314的各引脚图_P621 光耦
  16. 20【材料】相关专业调剂信息!一直更新!
  17. 采用汇编语言对c语言函数调用的方法求平均数 汇编实验报告,汇编措辞调用C措辞求平均数.doc...
  18. 王道数据结构线性表:有读者认为直接去掉p结点会造成断链?
  19. PC版微信如何输入换行符
  20. 18个最佳代码编辑器/IDE推荐

热门文章

  1. 在有原来的数据的情况下,恢复数据库的数据
  2. Python的元组被设计成不可变的影响
  3. ubuntu 转mysql_(转)Ubuntu 16.04下安装MySQL
  4. ios nstimer实现延时_iOS中定时器NSTimer的使用
  5. java 优化线程_Java | 多线程调优(下):如何优化多线程上下文切换?
  6. python支持向量机回归_机器学习实战-支持向量机原理、Python实现和可视化(分类)...
  7. python读取配置文件获取所有键值对_python读取配置文件
  8. tstringlist怎么查看是否存在该数据_注意!研究生招生信息只公开1个月!应该怎么用?...
  9. 计算机专业刚毕业本科生,计算机专业应届本科毕业生自我鉴定
  10. linux安装pgsql源码包解压,在Linux(centos)中使用源码安装pgRouting