2012-01-30 19 views
3

ドラッグの機能をUIButtonに実装しようとしていますが、うまくいきますが、ユーザーがボタンを離したときを判断する方法を理解できません。ドラッグを終了しました。以下のコードはドラッグでうまく動作しますが、ユーザーがドラッグを終了してボタンを放すと通知される必要があります。UIButtonイベントが検出されたときの検出

- (void)viewDidLoad 
{ 
    [gesturesBrowserButton addTarget:self action:@selector(wasDragged:withEvent:) 
    forControlEvents:UIControlEventTouchDragInside]; 

    [gesturesBrowserButton addTarget:self action:@selector(finishedDragging:withEvent:) 
        forControlEvents:UIControlEventTouchDragExit]; 
} 

- (void)wasDragged:(UIButton *)button withEvent:(UIEvent *)event 
{ 
    // get the touch 
    UITouch *touch = [[event touchesForView:button] anyObject]; 

    // get delta 
    CGPoint previousLocation = [touch previousLocationInView:button]; 
    CGPoint location = [touch locationInView:button]; 
    CGFloat delta_x = location.x - previousLocation.x; 
    CGFloat delta_y = location.y - previousLocation.y; 

    // move button 
    button.center = CGPointMake(button.center.x + delta_x, 
           button.center.y + delta_y); 

    NSLog(@"was dragged"); 
} 

- (void)finishedDragging:(UIButton *)button withEvent:(UIEvent *)event 
{ 
    //doesn't get called 
    NSLog(@"finished dragging"); 
} 

答えて

11

私は

UIControlEventTouchDragExit|UIControlEventTouchUpInside 

UIControlEventTouchDragExit 

を交換し、あなたの問題を解決するための良いスタートになると思います。

+0

これはトリックでした:)ありがとう – Snowman

+0

ユーザーがコントロールにドラッグして戻った場合、「UIControlEventTouchDragExit'はあなたのために起動しませんか?私はあなたがそれを望んでいないと思う。 –

2

ここにほしいと思うイベントはUIControlEventTouchUpInsideです。これは「このコントロールの中で触れてしまった」しかし、あなたはこの時点でそれを得ることはできません。あなたは確かにドラッグがコントロールを残したので、UIControlEventTouchDragExitを取得しません。

UIControlEventTouchUpInsideがあなたのために機能しない場合、私はUIControlEventAllEventsをキャプチャし、それらが入ってきたときにログに記録します。

関連する問題