当前位置: 首页 > 知识库问答 >
问题:

CATransform3D动画与2个步骤不工作

公西翼
2023-03-14

我有一个序列动画,我正在尝试做。它有两个步骤。

步骤1:我取下图层,稍微改变一下透视图,这样看起来图层的顶部会向后移动<代码>sourceViewController。看法层转换CATTransferM3dMakePerspective(0,0.003,CATTransferM3dDidEntity)

第2步:我将比例更改为80%并将透视恢复正常。这就像一个轻微的摇摆缩小动画。

sourceViewController。看法层transform=CATTransferM3DScale(sourceViewController.view.layer.transform,0.8,0.8,1)

sourceViewController。看法层转换CATTransferM3dMakePerspective(0,0,sourceViewController.view.layer.transform)

我最大的问题是这个。我不能同时在图层上做2个动画。它会在第一次转换结束时自动开始,而不是同时做两个。这可以通过conat修复,但是因为我希望第一步发生在顶部,所以图层保存它的状态,所以第二步可以发生,我不能同时处理所有三个。

如何创建在同一图层上有1个或多个转换的多步动画?就像我在下面的示例中所说的,它将跳过第1步并开始,就好像该步骤已经完成一样。我知道解释起来有点混乱。这是我的动画。

[UIView animateWithDuration:2.0
                        delay:0.0
                        options:UIViewAnimationCurveEaseIn 
                     animations:^{
                         sourceViewController.view.layer.transform = CATransform3DMakePerspective(0, 0.003, sourceViewController.view.layer.transform);
                         [UIView animateWithDuration:1.0
                                               delay:1.0
                                             options:UIViewAnimationCurveEaseOut 
                                          animations:^{
                                              sourceViewController.view.layer.transform = CATransform3DConcat(CATransform3DScale(sourceViewController.view.layer.transform, 0.8, 0.8, 1),CATransform3DMakePerspective(0, 0, sourceViewController.view.layer.transform));

                                          } 
                                          completion:nil];
                     } 
                     completion:^(BOOL finished){
                     }];

我已经谷歌并尝试了一切。必须有一种方法可以在同一图层上从最后一个elft关闭的地方开始连续动画。我传入的是图层而不是CATransform3DIdreal,因为我读到身份恢复到起始状态,而不是图层转换到的位置。

共有2个答案

堵雅健
2023-03-14

您需要在第一个动画的完成处理程序中嵌套第二个动画

[UIView animateWithDuration:2.0
                        delay:0.0
                      options:UIViewAnimationCurveEaseIn 
                   animations:^{
                         sourceViewController.view.layer.transform = CATransform3DMakePerspective(0, 0.003, sourceViewController.view.layer.transform);
                     } 
                     completion:^(BOOL finished){
                                        [UIView animateWithDuration:1.0
                                                              delay:0.0
                                                            options:UIViewAnimationCurveEaseOut 
                                                         animations:^{
                                                               sourceViewController.view.layer.transform = CATransform3DConcat(CATransform3DScale(sourceViewController.view.layer.transform, 0.8, 0.8, 1),CATransform3DMakePerspective(0, 0, sourceViewController.view.layer.transform));
                                          } 
                                          completion:nil];
                     }];
顾泰平
2023-03-14

在第一个动画完成之前,您不想开始第二个动画。这就是完成块的作用。

[UIView animateWithDuration:2 delay:0 options:UIViewAnimationCurveEaseIn animations:^{
    sourceViewController.view.layer.transform = CATransform3DMakePerspective(
        0, 0.003, sourceViewController.view.layer.transform);
} completion:^(BOOL finished) {
    [UIView animateWithDuration:1 delay:0 options:UIViewAnimationCurveEaseOut animations:^{
        sourceViewController.view.layer.transform = CATransform3DConcat(
            CATransform3DScale(sourceViewController.view.layer.transform, 0.8, 0.8, 1),
            CATransform3DMakePerspective(0, 0, sourceViewController.view.layer.transform));
    } completion:nil];
}];
 类似资料:
  • 我需要多次调用webservice并传递使用来自多个表的数据创建的数据 UI->控制器->服务->(获取数据(表1,表2)并运行一些验证)1。如果验证失败-返回错误消息并停止。2.如果验证通过-调用JobLauncher并返回“任务启动”消息。 在异步作业中,我想到遵循2个步骤。 > bulkinsertstep > 我需要调用DB查询2个更多的表(Table3、table4)并创建一个大的数据集

  • 我尝试创建一个CSS动画,当你悬停在方框上时,它会显示使用CSS动画的div。我使用了以下站点作为参考。点击这里,但我似乎无法实现EFX。在我的站点上,我使用JqUERY实现了一个show and hide函数,我的addClass和RemoveClass可以正常工作,但总体来说,该函数并没有正常工作。有人能指引我正确的方向吗。 /**HTML**/ /*jquery**/ /**CSS动画**/

  • 本文向大家介绍易语言制作个性工具包步骤,包括了易语言制作个性工具包步骤的使用技巧和注意事项,需要的朋友参考一下 程序截图 : 程序特点:按钮可以随鼠标移动而移动 1、首先,在程序中放入一个分组框。(主要是让全部按钮移动好实行一点)   2、然后,在分组框中放置按钮。 3、 4、然后给按钮写上标记(要按顺序,标记几 就是对应上面的第几行,如打开QQ的按钮标记为1,对应的就是上面第一行的地址。) 5、

  • 我在我的支持FragmentTransaction上使用了setCustomAnimations,但当我执行addToBackStack时,它所做的只是动画,而当我执行popBackStack时,它只是在没有动画的情况下消失。 下面是我的一段代码: 在setCustomAnimations部分,我使用了4个参数,到目前为止,它只在我调用FragmentAccount时显示幻灯片前的淡出动画,而在调

  • 典型的登录屏幕有一个 自去年以来,我看到越来越多的“两步登录”。首先输入用户名/电子邮件,提交表单,然后在下一步中输入密码并再次提交。 1) 这个方法有名字吗? 2) 这项技术的主要优点是什么?

  • 我最近发现了一些UIView动画代码,并注意到它没有正确使用animateKeyframesWithDuration:delay:options:animations:completion:方法,并且一直在尝试修复它,但由于某些原因,动画不完全相同。 以下是我找到的代码: 这有两个问题: 应该真正使用关键帧动画,而不是在完成块中嵌套动画 使用animateKeyframesWithDuration