2020 Note

作者: unspecx | 来源:发表于2020-01-17 11:14 被阅读0次

1、检测view在特定前提下是否可见
简短的代码很难检测当前视图是否在屏幕上可见,因为存在被兄弟视图或者父视图被叔辈视图完全遮挡的情况,其实也没有必要写大量的代码去实现通用的逻辑,在大前提下能判断时,针对特定情况在添加少量代码即可实现最终目的,效率自然也是最高的。
UIView的window属性为nil的几种情况

  • 父视图为nil
  • 父视图的父视图为nil,以及父父父父...视图(非主窗口)为nil
  • 离开导航栈顶
  • 非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 检测两个rect是否相交
https://developer.apple.com/documentation/coregraphics/1454747-cgrectintersectsrect

相关文章

  • 2020-02-23

    一英语学习总结 文档:2020-02-23.note 链接:http://note.youdao.com/note...

  • 2020-02-12

    一、英语学习总结 文档:2020-02-12.note 链接:http://note.youdao.com/not...

  • 2020-02-17

    一、英语学习总结 文档:2020-02-17.note 链接:http://note.youdao.com/not...

  • 2020-02-16

    一、英语学习总结 文档:2020-02-16.note 链接:http://note.youdao.com/no...

  • 2020-02-11

    总结 一、英语文档:2020-02-11.note 链接:http://note.youdao.com/notes...

  • 2020-02-14

    一、英语学习总结: 文档:2020-02-14.note 链接:http://note.youdao.com/n...

  • C语言基础学习第一天笔记

    文档:千峰2020最新C语言视频教程.note链接:http://note.youdao.com/noteshar...

  • 三星新品发布会:满满黑科技的 Galaxy Note 20 即将

    三星2020年旗舰机型 “三星 Galaxy Note 20” 与 “Note 20 Ultra ”即将闪亮登场。...

  • 2020 Note

    1、检测view在特定前提下是否可见简短的代码很难检测当前视图是否在屏幕上可见,因为存在被兄弟视图或者父视图被叔辈...

  • 2020-12-06

    2020-12-5学习R语言[https://note.youdao.com/web/#/file/recent/...

网友评论

      本文标题:2020 Note

      本文链接:https://www.haomeiwen.com/subject/oujczctx.html