Loreto fra arte, business e un po’ di spiritualità…
Eccomi eccomi, sono tornato! Scusate ma gli impegni primaverili sono veramente pressanti ma vi assicuro che tornerò presto a scrivere sul blog sopratutto di web applicaiton e piccoli tutorials.
Ieri sono stato a Loreto e ho fatto un pò di foto, vi presento l’albulm:
Loreto fra arte, business e un po’ di spiritualità…
Spero sia di vostro gradimento!
Ciao a presto!
The Pirate Bay di nuovo bloccato!!!
Non sono un fanatico dello scaricamento massiccio, se mi piace un disco me lo compro su iTunes ma una cosa proprio non la sopporto, la censura!
Purtroppo questo stato in cui vivo e di cui quasi mi vergogno non solo ci obbliga a pagare una tassa ingiusta ed iniqua chiamata “equocompenso” ma ci oscura anche un sito come thepiratebay.org, di fatto applicando una vera e propria censura su interntet, robba da Cina!!!
Bene ragazzi sapete come si fa ad aggirare tale censura?
Eccovi serviti! Impostate i server DNS manualmente scegliendo fra quelli liberi come quelli di google 8.8.8.8 e 8.8.4.4 oppure quelli di openDNS , cercate con google!
Se ciò non dovesse bastare (ehehhe lo stato italiano potrebbe oscurare mezza internet per riuscire nel suo intento) usate un proxy anonimo come ad esempio http://anonymouse.org! Se cercate ce ne sono molti altri con servizi differenti gratuiti o dal costo irrisorio, che vi consentono di navigare in modo anonimo e sicuro.
Vi consiglio di dare uno sguardo anche a freenet (googolate please!) per capire l’entità del problema e la soluzione!
iPad, finalmente!
Finalmente dopo anni ed anni di rumors arriva il tablet della Apple! Si chiama iPad, ed è praticamente il fratello maggiore dell’iPhone.

Apple iPad
Ampio display, ultra sottile, con tecnologia sia wi-fi che 3G e dotato del processore Apple A4 da 1Ghz utilizza lo stesso sistema operativo dell’iPhone e supporta nativamente tutte le 140.000 applicazioni presenti su AppStore. E’ disponibile fin da subito anche lo SDK iPhone OS 3.2 che permette, promette Apple, con poche righe di codice di adattare le App iPhone esistenti allo schermo più grande dell’iPad.
L’iPad si propone oltre che per internet anche come strumento per le attività di video scrittura, fogli di calcolo, presentazioni, riproduttore di media, giochi e ebook reader. Propio per far concorrenza ad Amazon la Apple ha creato un’apposita app, ibook, con tanto di store on-line per l’acquisto dei libri digitali, sempre secondo l’ormai collaudato stile iTunes Store – AppStore. Va segnalata, inoltre, la possibilità di acquistare una nuova versione di iWork appositamente realizzata per funzionare sull’iPad al prezo di 9.99 US$ per singola applicazione.

iBook - ebook Reader
Che dire? Il dispositivo mi piace si potrebbe usare anche sul mercato business, magari sfruttando le Web App che tanto bene si adattano al Browser Safari integrato. Insomma in attesa di provarlo vi lascio col prezzo di partenza 499 US$ per la versione da 16G solo wifi.
Ciao
Sincronizzazione iPhone – iPhoto, errore -50
Ragazzi dovete sapere che ieri ho partecipato ad un convegno molto interessante sulla sicurezza informatica e alla fine dei lavori è stato estratto fra tutti i partecipanti un Apple iPhone 3GS da 16 GB e indovinate un pò! The winner is Stefano Perinetti. Sta mattina tutto ganzo accendo il mac aggiorno iPhoto e poi procedo alla sincronizzazione del mio iPhone 3G per poi passare a quello nuovo e subito incorro in questo problema:

