给UIButton添加一个扩展
extension UIButton {
private struct customEdgeInset {
static var top: String = "topkey"
static var left: String = "leftkey"
static var right: String = "rightkey"
static var bottom: String = "bottomkey"
}
func setClcikEdgeInset(_ top: CGFloat, _ left: CGFloat, _ right: CGFloat, _ bottom: CGFloat) {
objc_setAssociatedObject(self, &customEdgeInset.top, top, .OBJC_ASSOCIATION_COPY_NONATOMIC)
objc_setAssociatedObject(self, &customEdgeInset.left, left, .OBJC_ASSOCIATION_COPY_NONATOMIC)
objc_setAssociatedObject(self, &customEdgeInset.right, right, .OBJC_ASSOCIATION_COPY_NONATOMIC)
objc_setAssociatedObject(self, &customEdgeInset.bottom, bottom, .OBJC_ASSOCIATION_COPY_NONATOMIC)
}
func getCurrentRect() -> CGRect {
let top = objc_getAssociatedObject(self, &customEdgeInset.top) as? CGFloat ?? 0
let left = objc_getAssociatedObject(self, &customEdgeInset.left) as? CGFloat ?? 0
let right = objc_getAssociatedObject(self, &customEdgeInset.right) as? CGFloat ?? 0
let bottom = objc_getAssociatedObject(self, &customEdgeInset.bottom) as? CGFloat ?? 0
if top > 0 || left > 0 || right > 0 || bottom > 0 {
return CGRect(x: self.bounds.origin.x - left, y: self.bounds.origin.y - top, width: self.bounds.size.width + left + right, height: self.bounds.size.height + top + bottom)
}else{
return self.bounds
}
}
open override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
return getCurrentRect().contains(point)
}
// open override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
// let rect = getCurrentRect()
// if rect.contains(point) {
// return self
// }
// return nil
// }
}
在控制器中用到的地方调用
let btn = UIButton()
btn.backgroundColor = UIColor.red
btn.frame = CGRect(x: 100, y: 200, width: 50, height: 50)
view.addSubview(btn)
btn.addTarget(self, action: #selector(btnClick), for: .touchUpInside)
btn.setClcikEdgeInset(30, 30, 30, 30)