iOS 扩大 UIButton 的点击范围

2019-09-27  本文已影响0人  CoderGuogt

在实际开发中,有的时候 Button 因为 Frame 太小,导致点击范围也小,需要增大 Button 的点击范围,但是又不需要改变 ButtonFrame
在 UIView 中有一个方法

 // default returns YES if point is in bounds
- (BOOL)pointInside:(CGPoint)point withEvent:(nullable UIEvent *)event;  

这个方法,当点击范围在这个view中,返回YES, 否则返回 NO

可以新建一个分类,新增加一个属性,记录需要扩大范围大小

@property (nonatomic, assign) CGFloat expandSize; /**< 需要扩大的范围大小 */

.m 文件的实现增加以下方法

- (void)setExpandSize:(CGFloat)expandSize {
    
    objc_setAssociatedObject(self, @selector(setExpandSize:), @(expandSize), OBJC_ASSOCIATION_ASSIGN);
}

- (CGFloat)expandSize {
    
    return [objc_getAssociatedObject(self, @selector(setExpandSize:)) floatValue];
}

- (CGRect)expandRect {
    
    return CGRectMake(self.bounds.origin.x - self.expandSize,
                      self.bounds.origin.y - self.expandSize,
                      self.bounds.size.width + 2 * self.expandSize,
                      self.bounds.size.height + 2 * self.expandSize);
}

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
    
    CGRect buttonRect = [self expandRect];
    
    if (CGRectEqualToRect(buttonRect, self.bounds)) {
        return [super pointInside:point
                        withEvent:event];
    }
    
    return  CGRectContainsPoint(buttonRect, point);
}

这样就在不改变 ButtonFrame 前提下,扩大了 Button 的点击范围。

上一篇下一篇

猜你喜欢

热点阅读