键-值编码扩展

Posted tzsh1007

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了键-值编码扩展相关的知识,希望对你有一定的参考价值。

键-值编码扩展

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

以上是关于键-值编码扩展的主要内容,如果未能解决你的问题,请参考以下文章

Python snippet(代码片段)

此类不符合键值编码的swift

Restkit - 实体(空)不符合键“行”的键值编码

UIGestureRecognizer 键值编码

添加了传递数据的委托,现在抛出错误类不符合键值编码?

*** Bool 编码为数字属性列表片段。属性列表编码器