键-值编码扩展
Posted tzsh1007
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了键-值编码扩展相关的知识,希望对你有一定的参考价值。
键-值编码扩展
CoreAnimation
扩展了NSKeyValueCoding
协议,因为它从属CAAnimation
和CALayer
类。此扩展为某些键添加默认值,扩展封装约定,为CGPoint
、CGRect
、CGSize
、CATransform3D
添加键路径支持
键-值编码遵从容器类
CAAnimation
和CALayer
类是遵从容器类键-值编码,也就是说可以为任意键设置值。即使键没有在CALayer
类中声明的属性,你也可以用以下的方式设置值
[theLayer setValue: @50 forKey: @"someKey"];
你也可以获取任意键对应的值,像获取其它键路径对应的值一样。如下
someKeyValue = [theLayer valueForKey: @"someKey"];
支持默认值
CoreAnimation
为键-值编码添加一个约定,即一个类可为一个键提供默认值,而不需设置值。CAAnimation
和CALayer
类支持这个约定,通过使用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) |
结构体键值路径支持
CAAnimation
和CALayer
类允许使用键路径访问结构体数据的字段。这个特性更便捷的指定结构体字段来获取想要的动画。通过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 | 高 |
以上是关于键-值编码扩展的主要内容,如果未能解决你的问题,请参考以下文章