简体   繁体   English

CATransition动画在iOS中花费很长时间

[英]CATransition animation taking long time in iOS

I added animation to push one controller to another controller.here is my code to push view.this animation is taking 2 second in iPhone 5S and taking 5 seconds in iPhone 5.i am not able to figure out what is exact issue.i want this animation for 1 second.here is my code. 我添加了将一个控制器推到另一个控制器的动画。这是我推视图的代码。该动画在iPhone 5S中花费2秒,在iPhone 5中花费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) {

                         }];
      });

You are performing animation inside animation block so your duration is increased 您正在动画块中执行动画,因此会增加持续时间

Replace your code with 将您的代码替换为

 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);

And make sure you perform that in Main Queue 并确保您在主队列中执行该操作

Hope it is helpful 希望对您有所帮助

issue was in home detail screen,heavy task was happening in viewdidload.i check line by line,commenting each line in view didload which activity is taking more time.and i put time consuming activity in main thread and my issue is resolved. 问题是在家庭详细信息屏幕中,viewdidload中正在执行繁重的任务。我逐行检查,并在viewdidload中注释每行,以查看哪些活动花费了更多时间。我将耗时的活动放在主线程中,问题已经解决。

here is my code of animation 这是我的动画代码

 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) {

                         }];

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM