如果你触摸没有图像alpha的地方,UIButton会忽略触摸。我可以更改它以响应其整个范围的触摸吗?
答案 0 :(得分:9)
我实际上是这样做的,我将带有透明背景的图片放入UIImageView
,然后将UIButton
的{{1}}设置为backgroundColor
。图像。这样,特别是对于小图像,我可以使“隐形”按钮更大,更容易为用户按下。
答案 1 :(得分:6)
如果你触摸没有图像alpha的地方,UIButton会忽略触摸。我可以更改它以响应其整个范围的触摸吗?
我认为一种简单的方法是将背景颜色设置为仅 透明的颜色。一个非常小但仍然大于0.1的alpha应该看起来透明,但仍然会对触摸做出反应。
否则,是的,您可以覆盖-hitTest:withEvent:
,即使触摸的区域是透明的,也会返回YES。
答案 2 :(得分:0)
只需遵循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
}
答案 3 :(得分:0)
我有一个UIView
扩展名会有所帮助。只需让您的按钮调用此方法即可。
extension UIView {
public func makeBackgroundAlpha002() {
backgroundColor = UIColor(white: 0, alpha: 0.02)
}
}
为什么使用alpha 0.02?如果您阅读Apple Documentation,他们会在命中测试期间解释魔术。
此方法将忽略隐藏的视图对象,禁用的用户交互或alpha级别小于0.01的视图对象。