【发布时间】:2016-08-24 16:09:51
【问题描述】:
我正在将一些代码迁移到 XCode 8 Beta 6,在 XCode 8 Beta 1 之前运行良好(它之前是从 7.3 迁移的)。一切正常,除了在使用比原始滑块的内置拇指更大的自定义拇指图像时滑块出现新的奇怪行为:
override func viewDidLoad() {
super.viewDidLoad()
sliderBuggy.setThumbImage(UIImage(named: "actionRobotDelay.png"), for: UIControlState())
}
正确行为:在 Beta 6 之前,一旦我设置了新的拇指图像,跟踪区域就会自动调整,用户可以从图像内的任何点滑动它(注意:我我在真正的 iPad mini 上进行测试,而不是模拟器,而且我根本没有尝试使用 iPhone)。
现在发生了什么: 更改图像后,它看起来很好,但是允许用户滑动它的跟踪区域仍然是原始滑块内置的小区域图片。从用户的角度来看,这绝对令人讨厌。
到目前为止我所尝试的:
继承和覆盖 thumbRect(forBounds bounds: CGRect, trackRect rect: CGRect, value: Float) -> CGRect。遗憾的是,经过调试,我发现该方法返回了正确的新CGRect,因此更改它没有效果。
覆盖 touchesBegan 以评估滑块看到触摸事件的位置,因此作为一种可能的解决方法,我可以手动启动跟踪。但是touchesBegan清楚地表明,触摸事件仅在属于原始图像的小区域上接收到。
在我从头开始编写自己的滑块类之前,任何关于不同可能解决方法的想法都将受到欢迎。
【问题讨论】:
-
您是否向 Apple 提交了错误报告?
-
顺便说一句
for: UIControlState()是错误的。你应该说for: .normal。 -
是的,我做到了:错误 #27888877。但正好是一周前,所以我在这里寻求一个好主意:)。另外,就在同一天,我在开发者论坛上发布了类似的内容。
-
太好了,感谢您提供错误编号。如果我提交同样的东西,我将能够继续...... :)
-
所以,在我看来,一个明显的解决方法是继承 UISlider 并实现您自己的命中测试。你说“但 touchesBegan 清楚地表明触摸事件只在属于原始图像的小区域上收到”;这正是自定义命中测试可以解决的问题。
标签: swift uislider swift3 xcode8-beta6