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