---页首---

键-值编码扩展

键-值编码扩展

CoreAnimation 扩展了 NSKeyValueCoding 协议,因为它从属 CAAnimationCALayer 类。此扩展为某些键添加默认值,扩展封装约定,为 CGPointCGRectCGSizeCATransform3D添加键路径支持

键-值编码遵从容器类

CAAnimationCALayer 类是遵从容器类键-值编码,也就是说可以为任意键设置值。即使键没有在 CALayer类中声明的属性,你也可以用以下的方式设置值

[theLayer setValue: @50 forKey: @"someKey"];

你也可以获取任意键对应的值,像获取其它键路径对应的值一样。如下

someKeyValue = [theLayer valueForKey: @"someKey"];

支持默认值

CoreAnimation 为键-值编码添加一个约定,即一个类可为一个键提供默认值,而不需设置值。CAAnimationCALayer 类支持这个约定,通过使用 defaultValueForKey: 类方法。为一个key提供默认值,需要为期望的类创建一个子类,同时遵循defaultValueForKey: 类方法。这个方法的实现要检查键参数和返回合适的默认值。如下示例

+ (id)defaultValueForKey:(NSString *)key {
	if ([key isEqualToString: @"maskToBounds"]) {
		return @(YES);
	}
	return [super defaultValueForKey: key];
}

封装约定

C 语言类型 | 封装类型

  • | -
    CGPoint | NSValue |
    CGSize | NSValue |
    CGRect | NSValue |
    CATransform3D | NSValue |
    CGAffineTransform | NSAffineTransform(OS X only) |

结构体键值路径支持

CAAnimationCALayer 类允许使用键路径访问结构体数据的字段。这个特性更便捷的指定结构体字段来获取想要的动画。通过 setValue: forKeyPath:设置及 valueForKeyPath:获取

[myLayer setValue: @10.0 forKeyPath: @"transform.translation.x"];
  • CATransform3D 键路径

键路径字段 | 描述

  • | -
    rotation.x | 设置 NSNumber 对象,X向弧度旋转
    rotation.y | 设置 NSNumber 对象,Y向弧度旋转
    rotation.z | 设置 NSNumber 对象,Z向弧度旋转
    rotation | 设置 NSNumber 对象,与rotation.z 效果一样
    scale.x | 设置 NSNumber 对象,X向拉伸因子
    scale.y | 设置 NSNumber 对象,Y向拉伸因子
    scale.z | 设置 NSNumber 对象,Z向拉伸因子
    scale | 设置 NSNumber 对象,三个方向拉伸因子
    translation.x | 设置 NSNumber 对象,X向移动值
    translation.y | 设置 NSNumber 对象,Y向移动值
    translation.z | 设置 NSNumber 对象,Z向移动值
    translation | 设置 NSValue 对象(包含NSSize 或 CGSize数据类型),X和Y向移动值

  • CGPoint 键路径

结构字段 | 描述

  • | -
    x | 点的X值
    y | 点的Y值

  • CGSize 键路径

结构字段 | 描述

  • | -
    width | 宽
    height | 高

  • CGRect 键路径

结构字段 | 描述

  • | -
    origin | 点
    origin.x | X值
    origin.y | Y值
    size | 大小
    size.width | 宽
    size.height | 高
posted @ 2020-03-22 18:50  20190311  阅读(105)  评论(0编辑  收藏  举报
---页脚---