日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Github系列之二:开源 一行代码实现多形式多动画的推送小红点WZLBadge(iOS)

發布時間:2025/3/21 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Github系列之二:开源 一行代码实现多形式多动画的推送小红点WZLBadge(iOS) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

更新日志

  • V1.2 2015.09.25 1.UITabBarItem badge is supproted; 2.Enable change badge properties when badge is showing; 3.Other code optimization.
  • V1.1 2015.08.12
  • UIBarButtonItem badge is supported. UIBarButtonItem is kind of NSObject and its displayed view is invisiable. This version makes usage of UIBarButtonItem badge as to UIView.
  • Slight adjustment for code structure to fit future extension.
  • Other code optimization.
    • V1.0 at 2015.06.16

      Base functions are completed, which is able to meet most of requirements.


    ?

    ?

    概述

    今天我們來實現一個在iOS中讓人又愛又恨的推送“小紅點”WZLBadge。那什么是badge呢?當后臺有數據更新需要讓用戶知道時,在按鈕或者其他控件上顯示一個“小紅點”提醒用戶。注意,這里的“小紅點”僅僅是泛指,實際的視圖可以天馬行空,在這個版本中我們先實現以下幾種:

    • 小紅點
    • 紅底白字“new”
    • 紅底白字數字

    為了讓小紅點顯示后更加醒目,在這個版本中我又實現了三種不同的狀態動畫(status animation):

    • 心臟跳動效果(WBadgeAnimTypeScale)
    • 呼吸燈效果(WBadgeAnimTypeBreathe)
    • 橫向抖動(WBadgeAnimTypeShake)
    • 靜止狀態(WBadgeAnimTypeNone, 默認)

    WZLBadge還有以下優點:

    • 支持橫豎屏
    • 支持iOS5~iOS8
    • 允許高度定制化,包括“紅點”的背景顏色,文字(字體大小、顏色),位置等

    ?

    我們還是先看兩張示例圖片吧:

    ?

    ?

    ?

    ?


    ?

    分析

    ?

    想要使得實現出來的badge接口調用方便,我采用的是對UIView做category的方式,接口統一為實例方法。通過這種方式,可以給任意的UIView及其子類添加badge,而且接口簡單。接口應該類似于這樣:

    ?

    1 [someView showBadgeWithStyle:WBadgeStyleRedDot value:0 animationType:WBadgeAnimTypeShake];

    ?

    現實往往是這樣的,使用者使用起來越簡單,接口提供方就需要做的越多。我們知道,小紅點應該具有多個屬性,比如大小、背景顏色、文字顏色等。想讓badge具有更強的可定制性,就需要開放這些豐富的屬性。那么問題來了,category中理論上只能添加方法,無法添加屬性。這時候就需要一些運行時runtime方面的技巧了。我們可以在運行時為UIView添加屬性,需要使用到的兩個runtime api為:

    ?

    1 2 OBJC_EXPORT id objc_getAssociatedObject(id?object,?const?void?*key) ????__OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_1);

    ?

    1 2 OBJC_EXPORT?void?objc_setAssociatedObject(id?object,?const?void?*key, id value, objc_AssociationPolicy policy) ????__OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_1);

    例如,假設我們現在想給UIView動態添加badgeBgColor屬性,用來操縱badge角標的背景色“

    1 2 3 4 - (UIColor *)badgeBgColor//getter { ????return?objc_getAssociatedObject(self, &badgeBgColorKey); }

    ?

    1 2 3 4 - (void)setBadgeBgColor:(UIColor *)badgeBgColor//setter { ????objc_setAssociatedObject(self, &badgeBgColorKey, badgeBgColor, OBJC_ASSOCIATION_RETAIN); }

    關于動態添加屬性的知識在這里就不具體展開了,想要了解更多的可以參考我的這篇《iOS運行時runtime初探(強制獲取并修改私有變量,強制增加及修改私有方法等)》。這個知識點也是本文開源的WZLBadge的核心點,實際上這也是大多數開源工具的常規做法。另外,對于WZLBadge的其他技術細節在這里就不再細述,具體可以到文章末尾處轉去Github查看。

    ?

    ?


    ?

    使用方法

    ?

    由于WZLBadge采用對UIView擴展category的方式,因此,所有的UIView及其繼承子類(UIControl等)都可以無縫使用,當前版本開放的接口主要有以下幾個:

    1 2 3 4 /** ?*? show badge with red dot style and WBadgeAnimTypeNone by default. ?*/ - (void)showBadge;

    ?

    1 2 3 4 5 6 7 8 /** ?*? showBadge ?* ?*? @param style WBadgeStyle type ?*? @param value (if 'style' is WBadgeStyleRedDot or WBadgeStyleNew, this value will be ignored. In this case, any value will be ok.) *?? @param aniType ?*/ - (void)showBadgeWithStyle:(WBadgeStyle)style value:(NSInteger)value animationType:(WBadgeAnimType)aniType;

    ?

    1 2 3 4 /** ?*? clear badge ?*/ - (void)clearBadge;

    ?

    ?


    ?

    ?源代碼分享

    我將源代碼托管在github上,我個人希望WZLBadge能不斷優化成為iOS平臺上推送紅點的終極解決方案,如果你感興趣,我非常歡迎你一起加入讓WZLBadge變得更好。有什么問題或者建議請留言或者在github提issue。

    此外,希望你能在github上Fellow我,并且對WZLBadge進行star/fork/watch,接下來我的更新會直接通知到你^^。

    github地址:WZLBadge?(https://github.com/weng1250/WZLBadge)


    from:?http://www.cnblogs.com/wengzilin/p/4633937.html

    《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

    總結

    以上是生活随笔為你收集整理的Github系列之二:开源 一行代码实现多形式多动画的推送小红点WZLBadge(iOS)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。