iOS view是否在此时是否屏幕内
判断view是否在屏幕内,这种实际情况也经常遇到,可以使用定时器,定时检查
- (void)startTaskWithView:(UIView *)view { _view = view; if (_view) { _timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(beginCheck) userInfo:nil repeats:YES]; [_timer fire]; } } - (void)beginCheck { if([self isDisplayedInScreen]) { NSLog(@"在屏幕内"); [_timer invalidate]; _timer = nil; } else { NSLog(@"不在屏幕内"); } } // 判断View是否显示在屏幕上 - (BOOL)isDisplayedInScreen { if (_view == nil) { return NO; } CGRect screenRect = [UIScreen mainScreen].bounds; // 转换view对应window的Rect UIWindow *win= [UIApplication sharedApplication].keyWindow; CGRect rect = [_view convertRect:_view.frame toView:win]; if (CGRectIsEmpty(rect) || CGRectIsNull(rect)) { return NO; } // 若view 隐藏 if (_view.hidden) { return NO; } // 若没有superview if (_view.superview == nil) { return NO; } // 若size为CGrectZero if (CGSizeEqualToSize(rect.size, CGSizeZero)) { return NO; } // 获取 该view与window 交叉的 Rect CGRect intersectionRect = CGRectIntersection(rect, screenRect); if (CGRectIsEmpty(intersectionRect) || CGRectIsNull(intersectionRect)) { return NO; } return YES; }
上一篇:
IDEA上Java项目控制台中文乱码