gpt4 book ai didi

ios - 动画 UICollectionView contentOffset 不显示不可见的单元格

转载 作者:IT王子 更新时间:2023-10-29 08:02:53 25 4
gpt4 key购买 nike

我正在研究一些类似代码的功能,并且正在使用 UICollectionView。它最初是一个 scrollView,但我们认为 collectionView 将使添加/删除单元格变得更容易。

我正在使用以下内容为 collectionView 设置动画:

- (void)beginAnimation {
[UIView animateWithDuration:((self.collectionView.collectionViewLayout.collectionViewContentSize.width - self.collectionView.contentOffset.x) / 75) delay:0 options:(UIViewAnimationOptionCurveLinear | UIViewAnimationOptionRepeat | UIViewAnimationOptionBeginFromCurrentState) animations:^{
self.collectionView.contentOffset = CGPointMake(self.collectionView.collectionViewLayout.collectionViewContentSize.width, 0);
} completion:nil];
}

这对 ScrollView 来说效果很好,而动画是在 Collection View 上发生的。但是,实际上只有动画结束时可见的单元格才会被渲染。调整 contentOffset 不会导致调用 cellForItemAtIndexPath。如何在 contentOffset 更改时让单元格呈现?

编辑:更多引用(不确定是否有帮助):

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
TickerElementCell *cell = (TickerElementCell *)[collectionView dequeueReusableCellWithReuseIdentifier:@"TickerElementCell" forIndexPath:indexPath];
cell.ticker = [self.fetchedResultsController objectAtIndexPath:indexPath];
return cell;
}

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller {

// ...

[self loadTicker];
}

- (void)loadTicker {

// ...

if (self.animating) {
[self updateAnimation];
}
else {
[self beginAnimation];
}
}

- (void)beginAnimation {

if (self.animating) {
[self endAnimation];
}

if ([self.tickerElements count] && !self.animating && !self.paused) {
self.animating = YES;
self.collectionView.contentOffset = CGPointMake(1, 0);
[UIView animateWithDuration:((self.collectionView.collectionViewLayout.collectionViewContentSize.width - self.collectionView.contentOffset.x) / 75) delay:0 options:(UIViewAnimationOptionCurveLinear | UIViewAnimationOptionAllowUserInteraction | UIViewAnimationOptionRepeat | UIViewAnimationOptionBeginFromCurrentState) animations:^{
self.collectionView.contentOffset = CGPointMake(self.collectionView.collectionViewLayout.collectionViewContentSize.width, 0);
} completion:nil];
}
}

最佳答案

您应该简单地在动画 block 中添加 [self.view layoutIfNeeded];,如下所示:

[UIView animateWithDuration:((self.collectionView.collectionViewLayout.collectionViewContentSize.width - self.collectionView.contentOffset.x) / 75) delay:0 options:(UIViewAnimationOptionCurveLinear | UIViewAnimationOptionAllowUserInteraction | UIViewAnimationOptionRepeat | UIViewAnimationOptionBeginFromCurrentState) animations:^{
self.collectionView.contentOffset = CGPointMake(self.collectionView.collectionViewLayout.collectionViewContentSize.width, 0);
[self.view layoutIfNeeded];
} completion:nil];

关于ios - 动画 UICollectionView contentOffset 不显示不可见的单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22389904/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com