Android 有原生的 SnackBar ,iOS 没有与之相似的原生控件,GitHub 上好像也没有找到特别好用的开源库,于是自己写了一个模仿系统原生通知样式的易于定制的 NoticeBoard 。
NoticeBoard 的功能定位是应用内消息控件,相对于系统通知,它显而易见的优点是:简单易用、可定制性强,相对于原生的 UIAlertController 和开源的 MBProgressHUD ,它的优点是专为这种特定场景而生:只需要告诉用户发生了什么,不必立即处理,或者可以稍后再处理。
演示如何使用
强烈建议感兴趣的朋友亲自下载 源码 运行 Example
项目,因为项目中提供了大量的演示程序,通过这些演示你可以清楚地了解到使用方法及其效果。
导入 NoticeBoard
如果要在工程项目中使用NoticeBoard,需要在 Podfile
中添加这一行:
pod 'NoticeBoard'
快速 post 示例
最简单的,你可以直接发送一条 "Hello World!" :
NoticeBoard.post("Hello World!")
用户可以像移除系统原生通知那样拖拽一条通知往上方移动丢出屏幕外,如果你希望消息自动消失,需要传入消息的持续时间:
NoticeBoard.post("Hello World!", duration: 2)
或者直接发出一条警告消息:
NoticeBoard.post(.warning, title: "电量过低", message: "电量不足10%,请及时给设备充电。", duration: 10)
标准 post 步骤
// 创建notice
let notice = Notice.init(title: "标题", icon: UIImage.init(named: "alert-"), body: "正文")
// 设置notice
...
// 发布notice
NoticeBoard.shared.post(notice, duration: 2)
设置notice
// 按钮事件
notice.actionButtonDidTapped { (notice, btn) in
print("点击了'→'按钮")
}
// 设置颜色主题
notice.themeColor = .init(red: 0.2, green: 0.3, blue: 0.4, alpha: 1)
// 模糊背景(暂时只支持iOS11,在之前的系统会自动改为纯色背景),和纯色背景可以同时使用
notice.blurEffectStyle = .light
还有更多设置,例如:警示(alert)、禁止被用户通过手势移除、设置正文最大高度等,详见 文档 。
移除通知
// 移除某个通知
NoticeBoard.shared.remove(notice)
// 清空
NoticeBoard.shared.clean()
自定义 view
NoticeBoard 开源库提供了极大的自由度,你可以只享受 NoticeBoard 提供的对 Notice 管理策略(post、remove、手势、过渡动画),而不使用现有的 Notice 的默认 UI,做法就是创建一个空白的 Notice 实例,添加自定义的视图。
let notice = Notice()
notice.rootViewController?.view.addSubview(myView)
NoticeBoard.post(notice)
根据这一特性,你可以继承 Notice ,重写初始化方法, 从而创建符合公司内部 UI 要求的 Notice 。
源码和文档链接
这一篇是简化版,还有更多功能,详见 博客原文 。
如果你已经下载了 项目源码 并且开始使用了,请搭配阅读 开发文档 。
如果你觉得我的工具有用,烦请前往 GitHub 点个赞以支持。目前的 Star 个数是: