2009-07-11 7 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

@漢人:+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はこれがおそらくマーベリックスで再訪されるべきであることに留意してください。私はまだそれをしていない - スクロールビューはcubicEaseInOutをもう使用しない。私は新しいアルゴリズムを実装する方法を知らない。 –

+0

それについては考えていませんでした。警告ありがとうございます。 – aumanets

関連する問題