zoukankan      html  css  js  c++  java
  • 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);

  • 相关阅读:
    代码点与代码单元
    IIS最大并发连接数
    PhoneGap:JS跨域请求
    字符串长度
    android学习笔记:adb更换端口后成功启动
    java学习笔记:eclipse的workspace和working set
    java学习笔记:Eclipse打开现有项目
    java学习笔记:文件名区分大小写
    mysql学习笔记:存储过程
    mySql学习笔记:比sql server书写要简单
  • 原文地址:https://www.cnblogs.com/wjw-blog/p/7809839.html
Copyright © 2011-2022 走看看