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
@interface accelRandomViewController : UIViewController {
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
12 Responses to “T#006 – Numero casuale con accelerometro”
29 Marzo 2010
Video Tutorial di programmazione iPhone SDK (in italiano) | devAPP[…] 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. (visualizza l’articolo completo) […]
19 Maggio 2010
AJFTHEWHOSi può agitare in “simulatore iPhone” premendo ⌥⌘Z.. se ricordo bene eh.. 🙂
12 Settembre 2010
Lorenzocome posso generare due numeri che siano diversi fra di loro?
14 Ottobre 2010
» devAPP – Tutorial Set #2[…] (Vai al tutorial completo) […]
26 Novembre 2010
LucaSalve, complimenti per le guide che sono veramente ben fatte.
Volevo solo segnalare 2 cose:
1) Nel file accelRandomViewController.h la label lblNumeroCasuale non viene dichiarata come proprietà:
…
@property (nonatomic, retain) IBOutlet UILabel * lblNumeroCasuale;
…
2) Nel file “accelRandomViewController.m” la label lblNumeroCasuale non viene sintetizzata e deallocata.
…
@synthesize lblNumeroCasuale;
…
– (void)dealloc {
[lblNumeroCasuale dealloc];
[super dealloc];
}
…
6 Dicembre 2010
devAPP – Tutorial Set #2 - iPhone Italia – Il blog italiano sull'Apple iPhone 4, iPhone 3GS e 3G[…] (Vai al tutorial completo) Tags: Dev, DevApp, Rino Picardi, tutorial set devAPP (14 ottobre 2010 11:16) Condividi tweetmeme_style = 'compact'; L'utilizzo del contenuto di questo articolo è soggetto alle condizioni della Licenza Creative Commons. Sono consentite la distribuzione, la riproduzione e la realizzazione di opere derivate per fini non commerciali, purchè venga citata la fonte. […]
28 Gennaio 2011
AlexCon l’sdk 3.2.5, a differenza dei precedenti esempi sul simulatore 4.2 a me non funziona nè premendo ⌥⌘Z. (menu hardware – Gesto agita) nè aggiungendo il codice indicato sopra. (Non da errori) . A voi, AJFTHEWHO e Luca, si?
15 Maggio 2011
MaveDevGrazie per il tutorial funziona perfettamente.
A me non funziona il comando riportato dal precendente utente per simulare lo scuotimento dell’iPhone nel simulatore, pero’ quando installo la app sul device funziona alla grande 🙂
29 Maggio 2011
Andreaciao, come posso riconoscere uno shake debole da uno forte e agire di conseguenza?
11 Gennaio 2012
NicolaCiao a me la prima parte del video non funziona…..
io non riesco a fare la “Connections” tra l’UILabel e “lblNumeroCasuale” creato da Xcode…. volevo verificare dal video come lo avevate dichiarato…. perché a me non funziona….
Grazie
11 Gennaio 2012
Nicolama a qualcuno funziona?
14 Maggio 2012
lucaMi potresti gentilmente dare il download o mi passi via email il programma? GRAZIE MILLE!
Mi salvi la vita!