如何检测两个 UIImageView 何时重叠?

Posted

技术标签:

【中文标题】如何检测两个 UIImageView 何时重叠?【英文标题】:How do I detect whenever two UIImageView overlap? 【发布时间】:2011-02-08 05:00:23 【问题描述】:

我有两个 UIImageView,一个是从左向右移动的,另一个是可触摸拖动的。我希望 NSLog 在 imagetwo 与 imageone 重叠时在控制台上显示一条消息。我该怎么做?

【问题讨论】:

【参考方案1】:

您可以使用CGRectIntersectsRect 函数轻松测试矩形相交,前提是 UIImageView 共享相同的父视图(更准确地说,具有相同的坐标空间)。

您可能需要添加如下代码:

  -(void) touchesEnded:(NSSet *) touches 
    if(CGRectIntersectsRect([imageViewA frame], [imageViewB frame])) 
      NSLog(@"Do something.");
    
  

到承载两个图像视图的 UIView,或在拖动完成时调用的类似方法。

【讨论】:

如果它们不共享相同的坐标空间:BOOL intersects = CGRectIntersectRect( viewA.bounds, [ viewA convertRect:viewB.bounds fromView:viewB ] )【参考方案2】:

试试这样的。

if (CGRectContainsRect([myImageView1 frame], [myImageView2 frame])) 
        NSLog(@"Overlaped, it's working!");

【讨论】:

【参考方案3】:

你可以使用:

CGRectIsNull(CGRectIntersection(view1.bounds, view2.bounds));

【讨论】:

【参考方案4】:

在 Swift 3.0 中已经变成...

if (self.image2P.bounds.contains(self.image3P.bounds)) 
    print("Overlaped, it's working!")

【讨论】:

以上是关于如何检测两个 UIImageView 何时重叠?的主要内容,如果未能解决你的问题,请参考以下文章

检测 matplotlib 刻度标签何时重叠

MKPolyLine,检测线条何时重叠并相应改变颜色

XCode/Swift:如何管理两个重叠图像视图的约束

我如何在 Swift iOS 中检测 UIImageView 中的更改图像

检测 UISlider 何时完成 Xcode

iOS - 拖放碰撞检测如何检测您选择的项目何时拖过另一个子视图?