iOS使用UICollectionView完成简单的cover flow效果

之前我想用iOS完成安卓的 gallery 效果 我想到了cover flow 效果
最近在找工作比较闲就把这个效果给大家分享下

下面这个效果想必大家都能使用UIColletionView实现

iOS使用UICollectionView完成简单的cover flow效果_第1张图片
最基本的.gif

上面的效果是我之前写的小demo在demo里面的注释中可以看到我的思路
那么问题来了这么让两个cell重叠并且让中间的cell显示在最上面呢?

让cell重叠的方案:

// 在flowlayout类中的这个方法中可以获得attributes 对象
// 在这个方法中, 我们只要根据当前的滚动, 对每个cell, 进行对应的缩放就可以了
- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect

// 在获取到cell的attributes对象后对cell的size进行放大
  attr.size = CGSizeMake(self.itemSize.width * 1.5, self.itemSize.height * 1.5);

让居中的cell的展现在最前面的解决方案是
在collectionView滚动的时候 移动collectionView的子控件使其位于collection 的center点的cell置顶

注意:一定要转换坐标系不然获取不到中心点的cell


#pragma mark - didScorll

- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
    

    // 坐标系转换获得collectionView上面的位于中心的cell
    CGPoint pointInView = [self.view convertPoint:self.collectionView.center toView:self.collectionView];
    // 获取这一点的indexPath
    NSIndexPath *indexPathNow = [self.collectionView indexPathForItemAtPoint:pointInView];

    GLCell *cell = (GLCell *)[self.collectionView cellForItemAtIndexPath:indexPathNow];

    [self.collectionView bringSubviewToFront:cell];
}

效果图

iOS使用UICollectionView完成简单的cover flow效果_第2张图片
画廊.gif

demo下载地址:https://github.com/daleiLV/iOSCoverFlow

如有什么纰漏大家在评论中指出我会改正

你可能感兴趣的:(iOS使用UICollectionView完成简单的cover flow效果)