You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
132 lines
4.2 KiB
132 lines
4.2 KiB
// |
|
// WXYZ_AnnouncementView.m |
|
// GKADRollingView |
|
// |
|
// Created by Gao on 2017/2/16. |
|
// Copyright © 2017年 gao. All rights reserved. |
|
// |
|
|
|
#import "WXYZ_AnnouncementView.h" |
|
|
|
@interface WXYZ_AnnouncementView () <UICollectionViewDelegate,UICollectionViewDataSource> |
|
{ |
|
NSTimer *_timer; |
|
UICollectionView *_collectionView; |
|
} |
|
|
|
@property (nonatomic, assign) NSInteger visibleItems; |
|
|
|
@end |
|
|
|
@implementation WXYZ_AnnouncementView |
|
|
|
- (instancetype)initWithFrame:(CGRect)frame |
|
{ |
|
if (self = [super initWithFrame:frame]) { |
|
[self createSubviews]; |
|
} |
|
return self; |
|
} |
|
|
|
- (void)createSubviews |
|
{ |
|
UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; |
|
layout.minimumLineSpacing = 0; |
|
layout.minimumInteritemSpacing = 0; |
|
layout.scrollDirection = UICollectionViewScrollDirectionVertical; |
|
layout.itemSize = CGSizeMake(SCREEN_WIDTH - 2 * kMargin, kLabelHeight); |
|
|
|
_collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height) collectionViewLayout:layout]; |
|
_collectionView.showsVerticalScrollIndicator = NO; |
|
_collectionView.pagingEnabled = YES; |
|
_collectionView.scrollEnabled = NO; |
|
_collectionView.delegate = self; |
|
_collectionView.dataSource = self; |
|
_collectionView.backgroundColor = [UIColor clearColor]; |
|
[self addSubview:_collectionView]; |
|
[_collectionView registerClass:[WXYZ_AnnouncementViewCollectionViewCell class] forCellWithReuseIdentifier:@"WXYZ_AnnouncementViewCollectionViewCell"]; |
|
|
|
[_collectionView mas_makeConstraints:^(MASConstraintMaker *make) { |
|
make.edges.mas_equalTo(self); |
|
}]; |
|
|
|
} |
|
|
|
- (void)setModelArr:(NSArray<TFAnnouncementModel *> *)modelArr |
|
{ |
|
if (_modelArr != modelArr) { |
|
_modelArr = modelArr; |
|
[_collectionView reloadData]; |
|
|
|
if (_timer == nil) { |
|
_timer = [NSTimer timerWithTimeInterval:_duration?:5 target:self selector:@selector(nextPage) userInfo:nil repeats:YES]; |
|
NSRunLoop *runloop = [NSRunLoop currentRunLoop]; |
|
[runloop addTimer:_timer forMode:NSRunLoopCommonModes]; |
|
} |
|
} |
|
} |
|
|
|
- (void)starTimer |
|
{ |
|
//开启定时器 |
|
[_timer setFireDate:[NSDate distantPast]]; |
|
} |
|
|
|
- (void)stopTimer |
|
{ |
|
//暂停定时器 |
|
[_timer setFireDate:[NSDate distantFuture]]; |
|
} |
|
|
|
- (void)nextPage |
|
{ |
|
@try { |
|
if (self.visibleItems == _modelArr.count) { |
|
self.visibleItems = 0; |
|
[self->_collectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForRow:self.visibleItems inSection:0] atScrollPosition:UICollectionViewScrollPositionNone animated:NO]; |
|
} |
|
self.visibleItems++; |
|
dispatch_async(dispatch_get_main_queue(), ^{ |
|
if (self.visibleItems < _modelArr.count) { |
|
[self->_collectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForRow:self.visibleItems inSection:0] atScrollPosition:UICollectionViewScrollPositionNone animated:YES]; |
|
} |
|
}); |
|
} @catch (NSException *exception) { |
|
|
|
} @finally { |
|
|
|
} |
|
} |
|
|
|
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section |
|
{ |
|
return _modelArr.count + 1; |
|
} |
|
|
|
- (WXYZ_AnnouncementViewCollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath |
|
{ |
|
WXYZ_AnnouncementViewCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"WXYZ_AnnouncementViewCollectionViewCell" forIndexPath:indexPath]; |
|
cell.textColor = self.textColor; |
|
cell.isCenter = self.isCenter; |
|
if (indexPath.row == 0) { |
|
cell.announcementModel = _modelArr.lastObject; |
|
} else { |
|
if (indexPath.row - 1 >= 0 && indexPath.row - 1 < _modelArr.count) { |
|
cell.announcementModel = _modelArr[indexPath.row - 1]; |
|
} else { |
|
cell.announcementModel = _modelArr.firstObject; |
|
} |
|
} |
|
return cell; |
|
} |
|
|
|
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath |
|
{ |
|
if (indexPath.row == 0) { |
|
self.clickAdBlock(_modelArr.lastObject.content, indexPath.row); |
|
} else { |
|
self.clickAdBlock(_modelArr[indexPath.row - 1].content, indexPath.row - 1); |
|
} |
|
} |
|
|
|
@end
|
|
|