Лучшие практики анимации Iphone - PullRequest
0 голосов
/ 06 мая 2011

Я провожу некоторое тестирование, чтобы попытаться найти лучший способ добавить небольшие анимации в UIImageView.

Следующий код работает, однако при первом вызове возникает задержка, когда я предполагаю, что анимация загружается. Как мне загрузить анимацию, чтобы избежать этой задержки? При повторном вызове он начинается мгновенно. Этот код находится в - (void) метод loadView и [animation startAnimating]; вызывается из пользовательского метода. Примечание: анимация UIImageView * на самом деле является экземпляром var.

NSString *imageName;
NSMutableArray *animImages = [[NSMutableArray alloc]init];

for(int i = 0; i <= 40; i++) {
    imageName = [NSString stringWithFormat:@"frame_%d.png", i];
    [animImages addObject:[UIImage imageNamed:imageName]];
}

UIImageView *animation; // is actually an instant var declared in header.

animation = [[UIImageView alloc]initWithFrame:CGRectMake(50, 0, 600, 300)];
animation.animationImages = animImages;
animation.animationDuration = 2;
animation.animationRepeatCount = 1;

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

Большое спасибо

1 Ответ

1 голос
/ 06 мая 2011

Предпочитают загружать ресурсы в viewDidLoad, а не loadView.Вы должны удалить их в viewDidUnload, загрузка в viewDidLoad вернет их, если ваш view загрузится снова.

Можно утверждать, что вы также можете удалить их в didReceiveMemoryWarning, но AFAIK viewDidUnload следует использовать для освобождения элементов пользовательского интерфейса.Если вы используете didReceiveMemoryWarning, вы можете проверить, будет ли viewDidLoad вызываться снова, выпуская только если вызывается viewDidUnload:

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    if (![self isViewLoaded]) {
        // release resources
    }
}

Но если анимация является экземпляром var, и вы действительно делаете это

UIImageView *animation = [[UIImageView alloc]initWithFrame:CGRectMake(50, 0, 600, 300)];

Вы устанавливаете не переменную intance, а локальную.

Позже

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

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