如何在 iOS 中添加双拇指滑块?以及为啥这个双滑块库不再适用于 xcode 7
Posted
技术标签:
【中文标题】如何在 iOS 中添加双拇指滑块?以及为啥这个双滑块库不再适用于 xcode 7【英文标题】:how to add a double thumbed slider in iOS? and why this double slider library no longer works in xcode 7如何在 iOS 中添加双拇指滑块?以及为什么这个双滑块库不再适用于 xcode 7 【发布时间】:2016-03-27 10:38:15 【问题描述】:我有一个带有双滑块的应用程序,该项目在 swift 1.2 / XCode 6 中运行良好,我使用的插件是UIXRangeSlider
但问题是它在 Swift 2 / XCode 7.2 中使用时显示奇怪的错误
我尝试修复错误,但它们让我感到困惑,我尝试添加 override
并删除它,但没有机会,如何修复这些错误?或者你知道有什么好的选择吗?
编辑
修正了一些错误,我只是需要帮助
【问题讨论】:
【参考方案1】:您链接到的代码存在几个问题:
NSCoding
的init(coder: NSCoder)
是一个可失败的初始化器,所以这也需要是一个可失败的初始化器:
required init?(coder: NSCoder)
super.init(coder: coder)
self.commonInit()
setInactiveBarImage
、setActiveBarImage
、setRightThumbImage
、setMiddleThumbImage
和 setLeftThumbImage
方法与类中同名变量的属性设置器冲突(例如 middleThumbImage
)。编译器生成签名匹配setVariable:
的方法,用于Objective-C。解决此问题的最佳方法是将方法体移动到每个变量的 didSet
处理程序中,例如:
var activeBarImage:UIImage = UIImage()
didSet
self.activeBarView.removeFromSuperview()
self.activeBarView = UIImageView(image: self.activeBarImage)
self.activeBarView.userInteractionEnabled = false
self.addSubview(self.activeBarView)
self.orderSubviews()
self.setNeedsLayout()
触摸跟踪方法写错了。超类接口接受UITouch?
和UIEvent?
- 请注意,这两个参数都是可选的。要修复错误,请更改参数并处理选项:
override func beginTrackingWithTouch(touch: UITouch?, withEvent event: UIEvent?) -> Bool
guard let location = touch?.locationInView(self) else return false
previousLocation = location
// Hit test the thumb layers
if leftThumbView.frame.contains(previousLocation)
trackedElement = .LeftThumb
else if rightThumbView.frame.contains(previousLocation)
trackedElement = .RightThumb
else if middleThumbView.frame.contains(previousLocation)
trackedElement = .MiddleThumb
return trackedElement != .None
override func continueTrackingWithTouch(touch: UITouch?, withEvent event: UIEvent?) -> Bool
guard let location = touch?.locationInView(self) else return false
// 1. Determine by how much the user has dragged
let deltaLocation = Double(location.x - previousLocation.x)
let deltaValue = (Double(maximumValue) - Double(minimumValue)) * deltaLocation / Double(bounds.width /*- thumbWidth*/)
switch trackedElement
case .LeftThumb:
handleLeftThumbMove(location, delta: deltaValue)
case .MiddleThumb:
handleMiddleThumbMove(location, delta: deltaValue)
case .RightThumb:
handleRightThumbMove(location, delta: deltaValue)
default:
break
previousLocation = location
return true
override func endTrackingWithTouch(touch: UITouch?, withEvent event: UIEvent?)
trackedElement = .None
希望这能解决问题!
【讨论】:
谢谢你的解释,我刚刚解决了几分钟的代码,我刚刚看到你的答案,谢谢它真的很有价值,现在是时候向 UIXSlider 开发人员请求拉取请求了他们更新了自定义控制器,或者我只是 fork 它以便人们使用它,非常感谢 Ryan Davies。 没问题!我相信作者会很感激一个拉取请求。 :-)以上是关于如何在 iOS 中添加双拇指滑块?以及为啥这个双滑块库不再适用于 xcode 7的主要内容,如果未能解决你的问题,请参考以下文章