所以我试图在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)。如何从图像最初的位置进行动画制作?
答案 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,你有没有想过这个?
更新:您必须取消选中文件检查器中的“使用自动布局”选项,以查找您尝试使用的任何对象。这花了我太长时间才弄清楚,希望它能节省一些时间。