Errore di sincronizzazione iTunes -50
Impossibile sincronizzare: errore -50!!!!
Um iniziamo bene penso fra me e me! Poichè l’unica cosa che è cambiata fra ieri sera e questa mattina è soltanto iPhoto do immediatamente la colpa dell’accaduto a lui e inizio a cercare la possibile causa. Come al solito, Google, mi viene incontro e dopo un paio di ricerche mirate finalmente trovo una possibile causa: il file xml AlbumData.xml all’interno della libreria iPhoto contiene probabilmente un errore! Per controllare il file si suggerisce di aprirlo con Safari che segnalerà immediatamente eventuali errori e la riga dell’immenso file dove questi si presentano.
Per aprire la libreria di iPhoto al fine di raggiungere detto file occorre cliccare con il pulsante destro on in alternativa ctrl click e selezionare dal menu contestuale “mostra contenuto pacchetto”.
Aprendo il file con Safari mi viene mostrato immediatamente un errore alla riga 2323. Bene dico almeno l’errore c’è, ok apro il file con smultron e mi dirigo alla linea 2323 e che trovo? Un valore di tipo stringa con un percorso ad una canzone nella libreria iTunes che contiene al suo interno un “&”. Ok vediamo di cosa si tratta e analizzando le righe successive capisco che l’insieme XML che sto analizzando descrive una presentazione che ha come sottofondo musicale quella canzone, probabilmente il problema è la & nella stringa relativa al percorso della canzone.
Ok chiudo tutto senza salvare apro iPhoto cambio sfondo musicale alla presentazione incriminata, utilizzando un’altra canzone e indovinate un pò?
Tutto torna alla normalità! Errore sparito!
Se quindi qualcuno ha un errore di questo tipo può provare ad eseguire questo tipo di controllo.
Ciao
Alla stazione!!!
Paonazzi con le mani arrossate da freddo e le ultime falangi delle dita di un giallo pipì stanno, innanzi la porta del treno, intenti a fumare avidamente e pronti allo scatto felino, quando la porta si chiude e in pochi istanti devono saltare sul treno gettando la cicca a terra!
Cosa da fastidio?
Semplice, la puzza che emanano quando ti si siedono accanto!!!
(Piccole riflessione di un pendolare alle 7 del mattino)
(Studiando cocoa) Currency converter Parte 4°
Nelle precedenti parti abbiamo creato l’applicazione Currency Converter, in questa lezione cercheremo di completare ed apportare alcune migliorie.
Mostriamo bene il risultato del calcolo
Avrete sicuramente notato che il risultato della conversione è un numero float con tanti decimali per lo più ininfluenti. Voglio mostrare questa cifra con soli due decimali. Non sapendo come fare esattamente ho dato una spulciata alle classi NSNumber e NSNumberFormatter ed ho trovato una soluzione che funziona, forse non sarà elegante ma funziona. In questo momento non cerco soluzioni eleganti ma semplicemente risposte alle mie curiosità.
Dunque ho modificato ConverterControlle.m per utilizzare queste due classi così:
- (IBAction)convert:(id)sender
{
//dichiaro una variabile per contenere un oggetto NSString
//che conterrà il valore della conversione sottoforma di una
//stringa opportunamente formattata.
NSString *amount;
//Creo un'istanza di converter
converter = [[Converter alloc]init];
//chiamo il metodo setSourceCurrencyAmount passandogli il valore del TextFiled
//euroField
[converter setSourceCurrencyAmount:[euroField floatValue]];
//chiamo il metodo setRate passandogli il valore di rateField
[converter setRate:[rateField floatValue]];
//creo un oggetto NSNumberFormatter
NSNumberFormatter *myNumberFormatter = [[NSNumberFormatter alloc] init];
//setto i parametri per la formattazione
[myNumberFormatter setMaximumFractionDigits:2];
[myNumberFormatter setMinimumFractionDigits:2];
//creo la stringa formattata, è necessario passare un NSNumber che creo a partire dal float che
//mi torna convertCurrency
amount = [myNumberFormatter stringFromNumber: [NSNumber numberWithFloat:[converter convertCurrency]]];
//imposto il valore del campo amountField con il valore della variabile di metodo
[amountField setStringValue:amount];
//torno al campo di testo degli euro da convertire
[euroField selectText:self];
}
Come possiamo notare ho tolto la dichiarazione della variabile float e l’ho sostituita con una dichiarazione per una variabile adatta a contenere un oggetto NSString. Ho poi creato ed istanziato un oggetto NSNumberFormatter che si occupera della formattazione e della conversione in una stringa.
NSNumberFormatter *myNumberFormatter = [[NSNumberFormatter alloc] init];
Setto poi il comportamento di NSNumberFormatter con i decimali.
[myNumberFormatter setMaximumFractionDigits:2];
[myNumberFormatter setMinimumFractionDigits:2];
Poi chiamo il metodo stringFrom Number che pretende come parametro un NSNumber e torna come risultato una NSString. Memorizzo l’oggetto NSString nella variabile amount e utilizzo il metodo di classe numberWithFloat per creare un oggetto NSNumber partendo da un numero float, che è quello tornato dal metodo convertCurrency.
mount = [myNumberFormatter stringFromNumber: [NSNumber numberWithFloat:[converter convertCurrency]]];
Infine assegno la variabile amount al campo di testo con il metodo setStringValue.
[amountField setStringValue:amount];
In questo modo l’importo convertito si vede sempre con 2 cifre decimali. NSNumberFormatter comunque fa molte altre cose è opportuno dargli uno sguardo, poichè contiene molti metodi per le valute e l’internazionalizzazione dei numeri.
Ottimizziamo il menu
Come avete notato il menu della nostra applicazione contiene molte più cose di quante ne servano effettivamente, questo perchè Xcode mette le cose più comuni dentro.
Togliete pure il menu relativo ai font, quello window tanto currency converter a una sola finestra, nel menu file togliete tutto e lasciate solo close, nel menu edit lasciate soltanto quelli relativi a la copia incolla, annulla e redo. Togliete pure l’istanza della classe che controlla il menu font nella finestra MainMenu.xib
Un’altra piccola cosa è quella di impostare l’allineamento a destra dei campi, a me piacciono i più i numeri allineati a destra stile calcolatrice.
Salviamo e chiudiamo IB
Localizziamo in italiano
Per localizzare in italiano la nostra applicazione occorre sostanzialmente tradurre soltanto l’interfaccia. Per far questo selezionate MainMenu.xib nella finestra di Xcode e premete Cmd + i nel tab general premete su Add localization e scrivete Italian come nome della localizzazione, premete add.
Ora fate doppio clic su MainMenu.xib (Italian) e in IB traducete tutto compreso il menu. Non tentate di tradurre il menu col nome dell’Applicazione non funzionerà quindi non traducetelo.
Salvate, date un clean e ricompilate la vostra applicazione. Adesso apparirà in italiano. Un consiglio guradate i nomi in italiano che usa Apple per tradurre i comandi comuni, come file->archivio, edit->modifica etc.
Bene salvate tutto e chiudete IB. In Xcode date un bel clean e ricompilate tutto. Ecco a voi Currency Converter in italiano.
L’icona
Icon Composer
Per impostare l’icona dell’applicazione occorre prima disegnarne una e poi con il tool Icon Composer creare il file .icns. Potete disegnare la vostra icona con qualsiasi programma di grafica vettoriale come Illustrator o Fireworks, salvarla in formato jpeg o meglio png e importarla in Icon Composer. Icon Composer si trova dentro la cartella Developer > Applications > Utilities, non vi spiego come si fa è talmente banale che vi divertite da soli. Tenete presente che per Leopard occorre disegnare l’icona di ben 512×512 pixel, poichè le icone grandi vengono mostrate nella visuale coverflow del finder.
Una volta che avete creato l’icona salvate il file con il nome APPL.icns all’interno della cartella del progetto. Per concludere in Xcode editate il file:
- Currency_Converter-info.plist
che trovate nella cartellina Resources e nella proprietà icon file inserite APPL.icns. Clean e compilate di nuovo, adesso la vostra applicazione ha anche un’icona.
Bene e con questo si conclude il progetto Currency Converter, certo manca il file dell’aiuto, ho dato una sbirciata e ho capito che non è difficile ma piuttosto laborioso creare un help Book pertanto ci rinuncio per questo tutorial e ci dedicherò tempo per la mia prima vera e propria applicazione cocoa.
Ciao
(Studiando cocoa) Currency converter Parte 3°
Bene ora che abbiamo creato sia l’oggetto “Model” che l’oggetto “View” non rimane che collegare il tutto per mezzo dell’oggetto “Controller” ma prima di cominciare vediamo cosa sono: Outlets, Targets e Actions.
Outlets
Un Outlet è una speciale variabile che identifica un’oggetto.
Come facilmente si capisce dalla immagine è un’oggetto particolare perché può fare riferimento a qualsiasi altro oggetto dell’applicazione come ad esempio un campo di testo, oppure un’istanza di una nostra classe. Gli Outlets posso essere configurati in IB e questo li rende ancora più speciali. Un outlet si dichiara così:
IBOutlet id nomeVariabile;
Gli oggetti che hanno id come tipo sono oggetti tipicizzati dinamicamente, durante il run-time verrà usato dinamicamente un tipo di dato idoneo. Benché questa funzionalità sia davvero potente e comoda perché ci permette di non preoccuparci dei tipi di dato durante lo sviluppo dell’applicazione, può essere però molto più difficile trovare e correggere alcuni bug. Quindi, quando non è strettamente necessario utilizzare un tipo dinamico e nella maggior parte dei casi non lo è, possiamo dichiarare gli Outlets come puntatori a classi di specifici oggetti. Ad esempio:
IBOutlet NSButton* myButton;
Gli Outlets vengono generalmente impostati in IB semplicemente disegnando una connessione fra due oggetti, esisto altri modi per impostare un Outlet ma questo è sicuramente il più conveniente.
Target/Action in IB
Le relazioni Target/Action vengono impostate nel pannello “Connections” nell’ispector di IB. Quando si chiede all’applicazione di eseguire una certa azione in pratica si manda un Action ad uno specifico Target che in IB è rappresentato da un Outlet di un certo oggetto. Alcuni oggetti, come ad esempio gli oggetti che ereditano da NSControl tipo NSButton, sono in grado di pilotare un metodo Action, in questi oggetti gli Outlets per Target e Action sono già definiti. Nei oggetti che invece creiamo noi come ad esempio un appController (quello che creeremo in questo articolo) possiamo definire le Action nel seguente modo:
- (IBAction)myAction:(id)sender;
Grazie a questa sintassi IB sarà capace di identificare le Action nei nostri oggetti e ci permetterà di collegarli agli altri oggetti dell’interfaccia.
In quale direzione collegare
Molto semplicemente possiamo definire due direzioni principali:
- Per creare una connessione Action dobbiamo disegnare un collegamento fra l’oggetto dell’interfaccia grafica che genera l’azione e il nostro appController che la riceve.
- Per creare una connessione Outlet dobbiamo disegnare un collegamento fra un nostro oggetto e un’altro oggetto sia che appartenga ad una classe da noi creata sia che sia un elemento dell’interfaccia grafica.
Ovviamente queste sono le connessioni più usate, ce ne sono dell’altre che a tempo debito verrano approfondite.
Il controller ConverterController
Bene è ora di aggiungere il Controller alla nostra applicazione quindi similmente al Model aggiungiamo una classe al nostro progetto.
- In Xcode selezioniamo il gruppo Classes nella finestra del proggetto
- Scegliamo File >New File
- Nella finestra di dialogo selezioniamo a sinistra Cocoa Class e a destra Objective-C Class scegliendo come Subclass of NSObject e clicchiamo su next.
- Chiamiamo la nostra Classe ConverterController.m, assicuriamoci che sia selezionato also create ConverterController.h e clicchiamo su Finish.
ConverterController si occuperà quindi di comunicare sia con l’interfaccia sia con la classe Converter che esegue il calcolo. Apriamo ConverterController.h per definire l’interfaccia del nostro Controller. Dichiariamo 3 Outlets per i tre campi di testo:
IBOutlet NSTextField *ammountField;
IBOutlet NSTextField *euroField;
IBOutlet NSTextField *rateField;
Si tratta di dichiarazioni di variabili quindi vanno all’interno delle parentesi graffe, come vedete abbiamo dichiarato gli Outlets in modo statico perché sappiamo benissimo che si tratta di NSTextField.
Dobbiamo poi dichiarare il metodo Convert per eseguire il calcolo.
- (IBAction)convert:(id)sender;
Certamente in questa piccola Applicazione avremo potuto eseguire i calcoli all’interno del Controller senza scomodare la classe Converter, tuttavia abbiamo deciso di eseguire l’applicazione secondo lo schema MVC. Lo schema MVC offre i suoi benefici in applicazioni molto complesse perché rende il codice più riusabile e più ordinato, in questa piccola applicazione sembra quasi complicare le cose inutilmente.
Salviamo il nostro ConverterController.h
Colleghiamo ConverterController con l’interfaccia
Siamo pronti per collegare l’interfaccia al nostro Controller, apriamo MainMenu.xib in IB
- Scegliamo menu File > Read Class File e selezioniamo ConverterController.h
- Dal pannello Library prendiamo un Object (Il cubo Blu) e trasciniamolo nella finestra delle istanze MainMenu.xib
- Selezioniamo l’Object e andiamo nell’ispector sull’ultima iconcina quella dell’identity.
- Nel menu a tendina Class selezioniamo ConverterController
- Ora se andiamo sempre nell’ispector sulla penultima iconcina, quella delle connection vedremo i tre Outlets e l’Action che abbiamo definito precedentemente in ControllerConverter.h.
Bene ora dobbiamo collegare gli Outlet di ConverterController con i relativi TextField nella finestra dell’applicazione.
- Selezioniamo l’oggetto ConvertContorller e tenendo premuto il tasto Ctrl disegnamo una connessione fino al primo TexField (Exchange Rate x 1€)
- Nel piccolo BlackBox che compare con la lista degli Outlets disponibili selezioniamo rateField.
- Ripetiamo l’operazione per gli altri due TextField selezionando gli opportuni Outlets
Dobbiamo ora collegare il pulsante all’unica azione del nostro Controller
- Selezioniamo nella finestra il Pulsante Convert e tenendo premuto il tasto Ctrl disegnamo una connessione verso l’oggetto ConverterController.
- Nel BlackBox selezioniamo l’unica azione disponibile convert:
Bene abbiamo creato tutte le connessioni necessaria fra il Controller e la View, salviamo MainMenu.xib. Per controllare se avete eseguito le connessioni correttamente basta che selezionate ConvertCotroller e nell’ispector delle connessioni cliccatte e poi passate il mouse sulle connessioni, i campi collegati si evidenzieranno.
Colleghiamo il Model al Controller
Per collegare il Model al Controller dobbiamo creare un’istanza di questo nel controller. Apriamo quindi di nuovo ConverterController.h e dichiariamo un puntatore alla classe Converter. Come abbiamo gia visto una variabile che deve contenere un’oggetto deve essere per forza un puntatore. Aggiungiamo quindi la seguente variabile tra le parentesi graffe:
Converter *converter;
Dobbiamo inoltre importare il file Converter.h per permettere a ConverterController di creare un’istanza di Converter. Aggiungiamo quindi la direttiva subito sotto l’ultima direttiva #import
#import "converter.h"
Salviamo ConverterController.h e apriamo ConverterController.m per implementare il metodo convert: utilizzando l’oggetto Converter.
Aggiungiamo la definizione del metodo convert: come di seguito:
- (IBAction)convert:(id)sender {
//dichiaro una variabile float interna al metodo
float amount;
//Creo un'istanza di converter
converter = [[Converter alloc]init];
//chiamo il metodo setSourceCurrencyAmount passandogli il valore del TextFiled
//euroField
[converter setSourceCurrencyAmount:[euroField floatValue]];
//chiamo il metodo setRate passandogli il valore di rateField
[converter setRate:[rateField floatValue]];
//utilizzo la variabile di metodo per ottenere la conversione chiamando il
//metodo convertCurrency
amount = [converter convertCurrency];
//imposto il valore del campo amountField con il valore della variabile di metodo
[amountField setFloatValue:amount];
//torno al primo campo di testo
[rateField selectText:self];
}
Bene la nostra applicazione è in uno stadio finale prima di compilare dobbiamo fare un’ultima cosa.
Garbage Collection
Come avrete notato ogni volta che chiamiamo il metodo convert: attraverso l’istruzione:
converter = [[Converter alloc]init];
creiamo un’istanza di converter riservando nella memoria del mac uno spazio idoneo a contenere l’istanza. Dovremo quindi preoccuparci cancellare questo spazio una volta che l’oggetto ha finito il suo compito, dobbiamo deallocare la memoria. Tuttavia se la vostra applicazione è sviluppata per Mac Os X 10.5 o superiore, possiamo utilizzare una comoda nuova funzionalita di Objective-C 2.0 cioè: Garbage Collection. Utilizzando Garbage Collection non dobbiamo preoccuparci di deallocare gli oggetti che abbiamo istanziato.
Tuttavia Garbage Collection attualmente non è abilitato di default, dobbiamo abilitarlo manualmente.
- In Xcode cliccate sul menu Project > Edit Project Settings
- Cliccate sul tab build
- Nei settings andate nel gruppo GCC 4.2 – Code Generation ed impostate Objective-C Garbage Collection su supported
Sarebbe opportuno studiare meglio questa cosa!
Bene ora siete pronti per compilare e testare Currency Converter cliccando su Build & Run.
Il prossimo appuntamento cercheremo di perfezionare l ‘applicazione e di tradurla in italiano.
(Studiando cocoa) Currency converter Parte 2°
Nella prima parte abbiamo creato l’oggetto “Model” della applicazione Currency converter, i questa seconda parte creeremo l’oggetto “View” cioè l’interfaccia grafica dell’applicazione. Per creare l’interfaccia grafica il tool di sviluppo Xcode mette a disposizione un’applicazione chiamata Interface Builder. IB ci permette di creare in modo visuale un’interfaccia grafica funzionante attraverso una libreria di oggetti grafici standard predefiniti (UI design) e una finestra ispettiva dove possiamo impostare le proprietà di ogni oggetto. IB permette inoltre di creare i collegamenti fra i vari oggetti grafici.
I file Nib
Ogni applicazione Cocoa dotata di interfaccia grafica ha almeno un Nib file. Il Nib file principale viene caricato automaticamente all’avvio dell’applicazione e generalmente contiene un menu e una finestra con altri oggetti sopra.
Ogni Nib file contiene:
- Archivio degli oggetti: esso contiene le informazioni sugli oggetti come le dimensioni, il posizionamento e la posizione nella gerarchia degli oggetti. Il livello più alto delle gerchia degli oggetti archiviati è occupato da File’s Owner object, una specie di proxy che in fase di runtime diventa l’oggetto padrone del Nib file.
- Immaggini: le immagini che compongono la nostra interfaccia utente come ad esempio bottoni o pulsanti.
- Class references: IB conserva le informazioni sugli oggetti che compongono l’interfaccia ma non conosce le classi che avete sviluppato, come ad esempio la nostra classe Converter che rappresenta il “model” della nostra applicazione, perchè non può accedere al loro codice. Per ogniuna di queste classi IB mette a disposizione una specie di oggetto proxy a cui vengono applicate le informazioni sulla classe.
- Connection information: le informazioni circa i collegamenti fra i vari oggetti che compongono l’interfaccia.
Apriamo Interface Builder
Per aprire il IB è sufficiente fare doppio click sul file MainMenu.xib nella finestra di progetto di Xcode. Currency Converter ha una finestra principale (Main Window) sulla quale si eseguono tutte le operazioni che svolge l’applicazione. IB crea per noi un Main Menu con alcuni menu di default e una finestra che rappresenta la Main Windows di Currency Converter. L’interfaccia di IB è costituita poi da altre 3 finestre:
- Library: contiene tutti gli oggetti, le classi e i media che possiamo utilizzare nella nostra applicazione. Possiamo inserire nella libreria oggetti, classi e media personalizzati.
- Attributes o inspector: contiene gli attributi dell’oggetto correntemente selezionato. Se ad esempio selezionate la nostra Main Window nella finestra compariranno tutti i relativi attributi.
- La finestra principale: quale file nib è aperto e quali sono gli oggetti che lo compongono.
Conviene dare uno sguardo a IB per familiarizzare con le sue componenti prima di andare avanti, io ci ho passato un paio d’ore giocando con gli oggetti e cercando di capirne le caratteristiche attraverso l’ispector. Magari fatelo su un progetto vuoto.
Modifichiamo la Main Window
Possiamo ridimensionare la finestra manualmente semplicemente afferrandola per l’angolo in basso a destra. Selezionando la finestra e facendo clic sull’iconcina a forma di righello nell’ispector possiamo impostare nei campi width e height i valori 400 e 200 per dimensionare correttamente la finestra. Possiamo inoltre scegliere la posizione iniziale della finestra, che normalmente dovrebbe essere in alto a sinistra.
Cliccando sulla prima iconcina nell’ispector possiamo impostare gli attributi della finestra fra cui il titolo. IB ha già impostato questo valore con il nome dell’applicazione, questo è sicuramente un buon titolo in questo caso quindi lo lasciamo inalterato.
Inseriamo i textField
Nella finestra libreria selezioniamo Objects per mostrare gli oggetti e poi navighiamo nella libreria Library -> Cocoa -> Views & Cells -> Inputs & Values.
Prendiamo l’oggetto NSTextField e trasciniamolo nella finestra di Currency Converter, IB ci guiderà nel corretto posizionamento del campo in alto a destra mostrandoci delle linee guida quando ci avviciniamo ai bordi della finestra.

