键值观察不适用于zoomScale

时间:2015-04-27 16:22:28

标签: ios objective-c xcode uiscrollview

我遇到了以下问题。我有一个UIScrollView,_ myScrollView,我希望有另一个UIScrollView跟随它的动作。所以我对属性“zoomScale”和“contentOffset”使用键值观察,但 observeValueForKeyPath:ofObject:change:context:方法仅报告“contentOffset”中的更改,而不是“zoomScale”中的更改“虽然变焦工作得很好。 (请参阅下面的代码段。)这可能是什么原因?

-(void)viewDidLoad {
    ...
    [_myScrollView addObserver:self forKeyPath:@"contentOffset" options:NSKeyValueObservingOptionNew context:NULL];
    [_myScrollView addObserver:self forKeyPath:@"zoomScale" options:NSKeyValueObservingOptionNew context:NULL];
}

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
    if ([keyPath isEqualToString:@"zoomScale"]) {
        NSLog(@"zoomScale: %@", change); // Never gets called
    }
    ...
}

2 个答案:

答案 0 :(得分:2)

zoomScale属性不符合KVO标准。但UIScrollViewDelegatescrollViewDidZoom方法可用于跟踪zoomScale的更改。

答案 1 :(得分:1)

UIKit实际上不支持KVO。

From the docs

  

注意:虽然UIKit框架的类通常不会   支持KVO,您仍然可以在应用程序的自定义对象中实现它,包括自定义视图。

它确实有效(正如您所见),但对它的支持是无证的且不一致的。改为使用委托方法。