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 или менее
просто я проверен, и это работает