2012-05-05 18 views
1

私はSOの別の紳士のこのコードを採用しました。これまでのところうまくいっていますが、私のアプリではかなりの数の画像ビュー/ボタンを移動する予定です。これを実装する最良の方法は何でしょうか?おそらくオブジェクトを配列に配置し、列挙子を使用しますか?他の誰かが似たようなことをやったことがあるなら、正しい方向への動きは非常に高く評価されます!ところで は、彼らはすべてのビュー内でこの質問を読むために時間を割いてiPadアプリ内でのドラッグ&ドロップ

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
// Do any additional setup after loading the view. 

UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(dragGesture:)]; 

[dragImage addGestureRecognizer:panGesture]; 
[dragImage setUserInteractionEnabled:YES]; 
} 

#pragma mark - 
#pragma mark UIPanGestureRecognizer selector 
- (void) dragGesture:(UIPanGestureRecognizer *) panGesture{ 


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

switch (panGesture.state) { 
    case UIGestureRecognizerStateBegan:{ 
     originalCentre = dragImage.center; 
    } 
     break; 
    case UIGestureRecognizerStateChanged:{ 
     dragImage.center = CGPointMake(dragImage.center.x + translation.x, 
             dragImage.center.y + translation.y); 
    } 
     break; 
    case UIGestureRecognizerStateEnded:{    
     if (((dragImage.center.x >= 280) && (dragImage.center.y >= 280) && 
      (dragImage.center.x <= 450) && (dragImage.center.y <= 450))) { 

      dragImage.center = CGPointMake(300, 300); 
      [dragImage setUserInteractionEnabled:NO]; 
      break; 
     } 
     [UIView animateWithDuration:0.5 
         animations:^{ 
          dragImage.center = originalCentre; 
         } 
         completion:^(BOOL finished){ 
         }]; 
    } 
     break; 
    default: 
     break; 
} 

[panGesture setTranslation:CGPointZero inView:self.view]; 
} 

-(IBAction)clear{ 
[UIImageView animateWithDuration:0.5 animations:^{ 
dragImage.center = CGPointMake(100, 200); 
}]; 

[dragImage setUserInteractionEnabled:YES]; 
} 

感謝を異なる座標を持つことになります。

答えて

2

recognizer.viewを使用して、どのビューが移動されているかを判断できます。 drawImageを常に変更する代わりに、recognizer.viewを使用してください。あなたがでないサブビューの場合、認識ツールが開始するときに、それをキャンセルするようにしてください(enabledNOに設定してからYESに設定します)。はドラッグアンドドロップ可能になります。

移動するビューに応じて、これらのマジックナンバーの一部を変更する必要があります。

+0

@Ashありがとうございます。 recognizer.viewで各dragImageを変更することを意味しますか? –

+1

実際、申し訳ありませんが、私は嘘をつきました。このメソッドでは、drawImage'の 'frame'を動かしています。ユーザーの指がどのような表示になっていても、移動するには、それを変更する必要があります。または、移動する各ビューに複数のジェスチャ認識ツールを添付することもできます。 –

関連する問題