2012-04-25 3 views
1

십여 개의 scrollViews가있는 코코아 애플리케이션이 있습니다. 나는 특히 탄원을 좋아합니다. 특히 "부활절 달걀"을 넣는 경우가 있습니다. 책의 사과 로고와 같이 사과 로고가 보입니다. 아래로 스크롤하면 사과 로고가 나타납니다.코코아 (NSScrollView)의 스크롤 신축성 제한

내 문제 실제로 노출 된 콘텐츠의 양을 실제 콘텐츠 영역 이상으로 제한해야한다는 것입니다. 마술 마우스로 스크롤 할 때, 특히 탄성은 전체 스크롤 내용을 사라지게합니다! 스크롤을 놓을 때까지 뒤로 이동합니다.

이제 탄성을 특정 여백으로 제한하고 싶습니다. 방법?

답변

3

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 */ 
} 
+0

난 당신이 지적했듯이 첫 번째 질문에서, 그리고 마지막으로 너무 많은 작업과 바퀴의 재발을하기 때문에 서브 클래스의 접근 방식은 .. 가장 합리적인 생각합니다. 나는 곧 그것을, 잘하면 시험해 볼 것이다. 몇 가지 코드를 고맙게 생각하지만 일단 테스트를 거치면 코드를 추가 할 것입니다. – Mazyod

+0

몇 가지 샘플 코드가 추가되었습니다. –

+0

안녕하세요! xD 난 그냥 직접 해냈어! 모양 : - (void) scrollWheel : (NSEvent *) theEvent { NSRect rectOfInterest = [[contentView] visibleRect]; NSLog (@ "Visible Rect : % @", NSStringFromRect (rectOfInterest)); if (rectOfInterest.origin.x> -100) { [super scrollWheel : theEvent]; } } ... +1 나를 이길;) – Mazyod