Анимация перемещения и прыжка для UIImageView: Swift 4 - PullRequest
0 голосов
/ 08 декабря 2018

Мне нужно, чтобы мое изображение прыгало и двигалось вниз с анимацией.Я использую спрайты, чтобы показать анимацию прыжка.Но когда я пытаюсь совместить это с анимацией перемещения вниз, это не работает.Я пытаюсь это по нажатию кнопки.Ниже приведен мой код.

Моя анимация работает правильно для второго щелчка, но для первого щелчка она просто прыгает в своем текущем местоположении, а при втором щелчке она прыгает и движется вниз.Я пытаюсь заставить его прыгать и двигаться вниз при первом нажатии кнопки.

@IBAction func targetTouchAction(_ sender: Any) {
        let images: [UIImage] = (1...10).map { return UIImage(named: "Jump_\($0)")! }
        self.jackImage.frame.origin.y = self.jackImage.frame.origin.y + 100.0
        self.jackImage.animationImages = images
        self.jackImage.animationDuration = 2.0
        self.jackImage.animationRepeatCount = 1
        self.jackImage.startAnimating()
    }

Я пробую это в последние два-три часа, но не повезло.

1 Ответ

0 голосов
/ 08 декабря 2018

Вы смешиваете 2 разных типа анимации.Не делай этого.Использование animationImages свойства UIImageView отличается от использования UIView методов анимации, таких как UIView.animate(duration:animations:)

. Избавьтесь от этой UIView оболочки анимации и просто укажите изображения анимации и другие параметры дляпредставление вашего изображения:

@IBAction func targetTouchAction(_ sender: Any) {
    let jumpImages = ["Jump_1","Jump_2","Jump_3","Jump_4","Jump_5","Jump_6","Jump_7","Jump_8","Jump_9","Jump_10"]
    var images = [UIImage]()
    for image in jumpImages{
        images.append(UIImage(named: image)!)
    }
    self.imageView.frame.origin.y = self.imageView.frame.origin.y + 100.0
    self.imageView.animationImages = images
    self.imageView.animationDuration = 2.0
    self.imageView.animationRepeatCount = 1
    self.imageView.startAnimating()
}

Обратите внимание, что загрузка массива изображений в представление изображений при каждом запуске анимации не требуется, но все равно должна работать.

Я не работалс SpriteKit, поэтому я не уверен, как ваша анимация представления изображения будет взаимодействовать с этим.(Кроме того, вы не показывали эту часть своего кода.)

Также обратите внимание, что вы можете создать свой массив изображений с 1 строкой кода и без использования жестко закодированного массива имен файлов:

let images: [UIImage] = (1...10).map { return UIImage(named: "Jump_\($0)") }

Этот код создает последовательность от 1 до 10. Затем он использует оператор map для преобразования этой последовательности в массив изображений, передавая значение в строку и используя эту строку в качестве имени изображения впозвоните по номеру UIImage(named:)

...