Articoli con Tag ‘Apple’


10 utili snippet per Apple iPhone

Eseguire un metodo dopo n secondi

Tutta la famiglia performSelector è davvero interessante e può essere utile in una moltitudine di casi. La sua applicazione più semplice e comune è la seguente:

1
2
3
4
5
[self performSelector:@selector(myMethod) withObject:nil afterDelay:3];
//
- (void)myMethod {
    NSLog(@"Hello World!");
}

Tuttavia considerate che il “timer” non è preciso. Questa procedura, quindi, va usata quando non è richiesta una “notevole” precisione temporale.

Recuperare la versione dell’applicazione

1
2
NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
NSLog(@"versione = %@", version);

YES, true o TRUE?

Andando a spulciare nel Kernel Apple iPhone è possibile renderci conto che YES, true e TRUE sono in pratica la stessa edentica cosa:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// definizione di YES
#define YES (BOOL)1
#define NO  (BOOL)0

// definizione di true
#define true  1
#define false 0

// definizione di TRUE
#if !defined(TRUE)
    #define TRUE 1
#endif

#if !defined(FALSE)
    #define FALSE 0
#endif

Almeno per adesso…

Vibrazione

1
2
3
#import <AudioToolbox/AudioToolbox.h>
//
AudioServicesPlaySystemSound (kSystemSoundID_Vibrate);

Puntatore CGImageRef a partire da un UIImage

1
2
3
4
UIImage *heart = [UIImage imageNamed:@"LittleHeart.png"];
CGImageRef image = [heart CGImage];
// L'immagine adesso può essere "rasterizzata" su un CGContextRef
CGContextDrawImage(c, (CGRect){0, 0, 100, 100}, image);

Animazioni

1
2
3
4
5
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:1.5];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
// ...
[UIView commitAnimations];

NSLog

1
2
3
NSLog(@"NSString object %@ ", myString);
NSLog(@"Float: %f ", myFloat);
NSLog(@"Integer: %i ", myInt);

Convertitore da RGB a UIColor

1
#define RGBA(r,g,b,a) [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:a]

Passare parametri ad un NSTimer

Sfruttando il parametro userInfo è possibile inviare un puntatore ad un nostro oggetto al metodo richiamato da timer.

1
2
3
4
5
6
7
8
9
10
11
12
13
[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timerMethod) userInfo:objectPointer repeats:YES];

// ...

-(void)timerMethod:(NSTimer*)timer {
// Recupero il puntatore al mio oggetto
objectPointer = [timer userInfo];
// oppure
[[timer userInfo] myMethod];
int a = [[timer userInfo] myProperty];
// che è lo stesso
int a = [objectPointer myProperty];
}

Tempo di esecuzione

Ecco un semplice modo per calcolare tempi brevi utili per verificare la velocità di esecuzione del codice:

1
2
3
4
CFAbsoluteTime initialTime = CFAbsoluteTimeGetCurrent();
// ... code
CFAbsoluteTime finalTime = CFAbsoluteTimeGetCurrent();
NSLog(@"Tempo trascorso %f", finalTime-initialTime);

Continua...

Apple iPhone: creare un custom toggle button

Gli stati UIControlStateSelected o UIControlStateHighlighted non funzionano quando un UIButton è impostato in modalità UIButtonTypeCustom! O meglio, non funzionano come dovrebbero (perchè riservati agli altri tipi di bottone), ad esempio per creare un bottone a due stati: toggle appunto. Se abbiamo creato due immagini (stato1.png e stato2.png) per il nostro bottone, possiamo procedere in questo modo:

1
2
3
// Nell'header file creiamo una variabile globale che usaremo per
// controllare il toggle state
BOOL toggleFlag;

Ora creiamo il nostro bottone:

