2020 Note

1、檢測(cè)view在特定前提下是否可見
簡(jiǎn)短的代碼很難檢測(cè)當(dāng)前視圖是否在屏幕上可見,因?yàn)榇嬖诒恍值芤晥D或者父視圖被叔輩視圖完全遮擋的情況,其實(shí)也沒(méi)有必要寫大量的代碼去實(shí)現(xiàn)通用的邏輯,在大前提下能判斷時(shí),針對(duì)特定情況在添加少量代碼即可實(shí)現(xiàn)最終目的,效率自然也是最高的。
UIView的window屬性為nil的幾種情況

  • 父視圖為nil
  • 父視圖的父視圖為nil,以及父父父父...視圖(非主窗口)為nil
  • 離開導(dǎo)航棧頂
  • 非tabBarController的選中視圖
@implementation UIView (CheckVisible)
+ (BOOL)_checkVisible:(UIView *)view inView:(UIView *)inView
{
    if(!inView){
        return YES;
    }
    CGRect frameInView = view.frame;
    if(inView!=view.superview){
        frameInView = [inView convertRect:view.frame fromView:view.superview];
    }
    if(CGRectIntersectsRect(frameInView, inView.bounds))
    {
        return [self _checkVisible:view inView:inView.superview];
    }
    return NO;
}

- (BOOL)checkVisibleOnScreen
{
    if(self.hidden){
        return NO;
    }
    if(!self.window){
        return NO;
    }
    if(!self.superview){
        return NO;
    }
    return [UIView _checkVisible:self inView:self.superview];
}

@end

CGRectIntersectsRect 檢測(cè)兩個(gè)rect是否相交
https://developer.apple.com/documentation/coregraphics/1454747-cgrectintersectsrect

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容