#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;
/**
廣告位提示文字數(shù)組
*/
@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的個數(shù)
}
@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;
}
/*
創(chuàng)建子視圖
*/
-(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;//設(shè)置為0不設(shè)置則有默認行間距
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);
//意思是內(nèi)容大于CollectionView的寬度的時候,偏移量就增加1
//當(dāng)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 對應(yīng)item的寬度
*/
- (CGFloat)getCellWidthWithIndexPath:(NSIndexPath *)indexPath
{
//tipStrArr 廣告位提示文字數(shù)組
NSInteger tipCount = self.tipStrArr.count;
//這樣求余的結(jié)果是所有的的內(nèi)容就會輪番顯示
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
跑馬燈
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 因為業(yè)務(wù)需求,需要設(shè)置文字的跑馬燈效果,查閱相關(guān)資料后發(fā)現(xiàn)資料比較散亂,現(xiàn)整理如下: 1.單跑馬燈效果(系統(tǒng)自帶T...
- 文字跑馬燈效果這個功能挺常見的,網(wǎng)上也有很多的介紹,大多是說使用普通的TextView加上幾條屬性即可實現(xiàn)。不過我...
- Marquee(跑馬燈) 說一下初衷吧,最初要用到跑馬燈功能的時候,也找過一些SDK,但未能找到與我需求很好契合的...
- 湖北人最愛吃什么菜? 99%的湖北人最愛吃的是哪一道家常菜? 作為一名地地道道的湖北宜昌妹子,我表示對“臘肉火鍋”...