jubilee

Programing, Books and more...

UIButtonでタップ毎にボタン画像を切替える

UIButtonをトグルスイッチのように使う方法。
プレイボタン → タップ → ストップボタン → タップ → プレイボタン

ボタンに画像を設定する

viewDidLoadなど。画像はアセットカタログに登録済み。

1
2
3
4
5
6
7
8
// 通常(プレイ)
[_button setImage:[UIImage imageNamed:@"playButton"] forState:UIControlStateNormal];
// プレイでボタンをタップ中
[_button setImage:[UIImage imageNamed:@"stopButton"] forState:UIControlStateHighlighted];
// ストップ
[_button setImage:[UIImage imageNamed:@"stopButton"] forState:UIControlStateNormal | UIControlStateSelected];
// ストップでボタンをタップ中
[_button setImage:[UIImage imageNamed:@"playButton"] forState:UIControlStateHighlighted | UIControlStateSelected];

ボタンタップアクション

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
- (IBAction)userButtonTapped:(UIButton *)sender {
    sender.selected = !sender.selected;   // これが重要(状態を入れ替える)
    // プレイをタップ
    if (sender.selected) {
        _userTimer = [NSTimer scheduledTimerWithTimeInterval:[_userFrameSpeedInfos[0] floatValue]
                                                      target:self
                                                    selector:@selector(timerUserView:)
                                                    userInfo:nil
                                                     repeats:YES];
    }
    // ストップをタップ
    else {
        [_userTimer invalidate];
    }
}

おまけ

タイマーが停止した時にボタンをプレイに戻す。

1
2
3
4
5
6
7
8
9
10
11
12
13
 - (void)timerUserView:(NSTimer*)timer
{
    int index = ++_userFramIndex;
    if (index < [_userFrameImageInfos count]) {
        [self displayFrameImageAtIndex:index userDistinction:USER];
    }
    // タイマーを止める
    else {
        [timer invalidate];
        _userFramIndex = 0;
        [_userButton setSelected:NO];   // これでプレイに戻る
    }
}