Archivio per la categoria ‘Snipplet’

Scritto da Lucio Brucio Il gennaio - 14 - 2012 0 Commenti

 

La status bar è una barra presente sullo schermo dell’iPhone/iPad e rappresenta informazioni quali stato di carica della batteria, l’ora corrente e ricezione del segnale di rete. Sebbene speso è bene che questa barra sia visibile, a volte è necessario non visualizzarla, per fare questo sulle nostre applicazioni iOS ci sono due metodi:

  1. Impostare la proprietà di visibilità della status bar tramite il file info.plist
  2. Nascondere la status bar da codice dopo il caricamento dell’applicazione

Ovviamente in base alle nostre esigenze utilizzaremo il caso migliore. Vediamo il primo caso:

Nascondere la status bar nelle applicazioni iOS

Nascondere la status bar nelle applicazioni iOS

Utilizzare UIStatusBarHidden

Per nascondere sin dall’inizio del caricamento dell’applicazione lastatus bar è necessario impostare nel file info.plist una chiave del tipo: UIStatusBarHidden. XCode riconoscerà automaticamente questo valore sostituendolo con “Status bar is initially hidden” rendendolo un valore booleano che noi possiamo impostare a YES oppure a NO (di default è a NO). Inpostanto questo valore a YES la status bar non sarà mai visibile nemmeno durante il caricamento dell’applicazione.

 

Nascondere la Status Bar da codice

Se si vuole nascondere la status bar solo in casi particolari e non sempre, allora è possibile nasconderla attraverso il codice una volta caricata l’applicazione. Nell’esempio seguente si nasconde la Status Bar nel metodo didFinishLaunchingWithOptions che indica all’application delegate che il caricamento dell’applicazione è terminato, come pe:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    /*... codice di inizializazione dell'applicazione */

    [application setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];

    return YES;
}

In questo metodo abbiamo l’istanza della classe UIApplication come parametro. Se vogliamo nascondere la Status Bar da un altra parte del codice a seconda delle nostre esigenze allora dobbiamo ricavare l’istanza dell’oggetto UIApplication che rappresenta la nosta applicazione nel seguente modo:

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];

 

Rating 3.00 out of 5
Scritto da Lucio Brucio Il marzo - 22 - 2011 6 Commenti

Qualche breve breve consiglio introduttivo per poter utilizzare il dispositivo di ricezione del segnale GPS presente sugli apparecchi targati Apple!  Per poter utilizzare il dispositivo GPS sull’iOS bisogna importare nella nostra applicazione il framework Core Location, per fare questo bisogna selezionare il menu “Add” e poi “Existing framework” dal menu di progetto come mostrato nell’immagine seguente:

Importare un framework esistente

Importare un framework esistente

Dall’elenco che apparirà in seguito bisogna selezionare CoreLocation.framework. Fatto questo la nostra applicazione è pronta per poter utilizzare il GPS. I dispositivo GPS comunica con la nostra applicazione attraverso gli eventi generati da iOS come la maggior parte dei dispositivi, quindi in generale per pote ricevere le coordinate geografiche bisognerà avviare il dispositivo e assegnare un “delegato” al dispositivo che risponderà a tutti gli eventi generati. Le cose da fare in pratica sono le seguenti prima di tutto dire alla nostra classe principale che dobbiamo usare il framework Core Location con il seguente import:

#import <CoreLocation/CoreLocation.h>

in questo modo possiamo accedere alle classi del framework. Per indicare all’applicazione che dovrà “ascoltare” gli eventi generati dal dispositivo GPS dobbiamo implementare l’interfaccia CLLocationManagerDelegate. La classe principale che ci permetterà di attivare il nostro dispositivo GPS è CLLocationManager quindi si dichiarerà una proprietà della classe principale:

CLLocationManager *locationManager;
@property (nonatomic, retain) CLLocationManager *locationManager;

Per inizializzare l’oggetto locationManager, dopo l’inizializzazione dell’applicazione, quindi nel metodo didFinishLaunchingWithOption, possiamo inserire il seguente codice:

