紅點管理
需求描述
- 不同級紅點狀態可傳遞
- 同級紅點不相互影響
- 紅點狀態可配置
- 紅點可記錄數量
功能分析
要實現功能傳遞顯然要實現層級結構,同時為了實現同級紅點不互相影響那麼就像樹形結構了,每個紅點相當於葉子,葉子只負責儲存紅點狀態資訊以及父節點指向。
要實現上述功能點,最少需要兩個類,一個負責控制紅點UI顯示,一個用來管理狀態。
功能分點實現
控制UI顯示上其實只要控制紅點的啟用狀態就行了。
資料方面需要紅點UI,紅點狀態即可。
行為方面需要寫一個紅點開關函式以及接受函式用來接受傳進來的紅點狀態。
public void SetRedPoint(bool flag){
if(imgRedPoint != null){
imgRedPoint.gameObject.SetActive(flag);
}
}
public void SetData(NotifyMark mark){
if(mark == null){
SetRedPoint(false);
return;
}
this.mark = mark;
this.mark.OnChange += SetRedPoint;
}
紅點資料方面稍微複雜點:需要定義一個父節點,方便紅點狀態的層級傳遞;
定義一個訊息數,方便訊息分層;
定義一個狀態標誌,界定當前狀態,通過使用屬性來定義
定義一個狀態變更代理,方便狀態變更時讓UI層隨之變化
行為方面:狀態獲取(getter); 父節點設定;設定狀態變更代理;紅點狀態變更;父節點狀態變更;狀態重置;子節點狀態清除。
public class NotifyMark {
private NotifyMark parentNode = null;
private int SubNotifyCount = 0;
/* 判斷通知是否顯示 */
public bool IsNotify { get; private set; }
public static implicit operator bool (NotifyMark notify) { //定義隱式轉換
return notify != null && notify.IsNotify;
}
/* 設定狀態變更代理 */
private Action<bool> _OnChange = null; //定義bool型別,用來確定是否顯示小紅點
public event Action<bool> OnChange {
add {
_OnChange += value;
value (IsNotify);
}
remove {
_OnChange -= value;
}
}
/* 建構函式初始化狀態 */
public NotifyMark () {
IsNotify = false;
}
/* 設定父節點 */
public void SetParentNotify (NotifyMark notify) {
parentNode = notify;
}
/* 更新狀態 */
public void ChangeNotify (bool isNotify) {
if (isNotify != IsNotify) {
IsNotify = isNotify;
//如果有父節點就向上傳遞
if (parentNode != null) {
parentNode.OnSubNotifyChange (isNotify);
}
// 變更小紅點顯示
if (_OnChange != null) {
_OnChange (IsNotify);
}
}
}
/* 修改父節點小紅點狀態 */
private void OnSubNotifyChange (bool isNotify) {
if (isNotify) {
SubNotifyCount++; //記錄子節點訊息數量
} else {
SubNotifyCount--;
}
ChangeNotify (SubNotifyCount > 0);
}
/* 清除子節點小紅點記錄 */
public void CleanSub () {
SubNotifyCount = 0;
ChangeNotify (false);
}
/* 重置資訊 */
public void Reset () {
parentNode = null;
SubNotifyCount = 0;
ChangeNotify (false);
_OnChange = null;
}
}
用例
實質是通過給ChangeNotify傳遞判斷值。
例子
相關文章
- 紅隊打點思路
- 紅寶書5500難點詞
- Android中TabLayout新增小紅點AndroidTabLayout
- 紅帽收購混合雲管理提供商NooBaa,混合雲爆發節點臨近!
- Linux核心資料管理利器--紅黑樹Linux
- 社交新零售的紅利點在哪?如何抓住時代紅利?
- L2-036 網紅點打卡攻略
- 遊戲開發中的紅點提示遊戲開發
- 微信小紅點怎麼關閉?微信影片號關閉紅點的詳細圖文教程
- 訊息未讀之點不完的小紅點(Node+Websocket)Web
- 個推:抖音網紅景點人群分析
- App上看到就忍不住點的小紅點是如何實現的?APP
- Redis Manager 叢集管理與節點管理Redis
- 一個簡簡單單的紅點系統框架框架
- 關點對紅現非求馬圓辦勞ytk
- 二、JAVA知識點之HashMap、TreeMap、紅黑樹——精髓JavaHashMap
- 動畫-CAShapeLayer實現QQ訊息紅點拖拽效果動畫
- 紅魔Mars電競手機怎麼樣?紅魔Mars手機的優缺點評測分析
- MAUI Blazor學習19-角標(右上角紅點)UIBlazor
- HashMap中紅黑樹插入節點的調整過程HashMap
- 遊戲設計中如何更高效的利用“小紅點”遊戲設計
- RHCSA7-NOTE(紅帽管理員-題庫詳細筆記)筆記
- 研發專案管理點滴專案管理
- DOM 元素中的焦點管理
- Dom的class和焦點管理
- 複雜的IT專案如何管理 有哪些管理要點
- 2024年6月總結及隨筆之打卡網紅點
- 小紅書“致歉濾鏡景點”:種草社群的尺度在哪?
- 頂尖Java工程師的紅黑技能樹,如何快速點亮?Java工程師
- iOS開發UI第三方庫-小紅點&pageiOSUI
- 研發管理與專案管理:痛點及解決方案專案管理
- Nginx 站點配置多目錄管理Nginx
- 對專案管理的一點思考專案管理
- svn和git版本管理優缺點Git
- python爆紅的原因是什麼?取決於這幾點!Python
- PAT-B 1068 萬綠叢中一點紅【對映+陣列】陣列
- 盤點1987年版《紅樓夢》金陵十二釵正冊女子
- 你瞭解紅黑樹麼?告訴你一個不一樣的紅黑樹,說點有意思的吧!