Вот настройка: у меня есть подкласс IKImageBrowserView, свойство zoomValue
которого связано с ключом 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
, но безрезультатно.