Generuję pakiet płytek dla CATiledLayer
. Potrwa to około 11 sekund, aby wygenerować 120 płytek przy 256 x 256 z 4 poziomami szczegółów na iPhone 4S. Sam obraz mieści się w granicach 2048 x 2048.Jakikolwiek sposób kodowania PNG szybciej niż UIImagePNGRepresentation?
Moje wąskie gardło to UIImagePNGRepresentation
. Wykonanie każdego obrazu 256 x 256 zajmuje około 0,10-0,15 sekundy.
Próbowałem już generować wiele płytek w różnych kolejkach tła, ale to tylko obniża je do około 9-10 sekund.
Ja również próbowałem przy użyciu ramy ImageIO z kodem tak:
- (void)writeCGImage:(CGImageRef)image toURL:(NSURL*)url andOptions:(CFDictionaryRef) options
{
CGImageDestinationRef myImageDest = CGImageDestinationCreateWithURL((__bridge CFURLRef)url, (__bridge CFStringRef)@"public.png", 1, nil);
CGImageDestinationAddImage(myImageDest, image, options);
CGImageDestinationFinalize(myImageDest);
CFRelease(myImageDest);
}
Mimo to uzyskuje się mniejsze pliki PNG (wygrana!), Trwa około 13 sekund, 2 sekundy więcej niż wcześniej.
Czy istnieje sposób na szybsze kodowanie obrazu PNG z CGImage
? Być może robi to biblioteka korzystająca z rozszerzenia ARM NEON
(iPhone 3GS +), np. libjpeg-turbo?
Czy istnieje lepszy format niż PNG do zapisywania płytek, które nie zajmują dużo miejsca?
Jedyną realną opcją, jaką udało mi się wymyślić, jest zwiększenie rozmiaru kafli do 512 x 512. Skraca to czas kodowania o połowę. Nie jestem pewien, co to może zrobić z moim widokiem przewijania. Ta aplikacja jest przeznaczona dla iPada 2+ i obsługuje tylko iOS 6 (używając iPhone 4S jako linii bazowej).