hitTest、pointInside

控制响应区域可以重写hitTest 或者 pointInside 方法


- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    //系统默认会忽略isUserInteractionEnabled设置为NO、隐藏、alpha小于等于0.01的视图
    if (!self.isUserInteractionEnabled || self.isHidden || self.alpha <= 0.01) {
        return nil;
    }
    if ([self pointInside:point withEvent:event]) {
        for (UIView *subview in [self.subviews reverseObjectEnumerator]) {
            CGPoint convertedPoint = [subview convertPoint:point fromView:self];
            UIView *hitTestView = [subview hitTest:convertedPoint withEvent:event];
            if (hitTestView) {
                return hitTestView;
            }
        }
        return self;
    }
    return nil;
}


import UIKit

class HHButton: UIButton {

    var tapEndgeInsets: UIEdgeInsets = .zero
    
    override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
        if self.bounds.equalTo(self.enlargedRect()) {
            return super.point(inside: point, with: event)
        }else {
            if enlargedRect().contains(point) {
                return true
            }
            return false
        }
    }
    
    func enlargedRect() -> CGRect {
        return CGRect.init(x: self.bounds.origin.x - self.tapEndgeInsets.left, y: self.bounds.origin.y - self.tapEndgeInsets.right, width: self.bounds.size.width + self.tapEndgeInsets.left + self.tapEndgeInsets.right, height: self.bounds.size.height + self.tapEndgeInsets.top + self.tapEndgeInsets.bottom)
    }

}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容