标签:效果 对象 就是 efault 实现 core 方向 键值 sla
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 | 高 |
标签:效果 对象 就是 efault 实现 core 方向 键值 sla
原文地址:https://www.cnblogs.com/tzsh1007/p/12427857.html