Scrolling in NSScrollView stoppt beim Überschreiben der ScrollWheel-Funktion

Ich erlebe einen seltsamen Fehler, wenn ich die Funktion scrollWheel (theEvent: NSEvent) in einer NSScrollView überschreibe.

Hier ist mein Code:

import Cocoa

class GraphScrollView: NSScrollView {
    var axisScrollViewInstance: AxisScrollView?

    override func scrollWheel(theEvent: NSEvent) {
        if theEvent.deltaY != 0 {
            axisScrollViewInstance?.scrollEventFromOtherScrollView(theEvent)
            super.scrollWheel(theEvent)
        } else if theEvent.deltaX != 0 {
            super.scrollWheel(theEvent)
        }
    }
}

class AxisScrollView: NSScrollView {
    var graphScrollViewInstance: GraphScrollView?
    override func scrollWheel(theEvent: NSEvent) {
        if theEvent.deltaY != 0 {
            super.scrollWheel(theEvent)
            graphScrollViewInstance?.scrollWheel(theEvent)
        }
    }

    func scrollEventFromOtherScrollView(theEvent: NSEvent) {
        if theEvent.deltaY != 0 {
            super.scrollWheel(theEvent)
        }
    }   
}

Der Code überprüft im Grunde genommen, in welche Richtung der Benutzer blättert, und leitet das NSEvent an einen anderen NSScrollView weiter, wenn die Richtung vertikal ist. Ich brauche das, damit ich zwei NSScrollViews nebeneinander haben kann, die sowohl vertikal als auch horizontal scrollen. Als Beispiel können Sie sich die Mac-Kalender-App ansehen, die links eine Stundenspalte mit nur vertikalem Bildlauf und rechts eine Wochenübersicht mit horizontalem und vertikalem Bildlauf enthält.

Wenn ich jedoch die scrollWheel-Methode überschreibe und die Super-Funktion von innen aufrufe, führt dies zu einem seltsamen Problem mit der Mighty Mouse. Ich kann nur nach oben und rechts scrollen, wohingegen es nichts bewirkt, wenn ich in eine andere Richtung scrolle, obwohl immer ein NSEvent auftritt, unabhängig davon, in welche Richtung ich scrolle. Nach einer Weile hört es auf zu scrollen.

Ich habe bereits versucht, die scrollWheel-Methode einfach zu überschreiben und die Super-Funktion nur mit dem Ereignis wie folgt aufzurufen:

override func scrollWheel(theEvent: NSEvent) {
    super.scrollWheel(theEvent)
}

aber es führt zu den gleichen problemen. Ich habe eine zweite (nicht von Apple stammende) Maus an mein System angeschlossen, die über ein "normales" Mausrad verfügt und mit der mein Code einwandfrei funktioniert.

Hast du eine Idee woran das liegen könnte? Ich habe gehört, dass die NSEvents unterschiedliche Untertypen haben (1: Apple-Gerät, 0: Beliebiges anderes Gerät). Vielleicht hat das etwas damit zu tun? Weißt du sonst, wie ich zwei NSScrollViews nebeneinander haben kann, die gleichzeitig vertikal scrollen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage