iOS视图变换动画

8

我可能忽略了一些简单的东西,但是我想在图像视图中尝试做一个简单的“肯·伯恩斯效果”。

首先是代码:

[UIView animateWithDuration:20
                      delay:2
                    options:UIViewAnimationCurveLinear
                 animations:^{
                   CGAffineTransform move = CGAffineTransformMakeTranslation(40, 40);
                   CGAffineTransform zoom    = CGAffineTransformMakeScale(1.2, 1.2);
                   CGAffineTransform transform = CGAffineTransformConcat(zoom, move);
                   self.imageView.transform = transform;
                 }
                 completion:^(BOOL finished){
                   NSLog(@"Done");
                 }];

我希望这个图像视图开始时以正常比例显示,并在20秒内将其扩大到原始大小的120%。但实际上,它会立即以比正常尺寸小的大小开始,然后才会扩大到正常尺寸。
如果我使用比例值的倒数,它会开始缩放并缩小到正常比例,这与我想要的效果相反。
有什么想法吗?
3个回答

11

好的,实际上这起作用并且达到了我想要的效果。

CABasicAnimation *transformAnimation = [CABasicAnimation animationWithKeyPath:@"transform"];
transformAnimation.duration = 20.0;
transformAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
transformAnimation.removedOnCompletion = NO;
transformAnimation.fillMode = kCAFillModeForwards;

CATransform3D xform = CATransform3DIdentity;
xform = CATransform3DScale(xform, 1.2, 1.2, 1.0);
xform = CATransform3DTranslate(xform, 60, -60, 0);
transformAnimation.toValue = [NSValue valueWithCATransform3D:xform];
[self.imageView.layer addAnimation:transformAnimation forKey:@"transformAnimation"];

1
请接受您自己的答案 ;) - Nat

2

看起来父视图响应变换而重新布局了该视图,因此在动画块中设置变换后,它会立即缩小到变换的最终结果。关键在于你的第一种尝试直接对视图进行更改,而第二种方法则使用图层进行操作。


-2

你尝试过从imageView的当前变换开始吗?

[UIView animateWithDuration:20
                      delay:2
                    options:UIViewAnimationCurveLinear
                 animations:^{
                   CGAffineTransform trans = self.imageView.transform;
                   CGAffineTransformTranslate(trans, 40, 40);
                   CGAffineTransformScale(trans, 1.2, 1.2);
                   self.imageView.transform = trans;
                 }
                 completion:^(BOOL finished){
                   NSLog(@"Done");
                 }];

我尝试使用加性CG函数对恒等变换进行操作,但这也没有起作用。有一些微妙的问题存在,我还没有弄清楚。在图层上使用CATransform3D(从恒等变换开始)导致了完全相同的问题。 - David Goodine

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接