● 其实UIView之所以能显示在屏幕上,完全是因为它内部的一个图层(CALayer)
● 在创建UIView对象时,UIView内部会自动创建一个图层(即CALayer对象),通过UIView 的layer属性可以访问这个层

@property(nonatomic,readonly,retain) CALayer *layer;

● 当UIView需要显示到屏幕上时,会调用drawRect:方法进行绘图,并且会将所有内容绘制在 自己的图层上,绘图完毕后,系统会将图层拷贝到屏幕上,于是就完成了UIView的显示

● 换句话说,UIView本身不具备显示的功能,是它内部的层才有显示功能

CALayer的基本使用

● 通过操作CALayer对象,可以很方便地调整UIView的一些外观属性,比如: ➢ 阴影
➢ 圆角大小
➢ 边框宽度和颜色

➢......
● 还可以给图层添加动画,来实现一些比较炫酷的效果

CALayer的属性

● 宽度和高度
@property CGRect bounds;

● 位置(默认指中点,具体由anchorPoint决定)

@property CGPoint position;

● 锚点(x,y的范围都是0-1),决定了position的含义

@property CGPoint anchorPoint;

● 背景颜色(CGColorRef类型)
@property CGColorRef backgroundColor;

● 形变属性
@property CATransform3D transform;

● 边框颜色(CGColorRef类型)
@property CGColorRef borderColor;

● 边框宽度
@property CGFloat borderWidth;

● 圆角半径
@property CGColorRef borderColor;

● 内容(比如设置为图片CGImageRef)

@property(retain) id contents;

UIView和CALayer的选择

● 通过CALayer,就能做出跟UIImageView一样的界面效果

● 既然CALayer和UIView都能实现相同的显示效果,那究竟该选择谁好呢?
➢其实,对比CALayer,UIView多了一个事件处理的功能。也就是说,CALayer不能处理用户的触摸事件,而UIView可以
➢ 所以,如果显示出来的东西需要跟用户进行交互的话,用UIView;如果不需要跟用户   进行交互,用UIView或者CALayer都可以
➢ 当然,CALayer的性能会高一些,因为它少了事件处理的功能,更加轻量级

CALayer有2个非常重要的属性:position和anchorPoint

● @propertyCGPointposition; ➢ 用来设置CALayer在父层中的位置
➢ 以父层的左上角为原点(0, 0)

● @propertyCGPointanchorPoint;
➢ 称为“定位点”、“锚点”

➢ 决定着CALayer身上的哪个点会在position属性所指的位置
➢ 以自己的左上角为原点(0, 0)
➢ 它的x、y取值范围都是0~1,默认值为(0.5,0.5)

@interface NJViewController ()
@property (weak, nonatomic) IBOutlet UIView *customView;
@property (weak, nonatomic) IBOutlet UIImageView *iconView; @end @implementation NJViewController - (void)viewDidLoad
{
[super viewDidLoad];
} - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
/*
// self.iconView.transform = CGAffineTransformMakeTranslation(0, -100); // self.iconView.layer.transform = CATransform3DMakeTranslation(0, -100, 0); // NSValue *v = [NSValue valueWithCATransform3D:CATransform3DMakeTranslation(0, -200, 0)];
// [self.iconView.layer setValue:v forKeyPath:@"transform"]; [self.iconView.layer setValue:@(-100) forKeyPath:@"transform.translation.x"];
*/ /*
// self.iconView.transform = CGAffineTransformMakeRotation(M_PI_4);
// self.iconView.layer.transform = CATransform3DMakeRotation(M_PI_4, 0, 0, 9998);// X, Y, Z
// [self.iconView.layer setValue:@(M_PI_2) forKeyPath:@"transform.rotation.z"];
*/ // self.iconView.transform = CGAffineTransformMakeScale(0.5, 0.5);
self.iconView.layer.transform = CATransform3DMakeScale( , , );
} - (void)test2
{
self.iconView.layer.borderWidth = ;
self.iconView.layer.borderColor = [UIColor purpleColor].CGColor;
self.iconView.layer.cornerRadius = ;
// 设置超出主图层的部分剪切掉
// self.customView.clipsToBounds = YES;
self.iconView.layer.masksToBounds = YES;
self.iconView.layer.bounds = CGRectMake(, , , );
self.iconView.layer.position = CGPointMake( , );
} - (void)test
{
/**/
// 设置layer边框
self.customView.layer.borderWidth = ;
// 设置layer边框颜色
self.customView.layer.borderColor =[UIColor blackColor].CGColor;
// 设置layer的圆角(设置主图层的圆角)
self.customView.layer.cornerRadius = ; // 设置超出主图层的部分剪切掉
// self.customView.clipsToBounds = YES;
// self.customView.layer.masksToBounds = YES; // 设置的image不是展示在主图层上的, 是展示在子图层上的
self.customView.layer.contents = (id)[UIImage imageNamed:@"me"].CGImage; // 设置阴影颜色
self.customView.layer.shadowColor = [UIColor purpleColor].CGColor;
// 设置阴影偏移位
// 如果为正数, 代表往右边偏移
self.customView.layer.shadowOffset = CGSizeMake(, );
// 设置阴影透明的 0~1 1完全不透明 0 完全透明
self.customView.layer.shadowOpacity = ;} @end

