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时滑动的问题。

    推荐阅读