扩大视图热区范围

扩大UIbutton的点击范围,需要重写方法两个方法中的任意一个即可
1,override open func point(inside point: CGPoint, with event: UIEvent?) -> Bool
2, override open func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView?


extension UIButton {
    
    struct hitTestKey {
        static let hitTestEdgeInsetsKey = UnsafeRawPointer.init(bitPattern: "hitTestEdgeInsetsKey".hashValue)
    }
    
    var hitTestEdgeInsets: UIEdgeInsets {
        set {
            objc_setAssociatedObject(self, hitTestKey.hitTestEdgeInsetsKey!, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_COPY)
        }
        
        get {
            if let rs = objc_getAssociatedObject(self, hitTestKey.hitTestEdgeInsetsKey!) as?  UIEdgeInsets {
                return rs
            }
            return UIEdgeInsets.init(top: 0, left: 0, bottom: 0, right: 0)
        }
    }
    
    
    override open func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
        let rect = self.bounds.inset(by: self.hitTestEdgeInsets)
        print("event")
        if rect.contains(point) {
            return self
        }else {
            return nil
        }
    }
    
    override open func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
        let rect = self.bounds.inset(by: self.hitTestEdgeInsets)
        print("inside")
        return rect.contains(point)
    }
}

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

相关阅读更多精彩内容

友情链接更多精彩内容