繁体   English   中英

标签隐藏之前,UIView动画无法完成

[英]UIView animate doesn't finish before Label is hidden

动画运行之前,我的标签消失了。

动画应在按下按钮后运行,并滑出标签和按钮。 但是当我按下按钮时,它们都被隐藏了,动画可以将它们滑出。

func nextGame() {

    UIView.animate(withDuration: 3, delay: 0.0, options: .allowAnimatedContent, animations: {
            NSLog("Animation started")
            self.labelWinningPlayer.center = CGPoint(x: self.labelWinningPlayer.center.x + 500, y: self.labelWinningPlayer.center.y)
            self.buttonNextGameLabel.center = CGPoint(x: self.buttonNextGameLabel.center.x + 500, y: self.buttonNextGameLabel.center.y)
        }, completion: { (finished: Bool) in
            NSLog("Animation stopped")
            self.labelWinningPlayer.isHidden = true
            self.buttonNextGameLabel.isHidden = true
    })


    //sets buttons to start position
    labelWinningPlayer.center = CGPoint(x: labelWinningPlayer.center.x - 1000, y: labelWinningPlayer.center.y)
    buttonNextGameLabel.center = CGPoint(x: buttonNextGameLabel.center.x - 1000, y: buttonNextGameLabel.center.y)

    //hides buttons that lay under the animated buttons 
    for i in 1...9 {

        if let button = view.viewWithTag(i) as? UIButton {
            button.setImage(nil, for: .normal)
        }
    }
    activeGame = true
}

//animation should get started with this button
@IBAction func buttenNextGameAction(_ sender: Any) {
    nextGame()
}

//slides buttons in
func slideNextGameButtons() {

    labelWinningPlayer.isHidden = false
    buttonNextGameLabel.isHidden = false

    UIView.animate(withDuration: 0.5, animations: {

        self.labelWinningPlayer.center = CGPoint(x: self.labelWinningPlayer.center.x + 500, y: self.labelWinningPlayer.center.y)
        self.buttonNextGameLabel.center = CGPoint(x: self.buttonNextGameLabel.center.x + 500, y: self.buttonNextGameLabel.center.y)
    })
}

这是NSLog。 据称它正在运行完整的动画...

2017-11-15 23:26:17.321465 [2442:245232] Animation started
2017-11-15 23:26:20.325137 [2442:245232] Animation stopped

谢谢您的帮助!

您的代码可以完美运行:

在此处输入图片说明

因此,您没有告诉我们的问题会导致任何问题。

编辑 :是的,的确是,您没有告诉我们的代码会导致问题。 您曾告诉我们:

UIView.animate(withDuration: 3, delay: 0.0, options: .allowAnimatedContent, animations: {
        self.labelWinningPlayer.center = CGPoint(x: self.labelWinningPlayer.center.x + 500, y: self.labelWinningPlayer.center.y)
        self.buttonNextGameLabel.center = CGPoint(x: self.buttonNextGameLabel.center.x + 500, y: self.buttonNextGameLabel.center.y)
    }, completion: { (finished: Bool) in
        self.labelWinningPlayer.isHidden = true
        self.buttonNextGameLabel.isHidden = true
})


但是您没有告诉我们以下行:

labelWinningPlayer.center = CGPoint(x: labelWinningPlayer.center.x - 1000, y: labelWinningPlayer.center.y)
buttonNextGameLabel.center = CGPoint(x: buttonNextGameLabel.center.x - 1000, y: buttonNextGameLabel.center.y)


这些行取消了动画!

看来您还不了解动画是什么。 首先设置动画,然后在动画之后执行任何操作,然后将其放入completion功能。 但是这些线您希望动画之后完成的。 因此,将它们放入completion功能! 像这样:

UIView.animate(withDuration: 3, delay: 0.0, options: .allowAnimatedContent, animations: {
        self.labelWinningPlayer.center = CGPoint(x: self.labelWinningPlayer.center.x + 500, y: self.labelWinningPlayer.center.y)
        self.buttonNextGameLabel.center = CGPoint(x: self.buttonNextGameLabel.center.x + 500, y: self.buttonNextGameLabel.center.y)
    }, completion: { (finished: Bool) in
        self.labelWinningPlayer.isHidden = true
        self.buttonNextGameLabel.isHidden = true
        labelWinningPlayer.center = CGPoint(x: labelWinningPlayer.center.x - 1000, y: labelWinningPlayer.center.y)
        buttonNextGameLabel.center = CGPoint(x: buttonNextGameLabel.center.x - 1000, y: buttonNextGameLabel.center.y)
        // ... and everything else in the method goes here too
})


而且该方法中的其他所有内容也都需要移入该位置。 一切是动画完成发生进入completion功能。 那就是completion意思!

将标签和按钮的超级视图clipsToBounds属性设置为true

UIView.animate(withDuration: 3, delay: 0.0, options: [], animations: {
        NSLog("Animation started")
        self.labelWinningPlayer.center = CGPoint(x: (self.labelWinningPlayer.center.x) * 3, y: self.labelWinningPlayer.center.y)
        self.buttonNextGameLabel.center = CGPoint(x: (self.buttonNextGameLabel.center.x) * 3, y: self.buttonNextGameLabel.center.y)
    }, completion: { (finished: Bool) in
        NSLog("Animation stopped")
        self.labelWinningPlayer.isHidden = true
        self.buttonNextGameLabel.isHidden = true
    })

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM