2012-05-02 4 views
1

NSScrollView에 대한 documentView로 NSView가 있습니다. 또한 NSImageView NSView 하위 뷰로 있습니다. 스크롤 막대가 여러 번 활성화/비활성화되도록 이미지의 크기가 동적으로 변경됩니다. 이미지가 변경되면 이미지의 특정 지점으로 스크롤하고 싶습니다. NSView의 drawRect : 메서드 내에서 [[myScrollView contentView] scrollToPoint : myPoint];를 호출합니다.NSImage의 NSScrollView 및 ScrollToPoint

스크롤 막대가 업데이트되고 원하는대로 이미지가 나타나지만 이미지가 스크롤되는 즉시 이중 이미지가 나타나거나 이미지의 일부가 잘릴 수 있습니다. 어떤 도움을 주시면 감사하겠습니다. 고맙습니다.

+1

왜 '-drawRect :'내에서 스크롤하고 있습니까? 무언가를 할뿐 아니라'-setNeedsDisplay ... '메소드를 호출 할 물건을 그리지 말아야한다. –

+0

다음으로이 문제를 해결하기 위해 -drawRect 메서드 외부에서 image 및 documentView 프레임을 설정했습니다. 나는 그것을 시도해 보겠습니다 –

+0

당신이 옳았다. setFrame, setOrigin, scrollToPoint 등의 메서드를 -drawRect 밖으로 이동하자마자 모든 것이 완벽하게 작동했습니다. 정말 고맙습니다! –

답변

3

Interface Builder 또는 프로그래밍 방식으로 NSScrollView의 "Copy On Scroll"동작 옵션을 해제 할 수 있습니다. Scroll View Programming Guide for Mac OS X: How Scrolling Works에서

:

NSClipView 클래스는 scrollToPoint: 방법을 통해 지원을 스크롤 낮은 수준을 제공합니다. 이 메서드는 내용보기의 경계 사각형의 원점을 변환하고 으로 렌더링 된 문서 뷰의 대부분을 보이는 그대로 복사하여 새로 노출 된 영역을 그리는 문서 뷰만 요청하여 다시 표시를 최적화합니다. 대개 스크롤 성능이 향상되지만 항상 적절하지는 않습니다. NSClipView 메서드 setCopiesOnScroll: 을 매개 변수로 사용하여 을이 동작으로 사용 중지 할 수 있습니다. 복사 후 스크롤을 활성 상태로두면 translateOriginToPoint:이 아닌 NSView 메서드 scrollPoint: 메서드를 사용하여 프로그래밍 방식으로 문서 뷰를 스크롤해야합니다.

+0

IB에서이 설정을 시도했지만 다소 효과가있었습니다. 이 콤보를 시도하고 -drawRect 메서드 외부에서 documentView 프레임을 설정합니다. 고맙습니다! –

관련 문제