UIScrollView上的UISlider
【UIScrollView上的UISlider】UIScrollView横向排了5个UITableView,UITableView的Cell中有UISlider。在左右滑动slider的时候,如果快速滑动slider不会动,scrollview会左右滑动。
解决这个问题方法:
继承UIScrollView:
class SliderTouchScrollView: UIScrollView {init() {
super.init(frame: CGRect(x: 0, y: 0, width: 0, height: 0))
NotificationCenter.default.addObserver(self, selector: #selector(sliderTouchUp), name: NSNotification.Name(rawValue: "sliderTouchUp"), object: nil)
delaysContentTouches = false
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
deinit {
NotificationCenter.default.removeObserver(self)
}
override func touchesShouldBegin(_ touches: Set, with event: UIEvent?, in view: UIView) -> Bool {
if view.isKind(of: UISlider.self) {
isScrollEnabled = false
}
return true
}
func sliderTouchUp() {
isScrollEnabled = true
}
}
重写了touchesShouldBegin,滑动UIScrollView上的任何元素这个函数会立刻向UIScrollView报告,所以在这个时候判断如果是UISlider就把Scroll禁止掉。 init中注册了一个通知,用来监听在slider放开的时候让Scroll可以重新滚动,这个消息由slider的两个点击释放函数发送:
@IBAction func SliderTouchUpInside(_ sender: Any) {
sliding = false
startTimer()
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "sliderTouchUp"), object: nil)
}@IBAction func SliderTouchUpOutside(_ sender: Any) {
sliding = false
startTimer()
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "sliderTouchUp"), object: nil)
}
这样把UIScroll改成SliderTouchScrollView,然后在slider的上面两个事件中添加发送通知就可以有效的排除UIScrollView在拖动UISlider时滑动的问题。
推荐阅读
- 带有Hilt的Android上的依赖注入
- 【#2-戴栋】区块链可以提升哪些商业上的效率改进
- 怎么将桌面上的CAD图纸添加到软件中进行BMP格式转换()
- 我用鸡屎治好脚上的脚刺
- 行摄记|行摄记 03 |路上的风景 # 石桌公园
- 大街上的元旦节
- 那个喝大了的女人在群里发了一晚上的红包
- 《三十而已》许幻山和《逆流而上的你》杨光——都是女强男弱,为何走向全然不同
- 历史上的今天|【历史上的今天】2 月 16 日(世界上第一个 BBS 诞生;中国计算机教育开端;IBM 机器人赢得智能竞赛)
- 《月线上的一笔(一段熊牛的历程,如何看大盘系列》目录)