2013-10-16 18 views
6

ich weiche Animation zwischen den Übergängen in einfach UI erstellen möchten:Soft-Scroll-Animation NSScrollView scrollToPoint:

first slidesecond slidethird slide

Ansicht, die

view

Wenn ein Anruf scrollToPoint bewegt: für Verschiebungsansicht, um anzuzeigen, dass der Übergang nicht animiert wird. Ich bin neu in Cocoa Programmierung (iOS ist mein Hintergrund). Und ich weiß nicht, wie richtig .Animator oder NSAnimationContext verwenden.

Auch ich wurde Core Animation Guide gelesen, fand aber keine Lösung.

kann die Quelle auf Git Hub repository

Bitte helfen Sie erreichen werden !!!

Antwort

16

scrollToPoint ist nicht animierbar. Nur animierbare Eigenschaften wie Grenzen und Position in NSAnimatablePropertyContainer sind animiert. Sie müssen nichts mit CALayer tun: Entfernen Sie die Dateien wantsLayer und CALayer. Dann mit folgendem Code ist es animiert.

- (void)scrollToXPosition:(float)xCoord { 
    [NSAnimationContext beginGrouping]; 
    [[NSAnimationContext currentContext] setDuration:5.0]; 
    NSClipView* clipView = [_scrollView contentView]; 
    NSPoint newOrigin = [clipView bounds].origin; 
    newOrigin.x = xCoord; 
    [[clipView animator] setBoundsOrigin:newOrigin]; 
    [_scrollView reflectScrolledClipView: [_scrollView contentView]]; // may not bee necessary 
    [NSAnimationContext endGrouping]; 
} 
+0

Vielen Dank! Es klappt! Aber wie kann ich wissen, ob das Objekt animierbar ist oder nicht? – WINSergey

-1

Danke, @mahal Tertin In Swift

func scrollToPosition(pos:CGFloat){ 
    NSAnimationContext.beginGrouping() 
    NSAnimationContext.currentContext().duration = 0.5 
    var clip:NSClipView! 
    clip = self.scrollView.contentView 
    var newOrigin:NSPoint = clip.bounds.origin 
    newOrigin.x = pos 
    clip.animator().setBoundsOrigin(newOrigin) 
    self.scrollView.reflectScrolledClipView(self.scrollView.contentView) 
    NSAnimationContext.endGrouping() 
} 

Es wird zu neuen Entwickler helfen !!!!!