此项目已经停止维护,请使用功能更强大的 ProHUD 。
Android 有原生的 SnackBar ,iOS 没有与之相似的原生控件,GitHub 上好像也没有找到特别好用的开源库。
既然在 Android 平台上能够作为原生控件存在,足以说明这种需求不算太不小众,在 iOS 端,类似的需求可能被 UIAlertController、MBProgressHUD 来替代,但是他们都需要打断用户当前正在进行的事情,体验很不好。GitHub 上有一个开源库 NoticeBar ,模仿QQ的实现效果,虽然有200+的Star,个人感觉 UI 和可定制性都不够理想,于是自己写了一个模仿系统原生通知样式的易于定制的 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 |
设置notice
// 按钮事件 |
还有更多设置,例如:警示(alert)、禁止被用户通过手势移除、设置正文最大高度等。
移除通知
// 移除某个通知 |
post 进度
设置任意一条 notice
实例的 progress
属性,即时生效。
// 进度为0 |
post 自定义 view
NoticeBoard 开源库提供了极大的自由度,你可以只享受 NoticeBoard 提供的对 Notice 管理策略(post、remove、手势、过渡动画),而不使用现有的 Notice 的默认 UI,做法就是创建一个空白的 Notice 实例,添加自定义的视图。
let notice = Notice() |
根据这一特性,你可以继承 Notice ,重写初始化方法, 从而创建符合公司内部 UI 要求的 Notice 。
多个通知的布局
如果同一时间需要存在多个通知,可以根据使用场景选择不同的布局方式:
// 平铺,默认(所有通知都可见,但是通知过多会超出屏幕) |
设置Level
默认提供了四种level:
// case low = 4000 |
也可以直接设置任意数值:
notice.windowLevel = 1000 |
在Swift和Objective-C中使用
NoticeBoard使用 Swift4.1
语言编写,如需在 Objective-C
项目中使用,可以采用 Objective-C
和 Swift
混编的方式。
源码和文档链接
此项目已经停止维护,请使用功能更强大的ProHUD。