Вращение UIButton на 90 градусов при каждом нажатии кнопки

Как вы поворачиваете UIButton на 90 градусов при каждом нажатии кнопки и также отслеживаете каждое повернутое положение/угол?

Вот код, который у меня есть, но он только вращается один раз:

@IBAction func gameButton(sender: AnyObject) {
    UIView.animateWithDuration(0.05, animations: ({
        self.gameButtonLabel.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_2))
    }))
}

Ответ 1

self.gameButtonLabel.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_2))

Следует изменить на

// 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))

С помощью CGAffineTransformMake... вы создаете совершенно новое преобразование и перезаписываете любое преобразование, которое уже было на кнопке. Так как вы хотите добавить 90 градусов к уже существующему преобразованию (которое может быть уже повернуто на 0, 90 и т.д.), Вам нужно добавить к текущему преобразованию. Вторая строка кода, которую я дал, сделает это.

Ответ 2

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
}