2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩30頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  安徽工業(yè)大學(xué)</b></p><p>  畢業(yè)設(shè)計(jì)(論文)說(shuō)明書(shū)</p><p><b>  安徽工業(yè)大學(xué)</b></p><p>  畢業(yè)設(shè)計(jì)(論文)任務(wù)書(shū)</p><p>  畢業(yè)設(shè)計(jì)(論文)的主要內(nèi)容及要求:</p><p>  對(duì)社交AP

2、P進(jìn)行需求的分析</p><p>  熟練掌握一門(mén)編程語(yǔ)言</p><p>  設(shè)計(jì)主要實(shí)現(xiàn)以下功能</p><p>  1.用戶(hù)定制鬧鈴,其他用戶(hù)通過(guò)網(wǎng)絡(luò)電話(huà)的方式叫醒該用戶(hù);</p><p>  2.用戶(hù)可以發(fā)送圖文動(dòng)態(tài)到社區(qū),其他用戶(hù)可以查看其動(dòng)態(tài),并點(diǎn)贊、評(píng)論;</p><p>  3.界面美觀大方,簡(jiǎn)單易操作

3、。</p><p>  四、完成與設(shè)計(jì)有關(guān)的外文文獻(xiàn)翻譯,譯文約3000字。</p><p>  五、完成畢業(yè)設(shè)計(jì)說(shuō)明書(shū)(畢業(yè)論文)一份。</p><p>  指導(dǎo)教師簽字: </p><p><b>  摘要</b></p><p>  在當(dāng)代移動(dòng)互聯(lián)的大環(huán)境下,

4、手機(jī)已經(jīng)成為人們生活中不可或缺的一部分。在人與人之間的交流過(guò)程中,社交app憑借著方便快捷,不受地域、空間、時(shí)間限制等優(yōu)點(diǎn)更是在當(dāng)前的社會(huì)下大行其道。無(wú)疑在這樣的環(huán)境下,社交APP有著無(wú)比廣闊的前景。</p><p>  本文研究的是一款基于iOS平臺(tái)的應(yīng)用軟件,采用Objective-C為設(shè)計(jì)語(yǔ)言,通過(guò)iPhone為硬件,實(shí)現(xiàn)網(wǎng)絡(luò)電話(huà),溝通互動(dòng)交流,用戶(hù)留言等功能。該應(yīng)用基于iOS 9進(jìn)行適配,主要利用coco

5、a框架,在iPhone上實(shí)現(xiàn)了結(jié)合動(dòng)畫(huà)等基本功能的社交應(yīng)用。網(wǎng)絡(luò)電話(huà)主要通過(guò)Voice over IP服務(wù)來(lái)實(shí)現(xiàn),而Voice over IP服務(wù)是通過(guò)一個(gè)開(kāi)放源代碼的協(xié)議棧PJSIP來(lái)完成的。APP中使用了大量的自定義控件來(lái)滿(mǎn)足產(chǎn)品功能以及視覺(jué)效果上的需求,同時(shí)使用UITableView控件充分展示了后臺(tái)提供的數(shù)據(jù),實(shí)現(xiàn)了用戶(hù)的登錄與注冊(cè),定制鬧鈴,發(fā)表動(dòng)態(tài)以及用戶(hù)之間通話(huà)等功能。</p><p>  本軟件作

6、為一個(gè)社交、工具類(lèi)軟件,缺少了一個(gè)十分重要的功能:即時(shí)通訊。下一步的計(jì)劃是添加即時(shí)通訊功能,方便用戶(hù)之間的交流,同時(shí)也是增加用戶(hù)量的一種方式。另外,再添加視頻、音頻的錄制和播放,以多媒體的方式來(lái)吸引用戶(hù),增加用戶(hù)粘性。</p><p>  關(guān)鍵詞:iPhone;社交APP;iOS;MVC;鬧鈴;Objective-C</p><p><b>  Abstract</b>

7、;</p><p>  In the contemporary environment of mobile Internet, mobile phones have become an indispensable part of people's lives. In the process of communication between people, the social APP with conve

8、nient, without geographical, space, time limit, etc. it is more popular in the current society. Certainly in this environment, social APP has a very broad prospects.</p><p>  This paper is based on a platfor

9、m iOS applications using Objective-C language for the design, through the iPhone hardware, network telephone communication interaction, user comments and other features. This application is based iOS 9 to be adapted, the

10、 main use of cocoa framework, the iPhone realized the combination of animation and other basic functions of social applications. Internet telephony mainly through Voice over IP service and Voice over IP service is throug

11、h an open source stack PJSIP</p><p>  As a social, tools software, the APP missing a very important function:IM. Next plan is to add the IM function to facilitate communication between users, but also a way

12、to increase the amount of users. In addition, add video, audio recording and playback function, to attract users and increase user stickiness.</p><p>  【Key words】 iPhone;Social APP;iOS;MVC;Alarm;Objective-C

13、</p><p><b>  目錄</b></p><p><b>  1. 緒論1</b></p><p>  1.1 研究背景1</p><p>  1.2 研究的目的和意義1</p><p>  1.3國(guó)內(nèi)外研究現(xiàn)狀2</p><p> 

14、 1.4 本系統(tǒng)主要內(nèi)容以及結(jié)構(gòu)2</p><p>  2. 開(kāi)發(fā)環(huán)境及關(guān)鍵技術(shù)4</p><p>  2.1 Mac OS X 開(kāi)發(fā)平臺(tái)4</p><p>  2.2 Objective-C4</p><p>  2.3 iOS系統(tǒng)的優(yōu)勢(shì)5</p><p>  2.3.1 iOS系統(tǒng)5</p>

15、<p>  2.3.2 軟件與硬件整合度高5</p><p>  2.3.3 安全性強(qiáng)5</p><p>  2.4 X-code5</p><p>  2.5 PJSIP6</p><p>  3. 需求分析與概要設(shè)計(jì)7</p><p>  3.1 需求分析7</p><

16、p>  3.1.1 技術(shù)可行性分析7</p><p>  3.1.2 經(jīng)濟(jì)可行性分析7</p><p>  3.2 概要設(shè)計(jì)7</p><p>  4. 社交app詳細(xì)設(shè)計(jì)10</p><p>  4.1 工具類(lèi)設(shè)計(jì)10</p><p>  4.2 網(wǎng)絡(luò)請(qǐng)求11</p><p>

17、;  4.3 PJSIP設(shè)計(jì)12</p><p>  4.4 模塊功能設(shè)計(jì)16</p><p>  4.4.1 登錄注冊(cè)模塊16</p><p>  4.4.2 鬧鈴模塊16</p><p>  4.4.3 隨機(jī)呼叫模塊18</p><p>  4.4.4 動(dòng)態(tài)模塊19</p><p&g

18、t;  4.4.5 個(gè)人中心模塊設(shè)計(jì)22</p><p><b>  5.總結(jié)24</b></p><p>  5.1 論文總結(jié)24</p><p><b>  5.2 展望24</b></p><p><b>  參考文獻(xiàn)25</b></p><

19、p><b>  致 謝26</b></p><p><b>  1. 緒論</b></p><p><b>  1.1 研究背景</b></p><p>  如今移動(dòng)開(kāi)發(fā)產(chǎn)業(yè)最主流的開(kāi)發(fā)平臺(tái)就是iOS(iPhoneOS)和Android。Android是基于Linux的開(kāi)放源代碼的操作系統(tǒng),

