- (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.
3 Réponses :
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 Code> Animator Code> Proxy? P>
par exemple. [[auto-animateur] ScrollPoint de défilement: NsmakePoint (x, y)]; code> p>
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?).
Vous pouvez créer une sous-classe de 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). p> exemple: p> Nsanimation code> pour le faire. J'ai créé un dans le cadre d'un projet open source de mien (avec licence de domaine public).
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.
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];
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. B> Je serai tenté d'utiliser la méthode d'Abhi qui repose sur le point de défilement sur la vue Document.
Avez-vous pu comprendre comment? Semble une demande assez simple ...
@Chetan: +1, j'aimerais le savoir aussi