在平时的
iOS
开发过程中,少不了要使用很多的框架,一个适合的框架能够将开发效率提高几倍,这里将一些不错的Swift
框架收集起来,有需要的可以收藏一下。
弹框提示
XLActionControllerXLActionController
是一个支持各种自定义的底部选择框。
SCLAlertView
参考文章:
PopupDialog 预览图
PopupDialog
是一个非常不错的 AlertView
框架,支持各种自定义。
SwiftMessages
SwiftMessages
是一个信息提示框架,可以自定义提示位置和样式。
AMPopTip
AMPopTip
是一个漂亮的气泡文字提示框架,并且支持 Objective-C
和 Swift
。
EasyTipView
EasyTipView
是一个完全可自定义的提示视图框架。
动画框架
HeroHero
是为了构建 iOS
试图控制器过渡动画的库,它在 UIKit
繁琐的过渡动画 API
之上提供了一个层,使得自定义过渡动画对于开发人员来说是一个轻松的任务。
参考文章:
EasyAnimation
在动画实现过程中,一个看似简单的效果往往需要大量的代码,尤其是作用于 layer
上的动画,为此有了 EasyAnimation
这个库,这个库可以将 Layer Animations
写成 View Animations
的样式。
参考文章:
Spring
Spring
是一个使用非常简单的动画框架。
PeekPop
PeekPop
是一个 3D Touch
动画框架。
Animations
图片显示
KingfisherKingfisher
是一个轻量、纯 Swift
的库,可以从网络中异步下载和缓存图片,相当于 Swift
版的 SDWebImage
。
参考文章:
Onboard
Onboard
是一个导航页框架,只需几行代码,即可轻松创建漂亮,引人入胜的用户指导页体验。
参考文章:
FSPagerView
FSPagerView
是一款基于 UICollectionView
实现的多功能轮播器,具有以下特点:
- 支持无限轮播和自动轮播。
- 丰富的内置
3D / 2D
切换效果。 - 带有预定义的轮播图单元格,支持完全自定义单元格。
- 支持在
Swift
和Objective-C
两种语言中使用。 - 支持完全自定义的
Page Control
。
TZImagePickerController
TZImagePickerController
是一个支持多选、选原图和视频的图片选择器,同时有预览、裁剪功能。
ZLPhotoBrowser 预览图
ZLPhotoBrowser
是一个方便易用的相册多选框架,支持预览/相册内拍照、预览快速多选照片,3DTouch
预览照片,编辑裁剪图片,编辑视频,混合多选 image、gif、Live Photo 及 video
,相册混合选择,原图功能,支持多语言国际化(中文简/繁,英语,日语),在线下载 iCloud
端图片,自定义最大选择量及最大预览量,自定义照片升序降序排列,自定义照片显示圆角弧度,支持预览网络及本地图片。
功能介绍:
- 支持横竖屏 (已适配
iPhone X
) - 预览快速选择、可设置预览最大数
- 直接进入相册选择
- 支持滑动多选
- 裁剪图片(可自定义裁剪比例)
- 编辑视频
- 查看、选择
gif、LivePhoto(iOS9.0)、video
-
3D Touch
预览image、gif、LivePhoto、video
- 混合选择
image、gif、livePhoto、video
- 在线下载
iCloud
照片 - 控制选择
video
最大时长 - 多语言国际化(中文简/繁、英文、日文)
- 相册内拍照按钮实时显示镜头捕捉画面
- 已选择图片遮罩层标记
- 预览已选择照片
- 预览网络及本地照片(支持长按保存至相册)
- 相册内图片自定义圆角弧度
- 自定义升序降序排列
- 多张拍照
CBPic2ker
CBPic2ker
是一个简单的 iOS
照片选择器,界面非常简洁。
预览图
PYPhotoBrowser
是一个 iOS
中使用简单的图片浏览器,支持流水布局 、 线性布局,支持单击 、双击 、捏合 、旋转、拖拽、侧滑手势,主要用于社交 App
,用于呈现一组图片。
颜色管理
ChameleonChameleon
是一个轻量却功能强大的 iOS
(支持 Objective-C
和 Swift
)颜色框架软件,它基于的理念是:软件应用程序应该可以不费力气且同时保持多个漂亮的界面,使用 Chameleon
,你不再需要调配 RGB
值,不用浪费时间去找你的 APP
合适的颜色组合,也不用担心你 APP
的文字是否能在不同背景色上可读。
参考文章:
DynamicColor
DynamicColor
是一个用于操作颜色的 Swift
扩展。
权限请求
PermissionScopePermissionScope
是一个请求权限的封装库,可以很方便的请求系统的权限。它不只包含简单的权限请求 UI
,还有统一的权限 API
可以告诉你任意给定的系统权限的状态,当然也可以轻松地请求它们。
参考文章:
RequestPermission 预览图
RequestPermission
是关于使用可定制的视觉效果管理权限,美丽的对话增加了批准的机会,这在我们要求通知时很重要,该模块的简单控制可节省开发时间,您可以开始使用这个项目,只需两行代码就能轻松自定义。
网络请求
Alamofire-
Alamofire
的前身是AFNetworking
,AFNetworking
是iOS
和OS X
上很受欢迎的第三方HTTP
网络基础库。 -
其实
AFNetworking
的前缀AF
便是Alamofire
的缩写。 -
Swift
发布后,AFNetworking
的作者又用Swift
语言写了个相同功能的库,这便是Alamofire
。 -
Alamofire
本质是基于URLSession
,并做了封装。使用Alamofire
可以让我们网络请求相关代码(如获取数据
,提交数据
,上传文件
,下载文件
等)更加简洁易用。
参考文章:
JSON
HandyJSON
是一个用于 Swift
语言中的 JSON
序列化 / 反序列化库,相当于 Swift
版的 MJExtension
和 YYModel
,能够将 JSON
和 模型
相互转化,可以和 Alamofire
搭配使用。
模型转 JSON(序列化)
class Person: HandyJSON {
required init() {}
var name: String!
var age: Int!
}
let person = Person()
person.name = "张三"
person.age = 20
print(person.toJSON()!) // 转换成 Dictionary 字典
print(person.toJSONString()!) // 转换成 JSON 字符串
print(person.toJSONString(prettyPrint: true)!) // 转换成有格式的 JSON 字符串
JSON 转模型(反序列化)
let json: NSDictionary = ["name": "张三", "age": 20]; // 可以是 JSON 字符串,也可以是字典(只能 NSDictionary)
if let person = Person.deserialize(from: json) {
print(person.name)
print(person.age)
}
JSON
SwiftyJSON
是个使用 Swift
语言编写的开源库,可以让我们很方便地处理 JSON
数据(解析数据、生成数据),和 HandyJSON
有着完全不同的作用,是将 iOS
自带的 JSONSerialization
大大的简化了。
JSONSerialization 复杂代码
if let dataArray = try? JSONSerialization.jsonObject(with: data, options: .allowFragments) as? [[String: Any]],
let user = dataArray[0]["user"] as? [String: Any],
let name = user["name"] as? String {
print(name)
}
SwiftyJSON 简化代码
let json = JSON(data: data)
if let name = json[0]["user"]["name"].string {
print(name)
}
Alamofire.request(URL, method: .get, parameters: parameters, encoding: URLEncoding.default).responseSwiftyJSON { dataResponse in
print(dataResponse.request)
print(dataResponse.response)
print(dataResponse.error)
print(dataResponse.value)
})
参考文章:
Moya
Moya
是你的 App
中缺失的网络层。不用再去想在哪儿或者如何安放网络请求,Moya
替你管理。Moya
是一个基于 Alamofire
的 Networking library
,并且添加了对于 ReactiveCocoa
和 RxSwift
的接口支持,大大简化了开发过程,是 Reactive Functional Programming
的网络层首选。
参考文章:
简化编程
ReactiveCocoa参考文章:
RxSwift
参考文章:
PromiseKit
PromiseKit
是一个异步编程类库,提供了很多实用的异步函数,让异步编程更简单。
参考文章:
Material
Material
是一个用于创建漂亮应用程序的材料设计库,就如同它的名字一样,其中包含了大多数开发中需要的控件,并且也提供了非常多基础类的扩展,能够大大的简化我们的代码。
EZSwiftExtensions
EZSwiftExtensions
对 Swift
标准库、 Foundation
、 UIKit
提供了很多高级扩展函数。
下面举几个例子,具体用法在 GitHub
上都有。
var myArray = ["charmander","bulbasaur","squirtle","charmander"]
print(myArray.get(1)) // "bulbasaur"
print(myArray.random()) // 数组中随机一个
print(myArray.indexesOf("charmander")) // [0,3]
print(myArray.containsArray(["charmander","bulbasaur"])) // true
print(myArray.containsArray(["string"])) // false
let myView = UIView(x: 0, y: 0, w: 100, h: 100)
print(myView.frame) // (0.0, 0.0, 100.0, 100.0)
print(myView.x) // 0.0
print(myView.y) // 0.0
print(myView.w) // 100.0
print(myView.h) // 100.0
myView.x = 115 // 还可以改变数值
print(myView.x) // 115.0
let myColor = UIColor(r: 100, g: 100, b: 100) // 默认 alpha 为 1
开发调试
Dotzu 预览图GDPerformanceView
GDPerformanceView
可以在状态栏上方显示 FPS
、CPU
使用情况、App
和 iOS
版本,并通过 Delegate
报告 FPS
和 CPU
使用情况。
扫二维码
预览图swiftScan
是一个二维码库,支持各种码识别、生成、以及界面效果。
功能介绍:
- 扫码框周围区域背景色可设置
- 扫码框颜色可也设置
- 扫码框4个角的颜色可设置、大小可设置
- 可设置只识别扫码框内的图像区域
- 可设置扫码成功后,获取当前图片
- 根据扫码结果,截取码的部分图像(在模仿qq扫码界面,扫码成功后可看到)
- 动画效果选择:线条上下移动、网格形式移动、中间线条不移动(一般扫码条形码的效果)
预览图
SGQRCode
是一个二维码库,支持各种码识别、生成、以及界面效果,是一个 OC
框架。
功能介绍:
- 普通二维码生成
- 彩色二维码生成
- 带有小图标二维码生成
- 根据光线强弱开启手电筒
- 从相册中读取二维码
- 扫描成功之后提示音
- 扫描成功之后界面之间的跳转
- 扫描界面仿微信(请根据项目需求,自行布局或调整)
- 扫描界面可自定义(扫描线条以及网格样式)
数据存储
Realm参考文章:
iCloud 钥匙串
Valet
允许你安全的在 iOS
或 OS X
钥匙链中存储数据,而不需要掌握任何钥匙链如何工作的知识。它支持在一台设备的多个应用(同一个开发者)间分享数据,以及在一个应用中在多个设备间利用 iCloud
进行分享,同时支持 Touch ID
。
SwiftyUserDefaults
SwiftyUserDefaults
让 UserDefaults
用起来很愉悦,通过结合意味深长的 Swifty API
和静态输入的益处,在一个地方定义键,轻松地使用值类型,获得额外的安全性和方便的编译时检查,这些都是免费的。
参考文章:
GVUserDefaults
参考文章:
时间日期
FSCalendarFSCalendar
是一个完全自定义的 iOS
日历库,兼容 Objective-C
和 Swift
,支持横向、纵向滑动模式,全屏模式,带有子标题、事件设置等功能。
参考文章:
Timepiece
Timepiece
是一个直观的日期处理框架。
DateTools
DateTools
是一个让时间日期处理起来更加简单的一个框架,并且 Swift
和 Objective-C
版本都有 。
参考文章:
界面显示
IGListKitIGListKit
是 Instagram
推出的新的 UICollectionView
框架,使用数据驱动,旨在创造一个更快更灵活的列表控件。
参考文章:
DZNEmptyDataSet
在 iOS
开发中,经常会遇到页面无数据的情况,当没有数据时,页面一片空白,顿时令用户心情很不好,DZNEmptyDataSet
能够帮助你避免这个情况,不过 DZNEmptyDataSet
只有 OC
版本,在 Swift
中需要混编使用。
参考文章:
Charts
参考文章:
DGElasticPullToRefresh
DGElasticPullToRefresh
是一个下拉刷新控件,具有非常棒的动画效果。
JSBadgeView
JSBadgeView
是一个可以自由定制的角标控件,使用起来也非常简单,暂时只有 Objective-C
版本。
参考文章:
DACircularProgress
DACircularProgress
是一个用来显示加载进度的控件,暂时只有 Objective-C
版本。
导航栏页
WRNavigationBarWRNavigationBar
是一个导航栏设置工具,能够一行代码设置状态栏、导航栏按钮、标题、颜色、透明度,移动等。
参考文章:
KMNavigationBarTransition
KMNavigationBarTransition
是一个用来统一管理导航栏转场以及当 push
或者 pop
的时候使动画效果更加顺滑的通用库,并且同时支持竖屏和横屏。
使用时不用 import
任何头文件,全部通过 Method Swizzling
在底层做了处理,你不用为这个库写一行代码,所有的改变都悄然发生。
本库的设计理念是使用者只用关心当前 view controller
导航栏的背景样式,而不用在 push
或者 pop
的时候处理各种背景样式。
当 push
的时候本库会保存消失的 view controller
导航栏的背景样式,当 pop
回去后就会还原成以前的样式,因此你不用考虑 pop
后各种导航栏样式改变的情况。同时你也不必考虑 push
后的情况,因为这个是被 push
的 view controller
本身需要考虑的。
SAHistoryNavigationViewController
SAHistoryNavigationViewController
是一个导航栏页面返回的库,当你重按返回按钮的时候,你可以选择之前 push
过的任何一个页面来返回,效果非常酷炫。
TLYShyNavBar TLYShyNavBar
TLYShyNavBar
可以帮助你在页面滚动时自动隐藏导航栏。
表格视图
MGSwipeTableCell.gifMGSwipeTableCell
是一个易于使用的 UITableViewCell
子类,允许显示带有多种转换的可滑动按钮。
参考文章:
SWTableViewCell
SWTableViewCell
也是一个易于使用的 UITableViewCell
子类,允许显示带有多种转换的可滑动按钮,是一个 Objective-C
框架。
SwipeCellKit
SwipeCellKit
也是一个易于使用的 UITableViewCell
子类,允许显示带有多种转换的可滑动按钮。
滑动菜单
SwipeTableView SwipeTableViewSwipeTableView
可以实现不同菜单的左右滑动切换,同时支持类似 tableview
的顶部工具栏悬停(既可以左右滑动,又可以上下滑动),兼容下拉刷新,自定义 collectionview
实现自适应 contentSize
还可实现瀑布流功能,是一个 Objective-C
框架。
RKSwipeBetweenViewControllers
RKSwipeBetweenViewControllers
能够实现在不同页面之间左右滑动切换,是一个 Objective-C
框架。
SwipeViewController
SwipeMenuViewController SwipeMenuViewController SwipeMenuViewController
SwipeMenuViewController
也是一个可以实现页面左右滑动的一个框架。
侧滑页面
MMDrawerControllerMMDrawerController
是一个侧滑视图控制器,它的设计目的是支持越来越多的应用程序来利用侧滑,是一个 Objective-C
框架。
REFrostedViewController
REFrostedViewController
是一个侧滑控制器,这个框架是将整个视图侧滑出来,而不是将原来的视图给推过去,可以满足一下不同的需求,是一个 Objective-C
框架。
MSDynamicsDrawerViewController
MSDynamicsDrawerViewController
也是一个侧滑控制器,并且侧滑过程中会有一个反弹的动画效果,是一个 Objective-C
框架。
JVFloatingDrawer
JVFloatingDrawer
是一个浮动样式的侧滑页面,利用侧滑页面的应用程序越来越多,这个框架的侧滑效果看上去非常的棒。
CWLateralSlide
CWLateralSlide
是一个非常简单的侧滑抽屉框架,目前有一些侧滑框架适用场景的局限性很高,且固定死的模板,比如设置一个 leftVC
,rightVC
,middleVC
为 TabbarVC
(根控制器),如果我要使用这种方式来实现侧滑,就必须根据它的要求来调整我们整个 APP
的架构,侵入型很高,新项目还好,老项目只能说,o shit!😁。假如界面要换交互方式,由于耦合高,替换成本是比较大的,而且侧滑的抽屉界面会一直存在内存里,展示在我们看不见的地方(屏幕外,或者根控制器下边)。
我们的优势: 没有所谓的 leftVC
,rightVC
,对整个项目没有任何限制和依赖,不需要设置啥 XXXTabbarController
这种根控制器,也没有任何需要继承自某某类~真正的0耦合、0侵入、0污染。使用极致简单,真正的大白话操作。侧滑的控制器拥有完整的生命周期函数调用。也就是说,侧滑的界面在隐藏的情况下,并不会对 App
产生额外的内存占用(正确的被释放)最重要的是简单:只要一行代码就能拥有一个侧滑抽屉。
FDFullscreenPopGesture
FDFullscreenPopGesture
是一个简单的全屏侧滑返回框架,低耦合十分的轻量级。
其他框架
SnapKit.png参考文章:
AsyncDisplayKit
AsyncDisplayKit
是 Facebook
在 2014
年开源的一个异步界面渲染库,她是构筑于 UIKit
之上的一个封装库,与 UIView
是平级的关系(同时提供 UIView bridge
接口)。
参考文章:
FileKit
FileKit
是一个 Swift
框架,可以用来简单而直观地进行文件管理。
参考文章:
DeviceKit
DeviceKit
是 UIDevice
的值类型替换,可以轻松获取设备信息和电池电量。
RandomKit
RandomKit
是一个简单易用的随机数据生成框架,RandomKit
基于一系列接口构建,因此我们也能非常方便地按相同风格添加一些自定义随机数据类型。
参考文章:
SwiftyStoreKit
SwiftyStoreKit
是一个轻量的 App
内购框架,支持 iOS 8.0+
,tvOS 9.0+
和 macOS 10.10+
。
CryptoSwift
CryptoSwift
是一个加密相关的帮助函数实现,支持 md5
、sha1
、sha224
、sha256
等等。
IQKeyboardManager
IQKeyboardManager
是 iOS
中解决键盘弹起遮挡 UITextField / UITextView
的一种很实用的工具,无需输入任何代码,不需要额外的设置,使用 IQKeyboardManager
的你只需要将源文件添加到项目,并且支持 Objective-C
和 Swift
。
参考文章:
将来的你,一定会感激现在拼命的自己,愿自己与读者的开发之路无限美好。