button三种点击状态的切换

初学者干货:

 

问题抽象:

现在在做一个音乐播放的模块,对于音乐播放顺序有三种状态切换,如下图所示,

顺序播放

单曲循环

随机播放

现在我只抽象出最简单的部分,以该Button操作的交互过程来描述,

(1)Button默认的状态是“顺序播放”歌曲模式

(2)不断点击Button,歌曲循环模式切换顺序为“顺序播放->单曲循环->随机播放->顺序播放->....”

(3)每次点击设置了一种歌曲循环模式,都将该循环模式发送给服务器,下次来到该界面的时候,从服务器读取数据,自动载入正确的模式,而不一定就是“顺序播放”循环模式

相信这个简单的场景,大家都非常明白。


解决方案

-----------------分割线----------------我自己的解决方案----------------如下---------------------------

我认为

(1)Button一共就三种状态,所以定义了一个enum枚举,代表了3中歌曲播放循环模式,

?
1
2
3
4
5
enum{
    SoundPlayQueue,//顺序播放      SoundPlaySingle,//单曲循环      SoundPlayRandom,//随机播放 };

(2)使用Button的tag属性作为标识歌曲播放的状态,statusFromServer作为从服务端读取到的设置的歌曲播放状态(它有三个值,分别是00-顺序播放,01-单曲循环,02-随机播放),那么初次加入界面时候,就要对Button的tag进行赋值

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
- (void)viewDidLoad
{
    [super viewDidLoad];
    int  statusFromServer = [从服务端获取的歌曲循环模式-有三个值(00,01,02)];
    if(statusFromServer == 00)
    {
        playBtn.tag = SoundPlayQueue;
        [playBtn setImage:顺序播放图片];
    }
    else  if(statusFromServer == 01)
    {
        playBtn.tag = SoundPlaySingle;
        [playBtn setImage:单曲循环图片];
    }
    else  if(statusFromServer == 02)
    {
        playBtn.tag = SoundPlayRandom;
        [playBtn setImage:随机播放图片];
    }
}

(3)点击Button,添加Button点击方法-playBtnClicked,切换歌曲循环模式,

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
- (void)playBtnClicked:(id)sender
{
    UIButton tempBtn = (UIButton *)sender;
    if(tempBtn.tag == SoundPlayQueue)
    {
        //如果现在顺序播放,那么下一个模式设置为单曲循环,          tempBtn.tag = SoundPlaySingle;
        [tempBtn setImage:单曲循环图片];
        statusFromServer = 01;
    }
    else  if(tempBtn.tag == SoundPlaySingle)
    {
        //如果现在单曲循环,那么下一个模式设置为随机播放,          tempBtn.tag = SoundPlayRandom;
        [tempBtn setImage:随机播放图片];
        statusFromServer = 02;
    }
    else  if(tempBtn.tag == SoundPlayRandom)
    {
        //如果现在随机播放,那么下一个模式设置为顺序播放,          tempBtn.tag = SoundPlayQueue;
        [tempBtn setImage:顺序播放图片];
        statusFromServer = 00;
    }
}

总结:

我用这种方式确实解决了问题,但是总感觉代码过于累赘和不合理,

(1)最主要的一个问题就是Button作为一个UI控件,它只是用于进行界面显示和事件控制,但是我这边却用它的属性来标识当前的歌曲循环模式,也就是说Button的所做的事情超过了它的业务范畴;

(2)其次就是这种方式,无疑增加了当前ViewController中的代码,是的ViewController看起来杂乱

 

 

 

拓展思路:

int statusFromServer = [从服务端获取的歌曲循环模式-有三个值(00,01,02)];
playBtn.tag = statusFromServer;
[playBtn setImage:[UIImage image@"playImg%d", statusFromServer]];//随机播放图片 对应playImg02.png图片


- (void)playBtnClicked:(id)sender
{
UIButton tempBtn = (UIButton *)sender;
[playBtn setImage:[UIImage image@"playImg%d", (tempBtn.tag+1)%3]];//(tempBtn.tag+1)%3 为下一个状态的图片
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值