通过删除和添加字母在 UILabel 上的选取框效果 - Swift 3

Posted

技术标签:

【中文标题】通过删除和添加字母在 UILabel 上的选取框效果 - Swift 3【英文标题】:marquee effect on UILabel by removing and adding letters - Swift 3 【发布时间】:2017-02-13 14:03:43 【问题描述】:

谁能解释我如何在 Swift 3.0 中实现这种效果?这几乎是一个选框效果,但我不想滑动 UILabel。

这样就好了

删除第一个字母并添加第 20 个字母,然后删除第二个字母并添加 21,依此类推,直到字符串中文本的末尾。我是一个noobling,我真的不知道如何开始。

【问题讨论】:

看到这个***.com/questions/35172267/… 呵呵有趣的是,即使我在那里写了如何通过在 x 轴上移动来做到这一点,但我不想将字符串左右移动,我想删除第一个字母并添加最后一个喜欢我上面上传的 gif :) 但是谢谢。 只是一些澄清......是否有必要通过添加/删除字母来完成,或者如果它与您的 gif 在视觉上无法区分就可以了吗? (如果我做对了,您想要“阶梯”效果而不是平滑滑动...对吗?) 完全正确 :) 我想从字符串中删除并显示字母。不仅仅是从一边到另一边的平滑滑动。 您需要在数组中保留对字符串中每个字符索引的引用。然后子字符串让我们说来自 string 的索引 0,创建一个值 x = 0,将 array[x+20] 添加到 string。如果 global x > string.characters.count 你需要在添加 array[0 时再次使 x -1 ] 在标签文本中,然后再次将其设为 0。我认为这是要走的路,也许我会为此编写一些代码,但不是今天.... 每次更新标签也不是最好的方法。也许 NSTimer 更好。 【参考方案1】:

听起来像是一个有趣的练习,所以这是我的看法:

请注意,这绝不是生产就绪的代码,而是对其背后想法的快速演示。此外,下面的 sn-p 是在游乐场的上下文中编写的,以便快速测试。

import UIKit
import PlaygroundSupport

let label = UILabel(frame: CGRect(x: 0, y: 0, width: 120, height: 30))
let text  = "marquee effect on UILabel by removing letters in front and adding in end in swift 3"
label.lineBreakMode   = .byClipping
label.text            = text
label.backgroundColor = .white
label.textAlignment   = .left

let timer = Timer.scheduledTimer(withTimeInterval: 0.3, repeats: true)  _ in
    DispatchQueue.main.async 
        if let text = label.text, !text.isEmpty 
            let index = text.index(after: text.startIndex)
            label.text = label.text?.substring(from: index)
        
    


PlaygroundPage.current.liveView = label

这会让你得到这个:


对此的一些说明:

    您可以使用其他机制来代替计时器,例如 CADisplayLink 或自定义动画回调 使用monospaced font 效果会更好 当文本为空或计时器无效时,此代码不处理重置 该效果通过在标签中设置整个文本、将其剪切模式设置为仅显示其边界内的字符并最终从字符串开头删除字符来起作用。我认为没有真正的理由去做您在问题中描述的删除/插入“舞蹈”,但这将是一件微不足道的事情......

无论如何,我希望这是有道理的:)

【讨论】:

以上是关于通过删除和添加字母在 UILabel 上的选取框效果 - Swift 3的主要内容,如果未能解决你的问题,请参考以下文章

如何在 UIStackview 中添加和删除 UILabel

UILabel 文本发光和选取框

使用 UIView 动画时处理、删除和添加 UILabel

使用 UILabel 和 UIButton 显示用户标签

如何在 touchesBegan 上的自定义 UIView 中调整 UILabel 位置?

UILabel 上的奇怪行为与 StoryBoard 上的 \n