{"id":697,"date":"2009-11-09T22:26:44","date_gmt":"2009-11-09T21:26:44","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=697"},"modified":"2010-02-17T11:20:11","modified_gmt":"2010-02-17T10:20:11","slug":"t006-numero-casuale-con-accelerometro","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/t006-numero-casuale-con-accelerometro\/","title":{"rendered":"T#006 &#8211; Numero casuale con accelerometro"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/t006IS.jpg\" alt=\"t006IS\" title=\"t006IS\" width=\"80\" height=\"120\" class=\"alignleft size-full wp-image-700\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/t006IS.jpg 320w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/t006IS-200x300.jpg 200w\" sizes=\"auto, (max-width: 80px) 100vw, 80px\" \/> Oggi creeremo un&#8217;applicazione che, sfruttando l&#8217;accelerometro integrato nell&#8217;iPhone, ci permetter\u00e0 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 &#8220;View-based Application&#8221;. Diamo un nome al nostro progetto, ad esempio &#8220;accelRandom&#8221;, scegliamo la posizione dove salvare e proseguiamo. Nel file di interfaccia &#8220;accelRandomViewController.h&#8221; aggiungiamo il protocollo &#8220;UIAccelerometerDelegate&#8221; e creiamo un oggetto IBOutlet UILabel che servir\u00e0 a mostrare a video il numero casuale generato durante l&#8217;esecuzione del programma. Il codice dovr\u00e0 essere come mostrato di seguito:<!--more--><\/p>\n<pre lang=\"objc\" escaped=\"true\">\r\n#import <UIKit\/UIKit.h>\r\n\r\n@interface accelRandomViewController : UIViewController <UIAccelerometerDelegate> {\r\n\tIBOutlet UILabel *lblNumeroCasuale;\r\n}\r\n\r\n@end\r\n<\/pre>\n<p>Apriamo quindi il file di implementazione della nostra classe, &#8220;accelRandomViewController.m&#8221;, e cerchiamo il metodo &#8220;viewDidLoad&#8221; al momento commentato. Togliamo i caratteri che commentano il codice e modifichiamolo come segue:<\/p>\n<pre lang=\"objc\" escaped=\"true\">\r\n- (void)viewDidLoad {\r\n        [super viewDidLoad];\r\n\tUIAccelerometer *accelerometro = [UIAccelerometer sharedAccelerometer];\r\n\t[accelerometro setDelegate:self];\r\n\t[accelerometro setUpdateInterval:(1.0f\/10.0f)];\r\n} \r\n<\/pre>\n<p>Con queste poche righe di codice creiamo un oggetto di tipo UIAccelerometer, settiamo il suo delegato a self e impostiamo l&#8217;intervallo di tempo che passa da una rilevazione della posizione dell&#8217;iPhone ad un&#8217;altra. Pi\u00f9 \u00e8 frequente questa rilevazione e pi\u00f9 saranno precisi i dati catturati dall&#8217;accelerometro a discapito di un maggior consumo di risorse del telefono (tipo la batteria).<\/p>\n<p>Aggiungiamo ora il metodo &#8220;accelerometer:didAccelerate:&#8221; del delegato che si occuper\u00e0 di rilevare eventuale movimento dell&#8217;iPhone e nel caso in cui questo sia maggiore di alcuni parametri che andiamo ad impostare a breve, generer\u00e0 un numero casuale e lo mostrer\u00e0 in una UILabel sul display:<\/p>\n<pre lang=\"objc\" escaped=\"true\">\r\n- (void) accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration{\r\n\tint numeroCasuale;\r\n\tnumeroCasuale = random() % 100 + 1;\r\n\tif (acceleration.x > 1.5 || acceleration.y > 1.5 || acceleration.z > 1.5) {\r\n\t\t[lblNumeroCasuale setText:[NSString stringWithFormat:@\"%i\", numeroCasuale]];\r\n\t}\r\n}\r\n<\/pre>\n<p>Con il costrutto &#8220;if&#8221; andiamo a verificare se viene rilevato un movimento maggiore di 1.5 in uno dei 3 assi (x, y, e z) disponibili, grazie all&#8217;istruzione &#8220;acceleration&#8221;. Se questo avviene sar\u00e0 eseguita la porzione di codice dentro il costrutto, nel nostro caso &#8220;[lblNumeroCasuale setText:[NSString stringWithFormat:@&#8221;%i&#8221;, numeroCasuale]];&#8221; che mostra il numero casuale precedentemente calcolato tramite la funzione &#8220;random() % 100 + 1;&#8221; con cui abbiamo settato la variabile di tipo intero (int) &#8220;numeroCasuale&#8221;.<\/p>\n<p>Se aumentiamo il parametro 1.5 l&#8217;utente dovr\u00e0 muovere in modo pi\u00f9 energico il dispositivo affinch\u00e8 il movimento sia rilevato dall&#8217;accelerometro. Al contrario, se lo diminuiamo, baster\u00e0 un lieve movimento per generare il numero.<\/p>\n<p>Per quanto riguarda il codice \u00e8 tutto. Apriamo quindi il file &#8220;accelRandomViewController.xib&#8221; e disegnamo l&#8217;interfaccia grafica. Per questo progetto \u00e8 sufficiente un oggetto UILabel e se volete qualche &#8220;abbellimento&#8221; inutile ai fini del tutorial, come mostrato in figura:<\/p>\n<p><center><br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/t006IB.jpg\" alt=\"t006IB\" title=\"t006IB\" width=\"320\" height=\"502\" class=\"aligncenter size-full wp-image-699\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/t006IB.jpg 320w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/t006IB-191x300.jpg 191w\" sizes=\"auto, (max-width: 320px) 100vw, 320px\" \/><br \/>\n<\/center><\/p>\n<p>Cliccate su &#8220;File&#8217;s Owner&#8221; e dalla finestra &#8220;Connections&#8221; collegate l&#8217;UILabel appena inserita con &#8220;lblNumeroCasuale&#8221; creato da Xcode. A questo punto potete salvare e chiudere Interface Builder. Tornate su Xcode e cliccate su &#8220;Build and Run&#8221; per testare la vostra applicazione. Ovviamente dovrete installare l&#8217;applicazione sul vostro dispositivo anzich\u00e8 su iPhone Simulator in quanto quest&#8217;ultimo, come accennato nei precedenti articoli, ha qualche limitazione. Il risultato finale \u00e8 quello mostrato qui sotto:<\/p>\n<p><center><br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/t006IS.jpg\" alt=\"t006IS\" title=\"t006IS\" width=\"320\" height=\"480\" class=\"aligncenter size-full wp-image-700\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/t006IS.jpg 320w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/t006IS-200x300.jpg 200w\" sizes=\"auto, (max-width: 320px) 100vw, 320px\" \/><br \/>\n<\/center><\/p>\n<p><center><\/p>\n<h4>Video Tutorial<\/h4>\n<p> by David Pollak<br \/>\n<\/center><\/p>\n<p><center><br \/>\n<strong>Parte 1<\/strong><br \/>\n<object width=\"425\" height=\"344\"><param name=\"movie\" value=\"http:\/\/www.youtube.com\/v\/jL89_p_SJec&#038;hl=it_IT&#038;fs=1&#038;\"><\/param><param name=\"allowFullScreen\" value=\"true\"><\/param><param name=\"allowscriptaccess\" value=\"always\"><\/param><embed src=\"http:\/\/www.youtube.com\/v\/jL89_p_SJec&#038;hl=it_IT&#038;fs=1&#038;\" type=\"application\/x-shockwave-flash\" allowscriptaccess=\"always\" allowfullscreen=\"true\" width=\"425\" height=\"344\"><\/embed><\/object><br \/>\n<\/center><\/p>\n<p><center><br \/>\n<strong>Parte 2<\/strong><br \/>\n<object width=\"425\" height=\"344\"><param name=\"movie\" value=\"http:\/\/www.youtube.com\/v\/D74vnk7IfSk&#038;hl=it_IT&#038;fs=1&#038;\"><\/param><param name=\"allowFullScreen\" value=\"true\"><\/param><param name=\"allowscriptaccess\" value=\"always\"><\/param><embed src=\"http:\/\/www.youtube.com\/v\/D74vnk7IfSk&#038;hl=it_IT&#038;fs=1&#038;\" type=\"application\/x-shockwave-flash\" allowscriptaccess=\"always\" allowfullscreen=\"true\" width=\"425\" height=\"344\"><\/embed><\/object><br \/>\n<\/center><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Oggi creeremo un&#8217;applicazione che, sfruttando l&#8217;accelerometro integrato nell&#8217;iPhone, ci permetter\u00e0 di generare e visualizzare in una UILabel&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[39,5,4,40,1,23],"class_list":["post-697","post","type-post","status-publish","format-standard","hentry","category-tutorial-pratici","tag-accelerometro","tag-objective-c","tag-programmazione","tag-random","tag-tutorial-pratici","tag-xcode"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/697","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=697"}],"version-history":[{"count":30,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/697\/revisions"}],"predecessor-version":[{"id":2164,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/697\/revisions\/2164"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=697"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=697"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=697"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}