IOS开发之——图层的基本使用(90)

一 概述

  • UIView和CALayer的关系
  • 如何通过操作CALayer对象,控制UIView的显示

二 概念

2.1 CALayer和UIView的关系

  • CALayer负责视图中显示的内容和动画
  • UIView负责监听和相应事件

2.2 CALayer

  • 在IOS中,你能看得见摸得着的东西基本上都是UIView,比如一个按钮,一个文本标签,一个文本输入框,一个图标等等,这些都是UIView

  • 其实,UIView之所以能显示在屏幕上,完全是因为它内部的一个图层

  • 在创建UIView对象时,UIView内部会自动创建一个图层(即CALayer对象),通过UIView的layer属性可以访问这个层

    @property(nonatomic,readonly,retain) CALayer *layer;
    
  • 当UIView需要显示到屏幕上时,会调用drawRect方法进行绘图,并且会将所有内容绘制到自己的图层上,绘图完毕后,系统会将图层拷贝到屏幕上于是就完成了UIView的显示

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

2.3 CALayer的基本操作

  • 通过操作CALayer对象,可以很方便地调整UIView的一些外观属性,比如:阴影,圆角大小,边框宽度和颜色
  • 还可以通过给图层添加动画,来实现一些比较炫酷的效果

2.3 CALayer的属性

  • 宽度和高度

    @property CGRect bounds;
    
  • 位置(默认指中点,具体有anchorPoint决定)

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

    @property CGPoint anchorPoint;
    
  • 背景颜色(CGColorRef类型)

    @property CGColorRef backgroundColor;
    
  • 形变属性

    @property CATransform3D transform;
    
  • 阴影颜色

    @property CGColorRef shadowColor;
    
  • 阴影不透明(0.0~1.0)

    @property float shadowOpacity;
    
  • 阴影偏移位置

    @property CGSize shadowOffset;
    

三 示例

3.1 UIView示例

代码
  _redView.layer.shadowOpacity=1;
  _redView.layer.shadowColor=[UIColor yellowColor].CGColor;
    
  _redView.layer.shadowRadius=10;
  _redView.layer.cornerRadius=50;
  _redView.layer.borderWidth=10;
  _redView.layer.borderColor=[UIColor whiteColor].CGColor;
效果图

3.2 ImageView示例

代码
 _imageView.layer.cornerRadius=50;
 _imageView.layer.masksToBounds=YES;
 _imageView.layer.borderColor=[UIColor whiteColor].CGColor;
 _imageView.layer.borderWidth=5;
效果图

3.3 transform示例

代码
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    [UIView animateWithDuration:1 animations:^{
        //旋转
       // _imageView.layer.transform=CATransform3DMakeRotation(M_PI, 1, 0, 0);
        //平移
        //_imageView.layer.transform=CATransform3DMakeTranslation(200, 200, 0);
        //缩放
        //_imageView.layer.transform=CATransform3DMakeScale(0.5, 0.5, 1);
        //NSValue *rotation=[NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI, 1, 1, 0)];
        //[_imageView.layer setValue:rotation forKeyPath:@"transform"];
        //[_imageView.layer setValue:@M_PI forKeyPath:@"transform.rotation"];
        //[_imageView.layer setValue:@0.5 forKeyPath:@"transform.scale"];
        [_imageView.layer setValue:[NSValue valueWithCGPoint:CGPointMake(200, 200)] forKeyPath:@"transform.translation"];
        //[_imageView.layer setValue:@"200" forKeyPath:@"transform.translation.x"];
    }];
}
效果图

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值