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


@interface

- (BOOL)isDisplayedInScreen;

@end

 

@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;

  }

  retrun true;

}

 

 

@end

 

 

 

//test case

UIView *view = [UIView alloc] initWithFrame:CGRectMake(0,0,40,40)];

//無父視圖

BOOL b1 = [view isDisplayedInScreen];

NSLog(@"b1: %d", b1);

 

[self.view addSubView:view];

BOOL b2 = [view isDisplayedInScreen];

NSLog(@"b2:%d",b2);

v.frame = CGRectZero;

BOOL b3 = [view isDisplayedSceen];

NSLog("b3:%d",b3);

 

CGRect screenRect  = [UIScreen mainScreen].bounds;

CGFloat screenWidth = screenRect.size.width;

CGFloat screenHeight = screenRect.size.height;

 

view.frame = CGRectMake(-screenWidth, -screenHeight, screenWidth, screenHeight);

BOOL b4 = [view isDisplayedInscreen];

NSLog(@"b4:%d",b4);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM