• 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#053 – TrashApp, come utilizzare le immagini tramite “touch”

By Andrea Busi | on 17 Giugno 2010 | 7 Comments
Senza categoria

Tutorial 053 iphone SDK Trash App Immagini Touch 13 In questo nuovo tutorial dedicato alla programmazione per iPhone SDK realizzeremo un’applicazione che ci darà un’infarinatura sulla gestione delle immagini tramite il tocco. Vedremo, infatti, come creare un finto cestino, in cui potremo trascinare un documento al suo interno,vedremo quindi come ripristinare il file “eliminato”. Ovviamente non andremo a toccare veri file salvati sul nostro dispositivo, si tratterà di una semplice animazione interattiva, nulla di più, giusto per capire come funzionano alcuni metodi legati ai comandi imposti via touchscreen.

1. Definiamo il progetto

Aprimo Xcode, selezioniamo “File -> New Project”. Nel menù che ci appare selezioniamo “View-based Application”, clicchiamo su “Choose…” e immettiamo come nome “TrashApp”, facciamo infine clic su “Save”. Abbiamo così creato il nostro nuovo progetto.


Tutorial 053 iphone SDK Trash App Immagini Touch 01

Prima di fare qualsiasi cosa, inseriamo nel nostro progetto le immagini che ci serviranno. Io utilizzerò le seguenti immagini: due per il cestino e una l’elemento da eliminare (cosa meglio di un logo di Windows? xD):


Tutorial 053 iphone SDK Trash App Immagini Touch 02 Tutorial 053 iphone SDK Trash App Immagini Touch 03 Tutorial 053 iphone SDK Trash App Immagini Touch 04

Trasciniamo quindi le immagini nel progetto XCode e, nel pop-up che ci apparirà, mettiamo la spunta su “Copy items into destination group’s folder (if needed)”. Noterete ora le immagini all’interno del progetto:


Tutorial 053 iphone SDK Trash App Immagini Touch 05

Prima di definire la struttura grafica della nostra applicazione, andiamo a definire i componenti che poi ci serviranno. Apriamo il file “TrashAppViewController.h” e inseriamo le seguenti definizioni:

#import 
 
@interface TrashAppViewController : UIViewController {
    IBOutlet UIImageView *imageLogo;
    IBOutlet UIImageView *imageCestino;
}
 
- (IBAction)ripristina;
 
@end

Abbiamo definito gli elementi necessari: alle righe 4 e 5 due UIImageView, che conterranno il cestino (pieno o vuoto a seconda del caso) e il logo da eliminare. Alla riga 8, infine, abbiamo definito l’azione che ci permetterà di ripristinare il logo dopo la sua eliminazione.

2. Definiamo l’aspetto grafico dell’applicazione

Procediamo, ora, con la creazione della struttura grafica della nostra applicazione. Salviamo il file “TrashAppViewController.h” appena modificato e apriamo quindi “TrashAppViewController.xib”, che avvierà Interface Builder. La finestra è per ora molto semplice e si presenterà così:


Tutorial 053 iphone SDK Trash App Immagini Touch 06

Inseriamo, per prima cosa, gli elementi necessari: due componenti UIImageView e un UIButton.

Attenzione: la prima UIImageView che inserite deve essere quella in basso, altrimenti avrete problemi nelle fasi successive!

Ecco come si presenterà la nostra applicazione:


Tutorial 053 iphone SDK Trash App Immagini Touch 07

Ora dobbiamo collegare i vari componenti alle immagini che abbiamo inserito all’inizio del progetto. Clicchiamo sul primo componente UIImageView (quello più in alto, il secondo che avete inserito!) e apriamo il pannello “Attributes Inspector”. Nel menù a tendina “Images” selezioniamo il file “windows icon.png” e lo vedremo comparire anche nell’applicazione. Spuntiamo, inoltre, la casella “User Interaction Enabled”. Avremo un pannello così impostato:


Tutorial 053 iphone SDK Trash App Immagini Touch 08

Facciamo la stessa cosa per la UIImageView sottostante, selezionando come immagine “TrashIconEmpty.png”, ma senza spuntare “User Interaction Enabled”. Inseriamo all’interno del bottone la scritta “Ripristina logo”, aggiustiamo le dimensioni e la posizione delle due immagini (in modo che i bordi delle UIImageView coincidano con le immagini al loro interno) fino ad avere un risultato come questo:


Tutorial 053 iphone SDK Trash App Immagini Touch 09

Ora non dobbiamo fare alto che collegare gli elementi che abbiamo definito all’inizio di questo tutorial con i componenti all’interno della nostra applicazione. Dal Pannello dei Documenti selezioniamo il “File’s Owner”:


Tutorial 053 iphone SDK Trash App Immagini Touch 10

Se apriamo ora il “Connections Inspector”, dovremmo vedere i seguenti elementi:


Tutorial 053 iphone SDK Trash App Immagini Touch 11

Prendiamo il “pallino” che troviamo a fianco di “imageLogo” e trasciniamolo sul logo di Windows, mentre quello di “imageCestino” sull’immagine del cestino. Colleghiamo, infine, l’azione: il pallino “ripristina:” sul bottone, e nel menù che appare selezioniamo “Touch Up Inside”. Se abbiamo eseguito tutto in maniera corretta avremo un pannello come il seguente:


Tutorial 053 iphone SDK Trash App Immagini Touch 12

Abbiamo concluso questa fase del tutorial. Salviamo tutto e chiudiamo Interface Builder.

3. Implementiamo il movimento del logo

Apriamo il file “TrashAppViewController.h” e dichiarando un paio di elementi che ci serviranno:

#import 
 
@interface TrashAppViewController : UIViewController {
    IBOutlet UIImageView *imageLogo;
    IBOutlet UIImageView *imageCestino;
 
	BOOL cancellato;
}
 
- (IBAction)ripristina;
- (void)cancella;
 
@end

Alla riga 7 abbiamo aggiunto una variabile che ci servirà per controllare se il nostro oggetto è già stato eliminato (quindi, al valore YES corrisponderà il logo eliminato, con NO il nostro logo sarà ancora visibile); lo stesso vale per il metodo “cancella”, che si occuperà invece dell’animazione legata all’eliminazione del logo.

Implementiamo ora i metodi necessari. Apriamo il file “TrashAppViewController.m” e inseriamo il seguente codice:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
	UITouch *touch = [[event allTouches] anyObject];
	if ([touch view] == imageLogo) {
		imageLogo.center = [touch locationInView:self.view];
	}
}
 
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
	if (CGRectContainsRect([imageCestino frame], [imageLogo frame])){
		imageCestino.image = [UIImage imageNamed:@"TrashIconFull.png"];
		[self cancella];
	}
}
 
- (void)cancella{
	cancellato = YES;
	[UIView beginAnimations:nil context:NULL];
	[UIView setAnimationDuration:0.5];
	imageLogo.transform = CGAffineTransformMakeScale(.001, .001);
	[UIView commitAnimations];
}

Abbiamo definito tre metodi, che si occuperanno del movimento del logo di Windows e della sua cancellazione. vediamoli nel dettaglio:

  • touchesMoved, (dalla riga 1 alla 6) In questo metodo, salviamo nella variabile “touch” l’evento che l’utente compie toccando un qualsiasi oggetto della nostra applicazione (riga 2). Controlliamo, poi, che l’oggetto toccato corrisponda a “imageLogo” (riga 3), cioè al logo di Windows: se l’oggetto è proprio quello, teniamo traccia del centro dell’oggetto (che nel frattempo viene mosso dall’utente) con la posizione del dito sullo schermo (riga 4). Ovvero, è come se spostassimo fisicamente l’oggetto con il nostro dito e lo muovessimo su un piano.
  • touchesEnded, (dalla riga 8 alla 18) In questo metodo diciamo semplicemente che se il frame di “imageLogo” (ovvero il logo di Windows) è contenuto in quello del cestino (riga 9), deve essere chiamato il metodo “cancella”, che si occuperà dell’animazione della cancellazione (riga 11). Prima di chiamare tale metodo, inoltre, cambiamo l’immagine del cestino vuoto con quella del cestino pieno (riga 10). Se il logo, invece, non è stato spostato sopra il cestino, eseguiamo una semplice animazione, che riporta l’immagine al centro della vista (dalla riga 13 alla 16).
  • cancella, (dalla riga 20 alla 26) In questo metodo definiamo l’animazione che avrà il logo di Windows quando verrà sposato sopra il cestino. Alla riga 16 cambiamo il valore della variabile “cancella”, in modo da sapere che il logo è stato eliminato. Alla riga 17 definiamo il punto di partenza della nostra animazione, mentre con l’istruzione successiva ne definiamo la durata. La riga 19 è l’animazione vera e propria, che farà scomparire il logo. Con l’ultima istruzione, infine, definiamo la fine dell’animazione.

4. Il ripristino del logo

Abbiamo quasi terminato la nostra applicazione, manca solo la definizione dell’azione “ripristina:”. Tale metodo è già stato definito da Interface Builder, quindi noi dobbiamo solo scrivere il codice al suo interno. Ecco le istruzioni da inserire:

- (IBAction)ripristina {
	if (cancellato) {
		[UIView beginAnimations:nil context:NULL];
		[UIView setAnimationDuration:0.5];
		imageLogo.transform = CGAffineTransformIdentity;
		imageCestino.image = [UIImage imageNamed:@"TrashIconEmpty.png"];
		imageLogo.center = CGPointMake(155.0, 100.0);
		[UIView commitAnimations];
	}
}

Questo metodo è speculare a “cancella”, in quanto dobbiamo eseguire l’animazione inversa! Andremo, quindi, ad eseguire un’animazione, che porterà il logo dal cestino (in cui si trova) alla posizione originale (o quasi, in quanto è definita in modo arbitrario da noi, alla riga 7).

Clicchiamo ora su “Build and Go!”, e testiamo la nostra applicazione funzionante!

