XCode 8 Beta 6 中引入的 UISlider 错误的解决方法?

Workaround for UISlider bug introduced in XCode 8 Beta 6?

我正在将一些代码迁移到 XCode 8 Beta 6,它在 XCode 8 Beta 1 之前一直运行良好(之前是从 7.3 迁移过来的)。一切正常,除了使用比原始滑块的内置图像更大的自定义缩略图图像时滑块出现新的奇怪行为:

override func viewDidLoad() {
    super.viewDidLoad()
    sliderBuggy.setThumbImage(UIImage(named: "actionRobotDelay.png"), for: UIControlState())
}

到目前为止我尝试过的:

  1. Subclassing 和覆盖 thumbRect(forBounds bounds: CGRect, trackRect rect: CGRect, value: Float) -> CGRect。可悲的是,经过调试,我发现该方法返回了正确的新CGRect,因此更改它没有效果。

  2. 覆盖 touchesBegan 以评估滑块在哪里看到触摸事件,因此作为一种可能的解决方法,我可以手动启动跟踪。但是touchesBegan却清楚地显示触摸事件只在属于原始图像的小区域接收到。

在我从头开始编写自己的滑块 class 之前,欢迎提出任何关于不同可能解决方法的想法。

子类和 munge 命中测试来做滑块应该做的事情(谁知道它为什么不做?):

override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
    let tr = self.trackRect(forBounds: self.bounds)
    if tr.contains(point) { return self }
    let r = self.thumbRect(forBounds: self.bounds, trackRect: tr, value: self.value)
    if r.contains(point) { return self }
    return nil
}