【发布时间】:2013-06-26 11:15:03
【问题描述】:
如果您在没有图像 Alpha 的地方触摸它,UIButton 会忽略触摸。我可以更改它以响应触摸它的整个边界吗?
【问题讨论】:
标签: ios uibutton uiimage uikit
如果您在没有图像 Alpha 的地方触摸它,UIButton 会忽略触摸。我可以更改它以响应触摸它的整个边界吗?
【问题讨论】:
标签: ios uibutton uiimage uikit
我有一个UIView 分机可以提供帮助。只需让您的按钮调用此方法即可。
extension UIView {
public func makeBackgroundAlpha002() {
backgroundColor = UIColor(white: 0, alpha: 0.02)
}
}
为什么是 alpha 0.02?如果您阅读Apple Documentation,他们会在命中测试期间解释魔法。
此方法会忽略隐藏、禁用用户交互或 alpha 级别小于 0.01 的视图对象。
【讨论】:
只是按照 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
}
【讨论】:
我实际上一直这样做,我将具有透明背景的图像放入UIImageView,然后将UIButton 及其backgroundColor 设置为[UIColor clearColor] 放在图像顶部。这样,尤其是对于小图像,我可以使“不可见”按钮更大,更易于用户按下。
【讨论】:
如果您在没有图像 Alpha 的地方触摸它,UIButton 会忽略触摸。我可以更改它以响应触摸它的整个边界吗?
我认为仍然有效的一种简单方法是将背景颜色设置为仅大部分透明的颜色。一个非常小但仍大于 0.1 的 alpha 应该看起来透明但仍能响应触摸。
否则,是的,您可以覆盖-hitTest:withEvent:,即使触摸区域是透明的,它也会返回 YES。
【讨论】: