iphone - UIImageViews 触摸时执行操作

标签 iphone ios objective-c uiimageview ibaction

我想在我的应用程序中放置两个可以移动的 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/

相关文章:

iphone - 为 iOS6.0 ARMv7 处理器构建 FFMPEG 库

c# - iOS webapp 启动画面缓存

ios - 关于 iOS 中自动布局的说明

ios - 我不明白为什么 Objective-C 委托(delegate)函数可以工作而 Swift 委托(delegate)函数会崩溃。你能给我解释一下吗?

iphone - 获取当前方法调用的线程id

iphone - TestFlight 找不到构建

iphone - 多个自定义行 UITableView?

ios - 为什么我的数组不存储从 firebase 数据库检索的值?

iphone - 如何清除代码中的 NSLog 输出?

Objective-C 到 Swift 3 方法名称更改问题