Pergunta

Quando se desloca com o mais recente Apple Magic Mouse (pelo menos 10,6, eu não posso confirmar qualquer Mac OS anterior) você começa rolagem inercial como rolagem no iPhone (ou seja, após um movimento do dedo para rolar, ele não parar abruptamente, mas sim gradualmente desacelera). Este comportamento é "de graça" com toda NSScrollViews, ao que parece.

Há casos excepcionais, como Tweetie para Mac (eu ouvi Tweetie foi escrito com um costume Table View classe que funciona semelhante a como UITableView funciona no iPhone).

A minha pergunta é, como é que os pontos de vista de rolagem sabe como fazer isso rolagem inercial? Meu palpite é que o mouse [motorista] repetidamente envia eventos de rolagem com uma magnitude de amortecimento de deslocamento (ou algo parecido) ao longo do período de rolagem. Mas eu realmente não estou certo como ele funciona.

Eu estou tendo alguns problemas de rolagem da minha turma scrollview e eu estou tentando descobrir por que (obviamente não temos o código fonte para Tweetie para ver por que ele não recebe a rolagem adequada), mas apenas tentando para entender melhor como ele funciona, a fim de corrigir os meus próprios problemas.

Foi útil?

Solução

NSScrollView não sabe nada sobre o Magic Mouse. A rolagem inercial é realizada por eventos de rolagem repetidas.

Você pode substituir o método -scrollWheel: de NSResponder e usar NSLog para ver como Magic Mouse rolagem difere de trackpad e rolagem tradicional.

Traditional rolagem conjuntos deltaX e deltaY para indicar o número de "linhas" para rolar.

rolagem suave dispositivos (Trackpads eo Magic Mouse) uso deviceDeltaX e deviceDeltaY para indicar o número de pixels para rolagem.

Além disso, Magic Mouse utiliza scrollPhase para indicar quando uma rolagem inercial está em curso.

Note que deviceDeltaX e deviceDeltaY são métodos privados de NSEvent.

Outras dicas

a optar por sair do momento, adicione @ "NÃO" para a chave @ "AppleMomentumScrollSupported" no início de seu aplicativo para os padrões do usuário (veja Magic Mouse Desenvolvedores Release Notes). Então você também pode substituí-lo por Tweetie, adicionando esta entrada para os seus padrões de tweetue.

 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
 NSDictionary *appDefaults = [NSDictionary dictionaryWithObject:@"NO" forKey:@"AppleMomentumScrollSupported"];
 [defaults registerDefaults:appDefaults];

O código fonte para TUIScrollView está disponível aqui https://github.com/twitter/twui

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top