我创建了一个3D立方体视图转换,它执行以下操作:
这是代码 - 它的工作正常。 。 。实际问题如下:
- (CAAnimation*)makeRotationWithMetrics:(BBRotationMetrics*)metrics
{
[CATransaction flush];
CAAnimationGroup* group = [CAAnimationGroup animation];
group.delegate = self;
group.duration = metrics.duration;
group.fillMode = kCAFillModeForwards;
group.removedOnCompletion = NO;
group.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
CABasicAnimation* translationX = [CABasicAnimation animationWithKeyPath:@"sublayerTransform.translation.x"];
translationX.toValue = metrics.translationPointsX;
CABasicAnimation* rotation = [CABasicAnimation animationWithKeyPath:@"sublayerTransform.rotation.y"];
rotation.toValue = metrics.radians;
CABasicAnimation* translationZ = [CABasicAnimation animationWithKeyPath:@"sublayerTransform.translation.z"];
translationZ.toValue = metrics.translationPointsZ;
group.animations = [NSArray arrayWithObjects:rotation, translationX, translationZ, nil];
return group;
}
在动画结束时,我想进行一次微动,就像立方体安装在弹簧上一样。我试过播放一系列动画绕Y轴旋转,逐渐衰减。
我已经设置了一系列动画,但每个动画都是从原点开始的,而不是图层所到达的最后一个点。 。 。我该如何解决这个问题?一种方法是首先在图层上设置变换,
但有没有办法用关键点进行3D变换?
答案 0 :(得分:1)
听起来像你正在寻找CAKeyframeAnimation
。您没有指定toValue
,而是传递values
和可选keyTimes
的数组,包括起始值和结束值。
原点问题的起点来自于使用removedOnCompletion
。通过这样做,您将介绍演示文稿(屏幕上显示的内容)和模型(图层的属性值)之间的差异。更简洁的方法是明确地将结束值和动画从前一个值设置为结束值。这将使动画结束时处于干净状态。