畢業(yè)設(shè)計--基于ios平臺的視頻播放器的設(shè)計與實(shí)現(xiàn)_第1頁
已閱讀1頁,還剩29頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、<p><b>  畢業(yè)論文(設(shè)計)</b></p><p>  2015 屆 電子通信工程 專業(yè) 1113072 班級</p><p>  題 目 基于iOS平臺的視頻播放器的設(shè)計與實(shí)現(xiàn) </p><p>  2015 年 5 月 25 日</p><p><b&g

2、t;  摘 要</b></p><p>  現(xiàn)在,我們已經(jīng)越來越進(jìn)入一個信息技術(shù),科學(xué)技術(shù)都日益發(fā)達(dá)的時代,在日常生活中,各式各樣的視頻播放器應(yīng)用越來越普及,因此開發(fā)一款簡單方便的視頻播放器是非常迎合用戶需求的。本課題就是利用互聯(lián)網(wǎng)技術(shù)的傳播廣泛性來設(shè)計實(shí)現(xiàn)的一款手機(jī)客戶端的視頻播放器應(yīng)用。本課題是基于iOS平臺下Objective-C開發(fā)語言以及C語言來實(shí)現(xiàn),利用系統(tǒng)提供的類以及第三方類庫實(shí)現(xiàn)數(shù)據(jù)

3、加載、視頻播放和數(shù)據(jù)處理,主要實(shí)現(xiàn)各類視頻信息的展示與播放功能。課題所用的數(shù)據(jù)接口信息來自第三方供應(yīng)商,數(shù)據(jù)來源穩(wěn)定準(zhǔn)確。通過測試,基本可以實(shí)現(xiàn)觀看視頻信息與搜索視頻信息的功能,應(yīng)用程序簡單易操作,具有很好的用戶體驗(yàn)度。</p><p>  手機(jī)客戶端;iOS平臺;視頻播放器;</p><p><b>  Abstract</b></p><p&g

4、t;  With the progress of science and technology, the rapid development of network technology, smart phones now in China's development trend in recent years, everyone is there for all to see, mention smartphones have

5、to speak phone software, smart power to run from game entertainment to a variety of software for mobile office. Subject is the use of mobile Internet features provide people with better, more full of game strategy. This

6、topic is to use the Object - the C programming language to implement</p><p><b>  目 錄</b></p><p><b>  1概論1</b></p><p>  1.1課題研發(fā)的背景1</p><p>  1

7、.2課題研究的目的和意義1</p><p>  1.3課題預(yù)期的目標(biāo)1</p><p>  2相關(guān)技術(shù)的介紹2</p><p><b>  2.1軟件環(huán)境2</b></p><p>  2.2核心技術(shù)介紹2</p><p>  2.2.1內(nèi)存管理機(jī)制2</p><p

8、>  2.2.2oc語言3</p><p><b>  3需求分析4</b></p><p>  3.1軟件功能需求分析4</p><p>  3.1.1視頻信息搜索4</p><p>  3.1.2視頻信息展示4</p><p>  3.1.3視頻信息播放5</p>

9、<p>  3.2軟件可行性分析5</p><p><b>  4系統(tǒng)設(shè)計6</b></p><p><b>  4.1對象模型6</b></p><p>  4.2MVC模式7</p><p><b>  5系統(tǒng)實(shí)現(xiàn)9</b></p>&

10、lt;p>  5.1開發(fā)所用的關(guān)鍵類9</p><p>  5.2應(yīng)用程序編碼實(shí)現(xiàn)12</p><p>  5.2.1應(yīng)用程序工作流程12</p><p>  5.2.2應(yīng)用程序管理類13</p><p>  5.2.3應(yīng)用程序工具類14</p><p>  5.2.4應(yīng)用程序功能實(shí)現(xiàn)15</p

11、><p>  5.2.5應(yīng)用程序界面實(shí)現(xiàn)16</p><p>  5.3應(yīng)用程序模塊實(shí)現(xiàn)18</p><p><b>  6系統(tǒng)測試23</b></p><p><b>  致謝24</b></p><p><b>  參考文獻(xiàn)24</b><

12、/p><p>  基于iOS平臺的視頻播放器的設(shè)計與實(shí)現(xiàn)</p><p><b>  1概論</b></p><p>  現(xiàn)在,我們已經(jīng)越來越進(jìn)入一個信息技術(shù),科學(xué)技術(shù)都日益發(fā)達(dá)的時代,視頻應(yīng)用已經(jīng)日益普及。在我們生活中時時可見對于我們的日常生活來說必不可少的高科技產(chǎn)品,比如平板電腦,智能手機(jī)等等。幾乎在所有的城市當(dāng)中,每天都可以看到手持手機(jī)專心致

13、志地欣賞視頻的人們,這在我們工作生活中有著切身體會。</p><p>  1.1課題研發(fā)的背景</p><p>  隨著如今智能手機(jī)的普及,視頻應(yīng)用不僅僅只是在電腦上有很多人使用,越來越多的手機(jī)視頻應(yīng)用出現(xiàn)在各種手機(jī)平臺上。據(jù)大致統(tǒng)計,視頻應(yīng)用在豐富我們的日常生活占據(jù)重要組成部分,因此開發(fā)一款好用又簡單的應(yīng)用對于開發(fā)商來說是一件很具有市場前景的不錯的選擇。</p><p

14、>  1.2課題研究的目的和意義</p><p>  本項(xiàng)目旨在給廣大消費(fèi)者群體提供一個更方便快捷的網(wǎng)絡(luò)視頻平臺。提供對人們生活與娛樂的現(xiàn)狀的了解,我們明白這個項(xiàng)目的可行性。通過這個項(xiàng)目,人們可以看到自己想要的視頻信息,本項(xiàng)目可以通過分類來達(dá)到用戶的需求,用戶可以根據(jù)自己的喜好找到網(wǎng)絡(luò)視頻,通過網(wǎng)絡(luò)和人們普遍使用的手機(jī)等通訊工具來度過自己的娛樂和休閑時間。</p><p>  1.3

