2017-03-31 18 views
0

私はカスタムUICollectionViewFlowLayoutを実装していると私はこのような何かをしたいと思います:カスタムアニメーション - スクロール方向水平

enter image description here

は基本的に、これはのように設定スクロール方向を持つ単純なコレクションビューですUICollectionViewScrollDirectionHorizontal

アクティブセル(中央のセル)は固定サイズ(例:300×300)を有していなければならないし、他の細胞、この場合B、(例:275x275)小さくなければなりません。

これらの間でスクロールが実行されると、両方のセルがサイズを変換する必要があります。

  • サイズ - > Bのサイズ
  • Bの大きさ - >サイズ。
  • 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; 
} 
関連する問題