• Programmazione Android
  • CORSI ONLINE
  • Web Agency

Logo

Corsi di programmazione web e mobile online
Navigation
  • Home
  • CORSI ONLINE
  • Tutorial Pratici
  • GUIDE COMPLETE
    • Corso completo di C
    • Corso videogame con Cocos2d
    • Programmazione Cocoa Touch
  • Sezioni
    • Libri e manuali
    • Tips & Tricks
    • Risorse utili
    • Strumenti di Sviluppo
    • Materiale OpenSource
    • Framework
    • Guide Teoriche
    • Guide varie
    • Grafica e Design
    • iPad
    • News
    • Video Tutorial
    • Windows Phone
  • Pubblicità
  • About
    • Chi siamo
    • Pubblicazioni
    • Collabora
    • Sostieni devAPP

T#062 – Mostrare un Oggetto in una Vista in una posizione a Random

By bebus77 | on 7 Luglio 2010 | 9 Comments
Senza categoria

Salve ragazzi, sono David Pollak e oggi in questo tutorial vi farò vedere come far apparire un oggetto in una posizione random all’interno della vostra View. Tutto questo vi potrà tornare utile, ad esempio, nella creazione di giochi o altri tipi di applicazioni ,proprio recentemente, infatti, ho usato questo codice che mi è servito per realizzare un semplice giochino per iPad che presto vedrà luce in AppStore. Il codice che sto per mostrarvi è 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’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 2 assi (x ed y). Potrete posizionare qualsiasi tipo di oggetto grafico (bottone, immagine, etc). Oggi andremo a posizionare una piccola immagine.

Partiamo con il nostro progetto Xcode

Prima di tutto dobbiamo creare i 2 file di testo .txt con tutti i pixels possibili, io ne ho già 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 😛 !

Fattori X iPhone
Fattori Y iPhone

Fattori X iPad
Fattori Y iPad

Una volta scaricati i file apriamo XCode, creiamo un nuovo progetto di tipo “view-based application” che chiameremo “RandomPos” e salviamolo da qualche parte (sulla scrivania andrà benissimo). Trascinate quindi i due file con i fattori x e y nella cartella Resources del vostro progetto spuntando l’opzione “Copy items into destination group’s folder (if needed)”.

Passiamo quindi a scrivere un po’ di codice iniziando dal file di intestazione (.h). Dichiariamo quindi variabili ed oggetti:

#import  

@interface RandomPosViewController : UIViewController {
	IBOutlet UIImageView *immagine;
	NSMutableArray *fattoriX;
	NSMutableArray *fattoriY;
	float x;
	float y;
	NSString *stringa;
	NSString *stringa02;
}

- (IBAction)cambiaPosizione;

@end

Abbiamo semplicemente dichiarato un’UIImageView, due array contenenti i vari fattori, 2 variabili di tipo float (x,y), due NSString che ci serviranno per randomizzare gli elementi provenienti dai due file di testo (.txt), e logicamente un’IBAction per far cambiare la posizione alla nostra immagine.

Come immagine ho creato una sempicissima pallina che vi allego per comodità:



Ed ora iniziamo ad implementare un po’ di codice. Apriamo il file .m e modifichiamolo come segue:

Prima di tutto scommentiamo il metodo viewDidLoad che si trova in basso, togliendo semplicemente /* dall’inizio e */ dalla fine, vi accorgerete che il testo da verde assumerà i classici colori di XCode.

A questo punto andremo a modificare il metodo in questo modo:

- (void)viewDidLoad {
    [super viewDidLoad];
	
	NSBundle *bundle = [NSBundle mainBundle];
	NSString *percorso = [bundle pathForResource:@"fattoriX-iphone" ofType:@"txt"];	
	NSString *contenuto = [NSString stringWithContentsOfFile:percorso encoding:NSUTF8StringEncoding error:nil];
	fattoriX = [[NSMutableArray alloc] initWithArray:[contenuto componentsSeparatedByString:@"\n++"]];
	
	NSBundle *bundle2 = [NSBundle mainBundle];
	NSString *percorso2 = [bundle2 pathForResource:@"fattoriY-iphone" ofType:@"txt"];	
	NSString *contenuto2 = [NSString stringWithContentsOfFile:percorso2 encoding:NSUTF8StringEncoding error:nil];
	fattoriY = [[NSMutableArray alloc] initWithArray:[contenuto2 componentsSeparatedByString:@"\n++"]];
}

