Как воспроизвести вступительную анимацию при запуске приложения iOS

Я пытаюсь исправить код, чтобы воспроизвести анимацию открытия в моем приложении для iphone, которое я создал в xcode. Я хочу, чтобы он воспроизводился только при запуске приложения (как у злых птиц), а не каждый раз, когда я возвращаюсь на главную страницу. Я пробовал несколько вещей, и ничего не работает правильно. Может кто подскажет как правильно это сделать?

Я использую серию изображений для создания анимации.

Я попытался поместить код анимации из учебника по гиковскому лимону (http://www.youtube.com/watch?v=5AbdZ-8JBZQ) в представленииDidLoad. Это работает и воспроизводит анимацию, но каждый раз, когда я возвращаюсь на главную страницу, анимация воспроизводится. Я не хочу, чтобы анимация воспроизводилась при возврате на главную страницу, только при запуске приложения.

Я также попытался добавить еще одно представление, которое является первым представлением при запуске приложения, и воспроизвести анимацию в viewDidLoad, а затем с помощью селектора выполнения перейти на главную страницу после завершения анимации (сделано с частью после задержки). Это также работает и воспроизводит анимацию и не воспроизводится, когда я возвращаюсь на главный экран, НО это вызывает некоторую ошибку, приводящую к сбою приложения. Я поместил NSLogs в разделы viewDidLoad, чтобы видеть, что страницы работают, и иногда, когда я играю в приложении, он говорит, что вызывается мой открывающий анимационный viewDidLoad. Так что я думаю, что это как-то связано с аварией. Когда я вынимаю этот вид и перехожу непосредственно к основному виду, он не падает.

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

Пожалуйста, помогите, это сводит меня с ума, я не могу понять, что происходит. Я знаю, что это может работать с Angry Birds, и другие делают это очень успешно.

Если есть лучший метод?


person user1588717    schedule 09.08.2012    source источник


Ответы (5)


Попробуй это:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [self.window makeKeyAndVisible];

    UIImageView *imageView =[[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
    imageView.animationImages = [NSArray arrayWithObjects:
                                 [UIImage imageNamed:@"myImage1.png"], [UIImage imageNamed:@"myImage2.png"], [UIImage imageNamed:@"myImage3.png"], [UIImage imageNamed:@"myImage4.png"], [UIImage imageNamed:@"myImage5.png"], [UIImage imageNamed:@"myImage6.png"], nil];


    imageView.animationDuration = 0.5;
    imageView.animationRepeatCount = 3;
    [imageView startAnimating];
    [self.window addSubview:imageView];

    return YES;
}

добавьте анимацию в качестве подпредставления для вас self.window

person Ty Lertwichaiworawit    schedule 11.11.2013

Вы захотите включить его в метод - (void)applicationWillEnterForeground:(UIApplication *) приложения вашего делегата приложения, это вызывается только тогда, когда ваше приложение "запущено".

person Kyle Richter    schedule 09.08.2012
comment
Нет. Это вызывается при каждом запуске, а это не то, чего хочет OP. - person ; 10.08.2012
comment
Кайл Спасибо за попытку помочь. - person user1588717; 10.08.2012

Поместите свой метод анимации в

- (BOOL)application:(UIApplication *)app didFinishLaunchingWithOptions:(NSDictionary *)opts

метод. Используйте отдельный вид, предназначенный для анимации. Добавьте его в ключевое окно приложения и удалите, когда анимация закончится.

person Community    schedule 09.08.2012
comment
Вы предлагаете поместить это в делегат приложения? Это то, что я пытался сделать, но ни один из моих кодов не работает. Он либо вообще не воспроизводится, либо фактически не воспроизводит анимацию (это с анимацией в своем собственном представлении). Что вы имеете в виду под ключевым окном приложения? Есть ли пример кода, на который вы могли бы мне указать, я довольно новичок и просто не могу понять, как это сделать правильно. - person user1588717; 10.08.2012
comment
@ user1588717 вы, должно быть, что-то напутали, я уже делал это раньше. И я имел в виду [UIApplication sharedApplication].keyWindow - person ; 10.08.2012

Или вы также можете положить его в

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

У меня есть контроллер представления, и в нем я загружаю представление. Позвоните оттуда.

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

(void)applicationDidFinishLaunching:(UIApplication *)application {
// Добавляем подпредставление

[window addSubview:animationController.view];
// через некоторое время делаем что-то другое
[self PerformSelector:@selector(firstcontroller) withObject:nil afterDelay:5];
[window makeKeyAndVisible] ; }

-(void)firstcontroller{
[окно addSubview:firstControllerAfterLaunch.view];
}

person S.P.    schedule 09.08.2012
comment
Извините, я новичок и действительно не уверен, что вы имеете в виду. Можете ли вы объяснить немного больше? Спасибо. - person user1588717; 10.08.2012
comment
В вашем делегате приложения есть этот метод, который я разместил выше. Там вы вызываете свой контроллер представления. Если это анимация в фоновом потоке, тогда вам нужно иметь команду sleep, чтобы заставить ваш основной поток спать, иначе будут загружены другие ваши представления. Если потоки не используются, вы можете просто загрузить свои собственные контроллеры представления. - person S.P.; 10.08.2012
comment
Как я могу это сделать, если я использую только один поток? Я не умею работать с несколькими потоками. - person user1588717; 10.08.2012
comment
Если вы не работаете с несколькими потоками, вам нужно только вызвать контроллер представления, который обрабатывает анимацию. - person S.P.; 10.08.2012
comment
Хорошо... не знаете ли вы, где есть пример кода, на который я мог бы посмотреть? Я пробовал кодировать в делегате приложения, и у меня это не работает. Либо он вообще не работает, либо анимация не воспроизводится. - person user1588717; 10.08.2012
comment
Большое спасибо за вашу помощь, я попробую это. - person user1588717; 10.08.2012

Попробуйте поместить код анимации в свой viewDidAppear с помощью dispatch_once. Таким образом, вы гарантируете, что анимация будет вызываться только один раз за время существования приложения.

person Kaan Dedeoglu    schedule 10.08.2012
comment
Я не очень хорошо знаком с dispatch_once. Я просмотрел документацию Apple, и там написано, что объект блока выполняется один раз и только один раз за все время существования приложения. Кажется, что он будет играть только один раз. Я хотел бы, чтобы он воспроизводился каждый (или почти каждый) раз, когда приложение открыто. Я просто не хочу, чтобы оно воспроизводилось, когда пользователь возвращается на главную страницу. Дайте мне знать, если я неправильно понял то, что сказано в документации Apple. Спасибо. - person user1588717; 10.08.2012