15、課題預(yù)期的目標(biāo)</p><p>  本課題研究的主要內(nèi)容是:利用Objective-C和一些第三方類去實(shí)現(xiàn)的一款應(yīng)用軟件,通過對網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)解析、UI框架的搭建、第三方庫SDWebImage的使用等實(shí)現(xiàn)此應(yīng)用程序的視頻信息的展示以及觀看等基本的功能。具體的功能如下:</p><p><b>  2相關(guān)技術(shù)的介紹</b></p><p>  就本

16、課題來說,我們所需要的軟件支持和技術(shù)支持是我們保證開發(fā)進(jìn)度與完成力度的前提。因此對于本課題中所需要的開發(fā)技術(shù)說明分為如下兩部分:軟件環(huán)境、核心技術(shù)簡介。</p><p><b>  2.1軟件環(huán)境</b></p><p><b>  (1) 硬件環(huán)境</b></p><p>  操作系統(tǒng):Mac OS X </p&g

17、t;<p><b>  內(nèi)存容量:8GB</b></p><p>  硬盤容量:500GB</p><p><b>  (2)測試環(huán)境</b></p><p>  模擬器測試配置:iOS iPhone 5s </p><p>  iOS版本:iOS 7.1</p&

18、gt;<p><b> ?。?)開發(fā)環(huán)境</b></p><p>  1.開發(fā)該軟件使用的開發(fā)工具為Xcode6.0版本。</p><p>  2. 開發(fā)該軟件使用的開發(fā)語言為Objective-C,C語言。</p><p><b>  2.2核心技術(shù)介紹</b></p><p>  

19、本課題是基于iOS技術(shù)利用OC開發(fā)語言實(shí)現(xiàn)的,使用Xcode編程軟件進(jìn)行開發(fā)的,因此我們在進(jìn)行開發(fā)之前需要了解OC中內(nèi)存管理機(jī)制、iOS發(fā)展歷程、OC語言以及開發(fā)工具Xcode等等。</p><p>  2.2.1內(nèi)存管理機(jī)制</p><p>  內(nèi)存管理是程序設(shè)計中常用的資源管理的一部分[8]。每個計算機(jī)系統(tǒng)可供程序使用的資源都是有限的,這些資源包括內(nèi)存、打開文件數(shù)量以及網(wǎng)絡(luò)連接等。iO

20、S系統(tǒng)為每個應(yīng)用程分配30MB的內(nèi)存,超過20MB會收到內(nèi)存警告,如果超過30MB,系統(tǒng)將會終止你的應(yīng)用程序,也就是我們熟悉的閃退[2]。因此我們需要時時的對應(yīng)用程序進(jìn)行內(nèi)存管理。</p><p>  在Objective-C中,對象不斷地被其他對象創(chuàng)建、使用和銷毀,為了保證程序不產(chǎn)生額外的內(nèi)存開銷,當(dāng)對象不再需要以后,應(yīng)當(dāng)被立即銷毀,防止內(nèi)存泄露[8]。Objective-C中有一套很完善的內(nèi)存管理機(jī)制,我簡單

21、地將它歸納為以下幾條:</p><p>  1.對你自己擁有的對象負(fù)責(zé)。你只能釋放你擁有的對象。</p><p>  2.凡是你通過retain,alloc,copy等手段獲得了所有權(quán)的對象,都必須在你不再使用它的時候,由你來調(diào)用release,autorelease等手段來釋放對它的所有權(quán)。</p><p>  3.在一定的代碼段內(nèi),對同一個對象所作的copy,a

22、lloc和retain的操作次數(shù)應(yīng)當(dāng)與release和autorelease操作次數(shù)相同[12]。</p><p>  4.可以在類的dealloc方法中釋放你所占有的實(shí)例變量。</p><p><b>  2.2.2oc語言</b></p><p>  Objective-C是一門面向?qū)ο蟮木幊陶Z言[7]。Objective-C語言具有三大特

23、征:封裝,繼承和多態(tài)[3]。</p><p>  封裝:隱藏內(nèi)部實(shí)現(xiàn),穩(wěn)定外部接口。</p><p>  繼承:子類可以直接復(fù)用父類中的成員。</p><p>  多態(tài):不同對象對同一消息的不同響應(yīng)。</p><p><b>  3需求分析</b></p><p>  3.1軟件功能需求分析<

24、;/p><p>  在開發(fā)進(jìn)行之前,我們需要了解我們開發(fā)的項(xiàng)目需要實(shí)現(xiàn)的功能模塊。就本課題來說,視頻播放類的APP,最重要的就是視頻信息的展示、搜索與播放。下面就單個模塊對整個系統(tǒng)實(shí)現(xiàn)進(jìn)行分析。</p><p>  3.1.1視頻信息搜索</p><p>  視頻信息搜索是視頻播放器的功能之一,它主要使用了官方提供的一個系統(tǒng)類,并通過對網(wǎng)址url進(jìn)行拼接參數(shù)實(shí)現(xiàn)搜索結(jié)果

25、,進(jìn)行界面展示。</p><p>  用戶可以在搜索欄上輸入自己想要查詢的視頻信息名稱,應(yīng)用程序把用戶輸入的字符作為參數(shù)通過拼接網(wǎng)址傳給服務(wù)器,服務(wù)器會返回一個json類型的數(shù)據(jù)字典,這些數(shù)據(jù)是通過NSJSON解析處理后,用一個collectionView集合視圖來顯示返回來的數(shù)據(jù)并展示在UI界面之上的。</p><p>  3.1.2視頻信息展示</p><p>

