Swift版跑马灯,代码如下:
//
// PaoMaView.swift
// JiuLiFunds
//
// Created by yangyunfei on 2018/1/11.
// Copyright © 2018年 JiuLiFunds. All rights reserved.
//
import UIKit
//跑马灯
class PaoMaView: UIView {
//这里的 label 要显示的宽度为屏幕宽度
var stop: Bool =false
var content:String? {
didSet{
//移除之前所有的动画
lb.layer.removeAllAnimations()
lb.text =content
lb.snp.remakeConstraints({ (make)in
make.centerY.equalToSuperview()
make.height.equalTo(40)
make.left.equalTo(self.snp.right)
make.width.equalTo(self.textWidth)
})
self.circleText()
}
}
lazy var lb :UILabel = {
let lb = UILabel()
lb.backgroundColor =UIColor.RGBCOLOR(255,241, 217)
lb.textColor = UIColor.hexToUIColor(sourceString: "e69822")
lb.font = UIFont.systemFont(ofSize: 14)
return lb
}()
//计算text的宽度
var textWidth: CGFloat {
return getTextSizeWithText(text:self.lb.text, fontNew:FONT14, textWidth: 5000).width
}
override init(frame:CGRect) {
super.init(frame: frame)
self.addSubview(lb)
lb.snp.makeConstraints({ (make)in
make.centerY.equalToSuperview()
make.height.equalTo(40)
make.left.equalTo(self.snp.right)
make.width.equalTo(self.textWidth)
})
}
required init?(coder aDecoder:NSCoder) {
fatalError("init(coder:) has not been implemented")
}
// 关键代码
func circleText(){
//text宽度小于视图的宽度时,不进行跑马
if textWidth <self.frame.width {
lb.snp.remakeConstraints({ (make)in
make.center.equalToSuperview()
})
return
}
UIView.animate(withDuration:TimeInterval(textWidth /35), delay: 0, options: .curveLinear, animations: {
self.lb.transform = .init(translationX: -(self.frame.width + self.textWidth), y:0)
}) { (bool) in
// 循环调用 ,退出Controller 时候 记得移除动画
if bool {
self.lb.transform = .identity
self.circleText()
}
}
}
}
paomaView.content = "跑起来。。。。。。。。。。。。。。。"