2010-07-31 16 views
8

In un'applicazione che mostra frammenti di testo, sto aumentando la dimensione del carattere quando il dispositivo viene orientato verso il paesaggio. Non mi piace come fa l'intera animazione e poi improvvisamente salta alla nuova dimensione, quindi mi piacerebbe animare la modifica delle dimensioni nel corso della rotazione.iOS - Animazione della modifica della dimensione del testo in UILabel o UITextView?

Ho letto da qualche parte che il lancio di questa modifica in un blocco di animazione UIView non funziona perché la proprietà del carattere non è animabile, quindi quali sono le mie opzioni per farlo?

Per la mia implementazione specifica non sto semplicemente ridimensionando lo UILabel/UITextView così com'è; I limiti della casella aumentano di più (proporzionalmente) della dimensione del font, quindi ci sarà un riflusso nel testo. Per me va bene.

Modifica: Sarei perfetto con il ridimensionamento dello UITextView.

Inoltre, stavo considerando "l'animazione" manualmente: ho un metodo che espone le mie viste e regola la dimensione del carattere. Se avessi saputo quando stava per iniziare la rotazione e la durata dell'animazione, avrei potuto cronometrarlo in modo da rendere una o due dimensioni del carattere intermedie nel mezzo dell'animazione. Qualsiasi aiuto con ottenere quelli sarebbe apprezzato.

+1

Siete riusciti a raggiungere ciò che si voleva fare? Potresti accettare una delle risposte per chiudere la domanda? – MiKL

risposta

6

se sapessi quando la rotazione stava per iniziare, e la durata dell'animazione ...

Divertente, dovresti dirlo. Appena prima dell'inizio dell'animazione, il tuo controller di visualizzazione riceverà un messaggio willAnimateRotationToInterfaceOrientation:duration: che ti fornisce le informazioni esatte di cui hai bisogno.

1

Modificare la dimensione del carattere quando viene chiamato didAnimateFirstHalfOfRotationToInterfaceOrientation:. In questo modo l'utente non vedrà la modifica una volta completata la rotazione. Sarebbe piuttosto difficile vedere la modifica della dimensione del carattere allora, mentre la rotazione sta accadendo!

+0

Tale metodo non viene chiamato a meno che non si attiva l'animazione in due fasi, che richiede roba manuale aggiuntivo che ho molta voglia di evitare di entrare in. Ma comunque buona idea! – kbanman

6

Un'opzione consiste nello sbiadire il vecchio testo, modificare la dimensione del carattere e dissolverlo nuovamente. La proprietà del carattere potrebbe non essere animabile, ma alfa è. Poiché alfa è una proprietà di UIView, puoi trattare tutte le tue viste testuali allo stesso modo: UILabel, UITextView, ecc. Anche questo sembra buono.

+0

Mi piace questo metodo. – Moshe

4

Un modo di procedere potrebbe essere quello di:

  1. Crea una CAKeyframeAnimation
  2. Definire il ridimensionamento e la rotazione che si vuole raggiungere durante che l'animazione utilizzando un insieme di CATransform3D oggetti
  3. Aggiungi queste trasformazioni al tuo animazione con fotogrammi chiave
  4. Inviare il messaggio addAnimation all'oggetto livello etichetta: [[label layer] addAnimation];

qui sarebbe un esempio di codice assumendo yourLabel è la UILabel si desidera ridimensionare e ruotare:

CAKeyframeAnimation *scale = [CAKeyframeAnimation animationWithKeyPath:@"transform"]; 

CATransform3D scaleUp = CATransform3DMakeScale(1.5, 1.5, 1); // Scale in x and y 
CATransform3D rotationScaled = CATransform3DRotate (scaleUp, 90, 0, 0, 1); // Rotate the scaled font 

[scale setValues:[NSArray arrayWithObjects: 
[NSValue valueWithCATransform3D:CATransform3DIdentity], 
[NSValue valueWithCATransform3D:rotationScaled], 
nil]]; 

// set the duration 
[scale setDuration: 1.0]; 

// animate your label layer 
[[yourLabel layer] addAnimation:scale forKey:@"scaleText"]; 

Si tratta in genere come un testo rimbalzare in giro sarebbe stato animato per esempio.

È possibile avviare questo quando il dispositivo inizia a ruotare e recuperare l'animazione quando ha terminato la rotazione in modo da poter aggiornare l'etichetta con la scala/posizione corretta.

Avrete bisogno di una messa a punto per trovare la giusta tempistica e rotazione.

+0

@kelso. Hai pensato a questo/prova? – MiKL

+0

Per ottenere il giusto tempo e la rotazione corretta è possibile utilizzare il metodo descritto in precedenza: 'willAnimateRotationToInterfaceOrientation: duration:' – MiKL

+0

@ kelso.b. Sei mai riuscito a fare ciò che volevi ottenere? Che ne dici di accettare una delle risposte così buone in modo che la tua domanda possa essere chiusa? Saluti. Mikl – MiKL

Problemi correlati