天天看點

《iOS元件與架構——iOS SDK進階特性剖析》——第6章,第6.4節以程式設計方式選擇媒體

本節書摘來自異步社群《ios元件與架構——ios sdk進階特性剖析》一書中的第6章,第6.4節示以程式設計方式選擇媒體,作者 【美】kyle richter , joe keeley,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視

6.4 以程式設計方式選擇媒體

ios元件與架構——ios sdk進階特性剖析

經常需要以定制方式讓使用者選擇音樂,這包括建立自定義音樂選擇界面或自動搜尋藝術家或專輯。本節讨論以程式設計方式選擇音樂所需的步驟。

要在不使用mpmediapickercontroller的情況下擷取歌曲,需要配置設定并初始化一個mpmediaquery執行個體。mpmediaquery相當于一個存儲器,包含大量指向mpmediaitem的引用,而每個mpmediaitem都表示一個要播放的歌曲或音軌。

示例應用包含兩個實作mpmediaquery的方法。第一個是playrandomsongaction:,它在使用者的音樂庫中随機選擇一個音軌,并使用現成的mpmusicplayercontroller播放它。要以程式設計方式選擇音樂,首先需要配置設定并初始化一個mpmediaquery執行個體。

6.4.1 随機選擇歌曲

沒有提供任何謂詞參數時,mpmediaquery将包含音樂庫中所有的媒體項。建立了一個nsarray,用于存儲這些媒體項;為擷取這些媒體項,調用了mpmediaquery的方法items。每個媒體項都由一個mpmediaitem表示。示例應用每次随機選擇一首歌曲并播放它。如果查詢沒有傳回任何歌曲,就向使用者顯示一個uialert;如果傳回了多首歌曲,就随機地選擇一首。

選擇要播放的歌曲後,使用它建立一個mpmediaitem數組,再使用這個數組建立一個mpmediaitemcollection。這個mpmediaitemcollection将用作mpmusicplayercontroller的播放清單。建立mpmediaitemcollection後,使用setqueuewithitemcollection将其傳遞給對象player。至此,播放器知道了使用者要欣賞哪些歌曲。接下來,對對象player調用play以播放mpmediaitem collection,這将依次播放用于建立mpmediaitemcollection的數組中的歌曲。

《iOS元件與架構——iOS SDK進階特性剖析》——第6章,第6.4節以程式設計方式選擇媒體

注意:

arc4random()位于标準c語言庫中,可在objective-c項目中使用它來生成随機數。不同于大多數随機數生成函數,arc4random在首次被調用時自動生成種子。

6.4.2 使用謂詞選擇歌曲

應用常常需要執行更複雜的歌曲搜尋,而不僅僅是随機選擇音軌,為此可使用謂詞。下面的示例使用謂詞在音樂庫中查找屬性mpmediaitempropertyartist為bob dylan的歌曲,如圖6.3所示。這個方法的工作原理與前面的随機選擇示例很像,但使用addfilterpredicate給mpmediaquery添加了篩選器。另外,不是隻選擇一首歌曲,而給播放器傳遞一個數組,其中包含所有符合條件的歌曲。有關建立謂詞時可使用哪些屬性常量,請參閱表6.1的第二列。要使用多個謂詞,可對mpmediaquery調用方法addfilterpredicate多次。

《iOS元件與架構——iOS SDK進階特性剖析》——第6章,第6.4節以程式設計方式選擇媒體

繼續閱讀