Как анимировать SCNNode.scale с помощью SCNTransaction
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()
Вышеупомянутое не анимируется. Документы говорят.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
, а также из-за его основной функции — атомарности.
Что мне не хватает?