是否显示UIView?

Dav*_*mid 3 objective-c uiview ios

我有一个UIViewController.根UIView包含一个自定义UIScrollView,用于在网格中显示缩略图图像(ThumbnailGrid类).这个网格可以包含很多显示图像的UIViews(GridTile类).因为有很多网格图块,用户可以向下滚动ThumbnailGrid.我只想加载用户实际可以看到的网格图块的图像,我不想为屏幕边缘的网格图块加载图像.

如何确定是否在屏幕上显示其中一个GridTile UIView?

我尝试了以下但它似乎总是返回false.

- (bool) isViewDisplayed:(UIView*)view
{
        CGRect viewFrame = view.frame;
        CGRect appFrame = [[UIScreen mainScreen] applicationFrame];
        if (CGRectIntersectsRect(viewFrame, appFrame)) return true;
        return false;
}
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?

在此先感谢您的帮助!

编辑

解决方案

事实证明坐标系统是错误的,所以我得到了一些奇怪的事情,其中​​方法应该返回true,而是返回false,反之亦然.

- (bool) isViewDisplated:(UIView*)view
{
    CGRect viewFrame = [parentOfView convertRect:view.frame toView:nil]; 
    CGRect appFrame = [[UIScreen mainScreen] applicationFrame];
    if (CGRectIntersectsRect(viewFrame, appFrame)) return true;
    return false;
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ski 7

您还需要将rect转换为正确的坐标系:

- (bool)isViewDisplayed:(UIView*)view
{
    if (view.window) {
        CGRect viewFrame = [view.window convertRect:view.frame fromView:view.superview];
        CGRect screenFrame = view.window.bounds;
        return CGRectIntersectsRect(viewFrame, screenFrame);
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)