26、  視頻信息展示是視頻播放器的主要功能,它主要是根據(jù)網(wǎng)絡(luò)接口數(shù)據(jù)分析解析并通過UI界面布局之后進(jìn)行界面展示。</p><p>  程序啟動之后,展示在界面上的就是推薦界面的視頻信息,用戶可以通過點(diǎn)擊進(jìn)入視頻模塊分區(qū)界面。并且根據(jù)自己喜好選擇自己喜歡的視頻信息,進(jìn)行播放。信息展示主要是通過接口請求到數(shù)據(jù)進(jìn)行JSON解析,并將數(shù)據(jù)保存在字典中,啟動程序后,就會進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)請求,回傳到的數(shù)據(jù)展示在UI界面就形成了我們看

27、到的視頻信息。</p><p>  3.1.3視頻信息播放</p><p>  該視頻應(yīng)用是在webView上面進(jìn)行在線播放的APP。</p><p>  用戶點(diǎn)擊視頻信息名稱,應(yīng)用程序把用戶點(diǎn)擊事件獲得的參數(shù)拼接的網(wǎng)址傳給服務(wù)器,服務(wù)器直接訪問對應(yīng)的播放來源的網(wǎng)站進(jìn)行在線播放。在程序中每個視頻信息都可以通過點(diǎn)擊事件來響應(yīng)視頻播放的方法。視頻播放主要是通過接口數(shù)據(jù)得

28、到網(wǎng)址信息,并且選擇播放來源時拼接不同的參數(shù)來實(shí)現(xiàn)在不同網(wǎng)站上播放同一個視頻信息的功能。</p><p>  3.2軟件可行性分析</p><p>  當(dāng)前社會是一個信息化的社會,信息的傳播無處不在,而且蘋果產(chǎn)品的普及也給該系統(tǒng)提供了很好的推廣前景。就消費(fèi)者而言,蘋果手機(jī)已成為各種消費(fèi)者群體爭先追捧的智能產(chǎn)品。它以及華麗的外形,超高的用戶體驗(yàn)度一直強(qiáng)勢地占領(lǐng)市場。以此,就社會性而言,該視頻

29、應(yīng)用是非常合時宜的。</p><p>  此系統(tǒng)硬件、軟件要求不高,目前市場上的一般計算機(jī)硬件資源(例如Mac mini)均能滿足系統(tǒng)開發(fā)要求,其中開發(fā)工具為Xcode。系統(tǒng)技術(shù)采用iOS開發(fā)技術(shù),OC開發(fā)語言,擴(kuò)展性強(qiáng)。以上技術(shù)足以完成本系統(tǒng)的開發(fā)與設(shè)計。</p><p>  本系統(tǒng)的開發(fā)完全可以利用現(xiàn)有硬件條件,不需增加新的硬件設(shè)備。開發(fā)所涉及的軟件使用的均為免費(fèi)版本,開發(fā)后的應(yīng)用免費(fèi)

30、提供給用戶,讓用戶能輕松享受娛樂時光。系統(tǒng)開發(fā)基本無需其他開銷,費(fèi)用支出可忽略不計,所以本軟件具有極高的經(jīng)濟(jì)可行性。</p><p><b>  4系統(tǒng)設(shè)計</b></p><p>  在完成了對課題的所需技術(shù)介紹以及需求分析之后,我們就要對系統(tǒng)實(shí)現(xiàn)所需的各種具體類與方法進(jìn)行設(shè)計。在iOS開發(fā)過程中,我們一般使用MVC框架對我們的代碼模塊進(jìn)行管理,保證類與類之間不沖突

31、,方法與方法之間可復(fù)用,代碼不冗余。對于本課題而言,我們主要通過對使用對象模型的分析設(shè)計,MVC模式的設(shè)計來完成系統(tǒng)的設(shè)計綱要。</p><p><b>  4.1對象模型</b></p><p>  本課題設(shè)計的視頻播放器應(yīng)用程序主要由四大對象UIApplicationMain ,UIApplicationDelegate,UIWindow ,U

32、IViewController組成,具體的介紹及關(guān)系圖如圖4-1所示:</p><p> ?。?)UIApplicationMain </p><p>  在main.m的main函數(shù)中執(zhí)行了UIApplicationMain這個方法,這是iOS程序的入口點(diǎn)[9]。</p><p> ?。?)UIApplicationDelegate</p>

33、<p>  在開發(fā)過程中,UIApplication是一個非常重要的全局對象。但在實(shí)際編程中我們并不直接和UIApplication對象打交道,而是和其代理打交道,它的代理必須遵循UIApplicationDelegate協(xié)議,代理提供了相關(guān)的生命周期方法來處理應(yīng)用程序的系統(tǒng)事件[9]。</p><p> ?。?) UIWindow </p><p>  U

34、IWindow 是一種特殊的UIView,通常在一個app中只會有一個 UIWindow ,但可以手動創(chuàng)建多個 UIWindow[10] 。 UIWindow 的主要作用是提供一個區(qū)域來顯示視圖;將事件分發(fā)給視圖控制器;與UIViewController協(xié)調(diào)工作,方便完成設(shè)備方向旋轉(zhuǎn)的支持。</p><p> ?。?)UIViewControl

35、ler</p><p>  UIViewController屬于MVC模型中的C(Controller),說的具體點(diǎn)是它是一個視圖控制器,管理著一個視圖(UIView)[10]。</p><p>  圖4-1 四大對象關(guān)系圖</p><p><b>  4.2MVC模式</b></p><p>  系統(tǒng)中主要使用MVC模

