Swift開源:AXBadgeView - badge view 管理類
介紹
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版 ,并將下載的源文件導入工程:
-
swift直接使用.
-
oc在需要使用的地方 #import "AXBadgeView.h" .
CocoaPods
CocoaPods 依賴管理是比較使用起來比較方便的一種方式,只需要添加相應的依賴描述,便可直接接入現有項目:
- 添加pod描述到你的Podfile問家里邊: pod 'AXPopoverView', '~> 0.1.0'
- 運行安裝命令: pod install .
- - swift直接使用.
- oc在需要使用的地方 #import "AXBadgeView.h" .
License
This code is distributed under the terms and conditions of the MIT license .