如何创建多个UIImageView动画,在上一个动画结束后使用CFAffineTransform开始播放一个动画

时间:2011-08-28 07:23:11

标签: iphone ios animation uiimageview cgaffinetransform

首先感谢您阅读我的问题。我目前正在尝试使用CFAffineTransform执行多个动画来复制kens刻录效果。

尝试实现:缩放到图像,然后将图像平移到右侧。

问题:一旦我开始第二个动画,我的图像将相对于原始图像平移,而不是相对于第一个图像的最终产品进行平移。这不是我想要达到的效果。

第一个动画是放大图像。

[UIView beginAnimations:@"zoomin" context:NULL];
[UIView setAnimationDelegate:self];
[UIView setAnimationDuration:5];

CGAffineTransform zoomIn = CGAffineTransformMakeScale(5.8, 5.8);

imageView.transform = zoomIn;

[UIView commitAnimations];

第二个动画是将图像平移到左侧。

[UIView beginAnimations:@"panning" context:NULL];
[UIView setAnimationDelegate:self];
[UIView setAnimationDuration:5];

CGAffineTransform moveRight = CGAffineTransformMakeTranslation(200, 0);

imageView.transform = moveRight;

[UIView commitAnimations];

第二个动画代码仅在第一个动画结束后调用。

1 个答案:

答案 0 :(得分:1)

它不起作用,因为你正在使用CGAffineTransformMakeTranslation,这意味着它应该从原始位置开始(仿射是单位矩阵,并将视图置于未转换状态),你应该使用的是CGAffineTransformTranslate,它需要期望的(或当前变换)矩阵作为第一个参数。

所以,如果你这样做:

CGAffineTransform moveRight = CGAffineTransformTranslate(imageView.transform ,200, 0);

您使用了

CGAffineTransform moveRight = CGAffineTransformMakeTranslation(200, 0);

与:

相同
CGAffineTransform moveRight = CGAffineTransformTranslate(CGAffineTransformIdentity ,200, 0);

我建议你阅读一篇很棒的帖子Demystifying CGAffineTransform