CGAffineTransformMakeTranslation:如何一次应用两个动画
Posted
技术标签:
【中文标题】CGAffineTransformMakeTranslation:如何一次应用两个动画【英文标题】:CGAffineTransformMakeTranslation: How to apply two animations at once 【发布时间】:2011-10-12 20:54:24 【问题描述】:我有一个观点,我想通过两种方式进行转换。首先,我想在它的 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)
];
];
【问题讨论】:
【参考方案1】:您应该将一个变换乘以另一个变换。每个变换(缩放和平移)都是变换矩阵。要组合它们,只需在使用前一个接一个地进行组合。乘法的顺序决定了应用变换的顺序
【讨论】:
【参考方案2】:我有类似的问题,我的视图回到原来的位置。
CGAffineTransformMakeTranslation
中的Documentation 表示“它从 x 和 y 值构造一个新的平移矩阵,指定原点的移动量。”我不认为它适用于实际的转变。
我认为您宁愿通过调用CGAffineTransformTranslate()
来应用翻译。至少对我有用!!
【讨论】:
【参考方案3】:在这里,我们正在创建您想要一起执行的两个更改(CGAffineTransform),并将转换应用于视图。
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)
];
【讨论】:
以上是关于CGAffineTransformMakeTranslation:如何一次应用两个动画的主要内容,如果未能解决你的问题,请参考以下文章