● 其实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. 【leetcode 114. 二叉树展开为链表】解题报告

    思路:递归,将左子树变成单链表形式,再将右子树变成单链表形式,最后将左子树单链表的末端连接到右子树单链表表头,将根节点的左孩子置空 void flatten(TreeNode* root) { if ...

  2. PAT L2-014【二分】

    思路: 最后发现对当前列车比我大的编号的栈有没有就好了,所以开个vector存一下,然后二分一下vector找一下第一个比我大的数就好了 #include <bits/stdc++.h> ...

  3. loj #2325. 「清华集训 2017」小Y和恐怖的奴隶主

    #2325. 「清华集训 2017」小Y和恐怖的奴隶主 内存限制:256 MiB时间限制:2000 ms标准输入输出 题目类型:传统评测方式:文本比较   题目描述 "A fight? Co ...

  4. Dedecms本地上传缩略图无法自动添加水印的解决方法

    客户遇到一个问题,DEDECMS(V5.7)后台添加文档时,本地上传缩略图无法自动添加水印(系统设置里的图片水印设置没有问题),找了半天,终于找到了解决方法,留个记号: 打开dede/archives ...

  5. NAT模式下设置 虚拟机linux(Centos7) 联网

    第一步 设置虚拟机网络为NAT模式 第二步 设置虚拟机网络配置 首先执行 cd /etc/sysconfig/network-scripts 之后VI 编辑 ifcfg-ens33(根据实际情况来 基 ...

  6. php类内方法使用类外变量和类外函数

    如果要调用另一个类的属性和方法,直接实例化后调用就可以 但是要使用的变量和函数是独立的,不在本类或其他类里面,这时调用就要用下面的方法(本例是在同一个php文件里,如果不再同一个类文件可以requir ...

  7. 微信小程序在sublime开发代码高亮显示

    问题:xxx.wxml 和xxx.wxss在subline中不高亮不显示 如下图,开发起来非常的不方便 解决办法:右下角将Plain Text改为Html,问题解决,可高亮,提高代码可读性,可提示,提 ...

  8. Spring @CacheEvict 无效。。。。

    使用 此 注解 时...需要 配置 它 的 key .... @CacheEvict(value = { "adminFunc", "groupFunc" }, ...

  9. webissue 搭建 issue 分析工具

    http://www.cnblogs.com/feiyun8616/p/6208423.html

  10. 程序代码里出现illegal character '\ufeff' 和 expected class or object definition的解决办法(图文详解)

    不多说,直接上干货! 问题详情 问题分析    可能原因导致1:你的程序也许,是在他人那里复制而来,会导致这样的问题. 可能原因导致2:由于页面编码造成的.  可能原因导致1的解决办法 这个,好比,我 ...