正在检测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");
}

我认为替换

UIControlEventTouchDragExit

带有

UIControlEventTouchDragExit|UIControlEventTouchUpInside

这将是解决你问题的一个良好开端。

我相信您想要的事件是UIControlEventTouchUpInside。这就是"在这个控制范围内,触摸已经消失了"。不过,在这一点上,你可能不会得到那个。您肯定不会得到UIControlEventTouchDragExit,因为这意味着拖动已经离开了控件。

如果UIControlEventTouchUpInside对你不起作用,我喜欢捕捉UIControlEventAllEvents,并在它们进入时将其记录下来。然后你可以确切地看到什么时候被触发。

最新更新