36、式,MVC模式是Apple iOS開發(fā)需要遵循的設(shè)計模式[11]。它把一個頁面分為三部分。M代表Model,也就是模型,通常是一些模型類(例如LDLModel類),用于存儲數(shù)據(jù)。View代表視圖,用于顯示數(shù)據(jù)。C代表控制器(Controller),用于控制M和V的同步和協(xié)調(diào)。當(dāng)數(shù)據(jù)改變的時候,要讓視圖顯示更新的數(shù)據(jù)。一個應(yīng)用程序通常是多個這樣的頁面組成。它的優(yōu)點(diǎn)是:</p><p><b>  (1)低

37、耦合性。</b></p><p><b> ?。?)重用性高。</b></p><p><b>  (3)可維護(hù)性好。</b></p><p>  在本系統(tǒng)中就應(yīng)用了MVC設(shè)計模式對代碼進(jìn)行封裝和分離,具體MVC結(jié)構(gòu)模型圖如圖4-2所示:</p><p>  圖 4-2 MVC模型關(guān)系圖

38、</p><p><b>  5系統(tǒng)實(shí)現(xiàn)</b></p><p>  通過對系統(tǒng)實(shí)現(xiàn)需求的設(shè)計,我們大致了解我們開發(fā)所用的類、框架與模型。就進(jìn)入了真正的系統(tǒng)實(shí)現(xiàn)模塊,首先我們要了解在開發(fā)過程中我們所用到的類與類之間的關(guān)系,方便開發(fā)。然后根據(jù)我們需要實(shí)現(xiàn)的功能進(jìn)行代碼的封裝,從而實(shí)現(xiàn)代碼的復(fù)用與模塊化。</p><p>  5.1開發(fā)所用的關(guān)鍵類

39、</p><p>  UI即User Interface(用戶界面)的簡稱。UI設(shè)計是指對軟件的人機(jī)交互、操作邏輯、界面美觀的完整設(shè)計。UI處于iOS四層結(jié)構(gòu)的最上層(Cocoa Touch),并且放置在UIKit框架下,它跟用戶的操作息息相關(guān),所以包含的控件也特別多[12]。子類與父類之間繼承關(guān)系如圖5-1-1所示:</p><p>  圖 5-1-1 子類與父類之間繼承圖</p&

40、gt;<p>  在本課題的程序?qū)崿F(xiàn)里面主要用到的控件大致如下:</p><p><b> ?。?)顯示類</b></p><p> ?、賃ILabel 展示信息,在應(yīng)用程序中主要用于展示視頻信息等等。</p><p> ?、赨IButton 按鈕,在應(yīng)用程序中只要用于相應(yīng)用戶點(diǎn)擊時間,比如點(diǎn)擊“更多”按鈕進(jìn)入詳情界面,點(diǎn)擊“歷史

41、記錄”按鈕進(jìn)入觀看歷史記錄界面。</p><p>  ③UIAlertView 警告視圖,在應(yīng)用程序中主要用于展示刪除的彈窗警告,給用戶更好的體驗(yàn),選擇權(quán)在用戶手中。</p><p> ?、躑IView 視圖,在應(yīng)用程序中主要用于展示視頻信息,并在視圖上進(jìn)行相應(yīng)的操作。</p><p> ?、軺INavigationBar 導(dǎo)航條,在界面上展示導(dǎo)航條的位置,方便我們

42、根據(jù)導(dǎo)航控制器來控制界面跳轉(zhuǎn)及操作。</p><p> ?、轚ITableView 表視圖,在應(yīng)用程序中主要在單元格上展示視頻信息,設(shè)置信息等等。</p><p> ?、遀ICollectionView 集合視圖,在應(yīng)用程序的推薦界面和分類界面都是集合視圖來展示分區(qū)信息。</p><p>  ⑧UIImageView 圖片視圖,在應(yīng)用程序中有圖片的展示信息都是加載在

43、UIImageView視圖之上的。</p><p> ?、酻IScrollView 滾動視圖,在應(yīng)用程序主界面輪播圖是使用UIScrollView和UIPageControl控件實(shí)現(xiàn)的。</p><p> ?、釻IWebView 網(wǎng)頁視圖,在應(yīng)用程序中視頻播放界面是UIWebView加載實(shí)現(xiàn)的。</p><p><b>  (2)功能類使用</b&g

44、t;</p><p> ?、貼SDate 處理日期和時間,在應(yīng)用程序中顯示時間和刷新時間。</p><p> ?、贜STimer 定時器,在應(yīng)用程序中添加動畫效果開始時間,添加定時器。</p><p>  ③NSURL 網(wǎng)絡(luò)路徑,在應(yīng)用程序中封裝網(wǎng)絡(luò)路徑。</p><p>  ④NSURLRequest 網(wǎng)絡(luò)請求,在應(yīng)用程序中設(shè)置一些網(wǎng)絡(luò)的請

45、求信息。</p><p> ?、軳SError 在應(yīng)用程序中使用到是用來接收網(wǎng)絡(luò)請求中的錯誤信息。</p><p> ?、轓SData 數(shù)據(jù),在應(yīng)用程序中把一些信息寫入到文件里或發(fā)送到網(wǎng)絡(luò)上,我們需要把這些數(shù)據(jù)轉(zhuǎn)換下,變成純粹的0、1字符流使用到NSData類。</p><p>  ⑦NSNotification 通知,在應(yīng)用程序中用于界面?zhèn)鬟f信息,在播放界面和歷

46、史記錄界面有使用到通知的發(fā)送和接收。</p><p> ?、郚SJSONSerialization 數(shù)據(jù)解析,在應(yīng)用程序中主要用于解析網(wǎng)絡(luò)數(shù)據(jù),主要分為XML和JSON解析,在應(yīng)用程序中主要用到JSON解析數(shù)據(jù)。</p><p>  ⑨NSOperationQueue 隊列,在應(yīng)用程序中主要用于對對象進(jìn)行隊列操作。</p><p>  5.2應(yīng)用程序編碼實(shí)現(xiàn)<

