OC跑马灯/滚动文字条

4 篇文章 0 订阅

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

注意:只有一个时,会自动补足多个,循环播放

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

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

swift版本

用法:

一、引入runhouse文件夹中的所有文件,导入 "UIRunHouseView.h"文件:

#import "UIRunHouseView.h"

二、配置数据源:UIRunHouseViewDatasourse:

生成view可以frame也可以autolayout布局,这里为了方便

设置space属性实现item间距,默认30

 self.runHouse = [[UIRunHouseView alloc]initWithFrame:CGRectMake(0, 100, self.view.frame.size.width, 40)];
    self.runHouse.datasourse = self;
    

三、注册重用cell:

如果需要重用前处理数据,cell请使用UIRunHouseItem子类,重写prepareforreuse。

如果不需要,cell直接uiview子类即可

  [self.runHouse registerClass:LYHCustomRunHouseView.class forCellReuseIdentifier:@"LYHCustomRunHouseView"];
    [self.runHouse registerClass:LYHImageTitleVIew.class forCellReuseIdentifier:@"LYHImageTitleVIew"];

四、实现数据源方法:

-(NSInteger)numberOfItemsInRunHouseView:(UIRunHouseView *)view;  //一共多少个item
-(CGFloat)runHouseView:(UIRunHouseView *)runHouseView widthForIndex:(int)index; //每个item的宽度,内部已经进行宽度缓存,外面不再需要
-(nullable UIRunHouseItem *)runHouseView:(UIRunHouseView *)runHouseView itemForIndex:(int)index;  //每个位置对应的视图

举例:

- (NSInteger)numberOfItemsInRunHouseView:(UIRunHouseView *)view{
    return self.datas.count;
}

- (UIRunHouseItem *)runHouseView:(UIRunHouseView *)runHouseView itemForIndex:(int)index{
    if (index % 2 == 0) {
        LYHCustomRunHouseView * item = (LYHCustomRunHouseView *)[runHouseView dequeneItemViewResueIdentity:@"LYHCustomRunHouseView"];
        if (item == nil) {
            item = [LYHCustomRunHouseView new];
        }
        item.backgroundColor = [UIColor redColor];
        item.label.text = self.datas[index];
        return item;
    }else{
        LYHImageTitleVIew * item = (LYHImageTitleVIew *)[runHouseView dequeneItemViewResueIdentity:@"LYHImageTitleVIew"];
        if (item == nil) {
            item = [LYHImageTitleVIew new];
        }
        item.backgroundColor = [UIColor redColor];
        item.label.text = self.datas[index];
        item.imageView.image = [UIImage imageNamed:@"Image"];
        return item;
    }
   
}

- (CGFloat)runHouseView:(UIRunHouseView *)runHouseView widthForIndex:(int)index{
    NSString * str = self.datas[index];
    UIFont * font = [UIFont systemFontOfSize:20];
    CGRect rect = [str boundingRectWithSize:CGSizeMake(0, 40) options:NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName:font}context:nil];
    if (index % 2 == 0) {
          return rect.size.width + 10;
    }else{
        return rect.size.width + 30;
    }
  
}

四、reloaddata刷新数据

好了,一个跑马灯就完成了

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值