2012-01-30 41 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,并在进入时记录它们。然后您就可以看到什么时候触发了。