#import <UIKit/UIKit.h>
@class AdvertisementView;
typedef void(^CloseBtnClick) (AdvertisementView *view);
typedef void(^DidSelectItem) (NSIndexPath *indexPath,NSString *tipString);
@interface AdvertisementView : UIView
@property (nonatomic, copy) CloseBtnClick closeBtnClick;
@property (nonatomic, copy) DidSelectItem selectItemBlock;
/**
广告位提示文字数组
*/
@property (nonatomic, strong) NSArray *tipStrArr;
/**
每段广告之间的距离
*/
@property (nonatomic, assign) CGFloat tipDistance;
@end
#import "AdvertisementView.h"
#import "TitleTipCell.h"
#define MaxCount 2
#define MDK_SCREEN_WIDTH [[UIScreen mainScreen] bounds].size.width
/**
* 整个屏幕高度
*/
#define MDK_SCREEN_HEIGHT [[UIScreen mainScreen] bounds].size.height
#define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]
@interface AdvertisementView()<UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout>
{
NSTimer *timer;
CGFloat currentWidth;
NSInteger numberOfItems;//需要返回的item的个数
}
@property (nonatomic,strong) UICollectionView *collectionView;
@end
@implementation AdvertisementView
-(instancetype)initWithFrame:(CGRect)frame{
self = [super initWithFrame:frame];
if (self) {
self.backgroundColor = UIColorFromRGB(0xf0faf6);
[self createSubViews];
}
return self;
}
/*
创建子视图
*/
-(void)createSubViews{
UIImageView *leftImage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 44, 44)];
leftImage.backgroundColor = [UIColor clearColor];
leftImage.image = [UIImage imageNamed:@"ggl_lb_icon"];
[self addSubview:leftImage];
UIButton *rightBtn = [UIButton buttonWithType:UIButtonTypeCustom];
rightBtn.backgroundColor = [UIColor clearColor];
rightBtn.frame = CGRectMake(MDK_SCREEN_WIDTH-44, 0, 44, 44);
[rightBtn setImage:[UIImage imageNamed:@"ggl_x_close"] forState:UIControlStateNormal];
[rightBtn addTarget:self
action:@selector(closeBtnClickAction)
forControlEvents:UIControlEventTouchUpInside];
[self addSubview:rightBtn];
[self addSubview:self.collectionView];
}
/**
懒加载
*/
-(UICollectionView *)collectionView {
if (_collectionView == nil) {
UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc]init];
//左右间距
flowLayout.minimumInteritemSpacing = 0;
//行间距
flowLayout.minimumLineSpacing = 0;//设置为0不设置则有默认行间距
flowLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
_collectionView = [[UICollectionView alloc]initWithFrame:CGRectMake(44, 0, MDK_SCREEN_WIDTH - 88, 44) collectionViewLayout:flowLayout];
_collectionView.backgroundColor = [UIColor clearColor];
_collectionView.delegate = self;
_collectionView.dataSource = self;
_collectionView.showsHorizontalScrollIndicator = NO;
_collectionView.scrollEnabled = NO;
[_collectionView registerClass:[TitleTipCell class] forCellWithReuseIdentifier:@"cell"];
}
return _collectionView;
}
-(void)setTipStrArr:(NSArray *)tipStrArr{
_tipStrArr = tipStrArr;
[self addTimer];
[self.collectionView reloadData];
}
#pragma mark --- NSTimer --
/**
添加定时器
*/
-(void)addTimer{
timer = [NSTimer scheduledTimerWithTimeInterval:0.002 target:self selector:@selector(scrollCollectionView) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop]addTimer:timer forMode:NSRunLoopCommonModes];
}
/**
移除定时器
*/
-(void)removeTimer{
if (timer.isValid) {
[timer invalidate];
timer = nil;
}
}
//FIXME: MARK -- scrollCollectionView --
-(void)scrollCollectionView{
CGFloat x = self.collectionView.contentOffset.x;
NSLog(@"x---%f",x);
//意思是内容大于CollectionView的宽度的时候,偏移量就增加1
//当x小于偏移的宽度
if (x < (self.collectionView.contentSize.width -MDK_SCREEN_WIDTH + 87)) {
self.collectionView.contentOffset = CGPointMake(x+1, 0);
NSLog(@"self.collectionView.width--%f---%f",self.collectionView.contentSize.width,(self.collectionView.contentSize.width -MDK_SCREEN_WIDTH + 87));
NSLog(@"offset--11--%f--%@",self.collectionView.contentSize.width-MDK_SCREEN_WIDTH+87-x,NSStringFromCGPoint(self.collectionView.contentOffset));
}else{
CGFloat scroll_x = [self getTipArrInfomationWidth] - MDK_SCREEN_WIDTH + 88 ;
self.collectionView.contentOffset = CGPointMake(scroll_x, 0);
NSLog(@"offset--22--%f",self.collectionView.contentSize.width-MDK_SCREEN_WIDTH+87-x);
}
}
//TODO: MARK -- getTipArrInfomationWidth --
-(CGFloat)getTipArrInfomationWidth{
__block CGFloat totalWidth = 0;
[self.tipStrArr enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
CGFloat celWidth = [obj boundingRectWithSize:CGSizeMake(1000, 44) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingTruncatesLastVisibleLine attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:14]} context:nil].size.width + self.tipDistance;
totalWidth = totalWidth + celWidth;
}];
return totalWidth;
}
#pragma mark - UICollectionViewDataSource
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
return self.tipStrArr.count*MaxCount;
}
- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
TitleTipCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath];
NSInteger tipCount = self.tipStrArr.count;
NSString *tipString = self.tipStrArr[indexPath.row%tipCount];
cell.name.text = tipString;
cell.name.frame = CGRectMake(0, 0, [self getCellWidthWithIndexPath:indexPath], 44);
return cell;
}
#pragma Mark-- UICollectionViewDelegateFlowLayout
-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath{
return CGSizeMake([self getCellWidthWithIndexPath:indexPath], 44);
}
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{
NSInteger tipCount = self.tipStrArr.count;
NSString *tipString = self.tipStrArr[indexPath.row%tipCount];
if (self.selectItemBlock)
{
self.selectItemBlock(indexPath,tipString);
}
}
/**
返回某一个item的宽度
@param indexPath indexPath
@return 对应item的宽度
*/
- (CGFloat)getCellWidthWithIndexPath:(NSIndexPath *)indexPath
{
//tipStrArr 广告位提示文字数组
NSInteger tipCount = self.tipStrArr.count;
//这样求余的结果是所有的的内容就会轮番显示
NSString *tipString = self.tipStrArr[indexPath.row % tipCount];
CGFloat cellWith = [tipString boundingRectWithSize:CGSizeMake(1000, 44) options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading|NSStringDrawingTruncatesLastVisibleLine attributes:@{NSFontAttributeName :[UIFont systemFontOfSize:16.]} context:nil].size.width+self.tipDistance;
return cellWith;
}
#pragma mark - actions
- (void)closeBtnClickAction
{
[self removeTimer];
if (self.closeBtnClick)
{
self.closeBtnClick(self);
}
}
@end
跑马灯
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 因为业务需求,需要设置文字的跑马灯效果,查阅相关资料后发现资料比较散乱,现整理如下: 1.单跑马灯效果(系统自带T...
- 文字跑马灯效果这个功能挺常见的,网上也有很多的介绍,大多是说使用普通的TextView加上几条属性即可实现。不过我...
- Marquee(跑马灯) 说一下初衷吧,最初要用到跑马灯功能的时候,也找过一些SDK,但未能找到与我需求很好契合的...
- 湖北人最爱吃什么菜? 99%的湖北人最爱吃的是哪一道家常菜? 作为一名地地道道的湖北宜昌妹子,我表示对“腊肉火锅”...