iOS判斷UIView是否顯示在螢幕上

來源:互聯網
上載者:User

iOS判斷UIView是否顯示在螢幕上

轉載 請註明出處:ALDRIDGE1的專欄

標頭檔:

/***************************************************** *  MIT Licence *   *  Author: __承_影__ * *  Date:   2015.2.10 * ****************************************************/@interface UIView (UIScreenDisplaying)// 判斷View是否顯示在螢幕上- (BOOL)isDisplayedInScreen;@end

實現檔案

/***************************************************** *  MIT Licence *   *  Author: __承_影__ * *  Date:   2015.2.10 * ****************************************************/@implementation UIView (UIScreenDisplaying)// 判斷View是否顯示在螢幕上- (BOOL)isDisplayedInScreen{    if (self == nil) {        return FALSE;    }        CGRect screenRect = [UIScreen mainScreen].bounds;        // 轉換view對應window的Rect    CGRect rect = [self convertRect:self.frame fromView:nil];    if (CGRectIsEmpty(rect) || CGRectIsNull(rect)) {        return FALSE;    }        // 若view 隱藏    if (self.hidden) {        return FALSE;    }        // 若沒有superview    if (self.superview == nil) {        return FALSE;    }        // 若size為CGrectZero    if (CGSizeEqualToSize(rect.size, CGSizeZero)) {        return  FALSE;    }        // 擷取 該view與window 交叉的 Rect    CGRect intersectionRect = CGRectIntersection(rect, screenRect);    if (CGRectIsEmpty(intersectionRect) || CGRectIsNull(intersectionRect)) {        return FALSE;    }        return TRUE;}

測試案例:

    UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 40, 40)];        // 無父視圖    BOOL b1 = [v isDisplayedInScreen];    NSLog(@"b1: %d", b1);            //    [self.view addSubview:v];        BOOL b2 = [v isDisplayedInScreen];    NSLog(@"b2: %d", b2);            v.frame = CGRectZero;    BOOL b3 = [v isDisplayedInScreen];    NSLog(@"b3: %d", b3);            CGRect screenRect = [UIScreen mainScreen].bounds;    CGFloat screenWidth = screenRect.size.width;    CGFloat screenHeight = screenRect.size.height;        v.frame = CGRectMake(-screenWidth, -screenHeight, screenWidth, screenHeight);    BOOL b4 = [v isDisplayedInScreen];    NSLog(@"b4: %d", b4);



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.