[Objective-C] [iOS] UIButtonを回転させる (回転のアニメーションをつける)

押された時に回転して、 元に戻るUIButtonの作り方です。
UIButtonを回転させたかったのですがUIButtonのカスタムが必要かと思っていましたが、 UIButtonをカスタムしなくても実現できました。

ボタンを回転させる方法

ボタンが押されたタイミングでtransformに値を設定します。
ボタンを元に戻したい時には、transformにCGAffineTransformIdentityを設定します。

半回転させるサンプル

1
2
3
4
5
// 半回転させる
self.toggleButton.transform = CGAffineTransformMakeRotation(M_PI);
 
// 元に戻す
self.toggleButton.transform = CGAffineTransformIdentity;

transformを使うことで、簡単にボタンを回転させることができました。
今回はこれを使って、押されたらボタンが時計方向に半回転して、もう一回押したら元に戻るようなサンプルを作成しました。

アニメーションして回転させるサンプル

1
2
3
4
5
6
7
8
9
10
11
12
13
- (IBAction)pushButton:(id)sender {
    self.showLabel = !self.showLabel;
 
    [UIView animateWithDuration:0.3f animations:^(void){
        if (self.showLabel) {
            self.toggleButton.transform = CGAffineTransformMakeRotation(M_PI - 0.0001);
        } else {
            self.toggleButton.transform = CGAffineTransformIdentity;
        }
 
        [self.view setNeedsLayout];
    }];
}

ポイント

回転させる時に、「M_PI - 0.0001」としていますが、これはM_PIで指定するとアニメーションさせると時計方向に回転してしまうためです。(サンプルでは反時計方向に回転させています)

Objective-Cのシンタックスハイライトされるようにしないと見にくいですね。
次回は今回作ったボタンと連動して、AutoLayoutで作成したViewを開いたり閉じたりしたいと思います。

0 件のコメント :

コメントを投稿