47、/p><p>  應(yīng)用程序是我們通過編碼實(shí)現(xiàn)UI界面展示,響應(yīng)并處理用戶事件的最重要的一部分,幾乎所有的功能實(shí)現(xiàn)都是基于代碼的書寫來完成的。下面就應(yīng)用程序的工作流程、編碼實(shí)現(xiàn)進(jìn)行介紹。</p><p>  5.2.1應(yīng)用程序工作流程</p><p>  應(yīng)用程序是基于iOS技術(shù)開發(fā)實(shí)現(xiàn)的,根據(jù)需求,我們需要設(shè)計包含主界面以及很多的子類界面。主界面有:推薦界面、分類界面、

48、搜索界面、設(shè)置界面。子類界面有分類詳情界面、劇集選擇界面、播放界面、歷史記錄界面等等。主界面之間實(shí)現(xiàn)用戶對視頻信息的選擇與展示,并響應(yīng)用戶點(diǎn)擊事件。例如:用戶點(diǎn)擊每個集合視圖的item時可以跳轉(zhuǎn)到模塊分類詳情界面;點(diǎn)擊模塊分類詳情界面會跳轉(zhuǎn)到視頻信息詳情界面,并選擇劇集實(shí)現(xiàn)播放視頻的功能。主頁面主要負(fù)責(zé)整個應(yīng)用程序的視頻信息,通過添加手勢來實(shí)現(xiàn)與下級界面的交互,它的信息播放以及視頻信息詳情展示都由下級頁面來完成。整個界面看起來美觀簡潔,

49、使得用戶使用起來一目了然。而且通過界面代碼實(shí)現(xiàn)的復(fù)用,很好的降低代碼冗余,使得程序運(yùn)行更加流暢,占據(jù)內(nèi)存空間更小。</p><p>  根據(jù)上面的詳細(xì)的介紹,我們大概有所了解客戶端的整的整個流程??蛻舳说牧鞒虉D如4-2-1圖所示:</p><p>  圖 4-2-1 視頻播放流程圖</p><p>  5.2.2應(yīng)用程序管理類</p><p>

50、;  (1)管理類 LDLManager</p><p>  在程序運(yùn)行中很多地方要使用到網(wǎng)絡(luò)數(shù)據(jù)處理,通過實(shí)現(xiàn)一次代碼書寫多處模塊復(fù)用的功能,這就是OC語言封裝的概念的具體體現(xiàn)。下面的代碼就是實(shí)現(xiàn)文件歸檔保存數(shù)據(jù)的方法的聲明。具體在需要用到將數(shù)據(jù)保存在本地的模塊調(diào)用這個方法即可。</p><p>  typedef enum {</p><p>  ModelPa

51、ckageTypeRefresh,//刷新數(shù)據(jù)</p><p>  ModelPackageTypeLoadingMore//加載更多</p><p>  }ModelPackageType;</p><p>  + (id)manager;</p><p><b>  //沙盒存儲</b></p><

52、;p>  - (NSString *)filePath:(NSString *)string;//歸檔文件的保存路徑</p><p>  - (void)save:(NSString *)string;//保存數(shù)據(jù)到硬盤的方法</p><p>  + (id)manager;方法是一個便利構(gòu)造器方法,表明manager這個對象在程序運(yùn)行過程中一直存在,不被銷毀。</p>

53、<p>  - (NSString *)filePath:(NSString *)string;//歸檔文件的保存路徑</p><p>  - (void)save:(NSString *)string;//保存數(shù)據(jù)到硬盤的方法</p><p>  以上兩個方法實(shí)現(xiàn)將數(shù)據(jù)保存在本地,歸檔保存,實(shí)現(xiàn)數(shù)據(jù)持久化。</p><p>  (2)LDLBaseMo

54、del類,繼承自NSObject</p><p>  在數(shù)據(jù)處理時,很多時候網(wǎng)絡(luò)接口返回的數(shù)據(jù)都是字典類型,聲明一個字典的初始化以及便利構(gòu)造器方法,使得在要將數(shù)據(jù)存儲在字典里時直接調(diào)用LDLBaseModel這個類封裝的字典方法,避免使用一次就初始化一次,減少代碼冗余。封裝方法字典保存數(shù)據(jù),為之后網(wǎng)絡(luò)數(shù)據(jù)解析與封裝做鋪墊,并且有利于代碼的復(fù)用。</p><p>  @interface L

55、DLBaseModel : NSObject</p><p>  - (id)initWithDictionary:(NSDictionary *)dictionary;</p><p>  + (id)modelWithDictioanry:(NSDictionary *)dictionary;</p><p>  - (id)initWithDictionary

56、:(NSDictionary *)dictionary {</p><p>  if (self = [super init]) {</p><p><b>  }</b></p><p>  return self;</p><p><b>  }</b></p><p>

57、  + (id)modelWithDictioanry:(NSDictionary *)dictionary {</p><p>  return [[[[self class] alloc] initWithDictionary:dictionary] autorelease];</p><p><b>  }</b></p><p><

58、;b>  @end</b></p><p>  5.2.3應(yīng)用程序工具類</p><p>  iOS中提供了一個工具條類,通過它我們可以管理導(dǎo)航控制器,而每個導(dǎo)航控制器管理一個視圖控制器,所以我們一般用它來管理整個應(yīng)用程序的使用流程。本應(yīng)用軟件共有四大模塊,名稱分別為:推薦、分類、搜索、設(shè)置。一下代碼分別實(shí)現(xiàn)的是添加視圖控制器,并且設(shè)置tabBar為window的根視圖控

59、制器。為之后界面跳轉(zhuǎn)以及選擇提供方便。代碼如下:</p><p>  LDLRecommendTableViewController *recommendVC = [[LDLRecommendTableViewController alloc] initWithStyle:UITableViewStylePlain];</p><p>  UINavigationController *r

60、ecommendNC = [[UINavigationController alloc] initWithRootViewController:recommendVC];</p><p>  [recommendVC release];</p><p>  recommendNC.tabBarItem = [[UITabBarItem alloc]initWithTitle:@"

61、推薦" image:[[UIImage imageNamed:@"tabbtn_home"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] selectedImage:[[UIImage imageNamed:@"tabbtn_home_selected"] imageWithRenderingMode:UIImag

62、eRenderingModeAlwaysOriginal]];</p><p>  UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];</p><p>  layout.itemSize = CGSizeMake(90, 170);</p><p>  lay