1
2
3
4
5
6
7
8
9
// Creaiamo un bottone e lo poniamo inizialmente nello stato "stato1.png"
// Modificate initWithFrame:(CGRect){100,100,50,50} con la posizione e
// dimensioni della vostra immmagine
toggleFlag = YES;
UIButton *toggleButton = [[UIButton buttonWithType:UIButtonTypeCustom] initWithFrame:(CGRect){100,100,50,50}];
[toggleButton setTitle:@"" forState:UIControlStateNormal];
[toggleButton setBackgroundImage:[UIImage imageNamed:@"stato1.png"] forState:UIControlStateNormal];
[toggleButton addTarget:self action:@selector(onToggle:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:toggleButton];

Quando si clicca sul bottone verrà inviato un messaggio gestito da onToggle:

1
2
3
4
5
6
7
- (void)onToggle:(id)sender {
// Recupero puntatore al UIButton
UIButton *buttonClicked = (UIButton *)sender;
// Eseguo il toogle
toggleFlag = !toggleFlag;
[buttonClicked setBackgroundImage:[UIImage imageNamed:(toggleFlag) ? @"stato1.png" : @"stato2.png"] forState:UIControlStateNormal];
}

Continua...

Very short snippet: streaming mp3 file su Apple iPhone

Un’alternativa davvero semplice per eseguire uno streaming di un file mp3 su Apple iPhone potrebbe essere:

Continua...

Mad Ideas: il primo User Generated Ideas

Oggi, 25 novembre 2009, nasce ufficialmente Mad Ideas, la prima fabbrica delle idee generate dagli utenti (UGI User Generated Ideas).

Continua...

Very short snippet: Apple iPhone file system

Sia sul Mac OS X che sull’iPhone OS, abbiamo la possibilità di accedere in modo semplice e diretto alle directory – più importanti – di sistema, che sono:

1
2
3
NSHomeDirectory         Returns the path to the current user’s home directory.
NSHomeDirectoryForUser  Returns the path to a given user’s home directory.
NSTemporaryDirectory  Returns the path of the temporary directory for the current user.

Continua...

10 utili trucchi e snippet per Apple iPhone e Xcode

1. Stringhe su più righe

In Xcode è possibile “spezzare” un stringa su più righe inserendo a alla fine un backslash “\”. Questa caratteristica può risultare utilissima quando, ad esempio, vogliamo inserire del testo HTML in un controllo UIWebView:

Continua...

Objective-C: NSLog() su struct C

La sintassi NSLog(@"%@", ... ); funziona ed è utilizzata per ottenere informazioni sugli oggetti, ma non funziona su tipi dato C come struct CGRect o CGPoint, ad esempio. Per poter sfruttare NSLog(@"%@", ... ); anche su struct di tipo C possiamo appoggiarci a funzioni di conversione come NSStringFromCGRect() o NSStringFromCGPoint:

1
2
3
4
5
CGrect mioRect = (CGRect){10,20,30,40};
CGPoint mioPoint = (CGPoint){32,64};
//
NSLog( @"Info rettangolo: %@", NSStringFromCGRect(mioRect) );
NSLog( @"Info point: %@", NSStringFromCGPoint(mioPoint) );

Nello specifico è possibile perfezionare tale procedure scrivendosi delle piccole macro utili come:

1
#define NSLogRect(rect) NSLog(@"%s: (%0.0f, %0.0f) %0.0f x %0.0f", #rect, rect.origin.x, rect.origin.y, rect.size.width, rect.size.height)

Oppure:

1
2
3
4
#define NSLogCGPoint(point) NSLog(@"%s: (%0.0f, %0.0f)", #point point.x, point.y)

CGPoint mioPoint = (CGPoint){32,64};
NSLogCGPoint(mioPoint);

Che darà come output:

1
mioPoint: (32, 64)

Continua...

Very short trick: 3 trick per gli sviluppatori Apple iPhone

Icona applicazione

L’icona 57×57 pixel che andrà a rappresentare la nostra applicazione viene “alterata” automaticamente dall’Apple iPhone: viene aggiunto un bordo arrotondato, un effetto luminoso e 3D. Questa impostazione può essere cambiata selezionando il file [nome applicazione]-Info.plist e aggiungendo la property “Icon already includes gloss and bevel effects”:

Continua...

Very short snippet: iPhone, numeri casuali

Se avete bisogno di generare numeri casuali in una applicazione Apple iPhone dovete mettere da parte Objective-C, in quanto non propone nessuna classe allo scopo. La soluzione viene dal C che propone: rand(), srand(), random(), srandom() e arc4random().

Continua...

Adobe Flash Professional CS5 per Apple iPhone

Adobe Flash Professiona 5 per Apple iPhone

Continua...



Stop SOPA