如何让自定义 UIButton 仅响应不透明部分的点击?

Posted

技术标签:

【中文标题】如何让自定义 UIButton 仅响应不透明部分的点击?【英文标题】:How to have a custom UIButton respond to taps only on nontransparent parts? 【发布时间】:2011-01-31 15:34:41 【问题描述】:

我有一个 UIButton,它的类型是自定义的,用 png 文件表示,其中一部分是透明的。

当然,当且仅当点击非透明(=可见)部分时,我希望我的按钮激活 touchUpInside 事件。但是当我触摸透明部分时我也会得到事件,这是不可接受的。

我怎样才能让我的按钮只知道它的可见部分?

【问题讨论】:

【参考方案1】:

将您的图像分成两部分。一个是按钮(可点击部分),一个是背景。仅为可点击区域设置按钮图像。将 UIButton 放在带有背景的 UIImageView 的顶部。您可以从 UIButton 继承来创建自己的控件,即上面的 UIButtonWithBackground 控件,然后在按钮更改状态时覆盖状态函数以更改背景状态。

【讨论】:

抱歉,可点击区域不是矩形。假设它是一个圆圈。我只想点击圆圈来触发事件,而不是在框架内而是在圆圈外。 这有点困难。我认为 UIButton 不会为您执行此操作。但是,您可以将显示的图像加载到 UIImage 中,当用户完成触摸时,您可以访问相应像素的 UIImage 的 alpha 值以确定它是否可见。你可以从 UIImageView 固有并观察触摸事件来解决这个问题。 “访问相应像素的 UIImage 的 alpha 值以确定它是否可见”,您是如何做到的?你能给我介绍一些样品吗? 这会告诉你怎么做。 ***.com/questions/448125/…

以上是关于如何让自定义 UIButton 仅响应不透明部分的点击?的主要内容,如果未能解决你的问题,请参考以下文章

让自定义视图仅向下移动

uiscrollview 和 uibutton 对触摸事件透明

UIButton 自定义图像 alpha

哪些限制适用于不透明响应?

具有背景颜色和透明前景图像的 UIButton 自定义类型不起作用

【iOS】UIButton超出父视图点击无效(swift)