UIButton不会在第一次按下时显示动画

问题描述 投票:-1回答:1

因此,我有一个按钮,当按下该按钮时,它将为其他3个按钮设置动画/取消隐藏,反之亦然。每次第一次按下动画时,动画效果都很好。不知道为什么它第一次停止工作,因为它突然停止工作...

编辑:我将其范围缩小到viewDidLoad函数,似乎它没有将按钮设置为加载时主按钮的位置。不知道如何解决它。

这里是代码:

class MainMenuViewController: UIViewController {

    @IBOutlet weak var more: UIButton!
    @IBOutlet weak var addButton: UIButton!
    @IBOutlet weak var addItemButton: UIButton!
    @IBOutlet weak var settingsButton: UIButton!

    var addButtonPoints: CGPoint!
    var addItemButtonPoints: CGPoint!
    var settingsButtonPoints: CGPoint!
    var moreButtonPressed: Bool = false

    override func viewDidLoad() {
        super.viewDidLoad()

        addButtonPoints = addButton.center
        addItemButtonPoints = addItemButton.center
        settingsButtonPoints = settingsButton.center

        addButton.center = more.center // moving button towards the center of the main button
        addItemButton.center = more.center
        settingsButton.center = more.center
    }

    @IBAction func mainMenuTapped(_ sender: Any) {
        if moreButtonPressed == true { // collapse
            UIView.animate(withDuration: 0.3, animations: {
                self.addItemButton.alpha = 0 // hiding the buttons
                self.settingsButton.alpha = 0
                self.addButton.alpha = 0

                self.addItemButton.center = self.more.center // moving buttons
                self.settingsButton.center = self.more.center
                self.addButton.center = self.more.center
            })
            moreButtonPressed = false
        }
        else { // expand
            UIView.animate(withDuration: 0.3, animations: {
                self.addItemButton.alpha = 1
                self.settingsButton.alpha = 1
                self.addButton.alpha = 1

                self.addItemButton.center = self.addItemButtonPoints
                self.settingsButton.center = self.settingsButtonPoints
                self.addButton.center = self.addButtonPoints
            })
            moreButtonPressed = true
        }
    }

what the buttons look like

左侧是该应用在启动时的外观,右侧是它在情节提要板中的外观(通常左侧的3个按钮是隐藏的,但我将其取消隐藏以更好地显示)如代码中所示,viewDidLoad将按钮设置为主菜单的位置

swift xcode uistoryboard uiviewanimation xcode11
1个回答
0
投票

因为您的逻辑是不准确

[当用户第一次轻按您的按钮时,功能被触发并进入else情况。因为moreButtonPressed开头是false

将按钮的alpha设置为1,您看不到任何变化。因为所有alpha都已经1


代替该解决方案,您可以将moreButtonPressed的名称更改为更有意义的替代名称,例如isHidden,并将其用作这样的状态:

var isHidden: Bool = false // Button not hidden at the beginning
@IBAction func mainMenuTapped(_ sender: Any) {
    if isHidden {
        UIView.animate(withDuration: 0.3, animations: {
            self.addButton.alpha = 1
        })
        isHidden = false // We set alpha to 1 and it is visible now.
    }
    else {
        UIView.animate(withDuration: 0.3, animations: {
            self.addButton.alpha = 0
        })
        isHidden = true // We set alpha to 0
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.