2012-02-17 2 views
1

У меня есть анимация цикла, состоящая из 120 кадров, разрешение 512x512, сохраненная как 32-битные PNG-файлы. Я хочу воспроизвести эту последовательность в UIView внутри моего приложения. Может ли кто-нибудь дать мне несколько указаний относительно того, как я могу это сделать, надеюсь, я смогу это сделать, используя стандартный API (который я бы предпочел). Я мог бы использовать Cocos2D, если нужно, или даже OpenGL (но я совершенно новичок в OpenGL на этом этапе).Воспроизведение последовательности циклов изображений в UIView

+1

Преобразуйте его в видео, а затем воспроизведите это видео. –

ответ

6

Вы можете попробовать это:

// Init an UIImageView 
UIImageView *imageView = [[UIImageView alloc] initWithFrame:/*Some frame*/]; 

// Init an array with UIImage objects 
NSArray *array = [NSArray arrayWithObjects: [UIImage imageNamed:@"image1.png"], [UIImage imageNamed:@"image2.png"], .. ,nil]; 

// Set the UIImage's animationImages property 
imageView.animationImages = array; 

// Set the time interval 
imageView.animationDuration = /* Number of images x 1/30 gets you 30FPS */; 

// Set repeat count 
imageView.animationRepeatCount = 0; /* 0 means infinite */ 

// Start animating 
[imageView startAnimating]; 

// Add as subview 
[self.view addSubview:imageView]; 

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

+0

Я думаю, что у вас не хватит памяти, пытаясь создать массив изображений. – picciano

+0

Просто из любопытства я сделал небольшой проект. Я использовал 120 PNG каждый размером 512x512 пикселей и размером около 790 КБ, поэтому в целом 95 МБ. Потребовалось некоторое время, чтобы загрузить, но потом все прошло отлично. Пробовал это на 4.3 Simulator, 5.0 Simulator и на iPhone 4S. Симуляторы даже не отображали предупреждения памяти. – iska

+0

Тестирование на (например) относительно неизмененном 4S не сравнивается с раздутым 4; у некоторых моих клиентов есть проблемы с памятью, чем когда-либо. Прежде чем приступать к такому решению, я рекомендую попробовать это на вашем самом низком целевом устройстве; 3G-телефоны и 2G-касания, например, имеют только 128 МБ ОЗУ, а ~ 95 МБ много, чтобы потреблять даже для 256 МБ в новых устройствах (3GS-телефон, 4G сенсорный). – AndrewS

1

Несжатый, это около 90 МБ изображений, и это может быть так, как вы смотрите, если они распакованы в формат UIImage. Из-за длины анимации и размера изображений я настоятельно рекомендую хранить их в сжатом формате фильма. Взгляните на ссылку для рамки MediaPlayer; вы можете удалить элементы управления воспроизведением, вставить MPMoviePlayerController в свою собственную иерархию представлений и установить воспроизведение в цикл. Обратите внимание, что 640x480 является верхним поддерживаемым пределом для H.264, поэтому вам может понадобиться масштабировать видео в любом случае.

Обратите внимание на вопросы, связанные с циклом видео, как указано в вопросе здесь Smooth video looping in iOS.

+0

Правда, но если он собирается преодолеть трудности с конвертированием в фильм, внедряя «MPMoviePlayer» и, возможно, масштабируя фильм, он может сначала попытаться масштабировать изображения до нужного размера и/или сжать их , напишите семь строк кода и посмотрите, что произойдет;) – iska

+0

@iska: согласен, стоит проверить простое решение; см. мою заметку о вашем ответе. – AndrewS

Смежные вопросы