項目需求:
雙擊TabBarItem刷新頁面,并且TabBar添加旋轉Loading動畫,如圖:
動畫原理:給Layer添加CABasicAnimation
那么問題來了,加在什么地方?
需要找到繼承UIView視圖才可以獲取Layer,而UITabBarItem獲取不了,所以我需要找到其中繼承UIView的類:UITabBarButton
獲取UITabBarButton的方法:
一 、KVC
UIControl*tabBarButton = [currentViewController.tabBarItemvalueForKey:@"view"];
二、循環便利TabBar的SubViews
該博客地址:blog.csdn.net/sinat_20559947/article/details/52828164
這里我選擇第一種獲取方法:
添加后我發現給tabBarButton添加旋轉動畫會導致文字和圖片一起旋轉,而我只需要圖片旋轉,文字不動。于是我需要找到tabBarButton中所展示的ImageView,給這個imageView的Layer加動畫就對了。
獲取圖片的ImageView:
KVC:UIImageView*tabBarSwappableImageView = [tabBarButtonvalueForKey:@"info"];
添加動畫:
雙擊刷新:
動畫有了,現在是要判斷如何觸發雙擊刷新:
原理:在自定義的TabBarViewController中簽訂UITabBarControllerDelegate 獲取TabBarItem點擊事件,再通過時間間隔判斷是否是連點操作。當然,如果要更精確點擊位置,可以通過記錄上一次點擊TabBarItem的ViewController和時間間隔雙重條件來判斷。
任務完成!
PS:
問題一:獲取tabBarButton為什么要用KVC,不用數組循環。
我剛開始是使用數組記錄所有的TabBarButton,然后通過點擊的Index去取數組的tabBarButton然后用KVC取ImageView,但是我發現一個問題,當我雙擊后,我需要更改tabBarItem.selectImage的圖片,而我更改后再從數組里去ImageView的時候,這個動畫卻加不上去了,原因未知,可能跟isa地址有關吧。所以我使用KVC去實施獲取tabBarButton的ImageView;
問題二:使用KVC會不會調用了私有API
這個問題我也有所擔心,我也在技術群里問了下大家,有個哥們說去年他也用了這個key并沒有被拒(今年鬼知道apple規則有沒有變),而且只是加個動畫,應該不算是私有API,這些是群里朋友們的意見,總之都不敢保證,我也Google 和 stackoverflow ?搜了下對應的關鍵字,沒有發現被拒相關的文章。