前言:
相信大家在工作中,都會遇到這樣一個情況。一個UILabel僅顯示一行,在小屏手機中顯示不完整出現... 但是這些資訊又比較重要,不能省略且沒有充足的空間換行顯示。
那麼問題來了?這該怎麼辦呢?這個時候,聰明的產品經理摸了摸雙下巴,突然雙眼放光“用跑馬燈啊”
好吧,既然產品經理都給出了精妙絕倫的方案,程式設計師的使命就是義無反顧地完成它。
原理
原理很簡單,就是用CADisplayLink,根據重新整理頻率,不停的調整檢視的位置就行。為了達到迴圈顯示,需要新增兩個一樣的檢視。
為了擴大跑馬燈的使用範圍,我進行了抽象化處理,並沒有寫死用UILabel來實現,而是暴露了一個屬性contentView: UIView。只要是UIView及其子類,都可以用來進行跑馬燈顯示。對於複雜的檢視,需要自己重寫contentView的sizeThatFits方法,返回正確的size即可。
具體細節可以看原始碼瞭解,這裡分享兩個騷操作:
1、如何實現UIView的拷貝?
2、如何斷開CADisplayLink的迴圈引用?
大家知道CADisplayLink和NSTimer都會對Target強持有,Target一般也會強持有它們。如果使用閉包回撥的API,可以解決這個問題,但是這些API要求iOS的系統都比較高。所以,還是需要直面這個問題。
使用
其實做為一個ios開發者,有一個學習的氛圍跟一個交流圈子特別重要,這是一個我的iOS學習交流群 681503716(邀請碼寂靜)不管你是小白還是大牛歡迎入駐,大家一起交流學習效果預覽
JXMarqueeType.left:往左滾動
JXMarqueeType.right:往右滾動
JXMarqueeType.reverse:迴圈反轉
自定義