У меня также была проблема с вложенными прокрутками. Внутренний вид прокрутки должен прокручиваться по горизонтали, а внешний - вертикально.
При обработке событий прокрутки от магической мыши/трекпада важно выбрать только один из видов прокрутки для каждого жестов, иначе вы увидите странное подергивание, когда ваши пальцы не будут двигаться совершенно прямо. Вы также должны убедиться, что нажатие на трекпад двумя пальцами показывает оба скроллера.
При обработке устаревших событий прокрутки от могучей мыши или мышей со старомодными колесами прокрутки вы должны выбрать правый прокрутки для каждого события, потому что в событиях нет информации о фазе жестов.
Это мой подкласс для внутренней точки зрения прокрутки, испытываются только в Mountain Lion:
@interface PGEHorizontalScrollView : NSScrollView {
BOOL currentScrollIsHorizontal;
}
@end
@implementation PGEHorizontalScrollView
-(void)scrollWheel:(NSEvent *)theEvent {
/* Ensure that both scrollbars are flashed when the user taps trackpad with two fingers */
if (theEvent.phase==NSEventPhaseMayBegin) {
[super scrollWheel:theEvent];
[[self nextResponder] scrollWheel:theEvent];
return;
}
/* Check the scroll direction only at the beginning of a gesture for modern scrolling devices */
/* Check every event for legacy scrolling devices */
if (theEvent.phase == NSEventPhaseBegan || (theEvent.phase==NSEventPhaseNone && theEvent.momentumPhase==NSEventPhaseNone)) {
currentScrollIsHorizontal = fabs(theEvent.scrollingDeltaX) > fabs(theEvent.scrollingDeltaY);
}
if (currentScrollIsHorizontal) {
[super scrollWheel:theEvent];
} else {
[[self nextResponder] scrollWheel:theEvent];
}
}
@end
Моя реализация не всегда вперед Жест правильно отменяют события, но, по крайней мере, в 10,8 это не вызывает проблем.
iPhone или MacOS? Я предполагаю MacOS, так как вы говорите NSScrollView, а не UIScrollView. –
Да, Mac os, любая идея есть? – NeXT5tep