Есть ли способ изменить анимацию в Swift?

Я сейчас учусь, так что извините за невежество. Есть ли способ отменить анимацию в Swift? У меня есть функция с некоторыми базовыми анимациями в SCNTransaction, и у меня есть кнопка, которая активирует эту анимацию.

func displayAnimation() {
        if let displayAnimationNode = sceneView.scene.rootNode.childNode(withName: "display", recursively: true) {

            SCNTransaction.begin()
            displayAnimationNode.position.y = 3
            displayAnimationNode.eulerAngles.z = -2
            SCNTransaction.animationDuration = 2.5
            SCNTransaction.commit()
        }
    }

Я просмотрел документацию, но, похоже, нет метода .reversed. Как я могу сделать эту анимацию такой же гладкой, но в обратном порядке?


person Sam    schedule 23.01.2019    source источник
comment
Ознакомьтесь с этой статьей medium.freecodecamp.org/   -  person Jarvis The Avenger    schedule 23.01.2019
comment
Лучше использовать SCNAction для анимации и получить reversed метод для применения обратного действия.   -  person Kamran    schedule 23.01.2019


Ответы (1)


Используйте SCNAction, чтобы добавить обратную анимацию.

let moveY = SCNAction.moveBy(x: 0, y: 3, z: 0, duration: 2.5)
let moveZ = SCNAction.moveBy(x: 0, y: 0, z: -2, duration: 2.5)
let moveYZ = SCNAction.sequence([moveY, moveZ])

// You can use group to simultaneously perform animation
// let rotateAndHover = SCNAction.group([moveY, moveZ])

// This line of code will reverse your animation
moveYZ.reversed()    

let repeatForever = SCNAction.repeatForever(moveXZ)

runAction(repeatForever)

Я надеюсь, что это поможет вам.

person Mayur Karmur    schedule 23.01.2019
comment
Привет, Майур, спасибо за ответ. однако анимация не работает. func displayAnimation () { if let displayAnimationNode = sceneView.scene.rootNode.childNode (withName: display, recursively: true) { let displayMove = SCNAction.move (by: SCNVector3 (0, 3, -2), продолжительность: 2,5)} Ничего не произошло. - person Sam; 23.01.2019