8
votes

Comment animer le point de défilement?

- (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)];
    }
}
In the above code I need to animate the scrolling. How can I achieve this? 
Thanks.

2 commentaires

Avez-vous pu comprendre comment? Semble une demande assez simple ...


@Chetan: +1, j'aimerais le savoir aussi


3 Réponses :


1
votes

Je ne suis pas sûr que ceci est un type d'animation pris en charge, mais avez-vous essayé d'appeler à l'aide de l'objet Animator Proxy?

par exemple. [[auto-animateur] ScrollPoint de défilement: NsmakePoint (x, y)];


1 commentaires

Nope, ça ne fonctionnera pas. Ce n'est pas une propriété animatable prise en charge (bien que ce soit peut-être une bonne demande d'amélioration?).



12
votes

Vous pouvez créer une sous-classe de Nsanimation pour le faire. J'ai créé un dans le cadre d'un projet open source de mien (avec licence de domaine public).

Vous pouvez le trouver ici: Httptps://github.com/abhibeckert/dux/blob/master/dux/duxscrollviewanimation.m (Remarque: Ce projet est activé. Si vous n'utilisez pas l'arc, vous devra mettre à jour le cas échéant).

exemple: xxx


3 commentaires

Merci beaucoup. Cette classe est vraiment utile et l'animation fonctionne comme prévu.


@AUMANETS Gardez à l'esprit que cela devrait probablement être revisité avec Mavericks. Je n'ai pas encore fait ça - Scroll Views n'utilise plus cubesaseinout. Je ne sais pas comment mettre en œuvre le nouvel algorithme.


N'a pas pensé à cela. Merci pour l'avertissement.



6
votes

Dans mon application, j'ai défini le clipview code> 's limiteorigin code> à l'aide de son animateur:

[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 commentaires

Je ferais attention avec cette méthode - j'ai vu un comportement bizarre (par exemple, des barres de défilement rompent si la valeur de la nouvelle origine n'est pas un entier exact). Des documents d'Apple: Vous n'interagissez pas normalement avec la classe NSCLIPView directement; Il est prévu principalement comme les machines de défilement de la classe NSScrollView. Je serai tenté d'utiliser la méthode d'Abhi qui repose sur le point de défilement sur la vue Document.