目前,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];
}

10-05 21:13
查看更多