MarqueeLabel

@MainActor
open class MarqueeLabel : UILabel

简易的跑马灯 label 控件,在文字超过 label 可视区域时会自动开启跑马灯效果展示文字,文字滚动时是首尾连接的效果(参考播放音乐时系统锁屏界面顶部的音乐标题)。

lineBreakMode 默认为 NSLineBreakByClipping(UILabel 默认值为 NSLineBreakByTruncatingTail)。 textAlignment 暂不支持 NSTextAlignmentJustified 和 NSTextAlignmentNatural。 会忽略 numberOfLines 属性,强制以 1 来展示。

QMUI_iOS

  • 控制滚动的速度,1 表示一帧滚动 1pt,10 表示一帧滚动 10pt,默认为 .5,与系统一致。

    Declaration

    Swift

    @IBInspectable
    @MainActor
    open var speed: CGFloat
  • 当文字第一次显示在界面上,以及重复滚动到开头时都要停顿一下,这个属性控制停顿的时长,默认为 2.5(也是与系统一致),单位为秒。

    Declaration

    Swift

    @IBInspectable
    @MainActor
    open var pauseDurationWhenMoveToEdge: TimeInterval
  • 用于控制首尾连接的文字之间的间距,默认为 40pt。

    Declaration

    Swift

    @IBInspectable
    @MainActor
    open var spacingBetweenHeadToTail: CGFloat
  • 用于控制左和右边两端的渐变区域的百分比,默认为 0.2,则是 20% 宽。

    Declaration

    Swift

    @IBInspectable
    @MainActor
    open var fadeWidthPercent: CGFloat { get set }
  • 自动判断 label 的 frame 是否超出当前的 UIWindow 可视范围,超出则自动停止动画。默认为 YES。

    某些场景并无法触发这个自动检测(例如直接调整 label.superview 的 frame 而不是 label 自身的 frame),这种情况暂不处理。

    Declaration

    Swift

    @IBInspectable
    @MainActor
    open var automaticallyValidateVisibleFrame: Bool
  • 在文字滚动到左右边缘时,是否要显示一个阴影渐变遮罩,默认为 NO。

    Declaration

    Swift

    @IBInspectable
    @MainActor
    open var shouldFadeAtEdge: Bool { get set }
  • YES 表示文字会在打开 shouldFadeAtEdge 的情况下,从左边的渐隐区域之后显示,NO 表示不管有没有打开 shouldFadeAtEdge,都会从 label 的边缘开始显示。默认为 NO。

    如果文字宽度本身就没超过 label 宽度(也即无需滚动),此时必定不会显示渐隐,则这个属性不会影响文字的显示位置。

    Declaration

    Swift

    @IBInspectable
    @MainActor
    open var textStartAfterFade: Bool

Lifecycle

  • Undocumented

    Declaration

    Swift

    @MainActor
    public override init(frame: CGRect)
  • Undocumented

    Declaration

    Swift

    @MainActor
    public required init?(coder: NSCoder)

Override

  • Undocumented

    Declaration

    Swift

    @MainActor
    override open func didMoveToWindow()
  • Undocumented

    Declaration

    Swift

    @MainActor
    override open var text: String? { get set }
  • Undocumented

    Declaration

    Swift

    @MainActor
    override open var attributedText: NSAttributedString? { get set }
  • Undocumented

    Declaration

    Swift

    @MainActor
    override open var frame: CGRect { get set }
  • Undocumented

    Declaration

    Swift

    @MainActor
    override open var numberOfLines: Int { get set }
  • Undocumented

    Declaration

    Swift

    @MainActor
    override open func drawText(in rect: CGRect)
  • Undocumented

    Declaration

    Swift

    @MainActor
    override open func layoutSubviews()

Public

  • 如果在可复用的 UIView 里使用(例如 UITableViewCell、UICollectionViewCell),由于 UIView 可能重复被使用,因此需要在某些显示/隐藏的时机去手动开启/关闭 label 的动画。如果在普通的 UIView 里使用则无需关注这一部分的代码。 尝试开启 label 的滚动动画 @return 是否成功开启

    Declaration

    Swift

    @MainActor
    open func requestToStartAnimation() -> Bool
  • 尝试停止 label 的滚动动画 @return 是否成功停止

    Declaration

    Swift

    @MainActor
    open func requestToStopAnimation() -> Bool