ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

简单:swift 实现文本横向滚动,跑马灯效果

2022-07-01 11:03:50  阅读:250  来源: 互联网

标签:self messageScrollView timer 跑马灯 let 文本 swift view


实现思路:UIScrollView上放UIlabel ,ScrollView.contentSize的宽和文本宽度一样,然后设置定时器循环调用改变选定的X坐标,到达最大宽度后,重复执行

1.定义如下三个:

    privatevartimer: Timer? //消息滚动定时器

    privatevarscrollContentOffsetX: CGFloat = 0//消息横向滚动位置记录

    privatevarmessageW: CGFloat = 0//消息宽度

 

    overridefuncviewDidLoad() {

        super.viewDidLoad()

        createUI()

    }

 

    funccreateUI() {

         //视图布局

        headView.addSubview(messageImageV)

        headView.addSubview(messageScrollView)//可以滚动的视图

        messageScrollView.addSubview(messageLb)//具体消息内容

    }  

    //可以滚动视图

    lazy var messageScrollView: UIScrollView = {

        let view = UIScrollView()

        view.showsVerticalScrollIndicator = false

        view.showsHorizontalScrollIndicator = true

        view.isScrollEnabled = false//可以滚动

        return view

    }()

 

    //MARK: ---- 显示消息详情label

    lazy var messageLb: UILabel = {

        let view = UILabel()

        view.text = ""

        view.textColor = .hexColor("#FFFFFF")

        view.textAlignment = .left

        view.font = .font(size: 12, alias: .pfMedium)

        return view

    }()

 

2.拿到文本的地方,计算文本宽度(去掉里面的换行和空格) model.newsDescribe 就是拿到的文本

                 let firstMessage =  model.newsDescribe.replacingOccurrences(of: " ", with: "")//处理换行

                 let setMessage = "   " + firstMessage.replacingOccurrences(of: "\n", with: "")//处理换行

                    //计算文本宽度

                    let descWidth = setMessage.boundingRect(with: CGSize.init(width: CGFloat(MAXFLOAT), height: CGFloat(20)), options: .usesLineFragmentOrigin, attributes: [.font: UIFont.font(size: 12, alias: .pfMedium)], context: nil).size.width

                    print("文本宽度")

                    self.messageW = descWidth

                    self.messageLb.text = String(setMessage)

                    self.messageScrollView.contentSize = CGSize(width: descWidth, height: 20)

                    self.startTimer()

 

3.定时器方法处理

    //MARK: ---- 开启定时器

    private func startTimer() {

        self.timer?.invalidate()

        self.timer = nil

        self.timer = Timer.scheduledTimer(timeInterval: 0.03, target: self, selector: #selector(timerSelector), userInfo: nil, repeats: true)

        iflet `timer` = timer {

            RunLoop.main.add(timer, forMode: .common)

        }

    }

 

    //MARK: ---- 定时器调用

    @objc private func timerSelector() {

        ifmessageW < self.messageLb.frame.width - 10 {

            scrollContentOffsetX = 0

            messageScrollView.setContentOffset(CGPoint.init(x: 0, y: 0), animated: false)

            return

        }

        ifmessageScrollView.contentOffset.x >= messageW {

            scrollContentOffsetX = 0

            messageScrollView.setContentOffset(CGPoint.init(x: 0, y: 0), animated: false)

        }

        scrollContentOffsetX += 1

        messageScrollView.setContentOffset(CGPoint.init(x: scrollContentOffsetX, y: 0), animated: true)

    }

 

  

标签:self,messageScrollView,timer,跑马灯,let,文本,swift,view
来源: https://www.cnblogs.com/-ios/p/16433793.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有