swift跑马灯/滚动文字条

2 篇文章 0 订阅

语言版本:swift4.2 

工作中,很容易碰到跑马灯效果,网上的感觉都不怎么满意,就自己封装了个。

注意:一个时,会自动生成多个相同的循环播放

优点:支持autolayout布局、不仅限于label展示、宽度缓存处理、视图因需生成、视图缓存处理、用法简单和UItableView类似,可看demo

下载连接:https://github.com/wokua/LYHEntertainingDiversions-swift.git喜欢的话麻烦打个星支持下

OC版本

用法:

一 设置数据源:UIRunHouseViewDatasourse,设置space定义每个item间距,默认30

let runhouseView = UIRunHouseView()
runhouseView.dataSourse = self

二、注册重用cell

UIView的子类即可,如果需要在重用前处理cell内容,可以实现UIRunHouseItemProtocol协议,prepareForReuse方法里面处理就好

 runhouseView?.registerClasse(classType: CustomRunHouseView.classForCoder(), reuseIdentifier: "CustomRunHouseView")
        runhouseView?.registerClasse(classType: ImageTitleView.classForCoder(), reuseIdentifier: "ImageTitleView")

三、实现数据源方法:

 func numberOfItemsInRunHouseView(view:UIRunHouseView) -> Int;//一共多少个

  func runHouseView(runHouseView:UIRunHouseView,widthForIndex index:Int) -> CGFloat;//每个item宽度 ,内部已经实现缓存

   func runHouseView(runHouseView:UIRunHouseView,itemForIndex index:Int) -> UIView;//每个item的视图,因需生成,已经实现缓存

 func numberOfItemsInRunHouseView(view: UIRunHouseView) -> Int {
        return 3
    }
 func runHouseView(runHouseView: UIRunHouseView, itemForIndex index: Int) -> UIView {
        
        if index % 2 == 0 {
            var view = runHouseView.dequeneItemViewResueIdentity(resueIdentity: "CustomRunHouseView") as? CustomRunHouseView
            if view == nil {
                view = CustomRunHouseView()
            }
            view?.label.text = self.datas[index]
            return view!
        }else{
            var view = runHouseView.dequeneItemViewResueIdentity(resueIdentity: "ImageTitleView") as? ImageTitleView
            if view == nil {
                view = ImageTitleView()
            }
            view?.label.text = self.datas[index]
            return view!
        }
    }
    func runHouseView(runHouseView: UIRunHouseView, widthForIndex index: Int) -> CGFloat {
        let str = self.datas[index]
        let font = UIFont.systemFont(ofSize: 20)
        let rect = str.boundingRect(with:CGSize.init(width: CGFloat(MAXFLOAT), height: 50),options: NSStringDrawingOptions.usesLineFragmentOrigin,attributes: [NSAttributedString.Key.font:font],context:nil)
        if index % 2 == 0{
            return rect.size.width + 10
        }else{
            return rect.size.width + 50
        }
    }

四、reloaddata 刷新数据

效果图:

​​​​​​​

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值