63、out.sectionInset = UIEdgeInsetsMake(5, 10, 0, 10);</p><p>  LDLClassifyViewController *classifyVC = [[LDLClassifyViewController alloc] initWithCollectionViewLayout:layout];</p><p>  classifyVC.c

64、ollectionView.backgroundColor = [UIColor colorWithRed:220/ 255.0 green:220 / 255.0 blue:220 / 255.0 alpha:1];</p><p>  [layout release];</p><p>  UINavigationController *classifyNC = [[UINavigat

65、ionController alloc] initWithRootViewController:classifyVC];</p><p>  [classifyVC release];</p><p>  classifyNC.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"分類" image:[[UIImage i

66、mageNamed:@"tabbtn_cat"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] selectedImage:[[UIImage imageNamed:@"tabbtn_cat_selected"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal

67、]];</p><p>  LDLSearchViewController *searchVC = [[LDLSearchViewController alloc] init];</p><p>  UINavigationController *searchNC = [[UINavigationController alloc] initWithRootViewController:se

68、archVC];</p><p>  [searchVC release];</p><p>  searchNC.tabBarItem = [[UITabBarItem alloc]initWithTitle:@"搜索" image:[[UIImage imageNamed:@"tabbtn_search"] imageWithRenderingM

69、ode:UIImageRenderingModeAlwaysOriginal] selectedImage:[[UIImage imageNamed:@"tabbtn_search_selected"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];</p><p>  LDLSettingTableViewContro

70、ller *settingVC = [[LDLSettingTableViewController alloc] initWithStyle:UITableViewStyleGrouped];</p><p>  UINavigationController *settingNC = [[UINavigationController alloc] initWithRootViewController:settin

71、gVC];</p><p>  [settingVC release];</p><p>  settingNC.tabBarItem = [[UITabBarItem alloc]initWithTitle:@"設(shè)置" image:[[UIImage imageNamed:@"tabbtn_more"] imageWithRenderingMode

72、:UIImageRenderingModeAlwaysOriginal] selectedImage:[[UIImage imageNamed:@"tabbtn_more_selected"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];</p><p>  UITabBarController *tabBar = [

73、[UITabBarController alloc] init];</p><p>  tabBar.viewControllers = @[recommendNC, classifyNC, searchNC, settingNC];</p><p>  self.window.rootViewController = tabBar;</p><p>  [tabB

74、ar release]; </p><p>  5.2.4應(yīng)用程序功能實(shí)現(xiàn)</p><p>  iOS開發(fā)中常用到的消息傳遞或傳值有屬性傳值,通知等等[13]。通知是iOS開發(fā)框架中的一種設(shè)計模式,內(nèi)部的實(shí)現(xiàn)機(jī)制由Cocoa框架支持,通常用于控制視圖和模型的交互[14]。NSNotification對象非常簡單。它就是poster要提供給observer

75、的信息包裹。它的對象包含一個參數(shù),就是字典(可選參數(shù)),這個字典中存儲一些傳值過程中的信息。這就是通知實(shí)現(xiàn)的原理,也是界面之間功能實(shí)現(xiàn)傳值的原理。</p><p>  在該項(xiàng)目中就用到了兩種傳值方式。上述代碼是實(shí)現(xiàn)通知傳遞消息,在要監(jiān)聽的界面發(fā)送通知,在要接收的界面接收通知,這點(diǎn)在歷史記錄界面也有用到。示例代碼如下:</p><p>  - (void)viewDidLoad</p&

76、gt;<p><b>  {</b></p><p>  [super viewDidLoad];</p><p>  [self addHeader];</p><p>  [self _setupNavigationBar];</p><p>  [[LDLManager manager] packag

77、eModelWithType:ModelPackageTypeRefresh withURLString:@"http://tv.luckyamy.com/index/?app=jiji126&ver=1.1" withIdentifier:@"TuiJian"];</p><p>  //讓當(dāng)前視圖控制器成為通知的觀察者</p><p> 

78、 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(refreshUserInterface) name:kModelsDidFinishPackingNotification object:nil];</p><p>  [self.tableView registerClass:[LDLTableViewCell

79、 class] forCellReuseIdentifier:@"tableViewCell"];</p><p>  [self.tableView registerClass:[ScrollCell class] forCellReuseIdentifier:@"ScrollCell"];</p><p><b>  }</b&g

80、t;</p><p>  - (void)refreshUserInterface {</p><p>  self.dataSource = [[LDLManager manager] dataSource][@"TuiJian"];</p><p>  [self.tableView reloadData];</p><p

81、><b>  }</b></p><p>  5.2.5應(yīng)用程序界面實(shí)現(xiàn)</p><p><b>  (1)網(wǎng)絡(luò)數(shù)據(jù)處理</b></p><p>  應(yīng)用程序中通過響應(yīng)用戶點(diǎn)擊事件,并通過的封裝網(wǎng)絡(luò)請求方法實(shí)現(xiàn)網(wǎng)絡(luò)請求事件處理的復(fù)用,完成各個模塊的網(wǎng)絡(luò)請求。通過對點(diǎn)擊事件的處理,獲取點(diǎn)擊事件的參數(shù)拼接到網(wǎng)址之中,并且

82、對于網(wǎng)絡(luò)數(shù)據(jù)的請求處理進(jìn)行分類,對于數(shù)據(jù)接口返回的數(shù)據(jù),使用NSJSON解析并將數(shù)據(jù)保存在字典中。方便我們對于數(shù)據(jù)進(jìn)行層層處理,并且根據(jù)請求方式不同改變參數(shù)。示例代碼如下:</p><p>  NetworkManager *network = [NetworkManager managerWithDelegate:self];</p><p>  network.HTTPType = @

83、"GET";</p><p>  network.URLString = [NSString stringWithFormat:@"http://tv.luckyamy.com/videos/?app=jiji126&type=%@&id=%@&ver=1.1", model.category, model.ID];</p><p

84、>  [network startAcquire];</p><p>  對網(wǎng)絡(luò)數(shù)據(jù)解析,調(diào)用系統(tǒng)的NSJSONSerialization類來對數(shù)據(jù)進(jìn)行解析,得到的數(shù)據(jù)保存在字典中,在根據(jù)所用屬性遍歷字典完成對數(shù)據(jù)的封裝,按照封裝的Model類填充單元格,并展示在UI界面上。示例代碼如下:</p><p>  -(void)manager:(NetworkManager *)mana

85、ger didFinishLoadingWithInfo:(id)info {</p><p>  NSDictionary *jsonDic = [NSJSONSerialization JSONObjectWithData:info options:NSJSONReadingMutableContainers error:nil];</p><p>  NSLog(@"%@&

86、quot;, jsonDic);</p><p>  if ([jsonDic[@"episodes"] count] == 0) {</p><p>  for (NSDictionary *dic in jsonDic[@"recommends"]) {</p><p>  LDLMovie *model = [LDLMo

87、vie modelWithDictioanry:dic];</p><p>  [self.dataSource addObject:model];</p><p><b>  }</b></p><p> ?。?)上提加載下拉刷新數(shù)據(jù)</p><p>  應(yīng)用程序中通過上提加載或者下拉刷新而實(shí)現(xiàn)數(shù)據(jù)加載更多的功能,并通

88、過MJRefresh實(shí)現(xiàn)刷新事件,完成各個模塊的刷新事件的實(shí)現(xiàn)。通過對下拉界面或者上提界面判斷距離頭部或者底部的距離來響應(yīng)刷新事件,從而實(shí)現(xiàn)加載更多數(shù)據(jù)的功能。在使用中引入MJRefresh這個類到要添加刷新事件的類的頭文件中,在viewDidLoad方法中調(diào)用這個類方法即可。示例代碼如下:</p><p><b>  //下拉刷新</b></p><p>  - (

89、void)addHeader</p><p><b>  {</b></p><p>  __unsafe_unretained typeof(self) vc = self;</p><p>  // 添加下拉刷新頭部控件</p><p>  [self.tableView addHeaderWithCallback:

90、^{</p><p>  // 進(jìn)入刷新狀態(tài)就會回調(diào)這個Block</p><p>  [[LDLManager manager] packageModelWithType:ModelPackageTypeRefresh withURLString:@"http://tv.luckyamy.com/index/?app=jiji126&ver=1.1" with

91、Identifier:@"TuiJian"];</p><p>  // 模擬延遲加載數(shù)據(jù),因此2秒后才調(diào)用)</p><p>  dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{</p>

92、<p>  [self refreshUserInterface];</p><p><b>  // 結(jié)束刷新</b></p><p>  [vc.tableView headerEndRefreshing];</p><p><b>  });</b></p><p><b&g

93、t;  }];</b></p><p>  [self.tableView headerBeginRefreshing];</p><p><b>  }</b></p><p><b> ?。咸峒虞d</b></p><p>  - (void)addFooter</p>

94、<p><b>  {</b></p><p>  __unsafe_unretained typeof(self) vc = self;</p><p>  // 添加上拉刷新尾部控件</p><p>  [self.collectionView addFooterWithCallback:^{</p><p

95、>  // 進(jìn)入刷新狀態(tài)就會回調(diào)這個Block</p><p>  // 增加5條假數(shù)據(jù)</p><p>  self.flag = ModelPackageTypeLoadingMore;</p><p>  self.pageNumber++;</p><p>  [self handleAction:self.segment];&

96、lt;/p><p>  // 模擬延遲加載數(shù)據(jù),因此2秒后才調(diào)用)</p><p>  dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{</p><p>  [self refreshUserInter

97、face];</p><p><b>  // 結(jié)束刷新</b></p><p>  [vc.collectionView footerEndRefreshing];</p><p><b>  });</b></p><p><b>  }];</b></p>

98、<p><b>  }</b></p><p>  5.3應(yīng)用程序模塊實(shí)現(xiàn)</p><p>  該視頻播放器實(shí)現(xiàn)總共分為四個模塊,主要為主頁推薦,分類詳情,搜索更多以及設(shè)置四個界面,通過編碼的實(shí)現(xiàn)與調(diào)試,我們基本已實(shí)現(xiàn)各個界面的功能展示。具體界面截圖如圖5-3-1,5-3-2,5-3-3,5-3-4所示:</p><p>  5-3-

99、1 推薦詳情界面 </p><p>  推薦界面即程序運(yùn)行出來的主界面。主要進(jìn)行電視劇,電影等等視頻信息的分區(qū)展示。上部有一個輪播圖,主要展示最近熱播的電視劇或者電影信息。在整個界面上添加手勢功能,對每個分區(qū)可以進(jìn)行橫向滑動來查看更多的分區(qū)信息。例如電視劇分區(qū),可以向右滑動,查看最近熱播的電視劇信息。</p><p>  5-3-2 分類詳情界面</p><p> 

100、 分類界面就是下面工具欄的第二個按鈕控制的界面。這個界面主要展示以一個視頻信息為代表的不同分區(qū)的信息。用戶可以通過點(diǎn)擊實(shí)現(xiàn)每個分區(qū)詳情的查看,選擇自己喜歡的視頻信息進(jìn)行播放。</p><p>  5-3-3 搜索更多界面</p><p>  搜索界面是添加一個比較炫酷的第三方類來展示最近搜索詞。用戶可以通過點(diǎn)擊導(dǎo)航條上部的搜索框輸入查找內(nèi)容進(jìn)行搜索自己想要查找的視頻或者是通過點(diǎn)擊熱門搜索詞

101、來查找相關(guān)視頻信息。3D效果選擇球,用戶體驗(yàn)度高。</p><p>  3-2-1-4 設(shè)置界面</p><p>  設(shè)置界面是一個表視圖進(jìn)行展示設(shè)置信息。通過點(diǎn)擊不同的單元格,可以完成對于的操作。由于這款應(yīng)用在模擬器上完成,因此在意見反饋欄點(diǎn)擊時會彈窗警告。</p><p><b>  6系統(tǒng)測試</b></p><p&g

102、t;  至此我們的開發(fā)流程基本完成,就需要對我們的應(yīng)用程序進(jìn)行測試,來發(fā)現(xiàn)應(yīng)用程序中存在的問題,從而完善我們的應(yīng)用程序,使得用戶體驗(yàn)更加完美。</p><p>  系統(tǒng)運(yùn)行的流程如下:</p><p> ?、俪绦蜻\(yùn)行后,首先進(jìn)入的是主界面,即推薦界面,展示最近熱播的電視劇電影等等視頻信息。輪播圖展示最近熱門排行的電影電視劇。</p><p>  ②當(dāng)選擇推薦界面更多

103、按鈕,進(jìn)入具體分區(qū)的詳情界面。例如,點(diǎn)擊電視劇分區(qū)后“更多”按鈕,跳轉(zhuǎn)進(jìn)入詳情界面,使得我們對于分區(qū)信息的了解更加豐富。</p><p> ?、圻M(jìn)入詳情界面之后可以點(diǎn)擊每個詳細(xì)視頻信息,例如,電影界面點(diǎn)擊之后,進(jìn)入播放詳情界面,可以選擇視頻信息播放來源以及視頻信息相關(guān)推薦等等。</p><p>  ④點(diǎn)擊“詳情”按鈕,進(jìn)入視頻詳情界面,在此我們可以查看有關(guān)這個視頻信息的詳細(xì)介紹。</

104、p><p> ?、蔹c(diǎn)擊返回鍵后返回視頻詳情界面,選擇劇集和播放源,進(jìn)入播放界面。</p><p><b>  致謝</b></p><p>  本課題在選題以及進(jìn)行過程中都少不了指導(dǎo)老師邢靜宇老師的悉心指導(dǎo)。邢老師熱心的態(tài)度讓我對于畢業(yè)設(shè)計的迷茫消失了不少,她踏實(shí)的工作精神,也是我以后工作學(xué)習(xí)的榜樣。她的多次幫助,使得我對于處理困難事情的能力提升了

105、不少,在我內(nèi)心里真的非常感謝。在此,謹(jǐn)向邢老師表示誠摯的感謝。</p><p>  大學(xué)四年以來,有快樂也有艱辛。學(xué)院全體老師對我們孜孜不倦的教誨,感謝班級同學(xué)們對我的關(guān)懷與幫助,四年感情,不是親情,勝似親情。我們一起走過很多快樂的日子,這是我十幾年求學(xué)生涯中永遠(yuǎn)不會忘記的回憶。</p><p>  大學(xué)生活即將隨著論文的完成畫上圓滿的句號。感謝四年以來遇到的所有給我?guī)椭完P(guān)注的朋友們,因

