iPhone: изменение CATransition приводит к прекращению анимации UIActivityIndicatorView - PullRequest
3 голосов
/ 21 декабря 2011

Я реализовал нестандартную анимацию для случая, когда на экран выводится новый вид (см. Код ниже). По какой-то причине после того, как я реализовал этот код, он перестал работать с моими 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 ]

3 голосов
/ 30 июля 2013

Я столкнулся с этой проблемой при использовании 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-po-view-контроллера:

- (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, которое не анимировалось должным образом.

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

0 голосов
/ 21 декабря 2011

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

...