键值观察不适用于缩放比例



我遇到了以下问题。我有一个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
    }
    ...
}

zoomScale属性不符合 KVO 标准。但是UIScrollViewDelegate有一个scrollViewDidZoom方法,可用于跟踪对缩放缩放的更改。

UIKit 实际上不支持 KVO。

从文档中:

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

它有时确实有效(如您所见),但对它的支持没有文档且不一致。请改用委托方法。

最新更新