IOS控件系列---文本上下滚动的标签实现广告

一.效果:




实现思路较简单,这里不作分析了,直接上代码:


import Foundation

import UIKit




/// 滚动标签点击事件

protocol ScrollLabelListener {

    

    func onClickListener(view : UIView)

}



/// 上下滚动的标签视图--常用于上下滚动的广告标签中

class ScrollLabelView: UIView {

    

    var delegate : ScrollLabelListener?

    var titles : Array<String>?

    

    var nTitleIdx : Int = 1

    var nIdx : Int = 1

    

    var labelSize : CGRect = CGRect.zero

    

    

    


    

    /*

     Swift 中不加修饰的 init 方法都需要在方法中保证所有非 Optional 的实例变量被 赋值初始化

     */

    override init(frame: CGRect) {

        super.init(frame: frame)

    }

    

    required init?(coder aDecoder: NSCoder) {

        fatalError("init(coder:) has not been implemented")

    }

    

    

    func initWithTitles(titles : Array<String>, andFrame:CGRect) {

        

        self.titles = titles

        self.labelSize = andFrame

        

        let btn : UIButton = UIButton.init(frame : CGRect.init(x: 0, y: 0, width: andFrame.width, height: andFrame.height))

        btn.tag = self.nIdx

        btn.setTitleColor(UIColor.black, for: .normal)

        btn.setTitle(self.titles?[0], for: .normal)

        btn.addTarget(self, action: #selector(onClick), for: .touchUpInside)

        self.addSubview(btn)

        

        Timer.scheduledTimer(timeInterval: 3,

                             target:self,

                             selector:#selector(self.buildNextLabel),

                             userInfo:nil,

                             repeats:true)

        

    }

    

    func buildNextLabel() {

        

        

        self.nTitleIdx = self.nTitleIdx % (self.titles?.count)!

        self.nIdx = self.nIdx % (self.titles?.count)! == 0 ? (self.titles?.count)! : self.nIdx % (self.titles?.count)!

        

        let oldBtn : UIButton = self.viewWithTag(self.nIdx) as! UIButton

        let newBtn : UIButton = UIButton.init(frame: CGRect.init(x: 0, y: labelSize.height, width: labelSize.width, height: labelSize.height))

        

        newBtn.tag = self.nIdx + 1 > (self.titles?.count)! ? 1self.nIdx + 1

        newBtn.addTarget(self, action: #selector(onClick), for: .touchUpInside)

        newBtn.setTitleColor(UIColor.black, for: .normal)

        newBtn.setTitle(self.titles?[self.nTitleIdx], for: .normal)

        

        self.addSubview(newBtn)

        

        

        UIView.animate(withDuration: 0.25, animations: {() -> Void in

        

            oldBtn.setY(y: -self.labelSize.height)

            newBtn.setY(y: 0)

        

        }, completion: {(finished) -> Void in

            

            oldBtn.removeFromSuperview()

            

        })

        

        self.nIdx += 1

        self.nTitleIdx += 1

    }

    

    func bindClickEvent(clickEvent : ScrollLabelListener) {

        

        delegate = clickEvent

    }

    

    func onClick(button : UIButton) {

        

        

        if let tmpClick = delegate{

        

            tmpClick.onClickListener(view: button)

        }

        

    }

    

    

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值