20、其最大的優(yōu)點(diǎn)就是開(kāi)放、自由。因此,Android在移動(dòng)開(kāi)發(fā)領(lǐng)域始終保持占有一半以上的市場(chǎng)份額。而iOS的優(yōu)點(diǎn)也相當(dāng)明顯:流暢的操作體驗(yàn),優(yōu)美的UI界面,應(yīng)用程序通過(guò)AppStore嚴(yán)格把控,只有通過(guò)官方檢測(cè)的APP才能被用戶(hù)安裝到手機(jī)上,這也保證了iOS最重要的優(yōu)點(diǎn),安全性高。這是其他移動(dòng)端操作系統(tǒng)無(wú)法媲美的。</p><p>  現(xiàn)如今,人們的生活節(jié)奏越來(lái)越快,手機(jī)已經(jīng)成為了人們首選的娛樂(lè)和交流的方式。在這樣的

21、背景下,社交APP無(wú)疑有著非常巨大的發(fā)展前景。在緊張的生活工作節(jié)奏中,人們很難有大量集中的時(shí)間和朋友或家人一起交流互動(dòng),增進(jìn)感情。如果能夠把零散的時(shí)間利用起來(lái)通過(guò)手機(jī)APP與好友互動(dòng),另外還有機(jī)會(huì)認(rèn)識(shí)來(lái)自全國(guó)各地、民俗風(fēng)格迥異的新朋友,這會(huì)給人們的業(yè)余生活帶來(lái)許多的樂(lè)趣。</p><p>  此次設(shè)計(jì)的APP具有社交APP的基礎(chǔ)功能,例如:用戶(hù)收發(fā)消息,發(fā)送/查閱動(dòng)態(tài),點(diǎn)贊、評(píng)論等等。并在此基礎(chǔ)上進(jìn)行了擴(kuò)展,用戶(hù)

22、可以定制鬧鈴,撥打免費(fèi)網(wǎng)絡(luò)電話(huà),這是此次設(shè)計(jì)的APP的一大亮點(diǎn)。</p><p>  1.2 研究的目的和意義</p><p>  1967年,哈佛大學(xué)的心理學(xué)教授Stanley Milgram(1934~1984)創(chuàng)立了六度分割理論,通俗地解釋就是:你和任何一個(gè)陌生人之間所間隔的人不會(huì)超過(guò)六個(gè),也就是說(shuō),最多通過(guò)六個(gè)人你就能夠認(rèn)識(shí)任何一個(gè)陌生人。按照六度分隔理論,每個(gè)個(gè)體的社交圈都不斷放

23、大,最后成為一個(gè)大型網(wǎng)絡(luò)。這是社會(huì)性網(wǎng)絡(luò)的早期理解。</p><p>  根據(jù)中咨網(wǎng)研究部預(yù)計(jì),到2017年,全球網(wǎng)民人數(shù)將達(dá)到8.5億人。手機(jī)APP 作為移動(dòng)互聯(lián)網(wǎng)快速發(fā)展的助推器和其搶占市場(chǎng)份額的重要突破口,被廣泛關(guān)注并運(yùn)用于實(shí)際生活。而在2015年末的統(tǒng)計(jì)當(dāng)中,社交類(lèi)APP對(duì)人類(lèi)生活方式的進(jìn)步和影響更是功不可沒(méi)。在國(guó)內(nèi)外風(fēng)靡的APP中,如微信、微博、QQ、Facebook等,都有著自己鮮明的特點(diǎn),但是在大方

24、向都是以人類(lèi)社交圈為根本基礎(chǔ)。本APP從人性化的設(shè)計(jì)角度出發(fā),旨在探索出一種新型的社交APP的方向。</p><p>  1.3國(guó)內(nèi)外研究現(xiàn)狀</p><p>  移動(dòng)社交網(wǎng)絡(luò)是在社交網(wǎng)絡(luò)的基礎(chǔ)上演化、發(fā)展而來(lái)的。社交網(wǎng)絡(luò)(Social Network),是隨著E-mail、BBS、博客等互聯(lián)網(wǎng)應(yīng)用而自然發(fā)展起來(lái)的反應(yīng)社會(huì)群體的一種形態(tài),它的本質(zhì)是提供了一個(gè)在人群(朋友圈)中分享興趣、愛(ài)好

25、、狀態(tài)和活動(dòng)等信息的在線(xiàn)平臺(tái)。隨著移動(dòng)互聯(lián)網(wǎng)的不斷發(fā)展,社交網(wǎng)絡(luò)對(duì)人類(lèi)社會(huì)活動(dòng)的方式方法、效率效果等都產(chǎn)生了深遠(yuǎn)的影響。</p><p>  在國(guó)內(nèi)市場(chǎng),微信,QQ和微博已經(jīng)做大做強(qiáng)并且成為社交APP行業(yè)的巨頭,其他出彩的社交APP并不多,其中陌陌已經(jīng)上市,但是一開(kāi)始卻是打著某些不好的招牌,招攬的用戶(hù)群,不過(guò)現(xiàn)如今它也已經(jīng)開(kāi)始轉(zhuǎn)型。所以,經(jīng)過(guò)這些年社交APP市場(chǎng)的發(fā)展和過(guò)濾,想要做出亮眼的、出眾的社交APP,就盡

26、量不要走傳統(tǒng)路線(xiàn),避開(kāi)微信、QQ這樣的巨頭,才有機(jī)會(huì)成長(zhǎng)和發(fā)展起來(lái)。</p><p>  國(guó)外有款類(lèi)似的鬧鈴社交軟件叫做Wakie,在Wakie創(chuàng)始人Hrachik Adjamian看來(lái),人們已經(jīng)厭煩每天早上千篇一律的系統(tǒng)鬧鈴聲,而如果換做每天早上叫醒你的是一個(gè)陌生人,人們則會(huì)有充足的好奇心以及新鮮感。而且,在你成為Wakie付費(fèi)用戶(hù)之后,你還能看到那個(gè)喚醒你的他(她)的基本資料,并可添加其為好友,與其互動(dòng)交流。

27、2015年年中發(fā)布,Wakie已經(jīng)擁有150萬(wàn)注冊(cè)用戶(hù),用戶(hù)群覆蓋了80個(gè)國(guó)家。由此說(shuō)明了在未來(lái),這項(xiàng)新奇的服務(wù),能夠有很好的發(fā)展前景。</p><p>  此次設(shè)計(jì)的鬧鈴社交APP除了通話(huà)喚醒功能,還提供了基本的“社區(qū)”社交板塊,類(lèi)似論壇形式。應(yīng)用內(nèi)每個(gè)用戶(hù)都能夠在“社區(qū)”內(nèi)發(fā)表動(dòng)態(tài),并且所有動(dòng)態(tài)都會(huì)以信息流的方式呈現(xiàn)出來(lái),用戶(hù)也可以對(duì)動(dòng)態(tài)進(jìn)行點(diǎn)贊和評(píng)論。這種方式是最簡(jiǎn)單最直接,也是當(dāng)前社交APP主流的好友之間

28、進(jìn)行信息交流的一種形式之一。</p><p>  1.4 本系統(tǒng)主要內(nèi)容以及結(jié)構(gòu)</p><p>  本課題主要研究了一款基于Objective-C語(yǔ)言的iPhone社交APP的設(shè)計(jì)與實(shí)現(xiàn),這款應(yīng)用整體劃分了五個(gè)模塊,主要包括登錄注冊(cè)模塊、鬧鈴模塊、免費(fèi)網(wǎng)絡(luò)電話(huà)模塊、動(dòng)態(tài)模塊、個(gè)人中心模塊,其中網(wǎng)絡(luò)電話(huà)模塊是這款應(yīng)用的技術(shù)難點(diǎn)也是亮點(diǎn),動(dòng)態(tài)模塊是核心。</p><p&g

