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)
您还需要将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)
| 归档时间: |
|
| 查看次数: |
632 次 |
| 最近记录: |