Nota: se non avete l’animazione, controllate due cose. La prima è che il logo di Windows non si nasconda dietro il cestino. Se così fosse, non avete seguito quello che vi ho detto nella costruzione dell’Interfaccia!! Ma non disperate, vi basterà entrare in Interface Builder e scambiare l’ordine dei due componenti (ovviamente invertendo anche le immagini e le proprietà associate). La seconda, invece, che la dimensione del logo (sempre in Interface Builder) e del componente UIImageView non sia maggiore di quella del cestino, altrimenti il controllo che abbiamo scritto nel metodo “touchesEnded” fallisce e non viene lanciata l’animazione. Anche in questo caso ci basta entrare in Interface Builder e ridimensionare il componente UIImageView.


Tutorial 053 iphone SDK Trash App Immagini Touch 13 Tutorial 053 iphone SDK Trash App Immagini Touch 14

Se avete problemi con il tutorial, questo è il nostro file di progetto.

Share this story:
  • tweet

Tags: andrea busigestione immagini iPhonetouchesEndedtouchesMovedTutorial Praticitutorial Xcode

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

  • “Tutorial pratici per iOS SDK” si aggiorna alla versione 2.1

    10 Maggio 2012 - 1 Comment
  • Xcode 4: Distribuzione Ad Hoc delle applicazioni iPhone e iPad

    10 Gennaio 2012 - 20 Comments
  • Tutorial pratici per iOS SDK: disponibile la versione 2.0 aggiornata a iOS 5 e XCode 4.2

    16 Novembre 2011 - 6 Comments

Author Description

23 anni, è studente di Ingegneria Informatica presso l’Università di Bergamo (laurea Magistrale). Appassionato d’informatica sin da bambino, conosce molto bene il C++, Java e l'ObjectiveC, con cui ormai programma con successo da qualche anno. Ha già scritto un ebook “Tutorial pratici per iPhone SDK”, che ha avuto un ottimo successo, e gestisce da quasi due anni BubiDevs, un piccolo blog che ha dato l’ispirazione anche a devAPP.

7 Responses to “T#053 – TrashApp, come utilizzare le immagini tramite “touch””

  1. 19 Luglio 2010

    Andrea

    Complimenti, bellissimo articolo!

    Volevo chiedere: Se invece di rimpicciolire il logo con la trasformazione affine volessi renderlo trasparente, come si potrebbe fare?
    Credo bisognerebbe agire sull’alpha, ma non so da dove cominciare!

    Grazie

  2. 19 Luglio 2010

    Andrea Busi


    Andrea:

    Complimenti, bellissimo articolo!

    Volevo chiedere: Se invece di rimpicciolire il logo con la trasformazione affine volessi renderlo trasparente, come si potrebbe fare?
    Credo bisognerebbe agire sull’alpha, ma non so da dove cominciare!

    Grazie

    ciao, grazie dei complimenti! 😛

    se vuoi rendere il logo trasparente ti basta modificare l’animazione del metodo cancella così:

    	[UIView setAnimationDuration:0.5];
    	imageLogo.alpha = 0.0;
    	[UIView commitAnimations];
    

    Poi inserirai solo l’istruzione per mettere l’alpha uguale a 1 nel metodo di ripristino 😉

  3. 9 Aprile 2011

    Tommaso

    complimenti per il sito!

    se avessi più di un oggetto da muovere come dovrei fare?
    grazie ciao:)

  4. 12 Aprile 2011

    Andrea Busi


    Tommaso:

    complimenti per il sito!

    se avessi più di un oggetto da muovere come dovrei fare?
    grazie ciao:)

    procedi allo stesso modo, solamente controlli quale oggetto è stato mosso. Ad esempio nel “” avresti:

    if ([touch view] == imageLogo) {
    		imageLogo.center = [touch locationInView:self.view];
    	} else if ([touch view] == imageDue) {
    		imageDue.center = [touch locationInView:self.view];
    }
    

    e così via 😉

  5. 27 Maggio 2011

    Daniele Ratti

    Vorrei aggiungere che se si vuole che l’icona venga mossa senza spostare il centro ogni volta il codice è il seguente:

    //metti CGPoint offset; nel .h
    //nel .m

    – (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [[event allTouches] anyObject];
    if ([touch view] == imageLogo) {
    CGPoint loc = [touch locationInView:self.view];
    CGPoint fram = imageLogo.center;
    offset = CGPointMake(loc.x-fram.x, loc.y-fram.y);
    }
    }

    – (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [[event allTouches] anyObject];
    if ([touch view] == imageLogo) {
    CGPoint loc = [touch locationInView:self.view];
    imageLogo.center = CGPointMake(loc.x-offset.x, loc.y-offset.y);
    }
    }

  6. 13 Dicembre 2011

    Giuseppe Ferrari

    Mi potresti fare una descrizione per fare una semplice app, cioe’ da un’immagine di sfondo con strumenti musicali attivarli con touch screen per udire il suono corrispondente. Grazie Giuseppe.

  7. 6 Aprile 2013

    DevTutorial #3 – TrashApp, come utilizzare le immagini - Bubi Devs

    […] Leggi il tutorial completo su devAPP […]

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