当UIImageViews触摸时执行操作

时间:2013-02-01 03:49:45

标签: iphone ios objective-c uiimageview ibaction

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

我正在使用

- (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返回到其起始位置。

1 个答案:

答案 0 :(得分: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方法检查。然后,将第一个位置恢复到某个时间点的位置。您需要将其位置存储在某个属性或更早的位置。