Come potete notare abbiamo inserito la stessa cosa due volte, perchè ciò che stiamo facendo è importare tutti gli elementi contenuti nei nostri file .txt verso le due NSMutableArray per poi utilizzarli. Analizzeremo il primo.
Abbiamo dichiarato un oggetto di tipo NSBundle indicandolo come mainBundle, ovvero diciamo di andare a prendere il file nella directory principale; in seguito con l’oggetto percorso di tipo NSString, diamo il nome ed il formato del file che prendiamo e con l’altra NSString creiamo una stringa che prende il contenuto del file nel percorso con l’encoding NSUTF8StringEncoding, poi settiamo l’errore su nil, dato che non ci interessa. Nell’ultima riga di codice inizializziamo l’array fattoriX con il contenuto della stringa precedente (contenuto) e diciamo che gli elementi dell’array sono separati da un invio e ++ (ho messo cosi’ per evitare spiacevoli errori e confusioni).

A questo punto ecco il codice per la nostra azione:

- (IBAction)cambiaPosizione{
	int lunghezza = [fattoriX count];
	int selezione = arc4random() % lunghezza;
	stringa = [fattoriX objectAtIndex: selezione];
	
	x = [stringa floatValue];
	
	int lunghezza02 = [fattoriY count];
	int selezione02 = arc4random() % lunghezza02;
	stringa02 = [fattoriY objectAtIndex: selezione02];
	
	y = [stringa02 floatValue];
	
	immagine.center = CGPointMake(x, y);
}

Qui andiamo a prendere casualmente i due fattori dagli array in questo modo: con una variabile int (lunghezza) contiamo il numero degli elementi dentro all’array, poi con un’altra variabile (selezione), prendiamo casualmente utilizzando il metodo arc4random() un numero dal conteggio fatto in precendenza e abbiniamo il numero all’elemento che poi inseriamo in una NSString (stringa). Cosi’ abbiniamo le variabili float al valore della NSString.
Come ultima cosa, impostiamo le coordinate del centro della nostra immagine inserendo le 2 variabili.

Con il codice abbiamo finito! Passiamo all’interfaccia grafica.

Creiamo l’interfaccia grafica con Interface Builder

Apriamo il file .xib e creiamo la nostra semplice interfaccia grafica. Inserite un RoundedRectButton che collegherete all’azione cambiaPosizione ed un’UIImageView che collegherete all’outlet immagine.



Abbiamo finito, salviamo tutto, clicchiamo su “Build and Run” ed ecco la nostra nuova app!

Cliccate sul bottone e vedrete che l’immagine si spostera’ casualmente.



Spero che il tutorial vi sia piaciuto e vi sia stato utile, alla prossima !

Share this story:
  • tweet

Tags: arc4randomdavid pollakgame developmentNSBundleNSUTF8StringEncodingObjective-cposizionerandomTutorial Pratici

Recent Posts

  • Parte il percorso programmatori iOS in Swift su devACADEMY.it

    20 Dicembre 2017 - 0 Comment
  • Android, crittografare dati velocemente con Encryption

    24 Settembre 2018 - 0 Comment
  • Sql2o, accesso immediato ai database tramite Java

    3 Settembre 2018 - 0 Comment
  • Okio, libreria per ottimizzare l’input/output in Java

    27 Agosto 2018 - 0 Comment

Related Posts

  • Uno sguardo al runtime Objective-c

    10 Settembre 2013 - 0 Comment
  • Andrea Picchi: Programmare con Objective-C 2.0 per iOS e OS X

    27 Febbraio 2013 - 10 Comments
  • T#107 – Le referenze associative: Aggiungiamo le variabili alle Categorie

    2 Aprile 2012 - 3 Comments

Author Description

Giovane sviluppatore iOS e Web. Mobile Development Director at eveonplay.

