擴大UIButton點擊熱區(qū)

剛才加的iOS群分享了一份OC版本的代碼,大概看了一下覺得改成Swift3.0的也很簡單 于是就花幾分鐘動手改了一下。

import UIKit

fileprivate var rectNameKey:(Character?,Character?,Character?,Character?)

extension UIButton
{
    func setEnlargeEdgeWith(top:CGFloat,right:CGFloat,bottom:CGFloat,left:CGFloat)
    {
        objc_setAssociatedObject(self, &rectNameKey.0, top, .OBJC_ASSOCIATION_COPY_NONATOMIC)
        objc_setAssociatedObject(self, &rectNameKey.1, right, .OBJC_ASSOCIATION_COPY_NONATOMIC)
        objc_setAssociatedObject(self, &rectNameKey.2, bottom, .OBJC_ASSOCIATION_COPY_NONATOMIC)
        objc_setAssociatedObject(self, &rectNameKey.3, left, .OBJC_ASSOCIATION_COPY_NONATOMIC)
    }
    
    open override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
        
        if let topEdge = objc_getAssociatedObject(self, &rectNameKey.0) as? CGFloat,
            let rightEdge = objc_getAssociatedObject(self, &rectNameKey.1) as? CGFloat,
            let bottomEdge = objc_getAssociatedObject(self, &rectNameKey.2) as? CGFloat,
            let leftEdge = objc_getAssociatedObject(self, &rectNameKey.3) as? CGFloat
        {
            return CGRect(x: bounds.origin.x - leftEdge, y: bounds.origin.y - topEdge, width: bounds.width + leftEdge + rightEdge, height: bounds.height + topEdge + bottomEdge).contains(point) ? self : nil
        }
        return super.hitTest(point, with: event)
    }
}

即拿即用。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 因為要結局swift3.0中引用snapKit的問題,看到一篇介紹Xcode8,swift3變化的文章,覺得很詳細...
    uniapp閱讀 4,877評論 0 12
  • 發(fā)現(xiàn) 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 15,657評論 4 61
  • 種下一顆豌豆果 長出一叢豌豆稞 豌豆開花是紫色 花落結出豌豆角(湖北發(fā)音go) 豌豆角,豌豆角 睡著兄弟四五個 婆...
    花花的櫻花閱讀 8,211評論 0 0
  • 文/販賣夢的小托 這是一個神奇的世界 有一個族群,他們生活在水里 他們浮出水面的臉,有一點像河童 但是比河童更扭曲...
    ___的小托閱讀 1,164評論 0 0
  • 這幾年微信似乎已經成為我們生活的一部分,朋友圈曾經作為我們的生活展示平臺,如今似乎失去了它本來的面目。 ...
    薛定諤的貍貓閱讀 293評論 0 1

友情鏈接更多精彩內容