UI高级06-配置面板 layer参数 手势解锁

配置面板

让自定义控件, 能够在IB当中进行相关的配置
能够实时的看到参数配置修改后的效果
**IB_DESIGNABLE: **
写法: 写在自定义类的.h文件的声明@interface前面, 通常会单独起一行
作用: 告诉IB, 这个类支持在IB界面中进行操作, IB界面就会加载该控件中相关的参数
IBInspectable:
写法: 写在属性的类型声明前面, 类似于IBOutlet的写法
作用: 告诉IB, 该参数可以在IB界面中进行相关的配置
IB会自动根据类型提供相关的配置面板
IB会加载自定义控件当中的代码, 将效果实时显示出来
当配置参数修改时, IB会实时的调用代码, 重新渲染内容, 并显示出来

1. CALayer

  1. 显示内容 (与看到的内容有关的东西, 都在Layer身上)
  2. 负责动画相关的一些操作

2. CALayer 与 UIView 的关系

1. 每一个UIView, 都默认带了一个CALayer(layer属性)
    * 每个UIView默认所携带的Layer, 称为RootLayer, 根图层
    * 每个UIUiewController都携带UIView, 称为RootView, 根视图
2. 实际上, UIView上所显示出来的内容, 是由CALayer来负责
    * UIView是可以负责事件响应, 继承自UIResponder (控件 - 控件 , 画面)
    * CALayer是只负责显示内容, 不能够接收事件

3. 根图层(RootLayer)与非根图层

  • 根图层, 就是UIView .layer属性那个layer, 它就是根图层
    • 没有隐式动画, 你需要手动的开启动画事务, 提交动画事务
  • 除了这个唯一的根图层之外, 其它全是非根图层, 比如subLayer子图层
    • 隐式动画 (不需要手动去开启和提交动画事务, 自动就是有动画效果)
    • 隐式动画, 默认的动画时间是0.25S

根图层 (没有隐式动画)
非根图层 (隐式动画, 偷偷的做动画, 不需要开记和提交动画事务)
Layer与UIView类似, 在使用时都需要注意它的大小和位置
layer的颜色使用CGColorRef, 通常使用UIColor提供的.CGColor

content 内容, 给layer赋值图片, CGImageRef
CGImageRef 表示的Core Graphics当中的一个图片类型 (找UIImage)

UIImage *image = [UIImage imageNamed:@"7.jpg"];

需要从CG类型转换过来, 找有ARC (不需要负责内存, 由ARC来管理)

self.testLayer.contents = CFBridgingRelease(image.CGImage);
  1. frame是计算出来的属性, 由position, size, anchorPoint(锚点)来决定
  2. frame值的改变, 会导致position以及bounds的改变
  3. frame值并不是直接支持动画效果
  4. 关于transform操作, 如果旋转的角度非90的倍数, 不要动frame值

opacity 表示不透明度 1.0表示完全不透明, 0.0就看不到了

形变动画

CGAffineTransformTranslation() | 2D的形变动画
CATransform3DTranslate | 3D的形变动画

1. 位移 (z轴是感受不出来的)

self.testLayer.transform = CATransform3DTranslate(self.testLayer.transform, 50, 50, 0);

2. 旋转

self.testLayer.transform = CATransform3DRotate(self.testLayer.transform, M_PI / 3, 0.0, 0.0, 1.0);

3. 缩放 (z轴是感受不出来)

self.testLayer.transform = CATransform3DScale(self.testLayer.transform, 1.5, 1.5, 1.0);

你可能感兴趣的:(UI高级06-配置面板 layer参数 手势解锁)