セットアップは次のとおりです。プロパティがsharedzoomValueのキーにバインドされているIKImageBrowserView のサブクラスがあります。バインディングが同じキーにバインドされている があります。VFBrowserZoomValueNSUserDefaultsControllerNSSlidervalue
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