29、t;  這五個(gè)模塊的主要功能:</p><p>  1. 登錄注冊(cè)模塊:注冊(cè)功能通過(guò)APP下發(fā)手機(jī)驗(yàn)證碼,以當(dāng)前用戶(hù)手機(jī)號(hào)為賬號(hào)進(jìn)行注冊(cè)。通過(guò)高德地圖SDK進(jìn)行定位用戶(hù)當(dāng)前所在地區(qū)。并收集用戶(hù)基本信息,注冊(cè)發(fā)送到服務(wù)器。登錄功能即輸入已注冊(cè)的帳號(hào)和密碼進(jìn)行登錄。</p><p>  2. 鬧鈴模塊:banner圖的定時(shí)輪播,展示本APP的特色、近期活動(dòng)或者新聞、廣告等。鬧鈴列表的展示,顯示

30、了用戶(hù)制定的鬧鈴,開(kāi)關(guān)按鈕控制鬧鈴的開(kāi)關(guān)。用戶(hù)可點(diǎn)擊列表項(xiàng)對(duì)當(dāng)前已定制的鬧鈴進(jìn)行修改,也可左滑刪除鬧鈴列表項(xiàng)。</p><p>  3. 免費(fèi)網(wǎng)絡(luò)電話(huà)模塊:顯示當(dāng)前待叫醒用戶(hù)人數(shù)。點(diǎn)擊隨機(jī)呼叫按鈕,服務(wù)器自動(dòng)分配一個(gè)在線(xiàn)用戶(hù)進(jìn)行呼叫,實(shí)現(xiàn)免費(fèi)網(wǎng)絡(luò)電話(huà)。</p><p>  4. 動(dòng)態(tài)模塊:該模塊展示所有用戶(hù)發(fā)表的動(dòng)態(tài)內(nèi)容以及動(dòng)態(tài)回復(fù)內(nèi)容,用戶(hù)可進(jìn)行評(píng)論和點(diǎn)贊、舉報(bào)。</p>

31、<p>  5. 個(gè)人中心模塊:包含個(gè)人資料編輯、個(gè)人主頁(yè)、已關(guān)注好友列表、消息列表、設(shè)置、用戶(hù)本人的動(dòng)態(tài)列表、通話(huà)記錄列表、社會(huì)化分享等。</p><p>  本文分為五章,分別為:第一章為緒論部分,主要概述了本APP的研發(fā)背景、研究目的和意義、國(guó)內(nèi)外研究現(xiàn)狀以及APP的功能概述。第二章介紹了開(kāi)發(fā)系統(tǒng)所用到的Objective-C語(yǔ)言、開(kāi)發(fā)環(huán)境和關(guān)鍵技術(shù),這是開(kāi)發(fā)本APP的基礎(chǔ)。第三章主要對(duì)此次設(shè)計(jì)的

32、APP進(jìn)行需求分析,確定系統(tǒng)流程,劃分程序模塊,設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)等,為實(shí)現(xiàn)應(yīng)用確定方向。第四章為應(yīng)用內(nèi)主要功能的具體實(shí)現(xiàn),介紹APP是如何實(shí)現(xiàn)相應(yīng)的功能,以及對(duì)APP進(jìn)行一些測(cè)試,指出開(kāi)發(fā)過(guò)程中遇到的問(wèn)題。第五章對(duì)此次畢業(yè)設(shè)計(jì)進(jìn)行總結(jié),和對(duì)于這款應(yīng)用未來(lái)的構(gòu)思,指出不足之處并標(biāo)明繼續(xù)研究的方向。</p><p>  2. 開(kāi)發(fā)環(huán)境及關(guān)鍵技術(shù)</p><p>  2.1 Mac OS X 開(kāi)發(fā)平

33、臺(tái)</p><p>  Mac OS X是蘋(píng)果公司為Mac系列產(chǎn)品開(kāi)發(fā)的專(zhuān)屬的操作系統(tǒng),是蘋(píng)果麥金塔(Macintosh)電腦操作系統(tǒng)軟件的總稱(chēng)?;趫?jiān)如磐石的UNIX,系統(tǒng)運(yùn)行穩(wěn)定,操作簡(jiǎn)單便捷,設(shè)計(jì)美觀。配合處處創(chuàng)新的蘋(píng)果硬件,使得蘋(píng)果設(shè)備安全易用,高度兼容,堪稱(chēng)完美。</p><p>  Mac OS X基于FreeBSD系統(tǒng),是采用“面向?qū)ο蟛僮飨到y(tǒng)”的全面的操作系統(tǒng)?!懊嫦?qū)ο蟛?/p>

34、作系統(tǒng)”是史蒂夫·喬布斯(Steve Jobs)所開(kāi)發(fā)的。喬布斯相信大家都知道,他是最偉大的蘋(píng)果公司聯(lián)合創(chuàng)始人之一。今天蘋(píng)果手機(jī)能夠風(fēng)靡全球,喬布斯功不可沒(méi)。其擁有許多的技術(shù)方面的顯著特點(diǎn):</p><p>  1.全64位技術(shù),可以通過(guò)第三方的Mode Selector進(jìn)行64位和32為切換。</p><p>  2.OpenCL,是一種讓圖形處理器發(fā)揮極致來(lái)加速應(yīng)用程序性能的

35、新技術(shù)。</p><p>  3.對(duì)于iOS開(kāi)發(fā)特別重要的是:Grand Central Dispatch .幫助程序編譯人員使用多核心編譯,增強(qiáng)軟件多核心支持。Grand Central Dispatch(GCD)是異步執(zhí)行任務(wù)的技術(shù)之一。開(kāi)發(fā)者只需要定義想執(zhí)行的任務(wù)并追加到適當(dāng)?shù)腄ispatch Queue中,GCD就能生成必要的線(xiàn)程并計(jì)劃執(zhí)行任務(wù)。我們使用GCD可以使用非常簡(jiǎn)單的記述方法,實(shí)現(xiàn)了極為復(fù)雜繁瑣

36、的多線(xiàn)程編程。</p><p>  Mac OS X作為蘋(píng)果的操作系統(tǒng),界面精美,功能齊全,使用方便,操作人性化。由于Mac OS X只能配合蘋(píng)果的硬件才能使用,而且蘋(píng)果的設(shè)備一般來(lái)說(shuō)價(jià)格都較高,所以Mac OS X系統(tǒng)的普及性暫時(shí)不是很高。但是隨著人們生活水平的提高,人們?cè)絹?lái)越追求高品質(zhì)的生活方式,越來(lái)越多的人們選擇了Mac OS X,所以我相信,Mac OS X會(huì)越來(lái)越好。</p><p&

37、gt;  2.2 Objective-C</p><p>  Objective-C是一門(mén)簡(jiǎn)單的計(jì)算機(jī)語(yǔ)言,是在C語(yǔ)言的基礎(chǔ)上發(fā)展而來(lái)的面向?qū)ο缶幊陶Z(yǔ)言。作為面向?qū)ο缶幊陶Z(yǔ)言,它擁有著面向?qū)ο缶幊陶Z(yǔ)言的三要素——封裝,繼承,多態(tài)。Objective-C主要用來(lái)開(kāi)發(fā)iOS操作系統(tǒng)和應(yīng)用程序,Mac OS X操作系統(tǒng)和應(yīng)用程序。它的流行主要?dú)w功于iPhone手機(jī)的成功。而iPhone手機(jī)之所以流行,同時(shí)也是因?yàn)槭褂昧?/p>

