我想在我的应用程序中放置两个可以移动的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返回到其起始位置。
答案 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
方法检查。然后,将第一个位置恢复到某个时间点的位置。您需要将其位置存储在某个属性或更早的位置。