• (一一九)通过CALayer实现阴影、圆角、边框和3D变换


    在每个View上都有一个CALayer作为父图层,View的内容作为子层显示,通过layer的contents属性决定了要显示的内容,通过修改过layer的一些属性可以实现一些华丽的效果。

    【阴影和圆角】

    下面以一个普通的蓝色View为例,介绍layer的功能:

    _blueView.layer.shadowOpacity = 1.0; // 阴影不透明度
    _blueView.layer.shadowColor = [UIColor redColor].CGColor; // 注意所有颜色都要转换为CGColor
    _blueView.layer.shadowRadius = 20.0; // 阴影半径
    _blueView.layer.shadowOffset = CGSizeMake(20, 20); //阴影偏移,以View中心为原点
    _blueView.layer.cornerRadius = _blueView.frame.size.width * 0.5; // 圆角半径,当圆角半径为View尺寸一半时恰好得到圆形
    _blueView.layer.borderColor = [UIColor whiteColor].CGColor; // 边框颜色
    _blueView.layer.borderWidth = 5; // 边框尺寸

    通过这段代码,我们设置了蓝色View的一系列属性,注意设置颜色时的转换。得到的效果如下图所示:

    通过这一点我们可以看到layer的强大。


    通过这样的方法,我们可以轻易的实现头像的圆角和外框,只要设置UIImageView的layer圆角、边框即可,需要注意的是,图片所在的层是其子层,因此应该设置父层的maskToBounds属性,保证子层裁剪到父层的尺寸

    _headerView.layer.cornerRadius = _headerView.frame.size.width * 0.5;
    _headerView.layer.masksToBounds = YES; // 保证子层裁剪到父层尺寸
    _headerView.layer.borderWidth = 5;
    _headerView.layer.borderColor = [UIColor redColor].CGColor;
    实现的效果如下图所示:



    【3D变换】

    直接修改View的transform,可以实现2D变换,而修改layer可以实现3D变换,3D变换的意义在于可以让图像以与屏幕平行的方向为轴旋转,或者斜着向屏幕内翻转,实现立体效果,要实现3D变换,只要传递3D向量坐标即可,先了解一下坐标系。

    与二维类似,向右为x、向下为y,垂直屏幕向外为z。

    旋转时,传递的是弧度制转角和旋转轴坐标。

    平移时,传递的是三轴的位移量,如果没有相对屏幕翻转,z轴的位移是看不出来的。

    缩放时,传递的是三轴的缩放量。

    需要注意的是,这三个量通过make实现,则会相互覆盖,一定要保证前面完成后再传递下一个动作。

    _blueView.layer.transform = CATransform3DMakeRotation(M_PI, 1, 1, 0);
    _blueView.layer.transform = CATransform3DMakeTranslation(10, 10, 0);
    _blueView.layer.transform = CATransform3DMakeScale(0.5, 0.5, 1.0);
    除此之外,还可以通过KVC实现属性的操作,通过KVC还可以实现对不能直接访问的属性的操作,例如translation.x。

    普通的设置:

    [_blueView.layer setValue:[NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI, 1, 1, 0)] forKeyPath:@"transform"];
    
    对不能直接访问属性的设置,不推荐。

    [_blueView.layer setValue:@30 forKeyPath:@"transform.translation.x"];
    
    通过3D变换可以做出各种酷炫的效果,例如下图相对屏幕旋转:


  • 相关阅读:
    微信分享链接出现config:invalid signature错误的解决方法
    微信开发,分享部分出现的问题
    thinkphp 3.2 去除调试模式后报错,怎么解决
    MySQL添加新用户、为用户创建数据库、为新用户分配权限
    xshell工具source导入几个G的数据库
    thinkphp5引入公共部分header、footer等
    用样本估计总体
    随机抽样
    平面几何相关定理
    直线和曲线相切,曲线和曲线相切
  • 原文地址:https://www.cnblogs.com/aiwz/p/6154057.html
Copyright © 2020-2023  润新知