9 Responses to “T#062 – Mostrare un Oggetto in una Vista in una posizione a Random”

  1. 7 Luglio 2010

    luca

    …ma, non capisco…
    che utilita’ c’e’ nel dver usare dei file esterni txt che contengono una lista di numeri da 0 a 320 (per la x),
    mettere il contenuto dei txt in array,
    per poi usare la funzione arc4random() che restituisce un intero, andare a leggere nell’array alla posizione dell’array stesso (che guarda caso e’ lo stesso intero, sotto forma di stringa), e poi usare questo in forma di numero (float in questo caso) per settare la posizione della ns UIImageView…

    non ci sono un po’ di passaggi e oggetti inutili?
    arc4random() restituisce numeri
    CGPointMake() vuole numeri come parametri…

  2. 7 Luglio 2010

    Neo

    Interessante, mi serviva qualcosa di simile.. bravo David..

    @luca: mah.. probabilmente voleva mostrare nel tutorial altre funzionalità come l’accesso ai file di testo, in fondo si tratta di tutorial fini a se stessi, non di programmi veri e propri con una logica studiata.. Magari postaci due righe di codice.. che potrebbero tornare utili a tutti (a me in particolare :P)

  3. 7 Luglio 2010

    MacMomo

    Vista la strana “corrispondenza” tra il nome utente dell’autore (bebus77) e il nome con cui si presenta (David Pollak) spero che questo tutorial sia soltanto frutto di una cattiva traduzione, perché così com’è non mi sembra molto utile, anzi.
    Va bene sfruttare il tutorial per mostrare alcune funzionalità particolari, ma in questo caso per fare il tutto bastava una sola riga di codice, invece c’è tutto un insieme di roba inutile e fatta male.

  4. 7 Luglio 2010

    iDev

    Sarebbe sufficiente
    immagine.center = CGPointMake(arc4random()%320, arc4random()%480);
    Se poi volgiamo essere precisi basta mettere una condizione che verifichi se siamo su iPhone od iPad ed un’altra che verifichi i margini, onde evitare di avere metà pallina fuori dallo schermo quando x=0 o x=320 e y=0 o y=480

  5. 7 Luglio 2010

    bebus77

    ragazzi scusate, io l’avevo pensata così, comunque avete ragione, se volete modifico

  6. 7 Luglio 2010

    Tacabriga

    Ma perchè non fate un bel tutorial per le drill down?

    Es. Regioni->citta-vista in dettaglio?

  7. 8 Luglio 2010

    luca

    Ma no aspetta, lasciala pure, ora, come ha scritto Neo i tuoi passaggi in piu’ possono servire per mostrare altre funzioni, l’importante e’ dire chiaramente che lo scopo e’ quello, e non lasciar credere che quello e’ il modo migliore per ottenere lo scopo, nel tuo caso:
    “…come far apparire un oggetto in una posizione random…”, altrimenti si confondono le idee, invece che chiarirle, come dovrebbe fare un tutorial.
    Un altro piccolo “appunto”:
    mi capita spesso di trovare tutorial dove si tralascia la gestione della memoria e mancano del tutto “release” degli oggetti “allocati”.
    Lo dico perche’ ho “studiato” molto sui tutorial, e la gestione della memoria e’ stata la mia “bestia nera” (come per molti neofiti della programmazione “a oggetti”, e devo dire che ho fatto fatica anche perche’ molti tutorial finivano con frasi “e questo e’ tutto quello che vi serve”, “non vi serve altro”, “tutto qui, facile vero?”… senza la minima gestione della memoria…
    Ora io capisco che ogni tutorial si concentra su una piccola parte della programmazione e nn suggerisco di “perder tempo” a spiegare e inserire codice per tutto, pero’ una frase tipo
    “ricordatevi di deallocare la memoria” sarebbero gradite, senno’ davvero si confondono le idee (come e’ successo a me, ma forse sono io che sono “lento” ad apprendere).

    In ogni caso grazie per il tuo e gli altri tutorial, la mia nn voleva essere una critica, ma un chiarimento/aggiunta al tuo esempio, e’ per questo che si da la possibilita’ a tutti di aggiungere “commenti”, non solo per dire “grazie”…

    luca

  8. 29 Settembre 2010

    Matteo

    Ciao a tutti

    Mi sto cimentando solo da poco più di un mese con le app di iphone e Ipad. Forse voi potete aiutarmi. Con la seguente applicazione come posso anche randomizzare le dimensioni della figura?

    Grazie mille

    Matteo

  9. 11 Febbraio 2011

    Fili

    Ma usare una srand con range compreso tra 0 e 320/480? Non sarebbe meglio?

Leave a Reply

Your email address will not be published. Required fields are marked *


*
*

Corso online di programmazione android e java

SEZIONI

  • Android
  • Comunicazioni
  • Contest
  • Corsi ed Eventi
  • Corso completo di C
  • Corso programmazione videogiochi
  • Framework
  • Grafica e Design
  • Guida rapida alla programmazione Cocoa Touch
  • Guide Teoriche
  • Guide varie
  • iPad
  • Le nostre applicazioni
  • Libri e manuali
  • Materiale OpenSource
  • News
  • Pillole di C++
  • Progetti completi
  • Risorse utili
  • Strumenti di Sviluppo
  • Swift
  • Tips & Tricks
  • Tutorial Pratici
  • Video Tutorial
  • Windows Phone

Siti Amici

  • Adrirobot
  • Allmobileworld
  • Apple Notizie
  • Apple Tribù
  • Avvocato360
  • Blog informatico 360°
  • bubi devs
  • fotogriPhone
  • GiovaTech
  • iApp-Mac
  • iOS Developer Program
  • iPodMania
  • MelaRumors
  • Meritocracy
  • SoloTablet
  • TecnoUser
  • Privacy & Cookie Policy
©2009-2018 devAPP - All Rights Reserved | Contattaci
devAPP.it è un progetto di DEVAPP S.R.L. - Web & Mobile Agency di Torino
Str. Volpiano, 54 - 10040 Leini (TO) - C.F. e P.IVA 11263180017 - REA TO1199665 - Cap. Soc. € 10.000,00 i.v.

devACADEMY.it

Vuoi imparare a programmare?

Iscriviti e accedi a TUTTI i corsi con un’unica iscrizione.
Oltre 70 corsi e migliaia di videolezioni online e in italiano a tua disposizione.

ISCRIVITI SUBITO