登录 立即注册
金钱:

Code4App-iOS开发-iOS 开源代码库-iOS代码实例搜索-iOS特效示例-iOS代码例子下载-Code4App.com

一个小红点解决方案

[复制链接]
来自: 王芋头先森S 分类: iOS精品源码 上传时间: 2016-5-26 10:22:04
Tag:GJRedDot 提醒红点 badge

项目介绍:

github.com/GJGroup/GJRedDot


GJRedDot

这是一个小红点的解决方案,你可以方便的使用它去管理你的小红点提示。感谢支持。



使用场景
我们的项目中,有很多小红点联动的需求,例如上一级页面的小红点受下一级页面小红点的影响,比如微信的“发现——朋友圈”,当朋友圈有新消息时,发现tab页面朋友圈cell中的icon上会有一个小红点,这时发现tab的icon上也有一个小红点,但是当我们点击“发现tab“的时候,小红点并不消失,而是点击朋友圈cell后,cell上和“发现tab”上的小红点同时消失,类似的需求很多APP种都可以发现。

最开始我们使用消息中心来实现,后来发现,当小红点级别变多后,代码量几何增长且分散各处,十分混乱,为了解决这个问题,我们将它进行封装。首先用key将小红点的进行关联并注册,然后只需在显示小红点的页面设置刷新block,并在任何需要刷新他的地方调用改变显示状态的方法,只需这三步即可完成。


开始
将GJRedDot文件夹拷贝到工程中,在使用的地方导入头文件

#import "GJRedDot.h"


注册
首先,需要在app launch中,以小红点对应的key,通过NSArray及NSDictionary关联起来,并进行注册(见Demo)

[Objective-C] 查看源文件 复制代码
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [GJRedDot registWithProfile:[GJRedDotRegister registProfiles]];
    return YES;
}




这个例子在Demo中:GJTabBar2是第二个tabbar的小红点Key,它与这个tab的rootVC中的icon(GJGroupKey)进行关联,GJGroupKey又与下一级页面的3个按钮(GJSunnyxxKey,GJUncleBirdKey,GJSardKey)进行关联。最后所实现的功能就是,GJSunnyxxKey,GJUncleBirdKey,GJSardKey三个按钮中有一个按钮有小红点,则GJGroupKey,GJTabBar2上也会显示小红点,如果三个按钮中小红点都消失,则GJGroupKey,GJTabBar2上的小红点才会消失。
看着不太明白是吧?下面用伪代码解释一下:
[Objective-C] 查看源文件 复制代码
- (BOOL)isShowGJTabBar2 {
    if (GJGroupKey.isShow) return YES;
    return NO
}

- (BOOL)isShowGJGroupKey {
    if(!GJSunnyxxKey.isShow && !GJUncleBirdKey.isShow && !GJSardKey.isShow) return NO;
    return YES;
}



是不是清晰点了?
注意:默认注册方法下,是使用GJRedDotModelUserDefault,将使用Key缓存到NSUserDefault中,所以请保证小红点的Key与程序中其他地方的Key区分开,以防出现问题。
Demo注册代码:
[Objective-C] 查看源文件 复制代码
NSString *const GJTabBar2 = @"GJTabBar2";
NSString *const GJGroupKey = @"GJAllGays";
NSString *const GJSunnyxxKey = @"GJSunnyxxIsGay";
NSString *const GJUncleBirdKey = @"GJUncleBird";
NSString *const GJSardKey = @"GJSarkIsGay";

@implementation GJRedDotRegister
+ (NSArray *)registProfiles {
    return @[
             @{GJTabBar2:@{GJGroupKey:@[
                                   GJSunnyxxKey,
                                   GJUncleBirdKey,
                                   GJSardKey
                                   ]
                           }
               }
             ];
}



使用
在需要使用小红点的地方调用如下方法

[Objective-C] 查看源文件 复制代码
    //将小红点管理绑定到持有小红点的对象上(handler),当它release的时候,也自动release小红点的管理
    //block是小红点刷新的动作,当有其他与当前key相关联的小红点状态发生变化或自身发生变化时,并影响到当前小红点状态,则进行刷新动作
    //这里要使用weakSelf避免循环引用
    __weak typeof(self) weakSelf = self;
    [self setRedDotKey:GJGroupKey refreshBlock:^(BOOL show) {
        weakSelf.gjGroupButton.showRedDot = show;
    } handler:self];




在需要改变小红点状态的地方调用此方法:
[Objective-C] 查看源文件 复制代码
 //改变小红点状态,他会自动在上一个方法中刷新小红点,以及刷新想关联的小红点状态
    [self resetRedDotState:NO forKey:GJGroupKey];



通过系统原生UITabBarItem添加小红点功能
[Objective-C] 查看源文件 复制代码
//VC中的方法
- (void)methodVC {
//self就是VC
    self.tabBarItem.isShowRedDot = YES;
}

//通过tabBar的items获取item来设置
- (void)methodTabBar {
    self.tabBarController.tabBar.items[1].isShowRedDot = YES;
}

//设置偏移量
- (void)setOffset {
    self.taBarItem.redDotOffset = CGPointMake(5, 10);
}

//设置小红点半径
- (void)setRadius {
    self.taBarItem.redDotRadius = 10;
}

//设置小红点颜色
- (void)setColor {
    self.taBarItem.redDotColor = [UIColor redColor];
}

//使用自定义view显示在小红点位置
- (void)setCustomView {
    self.taBarItem.customView = ....;
}


DEMO下载:


相关源码推荐:

我来说两句
*滑动验证:
所有评论(91)
我就叫土豆 2016-5-30 15:52:55
精华内容,楼主V5!
回复
WangJXin 2016-5-30 15:59:06
虽不明,但觉厉!
回复
pjh111 2016-5-31 11:10:32
楼主威武啊,Code4App有你更给力!
回复
nygk0340 2016-5-31 14:18:08
回复
xiaoyadong 2016-5-31 19:56:32
楼主用心了,内容非常精彩。
回复
jyh1516 2016-6-1 14:27:37
很给力,Code4App有你更精彩!
回复
夜雨星空 2016-6-2 00:27:22
强烈支持楼主ing……
回复
vump0001 2016-6-2 09:51:46
淡定,淡定,淡定……
回复
shiwensong 2016-6-3 08:40:47
正需要啊,感谢楼主无私分享!
回复
提取码:  下载次数:90 状态:已购或VIP 售价:0(原价:10)金钱 下载权限:初级码农 
4548 0 90
联系我们
首页/微信公众账号投稿

帖子代码编辑/版权问题

QQ:435399051,742864542

如何获得代码达人称号?

代码贡献英雄榜
用户名 下载数
通过邮件订阅最新 Code4App 信息
上一条 /4 下一条
联系我们
关闭
合作电话:
13802416937
Email:
435399051@qq.com
商务市场合作/投稿
问题反馈及帮助
联系我们

广告投放| Github|申请友链|手机版|Code4App ( 粤ICP备15117877号-1 )

快速回复 返回顶部 返回列表