{"id":3831,"date":"2010-07-07T14:54:13","date_gmt":"2010-07-07T12:54:13","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=3831"},"modified":"2010-07-07T14:54:13","modified_gmt":"2010-07-07T12:54:13","slug":"t062-mostrare-un-oggetto-in-una-vista-in-una-posizione-a-random","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/t062-mostrare-un-oggetto-in-una-vista-in-una-posizione-a-random\/","title":{"rendered":"T#062 &#8211; Mostrare un Oggetto in una Vista in una posizione a Random"},"content":{"rendered":"<p><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/07\/Schermata-2010-07-07-a-12.45.41.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/07\/Schermata-2010-07-07-a-12.45.41.png\" alt=\"\" width=\"97\" height=\"183\" class=\"alignleft size-full wp-image-3969\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/07\/Schermata-2010-07-07-a-12.45.41.png 389w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/07\/Schermata-2010-07-07-a-12.45.41-159x300.png 159w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/07\/Schermata-2010-07-07-a-12.45.41-79x150.png 79w\" sizes=\"auto, (max-width: 97px) 100vw, 97px\" \/><\/a> Salve ragazzi, sono David Pollak e oggi in questo tutorial vi far\u00f2 vedere come far apparire un oggetto in una posizione <em>random<\/em> all&#8217;interno della vostra View. Tutto questo vi potr\u00e0 tornare utile, ad esempio, nella creazione di giochi o altri tipi di applicazioni ,proprio recentemente, infatti, ho usato questo codice che mi \u00e8 servito per realizzare un semplice giochino per iPad che presto vedr\u00e0 luce in AppStore. Il codice che sto per mostrarvi \u00e8 abbastanza semplice da capire: in parole povere usiamo 2 file .txt contenenti numeri da 0 a 320 in uno, e da 0 a 480 l&#8217;altro (su iPad da 0 a 768 e da 0 a 1024), questi sono di fatto i pixel della risoluzione dei nostri devices da cui estrarremo casualmente un numero per file da usare nei <strong>2 assi (x ed y)<\/strong>. Potrete posizionare qualsiasi tipo di oggetto grafico (bottone, immagine, etc). Oggi andremo a posizionare una piccola immagine.<!--more--><\/p>\n<h4>Partiamo con il nostro progetto Xcode<\/h4>\n<p>Prima di tutto dobbiamo creare i 2 file di testo <strong>.txt<\/strong> con tutti i pixels possibili, io ne ho gi\u00e0 usati due per i miei fini quindi faccio che allegarveli qui, non crediate che li abbia scritti io, ho trovato un utilissimo sito che lo ha fatto al posto mio \ud83d\ude1b !<\/p>\n<p><a href='http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/07\/fattoriX-iphone.txt' target=\"_blank\">Fattori X iPhone<\/a><br \/>\n<a href='http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/07\/fattoriY-iphone.txt' target=\"_blank\">Fattori Y iPhone<\/a><\/p>\n<p><a href='http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/07\/fattoriX-ipad.txt' target=\"_blank\">Fattori X iPad<\/a><br \/>\n<a href='http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/07\/fattoriY-ipad.txt' target=\"_blank\">Fattori Y iPad<\/a><\/p>\n<p>Una volta scaricati i file apriamo XCode, creiamo un nuovo progetto di tipo &#8220;view-based application&#8221; che chiameremo &#8220;RandomPos&#8221; e salviamolo da qualche parte (sulla scrivania andr\u00e0 benissimo). Trascinate quindi i due file con i fattori x e y nella cartella <em>Resources<\/em> del vostro progetto <em>spuntando<\/em> l&#8217;opzione &#8220;Copy items into destination group&#8217;s folder (if needed)&#8221;.<\/p>\n<p>Passiamo quindi a scrivere un po&#8217; di codice iniziando dal file di intestazione (.h). Dichiariamo quindi variabili ed oggetti:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n#import  <UIKit\/UIKit.h>\r\n\r\n@interface RandomPosViewController : UIViewController {\r\n\tIBOutlet UIImageView *immagine;\r\n\tNSMutableArray *fattoriX;\r\n\tNSMutableArray *fattoriY;\r\n\tfloat x;\r\n\tfloat y;\r\n\tNSString *stringa;\r\n\tNSString *stringa02;\r\n}\r\n\r\n- (IBAction)cambiaPosizione;\r\n\r\n@end\r\n<\/pre>\n<p>Abbiamo semplicemente dichiarato un&#8217;<em>UIImageView<\/em>, due <em>array<\/em> contenenti i vari fattori, 2 variabili di tipo <strong>float<\/strong> (x,y), due <em>NSString<\/em> che ci serviranno per randomizzare gli elementi provenienti dai due file di testo (.txt), e logicamente un&#8217;<em>IBAction<\/em> per far cambiare la posizione alla nostra immagine.<\/p>\n<p>Come immagine ho creato una sempicissima pallina che vi allego per comodit\u00e0:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/07\/immagine.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/07\/immagine.png\" alt=\"\" width=\"70\" height=\"70\" class=\"aligncenter size-full wp-image-3964\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/07\/immagine.png 70w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/07\/immagine-64x64.png 64w\" sizes=\"auto, (max-width: 70px) 100vw, 70px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Ed ora iniziamo ad implementare un po&#8217; di codice. Apriamo il file .m e modifichiamolo come segue:<\/p>\n<p>Prima di tutto scommentiamo il metodo <strong>viewDidLoad<\/strong> che si trova in basso, togliendo semplicemente \/* dall&#8217;inizio e *\/ dalla fine, vi accorgerete che il testo da verde assumer\u00e0 i classici colori di XCode.<\/p>\n<p>A questo punto andremo a modificare il metodo in questo modo:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n- (void)viewDidLoad {\r\n    [super viewDidLoad];\r\n\t\r\n\tNSBundle *bundle = [NSBundle mainBundle];\r\n\tNSString *percorso = [bundle pathForResource:@\"fattoriX-iphone\" ofType:@\"txt\"];\t\r\n\tNSString *contenuto = [NSString stringWithContentsOfFile:percorso encoding:NSUTF8StringEncoding error:nil];\r\n\tfattoriX = [[NSMutableArray alloc] initWithArray:[contenuto componentsSeparatedByString:@\"\\n++\"]];\r\n\t\r\n\tNSBundle *bundle2 = [NSBundle mainBundle];\r\n\tNSString *percorso2 = [bundle2 pathForResource:@\"fattoriY-iphone\" ofType:@\"txt\"];\t\r\n\tNSString *contenuto2 = [NSString stringWithContentsOfFile:percorso2 encoding:NSUTF8StringEncoding error:nil];\r\n\tfattoriY = [[NSMutableArray alloc] initWithArray:[contenuto2 componentsSeparatedByString:@\"\\n++\"]];\r\n}\r\n<\/pre>\n<p>Come potete notare abbiamo inserito la stessa cosa due volte, perch\u00e8 ci\u00f2 che stiamo facendo \u00e8 importare tutti gli elementi contenuti nei nostri file .txt verso le due <em>NSMutableArray<\/em> per poi utilizzarli. Analizzeremo il primo.<br \/>\nAbbiamo dichiarato un oggetto di tipo <em>NSBundle<\/em> indicandolo come <em>mainBundle<\/em>, ovvero diciamo di andare a prendere  il file nella directory principale; in seguito con l&#8217;oggetto percorso di tipo NSString, diamo il nome ed il formato del file che prendiamo e con l&#8217;altra NSString creiamo una stringa che prende il contenuto del file nel percorso con l&#8217;encoding <em>NSUTF8StringEncoding<\/em>, poi settiamo l&#8217;errore su nil, dato che non ci interessa. Nell&#8217;ultima riga di codice inizializziamo l&#8217;array <em>fattoriX<\/em> con il contenuto della stringa precedente (contenuto) e diciamo che gli elementi dell&#8217;array sono separati da un invio e <em>++<\/em> (ho messo cosi&#8217; per evitare spiacevoli errori e confusioni).<\/p>\n<p>A questo punto ecco il codice per la nostra azione:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n- (IBAction)cambiaPosizione{\r\n\tint lunghezza = [fattoriX count];\r\n\tint selezione = arc4random() % lunghezza;\r\n\tstringa = [fattoriX objectAtIndex: selezione];\r\n\t\r\n\tx = [stringa floatValue];\r\n\t\r\n\tint lunghezza02 = [fattoriY count];\r\n\tint selezione02 = arc4random() % lunghezza02;\r\n\tstringa02 = [fattoriY objectAtIndex: selezione02];\r\n\t\r\n\ty = [stringa02 floatValue];\r\n\t\r\n\timmagine.center = CGPointMake(x, y);\r\n}\r\n<\/pre>\n<p>Qui andiamo a prendere casualmente i due fattori dagli array in questo modo: con una variabile <em>int<\/em> (lunghezza) contiamo il numero degli elementi dentro all&#8217;array, poi con un&#8217;altra variabile (selezione), prendiamo casualmente utilizzando il metodo <strong>arc4random()<\/strong> un numero dal conteggio fatto in precendenza e abbiniamo il numero all&#8217;elemento che poi inseriamo in una NSString (stringa). Cosi&#8217; abbiniamo le variabili float al valore della NSString.<br \/>\nCome ultima cosa, impostiamo le coordinate del centro della nostra immagine inserendo le 2 variabili.<\/p>\n<p>Con il codice abbiamo finito! Passiamo all&#8217;interfaccia grafica.<\/p>\n<h4>Creiamo l&#8217;interfaccia grafica con Interface Builder<\/h4>\n<p>Apriamo il file .xib e creiamo la nostra semplice interfaccia grafica. Inserite un <em>RoundedRectButton<\/em> che collegherete all&#8217;azione cambiaPosizione ed un&#8217;UIImageView che collegherete all&#8217;outlet immagine.<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/07\/Schermata-2010-07-07-a-12.45.23.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/07\/Schermata-2010-07-07-a-12.45.23.png\" alt=\"\" width=\"634\" height=\"502\" class=\"aligncenter size-full wp-image-3970\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/07\/Schermata-2010-07-07-a-12.45.23.png 634w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/07\/Schermata-2010-07-07-a-12.45.23-300x237.png 300w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/07\/Schermata-2010-07-07-a-12.45.23-150x118.png 150w\" sizes=\"auto, (max-width: 634px) 100vw, 634px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Abbiamo finito, salviamo tutto, clicchiamo su &#8220;Build and Run&#8221; ed ecco la nostra nuova app!<\/p>\n<p>Cliccate sul bottone e vedrete che l&#8217;immagine si spostera&#8217; casualmente.<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/07\/Schermata-2010-07-07-a-12.45.41.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/07\/Schermata-2010-07-07-a-12.45.41.png\" alt=\"\" width=\"389\" height=\"733\" class=\"aligncenter size-full wp-image-3969\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/07\/Schermata-2010-07-07-a-12.45.41.png 389w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/07\/Schermata-2010-07-07-a-12.45.41-159x300.png 159w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/07\/Schermata-2010-07-07-a-12.45.41-79x150.png 79w\" sizes=\"auto, (max-width: 389px) 100vw, 389px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Spero che il tutorial vi sia piaciuto e vi sia stato utile, alla prossima !<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Salve ragazzi, sono David Pollak e oggi in questo tutorial vi far\u00f2 vedere come far apparire un&#8230;<\/p>\n","protected":false},"author":40,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[308,199,280,306,307,5,292,40,1],"class_list":["post-3831","post","type-post","status-publish","format-standard","hentry","category-tutorial-pratici","tag-arc4random","tag-david-pollak","tag-game-development","tag-nsbundle","tag-nsutf8stringencoding","tag-objective-c","tag-posizione","tag-random","tag-tutorial-pratici"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/3831","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\/40"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=3831"}],"version-history":[{"count":18,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/3831\/revisions"}],"predecessor-version":[{"id":3978,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/3831\/revisions\/3978"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=3831"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=3831"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=3831"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}