CALayer的常用属性:
宽度和高度:
@property CGRect bounds;
位置(默认是指中点的位置,具体由anchorPoint决定)
@property CGPoint position;
锚点(x,y的范围都是0~1)
@property CGPoint anchorPoint;
背景颜色(CGColorRef类型)
@property CGColorRef backgroundColor;
形变属性(这个属性可以设置CALayer在三维坐标中的平移、缩放、旋转等。)
@property CATransform3D transform;
边框颜色
@property CGColorRef borderColor;
边框宽度
@property CGFloat borderWidth;
圆角半径
@property CGFloat cornerRadius;
内容(比如设置为图片CGImageViewRef)
@property(retain)id contents;
在ios中,你能看得见摸得着的东西基本上都是UIView,比如一个按钮、一个文本标签、一个文本输入框、一个图标等等,这些都是UIView。
其实UIView之所以能显示在屏幕上,是因为它内部的一个图层
在创建UIView对象时,UIView内部会自动创建一个图层(即CALayer对象),通过UIView的layer属性可以访问这个层。
当UIView需要显示到屏幕上时,会调用drawRect:方法进行绘图,并且会将所有内容绘制在自己的图层上,绘图完毕后,系统会将图层拷贝到屏幕,于是就完成了UIView的显示。
换句话说,UIView本身不具备显示的功能,是它内部的层有显示功能。
通过CALayer对象,可以很方便的调整UIView的一些外观属性,比如:阴影、圆角大小、边框宽度和颜色等等,还可以给图层添加动画来实现一些比较炫酷的效果。
下面这幅效果图是对UIView喝UIImageView设置layer之后的效果:
图1:
源码下载地址:http://download.csdn.net/detail/liu537192/8553037
核心代码:
//
// JLViewController.m
// 01-CALayer的使用
//
// Created by XinYou on 15-4-1.
// Copyright (c) 2015年 vxinyou. All rights reserved.
//
#import "JLViewController.h"
@interface JLViewController ()
@property (weak, nonatomic) IBOutlet UIView *myUIView;
@property (weak, nonatomic) IBOutlet UIImageView *myUIImageView;
@end
@implementation JLViewController
- (void)viewDidLoad
{
[super viewDidLoad];
[self setUIViewLayer];
[self setUIImageViewLayer];
}
/**
* 设置UIImageView的图层
*/
- (void)setUIImageViewLayer{
// 设置边框宽度
self.myUIImageView.layer.borderWidth = 5;
// 设置边框颜色
self.myUIImageView.layer.borderColor = [UIColor grayColor].CGColor;// UIColor转成CGColor
// 设置圆角
self.myUIImageView.layer.cornerRadius = 10;
// 以上3行代码的效果图如图1所示
// 可以看出设置边框和圆角之后,四个角没有按照边框剪掉超出部分。那为什么UIView没有出现这样的情况呢?
// 因为UIView只有一层layer(即主层),而UIImageView除了主层layer,还有一层用于显示图片
// 上面3行代码都是对主层进行设置。
// 下面这句代码的意思是:超过主层显示范围的都剪掉。
self.myUIImageView.layer.masksToBounds = YES;
// 当然,如果超过主层显示范围都剪掉,那么阴影也不会显示了。下面这3行代码写或者不写都一样。
// 设置阴影颜色
// self.myUIImageView.layer.shadowColor = [UIColor blueColor].CGColor;
// 设置阴影偏差
// CGSizeMake(width, height):假设width = 6,表示右边阴影宽度为6;假设width = -6,表示左边阴影宽度为6
// self.myUIImageView.layer.shadowOffset = CGSizeMake(6, 8);
// 设置阴影的不透明度(和透明度相反)
// self.myUIImageView.layer.shadowOpacity = 0.5;
}
/**
* 设置UIView的图层
*/
- (void)setUIViewLayer{
// 设置边框宽度
self.myUIView.layer.borderWidth = 5;
// 设置边框颜色
self.myUIView.layer.borderColor = [UIColor grayColor].CGColor;// UIColor转成CGColor
// 设置圆角
self.myUIView.layer.cornerRadius = 8;
// 设置阴影颜色
self.myUIView.layer.shadowColor = [UIColor blueColor].CGColor;
// 设置阴影偏差
// CGSizeMake(width, height):假设width = 6,表示右边阴影宽度为6;假设width = -6,表示左边阴影宽度为6
self.myUIView.layer.shadowOffset = CGSizeMake(6, 8);
// 设置阴影的不透明度(和透明度相反)
self.myUIView.layer.shadowOpacity = 0.5;
}
@end