2009-07-11 14 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)]; 
    } 
} 

Nel codice precedente ho bisogno di animare lo scorrimento. Come posso raggiungere questo obiettivo? Grazie.Come animare lo scrollpoint?

+1

sono stati in grado di capire come? Sembra una richiesta piuttosto semplice ... – Chetan

+0

@Chetan: +1, mi piacerebbe sapere anche questo – Dov

risposta

6

Nella mia app, ho impostato s' boundsOrigin utilizzando il suo animatore del clipView:

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

Sarei attento con questo metodo: ho notato un comportamento strano (ad esempio barre di scorrimento che si interrompono se il valore della nuova origine non è un numero intero esatto). Da documenti Apple: ** Normalmente non si interagisce direttamente con la classe NSClipView; è fornito principalmente come meccanismo di scorrimento per la classe NSScrollView. ** Sono tentato di utilizzare il metodo di Abhi che si basa su scrollPoint sulla vista del documento. –

1

Non sono sicuro se si tratta di un tipo di animazione supportato, ma hai provato a chiamare tramite l'oggetto proxy animator?

es. [[self animator] scrollPoint:NSMakePoint(x, y)];

+0

No, non funzionerà. Questa non è una proprietà animabile supportata (anche se forse sarebbe una buona richiesta di miglioramento?). – kperryua

12

Per creare questa sottoclasse è possibile creare una sottoclasse di NSAnimation. Ne ho creato uno come parte di un mio progetto open source (con licenza di dominio pubblico).

Puoi trovarlo qui: https://github.com/abhibeckert/Dux/blob/master/Dux/DuxScrollViewAnimation.m (nota: questo progetto ha ARC abilitato.Se non stai usando ARC dovrai aggiornare come appropriato).

Esempio:

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

Grazie mille. Questa classe è davvero utile e l'animazione funziona come previsto. – aumanets

+1

@aumanets tenere presente questo dovrebbe probabilmente essere rivisitato con Mavericks. Non l'ho ancora fatto - le viste a scorrimento non usano più cubicEaseInOut. Non so come implementare il nuovo algoritmo. –

+0

Non ci avevo pensato. Grazie per l'avvertimento. – aumanets