有時候在作一些工程時候爲了視覺美化須要將一些view隱藏顯示,還有的狀況須要看是否是正在顯示,這篇博文就簡單總結一下怎麼處理html
BOOL isShow;網絡
而後在添加到superView時候,isShow = YESless
從父視圖移除時候,isShow = NO測試
for(UIView * view in [self.view subviews]){
if(View isKindOfCless:[OneViewObject class]){
//...spa
某些狀況下,需判斷當前ViewController是否正在顯示,好比後臺網絡請求報錯,咱們可能只但願在發起請求的頁面彈窗提示用戶,當用戶已經跳轉到其餘界面,不作彈窗,減小對用戶的干擾。htm
假如一個UIView對象當前正在顯示,那麼它的window屬性確定爲非空值。雖然官方文檔未說明UIView未顯示時window屬性的取值, 可是通過簡單的測試,大部分狀況下UIView未顯示時,window的值爲空,所以依據此判斷當前UIViewController是否正在顯示。可是 訪問UIViewController的view屬性時,可能會引發view加載(假如此時還未加載),這是沒必要要的,並且還可能引發沒法預期的問題。因 此在訪問view屬性以前,最好先檢查isViewLoaded屬性來避免上述問題。
- (BOOL)isVisible {
return (self.isViewLoaded && self.view.window);
}對象
同時引用另一位博友的處理方式內存
其原理是將兩個view的座標convert 到相對於同一個view的座標,再對比文檔
貼一段代碼吧:
CGRect rect = [_testButton convertRect:_testButton.frame toView:self.view];
if (CGRectIntersectsRect(self.view.frame, rect)) {
NSLog(@"true");
}else{
NSLog(@"false");
}get