iOS转换转换动画无法正常执行

时间:2014-02-18 06:52:29

标签: ios transform

所以我试图在UIImageView上执行(貌似)简单的变换动画,只需将它移动100点。这是我的代码:

[UIView animateWithDuration:1 delay:1 options:nil animations:^(void) {
    CGAffineTransform tf = CGAffineTransformMakeTranslation(0, -100);
    [image setTransform:tf];
} completion:^(BOOL finished) {} ];  

它可以工作......但是由于某些原因,它为我的UIImageView选择了一个新的起源。例如,如果图像的原始中心坐标是(300,400),那么通过我的代码,它应该将100个点转换为(300,300)。但由于某种原因,代码使图像开始稍微低于它应该的位置,如大约(300,450),然后它将向上移动100到(300,350)。如何从图像最初的位置进行动画制作?

3 个答案:

答案 0 :(得分:0)

如果您希望在此过程中使用转换,则应尝试获取原始转换并将其转换为100 px。

[image setTransform:CGAffineTransformTranslate(image.transform, 0, -100)];

答案 1 :(得分:0)

如果您的目标是将子视图相对于其超视图的坐标系转换,那么只需设置中心属性的动画就可以得到更多可预测的结果:

[UIView animateWithDuration: 1.0 animations:^{
    image.center = CGPointMake(image.center.x, image.center.y - 100);
}];

transform属性表示相对于center属性的仿射变换(或者图层的anchorPoint,如果已更改)。

答案 2 :(得分:0)

我遇到了同样的问题。如果我想在y轴上翻译我的标签100,它将在y中开始动画-50,然后从那里移动100。如果我在y中移动它200,它会在y中开始动画-100,然后从那里移动200。这非常令人沮丧。

@stackoverflowmaster,你有没有想过这个?

更新:您必须取消选中文件检查器中的“使用自动布局”选项,以查找您尝试使用的任何对象。这花了我太长时间才弄清楚,希望它能节省一些时间。