在 iOS7+ 中动画化 UICollectionViewCell 可见性的最佳方式

Best way to animate visiblity of UICollectionViewCell in iOS7+

我需要在启动时为 UICollectionViewCells 的可见性设置动画,以便它们在我的应用程序启动时随机可见。但是因为我已经有了要显示的项目,所以它们同时可见。我尝试了以下解决方案并且它工作正常。但我想知道实现此任务的最佳和优化方法

- (void)animateCollectionViewCellsVisiblity
{
    // First set alpha to 0
    for (NSUInteger i = 0; i< self.dataArray.count; i++)
    {
        [self applyAlpha:0.0 toItem:i inSection:0];
    }

    // Initially collectionview is hidden while fetching data, so show it now
    self.collectionView.hidden = NO;

    // Now set alpha to 1 with a random delay
    for (NSUInteger i = 0; i< self.dataArray.count; i++)
    {
        CGFloat delay = [self randomNumberWithlowerBound:0 upperBound:self.dataArray.count] + 0.05;
        [UIView animateWithDuration:.2 delay:delay options:UIViewAnimationOptionCurveEaseIn animations:^{
            [self applyAlpha:1.0 toItem:i inSection:0];
        } completion:nil];
    }
}

- (void)applyAlpha:(CGFloat)alpha toItem:(NSInteger)item inSection:(NSInteger)section
{
    MyCollectionViewCell *cell = (MyCollectionViewCell *)[self.collectionView cellForItemAtIndexPath:[NSIndexPath indexPathForItem:item inSection:section]];
    cell.alpha = alpha;
}

- (int)randomNumberWithlowerBound:(int)lowerBound upperBound:(int)upperBound
{
    int randomValue = arc4random_uniform(upperBound - lowerBound + 1) + lowerBound;
    return randomValue;
}

你的解决方案很棒。这就是它是如何完成的。对我来说看起来非常优化。

您可以通过删除始终为零的 section 参数来缩短代码。您可以通过在动画块之前仅添加两行来消除 applyAlpha 方法。