Анимация CATransition занимает много времени в iOS

Я добавил анимацию для перемещения одного контроллера в другой контроллер. Вот мой код для просмотра. Эта анимация занимает 2 секунды в iPhone 5S и 5 секунд в iPhone 5. Я не могу понять, в чем именно проблема. Я хочу эта анимация за 1 секунду. вот мой код.

 DetailVC *detailObj = [[DetailVC alloc] initWithNibName:@"DetailVC" bundle:nil];
 detailObj.dataGift = data;


        detailObj.view.transform =  CGAffineTransformScale(CGAffineTransformIdentity, 2.0, 2.0);
        [UIView animateWithDuration:1.0
                         animations:^{
                             CATransition* transition = [CATransition animation];
                             transition.duration = 0.75;
                             transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
                             transition.type = kCATransitionFade;
                             [self.navigationController.view.layer addAnimation:transition forKey:nil];
                            [self.navigationController pushViewController:detailObj animated:false];

                             detailObj.view.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1.0, 1.0);
                         } completion:^(BOOL finished) {

                         }];
      });

2 ответа

Вы выполняете анимацию внутри блока анимации, поэтому ваша продолжительность увеличивается

Замените свой код на

 DetailVC *detailObj = [[DetailVC alloc] initWithNibName:@"DetailVC" bundle:nil];
 detailObj.dataGift = data;
 detailObj.view.transform =  CGAffineTransformScale(CGAffineTransformIdentity, 2.0, 2.0);


CATransition* transition = [CATransition animation];
transition.duration = 0.75;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
transition.type = kCATransitionFade;
[self.navigationController.view.layer addAnimation:transition forKey:nil];
[self.navigationController pushViewController:detailObj animated:false];

detailObj.view.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1.0, 1.0);

И убедитесь, что вы выполняете это в главной очереди

Надеюсь, это полезно

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

вот мой код анимации

 gameDetailObj.view.transform =  CGAffineTransformScale(CGAffineTransformIdentity, 2.0, 2.0);
        [UIView animateWithDuration:1.0
                         animations:^{

                             [self.navigationController pushViewControllerSafetly:gameDetailObj animated:NO];

                             gameDetailObj.view.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1.0, 1.0);
                         } completion:^(BOOL finished) {

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