iPhone SDK: длинные анимации с проблемой «animationImages» - PullRequest
0 голосов
/ 17 июня 2009

Я давно пытаюсь настроить анимацию в xcode. Сначала я начал пытаться анимировать 100 1000x1000 pngs, но эти изображения были слишком большими для iphone, сейчас я пытаюсь анимировать 100 320x480 pngs. и кажется, что анимация хорошо до примерно 40 кадров, затем приложение вылетает, так, есть ли другой способ анимации, который бы не делал этого? Возможно, это просто потому, что этот код загружает слишком много изображений для iphone, есть ли какой-то другой метод, который я могу использовать, чтобы приложение перестало падать? Или я могу оптимизировать это код дальше? (Кстати, я новичок в платформе iphone, так что имейте в виду, отвечая)

- (IBAction)startClick1:(id)sender{

spud123.animationImages = [NSArray arrayWithObjects:
                          [UIImage imageNamed: @"spud1230000.png"],
                          [UIImage imageNamed: @"spud1230001.png"],
                          [UIImage imageNamed: @"spud1230002.png"],
                          [UIImage imageNamed: @"spud1230003.png"],
                          [UIImage imageNamed: @"spud1230004.png"],
                          [UIImage imageNamed: @"spud1230005.png"],
                          [UIImage imageNamed: @"spud1230006.png"],
                          [UIImage imageNamed: @"spud1230007.png"],
                          [UIImage imageNamed: @"spud1230008.png"],
                          [UIImage imageNamed: @"spud1230009.png"],
                          [UIImage imageNamed: @"spud1230010.png"],
                          [UIImage imageNamed: @"spud1230011.png"],
                          [UIImage imageNamed: @"spud1230012.png"],
                          [UIImage imageNamed: @"spud1230013.png"],
                          [UIImage imageNamed: @"spud1230014.png"],
                          [UIImage imageNamed: @"spud1230015.png"],
                          [UIImage imageNamed: @"spud1230016.png"],
                          [UIImage imageNamed: @"spud1230017.png"],
                          [UIImage imageNamed: @"spud1230018.png"],
                          [UIImage imageNamed: @"spud1230019.png"],
                          [UIImage imageNamed: @"spud1230020.png"],
                          [UIImage imageNamed: @"spud1230021.png"],
                          [UIImage imageNamed: @"spud1230022.png"],
                          [UIImage imageNamed: @"spud1230023.png"],
                          [UIImage imageNamed: @"spud1230024.png"],
                          [UIImage imageNamed: @"spud1230025.png"],
                          [UIImage imageNamed: @"spud1230026.png"],
                          [UIImage imageNamed: @"spud1230027.png"],
                          [UIImage imageNamed: @"spud1230028.png"],
                          [UIImage imageNamed: @"spud1230029.png"],
                          [UIImage imageNamed: @"spud1230030.png"],
                          [UIImage imageNamed: @"spud1230031.png"],
                          [UIImage imageNamed: @"spud1230032.png"],
                          [UIImage imageNamed: @"spud1230033.png"],
                          [UIImage imageNamed: @"spud1230034.png"],
                          [UIImage imageNamed: @"spud1230035.png"],
                          //and so on to 100
                          nil];

[spud123 setAnimationRepeatCount:1];
spud123.animationDuration =5.7;
[spud123 startAnimating];

}

Ps: Iv'e попробовал NSTimer, но я не могу заставить его прекратить повторять анимацию

Ответы [ 3 ]

3 голосов
/ 18 июня 2009

Это не проблема анимации, это проблема дизайна.

Прежде всего, просто сделайте шаг вперед и рассчитайте требования к памяти вашего приложения: При распаковке каждый из этих PNG использует 614400 байт. Таким образом, сотня из них использует 61440000 байт: более 60 мегабайт. Этого немного ожидать от телефона.

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

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

Наконец, если этот подход не работает, вам придется изучить OpenGL для достижения необходимой производительности.

Не зная больше о вашем приложении, трудно дать совет.

2 голосов
/ 22 июня 2010

Вы должны внимательно рассмотреть использование памяти вашего приложения, но для того, чтобы вы знали варианты, я успешно использовал модифицированный класс, основанный на http://www.modejong.com/iPhone/PNGAnimatorDemo.zip, который может, на оборудовании iPad первого поколения, обрабатывать 15fps full Экран (1024x768) PNG анимации. Но следите за размером пакета приложения. Это определенно не лучший вариант для большинства приложений.

0 голосов
/ 20 июня 2009

Часто кадры в анимации очень похожи. Поэтому одно из возможных решений - загрузить несколько изображений ... а затем анимировать их с помощью OpenGL. Это хорошо работает, скажем, для подпрыгивания мяча. Не уверен, какие изображения вы анимируете.

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