【发布时间】:2012-01-23 02:29:54
【问题描述】:
我使用(..) [UIView commitAnimations] 为很多视图设置动画。
现在我想检查“拍摄”的视图是否触及另一个视图。
有谁知道如何实现这个?
也许if(view.frame.origin.x==anotherview.frame.origin.x){
} ..
【问题讨论】:
标签: objective-c ios user-interface view
我使用(..) [UIView commitAnimations] 为很多视图设置动画。
现在我想检查“拍摄”的视图是否触及另一个视图。
有谁知道如何实现这个?
也许if(view.frame.origin.x==anotherview.frame.origin.x){
} ..
【问题讨论】:
标签: objective-c ios user-interface view
或者,如果它们在同一个超级视图中,您可以只比较帧:
BOOL methodB = CGRectIntersectsRect(viewA.frame, viewB.frame);
【讨论】:
从概念上讲,如果它们的边界矩形相交,则视图会“接触”另一个视图。因此,要比较两个视图的边界矩形,您需要执行以下操作:
Boolean viewsOverlap = CGRectIntersectsRect(viewA.bounds, viewB.bounds);
但仅此一项是行不通的,因为视图的边界矩形是在它们自己的坐标空间中指定的(意味着两者都从 0,0 等开始)所以你还需要将矩形转换为一个公共坐标比较之前的空格:
CGRect boundsA = [viewA convertRect:viewA.bounds toView:nil];
CGRect boundsB = [viewB convertRect:viewB.bounds toView:nil];
Boolean viewsOverlap = CGRectIntersectsRect(boundsA, boundsB);
从那里,您应该能够弄清楚如何有效地遍历您关心的视图列表以确定是否有重叠。
【讨论】: