我可能错过了一些简单的东西,但试图用图像视图做一个简单的“肯伯恩斯效应”。
首先是代码:
[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%的大小。实际发生的是它立即开始小于正常尺寸,然后扩展到正常尺寸。
如果我使用比例值的倒数,它会开始放大然后缩小到正常比例,这与我想要的效果相反。
有什么想法吗?
答案 0 :(得分:10)
好的,这实际上有效并且做了我想做的事。
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 :(得分:2)
听起来这个视图正在被其父视图重新布局以响应变换的变化,只要在动画块中设置了变换就将其缩小到变换的最终结果。关键是您的第一次尝试直接对视图进行更改,而第二种方法适用于该层。
答案 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");
}];