1

嘿伙计们,我一直在制作一个游戏,其中用户按下一个按钮,每次按下该按钮时,屏幕都会添加一个新的 UIImageView(每次都相同)。这些 UIImageView 可以通过 UITouch 功能单独拖动。但我希望他们也能检测到十字路口!我想知道哪两个 UIImageViews 相交,所以我可以更改相交的两个 UIImageViews 的图像 URL。

-(IBAction)ClTouched:(id)sender {

imgView2 = [[UIImageView alloc] initWithFrame:CGRectMake(120, 20, 80, 80)];
imgView2.backgroundColor = [UIColor clearColor];
imgView2.userInteractionEnabled = TRUE;
imgView2.image = [UIImage imageNamed:@"Cl.png"];

[self.view addSubview:imgView2];

}

// 用触摸移动图像你可以 - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { imgView.userInteractionEnabled = TRUE;

// get touch event
UITouch *touch = [[event allTouches] anyObject];
CGPoint touchLocation = [touch locationInView:self.view];

if ([self.view.subviews containsObject:[touch view]]) {
    [touch view].center = touchLocation;
}

if (CGRectIntersectsRect(imgView.frame, imgView2.frame)) {
    naam.text = @"INTERSECTION";
}

}

我希望这是足够的信息来帮助我!

4

2 回答 2

1

我的方法

我在我创建的游戏中遇到了类似的问题,目标以不同的颜色和属性出现在屏幕上。我接近它的方法是使用 NSMutableDictionary 并存储每个作为按钮的目标,然后在我停止使用它们时将它们删除。

创建图像

每次用户按下该按钮时,我都会创建一个新的 UIImageView,然后将其存储在包含每个 UIImageView 的字典中。我会用“1”或“2”之类的唯一键存储它们。这样,您可以将数字保存为图像中的标签,然后稍后获取数字,这实际上是 UIImageView 的键。换句话说,UIImageView 的标签与存储在字典中的键值相同。

碰撞

我也遇到过这个问题,我想出了一个解决方案。

-(BOOL) checkIfFrame:(CGRect)frameOne collidesWithFrame:(CGRect)frameTwo {
    return (CGRectIntersectsRect(frameOne, frameTwo));
}

frameA如果与 碰撞,此方法返回 TRUE 或 FALSE 语句frameB

NSMutableDictionary 使用示例

NSMutableDictionary * imageViewsDictionary;
int lastImageViewNumber = 0;

-(IBAction *) addNewImageView {
    UIImageView * newImageView;

    newImageView.image = [UIImage imageNamed:@""]; //Your Image
    newImageView.frame = CGRectMake:(0, 0, 0, 0); //Your Frame
    newImageView.tag = lastImageViewNumber;

    NSString * currentKey = [NSString stringWithFormat:@"%d", lastImageViewNumber];
    [imageViewsDictionary setObject:newImageView forKey:currentKey];

    [self.view addSubview:newImageView];

    lastImageViewNumber ++;
}

-(void) removeImageView:(id)sender {
    UIImageView * imageView = (UIImageView *)sender;

    [imageView removeFromSuperview];

    NSString * key = [NSString stringWithFormat:@"%d", imageView.tag];
    [imageViewsDictionary removeObjectForKey:key];

    lastImageViewNumber --;
}
于 2012-06-04T19:55:27.417 回答
1

您将使用CGRectIntersectsRect()查看是否有任何 UIImageView 与另一个相交。下面的例子..

编辑:后来意识到您已经实现了该CGRectIntersectsRect()方法。如果您有一组可以访问的所有其他图像,在拖动要比较的图像时,您可以执行以下操作

   for(UIImageView *image in yourArrayOfImages) {

         if(CGRectIntersectsRect(self.frame,[image frame])) {

              NSLog(@"self overlaps %@",image);
              //Now you know self is overlapping `image`, change the URL.

          }

    }

由于您有多个这些图像,因此您必须对所有图像进行 for 循环,并使用上述方法来确定哪些图像相交。

于 2012-06-04T19:22:40.387 回答