2011-01-31 12 views
5

Sposób ładowania obrazu na warstwie jest po prostu tak:iPhone CALayer zawartość tablicy obraz wartości

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

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

następnie dodać warstwę jako podwarstwy na widok czegoś takiego:

zakładają ci w widoku

[self.layer addSublayer:layer]; 

Teraz chcę załadować tablicę obrazów jako animację, aby w końcu uzyskać animowane obrazy.

więc zanim faktycznie wykonać animację Ja testowałem następujące:

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

oczywiście jest pętla, że ​​biegnie, że każdy obraz wpisać we właściwym indeksie ... a ja otrzymuję tablicę z CGImage .. dla animacji.

Mam wydrukowane tę tablicę i zobaczył to:

CGImage 0x17d900

CGImage 0x17f4e0

więc wartości są tam .. a ja nie otrzymuję żadnych błędów .. ale nie widzę obrazy ...

Daj mi znać, jeśli masz pomysł ....

+0

W jaki sposób wykonujesz animację lub przełączasz elementy w treści tablicy do wyświetlenia? – hotpaw2

Odpowiedz

5

jest to fragment kodu, który pracował w porządku dla jednego z moich projektów:

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

Miałem jednak sporej obrazy dla klatek animacji i na starym iPhone'ów/iPodów, które spowodowały poważne problemy z wydajnością. Jeśli napotkasz na tym, tajnym składnikiem jest użycie wstępnie renderowanych obrazów (IIRC, są one reprezentowane przez prywatną klasę CABackingStore). W skrócie, tworzysz CALayer o prawidłowym rozmiarze, który używa drawInContext: do narysowania pojedynczej klatki animacji, następnie przechodzisz przez klatki animacji, dokąd podasz warstwę obrazu ramki, przesyłasz ją display i zapisujesz jej własność zawartości w szyk. Technika buforowania jest bezpieczna, o ile nie próbujesz manipulować wstępnie renderowanymi obrazami w jakikolwiek sposób: w zasadzie po prostu robisz layer1.contents = layer2.contents.

Po prostu nie marnuj czasu na realizację powyższego, o ile nie masz problemów z wydajnością.

+0

Tak Tęskniłem za klawiaturą. –