AXBadgeView-Swift 0.2.1

AXBadgeView-Swift 0.2.1

测试已测试
语言语言 SwiftSwift
许可协议 MIT
发布最后发布2017年3月
Swift版本Swift版本3.0
SPM支持SPM

devedbox维护。




  • devedbox

logo

介绍

AXBadgeView-Swift是一个徽章视图管理类,是之前我写的AXBadgeView的Swift版本(以下的介绍中统一使用 Strong>AXBadgeView),在新版本中没有太大的改动,主要是将原有的功能以Swift方式实现,使用方法相同。

image

Strong>AXBadgeView是一个徽章视图,继承自 Strong>UILabel,子类实现完成了UI的自动布局,自动计算content的bounds大小,并且可以通过指定 minSize 来实现徽章视图最终的bounds大小。

Strong>AXBadgeView 使用自动布局来控制显示位置,为什么要使用自动布局呢?在我之前的一个项目中,我使用了一个第三方的徽章视图管理类,在GitHub上的Stars数量还很多,但是我使用后发现,布局有问题。在发现问题之后,我就去看了看源码,结果问题一目了然,那个类没有使用自动布局。那么在这样一个对布局精确度要求很高的地方,使用自动布局可以减少很多布局上的隐患。实际上,我也推荐使用自动布局,因为自动布局的强大之处已经不用我多说了。

Strong>AXBadgeView 中如何控制徽章视图的显示偏移量呢?通过设置徽章实例的 offSets 属性来控制,` 的默认值采用了 CGFloat.maxCGFloat.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
}
  • .Normal:显示小红点。
  • .Number:显示数字。
  • .Text:显示普通文本。
  • .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
}
  • .None:默认,不显示任何动画。
  • .Scale:缩放动画。
  • .Shake:震动动画。
  • .Bounce:反弹动画。
  • .Breathe:渐变动画。

代码示例:

objective-c:

_showsView.badgeView.animation = AXBadgeViewAnimationScale

swift:

showsView.badgeView.animation = AXBadgeViewAnimation.Scale

API

我在编写这个工具类的时候就已经考虑到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版,然后导入项目中:

  1. Swift 直接使用。

  2. OC 在需要使用的地方 `#import "AXBadgeView.h"`。

许可协议

本代码遵循以下条款和条件分发:MIT 许可证