Предварительная загрузка изображений в приложение для iPhone?

StackOverflow https://stackoverflow.com/questions/1872423

  •  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" - это функция, требующая времени, прямо перед "раздуванием".

Что вы должны найти способ сделать, так это создать свои изображения и принудительно загрузить их до того, как они вам понадобятся.По-видимому, это уже другая история.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top