セットアップは次のとおりです。プロパティがsharedzoomValue
のキーにバインドされているIKImageBrowserView のサブクラスがあります。バインディングが同じキーにバインドされている があります。VFBrowserZoomValue
NSUserDefaultsController
NSSlider
value
zoomValue
これは、ブラウザのスライダーからの変更に完全に機能します。
-magnifyWithEvent:
サブクラスに実装して、IKImageBrowserView
トラックパッドのピンチ ジェスチャでブラウザをズームできるようにしようとしています。
これが私の実装です:
-(void)magnifyWithEvent:(NSEvent *)event
{
if ([event magnification] > 0) {
if ([self zoomValue] < 1) {
[self setZoomValue: [self zoomValue] + [event magnification]];
}
}
else if ([event magnification] < 0) {
if ([self zoomValue] + [event magnification] > 0.1) {
[self setZoomValue: [self zoomValue] + [event magnification]];
}
else {
[self setZoomValue: 0.1];
}
}
}
これにより、ブラウザがzoomValue
正しく変更されます。問題は、NSUserDefaults
が新しい値で更新されないことです。
アプリの他の場所には-observeValueForKeyPath:ofObject:change:context:
、ブラウザの を監視する の実装がありzoomValue
ます。ブラウザーのズームの値、スライダーの値、およびそのメソッドのデフォルトのキーをログに記録すると、ブラウザーの zoomValue が NSUserDefaults にプッシュされておらず、スライダーが更新されていないことがわかります。
私は効果のない-magnifyWithEvent:
呼び出しでメソッドを囲みました。-{will,did}ChangeValueForKey