总结一些iOS项目中组织代码的方法

前言

总结一些组织代码的方法,大到各个子项目模块之间,小到单个文件内部,涉及到了CocoaPods私有库、Carthage构建私有Framework、项目内Group和文件夹、类内用Category组织、文件内的#pragam mark、// MARK -。虽然有些老生常谈,就当是重新梳理一遍吧=。=。

对组件化与模块化的思考与总结

前言

前段时间反复研读了蘑菇街 App 的组件化之路蘑菇街 App 的组件化之路·续iOS应用架构谈 组件化方案,然后又找到了其它一些研究组件化、模块化方案的文章,但是总觉得差点什么,所以还是决定从头开始思考。文章的标题起的好宽泛,感觉给自己挖了个深坑-。-,其实只是自己对组件化、模块化的一些看法、总结。

开源项目-TTGTagCollectionView

更新

  • 2017-02-27: 增加两种Alignment布局类型;增加点击前的回调判断;增加选中Tag上限
  • 2016-12-25: 不再依赖UICollectionView,减少了位置刷新次数,提高性能;增加了alignment属性,可以靠左中右排列
  • 2016-10-29: 增加Tag的阴影和ContentInset的设置,更新了Demo
  • 2016-10-17: 增加了水平滑动;Autolayout适配;UITableViewCell例子等
  • 2016-02-18: 修复了超长标签导致排版错误的Bug

前言

这段时间做项目的时候,总是需要显示一些“标签”样式的内容,但是又找不到用的顺手的库,所以琢磨了几天,自己实现了出来,就有了这个库:TTGTagCollectionView。如果只需要显示文字标签的话,直接使用TTGTextTagCollectionView,需要自己定义标签的话,就用TTGTagCollectionView,效果如下:

ScreenShot

支持五种布局排版:

Alignment

CocoaPods: pod "TTGTagCollectionView"
Carthage: github "zekunyan/TTGTagCollectionView"

Github地址: https://github.com/zekunyan/TTGTagCollectionView

有趣的Autolayout示例3-Masonry实现

更新

  • 2016-06-02: 感谢我不是蜡笔小新但是我有小白,发现了Case 2的最后两个cell展开动画问题,原来是tableView的estimatedRowHeight会跟展开动画冲突的缘故。
  • 2015-12-23: 感谢XVXVXXX的PR,Case 1不再需要Fake Header View,直接用contentInset就好~
  • 2015-12-17:Case3的等间距,用UIStackView实现最优雅,但是无奈只有iOS9以上支持。兼容方案如OAStackView也可以,但是在UITableViewCell里面用,或者需要频繁的增减内部View的数量时,性能损耗有点厉害,会卡。所以,还是要看需求=。=

前言

第三篇来了。
依然是3个小例子,主要部分用Masonry手写代码实现,其它的约束在storyboard里面直接拖拽搭建。
至于为啥不用VFL,主要是因为它的“描述性”的写法很容易出错,没有补全、不好调试,写起来没有“代码”的感觉=。=。当然,这个仁者见仁智者见智~
三个例子分别是:Parallax Header动态变高度的UITableViewCell,以及两种方式实现等间距。原理其实都很简单,例子也都是平时积累起来的。

前两篇:

Github地址:
https://github.com/zekunyan/AutolayoutExampleWithMasonry

Gif示例

Swift写的库-TTGSnackbar

更新

  • 2016-12-25: 增加多行文本的支持,增加阴影
  • 2016-10-20: 增加ContentInset,也就是Padding的属性;增加自定义内容View; 版本1.3.0
  • 2016-10-17: 支持Swift3;增加的顶部Top位置动画;增加同时两个Action按钮;增加带图片icon显示
  • 2016-03-25: 版本更新到了0.5.1,补充些说明、示例

TTGSnackbar

用Swift写了个简单的控件库:TTGSnackbar,模仿Android的Snackbar。目前更新到了版本1.3.0。支持多种动画,增强了自定义。

Github: https://github.com/zekunyan/TTGSnackbar

Screenshot

Gif

Screenshot

有趣的Autolayout示例2-Masonry实现

前言

Masonry写的Autolayout示例又来了,仍然是三个小例子,分别是变高度的UITableViewCell、topLayoutGuide与bottomLayoutGuide,还有自定义的baseline,外加两个基本的知识点讲解,说不上“有趣”=。=,比较基础,写了很多,各位随意看看吧~

Github地址:
https://github.com/zekunyan/AutolayoutExampleWithMasonry

Gif示例

解决iOS项目的版本兼容问题-结合宏、Category和Runtime

更新

2015-11-16

感谢微博好友@zyyy_000的评论,补充了为什么要在+ (void)load方法里面做Method Swizzling

前言

最近,在做项目时,因为某种原因,突然要“适配”iOS6(也是醉了。。。),保证极少数的iOS6用户可以“用上”新的版本。哪怕界面上有瑕疵,只要功能正常就行。于是就只好花几天时间对iOS6进行紧急适配(心中一万头驼羊奔跑而过。。。)

本文总结了一些常规的,和“非常规”的iOS项目向老版本兼容的办法,结合了宏定义CategoryRuntime,大家看着消遣一下就好哈~

用Runtime的手段填充任意NSObject对象的nil属性

前言

好久没有写东西了,忙啊。

前段时间参加了一下我们华科联创的HackDay(本人在读研=。=,目前在阿里实习),作品是一款实时在线对战游戏 - 波波攒,(介绍请看知乎
从iOS游戏客户端(用的SpriteKit)到后台(PHP CI + Node + SocketIO + MySQL)全是自己一个人倒腾出来的,做了一把真正的全栈工程师,爽啊~
后面会完善整个游戏,增加角色、优化啥的,过上一段时间会上线的哈~

回到正文,本文主要介绍了怎么用Runtime的手段遍历任意NSObject对象的所有property,检查其值是否是nil,是的话根据其类型为其填充一个默认值。
Runtime毕竟是个“危险”的技术,本文的代码只是个初步的尝试。

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器