我正在尝试实施一个拖拉机在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");
}
答案 0 :(得分:11)
我认为更换
UIControlEventTouchDragExit
与
UIControlEventTouchDragExit|UIControlEventTouchUpInside
将是解决问题的良好开端。
答案 1 :(得分:2)
我相信你想要的事件是UIControlEventTouchUpInside
。这就是“在这种控制中,触摸消失了”。但是,你可能不会在这一点上得到那个。你当然不会得到UIControlEventTouchDragExit
,因为这意味着拖拽已经离开了控件。
如果UIControlEventTouchUpInside
对您不起作用,我希望捕获UIControlEventAllEvents
并在它们进入时记录它们。然后您就可以确切地看到它们被触发的时间。