有没有办法知道用户何时可以查看视图?
例如:如果我有 2 个视图,其中一个是“隐藏”另一个 -
我怎么知道“隐藏”视图当前在屏幕上不可见,
以及如何检查它何时再次可见?
谢谢。
有没有办法知道用户何时可以查看视图?
例如:如果我有 2 个视图,其中一个是“隐藏”另一个 -
我怎么知道“隐藏”视图当前在屏幕上不可见,
以及如何检查它何时再次可见?
谢谢。
我假设您的意思是同一窗口中的两个视图。如果视图在它们的框架之外绘制,当 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 处的子视图。从视图的父视图开始,然后提升视图层次结构。
UIView 的
– viewWillAppear:
通知视图控制器它的视图即将变得可见。这意味着每次您的视图即将出现时,都会自动调用此方法
同样的方法
- (void)viewWillDisappear:(BOOL)animated
当视图即将被关闭、覆盖或以其他方式从视图中隐藏时,委托方法将自动调用。(就在它隐藏之前)
我想了一个办法,如果可行,我会评论它-
通过在视图层次结构中获取“高于”我的所有视图,
并检查他们的 alphas 和 rects,看看他们是否隐藏了我的观点。
希望它会起作用