38、Objective-C開(kāi)發(fā)出來(lái)的iOS操作系統(tǒng)。所以說(shuō)iPhone和Objective-C是相輔相成,密不可分的。</p><p>  Objective-C語(yǔ)言誕生于 20 世紀(jì) 80 年代,由布萊德·考克斯(Brad Cox) 發(fā)明,意在將強(qiáng)大的、流行的、可移植的C語(yǔ)言與優(yōu)雅的 Smalltalk 語(yǔ)言結(jié)合在一起。Objective-C 語(yǔ)言是C語(yǔ)言的一個(gè)擴(kuò)展集,它以C語(yǔ)言為基礎(chǔ),在語(yǔ)言中添加了一些

39、微妙但意義重大的特性。</p><p>  Objective-C初期的版本不支持垃圾回收機(jī)制,使用MRC,需要開(kāi)發(fā)者自己手動(dòng)控制內(nèi)存管理,開(kāi)發(fā)起來(lái)相當(dāng)麻煩。不過(guò)令開(kāi)發(fā)人員欣慰的是后來(lái)蘋(píng)果公司發(fā)布的Xcode支持了自動(dòng)釋放ARC (Automatic Reference Counting),不等同于嚴(yán)格意義上的垃圾回收機(jī)制,但是會(huì)在編譯期間,編譯器自動(dòng)添加[NSObject release],不需要開(kāi)發(fā)者手動(dòng)re

40、lease對(duì)象。這大大提升了開(kāi)發(fā)人員的開(kāi)發(fā)速度,使得基于OC的開(kāi)發(fā)更加方便。</p><p>  蘋(píng)果公司一直在通過(guò)各種方式嘗試降低Objective-C語(yǔ)言的復(fù)雜度,淘汰手動(dòng)管理內(nèi)存和C標(biāo)準(zhǔn)頭文件,引進(jìn)ARC機(jī)制,還有通過(guò)點(diǎn)語(yǔ)法訪(fǎng)問(wèn)屬性的getter/setter方法。所以我堅(jiān)信,Objective-C語(yǔ)言一定會(huì)有很好的未來(lái)。</p><p>  2.3 iOS系統(tǒng)的優(yōu)勢(shì)</p&g

41、t;<p>  2.3.1 iOS系統(tǒng)</p><p>  iOS是蘋(píng)果公司開(kāi)發(fā)的移動(dòng)設(shè)備的專(zhuān)屬操作系統(tǒng)。自2007年1月9日的Macworld大會(huì)上蘋(píng)果公司公布這個(gè)系統(tǒng),到現(xiàn)在將近十年的時(shí)間,iOS系統(tǒng)不斷更新,不斷完善。Siri、FaceTime、Safari、Airdrop等內(nèi)置應(yīng)用以及功能,提供了更加智能化和人性化的功能,而指紋解鎖、3Dtouch等功能更是錦上添花,使得iOS系統(tǒng)獨(dú)具創(chuàng)新,

42、別具一格。</p><p>  2.3.2 軟件與硬件整合度高</p><p>  iOS系統(tǒng)的軟件與硬件的整合度相當(dāng)高,這使得其分化大大降低,在這方面要遠(yuǎn)勝于碎片化嚴(yán)重的Android。這樣也增加了整個(gè)系統(tǒng)的穩(wěn)定性,經(jīng)常使用iPhone的朋友也能發(fā)現(xiàn),手機(jī)很少出現(xiàn)死機(jī)、無(wú)響應(yīng)的情況,大大提升了用戶(hù)體驗(yàn)。</p><p>  2.3.3 安全性強(qiáng)</p>

43、<p>  安全性實(shí)際上是一個(gè)操作系統(tǒng)最重要的部分之一。對(duì)于用戶(hù)來(lái)說(shuō),不管是信息、照片、通話(huà)記錄或者地址等,移動(dòng)設(shè)備中的任何信息都必須保證其安全,所以,保障手機(jī)中的信息安全具有十分重要的意義。蘋(píng)果官方AppStore建立了完整的開(kāi)發(fā)者認(rèn)證和應(yīng)用審核機(jī)制,這充分保證了某些惡意程序基本上沒(méi)有被用戶(hù)安裝到手機(jī)上的機(jī)會(huì)。為了保護(hù)用戶(hù)的隱私,iOS用戶(hù)的許多操作例如獲取用戶(hù)位置、打開(kāi)系統(tǒng)照片圖庫(kù)等都需要獲得用戶(hù)的許可。另外用戶(hù)可以通

44、過(guò)“查找我的iPhone”功能定位到丟失的手機(jī),并使其發(fā)出響聲,或擦除所有數(shù)據(jù)信息。如果用戶(hù)的設(shè)備失而復(fù)得,他還可以回復(fù)上一次的備份。種種安全功能,使得iOS的系統(tǒng)安全性在所有移動(dòng)設(shè)備中高居榜首。</p><p>  2.4 X-code</p><p>  iOS的開(kāi)發(fā)環(huán)境是我所見(jiàn)過(guò)的集成度最高的,只需要下載安裝Xcode軟件。Xcode是一種不開(kāi)源的集成開(kāi)發(fā)環(huán)境,運(yùn)行于Mac OS X

45、操作系統(tǒng)下,提供給開(kāi)發(fā)者用于開(kāi)發(fā)Mac OS X,iOS應(yīng)用程序。Xcode操作方便,編譯速度極快,使得開(kāi)發(fā)者的每次操作都很輕松。所謂“工欲善其事,必先利其器”,想要更好的開(kāi)發(fā)iOS程序,就要先學(xué)會(huì)使用Xcode。Xcode會(huì)把所需求的基本開(kāi)發(fā)環(huán)境都已經(jīng)搭建好。其中包括了編譯環(huán)境、SDK文檔、模器、單元測(cè)試工具、性能測(cè)試工具、代碼靜態(tài)分析工具、版本管理工具接口、蘋(píng)果自家服務(wù)接口等等。Xcode會(huì)隨著iOS系統(tǒng)版本升級(jí)而發(fā)布新版本并向下兼

46、容,本項(xiàng)目使用的是Xcode7.2。</p><p><b>  2.5 PJSIP</b></p><p>  PJSIP是一個(gè)開(kāi)源的SIP協(xié)議棧,支持多種SIP的擴(kuò)展功能。它實(shí)現(xiàn)了SIP、SDP、RTP、STUN、TURN和ICE。PJSIP作為基于SIP的一個(gè)多媒體通信框架提供了非常清晰的API,以及NAT穿越的功能。PJSIP具有良好的移植性,幾乎支持當(dāng)前所有

47、系統(tǒng):桌面系統(tǒng)、嵌入式系統(tǒng)、智能手機(jī)系統(tǒng)。</p><p>  PJSIP同時(shí)還支持語(yǔ)音通話(huà)、視頻通話(huà)和即時(shí)通訊功能。此外,它具有十分完善的開(kāi)發(fā)文檔和資料,對(duì)開(kāi)發(fā)者來(lái)說(shuō)是一個(gè)福音。</p><p>  3. 需求分析與概要設(shè)計(jì)</p><p><b>  3.1 需求分析</b></p><p>  移動(dòng)應(yīng)用講究創(chuàng)新,無(wú)

48、論是新穎的界面、創(chuàng)意的操作方式還是獨(dú)特的應(yīng)用內(nèi)容,都能夠吸引用戶(hù)的目光,產(chǎn)品人員經(jīng)常會(huì)提出一些新的點(diǎn)子,開(kāi)發(fā)人員需要配合產(chǎn)品的更改,所以移動(dòng)應(yīng)用項(xiàng)目的需求較傳統(tǒng)軟件需求更容易變化。</p><p>  3.1.1 技術(shù)可行性分析</p><p>  本鬧鈴社交APP在Mac平臺(tái)使用OC編程語(yǔ)言開(kāi)發(fā),OC語(yǔ)言簡(jiǎn)單易學(xué),Xcode開(kāi)發(fā)環(huán)境易安裝。當(dāng)前基于OC的開(kāi)發(fā)十分火熱,網(wǎng)上也有許多第三方的

49、開(kāi)源代碼庫(kù),如網(wǎng)絡(luò)請(qǐng)求庫(kù)AFNetworking,圖片自動(dòng)加載及緩存庫(kù)SDWebImage,TableView下拉刷新上拉加載庫(kù)MJRefresh等等。OC語(yǔ)言主要實(shí)現(xiàn)客戶(hù)端的開(kāi)發(fā),配合服務(wù)器端進(jìn)行數(shù)據(jù)傳輸,該社交APP的開(kāi)發(fā)變得更加簡(jiǎn)單。</p><p>  3.1.2 經(jīng)濟(jì)可行性分析</p><p>  在移動(dòng)互聯(lián)網(wǎng)的大浪潮下,開(kāi)發(fā)一款A(yù)PP變得經(jīng)濟(jì)實(shí)惠,只要有一臺(tái)Mac電腦,免費(fèi)下載

50、安裝Xcode軟件,直接就可以進(jìn)行開(kāi)發(fā),而且許多第三方的服務(wù)對(duì)于這種小型APP完全免費(fèi),例如第三方社會(huì)化分享平臺(tái)ShareSDK、友盟,第三方IM平臺(tái)融云、環(huán)信,第三方推送平臺(tái)極光推送,個(gè)推推送等,都可以免費(fèi)使用它們的SDK進(jìn)行開(kāi)發(fā)。集成第三方的SDK使得開(kāi)發(fā)一款A(yù)PP變得更加高效、經(jīng)濟(jì)、方便。唯一需要花錢(qián)的地方就是蘋(píng)果的上線(xiàn)需要一個(gè)蘋(píng)果的開(kāi)發(fā)者賬號(hào)。所以在費(fèi)用上我們可以忽略不計(jì)。</p><p><b&g

51、t;  3.2 概要設(shè)計(jì)</b></p><p>  根據(jù)項(xiàng)目的需求,整個(gè)工程使用MVC設(shè)計(jì)模式,我們把用戶(hù)信息、鬧鈴信息等數(shù)據(jù)模型放在Model層,界面的實(shí)現(xiàn)放在View層,業(yè)務(wù)邏輯、從后臺(tái)請(qǐng)求數(shù)據(jù)以及數(shù)據(jù)處理放在Controller層,這樣使得整個(gè)應(yīng)用模塊化,降低模塊與模塊之間的耦合度,利于后期代碼的維護(hù)以及迭代。這樣也更加符合APP的設(shè)計(jì)規(guī)范,MVC也是當(dāng)前十分流行的軟件設(shè)計(jì)模式。</p&

52、gt;<p>  3.2.1 系統(tǒng)功能結(jié)構(gòu)圖:如圖(3-1)所示</p><p>  圖(3-1)系統(tǒng)功能結(jié)構(gòu)圖</p><p>  項(xiàng)目中的視圖控制器由標(biāo)簽欄(TabbarController)控制所有的視圖控制器(ViewController)。我們可以通過(guò)標(biāo)簽欄上的按鈕來(lái)選擇不同的頁(yè)面,并且完成相應(yīng)的需求。在實(shí)現(xiàn)的過(guò)程中可以根據(jù)標(biāo)簽欄的下標(biāo)屬性(selectedInde

53、x)來(lái)進(jìn)行切換視圖控制器。而pjsip需要在app打開(kāi)時(shí)連接pjsip服務(wù)器并且在各個(gè)頁(yè)面接收到狀態(tài)改變(如來(lái)電或接收電話(huà)),所以放在標(biāo)簽欄里面進(jìn)行控制。因?yàn)樾枰瓿蛇@些需求,所以在用戶(hù)打開(kāi)程序之后,我們需要把程序的根視圖控制器設(shè)為標(biāo)簽欄。與此同時(shí),在標(biāo)簽欄設(shè)置它控制的視圖控制器的過(guò)程中,需要給各個(gè)頁(yè)面添加導(dǎo)航欄,以便視圖控制器需要切換頁(yè)面的時(shí)候進(jìn)行壓棧操作。</p><p>  登錄注冊(cè)需求:注冊(cè)功能使用短信接

54、收驗(yàn)證碼來(lái)進(jìn)行控制。在注冊(cè)頁(yè)面記錄用戶(hù)的信息,反饋給服務(wù)器進(jìn)行記錄。并在注冊(cè)頁(yè)面實(shí)現(xiàn)了定位功能。登錄功能輸入帳號(hào)密碼,發(fā)送給服務(wù)器,判斷是否登錄成功。</p><p>  .鬧鈴定制需求:banner 圖實(shí)現(xiàn)圖片輪播。展示用戶(hù)定制的鬧鈴,并設(shè)定開(kāi)關(guān)監(jiān)聽(tīng)鬧鈴的狀態(tài)。鬧鈴定制頁(yè)面,時(shí)間的選擇,設(shè)定鬧鈴的周期,選擇叫醒自己的人的性別。</p><p>  .隨機(jī)呼叫需求:顯示當(dāng)前在線(xiàn)用戶(hù)在線(xiàn)人數(shù)

55、,設(shè)定隨機(jī)呼叫按鈕,自動(dòng)匹配當(dāng)前時(shí)間范圍內(nèi)30min的鬧鈴。我們?cè)诮缑嫔险故玖擞脩?hù)在當(dāng)前時(shí)間段所能夠呼叫鬧鈴的數(shù)量,當(dāng)用戶(hù)點(diǎn)擊按鈕進(jìn)行呼叫的同時(shí),服務(wù)器會(huì)隨機(jī)返回一個(gè)鬧鈴,然后客戶(hù)度端會(huì)與這個(gè)鬧鈴的制定者來(lái)建立連接。</p><p>  互動(dòng)社區(qū)需求:顯示所有用戶(hù)的心情狀態(tài),點(diǎn)擊頭像可查看該用戶(hù)的個(gè)人主頁(yè)。實(shí)現(xiàn)圖文混排。動(dòng)態(tài)的發(fā)布頁(yè)面,編輯文字和圖片。</p><p>  個(gè)人中心需求:細(xì)

56、分幾個(gè)小模塊:個(gè)人頭像,叫醒人數(shù),個(gè)人資料編輯,好友,記錄,個(gè)人動(dòng)態(tài),消息,設(shè)置以及分享。</p><p>  個(gè)人資料編輯:通過(guò)拍照或者圖庫(kù)修改頭像。并且可以修改年齡和性別;</p><p>  好友:顯示個(gè)人的好友,可對(duì)好友進(jìn)行編輯來(lái)刪除</p><p>  記錄:顯示了個(gè)人的呼叫記錄和被叫醒記錄。 </p><p>  個(gè)人動(dòng)態(tài):顯示個(gè)

