Swift開源:AXBadgeView - badge view 管理類

ygaa1077 7年前發布 | 9K 次閱讀 Swift Apple Swift開發

介紹

AXBadgeView-Swift 是一個badge view管理類,是之前我寫的 AXBadgeView 的Swift版本(以下的介紹中統一使用 AXBadgeView ),在新版本中沒有太大的改動,主要的是把原有的功能實用swift實現了,使用方法是一樣的。

AXBadgeView是一個badge view視圖,繼承于 UILabel ,子類的實現完成了UI的自動布局,自動計算content的bounds大小并可以通過指定 minSize 實現badge view最終的bounds大小。

AXBadgeView使用的是自動布局來控制顯示的位置的,為什么要用自動布局呢?在我之前做的一個項目中,我使用的是第三方的badge view管理類,在GitHub上的星星還是很多的,但是我使用了之后發現,布局是有問題的,在發現問題之后我就去看了看源碼,結果問題顯而易見,那個類使用的不是自動布局。那么在這樣一個對布局精準度要求較高的地方的話,使用自動布局可以減少很多布局上面的隱患,其實這點來說,我也推薦是用自動布局,因為自動布局的強大之處已經不用我來多說了。

AXBadgeView中怎樣控制badge view顯示的偏移量呢?通過設置badge instance的 offSets 屬性來控制, offSets 的默認值采用了 CGFloat.max 和 CGFloat.min 兩個值,max表示就是x的最大值或者y的最小值,min就用來表示x的最小值和y的最小值。 offSets 的默認值是 (CGFloat.max, CGFloat.min) ,表示x的最右邊和y的最上邊,也就是superView的右上角。那么,在使用的過程中,如果想表示邊界值的話就通過以上兩個值來表示,就不用手動去計算superView的高寬了。同樣的,如果想給定指定的 offSets 值的話,就可以設置這個屬性,坐標系就是iOS的默認坐標系。

特性

以上已經對 AXBadgeView 做了一定的介紹了,那么這里將做一些總結性的東西,出了以上介紹的幾點之外, AXBadgeView 還具有以下特性:

  • 設置數字顯示 99+ 的樣式,可以自定義顯示的數字.
  • 自定義顯示的樣式.
  • 自定義動畫效果.
  • 當內容為 0 的時候可以設置隱藏.
  • 當內容更新的時候,是否動畫更新內容.

樣式

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

動畫

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的時候,就要盡量去考慮到耦合度的因素。

AXBadgeView接口很簡單,在使用的過程中過我們只需要關心 顯示 和 隱藏 的接口就行了,其他的細節已經處理好了:

show(animated:inView:)

hide(animated:completion:)

AXBadgeView采用了協議和類擴展的形式,直接在 UIView 、 UIBarButtonItem 、 UITabBarItem 中直接添加并實現了相應的接口,使用起來很方便。在 OC 中使用了運行時添加 Associated Objects 的方式添加了 badgeView 屬性和相關的餓方法。那么在 Swift 中的話就有點差別, 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" .

CocoaPods

CocoaPods 依賴管理是比較使用起來比較方便的一種方式,只需要添加相應的依賴描述,便可直接接入現有項目:

  1. 添加pod描述到你的Podfile問家里邊: pod 'AXPopoverView', '~> 0.1.0'
  2. 運行安裝命令: pod install .
  3. - swift直接使用.
    • oc在需要使用的地方 #import "AXBadgeView.h" .

License

This code is distributed under the terms and conditions of the MIT license .

 本文由用戶 ygaa1077 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!