CGAffineTransformMakeTranslation:如何一次应用两个动画

时间:2011-10-12 20:54:24

标签: ios cocoa-touch core-animation cgaffinetransform

我有一个观点,我想以两种方式改变。首先,我想在y轴上移动它。然后,我想放大它。

但是,当我使用以下代码时,首先移动对象,然后在缩放时将其移回原始位置。

有没有办法一次应用这两个转换而不取消第一个?

很抱歉,如果这是基本的,但非常感谢任何帮助!

   [UIView animateWithDuration:animationDuration
                      delay:0
                    options:UIViewAnimationOptionCurveEaseIn
                 animations:^{

                 currentCover.transform = CGAffineTransformMakeTranslation(0, 0-keyboardTop+35);


                 }
                 completion:^(BOOL finished) {


                 [UIView animateWithDuration:animationDuration
                      delay:0
                    options:UIViewAnimationOptionCurveEaseIn
                 animations:^{ 

                 [currentCover setTransform:CGAffineTransformMakeScale (1.3, 1.3)];


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



                 }
 ];

3 个答案:

答案 0 :(得分:1)

你应该将一个变换乘以另一个变换。每个变换(缩放和平移)都是变换矩阵。要合并它们,在使用它们之前,只需将它们相互重叠。乘法的顺序决定了变换的应用顺序

答案 1 :(得分:1)

我也有类似的问题,我的观点会回到原来的位置。

CGAffineTransformMakeTranslation的{​​p> Documentation读取“它从x和y值构造一个新的转换矩阵,指定移动原点的数量。”我认为它不适用于实际转型。

我认为您宁可通过致电CGAffineTransformTranslate()来应用翻译。至少它对我有用!!

答案 2 :(得分:1)

这里我们要创建您想要一起做的两个更改(CGAffineTransform' s),并将转换应用于视图。

       CGAffineTransform translate = CGAffineTransformMakeTranslation(0, 0-keyboardTop+35);
        CGAffineTransform scale = CGAffineTransformMakeScale(1.3, 1.3);
        CGAffineTransform transform =  CGAffineTransformConcat(translate, scale);

    [UIView animateWithDuration: animationDuration
                              delay:0.0
                            options:UIViewAnimationOptionCurveEaseIn
                         animations:^{
                             currentCover.transform = transform;
                         }completion:^(BOOL finished){
      }];