判断一个控件是否真正显示在主窗口

类似网易新闻首页,不同的控制器View添加到一个ScrollView上,这个时候就需要判断手机显示的是哪个控制器View,就需要用到上面<判断一个控件是否真正显示在主窗口>的这个方法,如果没有这个判断,点击两次Item,所有添加到ScrollView上的控制器View都会刷新。

/**
 * 判断一个控件是否真正显示在主窗口
 */
- (BOOL)isShowingOnKeyWindow
{
    // 主窗口
    UIWindow *keyWindow = [UIApplication sharedApplication].keyWindow;
    
    // 以主窗口左上角为坐标原点, 计算self的矩形框
    CGRect newFrame = [keyWindow convertRect:self.view.frame fromView:self.view.superview];
    CGRect winBounds = keyWindow.bounds;
    
    // 主窗口的bounds 和 self的矩形框 是否有重叠
    BOOL intersects = CGRectIntersectsRect(newFrame, winBounds);
    
    return !self.view.isHidden && self.view.alpha > 0.01 && self.view.window == keyWindow && intersects;
}

你可能感兴趣的:(判断一个控件是否真正显示在主窗口)