57、人的動(dòng)態(tài),可進(jìn)行編輯和刪除。</p><p>  消息:可查看系統(tǒng)消息,以及其他用戶(hù)給用戶(hù)發(fā)來(lái)的消息,當(dāng)有未查閱的消息時(shí),會(huì)在個(gè)人中心的消息圖標(biāo)上有小紅點(diǎn)進(jìn)行提示??捎镁庉嫲粹o來(lái)進(jìn)行刪除當(dāng)前消息。</p><p>  密碼設(shè)置:可以更改符合規(guī)定格的式密碼。</p><p>  清理緩存:清理圖片的緩存。(保留動(dòng)態(tài)的文字以免影響用戶(hù)體驗(yàn)。)</p>&l

58、t;p>  意見(jiàn)反饋:收集用戶(hù)對(duì)app的意見(jiàn)。</p><p>  評(píng)分:跳轉(zhuǎn)到AppStore對(duì)本應(yīng)用進(jìn)行評(píng)分。</p><p>  檢查更新:用戶(hù)自己檢查當(dāng)前用的版本。</p><p>  退出登錄:注銷(xiāo)當(dāng)前賬戶(hù)。</p><p>  3.2.2 功能示例圖:如圖(3-2)所示</p><p><b&g

59、t;  基本功能:</b></p><p>  圖(3-2)功能示例圖</p><p>  4. 社交app詳細(xì)設(shè)計(jì)</p><p><b>  4.1 工具類(lèi)設(shè)計(jì)</b></p><p>  在設(shè)計(jì)過(guò)程當(dāng)中,我們需要存儲(chǔ)一定的信息來(lái)完成一些需求。當(dāng)我們第一次打開(kāi)程序,用戶(hù)需要登錄注冊(cè)。而在此之后,除非用戶(hù)執(zhí)

60、行退出登錄事件,我們應(yīng)該在用戶(hù)打開(kāi)程序之后,程序默認(rèn)是上一次登錄的賬號(hào)登錄的,不必重新登錄,以此來(lái)改善了用戶(hù)體驗(yàn)。此時(shí)我們就需要把上一次登錄的信息保存在沙盒內(nèi)。打開(kāi)程序時(shí),從沙盒中獲取賬號(hào)的信息。同時(shí)保留移除沙盒信息的方法,在我們退出登錄時(shí),需要清空這些數(shù)據(jù),否則無(wú)法用新賬號(hào)登錄,從而導(dǎo)致程序崩潰。</p><p>  有多個(gè)地方需要用到用戶(hù)的信息,在用戶(hù)的登錄時(shí)把用戶(hù)的信息存入沙盒。</p>&l

61、t;p>  #pragma mark - 緩存用戶(hù)ID</p><p>  +(void)saveUserId:(NSNumber *)userId{</p><p>  NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults];</p><p>  [userDefaults

62、setObject:userId forKey:kUserID];</p><p>  [userDefaults synchronize];</p><p><b>  }</b></p><p>  #pragma mark - 清除用戶(hù)信息</p><p>  +(void)clearProfile{</p&

63、gt;<p>  NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults];</p><p>  [userDefaults setObject:@(0) forKey:kUserID];</p><p>  [userDefaults setObject:@"點(diǎn)擊頭像登錄"

64、 forKey:kUserName];</p><p>  [userDefaults setObject:@(0) forKey:kSex];</p><p>  [userDefaults setObject:@(0) forKey:kLocation];</p><p>  [userDefaults synchronize];</p><

65、p><b>  }</b></p><p>  #pragma mark - 獲取用戶(hù)信息,返回模型</p><p>  +(BaseModel *)myProfile{</p><p>  BaseModel * model = [BaseModel new];</p><p>  NSUserDefaults

66、* userDefaults = [NSUserDefaults standardUserDefaults];</p><p>  model.userId = [userDefaults objectForKey:kUserID];</p><p>  model.nickname = [userDefaults objectForKey:kUserName];</p>&

67、lt;p>  model.sexy = [userDefaults objectForKey:kSex];</p><p>  return model;</p><p><b>  }</b></p><p>  #pragma mark - 獲取本人信息,返回字典</p><p>  +(NSDictionar

68、y *)getOwnInformation{</p><p>  NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults];</p><p>  NSString *userId = [userDefaults objectForKey:kUserID];</p><p>  NSSt

69、ring * name = [userDefaults objectForKey:kUserName];</p><p>  NSString * sexy = [userDefaults objectForKey:kSex];</p><p>  NSString * location = [userDefaults objectForKey:kLocation];</p>

70、<p>  return @{@"userId":userId,@"nickname":name,@"sex":sexy,@"region":location};</p><p><b>  }</b></p><p><b>  4.2 網(wǎng)絡(luò)請(qǐng)求</b>

71、</p><p>  本APP作為一個(gè)社交APP,幾乎每個(gè)功能都要用到網(wǎng)絡(luò)請(qǐng)求,我使用第三方庫(kù)AFNetworking 來(lái)進(jìn)行網(wǎng)絡(luò)請(qǐng)求。在這個(gè)程序中,基本所有頁(yè)面都需要與服務(wù)器進(jìn)行數(shù)據(jù)傳輸,所以網(wǎng)絡(luò)請(qǐng)求是這個(gè)程序不可或缺的、至關(guān)重要的功能。這里使用POST需要將用戶(hù)的操作以及請(qǐng)求內(nèi)容發(fā)送給服務(wù)器,然后,服務(wù)器根據(jù)用戶(hù)的請(qǐng)求,把數(shù)據(jù)以相應(yīng)的格式返回給用戶(hù)APP,然后通過(guò)代碼將復(fù)雜的數(shù)據(jù)以簡(jiǎn)單直觀的形式展現(xiàn)給用戶(hù)。比

72、如動(dòng)態(tài)頁(yè)面的發(fā)動(dòng)態(tài)、點(diǎn)贊、評(píng)論、查看原圖等功能,都充分地詮釋了網(wǎng)絡(luò)請(qǐng)求對(duì)于一個(gè)社交軟件的重要性。</p><p>  在iOS 9中,新增了ATS(App Transport Security)特性,也就是網(wǎng)絡(luò)請(qǐng)求從原來(lái)的HTTP改成了更加安全的HTTPS。HTTP是連接簡(jiǎn)單的明文傳輸,而HTTPS是可進(jìn)行加密傳輸、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議,比HTTP協(xié)議更加安全,對(duì)數(shù)據(jù)傳輸起到保障性的作用,簡(jiǎn)單的說(shuō)就是HTTP的安全

73、版。所以在我們進(jìn)行網(wǎng)絡(luò)請(qǐng)求之前需要在info.plist文件中添加NSAppTransportSecurity字段,然后在該字段下添加NSAllowsAritraryLoads字段,并將其設(shè)置為YES。這樣就讓原來(lái)請(qǐng)求用到的HTTP,全都轉(zhuǎn)向HTTPS協(xié)議進(jìn)行傳輸。</p><p>  4.3 PJSIP設(shè)計(jì)</p><p>  免費(fèi)網(wǎng)絡(luò)電話(huà)是本APP的核心功能,即通過(guò)免費(fèi)網(wǎng)絡(luò)電話(huà)來(lái)充當(dāng)原

74、始的系統(tǒng)鬧鈴來(lái)叫醒用戶(hù)。網(wǎng)絡(luò)電話(huà)的實(shí)現(xiàn)是依靠PJSIP協(xié)議,可以說(shuō)PJSIP是本APP的靈魂,由此可以看出該部分功能的重要性。PJSIP最主要的功能就是用來(lái)?yè)艽蚝徒勇?tīng)網(wǎng)絡(luò)電話(huà)。由于我們不確定接收到電話(huà)時(shí)用戶(hù)當(dāng)前的操作,所以我們需要在主界面時(shí)刻監(jiān)聽(tīng)PJSIP回調(diào)的消息,并始終監(jiān)聽(tīng)一個(gè)對(duì)象,來(lái)完成對(duì)網(wǎng)絡(luò)電話(huà)的接收。這就需要讓PJSIP這個(gè)類(lèi)變成單例。</p><p><b>  單例代碼如下:</b&

