你的位置:首页 > 软件开发 > 操作系统 > 【IOS】自定义可点击的多文本跑马灯YFRollingLabel

【IOS】自定义可点击的多文本跑马灯YFRollingLabel

发布时间:2016-05-16 19:00:07
需求项目中需要用到跑马灯来仅展示一条消息,长度合适则不滚动,过长则循环滚动。虽然不是我写的,但看了看代码,是在一个UIView里面放入两个UILabel,在前一个快结束的时候,另一个显示。然而点击处理的 确是UIView的点击事件。 然而看到比如地铁、公交里面 ...

【IOS】自定义可点击的多文本跑马灯YFRollingLabel

需求

项目中需要用到跑马灯来仅展示一条消息,长度合适则不滚动,过长则循环滚动。

虽然不是我写的,但看了看代码,是在一个UIView里面放入两个UILabel,

在前一个快结束的时候,另一个显示。然而点击处理的 确是UIView的点击事件。    

 

然而看到比如地铁、公交里面的跑马灯是分了很多段显示的。虽然说可以将多段合并为一段来显示,

但是如果各个需要点击事件又该如何处理呢?于是我来自己实现可点击的多段跑马灯。

所以这篇随笔我要实现的跑马灯包含下面这种效果:(图中有5段   点击不同文本可触发相应的事件)

【IOS】自定义可点击的多文本跑马灯YFRollingLabel

 

弯路

还记得上一篇随笔【IOS】将字体大小不同的文字底部对齐 么?

虽然不能够做到多个UILabel的底部对齐,但是我们可以通过继承UILabel来改变文本竖直方向的位置。

所以呢,我最初的想法是继承UILabel,可以保持其继承性, 通过NSTimer来直接慢慢移动UILable里面的文本。

这里出现了两个问题:(以@"这是自定义跑马灯里面要移动的文本"为例)

1.移动是可以移动,但是在文本左移至快要看不见(只剩下"移动的文本")的时候, 如何让@"这是.."开始从右侧出现呢?

2.文本过长的时候,看不见的部分将被截断,所以在移动的时候,只有部分文本了。

第一种好像没有办法,UILabel只存在一个文本的bounds, 不可能让他一部分在左边, 一部分在右边。 

第二种就因为存在默认的属性NSLineBreakMode:NSLineBreakByWordWrapping,就算不截断文本也只会变为省略号。

所以这种方法作罢。。。。

 

实现

首先要明确的是本跑马灯继承了UIView且需要两个UILabel、定时器NSTimer。

在初始化时,传入字符串数组,并计算各个字符串的自适应大小

CGRect textRect = [((NSString *)_textArray[i]) boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:kFont} context:nil];[_textRectArray addObject:[NSValue valueWithCGRect:textRect]];
//相关方法:

原标题:【IOS】自定义可点击的多文本跑马灯YFRollingLabel

关键词:IOS

IOS
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。