我想在我的应用程序中放置两个可以移动的 UIImageView。当一个图像与另一个图像接触时,它会触发一个 Action ,然后将两个图像放回原来的位置。对此有何建议?
我正在使用
- (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 自由移动。我只需要知道如何检测它的任何部分何时接触到另一个图像(静止的)并在它发生时执行一个 Action ,并将 resultImage 返回到它的起始位置。
最佳答案
我没想到,您可以使用 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
}
在使用两个 ImageView 的帧移动第一个 ImageView 后,立即在 touchesMoved
方法中执行上述检查。然后,将第一个的位置恢复到更早的某个时间点。您需要将其位置存储在属性或更早的东西中。
关于iphone - UIImageViews 触摸时执行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14639430/