CATransition动画在iOS中需要很长时间



我添加了将一个控制器推送到另一个控制器的动画。这是我推送视图的代码。此动画在 iPhone 5S 中需要 2 秒,在 iPhone 5S 中需要 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) {
                         }];
      });

您正在动画块内执行动画,因此持续时间会增加

将您的代码替换为

 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中发生了繁重的任务.我逐行检查,在视图中注释每一行 didload 哪个活动花费更多时间。我将耗时的活动放在主线程中,我的问题得到解决。

这是我的动画代码

 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) {
                         }];

最新更新