iPhone: изменение CATransition приводит к прекращению анимации UIActivityIndicatorView

Я реализовал нестандартную анимацию для случая, когда на экран выводится новый вид (см. Код ниже). По какой-то причине после того, как я реализовал этот код, он перестал работать с моими UIActivityIndicatorViews. Они будут показаны на экране, но не анимированы, даже если их анимация истинна. Я полагаю, что это из-за того, что я изменил CATransition, но не могу понять, как это исправить для UIActivityIndicatorView.

изменить анимацию по умолчанию для push

CATransition* fade = [CATransition animation];
fade.duration = 1.0;
fade.type = kCATransitionFade;
fade.subtype = kCATransitionFromTop;

[self.navigationController.view.layer 
addAnimation:fade forKey:kCATransition];

позже в viewDidLoad я запускаю анимацию

[spinner startAnimating];

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

2 ответа

Я столкнулся с этой проблемой при использовании CATransition внутри подкласса UINavigationController для создания пользовательской анимации при нажатии или выталкивании контроллеров представления.

Внутри метода этого подкласса UINavigationController у меня был этот код:

- (void)addCustomTransition
{
    CATransition* transition = [CATransition animation];
    transition.duration = kAnimationDuration;
    transition.timingFunction =
    [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    transition.type = kCATransitionFade;
    [self.view.layer addAnimation:transition forKey:nil];
}

Однако позже я узнал, что вы также должны добавить ту же анимацию к слою представления push-/popped viewController:

- (void)addCustomTransitionToViewController:(UIViewController *)viewController
{
    CATransition* transition = [CATransition animation];
    transition.duration = kAnimationDuration;
    transition.timingFunction =
    [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    transition.type = kCATransitionFade;
    [self.view.layer addAnimation:transition forKey:nil];
    [viewController.view.layer addAnimation:transition forKey:nil]; // this is what was missing
}

Это представление контроллера с толкаемым / всплывающим представлением - это то, которое имело UIActivityIndicatorView, которое не анимировалось должным образом.

Надеюсь это поможет!

Просто измените продолжительность с 1,0 до 0,3 или менее
просто я проверен, и это работает

Другие вопросы по тегам