NSScrollview
은 NSScrollview
안에 중첩되어 있습니다. 내부 뷰를 수평 스크롤 만 처리하도록하려면 어떻게해야합니까? 세로 스크롤은 외부보기를 이동해야합니다.다른 NSScrollView 내부의 NSScrollView
현재 내부보기에서 scrollWheel:
이벤트를 외부보기로 전달하지만 속도가 매우 느립니다.
NSScrollview
은 NSScrollview
안에 중첩되어 있습니다. 내부 뷰를 수평 스크롤 만 처리하도록하려면 어떻게해야합니까? 세로 스크롤은 외부보기를 이동해야합니다.다른 NSScrollView 내부의 NSScrollView
현재 내부보기에서 scrollWheel:
이벤트를 외부보기로 전달하지만 속도가 매우 느립니다.
이것은 NSScrollView의 서브 클래스로, 사용자가 요구하는 것을 수행합니다. 이 단지는 리스폰 더 체인까지 신경 쓰지 않는 이벤트를 전달하기 때문에이 서브 클래스되지 않은 (또는 적어도 닫기)
시간 파일
#import <Cocoa/Cocoa.h>
@interface HorizontalScrollView : NSScrollView
@end
및 것처럼는 확대됨에 있어야한다 m
@implementation HorizontalScrollView
- (void)scrollWheel:(NSEvent *)theEvent {
NSLog(@"%@", theEvent);
if(theEvent.deltaX !=0)
[super scrollWheel:theEvent];
else
[[self nextResponder] scrollWheel:theEvent];
}
@end
또한 중첩 된 스크롤보기의 문제가있었습니다. 내부 스크롤보기는 수평으로 스크롤해야하고 외부 스크롤은 수직으로 스크롤해야합니다.
매직 마우스/트랙 패드에서 스크롤 이벤트를 처리 할 때 각 제스처에 대해 스크롤보기 중 하나만 선택하는 것이 중요합니다. 그렇지 않으면 손가락이 완벽하게 똑바로 움직이지 않을 때 이상한 경련이 발생합니다. 두 손가락으로 트랙 패드를 두드리면 두 스크롤러가 모두 표시되는지 확인해야합니다.
옛날 방식의 스크롤 휠을 사용하는 거대한 마우스 또는 마우스의 기존 스크롤 이벤트를 처리 할 때 이벤트에 제스처 단계 정보가 없으므로 각 이벤트에 대해 오른쪽 스크롤보기를 선택해야합니다.
@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에서이 발생하지 않는 문제 :
에만 산 사자 테스트 내부 스크롤 뷰 내 서브 클래스이다.
이것은 주로 10.10에서 작동했습니다. '+ (BOOL) isCompatibleWithResponsiveScrolling {return YES;를 추가해야했습니다. }'NSScrollView는'-scrollWheel :'의 오버라이드를 감지하기 때문에 비 반응 스크롤의 버그가 있다고 생각합니다. – joerick
iPhone 또는 MacOS? 당신이 UIScrollView가 아닌 NSScrollView를 말하고 있기 때문에 나는 MacOS를 추측하고 있습니다. –
예, Mac OSS, 거기에 어떤 아이디어가 있습니까? – NeXT5tep