if (self.locationManager == nil){
    self.locationManager = [[CLLocationManager alloc]init];
    [self.locationManager setDesiredAccuracy:kCLLocationAccuracyNearestTenMeters];
    [self.locationManager setDelegate:self];
    [self.locationManager startUpdatingLocation];
}

In questo codice è stata impostata l’accuratezza del segnale di rilevamento posizione, ovviamente più è accurato e più consuma batteria, dopo di che si imposta il delegate che ascolterà gli eventi, cioè self. Come ultima riga avviamo l’aggiornamento della posizione e qua si comincia a ciucciare la batteria.

Appena la posizione corrente sarà aggiornata verrà richiamato il seguente metodo dell’interfaccia CLLocationManagerDelegate che andremo a sovrascrivere:

-(void) locationManager: (CLLocationManager *)manager didUpdateToLocation: (CLLocation *) newLocation fromLocation: (CLLocation *) oldLocation{
    [self.locationManager stopUpdatingLocation];
    NSLog(@"LOCATION: %d,%d", locationManager.location.coordinate.latitude, locationManager.location.coordinate.longitude);
}

All’interno di questo metodo prima di tutto fermiamo l’aggiornamento della posizione (che la batteria serve…) dopo di che possiamo utilizzare la posizione rilevata, in questo caso viene semplicemente loggata!

Credo che con questa brevissima introduzione si ha un minimo di base per poter utilizzare la geolocalizzazione in tutte le vostre applicazioni iOS!!!

Dovrebbe essere tutto… Ciao! :cool:

Rating 3.00 out of 5
Scritto da Lucio Brucio Il marzo - 2 - 2011 1 Commento
Nel seguente articolo andremo a spiegare come personalizzare le celle di una vista a tabella, quindi di una UITableView, vista molto utilizzata nelle applicazioni per IOS.
In particolare per personalizzare una cella si sono due metodi principalmente, crearla con interfaccia grafica tramite Interface Builder oppure crearla attraverso il codice. Ovviamente crearla con IB è più semplice e si vede subito il risultato, ma il metodo risulta essere più lento, quindi per una cella va bene, ma se dobbiamo personalizzare l’intera lista conviene farlo attraverso il codice. Noi ovviamente andremo a scrivere un esempietto che ci permettere di customizzare una cella attraverso il codice, mettiamoci all’opera.

Creiamo il progetto

Apriamo XCode e creiamo un nuovo progetto dalla schermata iniziale, come template sceglieremo Navigation-based Application presente nel menu Application di IOS e chiamiamola “CustomCell:

Navigation based application

Navigation based application

A questo punto esplorando il progetto all’interno della cartella Classes ci troveremo due classi, l’application Delegate, cioè la classe principale dell’applicazione e una classe RootViewController. La classe RootViewContorller come si può notare estende la classe UITableViewController, quindi controlla tutto il comporta mento della vista caricate inizialmente. Se si lancia subito il progetto si visualizza una schermata con una UITableView è qua che noi andremo ad agire.

Ora dobbiamo dire alla UITableView che nella tabella è presente almeno una sezione e almeno una riga, altrimenti non visualizziamo nulla!!! Procediamo come segue:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

return1;

}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

return1;

}

 

Il nome dei due metodi è autoesplicativo. Come abbiamo detto andremo a personalizzare la cella attraverso il codice. Per fare questo andremo a modificare il metodo “cellForRowAtIndexPath” che restituisce una cella per ogni riga di ogni sezione. Andiamo ad inserire gli elementi di personalizzazione all’interno della nostra cella:

 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

   static NSString *CellIdentifier = @”Cell”;

   UITableViewCell *cell = [tableViewdequeueReusableCellWithIdentifier:CellIdentifier];

   if (cell == nil) {

      cell = [[[UITableViewCellalloc] initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:CellIdentifier] autorelease];

}

//creiamo il contenitore della cella

cell.contentView.frame = CGRectMake(0, 0, 320, 60);

//Aggiungiamo una label alla cella nella posizione x=10, y=10 con height=25 e width= 120

UILabel* text = [[UILabelalloc] initWithFrame:CGRectMake(10, 10,120, 25)];
//con background trasparente

