Как сделать анимацию с использованием изображений эффективно в iOS - PullRequest
4 голосов
/ 13 ноября 2011

Как я могу сделать анимацию в iOS, не занимая много памяти (или эффективно), поскольку в настоящее время я сталкиваюсь с проблемами сбоя?

Для одной анимации у меня есть последовательность из 100 изображений, и каждое изображение примерно40 КБ, примерно 7 анимаций на 700 изображений.

Например, здесь я показал пример анимации с 2 изображениями. Это мой текущий код для создания анимации.

/*First taking two images into an Array*/
NSArray *imageArray = [NSArray arrayWithObjects:[UIImage imageNamed:@"img1"],[UIImage imageNamed:@"img2"],nil];  
/*Creating an image view as a layer for performing the animation */
imgView = [UIImageView alloc];
[imgView initWithFrame:CGRectMake(110,245,100,100)];
/*Setting the images for performing animations*/
imgView.animationImages = imageArray;
imgView.animationDuration = 8.5 ;//delay for performing the animation
imgView.animationRepeatCount = 1;
/* ..and finally adding the animation to the current view */
[self.view addSubview:imgView];
[imgView startAnimating];
[imgView release];
[imgView stopAnimating];
imageArray = nil;
[imageArray release];

Может кто-нибудь предложить какое-либо улучшение кода, чтобы анимации моглибыть эффективными или есть какая-либо другая альтернатива, например openGL или Core Animation, если так, то кто-нибудь может предложить пример кода для этого.

Ответы [ 2 ]

3 голосов
/ 13 ноября 2011

Мое предложение заключается в использовании Cocos2d, платформы на основе Open GL, специально разработанной для игр.

В вашем случае вы получите следующие преимущества:

  1. использование текстурного атласа вместо отдельных изображений для экономии как можно большего объема памяти;

  2. с использованием формата PVR для ваших изображений (по сравнению с PNG);PVR - это родной формат графического чипа iPhone / iPad, и он позволит сэкономить больше памяти;

  3. вы также можете попробовать использовать меньший формат для ваших изображений (т. Е.RGB565 вместо RGB8888, 16 бит на пиксель вместо 32).

Если вы считаете, что это может сработать, взгляните на это руководство .

Вы можете сделать то же самое, используя Open GL или Core Animation напрямую, но я думаю, что лучше, если Cocos2d справится с вещами низкого уровня.

Для учебника на основе Core Animation для того же., посмотрите на этот пост .Как вы увидите, вы будете реализовывать несколько классов для того, чтобы делать то, что Cocos2d уже предлагает вам (вместе со многими другими функциями).

2 голосов
/ 16 июня 2013

Приведенная выше ссылка на mysterycoconut хороша тем, что избегает рефлекторного поста "use Cocos2D", который всегда появляется, когда люди задают вопрос о анимации CoreGraphics в SO.Корень проблемы, с которой вы сталкиваетесь, - это плохо продуманный API animationImages, который потребляет слишком много памяти приложения и никогда не должен использоваться.Вы можете прочитать подробное описание проблемы на Использование видео и памяти на устройствах iOS .Мое собственное решение проблемы описано там.По сути, вы хотите распаковать данные изображения в файл, а затем скопировать содержимое в графическую карту.Это очень и очень быстро под iOS, и CoreGraphics использует оптимизированную текстурную логику на уровне видеокарты, которая ограничивает буферные копии, так что ЦП устройства используется очень мало.При таком подходе можно получить очень быструю анимацию (от 45 до 60 кадров в секунду) сотен изображений без использования всей памяти приложения, используя только CoreGraphics.

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