[英]Bind a CIVector's component with NSSlider
我正在尝试将CIVector的组件与多个NSSlider绑定,每个NSSlider都与CIVector的不同组件绑定。
更具体地说,我尝试使用以下代码将CITemperatureAndTint.inputTargetNeutral.X与NSSlider绑定:
NSMutableDictionary *bindingOptions = [NSMutableDictionary dictionary];
[bindingOptions setObject:[NSNumber numberWithBool:YES]
forKey:NSValidatesImmediatelyBindingOption];
[bindingOptions setObject:[NSNumber numberWithBool:YES]
forKey:NSContinuouslyUpdatesValueBindingOption];
[temp_slider bind: @"value"
toObject: filter
withKeyPath: @"inputTargetNeutral.X"
options: bindingOptions];
但我收到此错误消息:
[setValue:forUndefinedKey:]:此类与密钥X的编码不兼容。
解决该问题的最干净方法是什么?
提前致谢!
CIVector
是不可变的。 创建它后,您将无法更改其组件。 当滑块的值更改时,绑定试图这样做。 您显然希望发生的事情是将过滤器的inputTargetNeutral
属性设置为具有更改的X分量的新CIVector
。 这并不简单。
我以为您可以实现一个可逆的NSValueTransformer
来获取CIVector
并为其提供X分量。 但是,反向操作需要从某个位置获取Y分量,并且它无权访问原始CIVector
。
因此,您可能需要过滤器的包装器类。 它具有属性inputTargetNeutralX
。 吸气剂将返回包装的过滤器的inputTargetNeutral.X
。 设置器将读取其inputTargetNeutral.Y
,并将其与传入的新X值结合以创建新的CIVector
,并设置过滤器的inputTargetNeutral
。 为了符合KVO,您可以实现+keyPathsForValuesAffectingInputTargetNeutralX
以返回包含@"filter.inputTargetNeutral"
的NSSet
(假定包装过滤器位于名为“ filter”的属性中)。 请参阅+keyPathsForValuesAffectingValueForKey:
的文档。
您将对Y分量执行相同的操作。
您实际上可以使用CIFilter
上的类别而不是包装器类来执行此操作。 当然,这会将这些属性添加到应用程序中的每个CIFilter
上,而不仅仅是CITemperatureAndTint
。 在我之前的描述中,您将使用self
而不是“包装过滤器”,而只需保留“过滤器”即可。 在+keyPathsForValuesAffectingInputTargetNeutralX
结果之外,使其隐式基于self
。
编辑:我忘了指出一个显而易见的地方:在创建了这些新的inputTargetNeutralX
和inputTargetNeutralY
属性之后,这就是您要绑定的内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.