如何在 iOS 中添加双拇指滑块?以及为什么这个双滑块库不再适用于 xcode 7

how to add a double thumbed slider in iOS? and why this double slider library no longer works in xcode 7

我有一个有双滑块的应用程序,该项目在 swift 1.2 / XCode 6 中运行良好,我使用的插件是 UIXRangeSlider

但问题是在 Swift 2 / XCode 7.2

中使用时显示奇怪的错误

我尝试修复这些错误,但它们让我感到困惑,我尝试添加 override 并删除它,但没有机会,如何修复这些错误?或者你知道有什么好的选择吗?

编辑

修正了一些错误,我只是需要帮助

您链接到的代码存在几个问题:

  1. NSCodinginit(coder: NSCoder)是一个可失败的初始化器,所以这也需要是一个可失败的初始化器:

    required init?(coder: NSCoder)
    {
        super.init(coder: coder)
        self.commonInit()
    }
    
  2. 方法 setInactiveBarImagesetActiveBarImagesetRightThumbImagesetMiddleThumbImagesetLeftThumbImage 与 属性 冲突class 中同名变量的设置器(例如 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()
        }
    }
    
  3. 触摸跟踪方法写错了。 superclass 接口接受 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
    }
    

希望这能解决问题![​​=25=]