目前,UIControlEventTouchDragExit
仅在我从按钮拖动100像素时触发。我想自定义此行为并将其范围扩大到25像素左右,但是我相对较不熟悉编程,因此不需要重写/自定义这样的内置方法。
我在这里读过其他文章,我需要将UIButton
(甚至是UIControl
吗?)子类化,并覆盖-(BOOL) beginTrackingWithTouch: (UITouch *) touch withEvent: (UIEvent *) event
和相关方法,但我真的不知道从哪里开始。
有人可以就我如何实现这一目标提供一些建议吗?非常感激! ^ _ ^
最佳答案
覆盖continueTrackingWithTouch:withEvent:像这样在默认装订线内发送DragExit/DragOutside事件:
- (BOOL)continueTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event
{
CGFloat boundsExtension = 25.0f;
CGRect outerBounds = CGRectInset(self.bounds, -1 * boundsExtension, -1 * boundsExtension);
BOOL touchOutside = !CGRectContainsPoint(outerBounds, [touch locationInView:self]);
if(touchOutside)
{
BOOL previousTouchInside = CGRectContainsPoint(outerBounds, [touch previousLocationInView:self]);
if(previousTouchInside)
{
NSLog(@"Sending UIControlEventTouchDragExit");
[self sendActionsForControlEvents:UIControlEventTouchDragExit];
}
else
{
NSLog(@"Sending UIControlEventTouchDragOutside");
[self sendActionsForControlEvents:UIControlEventTouchDragOutside];
}
}
return [super continueTrackingWithTouch:touch withEvent:event];
}