繼續前篇:《學習Coding-iOS開源項目日志(一)》,接着本第二篇《學習Coding-iOS開源項目日志(二)》講解Coding-iOS開源項目。
前言:作為初級程序員,想要提高自己的水平,其中一個有效的學習方法就是學習別人好的項目。本篇開始會陸續更新本人對github上開源的一個很不 錯的項目的一點點學習積累。也就是,探究着別人寫的源碼,我學到了新的什么東西?本人愚拙,而且碼齡不多,也就三年左右,水平不高,如有挫解,還望指正。 本人樂愛學習,樂於分享,廣結良緣,願意交流。當然,高手可以飄過。
Coding-iOS項目網址:https://github.com/Coding/Coding-iOS 讀者感興趣的可以自己去下載,當然項目很多第三方框架是沒有直接集成進來的,讀者自行通過該項目的提示處理。
另外還有官網介紹:https://coding.net/u/coding/p/Coding-iOS/git#rd
內容概要:
1、關於Orientations
2、關於登錄介紹頁面IntroductionViewController
3、關於NYXImagesKit
4、關於Masonry
5、關於SMPageControl
6、關於JazzHands(幀動畫庫)
7、關於APParallaxHeader
8、關於BlocksKit
9、關於ODRefreshControl
正文:
1、關於Orientations (其他的有待進一步研究,先粗略的積累認識一下)
在IntroductionViewController.m中,有以下代碼:
通過command+click點第91行的shouldAutorotate進去,發現這是父類UIViewController的一個方法,IntroductionViewController重寫了這個方法,然后接着:
這個需要了解一下,省的下次再看這個字眼,卻不熟悉。編程的經驗就是這么積累的。
2、關於登錄介紹頁面IntroductionViewController
先用Reveal的軟件看一下UI布局:
然后我們會到代碼中結合這個圖來細細看看實現的邏輯。
3、關於NYXImagesKit
github網址是:https://github.com/Nyx0uf/NYXImagesKit
NYXImagesKit 包含一組很有用的 UIImage 圖像處理方法,包括 filtering, blurring, enhancing, masking, reflecting, resizing, rotating, saving. 同時也提供了一個 UIImageView 的之類,支持異步的從 URL 下載圖像並顯示。
在這個Coding的代碼中,在適配控件圖片尺寸的時候,用了這個庫里的scaleByFactor方法。
4、關於Masonry
在200~201行添加了子控件之后,也就是添加了那個"注冊"和"登錄"兩個按鈕,然后對這兩個按鈕進行代碼的布局適配:
5、關於SMPageControl
github網址:https://github.com/Spaceman-Labs/SMPageControl
自定義UIPageControl的外觀,包括形狀、大小、間距等,也可以用圖片代替UIPageControl上的小圓點。
6、關於JazzHands(幀動畫庫)
在Conding項目的代碼文件IntroductionViewController.h中,發現這個IntroductionViewController就是直接繼承某個沒看過的類:
然后一開始我就搜索這個"IFTTTAnimatedPagingScrollViewController"發現在百度找不到好東西,還是去Google搜"IFTTTAnimatedPagingScrollViewController"還是找到好東西了:簡書:http://www.jianshu.com/p/50908733a4dd 這一篇很值得學習的寫了很多的關於這個幀動畫庫的使用哦。
其實應該直接搜"IFTTTJazzHands",這里我就不搜了,留給讀者自己去探索,其實探索未知的新的收獲,也是挺有趣的過程。
下面就針對Conding中使用的這個ScrollViewController的IFTTTAnimatedPagingScrollViewController來進行學習:
對於其中上圖中280~282行中的那個困惑,下面我用簡單的工程代碼進行測試,測試之前要說幾句這個苦逼的探究學習過程,因為沒有注意到Coding用的JazzHands第三方框架用的是pod 'JazzHands', '2.0.0',而我自己新建工程,然后自己Pod的JazzHands版本卻是pod 'JazzHands', '~> 2.0.8',結果造成后面自己模仿Coding的使用方法,卻遇到了很奇怪的問題。問題的原因就是新版本的JazzHands重構了,方法用法都不一樣了。
下面直接用自己新建的簡單的項目並使用的最新版本pod 'JazzHands', '~> 2.0.8'來實現自己的邏輯:
實現的代碼解析:
①新建一個工程之后,並為這個工程通過cocoapod集成需要的第三方框架,如下圖。
Cocopods的使用具體步驟,可以閱讀本人的《CocoaPods的安裝(圖文並茂)OS X 10.11 系統》和《CocoaPods的使用(圖文並茂)OS X 10.11 系統》。
②然后,本人比較偏好純代碼,所以對原工程進行簡單的處理,刪掉storyboard,並去除設置工程默認通過main.stroyboard啟動,然后在AppDelegate.m中直接創建ViewController作為根控制器:
③另外需要使用第三方很好用的PageControl,所以我直接將源碼拖進去了,就兩個文件一個類,然后在ViewController.m文件中導入和使用:
④需要的資源圖片文件,這里略過。
⑤直接在ViewController使用JazzHands框架中的自定義ScrollView:IFTTTAnimatedPagingScrollViewController
⑥源代碼接下來會在下載鏈接給出,這里對關鍵的代碼進行詳解:
提供源代下載百度雲鏈接: http://pan.baidu.com/s/1nv0AE2P 密碼: cy56
最后提兩句,如果對本人這個Test項目基本弄懂了之后,然后再看看Coding對舊版本的JazzHands的使用,也就不難了。
7、關於APParallaxHeader
這個是添加類似個人微博首頁的第三方框架,很好用的哦,github網址是:https://github.com/apping/APParallaxHeader,然后我之前自己也寫了個簡單的《iOS之UI--微博個人詳情頁》
效果就是這樣,不過這個APParallaxHeader倒是很好用啊。要好好學習學習。
但是有一個使用細節需要補充,也是經過代碼驗證的:
以上代碼就能實現微博個人首頁的上半部分圖片首頁的效果,是不是很簡單,比我的《iOS之UI--微博個人詳情頁》效果簡單多了吧。但是,我進一步探究這個APParallaxHeader對我自定義的UIImageView對象MineMainView是否帶來frame的重新設置,我通過在MineMainView中重寫兩個方法:
但是layoutSubView也不好被使用,因為滾動tableview,這個layoutSubView的方法會不斷的Log打印,說明這個方法會不斷的被調用。如果在這個方法中,不斷的布局子控件,這樣性能肯定是不好的。
8、關於BlocksKit
這個又是一個很不錯的第三方框架,github網址是:https://github.com/zwaldowski/BlocksKit,可以通過Cocopods集成到你的項目中去。
下面就直接講講Coding項目中的用到的地方:
粉絲按鈕對應的代碼,我們來看看:
我們同時來看看這頁.m文件的頭文件.h:
這個EaseUserHeaderView包含了很多子的UIView,比如_fansCountBtn,然后這個_fansCountBtn就通過block對外提供傳入點擊事件的接口。那么我們再來看看這個EaseUserheaderView是如何被使用的:
好了,看到用起來是不是很不錯,可以將一個View的子View的點擊事件通過block解耦到控制器上去,這樣的解耦設計非常不錯。
最后我們可以通過command+click點擊下面的代碼:
具體BlocksKit源代碼怎么樣的,就留給你們自己去查看吧!
相信你能找到更多的用途,歡迎分享哦。
9、關於ODRefreshControl
這個是個挺好看的刷新動畫框架,那個下拉的動畫類似QQ粘性布局的動畫,還記得QQ消息數量提示的紅色點嗎?你拖拉它會有粘性的拉長的效果。
github地址:https://github.com/Sephiroth87/ODRefreshControl,下面截個效果圖預覽一下:
好了,接下來就看看Coding-iOS中是怎么用的?
額外積累的英語:
1、autorotation [,ɔ:təurəu'teiʃən] : n. 自動旋轉