2009-12-04 4 views
3

새로운 Apple Magic Mouse로 스크롤하면 (적어도 10.6 이상에서는 이전 Mac OS를 확인할 수 없음) iPhone에서 스크롤하는 것과 같은 관성 스크롤이 발생합니다 (즉, 손가락으로 쓸어 넘기면 스크롤 할 수 없습니다. 갑작스럽게 멈추지 만 점차적으로 속도가 느려짐). 이 동작은 모든 NSScrollViews에 대해 "무료"로 표시됩니다.NSScrollView에서 Magic Mouse로 운동량/관성 스크롤은 어떻게 작동합니까?

Tweetie for Mac (Tweetie는 iPhone에서 UITableView이 작동하는 방식과 유사한 사용자 정의 테이블보기 클래스로 작성된 것으로 들었습니다.)과 같은 예외적 인 경우가 있습니다.

제 질문은 스크롤 뷰가 관성 스크롤을 수행하는 방법을 알고 있습니까? 내 생각 엔 마우스 [드라이버]가 스크롤 기간 동안 댐핑 스크롤 크기 (또는 이와 비슷한 값)와 함께 스크롤 이벤트를 반복적으로 보냅니다. 하지만 어떻게 작동하는지 잘 모르겠습니다.

내 scrollview 클래스에서 일부 스크롤링 문제가 있는데 이유는 무엇입니까 (분명히 왜 Tweetie가 적절한 스크롤을 얻지 못하는지 알기 위해 소스 코드가 없습니다). 내 자신의 문제를 해결하기 위해 그것이 어떻게 작동하는지 더 잘 이해하려고 노력합니다.

답변

7

NSScrollView는 Magic Mouse에 대해 아무것도 모릅니다. 관성 스크롤은 반복 된 스크롤 이벤트에 의해 수행됩니다.

NSResponder의 -scrollWheel: 메서드를 무시하고 NSLog를 사용하여 Magic Mouse 스크롤이 트랙 패드 및 기존 스크롤과 다른 점을 확인할 수 있습니다.

스크롤 할 줄 수를 나타내는 deltaXdeltaY을 전통적인 스크롤링 집합으로 설정합니다.

부드러운 스크롤 장치 (트랙 패드 및 Magic Mouse)는 deviceDeltaXdeviceDeltaY을 사용하여 스크롤 할 픽셀 수를 나타냅니다.

또한 Magic Mouse는 관성 스크롤이 진행 중일 때를 나타내려면 scrollPhase을 사용합니다.

deviceDeltaXdeviceDeltaY은 NSEvent의 개인적인 방법입니다.

1

운동량을 선택 해제하려면 응용 프로그램의 맨 처음에 Key @ "AppleMomentumScrollSupported"에 @ "NO"를 사용자 기본값에 추가하십시오 (Magic Mouse Developer Release Notes 참조). 따라서 tweetue의 기본값에이 항목을 추가하여 Tweetie에 대해 재정의 할 수도 있습니다.

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