3 回答

TA貢獻1770條經(jīng)驗 獲得超3個贊
我不認為這個解決方案足夠徹底。這個答案是出于歷史原因而保留的。
你必須在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];
}
}
}

TA貢獻1813條經(jīng)驗 獲得超2個贊
目前,無法使用KVO觀察視圖的幀。屬性必須符合KVO才能被觀察到。遺憾的是,與任何其他系統(tǒng)框架一樣,UIKit框架的屬性通常是不可觀察的。
從文檔:
注意:雖然UIKit框架的類通常不支持KVO,但您仍可以在應用程序的自定義對象中實現(xiàn)它,包括自定義視圖。
此規(guī)則有一些例外,例如NSOperationQueue的operations
屬性,但必須明確記錄。
即使在視圖的屬性上使用KVO當前可能有效,我也不建議在運輸代碼中使用它。這是一種脆弱的方法,依賴于無證件的行為。
- 3 回答
- 0 關注
- 591 瀏覽
添加回答
舉報