2010-04-13 87 views
0

有没有办法知道视图何时可以被用户看到?有没有办法知道视图何时可以被用户看到?

例如:如果我有2次,而其中一个被“隐藏”在其他 -

我怎么能告诉大家,“隐藏”的观点目前还没有显示在屏幕上,

和我怎样才能查看它何时再次可见?

谢谢。

+0

检查,看是否视图是最顶尖的观点是不准确的,因为有可能是在屏幕上的其他看法的意见层次结构的顶部的情况 - 没有隐藏了这一观点。 – Shay 2010-04-13 07:52:01

回答

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处的子视图比索引1处的子视图具有更高的z顺序。从视图的父级开始,然后提升视图层级。

+0

谢谢,我现在才真正理解你的答案,在我想到以同样的方式完成之后,但现在你的答案现在为我节省了很多编码/思考时间。 谢谢。 – Shay 2010-04-13 13:37:53

+0

这绝对是+1。 – jkp 2011-02-17 15:11:51

0

的UIView的

– viewWillAppear: 

通知视图控制器,其观点是将要成为visible.It意味着每个视图即将出现这个方法会被自动调用

同样的方式

时间
- (void)viewWillDisappear:(BOOL)animated 

委托方法将在视图即将被解散,覆盖或以其他方式隐藏视图时自动调用(仅在隐藏之前)

+0

如果它被另一个视图部分隐藏,它会调用 - (void)viewWillDisappear:(BOOL)是否为动画? – Shay 2010-04-13 08:23:32

+0

IT应该是...我不知道...你可以把NSLog放在viewWillDisappear方法中,并验证相同的结果... – 2010-04-13 08:44:50

+0

谢谢,但它似乎viewWillDisapear只有当它的视图被删除时才会被调用 - 不是当它是被另一种观点所隐藏。 – Shay 2010-04-13 09:10:53

0

我想到了一个办法,如果它会工作,我会评论它 -

通过得到“上面”我的看法层次各方面的意见,

,并检查他们的阿尔法和rects看如果他们隐藏我的观点。

希望它会工作

相关问题