有没有办法知道视图何时可供用户查看?

时间:2010-04-13 07:49:30

标签: iphone uiview uiviewcontroller visible

有没有办法知道视图何时可供用户查看?

例如:如果我有2个视图,其中一个是“隐藏”另一个 -

如何判断“隐藏”视图目前在屏幕上不可见

如何查看它何时再次可见?

感谢。

3 个答案:

答案 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以查看他们是否隐藏了我的视图。

希望它能运作

相关问题