【问题标题】:UICollectionView insertItem -> adjust animation time?UICollectionView insertItem -> 调整动画时间?
【发布时间】:2013-08-15 09:39:19
【问题描述】:

所以,我有一个 UICollectionView 我可以在其中插入新项目。

我使用了Collection View Programming Guide 中的大部分建议 - “使插入和删除动画更有趣”部分

有没有办法调整动画时间? (也许我只是在文档中错过了它,但找不到任何相关信息)

PS:如果我可以编辑曲线,那也太酷了。你知道 Ease-In-Out 等等。

【问题讨论】:

    标签: iphone ios uikit uicollectionview


    【解决方案1】:

    您可以使用 CALayer 更改任何动画速度。所以对于 UICollectionView 这看起来像下面这样:

    [self.collectionView.viewForBaselineLayout.layer setSpeed:0.1f];
    

    而且你可以改回原来的速度:

    [self.collectionView.viewForBaselineLayout.layer setSpeed:1.0f];
    

    为此,您可能需要导入 QuartzCore:

    #import <QuartzCore/QuartzCore.h>
    

    【讨论】:

    • 太棒了,这完全按照我想要的方式工作。不会知道“viewForBaselineLayout”的层是我需要编辑的层。
    • 不过说实话,这也调整了UiCollectionViewItems里面的很多动画。像动画 UIImageViews。然后必须调整那些动画的持续时间以保持速度。
    • 是的,虽然这是一种骇人听闻的方式,但很容易。也许您可以找到更好的视图来设置速度。这只是一个快速测试并且有效。
    • 很有趣,但正如你所说,很老套。
    【解决方案2】:

    或者干脆做

    [UIView animateWithDuration:0.5f animations:^(void) {
      [self.collectionView insertItemsAtIndexPaths:@[newIndexPath]];
    }];
    

    动画持续时间会影响集合视图插入动画的内部持续时间。

    【讨论】:

    • 这是要走的路。您也可以在-performBatchUpdates 上使用您想要的任何类型的动画块调用它,它会在那里执行任何更新!
    • 尽管公认的答案很聪明,但这是最不可能产生不良副作用的解决方案。
    【解决方案3】:

    您无法使用 Apple 提供的布局方法调整动画。如果您想自定义动画,您需要通过属性隐藏项目(仅显示和空白空间),请自己制作动画,并在动画结束时通过属性将项目重新弹出。

    我问过一个关于自定义移动动画的类似问题,但共识就是我所描述的。如果需要,可以为自己制作动画。

    这个问题展示了如何做一个自定义删除动画,自定义插入应该类似:UICollectionView horizontal scrolling, deleting last item, animation not working

    【讨论】:

    • 这是真的,而且很糟糕。不过,单元格与其他视图一样是一个视图,因此您可以对它进行任何您喜欢的动画,只要到最后单元格的位置和大小与布局属性匹配即可。
    • @jrturton 那么如何防止设置新属性会触发系统动画呢?
    • 出现/消失属性与最终属性相同,因此不会出现动画。我只为自定义选择动画而不是插入做了这个(手动动画集合视图),所以这主要是推测!
    猜你喜欢
    • 1970-01-01
    • 2015-06-16
    • 1970-01-01
    • 1970-01-01
    • 2013-03-07
    • 2015-09-16
    • 1970-01-01
    • 2014-01-14
    • 1970-01-01
    相关资源
    最近更新 更多