【问题标题】:Custom animation in UICollectionViewFlowLayout - scroll direction horizontalUICollectionViewFlowLayout 中的自定义动画 - 水平滚动方向
【发布时间】:2017-03-31 14:03:26
【问题描述】:

我正在实现一个自定义 UICollectionViewFlowLayout,我想做这样的事情:

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

活动单元格 A(中间的单元格)必须具有固定大小(例如:300x300),而其他单元格(在本例中为 B)应该更小(例如:275x275)。​​

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

  • A 码 -> B 码
  • B 码 -> A 码。
  • B 现在在中间

我可能需要覆盖- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect 并实现某种CGAffineTransformMakeScale。我想对了吗?以前有人这样做过吗?

【问题讨论】:

  • 这不是答案,但我想建议iCarousel
  • iCarousel 将是一个有效的替代方案,但我真的不想坚持使用第 3 方组件。无论如何,谢谢。

标签: ios objective-c uicollectionview uicollectionviewlayout


【解决方案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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-04
    • 1970-01-01
    • 2013-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多