复制Google的搜索iOS卡片动画

时间:2014-07-09 00:32:27

标签: ios objective-c uicollectionview google-now

我现在正试图复制这个:

enter image description here

如果您熟悉Google的应用程序,它看起来像是一个带有自定义流程布局的UICollectionView。

我正在扩展一个已经用一些额外代码关闭的问题。

Here's the link to the other question.

在自定义流程布局类中,我可以通过设置负最小行距值来创建“堆叠”效果,并使用以下内容:

- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect
{
    NSArray *allAttributesInRect = [super layoutAttributesForElementsInRect:rect];

    CGPoint centerPoint = CGPointMake(CGRectGetMidX(self.collectionView.bounds), CGRectGetMidY(self.collectionView.bounds));

    for (UICollectionViewLayoutAttributes *cellAttributes in allAttributesInRect)
    {
        if (CGRectContainsPoint(cellAttributes.frame, centerPoint))
        {
            cellAttributes.transform = CGAffineTransformIdentity;
            cellAttributes.zIndex = 1.0;
        }
        else
        {
            cellAttributes.transform = CGAffineTransformMakeScale(0.75, 0.75);
        }
    }

    return allAttributesInRect;
}

用于删除动画的滑动工作正常,但我无法创建“堆叠”外观,然后只将1个单元格向上拖动到视图中,同时保持剩余的卡片堆叠,就像您在上面看到的那样。 / p>

1 个答案:

答案 0 :(得分:0)

我在这个视图中看到了两个部分。 1.一堆“卡片”和2.堆栈表。像这样打破它会使它更容易处理。

UIView子类创建为可以拖动的“卡片”(我称之为UICardView)应该非常简单。创建这些“堆栈”也不应该太困难。我认为最困难的部分是有效添加投影。

第二部分包括许多移动部分:将这些堆栈添加到表中。实际上,该表用于平滑滚动和一致的间距,实际上,它是完全透明的。您需要为heightForRowAtIndexPath:计算每堆“卡片”的高度。

这种方法可以实现平滑滚动,相对较低的内存占用,以及相对容易的高度自定义。此外,这些较小的部件应易于维护并添加功能。