判断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(@"不在屏幕内");
}
}
- (BOOL)isDisplayedInScreen
{
if (_view == nil) {
return NO;
}
CGRect screenRect = [UIScreen mainScreen].bounds;
UIWindow *win= [UIApplication sharedApplication].keyWindow;
CGRect rect = [_view convertRect:_view.frame toView:win];
if (CGRectIsEmpty(rect) || CGRectIsNull(rect)) {
return NO;
}
if (_view.hidden) {
return NO;
}
if (_view.superview == nil) {
return NO;
}
if (CGSizeEqualToSize(rect.size, CGSizeZero)) {
return NO;
}
CGRect intersectionRect = CGRectIntersection(rect, screenRect);
if (CGRectIsEmpty(intersectionRect) || CGRectIsNull(intersectionRect)) {
return NO;
}
return YES;
}