iOS高仿?一個-ONE?App

復雜世界里,一個就夠了

一個就夠了.png

前言

  • ?一個-ONE?是一款由韓寒監制,制作精良的文藝生活閱讀類App,應用精致優雅,秉承著"復雜世界里,一個就夠了"的理念。
  • 作為一個(偽)文藝的青年,很喜歡這款App精致簡練的設計與文藝范。正好近期需要寫一個比較完整的項目來練手、驗證自己的學習成果,所以著手開始寫了這個項目。
  • 花費了大概半個多月,完成了這款App的臨摹高仿。相似度高度99%。在下iOS開發行業新人,學藝不精,如有不佳之處,還望各位前輩大佬多多指點。
  • 項目GitHub地址:iOS高仿"一個-ONE"。有興趣的朋友歡迎下載運行項目查看作品效果??。如果對源碼有任何意見或建議,也歡迎在本文評論區留言或在GitHub issue me.


聲明

  1. 本文章由簡書作者Coulson_Wang原創,相應的項目由GitHub用戶Coulson_Wang編寫并開源分享。轉載分享請注明出處,謝謝。
  2. 本項目用到了以下開源三方框架,感謝各位作者的開源貢獻。
AFNetworking 用于發送網絡請求
FLAnimatedImage 用于處理gif動態圖的顯示
Masonry 用于在部分界面添加自動布局約束
MJRefresh 用于處理下拉和上拉刷新
NYTPhotoViewer 用于處理“影視”界面的圖片瀏覽
SDWebImage 用于圖片下載展示
SVProgressHUD 用于提示HUD的展示
  1. 本開源項目僅供學習交流使用,請勿用于任何商業用途。
  2. 項目中使用了原App?一個-ONE?中的圖片資源和數據。所有網絡數據通過Charles抓包獲取,在項目中已將網絡請求代碼封裝為.a靜態庫隱藏,避免擴散。如若侵犯了版權,請聯系博主的郵箱wangyuanyi1993@126.com,博主會及時刪除相關敏感內容。


項目展示

廢話不多說,直接上代碼,哦不,上gif效果圖。

  • 主界面:


    主界面展示.gif

主界面是這個項目中最復雜的界面,涉及到多個tableView的展示跳轉切換。tableView中不同類型的cell以及單獨的headerView也有各種細節需要處理。
主要實現思路是在一個scrollView上添加了3個tableView來分別展示前一天、當天、下一天的內容,在左右滾動scrollView時移動tableView的位置并刷新數據


  • 詳情頁:


    詳情頁展示.gif

詳情頁中需要展示文章內容、評論信息等。由于服務器返回的文章數據是HTML,主要實現思路是用一個tableView來處理評論列表,而頂部通過將一個webView設置為headerView來展示文章內容。其中涉及了動態計算webView高度、處理navigationBar顯示燈細節處理。


  • 專題頁:


    專題頁面展示.gif

專題頁主要涉及到tableView多個section以及header和footer的處理。其中頂部的輪播器使用了我自己封裝的一個三方框架CWCarouselView來實現。


  • 搜索界面:


    搜索界面展示.gif

搜索界面主要是在項目基礎原上做的一些擴展,調用已經寫好的主頁、詳情頁接口直接跳轉展示。其中實現了一些選擇器動畫的展示。

限于篇幅以及簡書5.0MB的圖片上傳限制,這里就不再繼續進行效果展示了,感興趣的朋友可以前往項目的GitHub地址下載項目源碼運行查看完整效果。


項目結構

  • 項目的整體架構采用了MVC的模式。開發方式使用了storyBoard+xib+代碼結合的形式。程序入口使用storyBoard搭建,由MainStoryboard負責整體結構。各個模塊的詳情界面則由控制器自行push或modal處理。storyBoard格局如圖:
storyBoard結構.png
  • 項目文件結構:
項目文件結構.png

其中:

  1. Main中包含三個模塊


    Main文件夾結構.png
  • Launch負責處理程序啟動時的啟動界面展示
  • TabBar負責處理程序的根控制器-tabBarController
  • Navigation自定義了導航控制器以及導航條,負責所有界面的導航功能
  1. ONE中包含多個模塊,負責處理主界面以及相關的衍生界面(比如詳情頁、作者頁、登錄界面、分享界面等)
  2. ALL模塊負責處理專題界面(即tabBarController的第二個控制器)
  3. ME模塊負責處理"我的"界面(即tabBarController的第三個控制器)
  4. Search模塊負責處理搜索頁以及搜索結果頁的展示與業務邏輯
  5. Other包含以下模塊


    Other文件夾結構.png
  • category包含了大量的分類文件
  • const包含一對常量文件,用于定義一些全局常量
  • lib中包含3個自己封裝的第三方庫。分別是:打包成靜態庫的網絡請求工具類,輪播器控件CWCarouselView,用于處理點贊時數字滾動的Label控件CWCalendarLabel
  • tool中包含了大量抽取出來的工具類,用于處理數據持久化、音頻播放、登錄分享、權限獲取、定位獲取等功能。


項目總結:

學而不敲則罔,敲而不學則怠。編程技術就是在不斷的學習和實踐中逐漸提升的。
在寫這個項目的過程中,讓我發現了自己其實還有很多方面的知識并沒有掌握,或是學過了但沒有印象,但是在寫項目的過程中,必然需要去復習和鞏固并加以利用。
只有不斷的學習擴充自己的知識儲備,并且不斷的投入到項目實戰中,才能真正確保自己的技術水平持續提高。

希望以后能給大家帶來更多更好的開源項目。


項目缺陷:

由于部分界面中服務器返回的數據是HTML的格式,在項目中是使用webView來加載HTML文本實現展示的。但由于沒有開發文檔,自行解析HTML中的標簽使用JavaScript代碼來處理用戶交互的話十分困難,也沒有太高的技術含量,所以該項目中放棄了webView的用戶交互事件處理。
由于以上原因,在部分界面會有按鈕點擊無效的情況,例如專題頁內的詳情頁標簽點擊跳轉、有聲讀物播放等,望各位悉知。


后記

項目介紹就先到這里了,覺得有幫助的朋友給個贊再走吧~??
如果有任何疑問歡迎在評論區留言交流,謝謝各位看官的閱讀~

最后再放一次GitHub地址:https://github.com/CoulsonWang/CWOne
歡迎大家來圍觀,順便求個Star啊啊啊啊~~~

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,841評論 25 708
  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,180評論 4 61
  • 讓我再看你一眼。 從南到北? 不是,是星空和黑夜。 陶敬掐滅了手中的煙,倚著身后的電線桿子,伸出手,搭在黃雀的肩頭...
    江槎閱讀 534評論 0 1
  • 我和T有過好多個約定。 早先約著要早睡,于是常常過了十二點,我安慰自己,現在是度日了,非熬夜也。假裝守住了這第一約...
    一團紙啊閱讀 899評論 0 2
  • 一、nginx安裝 添加ppa: 配置虛擬主機: 生成域名為名稱的nginx配置文件 修改配置文件內容 生成主機根...
    悠遠晴空閱讀 543評論 0 0