测试已测试 | ✗ |
语言语言 | SwiftSwift |
许可协议 | MIT |
发布最后发布 | 2017年3月 |
Swift版本Swift版本 | 3.0 |
SPM支持SPM | ✗ |
由devedbox维护。
AXBadgeView-Swift是一个徽章视图管理类,是之前我写的AXBadgeView的Swift版本(以下的介绍中统一使用 Strong>AXBadgeView),在新版本中没有太大的改动,主要是将原有的功能以Swift方式实现,使用方法相同。
Strong>AXBadgeView是一个徽章视图,继承自 Strong>UILabel,子类实现完成了UI的自动布局,自动计算content的bounds大小,并且可以通过指定 minSize
来实现徽章视图最终的bounds大小。
Strong>AXBadgeView 使用自动布局来控制显示位置,为什么要使用自动布局呢?在我之前的一个项目中,我使用了一个第三方的徽章视图管理类,在GitHub上的Stars数量还很多,但是我使用后发现,布局有问题。在发现问题之后,我就去看了看源码,结果问题一目了然,那个类没有使用自动布局。那么在这样一个对布局精确度要求很高的地方,使用自动布局可以减少很多布局上的隐患。实际上,我也推荐使用自动布局,因为自动布局的强大之处已经不用我多说了。
Strong>AXBadgeView 中如何控制徽章视图的显示偏移量呢?通过设置徽章实例的 offSets
属性来控制,` 的默认值采用了
CGFloat.max
和 CGFloat.min
两个值,max 表示 x 的最大值或 y 的最小值,min 用来表示 x 的最小值和 y 的最小值。` 的默认值是
(CGFloat.max, CGFloat.min)
,表示 x 的最右边和 y 的最上边,也就是 superView 的右上角。那么,在使用过程中,如果想表示边界值,就可以通过以上两个值来表示,而不需要手动计算 superView 的高度和宽度。如果想要指定特定的 offSets
值,也可以设置这个属性,坐标系是iOS的默认坐标系。
以上对 Strong>AXBadgeView 已经做了一定的介绍,那么这里做一些总结性的说明,除了以上介绍的功能外, Strong>AXBadgeView还具有以下特性:
- 设置显示“99+”样式的数字,可以自定义显示的数字。
- 自定义显示样式。
- 自定义动画效果。
- 当内容为
0
时可以设置隐藏。- 当内容更新时,是否动画更新内容。
Strong>AXBadgeView 默认提供了4种样式,每一种样式显示的内容都不同,在使用过程中可以根据需求设置不同的样式以达到最佳效果。样式默认为 `.Normal
`。使用过程中可以指定 `style
` 来确定显示的样式和内容:
enum AXBadgeViewStyle: Int {
/// Normal shows a red dot.
case Normal
/// Number shows a number form text.
case Number
/// Text shows a custom text.
case Text
/// New shows a new text.
case New
}
new
` 文本。通过代码实现更改样式:
objective-c:
_showsView.badgeView.style = AXBadgeViewNew;
swift:
showsView.badgeView.style = AXBadgeViewStyle.New
Strong>AXBadgeView 提供了4种动画,每一种动画都有不同的显示效果。在使用过程中可以设置不同的动画类型来实现不同的显示效果。动画默认为 `.None
` 即无动画。那么在设置相应的动画类型时,可以通过设置 `animation
` 来指定相应的动画类型:
enum AXBadgeViewAnimation: Int {
/// Animation none, badge view stay still.
case None
/// Animation scale.
case Scale
/// Animation shake.
case Shake
/// Animation bounce.
case Bounce
/// Animation breathe.
case Breathe
}
代码示例:
objective-c:
_showsView.badgeView.animation = AXBadgeViewAnimationScale
swift:
showsView.badgeView.animation = AXBadgeViewAnimation.Scale
我在编写这个工具类的时候就已经考虑到API友好这个问题,那么这样的工具应该如何设计它的API接口呢?在软件开发中,耦合度越低,对我们整个项目的研发和维护大有裨益。因此在设计API时,要尽量考虑到耦合度的因素。
Strong>AX BadgeView 的接口很简单,在使用过程中只需要关心 `显示
` 和 `隐藏
` 的接口即可,其他的细节已处理好了:
show:animated:inView:
hide:animated:completion:
Strong>AXBadgeView 采用了协议和类扩展的形式,可以直接在 `UIView
`、`UIBarButtonItem
`、`UITabBarItem
` 中添加并实现相应的接口,使用起来非常方便。在 `OC
` 中使用了运行时添加 `Associated Objects
` 的方式添加了 `badgeView
` 属性和相关的方法。在 `Swift
` 中,除了添加了以上三个类的扩展以外,还实现了对应的协议:
protocol AXBadgeViewDelegate {
/// Badge view property.
var badgeView: AXBadgeView {get set}
/// Animated to show the badge view.
func showBadge(animated animated: Bool) -> Void
/// Animated to hide the badge view.
func clearBadge(animated animated: Bool) -> Void
}
直接引用就是直接在GitHub下载代码源文件 AXBadgeView-Swift—–>Objective-C版,然后导入项目中:
Swift 直接使用。
OC 在需要使用的地方 `#import "AXBadgeView.h"
`。
本代码遵循以下条款和条件分发:MIT 许可证。