CALayer

作者: 习惯了_就好 | 来源:发表于2019-07-26 15:40 被阅读0次

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

CALayer的常用属性:

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

边框宽度
@property CGFloat borderWidth;

圆角半径
@property CGColorRef borderColor;

内容(比如设置为图片CGImageRef)
@property(retain) id contents;

宽度和高度
@property CGRect bounds;

位置(默认指中点,具体由anchorPoint决定)
@property CGPoint position;

锚点(x,y的范围都是0-1),决定了position的含义
@property CGPoint anchorPoint;

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

形变属性
@property CATransform3D transform;
@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    [self testView];
//    [self testImageView];
    [self testImageView2];
}

-(void)testImageView2
{
//    self.myImageView.transform = CGAffineTransformMakeRotation(M_PI_4);
    
//    self.myImageView.layer.transform = CATransform3DMakeScale(2, 1, 0);
    
//    CATransform3DMakeRotation(M_PI_4, 0, 0, 1)以Z轴为旋转中心
//    self.myImageView.layer.transform = CATransform3DMakeRotation(M_PI_4, 0, 0, 1);
    
//    self.myImageView.layer.transform = CATransform3DMakeTranslation(10, 20, 0);
    
//    CATransform3DMakeRotation(M_PI_4, 1, 1, 0)以X,Y轴所在平面的中心线为旋转中心
    [self.myImageView.layer setValue:[NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI_4, 1, 1, 0)] forKey:@"transform"];
}

-(void)testImageView
{
    //边框颜色
    self.myImageView.layer.borderColor = [UIColor blackColor].CGColor;
    //边框宽度
    self.myImageView.layer.borderWidth = 2;
    //圆角
    self.myImageView.layer.cornerRadius = 20;
    
    //阴影颜色
    self.myImageView.layer.shadowColor = [UIColor blackColor].CGColor;
    //阴影偏移量
    self.myImageView.layer.shadowOffset = CGSizeMake(10, 5);
    //阴影透明度
    self.myImageView.layer.shadowOpacity = 0.5;
    
    //超出部分是否裁剪掉
    //图片是在自层上绘制的,不设置layer层超出裁剪,图片圆角设置无效,设置了阴影无效
    self.myImageView.layer.masksToBounds = NO;
    
}

-(void)testView
{
    //边框颜色
    self.myView.layer.borderColor = [UIColor blackColor].CGColor;
    //边框宽度
    self.myView.layer.borderWidth = 2;
    //圆角
    self.myView.layer.cornerRadius = 10;
    
    //阴影颜色
    self.myView.layer.shadowColor = [UIColor blackColor].CGColor;
    //阴影偏移量
    self.myView.layer.shadowOffset = CGSizeMake(10, 5);
    //阴影透明度
    self.myView.layer.shadowOpacity = 0.5;
    
    //超出部分是否裁剪掉
    self.myView.layer.masksToBounds = NO;
}

@end

隐式动画:

当对非Root Layer的部分属性进行修改时,默认会自动产生一些动画效果,而这些属性称为Animatable Properties(可动画属性)

-(void)testLayer
{
    self.layer = [CALayer layer];
    self.layer.bounds = CGRectMake(0, 0, 100, 100);
    self.layer.position = CGPointZero;
    self.layer.backgroundColor = [UIColor blueColor].CGColor;
    self.layer.anchorPoint = CGPointZero;
    
    [self.view.layer addSublayer:self.layer];
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
//可以通过动画事务(CATransaction)关闭默认的隐式动画效果
    [CATransaction begin];//开启事务
    [CATransaction setDisableActions:YES];//关闭事件
    self.layer.position = CGPointMake(100, 300);
    [CATransaction commit];//提交事务
}

相关文章

  • 动画 (1) ----- CALayer

    CALayer 和 UIView 联系CALayer的相关属性CALayer之隐式动画 一. CALayer 和 ...

  • CALayer与UIView的区别

    CALayer与UIView的区别 基础 CALayer的定义 CALayer的基础 CALayer和UIView...

  • UIView和CALayer

    1. UIView和CALayer CALayer负责显示内容contents UIView为CALayer提供现...

  • 设置view任意边框border

    CALayer *bottomBorder = [CALayer layer]; bottomBorder.f...

  • CALayer 简介

    CALayer1-简介CALayer2-创建新的层 CALayer3-层的属性 CALayer4-自定义层 CAL...

  • CALyer介绍

    CALayer1-简介CALayer2-创建新的层CALayer3-层的属性CALayer4-自定义层 注意点 第...

  • iOS-view圆角与阴影并存

    CALayer *subLayer = [CALayer layer];CGRect fixframe = vie...

  • CALayer(一)

    CALayer属性 view和layer的关系 CALayer属性表如下 CALayer和UIView的区别 1....

  • UIView和CALayer

    UIView和CALayer和有什么关系 UIview中有个属性layer,是CALayer类型。 CALayer...

  • 问题汇总

    1、UIView和CALayer区别UIView和CALayer的区别.UIView相对于CAlayer来说就多了...

网友评论

    本文标题:CALayer

    本文链接:https://www.haomeiwen.com/subject/dtkdrctx.html