Xcode中多个图像之间的交叉

时间:2012-06-04 19:15:56

标签: c++ iphone xcode image

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

-(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 *)触及withEvent:(UIEvent *)事件 {     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";
}

}

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

2 个答案:

答案 0 :(得分:1)

您可以使用CGRectIntersectsRect()查看是否有任何UIImageView与另一个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循环,并使用上述方法确定哪些图像相交。

答案 1 :(得分:1)

我的方法

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

创建图片

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

<强>碰撞

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

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

如果frameAframeB发生冲突,此方法将返回TRUE或FALSE语句。

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 --;
}