Проблема со следующим кодом заключается в том, что он выполняется, когда анимация создается , а не когда оценивается .Это значение sin(t)
никогда не изменится со временем.Он оценивается один раз, и результатом будет окончательное значение для линейной интерполяции.
let t = CACurrentMediaTime()
animation.toValue = NSValue(SCNVector3: SCNVector3(x: CGFloat(sin(t)*5),
y: CGFloat(0),
z: CGFloat(0)))
Вместо этого класс CAAnimation
предоставляет свойство timingFunction
, которое, скорее всего, того, что вам нужно.