学习Coding-iOS开源项目日志(二)
继续前篇:《学习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. 自动旋转
学习Coding-iOS开源项目日志(二)的更多相关文章
- (转)直接拿来用!最火的iOS开源项目(二)
“每一次的改变总意味着新的开始.”这句话用在iOS上可谓是再合适不过的了.GitHub上的iOS开源项目数不胜数,iOS每一次的改变,总会引发iOS开源项目的演变,从iOS 1.x到如今的iOS 7, ...
- GitHub上非常受开发者欢迎的iOS开源项目(二)
"每一次的改变总意味着新的开始."这句话用在iOS上可谓是再合适不过的了.GitHub上的iOS开源项目数不胜数,iOS每一次的改变,总会引发iOS开源项目的演变,从iOS 1.x ...
- 直接拿来用!最火的iOS开源项目(二)
每一次的改变总意味着新的开始.”这句话用在iOS上可谓是再合适不过的了.GitHub上的iOS开源项目数不胜数,iOS每一次的改变,总会引发iOS开源项目的演变,从iOS 1.x到如今的iOS 7,有 ...
- 推荐大家在GitHub 上值得关注学习的 iOS 开源项目
GitHub上有很多不错的iOS开源项目,和大家特别推荐以下几个项目: 1. ReactiveCocoa GitHub链接:ReactiveCocoa/ReactiveCocoa GitHub自家的函 ...
- 直接拿来用!最火的iOS开源项目(一~三)
结束了GitHub平台上“最受欢迎的Android开源项目”系列盘点之后,我们正式迎来了“GitHub上最受欢迎的iOS开源项目”系列盘点.今天,我们将介绍20个在GitHub上非常受开发者欢迎的iO ...
- 40个GitHub上最受欢迎的iOS开源项目
40个GitHub上最受欢迎的iOS开源项目(一) http://www.weste.net/2013/8-1/92975.html 40个GitHub上最受欢迎的iOS开源项目(二) http:// ...
- 学习Coding-iOS开源项目日志(一)
前言:作为初级程序员,想要提高自己的水平,其中一个有效的学习方法就是学习别人好的项目.本篇开始会陆续更新本人对github上开源的一个很不错的项目的一点点学习积累.也就是,探究着别人写的源码,我学到了 ...
- 学习Coding-iOS开源项目日志(五)
继续,接着前面第四篇<学习Coding-iOS开源项目日志(四)>讲解Coding-iOS开源项目. 前 言:作为初级程序员,想要提高自己的水平,其中一个有效的学习方法就是学习别人好的项目 ...
- 学习Coding-iOS开源项目日志(三)
继续前两篇,接着本第三篇<学习Coding-iOS开源项目日志(三)>讲解Coding-iOS开源项目. 前 言:作为初级程序员,想要提高自己的水平,其中一个有效的学习方法就是学习别人好的 ...
随机推荐
- C语言学习016:单链表
#include <stdio.h> //定义一个链表,链表是一种递归结构,在定义的时候必须要给结构起一个名字 typedef struct folder{ int level; char ...
- 微信开发中遇到“当前页面的url未注册”问题
在公众号后台设置支付授权目录,完全按照规则去设定的,但是在实际测试中会出现“当前页面的url未注册”的问题,反复确认后发现目录并没有问题,唯一的区别就是大小写不同. 但是一般url不都是不区分大小写的 ...
- 一个疑难杂症 IIS URL区分大小写(FF的自动变换URL问题)?
(II8 VS14 CTP3 Windows7 ASP.NET WEBFORM) 在我的印象里面,IIS的URL在一般情况下面是不分大小写的. 所以下面两个URL应该是一样的. http://loca ...
- 详谈Hibernate框架关系映射!
接触Hibernate也有一小段的时间了,愈发的觉得Hibernate是个神奇的东西,为什么这么说呢?因为你可以不懂一行sql,直接面向对象,就可以将数据直接保存到数据库去!! 你还可以保存一个对象, ...
- 第 29 章 CSS3 弹性伸缩布局[下]
学习要点: 1.新版本 主讲教师:李炎恢 本章主要探讨 HTML5 中 CSS3 提供的用来实现未来响应式弹性伸缩布局方案,这里做一个初步的了解. 一.新版本 新版本的 Flexbox 模型是 201 ...
- Scalaz(44)- concurrency :scalaz Future,尚不完整的多线程类型
scala已经配备了自身的Future类.我们先举个例子来了解scala Future的具体操作: import scala.concurrent._ import ExecutionContext. ...
- Scalaz(28)- ST Monad :FP方式适用变量
函数式编程模式强调纯代码(pure code),主要实现方式是使用不可变数据结构,目的是函数组合(composability)最终实现函数组件的重复使用.但是,如果我们在一个函数p内部使用了可变量(m ...
- MySQL max_allowed_packet设置及问题
MySQL根据配置文件会限制server接受的数据包大小. 有时候大的插入和更新会被max_allowed_packet 参数限制掉,导致失败. 查看目前配置 show VARIABLES like ...
- ajax传参到实体类对应字段
之前看公司的代码,从页面ajax传参数到接口类,接口类用一个实体接收.我一直以为c#会自动识别,赋值到同名的字段. 我曾和朋友讨论过,双方辩论.朋友认为c#没有这种功能,没有这样高级匹配的机制.而我因 ...
- IO流(二)__BufferedReader和BufferedWriter
BufferedReader和BufferedWriter 字符流的缓冲区:缓冲区的而出现提高了对数据的读写效率对应类:BufferedWriter BufferedReader缓冲区要结合流才可以 ...