gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 00:50:59 26 4
gpt4 key购买 nike

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

override func viewDidLoad() {
super.viewDidLoad()
sliderBuggy.setThumbImage(UIImage(named: "actionRobotDelay.png"), for: UIControlState())
}
  • 正确行为:在 Beta 6 之前,一旦我设置了新的缩略图,跟踪区域就会自动调整,用户可以从图像内的任意点滑动它(注意:我我在真正的 iPad mini 上测试,而不是模拟器,而且我根本没有尝试使用 iPhone)。

  • 现在发生了什么: 更改图像后,它看起来很好,但是允许用户滑动它的跟踪区域仍然是原始 slider 内置的小区域图片。从用户的角度来看,这绝对令人讨厌。

到目前为止我尝试了什么:

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

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

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

最佳答案

子类和 munge HitTest 来做 slider 应该做的事情(谁知道它为什么不做?):

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
}

关于swift - XCode 8 Beta 6 中引入的 UISlider 错误的解决方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39128247/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com