0
点赞
收藏
分享

微信扫一扫

iOS判断View是否正在显示

1.增加标识。

BOOL isShow,添加到superView时,isShow = YES,从superView移除时,isShow = NO。

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

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

3.IOS判断当前UIViewController 是否正在显示。

- (BOOL)isVisible {
    return (self.isViewLoaded && self.view.window);
}

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

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

5.通过添加类别判断View是否显示。

#import <UIKit/UIKit.h>

@interface UIView (UIScreenDisplaying)
// 判断View是否显示在屏幕上
- (BOOL)isDisplayedInScreen;
@end
#import "UIView+UIScreenDisplaying.h"

@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;
}
@end
举报

相关推荐

0 条评论