键-值编码扩展

键-值编码扩展

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

原文地址:https://www.cnblogs.com/tzsh1007/p/12427857.html

时间: 2024-10-05 10:42:35

键-值编码扩展的相关文章

ios中键值编码kvc和键值监听kvo的特性及详解

总结: kvc键值编码  1.就是在oc中可以对属性进行动态读写(以往都是自己赋值属性)           2. 如果方法属性的关键字和需要数据中的关键字相同的话                  3. 动态设置:setValue:属性值 forKey:属性名(用于简单的路径)/setValue:属性值 forKeyPath:属性名(用于复杂的路径)kvo键值监听  永久性的监听item属性值的改变,如果改变就从新设置             1.监听方法:[addObserver:self

IOS开发之旅-KVC【键值编码】

在日常开发中,读取修改对象的属性值时,通常是点调用对应的属性进行相关操作.另外一种方式是通过键值编码,简称KVC,在键值编码中主要使用以下方法 /* Given a key that identifies an attribute or to-one relationship, return the attribute value or the related object. Given a key that identifies a to-many relationship, return a

OC8-属性 KVC是键值编码

1.属性,是oc提供的一种快速的模式化的创建实例变量的方式. (1)属性是通过@property标记的, (2)属性会在背后,默默的帮我们做set和get方法 2.属性做的工作 (1)创建一个实例变量,名字是下划线加属性名, (2)帮我们自动get和setter 的方式,创建一组方法, 3.点语法,点语法是专门为了setter 和getter 方法配备的一种语法糖.会自动根据语法和语境调用是哪一种方法, (1) (.)其实就是转换成了getter 和setter 方法,p.hobby.lengt

Objective-C(十七、KVC键值编码及实例说明)——iOS开发基础

结合之前的学习笔记以及参考<Objective-C编程全解(第三版)>,对Objective-C知识点进行梳理总结.知识点一直在变,只是作为参考,以苹果官方文档为准~ 十七.键值编码 KVC 关于KVC的知识点将通过下列例子来展开说明: Person.h文件,Person类拥有name和age两个成员变量 @interface Person : NSObject { @private NSString *_name; NSInteger _age; } - (void)setAge:(NSIn

KVC - 键值编码

[基本概念] 1.键值编码是一个用于间接访问对象属性的机制,使用该机制不需要调用存取方法和变量实例就可访问对象属性. 2.键值编码方法在OC非正式协议(类目)NSKeyValueCoding中被声明,默认的实现方法由NSObject提供. 3.键值编码支持带有对象值的属性,同时也支持纯数值类型和结构.非对象参数和返回类型会被识别并自动封装/解封. [键值访问] 键值编码中的基本调用包括-valueForKey: 和 -setValue:forkey: 这两个方法,它们以字符串的形式向对象发送消息

键值编码和通用编程

键值编码(KVC)是Cocoa一个通用的用于获取和设定值的一个协议.在编程中,“通用”这词是用于描述一种可以适用于不同情境的实现方式.通用代码可以减少项目中代码总量并使得软件可以处理程序员无法预知的情景.Cocoa至始至终都很重视通用.可复用代码. KVC版看起来需要更多代码输入.让就让我选择一个更能体现KVC价值的场景. 首先,我们定义一个类: @interface CDCPerson : NSObject {     NSString * firstName;     NSString *

iOS学习笔记(6)键值编码——KVC

在KVC编程方式中,无论调用setValue:forKey:方法,还是调用valueForKey:方法,都是通过NSString对象来指定被操作属性,其中forKey:标签用户传入属性名的. 对于setValue:属性值[email protected]“name”;代码,底层的执行机制如下. (1)程序优先考虑调用“setName:属性值;”代码通过setter方法完成设置. (2)如果该类没有setName:方法,KVC机制会搜索该类名为_name的成员变量,无论该成员变量是在类接口部分定义

【OC学习-31】利用KVC即键值编码来访问一些对象的属性,尽管这些属性是私有的

最简单的想法是我们创建一个对象,然后利用某些方法给这个对象赋值,然后再用某些方法调用这个值.当然这种描述很类似于字典的键值概念,确实今天学习的就是这样一种方法:KVC,Key-Value coding键值编码. (1)简单的KVC 创建一个Book类,在Book.h里写一个私有的实例变量name,然后再main.m里创建一个book1对象,再给这个book1对象的私有变量name赋值,然后再调用这个值.神奇的地方就在这里:这种方法根本不管这个实力变量是private还是public.呃,Book

键值编码 || Cocoa绑定

什么是键值编码? 键值编码(Key-Value-Coding)是指,将表示对象包含的信息的字符串作为键值使用,来间接访问该信息的方式.键值编码提供了非常强大的功能,基本上,只要存在访问器方法,生命属性或实例变量,就可以将其名字指定为字符串来访问. 1.使用KVC 定义一个Student类,继承于NSObject. .h文件 #import <Foundation/Foundation.h> @interface Student : NSObject { NSString *name; } @e