iOS手势滑块拖拽实现
iOS 手势滑块的实现,真的是蛮常见但又不太好写对的需求。是在音乐播放器、音量调节这些地方,用手指拖来拖去的体验,比传统点击按钮直观多了。核心是用UIPanGestureRecognizer,就是那个拖动手势。你只要把它加在你的UISlider上,拖拽的行为就能监听到了,响应也快,代码也简单。
创建手势的方式直接:
let panGesture = UIPanGestureRecognizer(target: self, action: #selector(handlePanGesture(_:)))
slider.addGestureRecognizer(panGesture)
你只需要定义一个handlePanGesture(_:)
方法,在里面拿到手势的位置,转成滑块的值,再更新一下就好:
@objc func handlePanGesture(_ gestureRecognizer: UIPanGestureRecognizer) {
guard let slider = gestureRecognizer.view as? UISlider else { return }
let translation = gestureRecognizer.translation(in: slider)
var newValue = slider.value + Float(translation.x / slider.frame.width)
if newValue < slider xss=removed> slider.maximumValue { newValue = slider.maximumValue }
slider.setValue(newValue, animated: true)
gestureRecognizer.setTranslation(.zero, in: slider)
}
不过如果你不滑块弹回去,而是停在你放手那一刻的位置,可以改一下动画方式:
UIView.animate(withDuration: 0.3) {
slider.setValue(newValue, animated: false)
}
这里还可以根据gestureRecognizer.state
来判断是开始拖动、结束拖动,还是取消,交互逻辑就能更灵活些。想进阶的话,可以看看“DragTrain”文件,里面有完整代码,思路也清晰。
如果你对手势识别还不熟,可以看看这篇挺不错的:iOS 手势识别:UIGestureRecognizer 子类详解,入门快。
调试这类交互最好上真机,模拟器拖动手感还是差点意思。
163.87KB
文件大小:
评论区