web-dev-qa-db-fra.com

Rotation d'un bouton UIB de 90 degrés à chaque fois que le bouton est cliqué

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))
    }))
}
21
nodyor90z
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.

23
keithbhunter

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
}
11
Eng Yew