美文网首页swift4.0
Hit-test view扩大UIButton的响应热区

Hit-test view扩大UIButton的响应热区

作者: 279cb620c509 | 来源:发表于2018-05-30 11:43 被阅读47次

相信大家都遇到小图button点击热区太小问题,各种计算不说,写出的代码还很难看不便于维护,如果我们用用hit-test view的知识你就能轻松地解决这个问题。

直接上代码 我用的extension UIButton ,也可自行调整到自定义button中


extension UIButton {   

    struct RuntimeKey {

        static let minimumHitTestWidth = UnsafeRawPointer.init(bitPattern: "minimumHitTestWidth".hashValue)

        static let minimumHitTestHeight = UnsafeRawPointer.init(bitPattern: "minimumHitTestHeight".hashValue)     

    }

    var minimumHitTestWidth:CGFloat {

        set {

            objc_setAssociatedObject(self, UIButton.RuntimeKey.minimumHitTestWidth!, newValue, .OBJC_ASSOCIATION_COPY_NONATOMIC)

        }



        get {



            return  objc_getAssociatedObject(self, UIButton.RuntimeKey.minimumHitTestWidth!) as? CGFloat ?? 40

        }

    }

    var minimumHitTestHeight:CGFloat {

        set {

            objc_setAssociatedObject(self, UIButton.RuntimeKey.minimumHitTestHeight!, newValue, .OBJC_ASSOCIATION_COPY_NONATOMIC)

        }       

        get {

            return  objc_getAssociatedObject(self, UIButton.RuntimeKey.minimumHitTestHeight!) as? CGFloat ?? 40

        }

    }   

    override open func point(inside point: CGPoint, with event: UIEvent?) -> Bool {

        return hitTestingBounds(self.bounds, self.minimumHitTestWidth, self.minimumHitTestHeight).contains(point)

    }

    func hitTestingBounds(_ bounds:CGRect,_ minimumHitTestWidth:CGFloat,_ minimumHitTestHeight:CGFloat) -> CGRect {

        var hitTestingBounds : CGRect = bounds;

        if (minimumHitTestWidth > bounds.size.width) {

            hitTestingBounds.size.width = minimumHitTestWidth;

            hitTestingBounds.origin.x -= (hitTestingBounds.size.width - bounds.size.width)/2;

        }

        if (minimumHitTestHeight > bounds.size.height) {

            hitTestingBounds.size.height = minimumHitTestHeight;

            hitTestingBounds.origin.y -= (hitTestingBounds.size.height - bounds.size.height)/2;

        }

        return hitTestingBounds; 

    }



}

相关文章

  • Hit-test view扩大UIButton的响应热区

    相信大家都遇到小图button点击热区太小问题,各种计算不说,写出的代码还很难看不便于维护,如果我们用用hit-t...

  • 响应链(II)

    扩大UIButton的响应区   通过重载UIButton的 -(BOOL) pointInside: with...

  • Hit-Test 原理及应用案例

    Hit-Test和响应链 什么叫 hit-test view?文档说:The lowest view in the...

  • iOS UIbutton扩大热区

    Apple的iOS人机交互设计指南中指出,按钮点击热区应不小于44x44pt,否则这个按钮就会让用户觉得“很难用”...

  • 扩大UIButton点击热区

    刚才加的iOS群分享了一份OC版本的代码,大概看了一下觉得改成Swift3.0的也很简单 于是就花几分钟动手改了一...

  • ios 解决按钮过小点击不灵敏的问题

    重写uibutton的方法,扩大点击热区 - (BOOL)pointInside:(CGPoint)point w...

  • 响应链

    iOS事件响应链中Hit-Test View的应用从iOS的事件响应链看TableView为什么不响应touche...

  • UIButton动态扩大热区大小

    前言 使用UIButton的时候设置size的时候热区就固定了,有的时候热区的大小特别的小的时候特别难点到,特别是...

  • 增加UIButton热区(响应范围)

    button太小,想增加其可点击区域?要么就把按钮本身设置的大一些,要么增大其可以响应的区域。 采用继承的方式,重...

  • 事件传递链和响应链

    在官方文档中介绍了如何寻找hit-test view 和 first responder object(第一个响应...

网友评论

    本文标题:Hit-test view扩大UIButton的响应热区

    本文链接:https://www.haomeiwen.com/subject/imytsftx.html