swift 跑马灯(50行代码完美实现,超简单)

Posted ihoudf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了swift 跑马灯(50行代码完美实现,超简单)相关的知识,希望对你有一定的参考价值。

1、(10行代码)创建一个跑马灯背景

    let BG = UIView()
    BG.layer.cornerRadius = 6
    BG.backgroundColor = .black.withAlphaComponent(0.4)
    self.view.addSubview(BG)
    BG.snp.makeConstraints  make in
        make.left.equalTo(20)
        make.width.equalTo(300)
        make.top.equalTo(200)
        make.height.equalTo(50)
    

2、(8行代码)为第三步创建一个隐藏的父view,clipsToBounds = true是关键,可以让文字不超出去。

    let announceBG = UIView()
    announceBG.clipsToBounds = true
    BG.addSubview(announceBG)
    announceBG.snp.makeConstraints  make in
        make.left.equalTo(40)
        make.right.equalTo(-10)
        make.top.bottom.equalTo(0)
    

3、(8行代码)创建一个label,用来显示文字并滚动。布局的make.left.equalTo(announceBG.snp.right)是关键,让label在父视图的右侧开始。

    let announceL = UILabel()   
    announceL.textColor = .white
   announceL.font = .systemFont(ofSize: 18)
   announceBG.addSubview(announceL)
   announceL.snp.makeConstraints  make in
       make.top.bottom.equalToSuperview()
       make.left.equalTo(announceBG.snp.right)
   

4、(23行代码)动画

    var msg: String = "" // 用于记录上一个公告
    func showScrollAnimation(content: String) 
                
        self.msg = content
        self.announceL.text = msg

        // 1、根据文字长度取得一个动画时间。6.0的系数自己把握。
        var duration = CGFloat(msg.count)/6.0
        // 2、如果文字长度小于announceBG的长度,动画时间设置为6。时间自己把握。
        // 这样较长文字和较短的文字都能平稳的移动。
        let charW = sizeWithText(text: msg, font: .systemFont(ofSize: 18), size: .zero)
        let announceBgW = 300 - 40 - 10
        if charW < announceBgW 
            duration = 6
        
        
        // 动画
        UIView.animate(withDuration: duration, delay: 0, options: .curveLinear) 
            // 对文字label平移动画,移动一个自身字符长度加背景的长度
            self.announceL.transform = CGAffineTransform(translationX: -charW - announceBgW, y: 0)
         completion:  completed in
            // 动画完了,让label复原。并再调用该方法反复动画。大功告成。求点赞关注收藏。
            self.announceL.transform = .identity
            self.showScrollAnimation(content: self.msg)
        
    
    
    // 计算字符串长度
    func sizeWithText(text: String, font: UIFont, size: CGSize) -> CGFloat 
        let attributes = [NSAttributedString.Key.font: font]
        let option = NSStringDrawingOptions.usesLineFragmentOrigin
        let width = text.boundingRect(with: size, options: option, attributes: attributes, context: nil).size.width
        return width
    

5、(共49行代码)大功告成。求打赏、点赞、关注、收藏。博主正在做【小南斗】app,一个关于命理八字的app,感兴趣可去appstore下载查看哦。😄

以上是关于swift 跑马灯(50行代码完美实现,超简单)的主要内容,如果未能解决你的问题,请参考以下文章

swift 跑马灯(50行代码完美实现,超简单)

OC Swift 走马灯效果

MATLAB 50行代码绘制超好看的旋转九边形

android ViewPager实现 跑马灯切换图片+多种切换动画

MT50高中曲线系集大成之双切线法

pygame实现简单的金币旋转效果,不到50行代码哦!