2016-07-15 6 views
0

Gibt es eine Möglichkeit KVO (Beobachtung Schlüsselwert) zu verwenden scrollViewWillBeginDragging und scrollViewDidEndDecelerating in swift zu erkennen?KVO für Scroll-Start- und Ende in UIScrollView

Edit: Ich habe versucht,

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

Aber es ist nie genannt. Wenn ich zum Beispiel "contentOffset" auf die gleiche Weise beobachte, heißt es. Ist es KVC-konform?

+0

Sie könnten versuchen, die 'schleppende' Eigenschaft zu beobachten – dan

+0

Gut suggesti weiter, aber mein Beobachter wird nie aufgerufen (siehe Bearbeiten in meiner Originalfrage)? @dan – Nirri

Antwort

0

Sie können Beobachter mit NSNotification center hinzufügen.

Im viewDidLoad Ihrer VC,

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) 

} 

Sie können

func informBeginDragging() { 
    //do something 
} 

func informEndDragging() { 
    //do something 
} 

Und diese beiden Methoden in den folgenden zwei Methoden alles tun wird, wenn Scroll-Ansicht

Ziehen beginnen ausgelöst werden oder Ende ziehen
func scrollViewDidEndDragging(scrollView: UIScrollView, willDecelerate decelerate: Bool) { 
    NSNotificationCenter.defaultCenter().postNotificationName("end", object: nil) 
} 

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

Ich habe eine andere Klasse, die Delegat der gleichen scrollView außerhalb meines Moduls sein muss, damit ich diese Delegate-Methoden nicht verwenden kann. Danke aber – Nirri

+0

Es spielt keine Rolle, wenn Sie sie in anderen Klassen verwenden, wird es nur die Benachrichtigung mit Ihrem gewünschten Namen veröffentlichen. Ich kann nicht sehen, warum das nicht funktioniert. Oder ich bekomme Ihre Frage möglicherweise nicht –

+0

Der Delegat für meine scrollView ist in einem anderen Modul. Ich kann dort keinen Code eingeben. – Nirri