判断 UIView/Image 当前是不是可见

Posted

技术标签:

【中文标题】判断 UIView/Image 当前是不是可见【英文标题】:Figure out if UIView/Image is currently visible or not判断 UIView/Image 当前是否可见 【发布时间】:2013-12-06 18:50:41 【问题描述】:

有没有办法确定视图当前是否可见/当前是否显示在屏幕上?这对于内存处理非常方便。另外,有没有办法查看图像当前是否在屏幕上,这样您就不需要一直将其保存在内存中,尤其是当当前显示的图像很多时。

【问题讨论】:

这是在UITableviewCell 中吗?如果是这样,tableview 将为您管理。 可见是什么意思?隐?还是要检查您的视图是否已创建? 当前是否显示视图。如果必须绘制视图或者如果它在另一个 viewController 上,如果它在当前未显示的级别上,... 【参考方案1】:

您将不得不检查所有这些情况。我从来没有见过一个内置的属性来检查所有这些可能性。只需跟踪您创建、修改和隐藏视图的位置,并在适当的位置将其终止。

检查是否隐藏:

if (view.hidden)

或检查层次结构:

if (view.superview == nil)

您还可以检查视图的边界以查看它是否在屏幕上。

您也可以查看 alpha:

if (view.alpha > 0)

这应该涵盖了大多数可能性,否则,请注意。

【讨论】:

我应该如何“检查视图的边界以查看它是否在屏幕上”?即使我更改 VC/滚动它所在的 ScrollView 以使其不再可见,它也保持不变。 滚动的好点...没想到。您可以使用This answer 并计算以检查视图是否仍在屏幕上。如果您将视图作为滚动视图中的子视图。【参考方案2】:

这实际上取决于您如何更改视图和图像视图的可见性和不可见性。您可以检查hidden 属性以查看它是否隐藏,或者检查alpha 属性是否为0 以查看它是否不可见。当您说“在屏幕上”时,听起来您可能会将它们移出窗口的可见边缘,在这种情况下,您可以检查 imageView.frame.origin.xy 的值以查看其当前放置的位置。

如果您正在谈论检查 imageView 是否存在,它会变得更加复杂。您可以保留一组它们并检查它是否在其中,或通过其他几种方式。

这些是您正在寻找的吗?如果没有,请考虑编辑您的问题,详细说明您已尝试过什么以及您打算做什么。

【讨论】:

【参考方案3】:

这是在UITableviewCell 中吗?如果是这样,tableview 将为您管理。

如果它位于您通过导航或标签栏操作切换的视图中,请参阅viewDidDisappear:

如果它在当前视图中,但已移出屏幕,则在图像视图上调用convertRect:toView: 并传入主视图,然后检查生成的矩形是否在主视图的边界内。在移动图像视图后执行此操作。

【讨论】:

其实我想看看视图是否在屏幕上,有很多事情可能发生,所以它不再出现在屏幕上:它切换到另一个视图控制器,它改变它的框架,它显示的uiscrollview改变了可见的矩形,......我必须检查所有这些还是有办法解决这个问题? 这是一个个案。这个特定视图在您的视图层次结构中的什么位置?在这里显示一些代码和您的 xib 会很有帮助。 这是关于一般情况的。所有视图,所有图像。我的项目中有很多不同的 ViewController 上的大量图像,我想处理它。【参考方案4】:

您可以这样做,假设 myCustomView 是您要检查它当前是否在屏幕上的视图。

// This checks if your custom view's frame is inside self.view.
// You can replace self.view to whichever view that is the current screen of the app

let viewIsVisible = self.view.frame.contains(myCustomView.frame)

【讨论】:

以上是关于判断 UIView/Image 当前是不是可见的主要内容,如果未能解决你的问题,请参考以下文章

Unity精华☀️UI和物体可见性的判断方法

Unity精华☀️UI和物体可见性的判断方法

Unity精华☀️UI和物体可见性的判断方法

Android 判断当前Fragment是否可见(Visible)

如何判断android的activity是不是运行

isVisible() 是不是保证了 JAVA 中 UI 对象的可见性