2016-07-15 61 views
0

滚动的开始和结束是否有使用KVO(观察键值),检测迅速scrollViewWillBeginDraggingscrollViewDidEndDecelerating的方法吗?志愿在UIScrollView中

编辑:我试过

scrollView.addObserver(self, forKeyPath: "dragging", options: NSKeyValueObservingOptions.New, context: nil) 

但它永远不会被调用。如果我以同样的方式观察例如“contentOffset”,它就会被调用。是否符合KVC?

+0

你可以尝试观察'dragging'属性 – dan

+0

Good suggesti上,但我的观察员从未被称呼(请参阅我的原始问题中的编辑)? @dan – Nirri

回答

0

您可以使用NSNotification中心添加观察者。

在你的VC的viewDidLoad中,

override func viewDidLoad() { 
    super.viewDidLoad() 

    NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.informBeginDragging), name: "begin", object: nil) 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.informEndDragging), name: "end", object: nil) 

} 

你可以在以下两种方法

func informBeginDragging() { 
    //do something 
} 

func informEndDragging() { 
    //do something 
} 

这两种方法任何事情都会被触发时,滚动视图开始拖动或结束拖动

func scrollViewDidEndDragging(scrollView: UIScrollView, willDecelerate decelerate: Bool) { 
    NSNotificationCenter.defaultCenter().postNotificationName("end", object: nil) 
} 

func scrollViewWillBeginDragging(scrollView: UIScrollView) { 
    NSNotificationCenter.defaultCenter().postNotificationName("begin", object: nil) 
} 
+0

我有另一个类需要是我的模块外部相同的scrollView的委托,所以我不能使用这些委托方法。谢谢 – Nirri

+0

如果您在其他课程中使用它们无关紧要,它只会将通知与您想要的名称一起发布。我看不出为什么这不起作用。或者我可能不会得到您的问题 –

+0

我的scrollView的委托在另一个模块。我不能在那里放任何代码。 – Nirri