1

こんにちは、私はユーザーがボタンを押すゲームを作成しており、そのボタンを押すたびに、画面に新しい UIImageView が追加されます (これは毎回同じです)。これらの UIImageView は、UITouch 関数を使用して個別にドラッグできます。しかし、交差点も検出してほしいです!そして、どの2つのUIImageViewが交差したかを知りたいので、交差する2つのUIImageViewの画像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

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 に答える
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 に答える