在 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
方法。
我需要在启动时为 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
方法。