75、gt;</p><p>  + (PJSIP *)sharedInstance</p><p><b>  {</b></p><p>  static PJSIP *sharedInstance = nil;</p><p>  static dispatch_once_t onceToken;</p>

76、<p>  dispatch_once(&onceToken, ^{</p><p>  sharedInstance = [[PJSIP alloc] init];</p><p><b>  });</b></p><p>  return sharedInstance;</p><p><b

77、>  }</b></p><p>  PJSIP需要與服務(wù)器建立長(zhǎng)鏈接,并給每個(gè)用戶(hù)分配不同的賬號(hào)。使用這個(gè)協(xié)議棧,當(dāng)用戶(hù)第一次登錄時(shí),會(huì)檢索后臺(tái)數(shù)據(jù)庫(kù)是否已經(jīng)創(chuàng)建了賬號(hào),如果沒(méi)有創(chuàng)建賬號(hào),則會(huì)自動(dòng)注冊(cè)一個(gè)新的賬號(hào),并保存到后臺(tái)數(shù)據(jù)庫(kù)。第二次及以后該用戶(hù)再進(jìn)行登錄操作,PJSIP會(huì)自動(dòng)登錄,無(wú)需再做處理。</p><p>  PJSIP登錄并注冊(cè)代碼如下:</p&g

