减少 UIButton 的触控区域

Posted

技术标签:

【中文标题】减少 UIButton 的触控区域【英文标题】:Decrease Touch Area of UIButton 【发布时间】:2012-10-12 17:19:01 【问题描述】:

我正在尝试减少 UIButton 的触摸区域。这甚至可能吗?当用户触摸按钮并将其触摸拖到按钮外时,触摸事件应在按钮图形结束时立即停止。不幸的是,该区域比实际图形大得多。我发现了很多关于如何增加面积而不是如何缩小面积的内容。

感谢您的帮助。

【问题讨论】:

为什么不改变按钮的大小以匹配图形的大小? @barley 我想他想说的是,即使按钮和图形大小相同,当您单击按钮并向外拖动时,按钮不会被按下,直到您获得一定距离。他希望它立即压抑。 @yuf 感谢您的解释。这听起来像是一个有趣的挑战:) 我同意:您必须从按钮上拖出取消按钮的距离太大了。我一直拖离按钮(至少是按钮本身高度的 2 倍)并且它仍然激活按钮。真气人! 【参考方案1】:

我想出了一个解决方案。您可以继承 UIButton 并覆盖 touchesMoved: 以便它识别触摸在按钮之外时结束。这是我的sn-p。

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
    UITouch * touch = [touches anyObject];
    CGPoint touchPoint = [touch locationInView:self];

    if(!CGRectContainsPoint(self.bounds, touchPoint))
    
        [super touchesEnded:touches withEvent:event];
    
    else
    
        [super touchesMoved:touches withEvent:event];
    

这样做的缺点是,如果您离开按钮并再次返回,按钮将不会变为活动状态。但除此之外,我认为它应该可以正常工作。

【讨论】:

以上是关于减少 UIButton 的触控区域的主要内容,如果未能解决你的问题,请参考以下文章

在横向模式下扩展 iPhone X 的触控区域

防止多点触控的 UIButton 触摸事件

SDCAlertView 和 UIViewController 与 UIButton

为啥UIButton高亮区域那么小?

UIButton:使点击区域大于默认点击区域

使 UIButton 的点击区域更大