我有一个UIImageView我试图动画像Ken Burns一样的平移/放大。我想开始以脸部为中心(具体地说,就是人的鼻子的末端)并缩小到图像的完整尺寸。代码类似于:
image.frame = // some frame that zooms in on the image;
image.center = // tip of the nose
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:3];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
image.frame = // original frame
image.center = // original centerpoint
[UIView commitAnimations];
在Photoshop中,鼻尖的坐标完全与我必须打入上述代码的值不同,以便在动画开始时将图像实际居中于鼻子上。我尝试过反射轴,乘以比例因子......我似乎无法弄清楚为什么iOS数字是重要的v。我从Photoshop推断出的数字。
有人可以指出两个坐标系之间的差异吗?
其他一些信息:
image
是一个UIImageView,是UIViewController的直接子项答案 0 :(得分:3)
设置帧和中心有点多余。框架应该足够了,使用你正在丢失部分设置。
编辑:更确切地说,你应该只设置两个帧,让CoreAnimation完成其余的工作。
答案 1 :(得分:2)
问题是动画以某种复杂的方式发生。无关紧要,但结果如何。您无法在一种方法中设置初始参数并为其设置动画。您必须设置初始参数,然后发送[self performSelector:withObject:afterDelay:]消息,其中将发生动画(所有[UIView *动画]消息)。
所以你的代码看起来像这样。
- (void)one {
image.frame = // some frame that zooms in on the image;
image.center = // tip of the nose
[self performSelector:@selector(two) withObject:nil afterDelay:0];
}
- (void)two {
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:3];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
image.frame = // original frame
image.center = // original centerpoint
[UIView commitAnimations];
}