从使用上看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. 用动态互斥锁保证红点操作的一致性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值