Запуск и остановка анимации с помощью кнопки в Swift - PullRequest
0 голосов
/ 06 ноября 2018

Я пытаюсь использовать кнопку UIB для запуска и остановки анимированной последовательности изображений, которые я поместил в просмотр изображений. Я использую Swift 3.0

Вот мой текущий код:

import UIKit

class ViewController: UIViewController {
    var selectedProgression : Int = 0

    var loading_1: UIImage!
    var loading_2: UIImage!
    var loading_3: UIImage!

    var animatedImage: UIImage!

    @IBOutlet weak var progressionAnimation: UIImageView!

    override func viewDidLoad() {

        loading_1 = UIImage(named: "blues-1")
        loading_2 = UIImage(named: "blues-2")
        loading_3 = UIImage(named: "blues-3")

        var images: [UIImage]!

        images = [loading_1, loading_2, loading_3]

        animatedImage = UIImage.animatedImage(with: images, duration: 3.0)

        progressionAnimation.image = animatedImage

        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }


    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

Я посмотрел и получил некоторое представление о том, как это сделать, но продолжаю зацикливаться, фактически внедряя решение в мой код: (

Из того, что я нашел, мне нужно создать розетку для кнопки, которая измеряет, нажата она или нет, и подключить действие кнопки к startAnimating или stopAnimating при нажатии, в зависимости от ее текущего состояния.

Я нашел функции startAnimating и stopAnimating в документации Apple https://developer.apple.com/documentation/uikit/uiimageview/1621061-startanimating, но не уверен, как на самом деле внедрить их в код.

Любая помощь будет принята с благодарностью. Спасибо!

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Если вы хотите использовать анимацию запуска или остановки, пожалуйста, не используйте изображения progreesionAnimation.

    progressionAnimation.animationImages =  images
    progressionAnimation.animationDuration = 1.0
    progressionAnimation.animationRepeatCount = 100
    progressionAnimation.startAnimating()

Вы должны использовать animationImages из созданного вами массива изображений.

0 голосов
/ 06 ноября 2018

Как создать розетку можно найти здесь . Чтобы подвести итог, откройте редактор помощника (два кружка в верхнем правом углу) и перетащите кнопку из раскадровки в файл Swift, удерживая нажатой клавишу управления.

IBAction, который вы должны написать для этого выхода, будет выглядеть примерно так:

@IBAction func starStopButtonPressed(_ sender: Any) {
    //Check if the progressionAnimation UIImageView is already animating
    if progressionAnimation.isAnimating { 
        progressionAnimation.stopAnimating() //If animating: stop animating
    else {
        progressionAnimation.startAnimating() //If not animating: start animating
    }
}

При создании новых переменных будьте осторожны с !. Это может вызвать сбои, если вы попытаетесь использовать переменную до того, как она будет иметь значение.

Итак, это:

var images: [UIImage]!

images = [loading_1, loading_2, loading_3]

Должно быть написано так:

var image: [UIImage] = [loading_1, loading_2, loading_3]

Меньше линий, что делает его более чистым и безопасным. Сделайте то же самое с этими UIImages loading_1-3, вы можете переместить их объявление внутрь функции viewDidLoad.

Так же, как это:

var animatedImage: UIImage!

animatedImage = UIImage.animatedImage(with: images, duration: 3.0)

progressionAnimation.image = animatedImage

Было бы и чище, и безопаснее, если бы вы написали это так:

progressionAnimation.image = UIImage.animatedImage(with: images, duration: 3.0)
...