我遇到了以下问题。我有一个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
}
...
}
答案 0 :(得分:2)
zoomScale
属性不符合KVO标准。但UIScrollViewDelegate
有scrollViewDidZoom
方法可用于跟踪zoomScale的更改。
答案 1 :(得分:1)
UIKit实际上不支持KVO。
注意:虽然UIKit框架的类通常不会 支持KVO,您仍然可以在应用程序的自定义对象中实现它,包括自定义视图。
它确实有效(正如您所见),但对它的支持是无证的且不一致的。改为使用委托方法。