我创建了一个自定义按钮,因为我希望能够将它组合成多个不同的图像。它实际上继承了 UIControl 而不是 UIButton。这导致了在点击图像时突出显示图像的问题。
因此,我遵循了这个问题中的建议,在 UIImage 上创建了一个类别来模拟标准 UIButton 的突出显示:How to implement highlighting on UIImage like UIButton does when tapped?
我正在根据 UIControlEventTouchDown、UIControlEventTouchUpInside 和 UIControlEventTouchUpOutside 事件触发图像着色。
这主要是有效的,除了时间有点不对。使用标准的 UIButton,无论用户点击多长时间或多短,突出显示总是会发生,但在我的实现中,如果用户点击非常快(大多数时候),突出显示不会发生。
我假设这可能是因为在用户向下和向上点击之间屏幕没有重新绘制,但我不完全确定。
我试过的:
换出图像后立即调用
setNeedsDisplay
- 无济于事覆盖
touchesBegan
并将touchesEnded
图像交换代码放在那里 - 无济于事在调用中异步执行图像交换代码
dispatch_async
- 无济于事
在这一点上,我唯一能想到的另一件事是设置一个计时器,如果它检测到用户没有按下超过特定时间段,则在稍微延迟后手动触发图像更改。
这感觉不对,我想知道是否有更好的方法来实现这一点。还有其他一些我应该超越的事件吗?