iOS视图转换animation
我可能错过了一些简单的东西,但试图用图像视图做一个简单的“肯伯恩斯效应”。
首先是代码:
[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%。 实际发生的是,它立即开始小于正常大小,然后扩大到正常大小。
如果我使用比例值的倒数,它开始放大,然后缩小到正常的比例,这是我想要的效果的反面。
有任何想法吗?
好吧,这实际上工作,做我想要的。
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"];
这听起来像是视图正在被其父视图重新布局以响应变换的变化,一旦在animation块中设置了变换,就将其缩小到变换的最终结果。 关键是你的第一次尝试直接改变视图,而第二种方法与图层一起工作。
你有没有尝试从你的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"); }];