UIImageView задержка анимации - PullRequest
0 голосов
/ 12 июня 2011

У меня проблема с анимацией.На старте все гладко.Однако, когда приложение работает в течение определенного периода времени (около 10 минут), анимация отстает.

Вот код в viewDidLoad:

[NSTimer scheduledTimerWithTimeInterval:3.0 target:self selector:@selector(updateImage) userInfo:nil repeats:YES];

И в - (void)updateImage: // изображение исчезает

[aSubview release];
[aSubview removeFromSuperview];
aSubview = [[UIImageView alloc] initWithFrame:CGRectMake(28, 64, 265, 284)];
aSubview.image = [slideShowArray objectAtIndex:randNum];
[aSubview setAlpha:0.0];
[UIImageView beginAnimations:NULL context:nil];
[UIImageView setAnimationDuration:2.0];
[aSubview setAlpha:1.0];
[UIImageView commitAnimations];
[self.view addSubview:aSubview];

UIImageView *film = [[UIImageView alloc] initWithFrame:CGRectMake(20, 34, 280, 344)];
film.image = [UIImage imageNamed:@"film5.png"];
[film setAlpha:1.0];
[self.view addSubview:film];
[film release];

Может кто-нибудь объяснить это?Это связано с проблемой памяти или с чем-то еще?Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 12 июня 2011
[self.view addSubview:aSubview];

Вы добавляете подпредставление каждые 3 секунды.Таким образом, через 10 минут появляется 200 подпредставлений, которые требуют слишком много памяти и, следовательно, замедляют работу приложения.Перед добавлением нового подпредставления удалите предыдущие, если они не нужны.И если вам нужно 200 подпредставлений одновременно, вам следует пересмотреть свой дизайн.

РЕДАКТИРОВАТЬ: После редактирования вопроса, почему вам нужно каждый раз добавлять film?Вы добавляете новый объект film каждый раз, когда вызывается метод.Обратите внимание, что супер вид сохраняет подпредставления.Таким образом, если метод вызывается 20 раз, у вас есть 20 film объектов в памяти.

0 голосов
/ 12 июня 2011
[self.view addSubview:aSubview];

Выше не проблема, из яблочной документации для addSubView.

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

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

0 голосов
/ 12 июня 2011

Да, ваша проблема с агрегацией памяти с течением времени.Чтобы решить эту проблему, используйте инструменты, чтобы проверить использование памяти и выяснить, что ее вызывает.Вы можете не выпустить какой-либо объект.В XCode перейдите в Product -> Profile или нажмите «cmd + i», выберите «Allocations» и добавьте «Leaks» вручную.Запустите инструменты и попробуйте отладить вашу проблему.

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