text.backgroundColor = [UIColorclearColor];
//font size = 18 e allineamento a sinistra

text.font = [UIFontsystemFontOfSize:18];

text.textAlignment = UITextAlignmentLeft;
//aggiungiamo la label alla cella

[cell.contentView addSubview:text];

[text release];

//aggiungiamo un immagine di sfondo (image.png deve essere aggiunta al progetto)

UIImage* cellBackground = [UIImageimageNamed:@"image.png"];

UIImageView* background = [[UIImageView alloc] initWithImage:cellBackground];

background.frame = CGRectMake(0, 0, 320, 60);

[cell.contentView addSubview:background];

[background release];

return cell;

}

Il codice è opportunamente commentato e ovviamente nella cella è possibile aggiungere qualsiasi elemento in questo caso abbiamo aggiunto solo una label e un immagine di sfondo, provare per credere!

Credo che dovrebbe essere tutto… Ciao! :cool:

Rating 3.00 out of 5
Scritto da Lucio Brucio Il gennaio - 17 - 2011 3 Commenti

Quando nasce

Chiunque voglia entrare nel mondo della programmazione targato “Apple” inevitabilmente si imbatte nell’ objective-C. Questo linguaggio di programmazione, ovviamente orientato agli oggetti come descrive il nome, prende sempre più piede grazie alla diffusione degli apparati Apple venduti. L’objective-C venne partorito dalla Stepstone nel 1981 e fu progettato per essere un estenzione del C con degli accorgimenti in più rispetto al C++ (dinamic binding, run-time identification e persistenza).

Nel 1988 la NeXT, società fondata da Steve Jobs, il cofondatore della Apple, acquisisce la licenza dell’objective-C cedutagli dalla Stepstone. Più tardi nel 1996 la Apple incorpora la NeXT e con essa tutti i diritti associati all’objective-C ed è con tale linguaggio che la Apple tuttora implementa il suo sistema operativo non solo degli iMac ma anche di tutti i suoi dispositivi.

(continua…)

Rating 4.00 out of 5
Scritto da Lucio Brucio Il gennaio - 3 - 2011 0 Commenti
Per poter inviare una mail con php non c’è nulla di piú semplice che utilizzare il metodo mail() [http://php.net/manual/en/function.mail.php].

Prima di poter utilizare il metodo mail() bisogna controllare se il sistema È predisposto per l’invio di e-mail, infatti questo metodo utilizza il tool sendmail [http://www.sendmail.org/] che deve essere installato sul sistema. Per effettuare questa verifica basta richiamare l’output del metodo phpinfo(); ad esempio con il seguente codice:

<?php phpinfo(); ?>

e controllare che tra le varie proprietà della corrente installazione di php sia presente la voce “sendmail_path” e che sia correttamente valorizzata, come mostrato nell’immagine seguente:

check di send mail su php

check di sendmail su php

Una volta effettuata questa verifica siamo pronti per poter inviare le e-mail tramite php. Il seguente metodo invia una semplice mail testuale:

function sendMailToAll($mailList, $titolo, $id){

//il destinatario

$to=”wabmaster@luciobrucio.com”;

//l’oggetto della mail

$subject = ‘Oggetto della mail di test’;

//il corpo del messaggio, a capo con \n

$message = “Messaggio da inviare per E-mail\n”;

//L’header della mail, ogni proprietá viene separata da \r\n

$headers = “From: webmaster@luciobrucio.com\r\nReply-To: webmaster@luciobrucio.com\r\n;

//invio della mail

$mail_sent = mail( $to, $subject, $message, $headers );

//controllo se l’email è stata inviata con successo

if($mail_sent){

echo “E-mail inviata”;

}else{

echo “E-mail non inviata”;

}

}

I commenti nel codice dovrebbero aiutare molto nella comprensione del codice. Per eventuali approfondimenti su come formattare correttamente i valori passati per parametro al metodo mail() si puó fare riferimento alla RFC822 [http://www.faqs.org/rfcs/rfc822.html] o alla piú aggiornata RFC2822 [http://www.faqs.org/rfcs/rfc2822.html].

Ciao alla prossima.

Rating 3.00 out of 5