因此,我有一个按钮,当按下该按钮时,它将为其他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
}
}
左侧是该应用在启动时的外观,右侧是它在情节提要板中的外观(通常左侧的3个按钮是隐藏的,但我将其取消隐藏以更好地显示)如代码中所示,viewDidLoad将按钮设置为主菜单的位置
因为您的逻辑是不准确。
[当用户第一次轻按您的按钮时,功能被触发并进入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
}
}