2009-07-11 4 views
8
- (void)mouseDragged:(NSEvent *)theEvent { 
    NSSize dynamicImageSize; 
    dynamicImageSize = [[self image] size]; 
    NSSize contentSize = [(NSScrollView*)[[self superview] superview] contentSize]; 
    if(dynamicImageSize.height > contentSize.height || dynamicImageSize.width > contentSize.width) 
    { 
     float x = startOrigin.x - ([theEvent locationInWindow].x - startPt.x); 
     float y = startOrigin.y - ([theEvent locationInWindow].y - startPt.y); 
     [self scrollPoint:NSMakePoint(x, y)]; 
    } 
} 

위의 코드에서 스크롤을 애니메이션화해야합니다. 이것을 어떻게 할 수 있습니까? 감사합니다. .스크롤 포인트에 애니메이션을 적용하는 방법은 무엇입니까?

+1

당신에게 방법을 알아낼 수 있었을? 꽤 간단한 요청처럼 보입니다 ... – Chetan

+0

@ Chetan : +1, 이것도 알고 싶습니다 – Dov

답변

6

, 내가 설정 한 clipViewboundsOrigin을 자사의 애니메이터 사용 :

[NSAnimationContext beginGrouping]; 
NSClipView* clipView = [[myView enclosingScrollView] contentView]; 
NSPoint newOrigin = [clipView bounds].origin; 
newOrigin.x = my_new_origin.x; 
[[clipView animator] setBoundsOrigin:newOrigin]; 
[NSAnimationContext endGrouping]; 
+2

이 방법을 사용할 때주의해야합니다. 예를 들어, 새로운 원점의 값이 정확한 정수가 아닌 경우 스크롤바가 깨지는 현상이 발생했습니다. Apple의 문서에서 : ** 일반적으로 NSClipView 클래스와 직접 상호 작용하지 않습니다. 주로 NSScrollView 클래스의 스크롤링 기계로 제공됩니다. ** 문서보기에서 scrollPoint를 사용하는 Abhi의 방법을 사용하고 싶습니다. –

1

이것이 지원되는 애니메이션 유형인지 확실하지 않지만 animator 프록시 객체를 통해 호출 해 보았습니까?

예 : [[self animator] scrollPoint:NSMakePoint(x, y)];

+0

아니, 그게 작동하지 않습니다. 그건 지원되는 애니메이션 속성이 아닙니다. (아마도 좋은 개선 요청일까요?) – kperryua

12

이렇게하려면 NSAnimation의 하위 클래스를 생성 할 수 있습니다. 필자는 오픈 소스 프로젝트 (퍼블릭 도메인 라이센스 사용)의 일부로 하나를 만들었습니다.

여기에서 찾을 수 있습니다 : https://github.com/abhibeckert/Dux/blob/master/Dux/DuxScrollViewAnimation.m (참고 :이 프로젝트는 ARC를 사용할 수 있습니다.) ARC를 사용하지 않는 경우 적절하게 업데이트해야합니다.

예 : 내 응용 프로그램에서

[DuxScrollViewAnimation animatedScrollToPoint:NSMakePoint(x,y) inScrollView:self.enclosingScrollView]; 
+0

대단히 고마워. 이 클래스는 실제로 도움이되며 애니메이션은 예상대로 작동합니다. – aumanets

+1

@aumanets는 이것이 Mavericks에서 다시 검토해야한다는 것을 명심하십시오. 스크롤 뷰는 cubicEaseInOut을 더 이상 사용하지 않습니다. 새로운 알고리즘을 구현하는 방법을 모르겠습니다. –

+0

그것에 대해 생각하지 않았습니다. 경고 해 주셔서 감사합니다. – aumanets

관련 문제