13

如果您在没有图像 alpha 的地方触摸它,UIButton 会忽略触摸。我可以更改它以响应触摸它的整个边界吗?

4

4 回答 4

9

实际上,我一直这样做,将具有透明背景的图像放入 a中UIImageView,然后将 aUIButton及其backgroundColor设置[UIColor clearColor]放在图像顶部。这样,特别是对于小图像,我可以使“不可见”按钮更大,更容易为用户按下。

于 2013-06-28T17:41:24.147 回答
7

如果您在没有图像 alpha 的地方触摸它,UIButton 会忽略触摸。我可以更改它以响应触摸它的整个边界吗?

我认为仍然有效的一种简单方法是将背景颜色设置为仅大部分透明的颜色。一个非常小但仍大于 0.1 的 alpha 应该看起来是透明的,但仍能响应触摸。

否则,是的,您可以覆盖-hitTest:withEvent:,即使触摸区域是透明的,它也会返回 YES。

于 2013-06-28T16:03:19.133 回答
1

只是按照 Caleb 的建议覆盖 hitTest 并从Soroush Khanlou中获取灵感,这使得任何 UIButton 子类都响应框架上发生的任何触摸:

override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
    guard
        isUserInteractionEnabled,
        !isHidden,
        alpha >= 0.01,
        self.point(inside: point, with: event)
    else {return nil}

    for subview in subviews.reversed() {
        let convertedPoint = subview.convert(point, from: self)
        if let candidate = subview.hitTest(convertedPoint, with: event) {
            return candidate
        }
    }

    return self
}
于 2018-10-07T14:16:50.347 回答
0

我有一个UIView可以提供帮助的扩展程序。只需让您的按钮调用此方法。

extension UIView {
    public func makeBackgroundAlpha002() {
        backgroundColor = UIColor(white: 0, alpha: 0.02)
    }
}

为什么 alpha 0.02?如果您阅读Apple 文档,他们会解释命中测试期间的魔力。

此方法忽略隐藏、禁用用户交互或 alpha 级别小于 0.01 的视图对象。

于 2019-09-18T13:13:54.513 回答