stopAnimating удаляет текущее изображение - PullRequest
0 голосов
/ 14 марта 2019

Старому программисту DEC PDP 8, вышедшему на пенсию, нужен другой набор глаз. Я создал программу Hello World, которая отображает изображения семьи. Анимация работает нормально, но я бы хотел, чтобы пользователь мог остановить анимацию, поэтому я добавил кнопку, чтобы «приостановить» изображение, чтобы пользователь мог просматривать его на досуге. Однако функция .stopAnimation очищает вид. Как это можно предотвратить. Пожалуйста, будьте добры.

import UIKit

class FamilyUnitController: UIViewController {
    @IBOutlet weak var familyMember: UILabel!
    @IBOutlet weak var familyPhotos: UIImageView!
    var familyName: String = ""
    var familyUnitArray = [String]()

    @IBOutlet weak var pauseButton: UIButton!
    override func viewDidLoad() {
        super.viewDidLoad()
enter code here
        configureImageView()
    }

    @IBAction func pauseImage(_ sender: UIButton) {
        if familyPhotos.isAnimating {
            familyPhotos.stopAnimating()
            pauseButton.setTitle("Paused", for: [])
        } else {
            familyPhotos.startAnimating()
            pauseButton.setTitle("Pause", for: [])
        }
    }

    func configureImageView() {

        familyMember.text = familyUnitArray[0]
        familyMember.sizeToFit()
        let imagePrefix = familyUnitArray[1]
        print ("configureImageView called...")
        let maxImageCnt = 10
        if let imageView = familyPhotos {
            print ("Processing images...")
            let fileManager = FileManager.default
            let path = Bundle.main.resourcePath!
            print (#function,">Path> ",path)
            let enumerator:FileManager.DirectoryEnumerator = fileManager.enumerator(atPath: path)!
            var imageArr = [UIImage]()
            var imageCnt: Int = 0
            while let element = enumerator.nextObject() as? String {
                print (#function,"> element.description",element.debugDescription)
                let tmpStr = element.lowercased()
                let tmpImagePrefix = imagePrefix.lowercased()
                if (element.hasSuffix("png") || element.hasSuffix("jpg") || element.hasSuffix("jpeg"))
                        && tmpStr.hasPrefix(tmpImagePrefix)
                        && imageCnt < maxImageCnt {
                    let elementWithPath = path+"/"+element
                    imageArr.append(UIImage(contentsOfFile: elementWithPath)!)
                    imageCnt += 1
                }
            }
            imageView.isUserInteractionEnabled = true
            imageView.animationImages = imageArr
            imageView.contentMode = .scaleAspectFit
            imageView.backgroundColor = UIColor.white
            imageView.animationDuration = 15
            imageView.startAnimating()
        }
    }
}

1 Ответ

0 голосов
/ 14 марта 2019

Вы можете обратиться сюда для приостановки анимации / ее остановки.

Есть ли способ приостановить анимацию CABasic?

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

@IBAction func pauseImage(_ sender: UIButton) {
    if  familyPhotos.layer.speed != 0 {

    let time   =  familyPhotos.layer.convertTime(CACurrentMediaTime(), to: nil)

        familyPhotos.layer.speed = 0
        familyPhotos.layer.timeOffset  = time
        pauseButton.setTitle("Paused", for: [])
    } else {

       familyPhotos.layer.beginTime =  familyPhotos.layer.timeOffset - CACurrentMediaTime()
        familyPhotos.layer.timeOffset = 0
        familyPhotos.layer.speed = 1
        pauseButton.setTitle("Pause", for: [])
    }
}
...