Domanda

Ho un UILabel che visualizza la data corrente per la visualizzazione corrente del mio punto di vista di scorrimento. Quando ho scorrere questo punto di vista a sinistra (per le pagine di sinistra), mi piacerebbe questa etichetta per cambiare per il giorno prima, con un effetto di incrocio tra le 2 date.

prendo come riferimento l'effetto di dissolvenza del trampolino quando si scorre la pagina Spotlight. Penso che questo è simile, ma non ho idea di come implementarlo!

Dove metto il codice, devo usare 2 UILabel diverso o forse Core Animation? Quando faccio a cambiare la data?

Grazie in anticipo!

È stato utile?

Soluzione

  1. Nel vostro metodo delegato scrollViewDidScroll:, controllare se contentOffset della vista di scorrimento indica che l'utente ha fatto scorrere a un'altra pagina.
  2. Se è così, cambiare il testo dell'etichetta per la nuova data. Non animerà ancora, ma fare questo prima di provare l'animazione.
  3. Per l'animazione, aggiungere un CATransition allo strato dell'etichetta e configurare a proprio piacimento:

    // Create a transition animation and add it to the label's layer:
    CATransition *transition = [CATransition animation];
    transition.type = kCATransitionFade;
    transition.duration = 0.25;
    [self.dateLabel.layer addAnimation:transition forKey:@"textTransition"];
    // Change the label's text as before:
    self.dateLabel.text = newDateString;
    

Questo effetto è un po 'diverso dal venir meno delle icone Springboard (dal momento che quelli dissolvenza continuamente mentre si scorre ulteriormente alla pagina di Spotlight), ma penso che il mio approccio è più appropriato per l'applicazione. Per emulare l'effetto Springboard, si dovrebbe davvero utilizzare due etichette separate (con lo stesso telaio) e cambiare i loro valori di opacità come i cambiamenti contentOffset della vista di scorrimento.

Altri suggerimenti

Utilizzando Core Animation con due etichette avrebbe funzionato bene. La modifica della proprietà di un risultato strato di Core Animation in una transizione graduale per impostazione predefinita, in modo da poter utilizzare a vostro vantaggio. Ad esempio:

- (void)crossfadeDateLabels
{
    date1Label.layer.opacity = 0.0f;
    date2Label.layer.opacity = 1.0f;
}

In alternativa, è possibile utilizzare il modello di animazione esplicito se si desidera un maggiore controllo:

- (void)crossfadeDateLabels
{
    CABasicAnimation *date1Anim = [CABasicAnimation animationWithKeyPath:@"opacity"];
    date1Anim.duration = 1.0f;
    date1Anim.fromValue = [NSNumber numberWithFloat:1.0f];
    date1Anim.toValue = [NSNumber numberWithFloat:0.0f]

    // Do something similar for date2Anim...

    [date1Label.layer addAnimation:date1Anim forKey:nil];
    [date2Label.layer addAnimation:date2Anim forkey:nil];
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top