【问题标题】:How can I 'animate' sequential underlining or highlighting of individual String characters within a UILabel? [Swift]如何为 UILabel 中的单个字符串字符“设置动画”顺序下划线或突出显示? [迅速]
【发布时间】:2020-12-04 16:38:45
【问题描述】:
我在 UILabel 中显示一串用破折号分隔的字母和数字(例如,“1 - B - 9 - J - G - 5”)。我希望想出一种“动画化”它们的方法,以便每个非破折号字符按顺序加下划线或突出显示,间隔一秒(例如,“1”突出显示一秒钟,然后“1”返回默认状态和“B”突出显示一秒钟,然后“B”返回默认状态,“9”突出显示一秒钟,等等)。我是一个业余爱好者,但我试图自己研究这个并在其他地方寻求帮助。有人建议为每个字符使用单独的 UILabel,我可以这样做,但看起来很笨拙,还有人建议使用属性字符串,这看起来很有希望,但我不知道如何完全执行。我已经阅读了一些内容,并且我想我了解如何在特定位置突出显示或下划线单个字符,但我无法完全理解如何设置它的增量/定时方面。其他一些可能重要或不重要的细节:
- 字符串内容不是静态的 - 它是随机生成到一个新数组中,然后在每次应用运行时转换为字符串。
- 如果其他内容更简单(例如,文本颜色更改),则不必特别强调或突出显示 - 我只需将每个字符聚焦一秒钟即可。
【问题讨论】:
标签:
swift
animation
uilabel
【解决方案1】:
我建议使用分配给标签attributedText 的连续 NSAttributedString 值,类似于我在https://stackoverflow.com/a/65056895/341994 建议的技术。
代码的关键行是:
let range = NSRange(location: i*4, length: 1)
let mas = NSMutableAttributedString(string: s)
mas.addAttributes([.backgroundColor:UIColor.yellow], range: range)
self.label.attributedText = mas
...i 每次都会增加。