j2me ticker con iPhone?

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.