Анимация 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) {
}];