環境: Swift 5.0.1
ある View (ここではUIImageView)を180度回転させる、そして元の状態に戻すアニメーションをさせたい。
こういう場合、 CGAffineTransform の rotation を使えば実現できる。
こんなかんじの動きにしたかったのだが少しハマってしまった。
最初は以下のように実装した。
UIView.animate(withDuration: 0.5) { if self.arrowUpImageView.transform.isIdentity { self.arrowUpImageView.transform = CGAffineTransform(rotationAngle: .pi) } else { self.arrowUpImageView.transform = .identity } }
しかしこれだと上画像のように逆回転せず下画像のように同方向の回転で戻ってしまう。
そこで以下のように180度に満たないangleにすることで意図通り逆回転で戻ったので、とりあえずこれでよしとする。
UIView.animate(withDuration: 0.5) { if self.arrowUpImageView.transform.isIdentity { self.arrowUpImageView.transform = CGAffineTransform(rotationAngle: .pi * 0.999) } else { self.arrowUpImageView.transform = .identity } }