0

我创建了一个 3D 立方体视图转换,它执行以下操作:

  • 创建一个图层容器。
  • 在 2D 空间中添加当前视图。
  • 将下一个视图添加到右侧并旋转 90 度(就像在立方体中一样)
  • 执行动画以旋转立方体。

这是代码 - 它工作正常。. . 下面的实际问题:

- (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 变换?

4

1 回答 1

1

这听起来像你在寻找CAKeyframeAnimation。不是指定 a ,而是toValue传递一个数组,values并且可以选择keyTimes包括开始值和结束值。

从源头开始问题来自使用removedOnCompletion. 通过这样做,您将引入演示文稿(屏幕上显示的内容)和模型(图层的属性值)之间的差异。一种更简洁的方法是显式设置结束值并从前一个值动画到结束值。当动画结束时,这将使您处于干净的状态。

于 2013-05-17T09:39:44.680 回答