2009-07-11 154 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 2011-06-01 18:34:12

+0

@Chetan:+1,我想知道這也 – Dov 2011-07-08 13:36:56

回答

6

在我的應用程序,我設置了clipView「使用其動畫小號boundsOrigin

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

我不確定這是否是支持的動畫類型,但是您是否嘗試過通過animator代理對象調用?

例如。 [[self animator] scrollPoint:NSMakePoint(x, y)];

+0

不,那是行不通的。這不是一個支持的動畫屬性(雖然也許這是一個很好的增強要求?)。 – kperryua 2009-07-11 23:34:41

12

您可以創建一個NSAnimation的子類來執行此操作。我已經創建了一個作爲我的開源項目的一部分(具有公共領域許可證)。

你可以在這裏找到它:https://github.com/abhibeckert/Dux/blob/master/Dux/DuxScrollViewAnimation.m(注意:這個項目啓用了ARC,如果你不使用ARC,你需要更新)。

例子:

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

非常感謝。這個類真的很有幫助,動畫可以按預期工作。 – aumanets 2013-10-20 16:33:00