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行代码完美实现,超简单)的主要内容,如果未能解决你的问题,请参考以下文章