標籤:style http os io 使用 ar 資料 2014 問題
問題抽象:
現在在做一個音樂播放的模組,對於音樂播放順序有三種狀態切換,如所示,
順序播放
單曲迴圈
全部隨機播放
現在我只抽象出最簡單的部分,以該Button操作的互動過程來描述,
(1)Button預設的狀態是“順序播放”歌曲模式
(2)不斷點擊Button,歌曲迴圈模式切換順序為“順序播放->單曲迴圈->全部隨機播放->順序播放->....”
(3)每次點擊設定了一種歌曲迴圈模式,都將該迴圈模式發送給伺服器,下次來到該介面的時候,從伺服器讀取資料,自動載入正確的模式,而不一定就是“順序播放”迴圈模式
相信這個簡單的情境,大家都非常明白。
解決方案
-----------------分割線----------------我自己的解決方案----------------如下---------------------------
我認為
(1)Button一共就三種狀態,所以定義了一個enum枚舉,代表了3中歌曲播放迴圈模式,
enum{ SoundPlayQueue,//順序播放 SoundPlaySingle,//單曲迴圈 SoundPlayRandom,//全部隨機播放};
(2)使用Button的tag屬性作為標識歌曲播放的狀態,statusFromServer作為從服務端讀取到的設定的歌曲播放狀態(它有三個值,分別是00-順序播放,01-單曲迴圈,02-全部隨機播放),那麼初次加入介面時候,就要對Button的tag進行賦值
- (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,切換歌曲迴圈模式,
- (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看起來雜亂
求助:
親愛的你,親愛的大神,能不能給我指點迷津,幫我最佳化代碼呢?希望給我指出一種思路就可以了,不需要詳細代碼,再次本碼農跪謝了。^^
iOS開發思路提問(系列1:一個Button的三種狀態怎樣切換?)