L’iPhone non implementa i Ticker, quelle scritte che scorrono orizzontalmente in fondo allo schermo del vostro telefonino con java. È però semplice implementarle in obj-c utilizzando le animation. L’approccio che ho utilizzato è decisamente semplice, ho diviso la windows in 2 view separate, e su quella posizionata in basso ho inserito il testo (UILabel).
Il codice per far scorrere il testo è il seguente (viene descritto di seguito):
[myLabel setText:@"Hello world, I'm happy to be here today... have fun - d4kr"];
[myLabel setTextAlignment:UITextAlignmentCenter];
imposto il testo nella Label e lo centro, è importante centrarlo per creare un effetto lineare.
CGSize textSize = [[myLabel text] sizeWithFont:[myLabel font]];
CGFloat textWidth = textSize.width + myLabel.frame.size.width;
if (textWidth < myLabel.frame.size.width) {
textWidth = myLabel.frame.size.width;
}
NSInteger myLabelWidth = textWidth + myLabel.frame.size.width;
myLabel.frame = CGRectMake(0, myLabel.frame.origin.y, myLabelWidth, myLabel.frame.size.height);
Calcolo le dimensioni del testo che si è andato ad inserire nella UILabel cosi da ridimensionare la Label per contenerlo tutto. Vengono poi aggiunti degli spazi cosi da avere una continuità di movimento. Se il testo della Label è minore della dimensione minima impostata questa vinene automaticamente modifica alla massima definita.
NSInteger time = textWidth/50; // 1 secondo per ogni 50px
Si imposta la velocità di scorrimento, 50px al secondo sono un buon rapporto e permette una semplice lettura.
[UIView beginAnimations:@"ticker" context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveLinear];
[UIView setAnimationDuration:time];
[UIView setAnimationRepeatCount:FLT_MAX];
myLabel.frame = CGRectMake(-textWidth, myLabel.frame.origin.y, myLabelWidth, myLabel.frame.size.height);
[UIView commitAnimations];
Questo è il blocco che contiene l’animazione, si tratta di un semplice movimento lineare che viene ripetuto infinite (FLT_MAX) volte.
Ecco a voi il progetto d’esempio testTicker.
Ciao,
volevo ringraziarti per l’esempio…mi serviva proprio.
Volevo anche chiederti un consiglio:
Ho inserito nella mia app il tuo ticker..come tipo di app è una tapbar, nel quale ho inserito in una delle sezioni il ticker, pero quando passo dalla sezione all’altra e ritorno sul ticker sembra come se non ricaricasse lo script….si blocca e non visualizzo piu le informazioni…(non so se mi sono spiegato) cmnq se cambio pagina non riparte il ticker…avresti qualche consiglio??
Grazie
probabilmente quando ritorni sul tab che contiene lo script non lo ricarichi ma lo prendi dalla memoria e l’animazione data al testo viene interrotta al cambio di tab. dove hai inserito (metodo) lo script per avviare la transizione del testo?
Ciao,
intanto grazie per la risposta…cmnq inizialmente lo avevo inserito nel ViewDidLoad….poi mi sono accorto che appunto non ricaricava la richiesta..e l’ho inserita nel ViewWillAppear…però inserendola qui ho riscontrato 2 problemi…il primo è che si il label viene visualizzato subito bene,ma quando cambio view il label viene ricaricato dopo 10/15 sec…°_°…
Il secondo è un accumulo di memoria (accumulo non riscontrato nel build Analyze…me ne sono accorto dopo che cambio velocemente bar..l’app inizia a consumare per poi crashare…)…cmnq non riesco a capire come mai.
Grazie per l’aiuto
Credo di aver capito…il tuo codice prevede l’inserimento del label via codice e non via IB…sapresti dirmi come faccio tramite IB?? tnx 😀