日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無(wú)先后,達(dá)者為師

網(wǎng)站首頁(yè) 編程語(yǔ)言 正文

iOS實(shí)現(xiàn)無(wú)限滑動(dòng)效果_IOS

作者:JackLee18 ? 更新時(shí)間: 2022-05-23 編程語(yǔ)言

在看到這個(gè)標(biāo)題的時(shí)候,相信大家心里肯定會(huì)想,無(wú)限循環(huán)輪播的博客已經(jīng)滿天飛了,好有必要寫(xiě)么。這里我想聲明一下,這里的無(wú)線滑動(dòng),但是數(shù)據(jù)卻不循環(huán)。

實(shí)現(xiàn)原理

由于業(yè)務(wù)的需求,需要有大量的數(shù)據(jù)呈現(xiàn)在collectionView上,但是又不想刷新全部的數(shù)據(jù),因此需要制定collectionView的cell的數(shù)量為有限的。針對(duì)這一種情況,我們需要保證頁(yè)面刷新數(shù)據(jù)源的索引和頁(yè)面滑動(dòng)的索引是不致的。同時(shí)滑動(dòng)停止后,悄悄的將collectionView恢復(fù)到初始的位置。
具體源碼如下:

@interface JKReadViewController ()
{
? ? NSArray *_datas;
}
@property (nonatomic,assign) ?NSInteger currentIndex;
@property (nonatomic,assign) NSInteger cellCount;
@property (nonatomic,assign) NSInteger sectionNum;
@end

@implementation JKReadViewController

- (UICollectionViewFlowLayout *)collectionViewLayout{
? ? UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
? ? flowLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
? ? return flowLayout;
}

- (Class)cellClass{
? ? return [JKPageCollectionCell class];
}

- (void)viewDidLoad {
? ? [super viewDidLoad];
? ? // Do any additional setup after loading the view.
}

- (void)configOrigin{
? ? self.sectionNum = floor(self.dataIndex/self.cellCount);
? ? self.currentIndex = 1;//當(dāng)前CollectionView的索引

? ? NSIndexPath *idxPath = [NSIndexPath indexPathForItem:1 inSection:0];

? ? [self.collectionView scrollToItemAtIndexPath:idxPath atScrollPosition:0 animated:NO];
}

- (void)viewDidAppear:(BOOL)animated{
? ? [super viewDidAppear:animated];
? ? [self configOrigin];
}

- (void)configUI{
? ? [super configUI];
? ? self.collectionView.pagingEnabled = YES;
? ? self.collectionView.showsHorizontalScrollIndicator = NO;
? ? self.collectionView.bounces = NO;
}


-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{

? ? NSInteger index = scrollView.contentOffset.x/ scrollView.bounds.size.width;
? ? if (index>self.currentIndex) {
? ? ? ? self.dataIndex++;//數(shù)據(jù)源的索引
? ? }else if (index< self.currentIndex){
? ? ? ? self.dataIndex--;
? ? ? ? self.dataIndex = self.dataIndex<0?0:self.dataIndex;
? ? }
? ? NSIndexPath *indexPath = [NSIndexPath indexPathForItem:1 inSection:0];
? ? [self.collectionView reloadItemsAtIndexPaths:@[indexPath]];
? ? dispatch_async(dispatch_get_main_queue(), ^{
? ? ? ? [self.collectionView scrollToItemAtIndexPath:indexPath atScrollPosition:0 animated:NO];

? ? });

}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath*)indexPath {

? ? JKPageCollectionCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:[JKPageCollectionCell CellIndentifier] forIndexPath:indexPath];
? ? ? ? ?NSString *title = self.datas[self.dataIndex];
? ? ? ? [cell updateViewWithModel:title];

? ? return cell;

}

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
? ? return self.cellCount;
}


- (NSArray *)datas{//模擬的大量的數(shù)據(jù)源
? ? if (!_datas) {
? ? ? ? NSMutableArray *tempArray = [NSMutableArray new];
? ? ? ? for (NSInteger i = 0; i< 1000; i++) {
? ? ? ? ? ? NSString *string = [NSString stringWithFormat:@"%@",@(i)];
? ? ? ? ? ? [tempArray addObject:string];
? ? ? ? }
? ? ? ? _datas = [tempArray copy];
? ? }
? ? return _datas;
}

- (NSInteger)cellCount{
? ? return 3;//單元格的數(shù)量
}

- (void)didReceiveMemoryWarning {
? ? [super didReceiveMemoryWarning];
? ? // Dispose of any resources that can be recreated.
}


@end

實(shí)現(xiàn)動(dòng)畫(huà)效果如下:

原文鏈接:https://blog.csdn.net/hanhailong18/article/details/81138554

欄目分類
最近更新