let balloon: SCNNode
SCNTransaction.begin()
SCNTransaction.animationDuration = 4
SCNTransaction.animationTimingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.linear)
balloon.scale.x = 2.28
balloon.scale.y = 2.28
balloon.scale.z = 2.28
// or balloon.scale = SCNVector3(2.28, 2.28, 2.28)
SCNTransaction.commit()
上述内容不会设置动画。Docs表示.scale
是可设置动画的,但会立即应用新的比例。
我对材质的漫反射颜色也有同样的问题。
以下作品:
balloon.runAction(SCNAction.scale(to: 2.28, duration: 4), forKey: "scale")
DispatchQueue.main.asyncAfter(deadline: .now() + 1) { [self] in
balloon.removeAction(forKey: "scale")
}
但是有时候我更喜欢SCNTransaction
,因为只需设置一个新值(直接或通过另一个动画)就可以替换或停止动画,而不必像.removeAnimation
那样显式地停止它,还因为它的主要功能是原子性。
我错过了什么?
1条答案
按热度按时间1sbrub3j1#
可能是节点的物理体阻止了SCNTransaction按预期运行。我记得这是设计使然。物理体不能缩放。可以选择临时删除物理体,并在SCNTransaction完成后重新应用它。