2012-01-30 61 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 2012-01-30 17:49:47

+0

如果用戶拖入控件然後退出,是不是'UIControlEventTouchDragExit'?我假設你不想要那個。「 – 2012-01-30 18:03:23

2

我相信你想要的事件是UIControlEventTouchUpInside。這就是「在這個控制下觸摸已經消失了。」不過,有可能在這一點上你不會得到那個。你當然不會得到UIControlEventTouchDragExit,因爲這意味着阻力已經離開了控制。

如果UIControlEventTouchUpInside不適用於您,我喜歡捕獲UIControlEventAllEvents,並在進入時記錄它們。然後您就可以看到什麼時候觸發了。