Avvicinandosi ai bordi e ad altri oggetti IB mostra delle comode linee guida per allineare e distanziare correttamente gli oggetti
Allunghiamo il campo appena aggiunto per portarlo intorno ai 150 pixel di lunghezza. Con il campo selezionato premiamo Ctrl-D per duplicarlo. Posizioniamo il campo duplicato immediatamente sotto il precedente sfruttando sempre le solite linee guida. Ripetiamo l’operazione per il terzo campo.
Aggiungiamo ora le etichette che indicano cosa sono i tre campi che abbiamo appena aggiunti. Prendiamo una label dalla Library e posizioniamola a sinistra del primo campo di testo. Nell’ispector negli attributi della label impostate l’allineamento a destra e il titolo della label “Exchange Rate per €1:”. Stiamo facendo l’applicazione in inglese come nel tutorial perché poi proveremo a creare la localizzazione in italiano.
Ridimensioniamo la label in modo che compaia tutto il testo. Ripetiamo per le altre due label “Euro to convert” e “Amount in Other Currency:”
Per concludere dobbiamo impostare l’attributo Editable del 3° TextField su false in modo che l’utente non possa cambiare il valore del campo. Selezioniamo quindi il 3° TextField e nell’ispector visualizziamo gli attributi e deselezioniamo Editable. Lasciamo invece selezionato Selectable per permettere la selezione e il copia del valore.
Inseriamo e configuriamo il pulsante.
Dalla Library prendiamo nella sezione Buttons un PushButton e posizioniamolo al di sotto del 3° campo di testo. Spostiamolo un pò più giu. Doppio Click sul pulsante appena aggiunto per modificare il titolo in “Convert”. Inseriamo un linea di separazione fra il bottone e i campi di testo. Come al solito la prendiamo dalla Library e l’allineiamo tramite le linee guida subito sotto il 3° campo di testo, allunghiamola a destra e sinistra fin quando non compaiono le linee guida. Posizioniamo il pulsante convert subito al di sotto del separatore sempre usufruendo delle guide automatiche. Seguire queste guide automatiche è importantissimo perché sono gli spazi raccomandati dalla guida Apple Human Interface Guidelines. La Apple Human Interface Guidelines è veramente una sorta di testo sacro sull’interfaccia grafica del mac e dovrebbe assolutamente essere letta e studiata per comprendere a fondo come realizzare un’interfaccia in perfetto stile Apple.
Rifiniamo la nostra interfaccia
Possiamo rifinire l’interfaccia appena creata sfruttando qualche funzionalità di IB. Selezioniamo tutte e 3 le Label e clicchiamo sul menu Layout > Size to fit per dimensionare le Label alla loro larghezza minima. Clicchiamo poi sempre su Layout > Alignment > Align Right Edges per allineare le Label sull’angolo destro. Spostiamo infine le Label sulla sinistra fin quando non appare la linea guida. Selezioniamo e spostiamo a sinistra i 3 Text Field fin quando non compare la linea guida. Dimensioniamo ora nuovamente il Separatore per farlo coincidere con il lato destro dei Text Field. Spostiamo il pulsante per centrarlo con l’ultimo Text Field. Ridimensioniamo la finestra fin quando non compaiono tutte le linee guida. Ok l’interfaccia è ottimizzata più facile a farsi che a dirsi.
Ultima chicca impostiamo il tasto return come Key Equivalent per premere il pulsante. Selezioniamo il pulsante e andiamo negli attributi, selezioniamo l’attributo Key Equiv. e premiamo il tasto return.
Abilitiamo il Tabbing fra i campi di testo
Vogliamo fare in modo che premendo il tatso Tab si passi da un campo all’altro. Per far ciò selezioniamo il campo Exchange Rate e tenendo premuto il tasto Ctrl clicchiamo e tiriamo un collegamento fino al campo Euro to convert. Nella pannello semitrasparente selezioniamo nel gruppo Outlets ”nextKeyView”. Ripetiamo la procedura all’inverso.
Impostiamo il First Responder
Impostiamo Exchange Rate come primo campo selezionato all’avvio dell’applicazione. Per far ciò dobbiamo selezionare l’istanza della nostra finestra nella finestra MainMenu.nib e tenendo premuto il tasto Ctrl creare una connessione con il campo Exchange Rate per €1. Nel pannello che appare selezioniamo “initialFirstResponder”.
Bene ora la nostra interfaccia è pronta possiamo salvare e testare l’interfaccia attraverso il menu File > Simulate Interface.
Nella prossima parte realizzeremo il Controller, cioè il ponte fra l’interfaccia (View) e il Model.
Arriva il Magic Mouse!
Ieri Apple ha presentato molti nuovi prodotti fra cui una nuova gamma di iMac che finalmente abbandonano il processore core duo per portatili per abbracciare in nuovi intel core i5 e i7 e un nuovo macbook anch’esso ora dotato di guscio unibody. La novità però più bella secondo me è il nuovo Magic Mouse!
Il nuovo mouse è in assoluto il primo mouse Multi Touch della storia. In sostanza Apple ha deciso di trasferire l’esperienza Multi Touch di iPhone prima e di iPod Touch e MacBook Pro dopo anche nei sistemi desktop. Dal design essenziale ed elegante il Magic Mouse elimina tutto il superfluo, niente filo, niente tasti ne, tanto meno, rotelline che si sporcano e si inceppano. Per gestire i comandi è sufficiente usare le “gesture” tipiche dei dispositivi Touch che gli utenti iPhone conoscono molto bene.
Come al solito Apple riesce sempre a tirare fuori un prodotto unico e rivoluzionario, ora attendiamo di averlo a disposizione per una prova sul campo.
E’ possibile acquistare il Magic Mouse sullo store on-line per 69 €
Ciao










Commenti recenti