0

我想在我的应用程序中放置两个可以移动的 UIImageView。当一个图像与另一个图像接触时,它会触发一个动作,然后将两个图像放回原来的位置。对此有什么建议吗?

我在用

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {

UITouch *touch = [touches anyObject];

// If the touch was in the placardView, move the placardView to its location
if ([touch view] == resultImage) {
    CGPoint location = [touch locationInView:self.tabBarController.view];
    resultImage.center = location;

    return;
}
}

这允许 resultImage 自由移动。我只需要知道如何检测它的任何部分何时接触到另一个图像(它是静止的)并在它发生时执行一个动作,并将 resultImage 返回到它的起始位置。

4

1 回答 1

3

关闭我的头顶,您可以使用CGRectContainsPoint目标的框架和移动图像的四个角使用四次,看看它们是否接触。

if(CGRectContainsPoint(collisionTarget.frame, resultImage.frame.origin) ||
   CGRectContainsPoint(collisionTarget.frame, CGPointMake(resultImage.frame.origin.x,resultImage.frame.origin.y+resultImage.frame.size.height)) ||
   CGRectContainsPoint(collisionTarget.frame, CGPointMake(resultImage.frame.origin.x+resultImage.frame.size.width,resultImage.frame.origin.y)) ||
   CGRectContainsPoint(collisionTarget.frame, CGPointMake(resultImage.frame.origin.x+resultImage.frame.size.width,resultImage.frame.origin.y+resultImage.frame.size.height)){
    //do something
}

编辑:我完全忘记了CGRectIntersectsRect. 你可以用那个。

if(CGRectIntersectsRect(imageView1.frame,imageView2.frame)){
    //do something
}

touchesMoved只需在使用两个图像视图的框架移动第一个图像视图后立即在您的方法中进行上述检查。然后,将第一个位置恢复到之前某个时间点的位置。您需要将其位置存储在一个属性或更早的东西中。

于 2013-02-01T04:20:47.750 回答