UICollectionview 非并行动画
Posted
技术标签:
【中文标题】UICollectionview 非并行动画【英文标题】:UICollectionview non parallel animation 【发布时间】:2013-12-19 08:50:16 【问题描述】:我的问题简而言之:this effect on UICollectionView 怎么实现?
我有一个带有类似于网格布局的自定义布局的集合视图。现在,当我进入 collectionview 控制器时,我希望单元格有一个漂亮的动画。
我知道我可以实现 - initialLayoutAttributesForAppearingItemAtIndexPath:
等并在 collectionview 上调用 performBatchUpdates
。现在,当我这样做时,所有动画都是并行执行的(比如调用 UIView animate)。在许多应用程序中,我看到了在 iPhone 上的 philips hue 应用程序中没有并行完成的效果,效果可以在顶部发布的电影中看到。我可以想到的一件事是,不是在此处插入所有对象,而是分别添加行,因此例如,所有行都在彼此相邻的某个间隔后循环和分派。
无论如何,如果有人能提示我实现这种效果的最佳方法是什么,或者知道做类似事情的样本,我将不胜感激。
【问题讨论】:
如您所见,UICollectionView 不允许您直接控制动画的持续时间。你可能想看看[CALayer setSpeed]
,它可以让你改变任何层的动画速度。请注意,这也会改变所有子图层的动画速度,所以要小心。请阅读此答案以获取更多信息:***.com/questions/18250049/…
我知道,但这通常会改变速度,因此所有项目仍将以相同的速度进行动画处理,只是比苹果为我们决定的快一点或慢一点。我真正想知道的是电影中的效果是如何实现的。
【参考方案1】:
这是一种方法:(写完后我觉得有点脏……但它有效)
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
myCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath];
cell.myPic.image = [UIImage imageNamed:[NSString stringWithFormat:@"%d.jpg",indexPath.row]];
CGRect frame = cell.myPic.frame;
frame.origin.y = cell.myPic.frame.origin.y + 40;
cell.myPic.frame = frame;
cell.myPic.alpha = 0;
[cells addObject:cell];
return cell;
- (IBAction)Run:(UIButton *)sender
for (int i=0; i<[cells count]; i++)
myCell *cell = [cells objectAtIndex:i];
[UIView animateWithDuration:0.15 animations:^()
CGRect frame = cell.myPic.frame;
frame.size.width = 80;
frame.origin.y = cell.myPic.frame.origin.y - 40;
cell.myPic.frame = frame;
cell.myPic.alpha = 1;
completion:^(BOOL finished)];
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.05]];
【讨论】:
非常感谢!我了解您“不太喜欢”此选项,但我确实可以解决问题,这可能是从集合视图中获取可见单元格而不是将它们添加到 cellForItemAtIndexPath 中的数组的好选择,但我绝对可以工作有了这个! 没问题。使用NSRunLoop
对我来说总是感觉像是在违背自然,但在极少数情况下(例如这种情况)使用它几乎没有害处。以上是关于UICollectionview 非并行动画的主要内容,如果未能解决你的问题,请参考以下文章
从 uiviewcontroller 操作 uicollectionviewcell 内的 uicollectionview