2012-11-12 8 views
6

私はiOSを学んでいるので、ドラッグ&ドロップの動作をUIViewに追加する方法が見つかりません。ビューのシンプルなドラッグアンドドロップ?

私が試した:

[_view addTarget:self action:@selector(moved:withEvent:) forControlEvents:UIControlEventTouchDragInside]; 

をそれはまた、私はそれは私が

- (IBAction)test:(id)sender { 
     NSLog(@"dfsdfsf"); 
    } 
必要なものですかどうかわからパンジェスチャー認識を追加しようとしたがない

UIViewには目に見えるインターフェースは、セレクタaddTarget (etc)を宣言していない」と言います

これは呼び出されましたが、イベントの座標を取得する方法はわかりません。 iOSで標準の簡単な方法は何ですか?移動イベントのコールバックを登録する/ドラッグアンドドロップしますか?

ありがとうございます。

答えて

12

UIPanGestureRecognizerは間違いなく方法です。あなたは翻訳をしたら、あなたは「(ドラッグを移動することができます

- (IBAction)panWasRecognized:(UIPanGestureRecognizer *)recognizer { 
    CGPoint translation = [recognizer translationInView:_view.superview]; 

:あなたは、ユーザーが周囲にビューをドラッグしたい場合は、スーパービューの座標系におけるジェスチャーの「翻訳」(運動を)必要があります「)変更することにより、ビューのcenter

CGPoint center = _view.center; 
    center.x += translation.x; 
    center.y += translation.y; 
    _view.center = center; 

最後に、あなたが次回あなたがメッセージを取得するので、それが唯一のジェスチャーが移動したどのくらいかを示します、ゼロに戻るパンジェスチャー認識の翻訳を設定したいです最後のメッセージ以降:

[recognizer setTranslation:CGPointZero inView:_view.superview]; 
} 

ここでは、簡単にコピー/貼り付けのためにすべて一緒です:

- (IBAction)panWasRecognized:(UIPanGestureRecognizer *)recognizer { 
    CGPoint translation = [recognizer translationInView:_view.superview]; 

    CGPoint center = _view.center; 
    center.x += translation.x; 
    center.y += translation.y; 
    _view.center = center; 

    [recognizer setTranslation:CGPointZero inView:_view.superview]; 
} 
+0

ユーザーがのviewDidLoadでこれを追加する必要があります。 UIPanGestureRecognizer *パンナー= [[UIPanGestureRecognizerのalloc] initWithTarget:自己アクション:@selector(panWasRecognized: )]; [_viewaddGestureRecognizer:panner]; –

+1

また、ストーリーボードまたはXIBにジェスチャ認識機能を追加することもできます。 –

+0

そうだけど、私があなたの答えに従ったとき、私はそれが私とはうまくいかないことを知りませんでした:D –

4

touchesBegan,touchesMoved,touchesEndedで始まる。あなたのUIViewサブクラスでこれらをオーバーライドすれば、イベントシステムを学ぶことができます。あなたは、イベントがそうのように座標を取得することができます

- (void) touchesBegan:(NSSet *) touches withEvent:(UIEvent *) event 
{ 
    float x = [[touches anyObject] locationInView:self].x; 
    float y = [[touches anyObject] locationInView:self].y; 
} 

は次にように異なるビューとの間の座標を変換するためのもののトンがあります。理解したら、すでに見つけたもの、UIGestureRecognizerで必要なものを処理できます。

ドラッグジェスチャ認識ツールが必要になります。 UIPanGestureRecognizerlocationInView:セレクタを使用すると、いつでもどこにいるかを確認できます。

- (void) thingDragged:(UIPanGestureRecognizer *) gesture 
{ 
    CGPoint location = [gesture locationInView:self]; 
    if ([gesture state] == UIGestureRecognizerStateBegan) { 
     // Drag started 
    } else if ([gesture state] == UIGestureRecognizerStateChanged) { 
     // Drag moved 
    } else if ([gesture state] == UIGestureRecognizerStateEnded) { 
     // Drag completed 
    } 
} 

ます:

UIPanGestureRecognizer *dragDropRecog = [[UIPanGestureRecognizer alloc] initWithTarget:yourView action:@selector(thingDragged:)]; 
[yourView addGestureRecognizer:dragDropRecog]; 

は、その後、あなたのビューでセレクタthingDragged:を実装する必要があります。

あなたがいないあなたがしようとしていたターゲット・アクションのもので、そのようなあなたのジェスチャー認識を追加します変更されたビットでドラッグされているビューを翻訳し、終了セクションのドロップを処理します。

関連する問題