Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c iOS视图变换动画_Objective C_Ios_Core Animation_Cgaffinetransformscale - Fatal编程技术网

Objective c iOS视图变换动画

Objective c iOS视图变换动画,objective-c,ios,core-animation,cgaffinetransformscale,Objective C,Ios,Core Animation,Cgaffinetransformscale,我可能错过了一些简单的东西,但尝试用一个图像视图来做一个简单的“肯·伯恩斯效应” 首先是守则: [UIView animateWithDuration:20 delay:2 options:UIViewAnimationCurveLinear animations:^{ CGAffineTransform move = CGAffineTra

我可能错过了一些简单的东西,但尝试用一个图像视图来做一个简单的“肯·伯恩斯效应”

首先是守则:

[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%。实际情况是,它开始时比正常尺寸小,然后扩展到正常尺寸

如果我使用比例值的倒数,它开始缩小,然后缩小到正常比例,这与我想要的效果相反


有什么想法吗?

您尝试过从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");
                 }];

好的,这确实起作用了,而且符合我的要求

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"];

这听起来像是视图被其父视图重新布局以响应变换中的更改,一旦在动画块中设置了变换,就会将其缩小到变换的最终结果。关键是,第一次尝试直接对视图进行更改,而第二次尝试对层进行更改。

我尝试过将加法CG函数用于标识转换,但也没有成功。有些微妙的事情发生了,只是还没弄明白。在图层上使用CATTransform3D(从身份转换开始)会导致相同的问题。请接受您自己的答案;)