Анимация в iphone внутри для цикла не работает - PullRequest
0 голосов
/ 15 февраля 2010

В настоящее время я разрабатываю приложение для iphone, хочу анимировать некоторые изображения на экране, и для этого я написал этот код

    for (int i = 1 ; i <= 5 ; i++)
{
imgview.image = [UIImage imageNamed: [NSString stringWithFormat:@"spleshScreen%d.png", 1]];
NSLog(@"i = %d" , i);
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDelegate:self];
[UIView setAnimationDuration:0.9];
[UIView setAnimationRepeatCount:5];
[UIView setAnimationBeginsFromCurrentState:YES];
imgview.image = [UIImage imageNamed: [NSString stringWithFormat:@"spleshScreen%d.png", i]];
i++;
imgview.frame = CGRectMake(imgview.frame.origin.x, (imgview.frame.origin.y + 180), imgview.frame.size.width, imgview.frame.size.height);
imgview.frame = CGRectMake(imgview.frame.origin.x, (imgview.frame.origin.y - 350), imgview.frame.size.width, imgview.frame.size.height);

[UIView commitAnimations];
}

если я удаляю код цикла for, он работает нормально, но с циклом for он не работает и не выдает никакой ошибки

Пожалуйста, дайте мне знать, в чем может быть проблема

Ответы [ 2 ]

1 голос
/ 15 февраля 2010

Вы можете использовать свойство animationImages UIImageView для обработки анимации за вас.

Вот пример кода:


imageView.animationImages = [NSArray arrayWithObjects:[UIImage imageNamed: [NSString stringWithFormat:@"spleshScreen%d.png", 1]],
                                                      [UIImage imageNamed: [NSString stringWithFormat:@"spleshScreen%d.png", 2]],
                                                      [UIImage imageNamed: [NSString stringWithFormat:@"spleshScreen%d.png", 3]],
                                                      [UIImage imageNamed: [NSString stringWithFormat:@"spleshScreen%d.png", 4]],
                                                      [UIImage imageNamed: [NSString stringWithFormat:@"spleshScreen%d.png", 5]],
                                                    nil];       // Don't forget to nil terminate this array!


[imageView setAnimationDuration:2.0];  // Define the amount of time it takes to go through one cycle of all the images.
// The property animationRepeatCount default value is 0, which specifies to repeat the animation indefinitely.

[imageView startAnimating];

В последних двух строках вашего кода вы меняли начало координат кадра вашего изображения (добавив 180, а затем вычтя 350, что на самом деле не имеет смысла).
Поскольку вы не говорили об этом в своем вопросе, я исключил это.

0 голосов
/ 15 февраля 2010

Описание класса UIView: Анимации запускаются в отдельном потоке и начинаются, когда приложение возвращается в цикл выполнения.

Итак, когда вы запускаете цикл, вы создаете несколько потоков, и с этим могут быть проблемы. Попробуйте удалить цикл for и использовать метод setAnimationDidStopSelector (см. Справочник классов UIView):

[UIView setAnimationDidStopSelector:@selector(annimationDidFinish:)];

Когда вызывается ваш annimationDidFinish, вы можете вызвать метод для запуска «другого цикла». Я не тестировал это решение, но я просто даю вам другой трек, чтобы помочь вам.

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