2017-03-31 120 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; 
}