Comment faire pivoter un bouton UIB de 90 degrés à chaque fois que le bouton est cliqué et garder une trace de chaque position/angle pivoté?
Voici le code que j'ai jusqu'à présent mais il ne tourne qu'une seule fois:
@IBAction func gameButton(sender: AnyObject) {
UIView.animateWithDuration(0.05, animations: ({
self.gameButtonLabel.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_2))
}))
}
self.gameButtonLabel.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_2))
Devrait être changé en
// Swift 3 - Rotate the current transform by 90 degrees.
self.gameButtonLabel.transform = self.gameButtonLabel.transform.rotated(by: CGFloat(M_PI_2))
// OR
// Swift 2.2+ - Pass the current transform into the method so it will rotate it an extra 90 degrees.
self.gameButtonLabel.transform = CGAffineTransformRotate(self.gameButtonLabel.transform, CGFloat(M_PI_2))
Avec CGAffineTransformMake...
, vous créez une toute nouvelle transformation et vous remplacez toute transformation déjà présente sur le bouton. Étant donné que vous souhaitez ajouter 90 degrés à la transformation qui existe déjà (qui pourrait déjà être de 0, 90, etc., une rotation), vous devez ajouter à la transformation actuelle. La deuxième ligne de code que j'ai donnée fera cela.
Swift 4:
@IBOutlet weak var expandButton: UIButton!
var sectionIsExpanded: Bool = true {
didSet {
UIView.animate(withDuration: 0.25) {
if self.sectionIsExpanded {
self.expandButton.transform = CGAffineTransform.identity
} else {
self.expandButton.transform = CGAffineTransform(rotationAngle: -CGFloat.pi / 2.0)
}
}
}
}
@IBAction func expandButtonTapped(_ sender: UIButton) {
sectionIsExpanded = !sectionIsExpanded
}