Предварительная загрузка изображений в приложение для iPhone?
-
18-09-2019 - |
Вопрос
У меня есть последовательность изображений, которую необходимо отобразить за короткое время (последовательность PNG).Всего существует 31 PNG-файл, каждый размером около 45 КБ.Я уже загрузил их со следующими кодами:
imgArray = [[NSMutableArray alloc] init];
for(int i = 0; i <= 30; i++) {
NSString * filename = [NSString stringWithFormat:@"img_000%.2d.png", i];
UIImage *temp = [UIImage imageNamed:filename];
[imgArray addObject:temp];
[temp release];
temp = nil;
}
Я использую следующие коды для отображения изображений:
CGImageRef image = [(UIImage *)[imgArray objectAtIndex:imgFrame] CGImage];
imgLayer.contents = (id)image;
if(imgFrame < 29) {
imgFrame++;
} else {
imgFrame = 0;
imgLayer.hidden = TRUE;
[imgTimer invalidate];
}
где imgLayer - это CALayer
.(imgTimer - это повторяющийся таймер с интервалом 0,03 с)
Но я обнаружил, что когда я вызываю изображения, в первый раз они сильно запаздывают.За исключением 1-го появления, другое появление не имеет проблем.
Связано ли это с предварительной загрузкой изображений?Или мои изображения слишком велики по размеру файла?
Решение
Причину ваших задержек трудно определить без данных профилирования.Но вот трюк, который может помочь:Объедините все ваши изображения в один большой файл.Попробуйте сделать его прямоугольным (возможно, 6x6 в вашем случае или 4 * 8).Затем загрузите этот отдельный файл и обрежьте каждое изображение для отображения (т.е.создайте изображение для отображения размером с плитку и скопируйте одну плитку из большого изображения за другой в отображаемое изображение).
Другие советы
Изображения загружаются, когда они используются и отображаются.Если вы используете профилировщик времени в Инструментах, вы заметите, с какой задержкой вы сталкиваетесь.Если затем вы увеличите это отставание и посмотрите, что его вызывает, вы обычно увидите, что "copyImageBlockSetPNG" - это функция, требующая времени, прямо перед "раздуванием".
Что вы должны найти способ сделать, так это создать свои изображения и принудительно загрузить их до того, как они вам понадобятся.По-видимому, это уже другая история.