How to enable “tap and slide” in a UISlider?

后端 未结 14 552
不知归路
不知归路 2020-12-03 20:54

What I want to get is a UISlider which lets the user not only slide when he starts on its thumbRect, but also when he taps elsewhere. When the user

14条回答
  •  温柔的废话
    2020-12-03 21:29

    Here's my modification to the above:

    class TapUISlider: UISlider {
    
      func tapAndSlide(gesture: UILongPressGestureRecognizer) {
        let pt = gesture.locationInView(self)
        let thumbWidth = self.thumbRect().size.width
        var value: Float = 0
    
        if (pt.x <= self.thumbRect().size.width / 2) {
          value = self.minimumValue
        } else if (pt.x >= self.bounds.size.width - thumbWidth / 2) {
          value = self.maximumValue
        } else {
          let percentage = Float((pt.x - thumbWidth / 2) / (self.bounds.size.width - thumbWidth))
          let delta = percentage * (self.maximumValue - self.minimumValue)
          value = self.minimumValue + delta
        }
    
        if (gesture.state == UIGestureRecognizerState.Began) {
          UIView.animateWithDuration(0.35, delay: 0, options: UIViewAnimationOptions.CurveEaseInOut,
            animations: {
              self.setValue(value, animated: true)
              super.sendActionsForControlEvents(UIControlEvents.ValueChanged)
            }, completion: nil)
        } else {
          self.setValue(value, animated: false)
          super.sendActionsForControlEvents(UIControlEvents.ValueChanged)
        }
      }
    
      func thumbRect() -> CGRect {
        return self.thumbRectForBounds(self.bounds, trackRect: self.bounds, value: self.value)
      }
    }
    

提交回复
热议问题