2017-03-31 117 views
0

我实现一个自定义UICollectionViewFlowLayout,我愿做这样的事情:自定义动画UICollectionViewFlowLayout - 滚动方向水平

enter image description here

基本上,这是用设置为滚动方向的简单集合视图UICollectionViewScrollDirectionHorizontal

活动单元格(中间电池)必须有一个固定的大小(例如:300x300的)和其它细胞,在这种情况下,应该更小(例如:275x275)。

当它们之间执行滚动时,两个单元格都应该转换它们的大小。

  • 甲大小 - >乙大小
  • 乙大小 - >甲大小。
  • B现在是在中间

我可能需要重写- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect并实现某种CGAffineTransformMakeScale。我在想对吗?其他人之前做过?

+0

这不是一个答案,但我想建议[iCarousel(https://github.com/nicklockwood/iCarousel) – EDUsta

+0

iCarousel将是一个有效的选择,但我真的不想坚持一个第三方组件。不管怎么说,还是要谢谢你。 –

回答

1

问题解决。

- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect 
{ 
    CGFloat centerX = self.collectionView.contentOffset.x + self.collectionView.frame.size.width * 0.5; 

    NSArray *attributes = [super layoutAttributesForElementsInRect:rect]; 

    for (UICollectionViewLayoutAttributes *attrs in attributes) { 

     CGFloat diff = ABS(attrs.center.x - centerX); 

     CGFloat newScale = diff * scaleFactor/(self.itemSize.width + self.minimumLineSpacing); 

     if (newScale > scaleFactor) { 
      newScale = scaleFactor; 
     } 

     attrs.transform = CGAffineTransformMakeScale(1 - newScale, 1 - newScale); 
    } 

    return attributes; 
}