版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 畢業(yè)論文(設計)</b></p><p> 2015 屆 電子通信工程 專業(yè) 1113072 班級</p><p> 題 目 基于iOS平臺的視頻播放器的設計與實現(xiàn) </p><p> 2015 年 5 月 25 日</p><p><b&g
2、t; 摘 要</b></p><p> 現(xiàn)在,我們已經越來越進入一個信息技術,科學技術都日益發(fā)達的時代,在日常生活中,各式各樣的視頻播放器應用越來越普及,因此開發(fā)一款簡單方便的視頻播放器是非常迎合用戶需求的。本課題就是利用互聯(lián)網技術的傳播廣泛性來設計實現(xiàn)的一款手機客戶端的視頻播放器應用。本課題是基于iOS平臺下Objective-C開發(fā)語言以及C語言來實現(xiàn),利用系統(tǒng)提供的類以及第三方類庫實現(xiàn)數(shù)據(jù)
3、加載、視頻播放和數(shù)據(jù)處理,主要實現(xiàn)各類視頻信息的展示與播放功能。課題所用的數(shù)據(jù)接口信息來自第三方供應商,數(shù)據(jù)來源穩(wěn)定準確。通過測試,基本可以實現(xiàn)觀看視頻信息與搜索視頻信息的功能,應用程序簡單易操作,具有很好的用戶體驗度。</p><p> 手機客戶端;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課題預期的目標1</p><p> 2相關技術的介紹2</p><p><b> 2.1軟件環(huán)境2</b></p><p> 2.2核心技術介紹2</p><p> 2.2.1內存管理機制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)設計6</b></p><p><b> 4.1對象模型6</b></p><p> 4.2MVC模式7</p><p><b> 5系統(tǒng)實現(xiàn)9</b></p>&
10、lt;p> 5.1開發(fā)所用的關鍵類9</p><p> 5.2應用程序編碼實現(xiàn)12</p><p> 5.2.1應用程序工作流程12</p><p> 5.2.2應用程序管理類13</p><p> 5.2.3應用程序工具類14</p><p> 5.2.4應用程序功能實現(xiàn)15</p
11、><p> 5.2.5應用程序界面實現(xiàn)16</p><p> 5.3應用程序模塊實現(xiàn)18</p><p><b> 6系統(tǒng)測試23</b></p><p><b> 致謝24</b></p><p><b> 參考文獻24</b><
12、/p><p> 基于iOS平臺的視頻播放器的設計與實現(xiàn)</p><p><b> 1概論</b></p><p> 現(xiàn)在,我們已經越來越進入一個信息技術,科學技術都日益發(fā)達的時代,視頻應用已經日益普及。在我們生活中時時可見對于我們的日常生活來說必不可少的高科技產品,比如平板電腦,智能手機等等。幾乎在所有的城市當中,每天都可以看到手持手機專心致
13、志地欣賞視頻的人們,這在我們工作生活中有著切身體會。</p><p> 1.1課題研發(fā)的背景</p><p> 隨著如今智能手機的普及,視頻應用不僅僅只是在電腦上有很多人使用,越來越多的手機視頻應用出現(xiàn)在各種手機平臺上。據(jù)大致統(tǒng)計,視頻應用在豐富我們的日常生活占據(jù)重要組成部分,因此開發(fā)一款好用又簡單的應用對于開發(fā)商來說是一件很具有市場前景的不錯的選擇。</p><p
14、> 1.2課題研究的目的和意義</p><p> 本項目旨在給廣大消費者群體提供一個更方便快捷的網絡視頻平臺。提供對人們生活與娛樂的現(xiàn)狀的了解,我們明白這個項目的可行性。通過這個項目,人們可以看到自己想要的視頻信息,本項目可以通過分類來達到用戶的需求,用戶可以根據(jù)自己的喜好找到網絡視頻,通過網絡和人們普遍使用的手機等通訊工具來度過自己的娛樂和休閑時間。</p><p> 1.3
15、課題預期的目標</p><p> 本課題研究的主要內容是:利用Objective-C和一些第三方類去實現(xiàn)的一款應用軟件,通過對網絡進行數(shù)據(jù)解析、UI框架的搭建、第三方庫SDWebImage的使用等實現(xiàn)此應用程序的視頻信息的展示以及觀看等基本的功能。具體的功能如下:</p><p><b> 2相關技術的介紹</b></p><p> 就本
16、課題來說,我們所需要的軟件支持和技術支持是我們保證開發(fā)進度與完成力度的前提。因此對于本課題中所需要的開發(fā)技術說明分為如下兩部分:軟件環(huán)境、核心技術簡介。</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> 內存容量: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> (3)開發(fā)環(huán)境</b></p><p> 1.開發(fā)該軟件使用的開發(fā)工具為Xcode6.0版本。</p><p> 2. 開發(fā)該軟件使用的開發(fā)語言為Objective-C,C語言。</p><p><b> 2.2核心技術介紹</b></p><p>
19、本課題是基于iOS技術利用OC開發(fā)語言實現(xiàn)的,使用Xcode編程軟件進行開發(fā)的,因此我們在進行開發(fā)之前需要了解OC中內存管理機制、iOS發(fā)展歷程、OC語言以及開發(fā)工具Xcode等等。</p><p> 2.2.1內存管理機制</p><p> 內存管理是程序設計中常用的資源管理的一部分[8]。每個計算機系統(tǒng)可供程序使用的資源都是有限的,這些資源包括內存、打開文件數(shù)量以及網絡連接等。iO
20、S系統(tǒng)為每個應用程分配30MB的內存,超過20MB會收到內存警告,如果超過30MB,系統(tǒng)將會終止你的應用程序,也就是我們熟悉的閃退[2]。因此我們需要時時的對應用程序進行內存管理。</p><p> 在Objective-C中,對象不斷地被其他對象創(chuàng)建、使用和銷毀,為了保證程序不產生額外的內存開銷,當對象不再需要以后,應當被立即銷毀,防止內存泄露[8]。Objective-C中有一套很完善的內存管理機制,我簡單
21、地將它歸納為以下幾條:</p><p> 1.對你自己擁有的對象負責。你只能釋放你擁有的對象。</p><p> 2.凡是你通過retain,alloc,copy等手段獲得了所有權的對象,都必須在你不再使用它的時候,由你來調用release,autorelease等手段來釋放對它的所有權。</p><p> 3.在一定的代碼段內,對同一個對象所作的copy,a
22、lloc和retain的操作次數(shù)應當與release和autorelease操作次數(shù)相同[12]。</p><p> 4.可以在類的dealloc方法中釋放你所占有的實例變量。</p><p><b> 2.2.2oc語言</b></p><p> Objective-C是一門面向對象的編程語言[7]。Objective-C語言具有三大特
23、征:封裝,繼承和多態(tài)[3]。</p><p> 封裝:隱藏內部實現(xiàn),穩(wěn)定外部接口。</p><p> 繼承:子類可以直接復用父類中的成員。</p><p> 多態(tài):不同對象對同一消息的不同響應。</p><p><b> 3需求分析</b></p><p> 3.1軟件功能需求分析<
24、;/p><p> 在開發(fā)進行之前,我們需要了解我們開發(fā)的項目需要實現(xiàn)的功能模塊。就本課題來說,視頻播放類的APP,最重要的就是視頻信息的展示、搜索與播放。下面就單個模塊對整個系統(tǒng)實現(xiàn)進行分析。</p><p> 3.1.1視頻信息搜索</p><p> 視頻信息搜索是視頻播放器的功能之一,它主要使用了官方提供的一個系統(tǒng)類,并通過對網址url進行拼接參數(shù)實現(xiàn)搜索結果
25、,進行界面展示。</p><p> 用戶可以在搜索欄上輸入自己想要查詢的視頻信息名稱,應用程序把用戶輸入的字符作為參數(shù)通過拼接網址傳給服務器,服務器會返回一個json類型的數(shù)據(jù)字典,這些數(shù)據(jù)是通過NSJSON解析處理后,用一個collectionView集合視圖來顯示返回來的數(shù)據(jù)并展示在UI界面之上的。</p><p> 3.1.2視頻信息展示</p><p>
26、 視頻信息展示是視頻播放器的主要功能,它主要是根據(jù)網絡接口數(shù)據(jù)分析解析并通過UI界面布局之后進行界面展示。</p><p> 程序啟動之后,展示在界面上的就是推薦界面的視頻信息,用戶可以通過點擊進入視頻模塊分區(qū)界面。并且根據(jù)自己喜好選擇自己喜歡的視頻信息,進行播放。信息展示主要是通過接口請求到數(shù)據(jù)進行JSON解析,并將數(shù)據(jù)保存在字典中,啟動程序后,就會進行網絡數(shù)據(jù)請求,回傳到的數(shù)據(jù)展示在UI界面就形成了我們看
27、到的視頻信息。</p><p> 3.1.3視頻信息播放</p><p> 該視頻應用是在webView上面進行在線播放的APP。</p><p> 用戶點擊視頻信息名稱,應用程序把用戶點擊事件獲得的參數(shù)拼接的網址傳給服務器,服務器直接訪問對應的播放來源的網站進行在線播放。在程序中每個視頻信息都可以通過點擊事件來響應視頻播放的方法。視頻播放主要是通過接口數(shù)據(jù)得
28、到網址信息,并且選擇播放來源時拼接不同的參數(shù)來實現(xiàn)在不同網站上播放同一個視頻信息的功能。</p><p> 3.2軟件可行性分析</p><p> 當前社會是一個信息化的社會,信息的傳播無處不在,而且蘋果產品的普及也給該系統(tǒng)提供了很好的推廣前景。就消費者而言,蘋果手機已成為各種消費者群體爭先追捧的智能產品。它以及華麗的外形,超高的用戶體驗度一直強勢地占領市場。以此,就社會性而言,該視頻
29、應用是非常合時宜的。</p><p> 此系統(tǒng)硬件、軟件要求不高,目前市場上的一般計算機硬件資源(例如Mac mini)均能滿足系統(tǒng)開發(fā)要求,其中開發(fā)工具為Xcode。系統(tǒng)技術采用iOS開發(fā)技術,OC開發(fā)語言,擴展性強。以上技術足以完成本系統(tǒng)的開發(fā)與設計。</p><p> 本系統(tǒng)的開發(fā)完全可以利用現(xiàn)有硬件條件,不需增加新的硬件設備。開發(fā)所涉及的軟件使用的均為免費版本,開發(fā)后的應用免費
30、提供給用戶,讓用戶能輕松享受娛樂時光。系統(tǒng)開發(fā)基本無需其他開銷,費用支出可忽略不計,所以本軟件具有極高的經濟可行性。</p><p><b> 4系統(tǒng)設計</b></p><p> 在完成了對課題的所需技術介紹以及需求分析之后,我們就要對系統(tǒng)實現(xiàn)所需的各種具體類與方法進行設計。在iOS開發(fā)過程中,我們一般使用MVC框架對我們的代碼模塊進行管理,保證類與類之間不沖突
31、,方法與方法之間可復用,代碼不冗余。對于本課題而言,我們主要通過對使用對象模型的分析設計,MVC模式的設計來完成系統(tǒng)的設計綱要。</p><p><b> 4.1對象模型</b></p><p> 本課題設計的視頻播放器應用程序主要由四大對象UIApplicationMain ,UIApplicationDelegate,UIWindow ,U
32、IViewController組成,具體的介紹及關系圖如圖4-1所示:</p><p> ?。?)UIApplicationMain </p><p> 在main.m的main函數(shù)中執(zhí)行了UIApplicationMain這個方法,這是iOS程序的入口點[9]。</p><p> (2)UIApplicationDelegate</p>
33、<p> 在開發(fā)過程中,UIApplication是一個非常重要的全局對象。但在實際編程中我們并不直接和UIApplication對象打交道,而是和其代理打交道,它的代理必須遵循UIApplicationDelegate協(xié)議,代理提供了相關的生命周期方法來處理應用程序的系統(tǒng)事件[9]。</p><p> ?。?) UIWindow </p><p> U
34、IWindow 是一種特殊的UIView,通常在一個app中只會有一個 UIWindow ,但可以手動創(chuàng)建多個 UIWindow[10] 。 UIWindow 的主要作用是提供一個區(qū)域來顯示視圖;將事件分發(fā)給視圖控制器;與UIViewController協(xié)調工作,方便完成設備方向旋轉的支持。</p><p> ?。?)UIViewControl
35、ler</p><p> UIViewController屬于MVC模型中的C(Controller),說的具體點是它是一個視圖控制器,管理著一個視圖(UIView)[10]。</p><p> 圖4-1 四大對象關系圖</p><p><b> 4.2MVC模式</b></p><p> 系統(tǒng)中主要使用MVC模
36、式,MVC模式是Apple iOS開發(fā)需要遵循的設計模式[11]。它把一個頁面分為三部分。M代表Model,也就是模型,通常是一些模型類(例如LDLModel類),用于存儲數(shù)據(jù)。View代表視圖,用于顯示數(shù)據(jù)。C代表控制器(Controller),用于控制M和V的同步和協(xié)調。當數(shù)據(jù)改變的時候,要讓視圖顯示更新的數(shù)據(jù)。一個應用程序通常是多個這樣的頁面組成。它的優(yōu)點是:</p><p><b> ?。?)低
37、耦合性。</b></p><p><b> ?。?)重用性高。</b></p><p><b> ?。?)可維護性好。</b></p><p> 在本系統(tǒng)中就應用了MVC設計模式對代碼進行封裝和分離,具體MVC結構模型圖如圖4-2所示:</p><p> 圖 4-2 MVC模型關系圖
38、</p><p><b> 5系統(tǒng)實現(xiàn)</b></p><p> 通過對系統(tǒng)實現(xiàn)需求的設計,我們大致了解我們開發(fā)所用的類、框架與模型。就進入了真正的系統(tǒng)實現(xiàn)模塊,首先我們要了解在開發(fā)過程中我們所用到的類與類之間的關系,方便開發(fā)。然后根據(jù)我們需要實現(xiàn)的功能進行代碼的封裝,從而實現(xiàn)代碼的復用與模塊化。</p><p> 5.1開發(fā)所用的關鍵類
39、</p><p> UI即User Interface(用戶界面)的簡稱。UI設計是指對軟件的人機交互、操作邏輯、界面美觀的完整設計。UI處于iOS四層結構的最上層(Cocoa Touch),并且放置在UIKit框架下,它跟用戶的操作息息相關,所以包含的控件也特別多[12]。子類與父類之間繼承關系如圖5-1-1所示:</p><p> 圖 5-1-1 子類與父類之間繼承圖</p&
40、gt;<p> 在本課題的程序實現(xiàn)里面主要用到的控件大致如下:</p><p><b> ?。?)顯示類</b></p><p> ?、賃ILabel 展示信息,在應用程序中主要用于展示視頻信息等等。</p><p> ②UIButton 按鈕,在應用程序中只要用于相應用戶點擊時間,比如點擊“更多”按鈕進入詳情界面,點擊“歷史
41、記錄”按鈕進入觀看歷史記錄界面。</p><p> ?、踀IAlertView 警告視圖,在應用程序中主要用于展示刪除的彈窗警告,給用戶更好的體驗,選擇權在用戶手中。</p><p> ?、躑IView 視圖,在應用程序中主要用于展示視頻信息,并在視圖上進行相應的操作。</p><p> ?、軺INavigationBar 導航條,在界面上展示導航條的位置,方便我們
42、根據(jù)導航控制器來控制界面跳轉及操作。</p><p> ?、轚ITableView 表視圖,在應用程序中主要在單元格上展示視頻信息,設置信息等等。</p><p> ?、遀ICollectionView 集合視圖,在應用程序的推薦界面和分類界面都是集合視圖來展示分區(qū)信息。</p><p> ?、郩IImageView 圖片視圖,在應用程序中有圖片的展示信息都是加載在
43、UIImageView視圖之上的。</p><p> ?、酻IScrollView 滾動視圖,在應用程序主界面輪播圖是使用UIScrollView和UIPageControl控件實現(xiàn)的。</p><p> ?、釻IWebView 網頁視圖,在應用程序中視頻播放界面是UIWebView加載實現(xiàn)的。</p><p><b> (2)功能類使用</b&g
44、t;</p><p> ①NSDate 處理日期和時間,在應用程序中顯示時間和刷新時間。</p><p> ②NSTimer 定時器,在應用程序中添加動畫效果開始時間,添加定時器。</p><p> ?、跱SURL 網絡路徑,在應用程序中封裝網絡路徑。</p><p> ?、躈SURLRequest 網絡請求,在應用程序中設置一些網絡的請
45、求信息。</p><p> ?、軳SError 在應用程序中使用到是用來接收網絡請求中的錯誤信息。</p><p> ?、轓SData 數(shù)據(jù),在應用程序中把一些信息寫入到文件里或發(fā)送到網絡上,我們需要把這些數(shù)據(jù)轉換下,變成純粹的0、1字符流使用到NSData類。</p><p> ?、逳SNotification 通知,在應用程序中用于界面?zhèn)鬟f信息,在播放界面和歷
46、史記錄界面有使用到通知的發(fā)送和接收。</p><p> ?、郚SJSONSerialization 數(shù)據(jù)解析,在應用程序中主要用于解析網絡數(shù)據(jù),主要分為XML和JSON解析,在應用程序中主要用到JSON解析數(shù)據(jù)。</p><p> ?、酦SOperationQueue 隊列,在應用程序中主要用于對對象進行隊列操作。</p><p> 5.2應用程序編碼實現(xiàn)<
47、/p><p> 應用程序是我們通過編碼實現(xiàn)UI界面展示,響應并處理用戶事件的最重要的一部分,幾乎所有的功能實現(xiàn)都是基于代碼的書寫來完成的。下面就應用程序的工作流程、編碼實現(xiàn)進行介紹。</p><p> 5.2.1應用程序工作流程</p><p> 應用程序是基于iOS技術開發(fā)實現(xiàn)的,根據(jù)需求,我們需要設計包含主界面以及很多的子類界面。主界面有:推薦界面、分類界面、
48、搜索界面、設置界面。子類界面有分類詳情界面、劇集選擇界面、播放界面、歷史記錄界面等等。主界面之間實現(xiàn)用戶對視頻信息的選擇與展示,并響應用戶點擊事件。例如:用戶點擊每個集合視圖的item時可以跳轉到模塊分類詳情界面;點擊模塊分類詳情界面會跳轉到視頻信息詳情界面,并選擇劇集實現(xiàn)播放視頻的功能。主頁面主要負責整個應用程序的視頻信息,通過添加手勢來實現(xiàn)與下級界面的交互,它的信息播放以及視頻信息詳情展示都由下級頁面來完成。整個界面看起來美觀簡潔,
49、使得用戶使用起來一目了然。而且通過界面代碼實現(xiàn)的復用,很好的降低代碼冗余,使得程序運行更加流暢,占據(jù)內存空間更小。</p><p> 根據(jù)上面的詳細的介紹,我們大概有所了解客戶端的整的整個流程??蛻舳说牧鞒虉D如4-2-1圖所示:</p><p> 圖 4-2-1 視頻播放流程圖</p><p> 5.2.2應用程序管理類</p><p>
50、; (1)管理類 LDLManager</p><p> 在程序運行中很多地方要使用到網絡數(shù)據(jù)處理,通過實現(xiàn)一次代碼書寫多處模塊復用的功能,這就是OC語言封裝的概念的具體體現(xiàn)。下面的代碼就是實現(xiàn)文件歸檔保存數(shù)據(jù)的方法的聲明。具體在需要用到將數(shù)據(jù)保存在本地的模塊調用這個方法即可。</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;方法是一個便利構造器方法,表明manager這個對象在程序運行過程中一直存在,不被銷毀。</p>
53、<p> - (NSString *)filePath:(NSString *)string;//歸檔文件的保存路徑</p><p> - (void)save:(NSString *)string;//保存數(shù)據(jù)到硬盤的方法</p><p> 以上兩個方法實現(xiàn)將數(shù)據(jù)保存在本地,歸檔保存,實現(xiàn)數(shù)據(jù)持久化。</p><p> (2)LDLBaseMo
54、del類,繼承自NSObject</p><p> 在數(shù)據(jù)處理時,很多時候網絡接口返回的數(shù)據(jù)都是字典類型,聲明一個字典的初始化以及便利構造器方法,使得在要將數(shù)據(jù)存儲在字典里時直接調用LDLBaseModel這個類封裝的字典方法,避免使用一次就初始化一次,減少代碼冗余。封裝方法字典保存數(shù)據(jù),為之后網絡數(shù)據(jù)解析與封裝做鋪墊,并且有利于代碼的復用。</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應用程序工具類</p><p> iOS中提供了一個工具條類,通過它我們可以管理導航控制器,而每個導航控制器管理一個視圖控制器,所以我們一般用它來管理整個應用程序的使用流程。本應用軟件共有四大模塊,名稱分別為:推薦、分類、搜索、設置。一下代碼分別實現(xiàn)的是添加視圖控制器,并且設置tabBar為window的根視圖控
59、制器。為之后界面跳轉以及選擇提供方便。代碼如下:</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:@"設置" 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應用程序功能實現(xiàn)</p><p> iOS開發(fā)中常用到的消息傳遞或傳值有屬性傳值,通知等等[13]。通知是iOS開發(fā)框架中的一種設計模式,內部的實現(xiàn)機制由Cocoa框架支持,通常用于控制視圖和模型的交互[14]。NSNotification對象非常簡單。它就是poster要提供給observer
75、的信息包裹。它的對象包含一個參數(shù),就是字典(可選參數(shù)),這個字典中存儲一些傳值過程中的信息。這就是通知實現(xiàn)的原理,也是界面之間功能實現(xiàn)傳值的原理。</p><p> 在該項目中就用到了兩種傳值方式。上述代碼是實現(xiàn)通知傳遞消息,在要監(jiān)聽的界面發(fā)送通知,在要接收的界面接收通知,這點在歷史記錄界面也有用到。示例代碼如下:</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> //讓當前視圖控制器成為通知的觀察者</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應用程序界面實現(xiàn)</p><p><b> ?。?)網絡數(shù)據(jù)處理</b></p><p> 應用程序中通過響應用戶點擊事件,并通過的封裝網絡請求方法實現(xiàn)網絡請求事件處理的復用,完成各個模塊的網絡請求。通過對點擊事件的處理,獲取點擊事件的參數(shù)拼接到網址之中,并且
82、對于網絡數(shù)據(jù)的請求處理進行分類,對于數(shù)據(jù)接口返回的數(shù)據(jù),使用NSJSON解析并將數(shù)據(jù)保存在字典中。方便我們對于數(shù)據(jù)進行層層處理,并且根據(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> 對網絡數(shù)據(jù)解析,調用系統(tǒng)的NSJSONSerialization類來對數(shù)據(jù)進行解析,得到的數(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> 應用程序中通過上提加載或者下拉刷新而實現(xiàn)數(shù)據(jù)加載更多的功能,并通
88、過MJRefresh實現(xiàn)刷新事件,完成各個模塊的刷新事件的實現(xiàn)。通過對下拉界面或者上提界面判斷距離頭部或者底部的距離來響應刷新事件,從而實現(xiàn)加載更多數(shù)據(jù)的功能。在使用中引入MJRefresh這個類到要添加刷新事件的類的頭文件中,在viewDidLoad方法中調用這個類方法即可。示例代碼如下:</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> // 進入刷新狀態(tài)就會回調這個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秒后才調用)</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> // 結束刷新</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> //上提加載</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、> // 進入刷新狀態(tài)就會回調這個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秒后才調用)</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> // 結束刷新</b></p><p> [vc.collectionView footerEndRefreshing];</p><p><b> });</b></p><p><b> }];</b></p>
98、<p><b> }</b></p><p> 5.3應用程序模塊實現(xiàn)</p><p> 該視頻播放器實現(xiàn)總共分為四個模塊,主要為主頁推薦,分類詳情,搜索更多以及設置四個界面,通過編碼的實現(xiàn)與調試,我們基本已實現(xiàn)各個界面的功能展示。具體界面截圖如圖5-3-1,5-3-2,5-3-3,5-3-4所示:</p><p> 5-3-
99、1 推薦詳情界面 </p><p> 推薦界面即程序運行出來的主界面。主要進行電視劇,電影等等視頻信息的分區(qū)展示。上部有一個輪播圖,主要展示最近熱播的電視劇或者電影信息。在整個界面上添加手勢功能,對每個分區(qū)可以進行橫向滑動來查看更多的分區(qū)信息。例如電視劇分區(qū),可以向右滑動,查看最近熱播的電視劇信息。</p><p> 5-3-2 分類詳情界面</p><p>
100、 分類界面就是下面工具欄的第二個按鈕控制的界面。這個界面主要展示以一個視頻信息為代表的不同分區(qū)的信息。用戶可以通過點擊實現(xiàn)每個分區(qū)詳情的查看,選擇自己喜歡的視頻信息進行播放。</p><p> 5-3-3 搜索更多界面</p><p> 搜索界面是添加一個比較炫酷的第三方類來展示最近搜索詞。用戶可以通過點擊導航條上部的搜索框輸入查找內容進行搜索自己想要查找的視頻或者是通過點擊熱門搜索詞
101、來查找相關視頻信息。3D效果選擇球,用戶體驗度高。</p><p> 3-2-1-4 設置界面</p><p> 設置界面是一個表視圖進行展示設置信息。通過點擊不同的單元格,可以完成對于的操作。由于這款應用在模擬器上完成,因此在意見反饋欄點擊時會彈窗警告。</p><p><b> 6系統(tǒng)測試</b></p><p&g
102、t; 至此我們的開發(fā)流程基本完成,就需要對我們的應用程序進行測試,來發(fā)現(xiàn)應用程序中存在的問題,從而完善我們的應用程序,使得用戶體驗更加完美。</p><p> 系統(tǒng)運行的流程如下:</p><p> ?、俪绦蜻\行后,首先進入的是主界面,即推薦界面,展示最近熱播的電視劇電影等等視頻信息。輪播圖展示最近熱門排行的電影電視劇。</p><p> ?、诋斶x擇推薦界面更多
103、按鈕,進入具體分區(qū)的詳情界面。例如,點擊電視劇分區(qū)后“更多”按鈕,跳轉進入詳情界面,使得我們對于分區(qū)信息的了解更加豐富。</p><p> ③進入詳情界面之后可以點擊每個詳細視頻信息,例如,電影界面點擊之后,進入播放詳情界面,可以選擇視頻信息播放來源以及視頻信息相關推薦等等。</p><p> ?、茳c擊“詳情”按鈕,進入視頻詳情界面,在此我們可以查看有關這個視頻信息的詳細介紹。</
104、p><p> ?、蔹c擊返回鍵后返回視頻詳情界面,選擇劇集和播放源,進入播放界面。</p><p><b> 致謝</b></p><p> 本課題在選題以及進行過程中都少不了指導老師邢靜宇老師的悉心指導。邢老師熱心的態(tài)度讓我對于畢業(yè)設計的迷茫消失了不少,她踏實的工作精神,也是我以后工作學習的榜樣。她的多次幫助,使得我對于處理困難事情的能力提升了
105、不少,在我內心里真的非常感謝。在此,謹向邢老師表示誠摯的感謝。</p><p> 大學四年以來,有快樂也有艱辛。學院全體老師對我們孜孜不倦的教誨,感謝班級同學們對我的關懷與幫助,四年感情,不是親情,勝似親情。我們一起走過很多快樂的日子,這是我十幾年求學生涯中永遠不會忘記的回憶。</p><p> 大學生活即將隨著論文的完成畫上圓滿的句號。感謝四年以來遇到的所有給我?guī)椭完P注的朋友們,因
106、為你們才有了今天成熟堅強足以應對未來一切考驗的我的成長。相信在未來的日子里,我一定會時時想起這些美好的日子,這也將會是我人生中一筆重要的財富。</p><p><b> 參考文獻</b></p><p> Dave Mark,Jeff LaMarche. iPhone開發(fā)基礎教程[M]. 北京:人民郵電出版社. 2009.</p
107、><p> Erica Sadun. iPhone開發(fā)秘籍(第2版)[M].北京: 人民郵電出版社. 2010.</p><p> 唐巧. iOS開發(fā)進階[M].北京: 電子工業(yè)出版社 .2015. </p><p> Maurice Sharp,Erica Sadun,Rod St
108、ro.使用iOS開發(fā)完全上手[M]. 北京:清華大學出版社. 2014</p><p> 關東升. iOS開發(fā)指南(從零基礎到APP Store上架第二版)[M]. 2014</p><p> 克納斯特,馬利克,達爾林普爾.Objective-C基礎教程[M]. 北京: 人民郵電出版社.2013.</p><p&g
109、t; 坂本一樹,古本智彥. Objective-C高級編程[M].北京: 人民郵電出版社.2013.</p><p> 劉威. Objective-C編程之道:iOS設計模式解析[M].北京: 人民郵電出版社.2011.</p><p> 張才千,郭毅鵬,李梓萌.iOS開發(fā)從入門到精通[M]. 北京: 北京希望電子出版社. 2014</p
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于iOS平臺播放器的設計與實現(xiàn).pdf
- ios音樂播放器畢業(yè)設計
- 視頻播放器畢業(yè)設計
- 畢業(yè)設計--基于android平臺的音樂播放器的設計與實現(xiàn)
- ios_音樂播放器畢業(yè)設計
- 基于iPhone平臺的視頻播放器的設計與實現(xiàn).pdf
- 畢業(yè)設計----播放器的設計與實現(xiàn)
- 基于Android平臺的視頻播放器的設計與實現(xiàn).pdf
- 基于ios平臺的音樂播放器
- 基于ios平臺的實時視頻流播放系統(tǒng)畢業(yè)設計
- 基于android的視頻播放器的設計與實現(xiàn)
- vc視頻播放器的設計與實現(xiàn)
- 畢業(yè)設計基于android平臺的音樂播放器設計與開發(fā)
- 基于UPnP的Android平臺視頻播放器的設計與實現(xiàn).pdf
- Windows Mobile平臺的視頻播放器設計與實現(xiàn).pdf
- 基于android平臺的視頻播放器設計論文
- 媒體播放器的設計與實現(xiàn)畢業(yè)設計
- 畢業(yè)設計基于android手機平臺的音樂播放器
- 基于安卓平臺的音樂播放器設計與開發(fā)-畢業(yè)設計
- 基于android平臺的視頻播放器設計文獻綜述
評論
0/150
提交評論