Quindi, sono abbastanza nuovo per la programmazione iOS e ho ereditato un progetto da un ex collaboratore. Stiamo costruendo un'app che contiene un'interfaccia utente di gauge. Quando i dati arrivano, vogliamo ruotare senza problemi il nostro "layer" (che è un'immagine di un ago) dall'angolo corrente a un nuovo angolo di mira. Ecco quello che abbiamo, che ha funzionato bene con i dati lento:come reimpostare/riavviare un'animazione e farla apparire continua?
-(void) MoveNeedleToAngle:(float) target
{
static float old_Value = 0.0;
CABasicAnimation *rotateCurrentPressureTick = [CABasicAnimation animationWithKeyPath:@"transform.rotation");
[rotateCurrentPressureTick setDelegate:self];
rotateCurrentPressureTick.fromValue = [NSSNumber numberWithFloat:old_value/57.2958];
rotateCurrentPressureTick.removedOnCompletion=NO;
rotateCurrentPressureTick.fillMode=kCAFillModeForwards;
rotateCurrentPressureTick.toValue=[NSSNumber numberWithFloat:target/57.2958];
rotateCurrentPressureTick.duration=3; // constant 3 second sweep
[imageView_Needle.layer addAnimation:rotateCurrentPressureTick forKey:@"rotateTick"];
old_Value = target;
}
Il problema è che abbiamo un nuovo schema di dati in cui i nuovi dati possono entrare (ed il metodo di cui sopra detta) più velocemente, prima che l'animazione è completa . Quello che sta succedendo penso che l'animazione venga riavviata dal vecchio target al nuovo target, il che lo rende molto nervoso.
Così mi chiedevo come modificare la funzione di cui sopra per aggiungere un comportamento continuo/riavviabile, come segue:
- Controllare se l'animazione corrente è in corso e
- Se è così, capire dove la angolo di animazione corrente è, e quindi
- Cancellare la corrente e iniziare una nuova animazione dalla rotazione attuale alla nuova rotazione bersaglio
e 'possibile costruire che essere deve svolgere la suddetta funzione?
Grazie. Scusate se la domanda sembra non informata, ho studiato e capito gli oggetti/metodi di cui sopra, ma non sono un esperto.