復(fù)雜世界里骡澈,一個就夠了
前言
- ?一個-ONE?是一款由韓寒監(jiān)制,制作精良的文藝生活閱讀類App攀涵,應(yīng)用精致優(yōu)雅铣耘,秉承著"復(fù)雜世界里,一個就夠了"的理念以故。
- 作為一個(偽)文藝的青年蜗细,很喜歡這款A(yù)pp精致簡練的設(shè)計與文藝范。正好近期需要寫一個比較完整的項目來練手怒详、驗證自己的學(xué)習(xí)成果炉媒,所以著手開始寫了這個項目。
- 花費了大概半個多月昆烁,完成了這款A(yù)pp的臨摹高仿吊骤。相似度高度99%。在下iOS開發(fā)行業(yè)新人静尼,學(xué)藝不精白粉,如有不佳之處,還望各位前輩大佬多多指點鼠渺。
- 項目GitHub地址:iOS高仿"一個-ONE"鸭巴。有興趣的朋友歡迎下載運行項目查看作品效果??。如果對源碼有任何意見或建議拦盹,也歡迎在本文評論區(qū)留言或在GitHub issue me.
聲明
- 本文章由簡書作者Coulson_Wang原創(chuàng)鹃祖,相應(yīng)的項目由GitHub用戶Coulson_Wang編寫并開源分享。轉(zhuǎn)載分享請注明出處普舆,謝謝恬口。
- 本項目用到了以下開源三方框架,感謝各位作者的開源貢獻(xiàn)奔害。
AFNetworking 用于發(fā)送網(wǎng)絡(luò)請求
FLAnimatedImage 用于處理gif動態(tài)圖的顯示
Masonry 用于在部分界面添加自動布局約束
MJRefresh 用于處理下拉和上拉刷新
NYTPhotoViewer 用于處理“影視”界面的圖片瀏覽
SDWebImage 用于圖片下載展示
SVProgressHUD 用于提示HUD的展示
- 本開源項目僅供學(xué)習(xí)交流使用楷兽,請勿用于任何商業(yè)用途。
- 項目中使用了原App?一個-ONE?中的圖片資源和數(shù)據(jù)华临。所有網(wǎng)絡(luò)數(shù)據(jù)通過Charles抓包獲取芯杀,在項目中已將網(wǎng)絡(luò)請求代碼封裝為.a靜態(tài)庫隱藏,避免擴(kuò)散雅潭。如若侵犯了版權(quán)揭厚,請聯(lián)系博主的郵箱
wangyuanyi1993@126.com
,博主會及時刪除相關(guān)敏感內(nèi)容扶供。
項目展示
廢話不多說筛圆,直接上代碼,哦不椿浓,上gif效果圖太援。
-
主界面:
主界面展示.gif
主界面是這個項目中最復(fù)雜的界面闽晦,涉及到多個tableView的展示跳轉(zhuǎn)切換。tableView中不同類型的cell以及單獨的headerView也有各種細(xì)節(jié)需要處理提岔。
主要實現(xiàn)思路是在一個scrollView上添加了3個tableView來分別展示前一天仙蛉、當(dāng)天、下一天的內(nèi)容碱蒙,在左右滾動scrollView時移動tableView的位置并刷新數(shù)據(jù)
-
詳情頁:
詳情頁展示.gif
詳情頁中需要展示文章內(nèi)容荠瘪、評論信息等。由于服務(wù)器返回的文章數(shù)據(jù)是HTML赛惩,主要實現(xiàn)思路是用一個tableView來處理評論列表哀墓,而頂部通過將一個webView設(shè)置為headerView來展示文章內(nèi)容。其中涉及了動態(tài)計算webView高度喷兼、處理navigationBar顯示燈細(xì)節(jié)處理篮绰。
-
專題頁:
專題頁面展示.gif
專題頁主要涉及到tableView多個section以及header和footer的處理。其中頂部的輪播器使用了我自己封裝的一個三方框架CWCarouselView來實現(xiàn)季惯。
-
搜索界面:
搜索界面展示.gif
搜索界面主要是在項目基礎(chǔ)原上做的一些擴(kuò)展阶牍,調(diào)用已經(jīng)寫好的主頁、詳情頁接口直接跳轉(zhuǎn)展示星瘾。其中實現(xiàn)了一些選擇器動畫的展示走孽。
限于篇幅以及簡書5.0MB的圖片上傳限制,這里就不再繼續(xù)進(jìn)行效果展示了琳状,感興趣的朋友可以前往項目的GitHub地址下載項目源碼運行查看完整效果磕瓷。
項目結(jié)構(gòu)
- 項目的整體架構(gòu)采用了MVC的模式。開發(fā)方式使用了storyBoard+xib+代碼結(jié)合的形式念逞。程序入口使用storyBoard搭建困食,由MainStoryboard負(fù)責(zé)整體結(jié)構(gòu)。各個模塊的詳情界面則由控制器自行push或modal處理翎承。storyBoard格局如圖:
- 項目文件結(jié)構(gòu):
其中:
-
Main中包含三個模塊
Main文件夾結(jié)構(gòu).png
- Launch負(fù)責(zé)處理程序啟動時的啟動界面展示
- TabBar負(fù)責(zé)處理程序的根控制器-tabBarController
- Navigation自定義了導(dǎo)航控制器以及導(dǎo)航條硕盹,負(fù)責(zé)所有界面的導(dǎo)航功能
- ONE中包含多個模塊,負(fù)責(zé)處理主界面以及相關(guān)的衍生界面(比如詳情頁叨咖、作者頁瘩例、登錄界面、分享界面等)
- ALL模塊負(fù)責(zé)處理專題界面(即tabBarController的第二個控制器)
- ME模塊負(fù)責(zé)處理"我的"界面(即tabBarController的第三個控制器)
- Search模塊負(fù)責(zé)處理搜索頁以及搜索結(jié)果頁的展示與業(yè)務(wù)邏輯
-
Other包含以下模塊
Other文件夾結(jié)構(gòu).png
- category包含了大量的分類文件
- const包含一對常量文件甸各,用于定義一些全局常量
- lib中包含3個自己封裝的第三方庫垛贤。分別是:打包成靜態(tài)庫的網(wǎng)絡(luò)請求工具類,輪播器控件CWCarouselView趣倾,用于處理點贊時數(shù)字滾動的Label控件CWCalendarLabel
- tool中包含了大量抽取出來的工具類聘惦,用于處理數(shù)據(jù)持久化、音頻播放儒恋、登錄分享善绎、權(quán)限獲取黔漂、定位獲取等功能。
項目總結(jié):
學(xué)而不敲則罔禀酱,敲而不學(xué)則怠瘟仿。編程技術(shù)就是在不斷的學(xué)習(xí)和實踐中逐漸提升的。
在寫這個項目的過程中比勉,讓我發(fā)現(xiàn)了自己其實還有很多方面的知識并沒有掌握,或是學(xué)過了但沒有印象驹止,但是在寫項目的過程中浩聋,必然需要去復(fù)習(xí)和鞏固并加以利用。
只有不斷的學(xué)習(xí)擴(kuò)充自己的知識儲備臊恋,并且不斷的投入到項目實戰(zhàn)中衣洁,才能真正確保自己的技術(shù)水平持續(xù)提高。
希望以后能給大家?guī)砀喔玫拈_源項目抖仅。
項目缺陷:
由于部分界面中服務(wù)器返回的數(shù)據(jù)是HTML的格式坊夫,在項目中是使用webView來加載HTML文本實現(xiàn)展示的。但由于沒有開發(fā)文檔撤卢,自行解析HTML中的標(biāo)簽使用JavaScript代碼來處理用戶交互的話十分困難环凿,也沒有太高的技術(shù)含量,所以該項目中放棄了webView的用戶交互事件處理放吩。
由于以上原因智听,在部分界面會有按鈕點擊無效的情況,例如專題頁內(nèi)的詳情頁標(biāo)簽點擊跳轉(zhuǎn)渡紫、有聲讀物播放等到推,望各位悉知。
后記
項目介紹就先到這里了惕澎,覺得有幫助的朋友給個贊再走吧~??
如果有任何疑問歡迎在評論區(qū)留言交流莉测,謝謝各位看官的閱讀~
最后再放一次GitHub地址:https://github.com/CoulsonWang/CWOne
歡迎大家來圍觀,順便求個Star啊啊啊啊~~~