动画时如何检测两个图像帧的相交?

Posted

技术标签:

【中文标题】动画时如何检测两个图像帧的相交?【英文标题】:How to detect intersect of two image frames while animating? 【发布时间】:2012-04-13 20:20:22 【问题描述】:

在我的 UIView 中,我创建了一个名为 targetView 的 UIImageView,并将其设置为一系列动画:

[UIView animateWithDuration:1.0
                 animations:^self.targetView.center = CGPointMake(220,20);
                 completion:^(BOOL finished)
                                             //another animation will begin;
                                            ];

我还创建了另一个名为 shootView 的 UIImageView,它会在手指滑动时移动到目标方向。它的运动也被实现为动画。在其动画结束时,检测与 targetView 的相交:

[UIView animateWithDuration:1.0
                 animations:^
                 self.shootView.center = CGPointMake(destX, destY);
                 completion:^(BOOL finished)
                            if (CGRectIntersectsRect(self.targetView.frame, self.shootView.frame)) 
                            //do something
                             ];

现在有一个问题:intersect 命令只有在 targetView 已经到达当前动画的终点并且 shootView 恰好在那里时才能正常工作。当 targetView 在动画中间某处移动时,即使在视觉上很明显两帧相交,也无法检测到相交。

【问题讨论】:

【参考方案1】:

这种方法可能很棘手,因为您只能在 UIView 动画的开始和结束时获得回调。在您的示例中,仅在动画完成后调用 CGRectIntersectRect 方法。

一种解决方案可能是使用 NSTimer 为拍摄视图的位置设置动画,并随着位置的每次变化进行碰撞检测。即

[NSTimer timerWithTimeInterval: 0.03 target: self selector: @selector(timerTicked:) userInfo: nil repeats: YES];

-(void) timerTicked: (NSTimer*) timer 

  // do move
  // check for colisions
  // optional invalidation of timer

【讨论】:

以上是关于动画时如何检测两个图像帧的相交?的主要内容,如果未能解决你的问题,请参考以下文章

检查图像点是不是与圆相交

UIPangestureRecognizer - 一个图像与另一个图像相交

围绕 y 轴旋转两个图像,使它们的边界相交

CGRectIntersectsRect 未检测到相交视图

元素相交检测

如何在 OpenCv 中轻松检测 2 个 ROI 是不是相交?