Horizontal per Mausrad scrollen OHNE Shift?

  • Horizontal per Mausrad scrollen OHNE Shift?

    Moin,

    ich habe hier einen CustomView in einem NSScrollView, der sich nur horizontal scrollen lässt.
    Um hier nun per Mausrad scrollen zu können, muss standardmässig zusätzlich die Shift-taste gedrückt werden.

    Ich hätte es gerne so, dass auch bei normaler Scrollradnutzung horizontal gescrollt wird. (Wie z.B. in der Coverflow-Ansicht im Finder)

    Hat jemand eine Idee, wie das zu erreichen wäre?
    Kann ich irgendwie die Mausevents nach meinem Gusto umbiegen, oder muss ich hier eigenes Scrollverhalten für die ScrollView implementieren?

    Danke,
    Lur
  • RE: Horizontal per Mausrad scrollen OHNE Shift?

    Ich kenne keine einfache Lösung.

    Alternativ könntest Du eine Subclass von NSScrollView erstellen und die Methode scrollWheel: überschreiben. Hier kannst Du dann ein neues Event erzeugen, deltaX und deltaY vertauschen und dann super scrollWheel: aufrufen.

    Wie gesagt kann die Lösung auch viel einfacher sein.
  • RE: Horizontal per Mausrad scrollen OHNE Shift?

    Original von MCDan
    Hier kannst Du dann ein neues Event erzeugen, deltaX und deltaY vertauschen


    Kann ich denn irgendwie ein neues ScrollWheel-Event erzeugen?
    Für Maus-Events gibt es ja "+mouseEventWithType:location:modifierFlags:timestamp:windowNumber:context:eventNumber:clickCount:pressure:", nur da kann ich nirgendwo Werte für deltaX, deltaY und deltaZ setzen.
    Scheint also nicht für ScrollWheel-Events geeignet zu sein?

    Oder übersehe ich da etwas?
  • RE: Horizontal per Mausrad scrollen OHNE Shift?

    Original von lurchi13
    Kann ich denn irgendwie ein neues ScrollWheel-Event erzeugen?

    Alle Events sind Instanzen der Klasse NSEvent. Es gibt auch den Convenient Allocator otherEventWithType:location:modifierFlags:timestamp:windowNumber:context:subtype:data1:data2:.

    Michael
  • RE: Horizontal per Mausrad scrollen OHNE Shift?

    Original von Michael
    Es gibt auch den Convenient Allocator otherEventWithType:location:modifierFlags:timestamp:windowNumber:context:subtype:data1:data2:


    Aber auch damit kann ich keinen eigenen ScrollWheel-Event erzeugen, und neue delta-Werte angeben, oder?

    Wenn doch, dann stehe ich grad komplett auf dem Schlauch ... könntest Du mir ein kl. Beispiel geben?

    Danke,
    Lur
  • RE: Horizontal per Mausrad scrollen OHNE Shift?

    Ups, sorry. Da war wohl der Wunsch Vater des Gedanken.

    Der Code ist sicherlich nicht komplett, aber versuche mal folgendes in der CustomNSScrollView Class:

    Quellcode

    1. - (void)scrollWheel:(NSEvent *)theEvent
    2. {
    3. float delta = [theEvent deltaY];
    4. if (([theEvent modifierFlags] & NSShiftKeyMask) == NSShiftKeyMask)
    5. delta = [theEvent deltaX];
    6. float scrollAmount = [self horizontalLineScroll];
    7. if (([theEvent modifierFlags] & NSAlternateKeyMask) == NSAlternateKeyMask)
    8. scrollAmount = [self horizontalPageScroll];
    9. NSRect frame = [[self documentView] frame];
    10. NSRect bounds = [[self contentView] bounds];
    11. NSPoint point = bounds.origin;
    12. point.x -= scrollAmount * delta;
    13. if (point.x < 0)
    14. point.x = 0;
    15. if (point.x > NSWidth(frame) - NSWidth(bounds))
    16. point.x = NSWidth(frame) - NSWidth(bounds);
    17. [[self contentView] scrollToPoint:point];
    18. [self reflectScrolledClipView:[self contentView]];
    19. }
    Alles anzeigen
  • RE: Horizontal per Mausrad scrollen OHNE Shift?

    Original von MCDan
    Der Code ist sicherlich nicht komplett, aber versuche mal folgendes in der CustomNSScrollView


    Moin!

    Ich scrolle meine View nach wie vor basierend auf diesem Code.
    Das funktionierte bislang auch super und ohne Auffälligkeiten.

    Aber vor wenigen Tagen habe ich mir endlich die Magic Mouse gegönnt, und damit gibt es nun ein kleines Problem:
    Mit der per Default aktivierten Option "Scrollen mit Nachlauf" (super!) ruckelt das Scrollen meiner View (und gerade besonders beim Nachlauf).

    Ich habe zuerst gedacht, das liegt eventuell am recht aufwändigen Inhalt der View. Aber wenn ich wieder das standardmässige Scrollen zulasse, dann bewegt sie sich wie erwartet "weich wie Butter". :)

    Hat jemand vielleicht eine Idee, was hier mit dem Nachlauf kollidieren könnte? Ich bin da etwas ratlos...

    Vielen Dank,
    Lur