有没有办法用关键点进行 3D 变换?
Posted
技术标签:
【中文标题】有没有办法用关键点进行 3D 变换?【英文标题】:Is there a way to do 3D transforms with keypoints? 【发布时间】:2013-05-17 08:35:49 【问题描述】:我创建了一个 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 轴旋转,逐渐衰减。
我设置了一系列动画,但每个动画都从原点开始,而不是图层到达的最后一个点。 . .我该如何解决?一种方法是先在图层上设置变换,
但是
【问题讨论】:
【参考方案1】:听起来你在寻找CAKeyframeAnimation
。不是指定toValue
,而是传递values
和可选的keyTimes
数组,包括开始值和结束值。
从源头开始问题来自使用removedOnCompletion
。通过这样做,您将引入演示文稿(屏幕上显示的内容)和模型(图层的属性值)之间的差异。一种更简洁的方法是显式设置结束值并从前一个值动画到结束值。当动画结束时,这将使您处于干净的状态。
【讨论】:
谢谢大卫。 . . CAKeyFrameAnimation 可以与 3D 变换一起使用吗?您指定的值是什么? . .关于从原点开始,您的意思是我应该避免设置该属性? (我将其设置为 NO) 啊——我看到了如何将关键帧动画与 3D 变换和旋转一起使用——现在正在尝试。 OK - 如果我将最后一个 toValue 保存为 fromValue,我仍然可以按照我的方式进行操作。 . .但关键帧无疑会更好。 @JasperBlues 关键帧是 解决方案,当您想通过一系列值对 same 属性进行动画处理时。设置一系列动画有时是必要的,但大多只是杂乱无章。 @JasperBlues 避免使用removedOnCompletion
只是为了清洁。 Core Animation 中的动画不会修改它们动画的实际层,它们只会改变屏幕上显示的内容。如果您为属性设置动画并检查图层的值,它不会改变。在实际动画中这并不重要,但是如果您不删除动画,那么您最终会处于模型中的值与屏幕中显示的内容不同的状态。这可能会导致诸如命中测试之类的事情搞砸。总之,引入不必要的状态差异是不好的。以上是关于有没有办法用关键点进行 3D 变换?的主要内容,如果未能解决你的问题,请参考以下文章