首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用NSSlider绑定CIVector的组件

用NSSlider绑定CIVector的组件
EN

Stack Overflow用户
提问于 2012-04-12 12:07:13
回答 1查看 357关注 0票数 0

我试图用几个NSSlider绑定一个CIVector的组件,每个组件都绑定到CIVector的一个不同的组件。

更具体地说,我试图使用以下代码将CITemperatureAndTint.inputTarget中性.x与NSSlider绑定:

代码语言:javascript
复制
 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的键值编码。

最干净的方法是什么?

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-13 01:35:56

CIVector是不可变的。您不能在创建它的组件之后更改它的组件。当滑块的值发生变化时,绑定将尝试这样做。显然,您想要实现的是将过滤器的inputTargetNeutral属性设置为一个新的CIVector,并使用更改后的X组件。这可不简单。

我在想,您可能会实现一个可逆的NSValueTransformer,以获取一个CIVector并给出它的X组件。但是,反向操作需要从某个地方获取Y组件,并且它无法访问原始的CIVector

因此,您可能需要一个过滤器的包装类。它将有一个属性inputTargetNeutralX。getter将返回包装过滤器的inputTargetNeutral.X。设置器将读取其inputTargetNeutral.Y,将其与传入的新X值相结合以创建新的CIVector,并设置过滤器的inputTargetNeutral。为了符合KVO要求,您可以实现+keyPathsForValuesAffectingInputTargetNeutralX来返回包含@"filter.inputTargetNeutral"NSSet (假设包装器过滤器保存在一个名为“@"filter.inputTargetNeutral"”的属性中)。请参阅+keyPathsForValuesAffectingValueForKey:的文档。

你对Y组件也会这么做。

实际上,您可以在CIFilter上使用一个类别来实现这一点,而不是使用包装器类。当然,这会将这些属性添加到应用程序中的每个CIFilter中,而不仅仅是CITemperatureAndTint。在我前面的描述中,您将使用self而不是“包装器过滤器”,只需保留“filter”。从+keyPathsForValuesAffectingInputTargetNeutralX结果中得到隐式的self-based。

编辑:我忘了指出显而易见的一点:在您创建了这些新的inputTargetNeutralXinputTargetNeutralY属性之后,这就是您要绑定的内容。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10123244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档