2011-01-31 13 views
5

Il modo per caricare l'immagine al livello è semplicemente questo:iPhone CALayer contenuto dell'array immagine Valori

CALayer *layer = [[CALayer alloc]init]; 

layer.contents = (id) [UIImage imageNamed:@"image.png"].CGImage; 

quindi si aggiunge il livello come sottolivello alla vista qualcosa come:

si assumono nella vista

[self.layer addSublayer:layer]; 

Ora voglio caricare un array di immagini come animazione, così alla fine otterrò le immagini animate.

quindi prima di poter realmente eseguire l'animazione che ho verificato le seguenti:

[values insertObject:(id)[UIImage imageNamed:path].CGImage atIndex:i]; 

Naturalmente c'è un ciclo che che corre che entrano ogni immagine per l'indice di destra ... e poi io sono sempre una matrice di CGImage .. per l'animazione.

ho stampato questa matrice e ho visto questo:

CGImage 0x17d900

CGImage 0x17f4e0

Così i valori ci sono .. e io non sto ottenendo eventuali errori .. ma non vedo le immagini ...

Fatemi sapere se avete un'idea ....

+0

Come si fa l'animazione o si passa da una voce all'altra nel contenuto della matrice per la visualizzazione? – hotpaw2

risposta

5

si tratta di un frammento di codice che ha lavorato bene per uno dei miei progetti:

CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath: @"contents"]; 
animation.calculationMode = kCAAnimationDiscrete; 
animation.duration = 1.0; 
animation.values = values; // NSArray of CGImageRefs 
[layer addAnimation: animation forKey: @"contents"]; 

Tuttavia, ho avuto le immagini abbastanza grande per i fotogrammi di animazione e su vecchie iPhones/iPod che hanno causato seri problemi di prestazioni. Se ci si imbatte in questo, l'ingrediente segreto è usare le immagini pre-renderizzate (IIRC, sono rappresentate con una classe privata CABackingStore). In poche parole, si crea un CALayer della dimensione corretta, che utilizza drawInContext: per disegnare un singolo fotogramma di animazione, quindi si scorre tra i fotogrammi dell'animazione, dove si alimenta il livello un'immagine del fotogramma, lo si invia display e si salva la proprietà del contenuto in un array. La tecnica di caching è sicura fino a quando non provi a manipolare le immagini pre-renderizzate in alcun modo: in pratica, devi semplicemente fare layer1.contents = layer2.contents.

Semplicemente non sprecare il tuo tempo implementando quanto sopra, a meno che tu non abbia problemi di prestazioni.

+0

Sì, ho perso il keyPath. –

Problemi correlati