Какая самая простая покадровая анимация в iPhone SDK?

Я занимаюсь разработкой для платформы iphone уже около 3 недель, и я пытаюсь настроить покадровую анимацию с 16 изображениями 1000x1000 png (с прозрачностью) и планирую анимировать примерно с 100 позже, поэтому Сначала я попытался использовать imageNamed для анимации всех изображений, подобных этой

-(IBAction)startClick1:(id)sender { cloud.animationImages = [NSArray arrayWithObjects: [UIImage imageNamed: @"g0000.png"], [UIImage imageNamed: @"g0001.png"], [UIImage imageNamed: @"g0002.png"], [UIImage imageNamed: @"g0003.png"], [UIImage imageNamed: @"g0004.png"],

Теперь это работало нормально в симуляторе, но когда оно доходило до устройства, устройство просто перезагружалось при первой попытке анимации, возможно, из-за известных проблем с памятью в imageNamed, поэтому после некоторых исследований я обнаружил, что предполагается imageWithContentsOfFile не кэшировать изображения и, надеюсь, не вызовет перезагрузку iphone, когда запрошена анимация, поэтому я изменил свой код на что-то вроде этого:

- (IBAction)startClick:(id)sender { gordon.animationImages = [NSArray arrayWithObjects: [UIImage imageWithContentsOfFile: [[NSBundle mainBundle] pathForResource:@"g0001.png" ofType:nil] ], [UIImage imageWithContentsOfFile: [[NSBundle mainBundle] pathForResource:@"g0002.png" ofType:nil] ], [UIImage imageWithContentsOfFile: [[NSBundle mainBundle] pathForResource:@"ge0003.png" ofType:nil] ], [UIImage imageWithContentsOfFile: [[NSBundle mainBundle] pathForResource:@"g0004.png" ofType:nil] ], [UIImage imageWithContentsOfFile: [[NSBundle mainBundle] pathForResource:@"g0005.png" ofType:nil] ], [UIImage imageWithContentsOfFile: [[NSBundle mainBundle] pathForResource:@"g0006.png" ofType:nil] ],

Теперь он работает с ошибками в симуляторе и не работает на устройстве так же, как метод imageNamed. Итак, каков наилучший и самый простой способ анимировать последовательность изображений, которые будут нормально работать на устройстве? Ох, и при ответе помните, что я новичок в этой платформе.

4 голоса | спросил James 14 J0000006Europe/Moscow 2009, 16:48:01

4 ответа


0

Одно из основных отличий между imageNamed: и imageWithContentsOfFile: в том, что imageNamed возвращает изображение, предварительно распакованное.

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

Теперь я заметил, что вы загружаете 1000x1000 изображений, но размер экрана составляет всего 320x480. Вы уменьшаете изображение, кадрируете или как? Если вы уменьшаете масштаб, рассмотрите возможность предварительного уменьшения изображения. Кроме того, ваша анимация должна быть 30 кадров в секунду, или это больше похоже на анимацию слайд-шоу?

Наконец, я бы рекомендовал загружать кадры анимации по требованию. Как вы можете видеть, 1000x1000 изображений занимают слишком много памяти для оптимизации загрузки. Если вы сохраняете только один элемент памяти в один момент времени, вы не потерпите крах, но тогда вам нужно быть очень осторожным с любыми паузами в вашем коде. Если вы выполняете эффект типа «Кен Бернс» в слайд-шоу, вы можете предварительно оптимизировать (распаковать) одно изображение для рисования на время слайда.

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

ответил NilObject 14 J0000006Europe/Moscow 2009, 17:12:23
0

Apple рекомендует всегда использовать графическую программу для изменения размера изображений вместо устройства. Это требует изрядного количества вычислительной мощности. Это может стать серьезным замедлением, изменив размер 24 изображения за секунду.

ответил Corey Floyd 14 J0000006Europe/Moscow 2009, 22:44:30
0

У меня были проблемы с получением 3 прозрачных слоев размером 400x400 На iphone нет способа заставить работать 16 изображений такого размера, поэтому сначала необходимо выполнить переоценку, а затем, что касается анимации, я использую повторяющийся таймер, который вызывает каждые 24 секунды для рендеринга и установки рендеринга на поверхности.

ответил Robert Gould 14 J0000006Europe/Moscow 2009, 17:07:01
0

Я использовал этот код, который прекрасно работает - www.mode (здесь нет пробелов) jong.com/iPhone/- Поиск "PNG Animation" (ТАК не позволил бы мне добавить точную ссылку)

Он загружает файлы PNG по мере необходимости, а не заранее.

Это решает проблему с памятью (вы могли бы даже использовать кадры 1000x1000) - Однако вы все еще сталкиваетесь с проблемой дискового пространства. Программа будет огромна для больших /многих анимаций.

НТН,

Одед.

ответил Oded Ben Dov 23 Mayam11 2011, 09:46:34

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132