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.

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top