0

Pan GestureComponent を使用して、現在ドラッグされているオブジェクトの最初の位置を取得しようとしています。そのために、私はしました:

まず、ステートが開始したときのボタンの位置を保存します。

- (IBAction)handlePan:(UIPanGestureRecognizer *)recognizer{

    CGPoint startlocation;

// Get Position X and Y
if (recognizer.state == UIGestureRecognizerStateBegan) {
    startlocation = [recognizer locationInView:self.view];
    NSLog(@"%f" @"-" @"%f", startlocation.x , startlocation.y);
}

そして、ユーザーがボタンを離したとき (State Ended)、ボタンを最初の場所に戻したいと思います。

// Quand on lache le composant : Action de fin
if (recognizer.state == UIGestureRecognizerStateEnded)
{     
NSLog(@"%f" @"-" @"%f", startlocation.x , startlocation.y); 
recognizer.view.center = startLocation;  
}

NSログ:

状態の開始:

76.000000-158.000000

状態の終了:

0.000000--1.998666

私は問題があります。ボタンが画面の外にあります。startLocation の X と Y が変更されている理由がわかりません。

4

1 に答える 1

1

あなたは2つの異なることについて話している:

  1. パン ジェスチャをトリガーしているタッチの位置recognizer locationInView
  2. ビューの位置 (フレームの原点を使用しているか中心を使用しているかはわかりません)

何をしようとしているのかは明確ではありませんが、パン ジェスチャの翻訳によってターゲット ビューを移動するかどうかを決定する必要があります。

if (recognizer.state == UIGestureRecognizerStateBegan) {
   startLocation = targetView.center;
}

CGPoint translation = [recognizer translationInView:self.view];

CGPoint newCenter = startLocation;
newCenter.x += translation.x;
newCenter.y += translation.y;

targetView.center = newCenter;

または、ターゲット ビューをパン ジェスチャの位置にスナップしようとしている

targetView.center = [recognizer locationInView:self.view];

これはすべて、ターゲット ビューが self.view の直接のサブビューであると仮定しています...

于 2013-04-16T22:40:18.860 に答える