{"id":948,"date":"2009-11-23T21:18:37","date_gmt":"2009-11-23T20:18:37","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=948"},"modified":"2009-12-14T16:15:46","modified_gmt":"2009-12-14T15:15:46","slug":"t011-rileviamo-i-movimenti-delliphone","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/t011-rileviamo-i-movimenti-delliphone\/","title":{"rendered":"T#011 &#8211; Rileviamo i movimenti dell&#8217;iPhone"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/t011_IS.jpg\" alt=\"t011_IS\" title=\"t011_IS\" width=\"80\" height=\"120\" class=\"alignleft size-full wp-image-951\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/t011_IS.jpg 320w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/t011_IS-200x300.jpg 200w\" sizes=\"auto, (max-width: 80px) 100vw, 80px\" \/> Oggi vedremo come rilevare, grazie all&#8217;accelerometro integrato in ogni dispositivo, il movimento del nostro iPhone. I dati che andremo a leggere sono quelli riferiti ai 3 assi principali x, y e z dell&#8217;iPhone, che combinati insieme ci permettono di controllare l&#8217;esatto orientamento del nostro dispositivo nello spazio. Questo pu\u00f2 tornare utile per un&#8217;infinit\u00e0 di diverse applicazioni, ad esempio come metodo di controllo per i videogiochi, alternativo ai classici tasti di un gamepad tradizionale. Potremo in questo modo controllare ad esempio lo sterzo di una macchina tramite gesti naturali o variare l&#8217;inclinazione di un piano dove pu\u00f2 liberamente muoversi una pallina facendole evitare eventuali ostacoli.<!--more--><\/p>\n<p>Con questo tutorial ci limiteremo per\u00f2 a mostrare tramite 3 UILabel, i valori letti e a controllare l&#8217;attributo &#8220;progress&#8221; di tre oggetti di tipo &#8220;UIProgressView&#8221;. Di seguito uno schema degli assi di rotazione dell&#8217;iPhone:<\/p>\n<p><center><br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-949\" title=\"assi_iPhone\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/assi_iPhone.png\" alt=\"assi_iPhone\" width=\"387\" height=\"409\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/assi_iPhone.png 387w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/assi_iPhone-283x300.png 283w\" sizes=\"auto, (max-width: 387px) 100vw, 387px\" \/><br \/>\n<\/center><\/p>\n<p>Iniziamo con il nostro tutorial. Apriamo Xcode, creiamo un nuovo progetto e dall&#8217;elenco dei template disponibili scegliamo &#8220;View-based Application&#8221;. Diamo un nome alla nostra applicazione, ad esempio &#8220;myAccel&#8221;, scegliamo dove salvare il progetto e andiamo avanti.<\/p>\n<p>Apriamo il file &#8220;myAccelViewController.h&#8221; e inseriamo il seguente codice:<\/p>\n<pre lang=\"objc\" escaped=\"true\">\r\n#import <UIKit\/UIKit.h>\r\n\r\n@interface myAccelViewController : UIViewController <UIAccelerometerDelegate>{\r\n\tIBOutlet UILabel *xLabel;\r\n\tIBOutlet UILabel *yLabel;\r\n\tIBOutlet UILabel *zLabel;\r\n\t\r\n\tIBOutlet UIProgressView *xProgress;\r\n\tIBOutlet UIProgressView *yProgress;\r\n\tIBOutlet UIProgressView *zProgress;\r\n}\r\n\r\n@property (nonatomic, retain) IBOutlet UILabel *xLabel;\r\n@property (nonatomic, retain) IBOutlet UILabel *yLabel;\r\n@property (nonatomic, retain) IBOutlet UILabel *zLabel;\r\n\r\n@property (nonatomic, retain) IBOutlet UIProgressView *xProgress;\r\n@property (nonatomic, retain) IBOutlet UIProgressView *yProgress;\r\n@property (nonatomic, retain) IBOutlet UIProgressView *zProgress;\r\n\r\n@end\r\n<\/pre>\n<p>Come vedete abbiamo innanzitutto aggiunto il protocollo &#8220;UIAccelerometerDelegate&#8221;, dopodich\u00e8 abbiamo dichiarato sei oggetti IBOutlet, tre di tipo UILabel e tre di tipo UIProgressView. Collegheremo questi oggetti ai rispettivi che andremo a disegnare tramite Interface Builder. Abbiamo inoltre dichiarato le &#8220;property&#8221; di questi sei oggetti, in modo da poter utilizzare tranquillamente tutte le propriet\u00e0 e i metodi dei nostri oggetti nel resto del programma.<\/p>\n<p>Salviamo, apriamo il file &#8220;myAccelViewController.m&#8221; e iniziamo a scrivere il codice vero e proprio che far\u00e0 funzionare il nostro programma. Iniziamo a scrivere la seguente riga di codice:<\/p>\n<pre lang=\"objc\" escaped=\"true\">\r\n@synthesize xLabel, yLabel, zLabel, xProgress, yProgress, zProgress;\r\n<\/pre>\n<p>Grazie a questa istruzione potremo usare tutte le &#8220;caratteristiche&#8221; offerte dagli oggetti dichiarati nel file di intestazione. Togliamo i caratteri che commentano il metodo &#8220;viewDidLoad&#8221; e modifichiamolo come segue:<\/p>\n<pre lang=\"objc\" escaped=\"true\">\r\n- (void)viewDidLoad {\r\n    [super viewDidLoad];\r\n    [[UIAccelerometer sharedAccelerometer] setUpdateInterval:(1.0f\/15.0f)];\r\n    [[UIAccelerometer sharedAccelerometer] setDelegate:self\r\n}\r\n<\/pre>\n<p>Cos\u00ec facendo non facciamo altro che impostare l&#8217;intervallo di tempo tra una rilevazione di un movimento e un&#8217;altra e settare il delegato dell&#8217;accelerometro a &#8220;self&#8221;. Ora non resta che implementare il codice che ad ogni lettura di dati dall&#8217;accelerometro, mostri il valore letto nelle etichette x, y e z e imposti inoltre tale valore nella propriet\u00e0 &#8220;progress&#8221; delle &#8220;UIProgressView&#8221; in modo da avere un ritorno visivo del movimento rilevato.<\/p>\n<pre lang=\"objc\" escaped=\"true\">\r\n-(void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration{\r\n\txLabel.text = [[NSString alloc] initWithFormat:@\"%f\", acceleration.x];\r\n\tyLabel.text = [[NSString alloc] initWithFormat:@\"%f\", acceleration.y];\r\n\tzLabel.text = [[NSString alloc] initWithFormat:@\"%f\", acceleration.z];\r\n\t\r\n\txProgress.progress = ABS(acceleration.x);\r\n\tyProgress.progress = ABS(acceleration.y);\r\n\tzProgress.progress = ABS(acceleration.z);\r\n}\r\n<\/pre>\n<p>Con il codice abbiamo terminato, possiamo quindi salvare e aprire Interface Builder per disegnare l&#8217;interfaccia grafica facendo doppio-click sul file &#8220;myAccelViewController.xib&#8221;. Trasciniamo nella vista 3 UILabel che useremo come etichette, modificando la loro propriet\u00e0 &#8220;Text&#8221; in &#8220;X:&#8221;, &#8220;Y:&#8221; e &#8220;Z:&#8221;. Inseriamo quindi nella view altre 3 UILabel e 3 UIProgressView. Clicchiamo su &#8220;File&#8217;s Owner&#8221; e tramite la finestra &#8220;My Accel View Controller Connections&#8221; effettuiamo i rispettivi collegamenti tra questi ultimi 6 oggetti e i rispettivi creati tramite Xcode.<\/p>\n<p>Dovreste ottenere una vista simile alla seguente:<\/p>\n<p><center><br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/t011_IB.jpg\" alt=\"t011_IB\" title=\"t011_IB\" width=\"320\" height=\"502\" class=\"aligncenter size-full wp-image-950\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/t011_IB.jpg 320w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/t011_IB-191x300.jpg 191w\" sizes=\"auto, (max-width: 320px) 100vw, 320px\" \/><br \/>\n<\/center><\/p>\n<p>Potete salvare e chiudere Interface Builder. Da Xcode clicchiamo su &#8220;Build and Run&#8221; e testiamo la nostra applicazione. Per poter rilevare i movimenti occorrer\u00e0 installare l&#8217;applicazione sul vostro dispositivo in quanto, le ovvie limitazione dell&#8217;iPhone Simulator, non permettono la rilevazione di movimenti. In basso uno screenshot dell&#8217;applicazione in esecuzione:<\/p>\n<p><center><br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/t011_IS.jpg\" alt=\"t011_IS\" title=\"t011_IS\" width=\"320\" height=\"480\" class=\"aligncenter size-full wp-image-951\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/t011_IS.jpg 320w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/t011_IS-200x300.jpg 200w\" sizes=\"auto, (max-width: 320px) 100vw, 320px\" \/><br \/>\n<\/center><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Oggi vedremo come rilevare, grazie all&#8217;accelerometro integrato in ogni dispositivo, il movimento del nostro iPhone. I dati&#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,14,1,48,23],"class_list":["post-948","post","type-post","status-publish","format-standard","hentry","category-tutorial-pratici","tag-accelerometro","tag-objective-c","tag-programmazione","tag-sdk","tag-tutorial-pratici","tag-uiprogressview","tag-xcode"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/948","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=948"}],"version-history":[{"count":10,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/948\/revisions"}],"predecessor-version":[{"id":1320,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/948\/revisions\/1320"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=948"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=948"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=948"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}