Есть ли более эффективный способ анимации последовательности изображений?

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

Вопрос

Боюсь, это злой код:

CGRect iRect = CGRectMake(0.0f, 0.0f, 320.0f, 400.0f);
UIImageView *imgView = [[UIImageView alloc] initWithFrame:iRect];
imgView.animationImages = [NSArray arrayWithObjects:
                [UIImage imageNamed:@"b0001.png"],
                [UIImage imageNamed:@"b0002.png"],
                // 150 more
                [UIImage imageNamed:@"b0152.png"],
                nil];

Я немного помню, что imageNamed: это зло. Если я делаю это таким образом, и у меня есть для предоставления объектов UIImage, то эти объекты UIImage немедленно загружают эти файлы изображений в память, верно? И, кроме того, все эти 152 объемных объекта UIImage занимают большой перерыв в памяти, потому что они автоматически высвобождаются, не так ли?

Итак, в заключение, использование этой техники - отстой. Является ли? Я не знаю. На моем старом iPod touch первого поколения это, кажется, работает без задержки на 25 кадрах в секунду. Очень гладко и приятно. Единственное, чего я боюсь, так это того, что некоторые другие устройства могут думать об этом иначе. Хотя у меня есть самое слабое программируемое касание для iPod.

В любом случае, кто-нибудь видит какие-либо возможности улучшения там? Или я не должен использовать это и использовать setImage: из UIImageView в своем собственном алгоритме, который загружал бы и устанавливал эти изображения с отложенными селекторами, используя эту коренастую вещь imageWithContentsOfFile (может быть названа по-другому), без автоматического выпуска? Может, какой-нибудь умник написал небольшую библиотеку для высокопроизводительных видеофильмов с большим пальцем, которые состоят из последовательностей изображений?

(нет, видео на iphone недоступно; для этого Apple Framework просто поддерживает полноэкранный режим, и я не знаю ничего другого, что могло бы это сделать)

Это было полезно?

Решение

Я бы старался не загружать так много изображений в массив UIImageView. Аналогичный вопрос был задан здесь . Метод буферизации, который я здесь описываю, также должен применяться к вашей ситуации.

Другие советы

Вы правы насчет imageNamed ... вам не следует использовать его во многих случаях, поскольку он внутренне кэширует изображение. Использование:

[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"image1" ofType:@"png"];

Единственный раз, когда вы хотите использовать imageNamed, это когда

1) Вы снова и снова используете значок (просмотр таблиц и т. д.)
2) Вы не внедрили собственную систему кэширования

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