95 lines
3.1 KiB
Objective-C
95 lines
3.1 KiB
Objective-C
//
|
|
// JXCategoryTitleVerticalZoomView.m
|
|
// JXCategoryView
|
|
//
|
|
// Created by jiaxin on 2019/2/14.
|
|
// Copyright © 2019 jiaxin. All rights reserved.
|
|
//
|
|
|
|
#import "JXCategoryTitleVerticalZoomView.h"
|
|
#import "JXCategoryTitleVerticalZoomCellModel.h"
|
|
#import "JXCategoryTitleVerticalZoomCell.h"
|
|
#import "JXCategoryFactory.h"
|
|
|
|
@interface JXCategoryTitleVerticalZoomView ()
|
|
@property (nonatomic, assign) CGFloat currentVerticalScale; //当前垂直方向的缩放基准值
|
|
@end
|
|
|
|
@implementation JXCategoryTitleVerticalZoomView
|
|
|
|
- (void)initializeData {
|
|
[super initializeData];
|
|
|
|
_maxVerticalFontScale = 2;
|
|
_minVerticalFontScale = 1.3;
|
|
_currentVerticalScale = _maxVerticalFontScale;
|
|
self.cellWidthZoomEnabled = YES;
|
|
self.cellWidthZoomScale = _maxVerticalFontScale;
|
|
self.contentEdgeInsetLeft = 15;
|
|
self.titleLabelZoomScale = _currentVerticalScale;
|
|
self.titleLabelZoomEnabled = YES;
|
|
self.selectedAnimationEnabled = YES;
|
|
_maxVerticalCellSpacing = 20;
|
|
_minVerticalCellSpacing = 10;
|
|
self.cellSpacing = _maxVerticalCellSpacing;
|
|
}
|
|
|
|
- (void)listDidScrollWithVerticalHeightPercent:(CGFloat)percent {
|
|
CGFloat currentScale = [JXCategoryFactory interpolationFrom:self.minVerticalFontScale to:self.maxVerticalFontScale percent:percent];
|
|
BOOL shouldReloadData = NO;
|
|
if (self.currentVerticalScale != currentScale) {
|
|
//有变化才允许reloadData
|
|
shouldReloadData = YES;
|
|
}
|
|
self.currentVerticalScale = currentScale;
|
|
self.cellWidthZoomScale = currentScale;
|
|
self.cellSpacing = [JXCategoryFactory interpolationFrom:self.minVerticalCellSpacing to:self.maxVerticalCellSpacing percent:percent];
|
|
if (shouldReloadData) {
|
|
[self refreshDataSource];
|
|
[self refreshState];
|
|
[self.collectionView.collectionViewLayout invalidateLayout];
|
|
[self.collectionView reloadData];
|
|
}
|
|
}
|
|
|
|
- (void)setCurrentVerticalScale:(CGFloat)currentVerticalScale {
|
|
_currentVerticalScale = currentVerticalScale;
|
|
|
|
self.titleLabelZoomScale = currentVerticalScale;
|
|
}
|
|
|
|
- (void)setMaxVerticalCellSpacing:(CGFloat)maxVerticalCellSpacing {
|
|
_maxVerticalCellSpacing = maxVerticalCellSpacing;
|
|
|
|
self.cellSpacing = maxVerticalCellSpacing;
|
|
}
|
|
|
|
- (void)setMaxVerticalFontScale:(CGFloat)maxVerticalFontScale {
|
|
_maxVerticalFontScale = maxVerticalFontScale;
|
|
|
|
self.titleLabelZoomScale = maxVerticalFontScale;
|
|
self.cellWidthZoomScale = maxVerticalFontScale;
|
|
}
|
|
|
|
- (Class)preferredCellClass {
|
|
return [JXCategoryTitleVerticalZoomCell class];
|
|
}
|
|
|
|
- (void)refreshDataSource {
|
|
NSMutableArray *tempArray = [NSMutableArray array];
|
|
for (int i = 0; i < self.titles.count; i++) {
|
|
JXCategoryTitleVerticalZoomCellModel *cellModel = [[JXCategoryTitleVerticalZoomCellModel alloc] init];
|
|
[tempArray addObject:cellModel];
|
|
}
|
|
self.dataSource = tempArray;
|
|
}
|
|
|
|
- (void)refreshCellModel:(JXCategoryBaseCellModel *)cellModel index:(NSInteger)index {
|
|
[super refreshCellModel:cellModel index:index];
|
|
|
|
JXCategoryTitleVerticalZoomCellModel *model = (JXCategoryTitleVerticalZoomCellModel *)cellModel;
|
|
model.maxVerticalFontScale = self.maxVerticalFontScale;
|
|
}
|
|
|
|
@end
|