NSScrollView는 한 번에 표시 할 수있는 것보다 더 큰 "캔버스"가있는보기를 관리합니다. 따라서 다른 행동을 원할 경우 :
(void)setHorizontalScrollElasticity:
을 확인하십시오.하지만 원하는대로 할 수 없습니다. (고정 허용 탄성 금액)
- 원하는 동작을 구현하려면 NSScrollView를 서브 클래 싱하십시오.
- 처음부터 자신 만의 클래스를 만드십시오. (이벤트를 처리하기 때문에 NSResponder에서 상속 한 모든 것).
예를 들어, 나는 한 번 세계지도 프로그램을 작성했지만지도를 수평축에서 영원히 반복해야했습니다. 방금 서브 클래 싱 된 NSView를 사용하여 스크롤링을 수동으로 관리했습니다. (현재 코드에 액세스 할 수 없음)
대략 생각해 볼 내용 : 나는 그 이유를 이해하지만 그 점에 대해 언급하고 싶습니다. 이 동작은 사용자가 예상해야합니다. 버튼처럼 보이면 마치 밖으로 움직여야합니다. 현재 scrollviews는 탄력성을 갖기 때문에 운동량을 통해 스크롤 할 때 (사용자가 더 이상 만지면 안 됨) 갑자기 끝에 도달하면 갑자기 멈추지 않고 ... 사용자에게 불쾌감을 줄 수 있습니다.
예 NSScrollview 서브 클래스, 내가 - (void)scrollWheel:(NSEvent *)
을 무시 시도하고있는 contentView의 경계가 무엇인지 감지하고 특정 값에 그것을 모자 것입니다. 의 선 주위에 뭔가 :
- (void)scrollWheel:(NSEvent *)event
{
[super scrollWheel:event];
if (self.contentView.bounds.origin.y > SomeConstant)
/* cap the value */
}
난 당신이 지적했듯이 첫 번째 질문에서, 그리고 마지막으로 너무 많은 작업과 바퀴의 재발을하기 때문에 서브 클래스의 접근 방식은 .. 가장 합리적인 생각합니다. 나는 곧 그것을, 잘하면 시험해 볼 것이다. 몇 가지 코드를 고맙게 생각하지만 일단 테스트를 거치면 코드를 추가 할 것입니다. – Mazyod
몇 가지 샘플 코드가 추가되었습니다. –
안녕하세요! xD 난 그냥 직접 해냈어! 모양 : - (void) scrollWheel : (NSEvent *) theEvent { NSRect rectOfInterest = [[contentView] visibleRect]; NSLog (@ "Visible Rect : % @", NSStringFromRect (rectOfInterest)); if (rectOfInterest.origin.x> -100) { [super scrollWheel : theEvent]; } } ... +1 나를 이길;) – Mazyod