106、為你們才有了今天成熟堅強(qiáng)足以應(yīng)對未來一切考驗(yàn)的我的成長。相信在未來的日子里,我一定會時時想起這些美好的日子,這也將會是我人生中一筆重要的財富。</p><p><b>  參考文獻(xiàn)</b></p><p>  Dave Mark,Jeff LaMarche. iPhone開發(fā)基礎(chǔ)教程[M]. 北京:人民郵電出版社. 2009.</p

107、><p>  Erica Sadun. iPhone開發(fā)秘籍(第2版)[M].北京: 人民郵電出版社. 2010.</p><p>  唐巧.  iOS開發(fā)進(jìn)階[M].北京: 電子工業(yè)出版社 .2015. </p><p>  Maurice Sharp,Erica Sadun,Rod St

108、ro.使用iOS開發(fā)完全上手[M]. 北京:清華大學(xué)出版社. 2014</p><p>  關(guān)東升.  iOS開發(fā)指南(從零基礎(chǔ)到APP Store上架第二版)[M]. 2014</p><p>  克納斯特,馬利克,達(dá)爾林普爾.Objective-C基礎(chǔ)教程[M]. 北京: 人民郵電出版社.2013.</p><p&g

109、t;  坂本一樹,古本智彥. Objective-C高級編程[M].北京: 人民郵電出版社.2013.</p><p>  劉威. Objective-C編程之道:iOS設(shè)計模式解析[M].北京: 人民郵電出版社.2011.</p><p>  張才千,郭毅鵬,李梓萌.iOS開發(fā)從入門到精通[M]. 北京: 北京希望電子出版社. 2014</p

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論