78、t;<p>  - (int)registerToServer:(NSString *)domian username:(NSString *)username passwd:(NSString *)passwd{    pjsua_acc_id acc_id;    

79、pj_status_t status;    status = pjsua_create();    if (status != PJ_SUCCESS) {        error_exit("

80、;Error in pjsua_create()", status);        return -1;    }else{        pjsua_config cfg

81、;        pjsua_logging_config log_cfg;        pjsua_config_default(&cfg);        cfg.cb.

82、on_incoming_call = &on_incoming_call;        cfg.cb.on_call_media_state = &on_call_media</p><p>  PJSIP與服務(wù)器進(jìn)行長(zhǎng)鏈接時(shí),當(dāng)有新的消息到來(lái),會(huì)使?fàn)顟B(tài)改變,并回調(diào)一些函數(shù):

83、</p><p>  static void on_reg_state2(pjsua_acc_id acc_id, pjsua_reg_info *info);</p><p>  static void on_reg_state2(pjsua_acc_id acc_id, pjsua_reg_info *info)</p><p><b>  {<

84、/b></p><p>  [[PJSIP sharedInstance] handleRegistrationStateChangeWithRegInfo: info];</p><p><b>  }</b></p><p><b>  // 接來(lái)電</b></p><p>  -(vo

85、id)answer:(pjsua_call_id)callId</p><p><b>  {</b></p><p>  pjsua_call_answer(callId, 200, NULL, NULL);</p><p><b>  }</b></p><p><b>  //來(lái)電回

86、調(diào)函數(shù)</b></p><p>  static void on_incoming_call(pjsua_acc_id acc_id, pjsua_call_id call_id,</p><p>  pjsip_rx_data *rdata)</p><p><b>  {</b></p><p>  pj

87、sua_call_info ci;</p><p>  PJ_UNUSED_ARG(acc_id);</p><p>  PJ_UNUSED_ARG(rdata);</p><p>  pjsua_call_get_info(call_id, &ci);</p><p>  PJ_LOG(3,(THIS_FILE, "Inc

88、oming call from %.*s!!",</p><p>  (int)ci.remote_info.slen,ci.remote_info.ptr));</p><p>  char *phoneId = ci.remote_info.ptr;</p><p>  NSDictionary * dic = </p><p>

89、;  @{@"call_id":@(call_id),@"phoneId":[NSString stringWithFormat:@"%s",phoneId]};</p><p><b>  }</b></p><p>  當(dāng)消息改變時(shí),狀態(tài)改變函數(shù)回調(diào):</p><p>  stat

90、ic void on_call_state(pjsua_call_id call_id, pjsip_event *e)</p><p><b>  {</b></p><p>  pjsua_call_info ci;</p><p>  PJ_UNUSED_ARG(e);</p><p>  pjsua_call_g

91、et_info(call_id, &ci);</p><p>  PJ_LOG(3,(THIS_FILE, "Call %d state=%.*s", call_id,</p><p>  (int)ci.state_text.slen,ci.state_text.ptr));</p><p>  if ([[PJSIP sharedIn

92、stance].delegate respondsToSelector:@selector(stateChange:)]) {</p><p>  [[PJSIP sharedInstance].delegate stateChange:ci.state];</p><p><b>  }</b></p><p><b>  }<

93、;/b></p><p>  撥打、接聽(tīng)界面如圖:</p><p>  圖(4-1)接聽(tīng)界面</p><p>  圖(4-2)接聽(tīng)界面</p><p>  4.4 模塊功能設(shè)計(jì)</p><p>  4.4.1 登錄注冊(cè)模塊</p><p>  登陸注冊(cè)模塊主要用于服務(wù)器統(tǒng)計(jì)用戶(hù)以及讓用戶(hù)個(gè)

94、性化定制其個(gè)人信息,并且用戶(hù)登陸之后能夠更全面更完整的使用此APP,用戶(hù)體驗(yàn)更佳。</p><p>  注冊(cè)界面使用高德地圖sdk進(jìn)行定位(需要用戶(hù)開(kāi)啟本app獲取位置的權(quán)限),確定用戶(hù)當(dāng)前所處的地區(qū)位置,如果用戶(hù)不想使用定位的結(jié)果或者手機(jī)定位功能沒(méi)有打開(kāi)而無(wú)法定位,也可以點(diǎn)擊進(jìn)入地區(qū)列表選擇用戶(hù)喜歡的地區(qū)。而注冊(cè)詳細(xì)方法是通過(guò)APP下發(fā)驗(yàn)證碼短信到用戶(hù)手機(jī),通過(guò)驗(yàn)證碼與手機(jī)號(hào)的匹配來(lái)判斷該用戶(hù)手機(jī)號(hào)碼是否為合法

95、、符合規(guī)范的手機(jī)號(hào),通過(guò)驗(yàn)證后將該手機(jī)號(hào)綁定為用戶(hù)賬號(hào),并將手機(jī)號(hào)和用戶(hù)基本信息保存到服務(wù)器,完成注冊(cè)。注冊(cè)之后使用該手機(jī)號(hào)用戶(hù)注冊(cè)時(shí)設(shè)定的密碼進(jìn)行登陸。另外蘋(píng)果官方要求每個(gè)APP的用戶(hù)在注冊(cè)之前都要了解最終用戶(hù)許可協(xié)議,同意最終用戶(hù)許可協(xié)議之后方能完成注冊(cè)。否則APP無(wú)法通過(guò)上線(xiàn)審核。</p><p>  1.注冊(cè)頁(yè)面高德地圖定位代碼:</p><p>  self.locationMa

96、nager = [[AMapLocationManager alloc] init];</p><p>  [self.locationManager setDesiredAccuracy:kCLLocationAccuracyHundredMeters];</p><p>  [self.locationManager requestLocationWithReGeocode:YES c

97、ompletionBlock:^(CLLocation *location, AMapLocationReGeocode *regeocode, NSError *error) {</p><p><b>  }];</b></p><p>  2.使用手機(jī)號(hào)獲取驗(yàn)證碼:</p><p>  [SMSSDK getVerificationCod

98、eByMethod:SMSGetCodeMethodSMS </p><p>  phoneNumber:_phoneNum</p><p>  zone:@"86" customIdentifier:nil </p><p>  result:^(NSError *error) {</p><p><b>  

99、}];</b></p><p>  4.4.2 鬧鈴模塊</p><p>  鬧鈴模塊可以讓用戶(hù)自定義鬧鈴,選擇鬧鈴的時(shí)間、叫醒者的性別、鬧鈴周期、添加備注信息等,而且可以對(duì)已定制的鬧鈴進(jìn)行修改和刪除。鬧鈴模塊使用banner圖輪播的形式來(lái)展示本app的一些信息,后期也可以用來(lái)添加一些廣告信息。</p><p>  1.鬧鈴定制周期排序</p>

100、;<p>  代碼需求是在用戶(hù)選擇鬧鈴的周期之后,在界面上顯示的周期從周一開(kāi)始排列,當(dāng)中用空格隔開(kāi),當(dāng)用戶(hù)選擇了周一到周五,則會(huì)顯示“工作日”,而選擇周六周日則會(huì)顯示“周末”。使用數(shù)組,將用戶(hù)選擇的周期全部加入到該數(shù)組內(nèi)并賦值成數(shù)字,遍歷數(shù)組,根據(jù)數(shù)字大小來(lái)排序,排序之后再根據(jù)數(shù)字對(duì)應(yīng)改成日期,顯示到界面上。</p><p>  2 .使用runtime改變時(shí)間選擇器</p><

101、p>  runtime即運(yùn)行時(shí),就是系統(tǒng)在運(yùn)行的時(shí)候的一些機(jī)制,其中消息機(jī)制是最主要的。對(duì)于C語(yǔ)言來(lái)說(shuō),調(diào)用哪個(gè)函數(shù)會(huì)在編譯的時(shí)候就會(huì)決定,編譯完成之后直接順序執(zhí)行,沒(méi)有二義性。OC語(yǔ)言的函數(shù)調(diào)用則是變成消息發(fā)送,這屬于動(dòng)態(tài)調(diào)用的過(guò)程。當(dāng)我們?cè)诰幾g的時(shí)候其實(shí)并不能決定真正調(diào)用哪個(gè)函數(shù);</p><p>  而事實(shí)證明,在編譯階段,OC可以調(diào)用任何函數(shù),即使這個(gè)函數(shù)并未實(shí)現(xiàn),只要在代碼中申明過(guò)就不會(huì)報(bào)錯(cuò),而C

102、語(yǔ)言在編譯階段就會(huì)報(bào)錯(cuò)。當(dāng)程序在真正運(yùn)行的時(shí)候,才會(huì)通過(guò)函數(shù)的名稱(chēng)找到對(duì)應(yīng)的函數(shù)來(lái)調(diào)用。runtime非常好用,當(dāng)我們調(diào)用一個(gè)類(lèi)時(shí),它的ipa指針會(huì)指向這個(gè)類(lèi),當(dāng)我們想要?jiǎng)討B(tài)改變這個(gè)類(lèi)的成員變量時(shí),我們可以通過(guò)runtime重寫(xiě)方法,從而達(dá)到動(dòng)態(tài)改變的目的。</p><p>  使用runtime改變時(shí)間選擇器字體顏色的代碼:</p><p>  objc_property_t *pPro

103、perty = class_copyPropertyList([UIDatePicker class], &outCount);</p><p>  for (i = outCount-1; i>=0; i--) {</p><p>  NSString *getPropertyName = [NSString stringWithCString:property_getNa

104、me(pProperty[i]) encoding:NSUTF8StringEncoding];</p><p>  if ([getPropertyName isEqualToString:@"textColor"]) {</p><p>  [_datePicker setValue:[UIColor whiteColor] forKey:@"textCo

105、lor"];</p><p><b>  }</b></p><p><b>  }</b></p><p>  [self addSubview:_datePicker];</p><p>  [_datePicker addTarget:self </p><p&g

106、t;  action:@selector(dateChanged:) </p><p>  forControlEvents:UIControlEventValueChanged];</p><p>  [self getCurrentTime];</p><p><b>  鬧鈴界面如圖:</b></p><p>  

107、圖(4-3)鬧鈴界面</p><p>  4.4.3 隨機(jī)呼叫模塊</p><p>  隨機(jī)呼叫模塊可以讓用戶(hù)對(duì)定制了當(dāng)前時(shí)間段鬧鈴的用戶(hù)進(jìn)行隨機(jī)叫醒。調(diào)用pjsip的主動(dòng)呼叫接口,同時(shí)調(diào)用撥打電話(huà)的接口。監(jiān)聽(tīng)狀態(tài)改變,做出相應(yīng)的處理操作。</p><p><b>  隨機(jī)呼叫頁(yè)面如圖:</b></p><p>  圖(

108、4-4)隨機(jī)呼叫頁(yè)面</p><p>  4.4.4 動(dòng)態(tài)模塊</p><p>  動(dòng)態(tài)模塊可以讓用戶(hù)在此發(fā)表自己的圖文動(dòng)態(tài)、新鮮事等,并且可以瀏覽其他用戶(hù)發(fā)表的動(dòng)態(tài),并對(duì)其進(jìn)行評(píng)論或點(diǎn)贊,與其他用戶(hù)交流互動(dòng)。展示用戶(hù)的動(dòng)態(tài)信息,需要實(shí)現(xiàn)圖文混排,圖片從1張到6張不等。</p><p>  1 根據(jù)動(dòng)態(tài)的字?jǐn)?shù)自定義label的大小</p><p&

109、gt;  在實(shí)現(xiàn)過(guò)程中,我們需要為tableViewCell的高度實(shí)現(xiàn)自定義,根據(jù)需要展示的不同內(nèi)容,所以在創(chuàng)建的模型對(duì)象內(nèi),根據(jù)文字內(nèi)容的字體大小、排列方式,計(jì)算出文本框的大小,從而得到不同的tableViewCell高度。</p><p>  -(CGSize)currentSize{</p><p>  UIFont * font = [UIFont systemFontOfSize

110、:14*__kScreeWidth/375];</p><p>  NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:font,NSFontAttributeName, nil];</p><p>  CGSize size = [_text boundingRectWithSize:</p>&

111、lt;p>  CGSizeMake((750-120-50)/2*__kScreeWidth/375, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading|NSStringDrawingTruncatesLastVisibleLine attributes:dict context:nil].size;<

112、;/p><p>  NSLog(@"size.height:%f",size.height);</p><p>  return size;</p><p><b>  }</b></p><p><b>  2選擇圖片并壓縮</b></p><p>  發(fā)表

113、動(dòng)態(tài)需要從用戶(hù)系統(tǒng)照片圖庫(kù)中選擇圖片,下面實(shí)現(xiàn)了如何從系統(tǒng)庫(kù)中選擇圖片。另外,由于有些圖片可能過(guò)大,用戶(hù)在上傳的時(shí)候會(huì)比較慢,造成界面假死的情況,而且耗費(fèi)流量,所以需要在不影響圖片查看效果的情況下,將圖片的質(zhì)量和大小進(jìn)行壓縮,然后再上傳到服務(wù)器。</p><p><b>  選擇圖片代碼:</b></p><p>  #pragma mark - image pick

114、er delegte</p><p>  - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info</p><p><b>  {</b></p><p>  [picker

115、 dismissViewControllerAnimated:YES completion:^{}];</p><p>  UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];</p><p>  * UIImagePickerControllerMediaType; // an NSStrin

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論