[聚合文章] iOS程序员一用就上瘾的跑马灯视图,怎么可以这么优秀

visual-studio 2018-05-04 13 阅读

前言:

相信大家在工作中,都会遇到这样一个情况。一个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:循环反转
图片描述

注:本文内容来自互联网,旨在为开发者提供分享、交流的平台。如有涉及文章版权等事宜,请你联系站长进行处理。