UICollectionViewFlowLayout 中的自定义动画 - 水平滚动方向
Custom animation in UICollectionViewFlowLayout - scroll direction horizontal
我正在实施自定义 UICollectionViewFlowLayout
,我想做这样的事情:
基本上,这是一个简单的集合视图,滚动方向设置为UICollectionViewScrollDirectionHorizontal
。
活动单元格 A(中间的单元格)必须具有固定大小(例如:300x300)和其他单元格,在本例中为 B,应该更小(例如:275x275)。
当在它们之间执行滚动时,两个单元格都应该改变它们的大小。
- A 码 -> B 码
- B 码 -> A 码。
- B 现在在中间
我可能需要覆盖 - (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect
并实现某种 CGAffineTransformMakeScale
。我的想法对吗?以前还有其他人这样做过吗?
问题已解决。
- (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;
}
我正在实施自定义 UICollectionViewFlowLayout
,我想做这样的事情:
基本上,这是一个简单的集合视图,滚动方向设置为UICollectionViewScrollDirectionHorizontal
。
活动单元格 A(中间的单元格)必须具有固定大小(例如:300x300)和其他单元格,在本例中为 B,应该更小(例如:275x275)。
当在它们之间执行滚动时,两个单元格都应该改变它们的大小。
- A 码 -> B 码
- B 码 -> A 码。
- B 现在在中间
我可能需要覆盖 - (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect
并实现某种 CGAffineTransformMakeScale
。我的想法对吗?以前还有其他人这样做过吗?
问题已解决。
- (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;
}