interrogare il livello di presentazione di un UISlider
-
29-09-2019 - |
Domanda
Sto installando un semplice UISlider ad animarlo di progresso:
[UIView animateWithDuration:songLength
delay:0.0
options:UIViewAnimationOptionRepeat|
UIViewAnimationOptionAllowUserInteraction|
UIViewAnimationOptionBeginFromCurrentState
animations:^{
[UIView setAnimationDuration:10.0];
[myUISlider setValue:10.0];
} completion:nil
];
[UIView commitAnimations];
quando l'utente preme un pulsante voglio interrompere l'animazione al suo posto.
ho capito ho bisogno di interrogare il livello di presentazione per capire il valore, tuttavia, il livello di presentazione è di tipo CALayer e non UISlider. quindi, ha proprietà di livello, come esso è x / y posizione sullo schermo, ma non il valore del cursore stesso.
ha senso che in base alla progettazione del livello di presentazione può accedere a tutti i dati attuali animati di un livello, ma non sono sicuro di come funziona in questo in codice.
tutte le idee?
Soluzione
ho capito un modo per risolvere la questione, nel caso in cui avete a che fare con lo stesso problema. da disegno non c'è modo evidente per interrogare un pollice animata di un UISlider. animazione interrogazione funziona bene per un livello, quindi un modo è quello di creare il proprio sfondo animato e uno strato che è il pollice.
il modo in cui ho lavorato intorno a questo è l'uso di classe di NSTimer. una volta voglio barra di avanzamento per iniziare l'animazione a impostare una NSTimer per 0,1 secondi intervallo e chiamare una funzione per aggiornare la posizione del pollice. l'animazione prima / dopo il pollice (come progredisce la parte sinistra è blu e quello che è rimasto è ancora bianca) è curato in modo automatico.
ecco il codice:
updateTimer = [NSTimer scheduledTimerWithTimeInterval:.01 target:self selector:@selector(updateCurrentTime) userInfo:p repeats:YES];
così ogni .01 di secondo questo metodo viene chiamato e ridisegna il pollice, creando così l'animazione. Non c'è bisogno di un blocco di animazione.
questo funziona bene e sono felice con i risultati. Sono preoccupato con le prestazioni e misurerà come risorsa intensiva questa implementazione è. forse una buona idea di andare con la prima opzione che ho citato sopra.