我已经设置了
[self.progressView addObserver:self forKeyPath:@"progress" options:NSKeyValueObservingOptionNew context:nil];
如果我使用self.progressView.progress = 0.1;
来改变进度,那就没关系。
但如果我使用[self.progressView setProgress:0.1 animated:YES];
,则无法触发-observeValueForKeyPath:ofObject:change:context:
方法。
我现在能做什么?现在我无法更改[self.progressView setProgress:0.1 animated:YES];
,因为这个代码在另一个库中。
答案 0 :(得分:0)
从概念上讲,w / r / t是iOS和OS X中使用的MVC模式,这不是你应该首先做的事情。观点应该是“观察者”,而不是“观察者”。你应该找到另一种方法来实现这一目标。
是的,您可能会在调用原始实现之前和之后,通过调用-setProgress:animated:
的实现调用-willChangeValueForKey:
和-didChangeValueForKey:
来解决此问题,但请自己帮个忙找到另一种方式。
答案 1 :(得分:0)
我也遇到过这个问题。
我正在使用以下代码来解决此问题。
CGFloat progress = 0.3;//this is just a example.
if (progress < self.progressView.progress) {
self.progressView.progress = progress;
}
else
{
[UIView animateWithDuration:0.3 animations:^{
[self.progressView setProgress:progress animated:YES];
}completion:^(BOOL finished) {
//avoid key-value observer invalid
self.progressView.progress = progress;
}];
}
现在这对我有用。 希望它可以帮助别人。