IOS CALayer基本使用 (图层)的更多相关文章

  1. iOS - CALayer 绘图层

    1.CALayer 绘图层 在 iOS 系统中,你能看得见摸得着的东西基本上都是 UIView,比如一个按钮.一个文本标签.一个文本输入框.一个图标等等,这些都是 UIView.其实 UIView 之 ...

  2. IOS CALayer的属性和使用

    一.CALayer的常用属性 1.@propertyCGPoint position; 图层中心点的位置,类似与UIView的center:用来设置CALayer在父层中的位置:以父层的左上角为原点( ...

  3. iOS CALayer总结——图层几何

    最近看了一下关于图层和动画的内容,所以写了一份总结,算是对这些内容的汇总吧,都是一些简单的基础知识,不知道大家都了不了解. 除了和用户的交互之外,图层的很多属性和视图基本上都是一样的,今天就先从CAL ...

  4. IOS CALayer(二)

    UIview内部有个默认的CALayer对象层,虽然我门不可以重新创建它,但是我门可以再其上面添加子层. 我们知道,UIView有 addSubview:方法,同样,CALayer也有addSubla ...

  5. IOS CALayer是什么

    大家在开发IOS程序时,经常会遇到self.view.layer这个东西,我以前也是不求甚解,后来觉得有必要整理下. 简单介绍layer: 在IOS中,你能看得见摸得着的东西都是UIView,比如一个 ...

  6. iOS CALayer使用

    CALayer使用 iOS的设备中,我们之所以能看到各种各样的控件.文字.图片,都是Core Animation框架的功劳.它通过图层的合成,最终显示在屏幕上.而今天这篇文章讲的就是Core Anim ...

  7. iOS CALayer应用详解

    跟着大神一起进步,本篇博客原文地址:http://blog.csdn.net/hello_hwc?viewmode=contents 一 CALayer是什么? Layers是绘图和动画的基础,  L ...

  8. iOS - CALayer相关(CATransform3D)

    一.图层的几何 图层的几何简单通俗,图层的所有几何属性(包括矩阵变换),都可以有隐式和显式动画. 图层几何的属性: 1.position是CGPoint值,她指定图层相对于她图层的位置,该值基于父图层 ...

  9. IOS CALayer(一)

    对于一个app的好坏,我们首要判断的便是app的界面,而界面的建立则是在图形的处理基础上的,说到图形处理又不得不提及Quartz2D,CALayer. 在iOS系统中,你能看得见摸得着的东西基本上都是 ...

随机推荐

  1. 基于php双引号中访问数组元素

    关于 php访问数组 {} []

  2. [转]SE43 修改SAP标准菜单、登陆界面、背景图片

    1.事务码se43 复制标准菜单S000 到 ZS000  2.按实际需要修改 ZS000  3.在事务码SSM2中用ZS000 代替 S000  4.注销后重新登陆 o 修改SAP登陆界面(在本博客 ...

  3. AOP分析

    cglib动态代理 Waiter target = new NaiveWaiter();//一个实现了Waiter接口的类 BeforeAdvice advice = new GreetingBefo ...

  4. 死磕 java同步系列之synchronized解析

    问题 (1)synchronized的特性? (2)synchronized的实现原理? (3)synchronized是否可重入? (4)synchronized是否是公平锁? (5)synchro ...

  5. 小K的农场 差分约束

    题目描述 小K在MC里面建立很多很多的农场,总共n个,以至于他自己都忘记了每个农场中种植作物的具体数量了,他只记得一些含糊的信息(共m个),以下列三种形式描述: 农场a比农场b至少多种植了c个单位的作 ...

  6. day23作业详解

    1.题目 2.题目详解 点击查看详细内容 1. 1-1 封装 把功能封装到类中 class Message(object): def email(self):pass def msg(self):pa ...

  7. 读书笔记 - 《梦想与浮沉:A股十年上市博弈》

    拿到这本书是个很偶然的事件.有几本软件业书由于太老已经绝版,偶然想到小区的图书馆自动借阅机和读者证的预借功能,就兴冲冲的跑去尝试.没想到预借只能在网页上进行,就随手从机器里借了这本书.没想到细观之下让 ...

  8. c#spinLock使用

        版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u011915028/article/details/53011811 一下解释摘自msdn  ...

  9. windows7安装完上不了网

    安装完Windows7后发现上不了网,网卡驱动没有安装的原因:但是没有网怎么下载驱动呢,,先装一个网卡版驱动精灵(貌似叫驱动精灵万能网卡版)什么的安装一个网卡驱动,就解决了

  10. Java文件与io——复制文件和转换流

    字节流与字符流的区别 在所有的流操作里,字节永远是最基础的.任何基于字节的操作都是正确的.无论是文本文件还是二进制的文件. 如果确认流里面只有可打印的字符,包括英文的和各种国家的文字,也包括中文,那么 ...