chenzhao

  • java
  • iOS
  • IT
知识积累
不积跬步无以至千里
  1. 首页
  2. iOS
  3. 正文

ios 跑马灯

2017年 2月 8日 70点热度 0人点赞 0条评论

swift3 可将time 换成GCD 优化 使用过程

/// 跑马灯View 需要手动调用清理函数
class MarqueeView: UIView {

    var iconImageView:UIImageView!
    var titleLabel:UILabel!
    var showLabel:UILabel!
    
    /// 显示的跑马灯数组
    var showTextArray:[String] = ["测试跑马灯1","测试跑马灯2","测试跑马灯3","测试跑马灯4"]
    
    /// 显示到的位置
    var showTextCount = 0
    var showtime:Timer?
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        let icon_W = frame.height*0.4444
        self.iconImageView = UIImageView(frame: CGRect(x: interval_W_20, y: 0, width: icon_W, height: icon_W))
        self.iconImageView.frame.origin.y = frame.height * 0.2777
        self.addSubview(self.iconImageView)
        
        self.titleLabel = UILabel()
        self.titleLabel.font = GlobalFont_32
        self.titleLabel.textColor = GlobalMainToneColor_2_4
        self.addSubview(self.titleLabel)
        
        self.showLabel = UILabel()
        self.showLabel.font = GlobalFont_32
        self.showLabel.textColor = GlobalTxtColor_1
        self.addSubview(self.showLabel)
        self.layer.masksToBounds = true
        
    }
    func setData(icon:UIImage,title:String,showTextArr:[String],backColor:UIColor = UIColor.white)  {
        self.backgroundColor = backColor
        self.iconImageView.image = icon
        self.titleLabel.text = title.truncate(start: 0, end: 8)
        self.titleLabel.sizeToFit()
        self.titleLabel.frame.origin.x = self.iconImageView.frame.origin.x+self.iconImageView.frame.width+interval_W_20
        self.titleLabel.center.y = self.iconImageView.center.y
        self.showLabel.frame.origin.x = self.titleLabel.frame.origin.x+self.titleLabel.frame.width + interval_W_20
        if self.showTextArray != showTextArr{
           self.showTextArray = showTextArr
            self.showTextCount = 0
        }
        if showtime != nil{
           showtime!.invalidate()
           showtime = nil
        }
        self.timeChange()
        self.showtime = Timer.scheduledTimer(timeInterval: timeInterval, target: self, selector: #selector(self.timeChange), userInfo: nil, repeats: true)
        
        
    }
    deinit {
        
         printLog("deinit MarqueeView")
    }
    func clear(){
        self.stopTime()
    }
    /// 必须手动调用
    private func stopTime(){
        if showtime != nil{
            showtime!.invalidate()
            showtime = nil
        }
    }
    /// 时间间隔
    let timeInterval:Double = 5
    /// 时间到处理函数
    func timeChange(){
        if self.showTextCount < self.showTextArray.count{
           self.showLabel.text = self.showTextArray[self.showTextCount]
            self.showTextCount += 1
        }else{
           self.showTextCount = 0
            self.showLabel.text = self.showTextArray[self.showTextCount]
        }
        self.showLabel.sizeToFit()
        var frame = self.showLabel.frame
        frame.origin.y = self.frame.height
        self.showLabel.frame = frame
        UIView.beginAnimations("showText", context: nil)
        UIView.setAnimationDuration(timeInterval)
        UIView.setAnimationCurve(UIViewAnimationCurve.linear)
        UIView.setAnimationDelegate(self)
        UIView.setAnimationRepeatAutoreverses(false)
        UIView.setAnimationRepeatCount(0)
        frame = self.showLabel.frame
        frame.origin.y = -frame.size.height
        self.showLabel.frame = frame
        UIView.commitAnimations()
        
    }
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }


}

标签: 暂无
最后更新:2022年 11月 11日

陈昭

IT 程序员

打赏 点赞
< 上一篇
下一篇 >

文章评论

取消回复

COPYRIGHT © 2022 chenzhao. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang