嘿伙计们,我一直在制作一个用户按下按钮的游戏,每次按下该按钮时,屏幕都会添加一个新的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";
}
}
我希望这有足够的信息来帮助我!
答案 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));
}
如果frameA
与frameB
发生冲突,此方法将返回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 --;
}