T#006 – Numero casuale con accelerometro
Oggi creeremo un’applicazione che, sfruttando l’accelerometro integrato nell’iPhone, ci permetterà di generare e visualizzare in una UILabel un numero casuale da 0 a 100 ogni volta che il nostro melafonino viene scosso. Apriamo Xcode e creiamo un nuovo progetto. Dalla schermata contenente i template disponibili selezionate “View-based Application”. Diamo un nome al nostro progetto, ad esempio “accelRandom”, scegliamo la posizione dove salvare e proseguiamo. Nel file di interfaccia “accelRandomViewController.h” aggiungiamo il protocollo “UIAccelerometerDelegate” e creiamo un oggetto IBOutlet UILabel che servirà a mostrare a video il numero casuale generato durante l’esecuzione del programma. Il codice dovrà essere come mostrato di seguito:
#import <UIKit/UIKit.h> @interface accelRandomViewController : UIViewController <UIAccelerometerDelegate> { IBOutlet UILabel *lblNumeroCasuale; } @end
Apriamo quindi il file di implementazione della nostra classe, “accelRandomViewController.m”, e cerchiamo il metodo “viewDidLoad” al momento commentato. Togliamo i caratteri che commentano il codice e modifichiamolo come segue:
- (void)viewDidLoad { [super viewDidLoad]; UIAccelerometer *accelerometro = [UIAccelerometer sharedAccelerometer]; [accelerometro setDelegate:self]; [accelerometro setUpdateInterval:(1.0f/10.0f)]; }
Con queste poche righe di codice creiamo un oggetto di tipo UIAccelerometer, settiamo il suo delegato a self e impostiamo l’intervallo di tempo che passa da una rilevazione della posizione dell’iPhone ad un’altra. Più è frequente questa rilevazione e più saranno precisi i dati catturati dall’accelerometro a discapito di un maggior consumo di risorse del telefono (tipo la batteria).
Aggiungiamo ora il metodo “accelerometer:didAccelerate:” del delegato che si occuperà di rilevare eventuale movimento dell’iPhone e nel caso in cui questo sia maggiore di alcuni parametri che andiamo ad impostare a breve, genererà un numero casuale e lo mostrerà in una UILabel sul display:
- (void) accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration{ int numeroCasuale; numeroCasuale = random() % 100 + 1; if (acceleration.x > 1.5 || acceleration.y > 1.5 || acceleration.z > 1.5) { [lblNumeroCasuale setText:[NSString stringWithFormat:@"%i", numeroCasuale]]; } }
Con il costrutto “if” andiamo a verificare se viene rilevato un movimento maggiore di 1.5 in uno dei 3 assi (x, y, e z) disponibili, grazie all’istruzione “acceleration”. Se questo avviene sarà eseguita la porzione di codice dentro il costrutto, nel nostro caso “[lblNumeroCasuale setText:[NSString stringWithFormat:@"%i", numeroCasuale]];” che mostra il numero casuale precedentemente calcolato tramite la funzione “random() % 100 + 1;” con cui abbiamo settato la variabile di tipo intero (int) “numeroCasuale”.
Se aumentiamo il parametro 1.5 l’utente dovrà muovere in modo più energico il dispositivo affinchè il movimento sia rilevato dall’accelerometro. Al contrario, se lo diminuiamo, basterà un lieve movimento per generare il numero.
Per quanto riguarda il codice è tutto. Apriamo quindi il file “accelRandomViewController.xib” e disegnamo l’interfaccia grafica. Per questo progetto è sufficiente un oggetto UILabel e se volete qualche “abbellimento” inutile ai fini del tutorial, come mostrato in figura:

Cliccate su “File’s Owner” e dalla finestra “Connections” collegate l’UILabel appena inserita con “lblNumeroCasuale” creato da Xcode. A questo punto potete salvare e chiudere Interface Builder. Tornate su Xcode e cliccate su “Build and Run” per testare la vostra applicazione. Ovviamente dovrete installare l’applicazione sul vostro dispositivo anzichè su iPhone Simulator in quanto quest’ultimo, come accennato nei precedenti articoli, ha qualche limitazione. Il risultato finale è quello mostrato qui sotto:

Video Tutorial
by David Pollak
Parte 1
Parte 2

















Si può agitare in “simulatore iPhone” premendo ⌥⌘Z.. se ricordo bene eh..