美文网首页
iOS 知识整理 -- CALayer

iOS 知识整理 -- CALayer

作者: 不不不紧张 | 来源:发表于2020-02-10 13:45 被阅读0次

把看到的东西写出来,可以加深印象

1 与UIView的关系

异同:

CALayer与UIView都是被层级关系树管理的矩形块,都可以包含一些内容,管理子视图的位置,主要区别体现在CALayer不能响应事件

每个UIView都有一个CALayer的属性,UIView是对CALayer的一个封装,对图形设置提供了一些简单的接口,同时可以处理点击事件,这种设计主要目的是为了实现职责分离,CALayer只负责展示图像,响应事件由UIView负责,符合程序设计六大原则中的单一职责原则

CALayer中没有被UIView封装的功能:

    1.阴影,圆角,带颜色的边框 3D变换
    2.非矩形范围
    3.透明遮罩
    4.多级非线性动画

2 CALayer的属性

contents属性

属性名:contents

类型:id,必须用CGImageRef赋值,类型为id是macOS的历史问题造成的,这个值对CGImage和NSImage都起作用,当我们用UIimage的CGImage属性为其赋值时会报错,原因是Core Foundation对象与cocoa对象并不类型兼容,需要通过bridged关键字转换:

image

效果:


image.png

contentsGravity属性

属性名:contentsGravity

作用:决定内容在图层的边界中怎么对齐,与UIView中的contentMode对应

类型:NSString。 可选常量有以下几个

  • kCAGravityCenter 原尺寸显示居中


    image.png
  • kCAGravityTop 原尺寸显示底部与layer对齐

    image.png
  • kCAGravityBottom 原尺寸显示顶部与layer对齐


    image.png
  • kCAGravityLeft 原尺寸显示左侧与layer对齐


    image.png
  • kCAGravityRight 原尺寸显示右侧与layer对齐


    image.png
  • kCAGravityTopLeft


    image.png
  • kCAGravityTopRight


    image.png
  • kCAGravityBottomLeft


    image.png
  • kCAGravityBottomRight


    image.png
    • kCAGravityResize 拉伸使大小与layer一致


      image.png
  • kCAGravityResizeAspect 等比例拉伸,在不超出layer范围的前提下以最大尺寸显示


    image.png
  • kCAGravityResizeAspectFill 等比例拉伸,允许超出layer范围显示,宽度和高度中有一项与layer宽高中更大的一项保持一致


    image.png

maskToBounds属性

属性名:masksToBounds

类型:BOOL。与UIView的clipsToBounds对应,作用相同

contentsRect属性

属性名:contentsRect

类型:CGRect。值不是point,而是相对于原尺寸的比例,在0 ~ 1之间

作用:允许我们只展示content的一部分内容

效果:添加代码


截屏2020-02-12下午12.16.08.png image.png

效果受layer的contentsGravity属性影响,当我们设置:


截屏2020-02-12下午12.18.18.png

展示效果变成了:


image.png

contentsCenter属性

属性名:contentsCenter

类型:CGRect。取值范围在0 ~1之间

作用:用这个属性定义一个边框,边框里的内容均匀拉伸,边框外侧四个角正方形范围内不进行拉伸,其他部分根据情况水平或者竖直拉伸,只有在content对内容进行拉伸使才能看到效果

效果:添加代码


截屏2020-02-12下午5.25.58.png

展示效果变成了:


image.png

mask属性

属性名:mask

类型:CALayer

作用:通过一个CALayer控制当前layer内容的可视区域,mask也是一个CALayer,但是通常只需要关心mask内容中实心区域的轮廓,当前layer只有在mask的content内容中实心范围内的内容是可见的

效果:找了一张中国地图的png图片,除了地图外其他区域是透明的,我们用这个地图图片为mask的content赋值


testImage2 截屏2020-02-12下午6.07.20.png

展示效果:


image.png

拉伸过滤器属性

属性名:minificationFilter(缩小过滤器),magnificationFilter(放大过滤器)

类型:NSString 可选:

  • kCAFilterLinear (默认)
  • kCAFilterNearest (速度快但是像素化严重)
  • kCAFilterTrilinear (三线性滤波算法,与kCAFilterLinear效果相近)

效果:默认效果:


image.png

添加代码:


截屏2020-02-17上午9.53.39.png image.png

图片上传中被压缩依然能看出设置kCAFilterNearest后像素化更严重,实际情况像素化现象更加明显

相关文章

  • iOS 知识整理 -- CALayer

    把看到的东西写出来,可以加深印象 1 与UIView的关系 异同: CALayer与UIView都是被层级关系树管...

  • iOS CABasicAnimation详解

    最近一直在看关于CALayer的相关知识,这里整理一下CABasicAnimation相关知识1.CAlayer2...

  • iOS-CALayer (二)

    上一篇 : iOS-CALayer (一) 前言:上一篇主要记录有关 CALayer 的基础相关知识,本章主要描述...

  • CALayer

    初探CALayer属性 IOS中CALayer的使用//这个算是比较全了 iOS - CALayer 绘图层 iO...

  • iOS学习笔记(8-25)

    CALayer的知识点整理 UIView负责处理用户交互,负责绘制内容的则是它持有的那个CALayer,我们访问和...

  • iOS CALayer图层漫谈(三)

    上一篇《iOS CALayer图层漫谈(二)》我们聊了CALayer几何学的一些知识,这一篇呢我们来聊一下CALa...

  • iOS CALayer图层漫谈(四)

    上一篇《iOS CALayer图层漫谈(三)》我们聊了CALayer视觉效果的一些知识,这一篇呢我们开始聊一下CA...

  • 【IOS开发进阶系列】动画专题

    1 CALayer IOS SDK详解之CALayer(一) http://doc.okbase.net/Hell...

  • CALayer 实用属性补充

    为方便对CALayer的学习,特记录以下内容,整理自ios核心动画高级技巧 · GitBook(墙裂推荐阅读此翻译...

  • CALayer和UIView的区别

    CALayer和UIView的区别 1.UIView是UIKit的(只能iOS使用),CALayer是Quartz...

网友评论

      本文标题:iOS 知识整理 -- CALayer

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