如何在UIView的帧上进行键值观察并获得KVO回调?

我想看了在变化UIViewframeboundscenter财产。我如何使用Key-Value Observing来实现这一目标?



温温酱
浏览 524回答 3
3回答

德玛西亚99

我不认为这个解决方案足够彻底。这个答案是出于历史原因而保留的。你必须在frame-property上做KVO。在这种情况下,“self”是一个UIViewController。添加观察者(通常在viewDidLoad中完成):[self addObserver:self forKeyPath:@"view.frame" options:NSKeyValueObservingOptionOld context:NULL];删除观察者(通常在dealloc或viewDidDisappear :)中完成:[self removeObserver:self forKeyPath:@"view.frame"];获取有关更改的信息- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {    if([keyPath isEqualToString:@"view.frame"]) {        CGRect oldFrame = CGRectNull;        CGRect newFrame = CGRectNull;        if([change objectForKey:@"old"] != [NSNull null]) {            oldFrame = [[change objectForKey:@"old"] CGRectValue];        }        if([object valueForKeyPath:keyPath] != [NSNull null]) {            newFrame = [[object valueForKeyPath:keyPath] CGRectValue];        }    }}

慕姐8265434

目前,无法使用KVO观察视图的帧。属性必须符合KVO才能被观察到。遗憾的是,与任何其他系统框架一样,UIKit框架的属性通常是不可观察的。从文档:注意:虽然UIKit框架的类通常不支持KVO,但您仍可以在应用程序的自定义对象中实现它,包括自定义视图。此规则有一些例外,例如NSOperationQueue的operations属性,但必须明确记录。即使在视图的属性上使用KVO当前可能有效,我也不建议在运输代码中使用它。这是一种脆弱的方法,依赖于无证件的行为。
打开App,查看更多内容
随时随地看视频慕课网APP