Come funziona il momentum/inerziale di scorrimento di lavoro con il Magic Mouse sul NSScrollView?
-
13-09-2019 - |
Domanda
Quando si scorre con il nuovo Magic Mouse di Apple (almeno sulla 10.6, non posso che confermare le precedenti Mac OS) si ottiene scorrimento inerziale come lo scorrimento su iPhone (che è, dopo un colpo di dito per scorrere, non interrompere bruscamente, ma invece rallenta gradualmente).Questo comportamento è "gratis" con tutti NSScrollViews, sembrerebbe.
Ci sono casi eccezionali, come Tweetie per Mac (ho sentito Tweetie è stato scritto con una Tabella personalizzata Vista di classe che funziona simile a come UITableView
funziona su iPhone).
La mia domanda è, come faccio a scorrimento viste sapere come fare questo, lo scorrimento inerziale?La mia ipotesi è che il mouse [driver] ripetutamente invia gli eventi di scorrimento con una bagnatura ordine di grandezza di scorrimento (o qualcosa di simile) oltre il periodo di scorrimento.Ma io non sono davvero sicuro di come funziona.
Sto avendo alcuni problemi di scorrimento nella mia scrollview classe e sto cercando di capire perché (ovviamente non abbiamo il codice sorgente di Tweetie per vedere perché non ottenere il corretto scorrimento), ma solo cercando di capire meglio come funziona, in modo da risolvere i miei problemi.
Soluzione
NSScrollView non sa nulla circa il Magic Mouse.Il lo scorrimento inerziale è eseguita da ripetuti eventi di scorrimento.
È possibile eseguire l'override del NSResponder -scrollWheel:
metodo e l'uso NSLog per vedere come il Magic Mouse a scorrimento differisce dal trackpad e tradizionale a scorrimento.
Tradizionale a scorrimento imposta deltaX
e deltaY
per indicare il numero di "righe" per scorrere.
Liscia dispositivi di scorrimento (Trackpad e Magic Mouse) utilizzare deviceDeltaX
e deviceDeltaY
per indicare il numero di pixel per scorrere.
Inoltre, Magic Mouse utilizza scrollPhase
per indicare quando un inerziale di scorrimento è in corso.
Nota che deviceDeltaX
e deviceDeltaY
sono metodi privati di NSEvent.
Altri suggerimenti
di opt-out lo slancio, aggiungere @ "NO" per la chiave @ "AppleMomentumScrollSupported" proprio all'inizio della vostra applicazione ai valori predefiniti dall'utente (vedi Magic Mouse Developer Note di rilascio). Così si potrebbe anche ignorare per Tweetie con l'aggiunta di questa voce per le impostazioni predefinite di tweetue.
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSDictionary *appDefaults = [NSDictionary dictionaryWithObject:@"NO" forKey:@"AppleMomentumScrollSupported"];
[defaults registerDefaults:appDefaults];
Il codice sorgente di TUIScrollView è disponibile qui https://github.com/twitter/twui