iOS: add enable gallery

This commit is contained in:
王劲鹏
2023-06-13 20:36:55 +08:00
committed by osborn
parent 3393a474f9
commit 1b105d70e4
3 changed files with 29 additions and 23 deletions

View File

@@ -24,32 +24,36 @@
@implementation DoricSliderLayout
- (NSArray<UICollectionViewLayoutAttributes *> *)layoutAttributesForElementsInRect:(CGRect)rect {
NSArray *attributes = [super layoutAttributesForElementsInRect:rect];
CGRect visitRect = {self.collectionView.contentOffset,self.collectionView.bounds.size};
NSMutableArray *attributesCopy = [NSMutableArray array];
for (UICollectionViewLayoutAttributes *attribute in attributes) {
UICollectionViewLayoutAttributes *attributeCopy = [attribute copy];
[attributesCopy addObject:attributeCopy];
}
for (UICollectionViewLayoutAttributes *attribute in attributesCopy) {
CGFloat distance = CGRectGetMidX(visitRect) - attribute.center.x;
float diff = fabs(distance);
CATransform3D scaleTransform = CATransform3DIdentity;
if (diff >= 0 && diff <= self.galleryItemWidth) {
float scale = 1 - (1 - self.galleryMinScale) * (diff / self.galleryItemWidth);
scaleTransform = CATransform3DMakeScale(scale, scale, scale);
attribute.alpha = 1 - (1 - self.galleryMinAlpha) * (diff / self.galleryItemWidth);
} else {
float scale = self.galleryMinScale;
scaleTransform = CATransform3DMakeScale(scale, scale, scale);
attribute.alpha = self.galleryMinAlpha;
if (self.enableGallery) {
NSArray *attributes = [super layoutAttributesForElementsInRect:rect];
CGRect visitRect = {self.collectionView.contentOffset, self.collectionView.bounds.size};
NSMutableArray *attributesCopy = [NSMutableArray array];
for (UICollectionViewLayoutAttributes *attribute in attributes) {
UICollectionViewLayoutAttributes *attributeCopy = [attribute copy];
[attributesCopy addObject:attributeCopy];
}
attribute.transform3D = scaleTransform;
for (UICollectionViewLayoutAttributes *attribute in attributesCopy) {
CGFloat distance = CGRectGetMidX(visitRect) - attribute.center.x;
float diff = fabs(distance);
CATransform3D scaleTransform = CATransform3DIdentity;
if (diff >= 0 && diff <= self.galleryItemWidth) {
float scale = 1 - (1 - self.galleryMinScale) * (diff / self.galleryItemWidth);
scaleTransform = CATransform3DMakeScale(scale, scale, scale);
attribute.alpha = 1 - (1 - self.galleryMinAlpha) * (diff / self.galleryItemWidth);
} else {
float scale = self.galleryMinScale;
scaleTransform = CATransform3DMakeScale(scale, scale, scale);
attribute.alpha = self.galleryMinAlpha;
}
attribute.transform3D = scaleTransform;
}
return attributesCopy;
} else {
return [super layoutAttributesForElementsInRect:rect];
}
return attributesCopy;
}
- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds {