Оптимизировать загрузку многих изображений на iPad - PullRequest
1 голос
/ 28 октября 2010

Я работаю над проектом для iPad, в котором пытаюсь смоделировать вращение трехмерного тела с помощью касания, переключая предварительно отрендеренные изображения.

Я не самый проницательный человек, когда дело доходит до управления памятью, поэтому мне интересно, есть ли у кого-нибудь какие-нибудь советы, как это оптимизировать.

Мое решение теперь выглядит примерно так:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *myTouch = [[event allTouches] anyObject];
CGPoint location = [myTouch locationInView:self.view];
int pictureIndex;
//Rough mapping of image to point on screen
if (location.x <= 384 ) {
    pictureIndex = (384 - location.x)/(768/rotatingPictures)+1;
}
else {
    pictureIndex = rotatingPictures - (location.x-384)/(768/rotatingPictures)+1;
}
[theImageView setImage:[UIImage imageNamed:[NSString stringWithFormat:@"image_%d.png", pictureIndex]]];

}

Эффективно ли загружать изображения таким образом? Было бы лучше сначала загрузить изображения в массив или что-то подобное?

Я бы предпочел иметь все время загрузки сразу, а не во время вращения.

1 Ответ

8 голосов
/ 29 октября 2010

Первая важная информация: imageNamed безнадежно !Как известно, быть собакой.Это ни то, ни другое;он плохо кешируется и имеет тенденцию к чрезмерному увеличению использования памяти.(Google опубликовал более 100 статей по этому вопросу.) Итак, все вышло .

Вам нужно будет точно сказать, сколько у вас изображений, и каков их размер.(КБ или МБ). Каждое изображение имеет вид.

Только тогда можно принять решение об успешной стратегии.

Переключить с одного большого изображения на другое «должным образом», если выменяются огромные изображения снова и снова, и если вам нужно беспокоиться о памяти, вы делаете это .. .

[hugeImage.image release];
hugeImage.image = [[UIImage alloc] initWithContentsOfFile:
           [[NSBundle mainBundle]
           pathForResource:@"bodyPart"
           ofType:@"png"]];

, которая должным образом избавится от предыдущего изображения и принесетследующий.НИКОГДА, НИКОГДА не используйте imageNamed - он специально предназначен только для небольших (то есть размером с иконку) изображений, использующих интерфейс (т. Е. Кнопок, значков и т. Д.).

Однако, опять же, никто не сможет помочь вам, пока мы не узнаемточное количество изображений, точный размер и, действительно, как часто в секунду или в минуту вы ожидаете, что изображения будут поменяться местами.Надеюсь, это поможет!

----- Вы продолжали говорить ...

"89 .png фотографий размером от 70 К до 100 К"

Хорошие новости, у вас будет никаких проблем .Вы можете легко загрузить их, и вы можете сделать это достаточно быстро в режиме реального времени, чтобы сделать анимацию со скоростью 20 - 30 кадров в секунду.

Просто делайте именно то, что я говорю выше, каждый раз, когда вы переключаетесь с одного на другое, и выготово.

(Для записи не забудьте сначала загрузить один файл при инициализации, чтобы фрагмент кода, приведенный выше, работал должным образом при первом использовании, вы знаете. И, если возможно, отпуститепоследний, когда вы закончите.) Приветствия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...