Как выполнить функцию за 5 секунд в swift - PullRequest
1 голос
/ 03 апреля 2020

Я создаю игру, эта функция используется для увеличения мощности спрайта. Я хочу, чтобы эта функция выполнялась в течение 5 секунд, и прикрепляю этот 5-секундный таймер к метке в качестве обратного отсчета. После завершения функции верните спрайт к его первоначальному размеру.

Функция просто сжимает узел, устанавливая масштаб.

func shrinkShip() { spaceShip.scale(to: CGSize(width: 60, height: 40)) }

Ответы [ 3 ]

2 голосов
/ 03 апреля 2020

Придерживаясь SpriteKit, я бы просто сделал следующее

func shrinkShip(duration: Double) { 

    let originalSize = spaceShip.size

    spaceShip.scale(to: CGSize(width: 60, height: 40)) 

    for x in 0..<Int(duration) {

        //increment the timer every 1 second for the duration
        self.run(SKAction.wait(forDuration: 1 * Double(x))) {
            self.timerLabel.text = String(Int(duration) - x)
        }
    }
    self.run(SKAction.wait(forDuration: duration)) {
        //return the spaceship to full size
        self.spaceShip.scale(to: originalSize) 
        //hide the timer
        self.timerLabel.text = ""
        self.timerLabel.isHidden = true
    }
}
0 голосов
/ 03 апреля 2020

Вы можете попробовать что-то вроде этого

UIView.animate(withDuration: 5, animations: {
        self.spaceShip.transform = CGAffineTransform(scaleX: 60, y: 40)
},
completion: { _ in
    UIView.animate(withDuration: 2) {
        self.spaceShip.transform = .identity // Reset your view
    }
})
0 голосов
/ 03 апреля 2020

Вы можете анимировать вид следующим образом:

UIView.animate(withDuration: 5, animations: {
        self.spaceShip.scale(to: CGSize(width: 60, height: 40))
},
completion: { _ in
    UIView.animate(withDuration: 2) {
        self.spaceShip.transform = .identity // Reset your view
    }
})
...