2009-12-04 6 views
3

Когда вы прокручиваете новую Apple Magic Mouse (по крайней мере, на 10.6, я не могу подтвердить предыдущую Mac OS), вы получаете инерционную прокрутку, например, прокрутку на iPhone (т. Е. После прокрутки пальца для прокрутки). резко прекратить, но постепенно замедляется). Это поведение «бесплатно» со всеми NSScrollViews, похоже.Как работает импульс/инерциальная прокрутка с помощью Magic Mouse на NSScrollView?

Есть исключительные случаи, такие как Tweetie для Mac (я слышал, что Tweetie был написан с помощью специального класса Table View, который схож с тем, как работает UITableView на iPhone).

Мой вопрос в том, как вид прокрутки знает, как сделать эту инерционную прокрутку? Я предполагаю, что мышь [драйвер] неоднократно отправляет события прокрутки с уменьшающейся силой прокрутки (или что-то в этом роде) в течение периода прокрутки. Но я не уверен, как это работает.

У меня проблемы с прокруткой в ​​моем классе scrollview, и я пытаюсь понять, почему (очевидно, у нас нет исходного кода для Tweetie, чтобы понять, почему он не получает правильную прокрутку), но просто пытаясь лучше понять, как это работает, чтобы исправить мои собственные проблемы.

ответ

7

NSScrollView ничего не знает о Magic Mouse. Инерционная прокрутка выполняется повторными событиями прокрутки.

Вы можете переопределить метод NSResponder -scrollWheel: и использовать NSLog, чтобы увидеть, как прокрутка Magic Mouse отличается от трекпада и традиционной прокрутки.

Традиционные прокрутки deltaX и deltaY, чтобы указать количество прокрутки линий.

Плавные устройства прокрутки (трекпады и волшебная мышь) используют deviceDeltaX и deviceDeltaY, чтобы указать количество прокручиваемых пикселей.

Кроме того, Magic Mouse использует scrollPhase, чтобы указать, когда идет инерционный свиток.

Отметьте, что deviceDeltaX и deviceDeltaY являются частными методами NSEvent.

1

, чтобы отказаться от импульса, добавьте @ «НЕТ» для ключа @ «AppleMomentumScrollSupported» в самом начале вашего приложения к пользовательским значениям по умолчанию (см. Заметки о выпуске Magic Mouse Developer Release Notes). Таким образом, вы можете также переопределить его для Tweetie, добавив эту запись в свои настройки по умолчанию для твита.

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