标签: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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。