判断View是否正在显示的总结

有时候在做一些工程时候为了视觉美化需要将一些view隐藏显示,还有的情况需要看是不是正在显示,这篇博文就简单总结一下怎么处理

最简单易行的是自己动手做一个标志

BOOL isShow;

然后在添加到superView时候,isShow = YES

从父视图移除时候,isShow = NO

遍历所有子视图进行操作,这样可以同时对多个子视图进行操做,移除视图释放内存等

for(UIView * view in [self.view subviews]){
        if(View isKindOfCless:[OneViewObject class]){
            //...

ps :IOS  判断当前UIViewController 是否正在显示

某些情况下,需判断当前ViewController是否正在显示,比如后台网络请求报错,我们可能只希望在发起请求的页面弹窗提示用户,当用户已经跳转到其他界面,不做弹窗,减少对用户的干扰。

假如一个UIView对象当前正在显示,那么它的window属性肯定为非空值。虽然官方文档未说明UIView未显示时window属性的取值, 但是经过简单的测试,大部分情况下UIView未显示时,window的值为空,因此依据此判断当前UIViewController是否正在显示。但是 访问UIViewController的view属性时,可能会引起view加载(假如此时还未加载),这是不必要的,而且还可能引起无法预期的问题。因 此在访问view属性之前,最好先检查isViewLoaded属性来避免上述问题。
- (BOOL)isVisible {
    return (self.isViewLoaded && self.view.window);
}

同时引用另外一位博友的处理方式

iOS判断UIView是否显示在屏幕上

如何判断一个view 是否在另外一个view 范围内

其原理是将两个view的坐标convert 到相对于同一个view的坐标,再对比

贴一段代码吧:
    CGRect rect = [_testButton convertRect:_testButton.frame toView:self.view];
    if (CGRectIntersectsRect(self.view.frame, rect)) {
        NSLog(@"true");
    }else{
        NSLog(@"false");
    }

转载于:https://my.oschina.net/bieshixuan/blog/614023

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值