iOS程式設計師一用就上癮的跑馬燈檢視,怎麼可以這麼優秀

Mr.Lin不想說話發表於2018-05-04

前言:

相信大家在工作中,都會遇到這樣一個情況。一個UILabel僅顯示一行,在小屏手機中顯示不完整出現... 但是這些資訊又比較重要,不能省略且沒有充足的空間換行顯示。

那麼問題來了?這該怎麼辦呢?這個時候,聰明的產品經理摸了摸雙下巴,突然雙眼放光“用跑馬燈啊”

iOS程式設計師一用就上癮的跑馬燈檢視,怎麼可以這麼優秀

好吧,既然產品經理都給出了精妙絕倫的方案,程式設計師的使命就是義無反顧地完成它。

原理

原理很簡單,就是用CADisplayLink,根據重新整理頻率,不停的調整檢視的位置就行。為了達到迴圈顯示,需要新增兩個一樣的檢視。

為了擴大跑馬燈的使用範圍,我進行了抽象化處理,並沒有寫死用UILabel來實現,而是暴露了一個屬性contentView: UIView。只要是UIView及其子類,都可以用來進行跑馬燈顯示。對於複雜的檢視,需要自己重寫contentView的sizeThatFits方法,返回正確的size即可。

具體細節可以看原始碼瞭解,這裡分享兩個騷操作:

1、如何實現UIView的拷貝?

iOS程式設計師一用就上癮的跑馬燈檢視,怎麼可以這麼優秀

2、如何斷開CADisplayLink的迴圈引用?

大家知道CADisplayLink和NSTimer都會對Target強持有,Target一般也會強持有它們。如果使用閉包回撥的API,可以解決這個問題,但是這些API要求iOS的系統都比較高。所以,還是需要直面這個問題。

iOS程式設計師一用就上癮的跑馬燈檢視,怎麼可以這麼優秀

使用

iOS程式設計師一用就上癮的跑馬燈檢視,怎麼可以這麼優秀
其實做為一個ios開發者,有一個學習的氛圍跟一個交流圈子特別重要,這是一個我的iOS學習交流群 681503716(邀請碼寂靜)不管你是小白還是大牛歡迎入駐,大家一起交流學習

效果預覽

JXMarqueeType.left:往左滾動

iOS程式設計師一用就上癮的跑馬燈檢視,怎麼可以這麼優秀

JXMarqueeType.right:往右滾動

iOS程式設計師一用就上癮的跑馬燈檢視,怎麼可以這麼優秀

JXMarqueeType.reverse:迴圈反轉

iOS程式設計師一用就上癮的跑馬燈檢視,怎麼可以這麼優秀

自定義

iOS程式設計師一用就上癮的跑馬燈檢視,怎麼可以這麼優秀

相關文章