判断 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.x
和 y
的值以查看其当前放置的位置。
如果您正在谈论检查 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 当前是不是可见的主要内容,如果未能解决你的问题,请参考以下文章