1. 程式人生 > >從使用上看RJBadgeKit功能層次

從使用上看RJBadgeKit功能層次

一、從使用上看RJBadgeKit功能層次

0、程式碼在:https://github.com/LovePeach/RJBadgeKit
1. 準備:目標控制元件、紅點路徑
2. 在RJBadgeController註冊“紅點路徑”
3. 為當前物件例項化一個RJBadgeController的一個爪牙
4. 讓爪牙作為當前物件的觀察者
5. 在當前物件裡觀察“目標”控制元件的“紅點路徑”,並指定“動態”的回撥函式

二、剖析功能
1.在RJBadgeController註冊“紅點路徑”

1-1. 語法:

NSString *demoPath = @"root.pbdemo"
; //路徑規則 [RJBadgeController setBadgeForKeyPath:demoPath]; //註冊路徑

1-2. 手術

看 setBadgeForKeyPath

方法:對路徑進行判空處理,為空直接返回;否則讓RJBadageManager去設定路徑。

RJBadageManager怎麼設定路徑的?

1-2-1. 呼叫A:

- (void)setBadgeForKeyPath:(NSString *)keyPath

1-2-2. A呼叫B:count = 0

- (void)setBadgeForKeyPath:(NSString
*)
keyPath count:(NSUInteger)count

1-2-3. B的實現過程

1. 對路徑path判空
2. 對路徑path進行拆解,用“·”分離
3. 建立紅點物件red,該物件遵守<RJBadge>協議
4. 上鎖
5. 獲取根路徑 
6. {遍歷start}遍歷拆解後的路徑陣列,如果當前路徑不在註冊中心,將當前路徑拼接到父路徑ppath上
7. 建立一個路徑資訊物件RJBadgeModel(name,ppath,count,show)= badge,
8. badge做為一個孩子添加註冊中心的_root, 併為其設定父親為_root
9. 將__root 指向 badge
10. 
{遍歷end} 如果ppath == path,設定當前紅點的為“顯示”,“紅點值”,賦值到red 11、將_root路徑資訊持久化到本地json檔案裡 12、開鎖 11、為該紅點red處理狀態變化邏輯

為該紅點red處理狀態變化邏輯

- (void)statusChangeForBadge:(id<RJBadge>)badge

1-2-3-11. 實現過程

1. 獲取紅點路徑,如果是根路徑,直接返回
2. 獲取當前路徑的所有紅點資訊reds-red
3. {遍歷start} 找出紅點繫結的目標控制元件並且該控制元件遵守<RJBadgeView>協議
4. 如果紅點值的個數count大於0,去更新控制元件紅點值;否則判斷是否顯示紅點 needShow
5. {遍歷end}如果紅點有設定“動態”的回撥函式,將紅點的觀察者、以及當前紅點資訊傳入回撥函式
6. 如果紅點有父紅點,則繼續執行以上邏輯
2.為當前物件例項化一個RJBadgeController的一個爪牙

2-1. 建立一個NSObject類擴充套件,擴充套件讓每個繼承NSObject的物件都擁有一個RJBadgeController例項作為其爪牙

2-2. 例項化RJBadgeController

[RJBadgeController controllerWithObserver:self]; // 爪牙管理這個一個觀察者(就是該NSObject物件)

2-3. 爪牙還有什麼?

屬性:關聯觀察者的一個變數 observer

內部變數:儲存包含路徑、回撥、自己資訊的RJBadgeInfo物件的陣列

建構函式

1、用一個觀察者構造的類方法
2、用一個觀察者構造的物件方法

行為

2-3-1、觀察的方法

1、設定觀察路徑、指定觀察結果回撥
2、在目標控制元件設定觀察路徑、指定觀察結果回撥
3、設定多個觀察路徑、指定觀察結果回撥

2-3-1-1、設定觀察路徑、指定觀察結果回撥

1、判斷路徑、回撥引數是否為空,為空,返回
2、用爪牙、路徑、回撥建立一個RJBadgeInfo物件
3、將其管理到內部變數陣列中
4、同時新增到RJBadgeManager的_objectInfosMap集合裡

2-3-2、取消觀察

1、取消對指定路徑的觀察
2、取消全部觀察

2-3-3、相關操作

1、設定指定路徑的紅點
2、設定指定路徑的紅點值
3、清除指定路徑的紅點資訊 (不強制、隨其自然)
4、清除指定路徑紅點資訊 指定 是否強制消除
5、獲取指定路徑的狀態(是否顯示)
6、獲取指定路徑的紅點值

總結

  1. 紅點資訊級聯通過點路徑管理
  2. 紅點的情況有三種:單純紅點、紅點數字、紅點字元
  3. 對所有物件擴充套件可以持有“紅點觀察者介面”物件的變數
  4. 對常見顯示紅點檢視的控制元件擴充套件可以層檢視控制紅點形態的變化(消失、顯示、形態)
  5. 紅點消除或顯示通過KVO來通知回撥、以及處理同一路徑下級聯顯示或消除
  6. 所有對互動層的介面(註冊、新增觀察者、顯示或消除操作)由“RJBadgeController”管理
  7. 對紅點的持久化由“RJBadgeManager”管理,通過RJBadgeInfo關聯“RJBadgeController”
  8. 用動態互斥鎖保證紅點操作的一致性