1

UIImageViewを追加してタッチで移動するサンプルコードがあり、そこにUIImageViewがあるかどうかを検出して、その上にUIImageViewを追加できないのではないかと思います。

編集:より明確な質問1.ビューに触れたときにカップ(UIImageView)を追加したいのですが、カップ(UIImageView)をスタックしたくありません。

  1. UIImageViewを移動したいのですが、UIImageViewがある場合は元の位置に戻るので、UIImageViewがすでにそこにスタックされません。

私の質問を読んでくれてありがとう、そしてあなたの助けに感謝します

乾杯

des

4

2 に答える 2

2

以下に示すように、UIImageViewにUIPanGestureRecognizerを追加して、ドラッグを処理できます。

UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(move:)];
[panRecognizer setMinimumNumberOfTouches:1];
[panRecognizer setMaximumNumberOfTouches:1];
[panRecognizer setDelegate:self];
[imageView addGestureRecognizer:panRecognizer];

次のメソッドを実装します。

    -(void)move:(id)sender {

    CGPoint translatedPoint = [(UIPanGestureRecognizer*)sender translationInView:self.view];

    if([(UIPanGestureRecognizer*)sender state] == UIGestureRecognizerStateBegan) {
      firstX = [[sender view] center].x;
      firstY = [[sender view] center].y;
    }
  translatedPoint = CGPointMake(firstX+translatedPoint.x, firstY+translatedPoint.y);
      [[sender view] setCenter:translatedPoint];

    }

上記と組み合わせて、CGRectIntersectsRectを使用して、別のカップと交差しているかどうかを確認できます。

BOOL isIntersecting = CGRectIntersectsRect ([cup1 frame],[cup2 frame]);

すべてのカップを考慮に入れるために機能をラップする必要がありますが、これにより、実行しようとしていることをどのように達成するかについてのアイデアが得られます。

于 2012-06-01T00:44:19.350 に答える
1

これで行けるはずです…</p>

ヘッダーファイルに2つのivarを作成します。

UIImageView *myImageView1;
UIImageView *myImageView2;

次の2つのメソッドは、実装ファイルに含まれます。

-(void)initImagesAndPanGesture
{
    UIImage *img = [UIImage imageNamed:@"image1.png"];
    myImageView1 = [[UIImageView alloc]initWithImage:img];
    [myImageView1 setFrame:CGRectMake(300, 800, 100, 100)];
    [myImageView1 setUserInteractionEnabled:YES];
    UIPanGestureRecognizer *recognizer1 = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(handlePan1:)];
    [myImageView1 addGestureRecognizer:recognizer1];
    [self.view addSubview:myImageView1];

    img = [UIImage imageNamed:@"image2.png"];
    myImageView2 = [[UIImageView alloc]initWithImage:img];
    [myImageView2 setFrame:CGRectMake(500, 800, 100, 100)];
    [myImageView2 setUserInteractionEnabled:YES];
    recognizer1 = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(handlePan1:)];
    [myImageView2 addGestureRecognizer:recognizer1];
    [self.view addSubview:myImageView2];
}

-(void)handlePan1:(UIPanGestureRecognizer *)recognizer
{
    if (!(CGRectIntersectsRect(myImageView1.frame, myImageView2.frame)))
    {
        CGPoint translation = [recognizer translationInView:self.view];
        recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x, 
                                         recognizer.view.center.y + translation.y);

        [recognizer setTranslation:CGPointMake(0, 0) inView:self.view];
    }
    else 
    {
        NSLog(@"intersect!");
    }
}
于 2012-06-01T00:51:19.340 に答える