有没有办法知道视图何时可供用户查看?
例如:如果我有2个视图,其中一个是“隐藏”另一个 -
如何判断“隐藏”视图目前在屏幕上不可见
如何查看它何时再次可见?
感谢。
答案 0 :(得分:1)
我假设你在同一个窗口中指的是两个视图。如果视图在其框架之外绘制,当clipsToBounds为NO时,任何视图都可以执行,那么您将必须获取视图内容的真实边界框架。
如果您有两个具有相同父视图的视图,并且想要查看它们是否相交,则可以使用以下内容:
CGRect frame1 = [view1 frame];
CGRect frame2 = [view3 frame];
CGRectIntersectsRect( frame1 , frame2 );
如果两个视图没有相同的父视图,那么您必须找到两个视图的公共父视图并使用:
CGRect frame1 = [parent convertRect:[view1 frame] fromView:view1];
CGRect frame2 = [parent convertRect:[view2 frame] fromView:view2];
如果你想知道视图是否完全重叠,而不是重叠一点,那么使用它代替CGRectIntersectsRect:
CGRectContainsRect( frame1 , frame2 ) || CGRectContainsRect( frame2 , frame1 )
如果两个视图不是不透明的,那么即使它们的帧相交,视图的内容也可能不会。弄清楚这完全取决于观点的具体内容。
一旦你发现视图重叠,你可以通过检查[父子视图]并查看哪个视图具有更高的索引来确定哪一个在顶部。如果任一视图不是父视图的直接子视图,则可以遍历子视图并使用isDescendantOfView查找订单。
要查明视图是否一般隐藏,您可以将其与具有更高z顺序的每个其他视图进行比较。视图的z顺序与子视图数组中的索引相同,因此索引2处的子视图的z顺序高于索引1处的子视图。从视图的父视图开始,然后提升视图层次结构。
答案 1 :(得分:0)
UIView的
– viewWillAppear:
通知视图控制器其视图即将变为可见。这意味着每次您的视图即将出现时,将自动调用此方法
同样的方式
- (void)viewWillDisappear:(BOOL)animated
当视图即将被解除,覆盖或以其他方式隐藏在视图中时,会自动调用委托方法。(就在它隐藏之前)
答案 2 :(得分:0)
我想到了一种方式,如果它能起作用,我会评论它 -
通过在视图层次结构中将所有视图“置于”我之上,
并检查他们的alpha和rects以查看他们是否隐藏了我的视图。
希望它能运作