iOS-Swift 4:如何在完成UIImageView.animationImages后删除UIImageViews?

时间:2018-12-02 01:49:27

标签: swift

我在项目中为UIImageViews使用.animationImages(这是一个游戏)。当用户按下提示按钮时,我以编程方式创建了可变数量的UIImageViews,这些UIImageViews将出现在屏幕上并播放相同的图像序列一次。动画停止后,我需要从视图中删除UIImageViews,但我不知道该怎么做。

我已经浏览过.animationImages和.startAnimating的快速文档,但实际上是一个段落和一行,两者都与完成或完成通知等无关。我们将不胜感激。

private func hideAnswerButtonsHint() {

    // Clear all of the answer boxes that aren't hint locked
    resetAnswerBoxes()

    var imageArray = [UIImage]()
    var remainingLetters = [String]()

    for imageCount in 1...8 {
        let imageName = "green_smoke_puff_0\(imageCount)"
        let image = UIImage(named: imageName)!
        imageArray.append(image)
    }

    for answerBox in answerBoxArray where answerBox.hintLock == false {
        if let letter = answerBoxDict[answerBox.tag] {
            remainingLetters.append(letter)
        }
    }

    for answerButton in answerButtonArray where answerButton.hintLock == false {
        if let index = remainingLetters.index(of: answerButton.titleText) {
            answerButton.decompress()
            remainingLetters.remove(at: index)
        } else {
            let frame = answerButton.superview?.convert(answerButton.frame.origin, to: nil)

            let imageView = UIImageView()
            imageView.animationImages = imageArray
            imageView.animationDuration = 0.5
            imageView.animationRepeatCount = 1
            imageView.frame = CGRect(x: frame!.x, y: frame!.y, width: answerButton.frame.width, height: answerButton.frame.height)

            view.addSubview(imageView)
            imageView.startAnimating()

            answerButton.compress()
            answerButton.hintLock = true
        }
    }
}

1 个答案:

答案 0 :(得分:0)

UIImageView是一个NSObject,因此您可以随时使用KVO来监视其属性:

    var observation: NSKeyValueObservation?
    override func viewDidLoad() {
        super.viewDidLoad()
        observation = imageView.observe(\.isAnimating) { [weak self] imageView, change in
            if let value = change.newValue,
               value == true {
                imageView.removeFromSuperview()
                self?.observation = nil
            }
        }
    }