214 lines
8.7 KiB
Objective-C
214 lines
8.7 KiB
Objective-C
//
|
|
// DynamicHomeView.m
|
|
// DingDangApp
|
|
//
|
|
// Created by apple on 2023/7/4.
|
|
//
|
|
|
|
#import "DynamicHomeView.h"
|
|
#import "DDDynamicDataView.h"
|
|
#import "JXPagerView.h"
|
|
#import "JXCategoryView.h"
|
|
#import "DDLabelModel.h"
|
|
#import "DDGradientView.h"
|
|
@interface DynamicHomeView ()<JXPagerViewDelegate, JXPagerMainTableViewGestureDelegate,JXCategoryViewDelegate,JXCategoryTitleViewDataSource>
|
|
@property (nonatomic, strong) UIScrollView *nestContentScrollView;
|
|
@property (nonatomic, strong) JXPagerView *pagerView;
|
|
@property (nonatomic, strong) JXCategoryTitleView *categoryView;
|
|
@property (nonatomic,strong) JXCategoryIndicatorImageView *indicatorImageView;
|
|
@property(nonatomic,strong) JXCategoryIndicatorBackgroundView *backgroundView;
|
|
@property (nonatomic, strong) NSMutableArray <NSString *> *titles;
|
|
@property (nonatomic, strong) NSMutableArray * titleArr;
|
|
@end
|
|
@implementation DynamicHomeView
|
|
- (void)categoryView:(JXCategoryBaseView *)categoryView didSelectedItemAtIndex:(NSInteger)index {
|
|
[ToolsObject getCurrentViewController].navigationController.interactivePopGestureRecognizer.enabled = (index == 0);
|
|
}
|
|
- (BOOL)mainTableViewGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
|
|
if (otherGestureRecognizer.view == self.nestContentScrollView) {
|
|
return NO;
|
|
}
|
|
if (otherGestureRecognizer == self.categoryView.collectionView.panGestureRecognizer) {
|
|
return NO;
|
|
}
|
|
return [gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]] && [otherGestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]];
|
|
}
|
|
/*
|
|
// Only override drawRect: if you perform custom drawing.
|
|
// An empty implementation adversely affects performance during animation.
|
|
- (void)drawRect:(CGRect)rect {
|
|
// Drawing code
|
|
}
|
|
*/
|
|
- (instancetype)initWithFrame:(CGRect)frame
|
|
{
|
|
self = [super initWithFrame:frame];
|
|
if (self) {
|
|
[self initBaseUI];
|
|
[self initRequest];
|
|
}
|
|
return self;
|
|
}
|
|
-(void)initRequest
|
|
{
|
|
self.titles = @[@"推荐",@"最新",@"关注"].mutableCopy;
|
|
self.categoryView.titles = self.titles;
|
|
dispatch_async(dispatch_get_main_queue(), ^{
|
|
self.categoryView.defaultSelectedIndex = 1;
|
|
self.pagerView.defaultSelectedIndex = 1;
|
|
[self.pagerView reloadData];
|
|
[self.categoryView reloadData];
|
|
});
|
|
return;
|
|
WeakSelf(weakSelf)
|
|
[NetworkRequest requestPOST:@"/dynamic/type/list" parameters:@{} block:^(BaseResponse * _Nonnull response) {
|
|
if ([ToolsObject IsNullWithObject:response.data]){
|
|
return;
|
|
}
|
|
if (response.code == 200){
|
|
[weakSelf.titles removeAllObjects];
|
|
[weakSelf.titleArr removeAllObjects];
|
|
weakSelf.titleArr = [NSArray yy_modelArrayWithClass:DDLabelModel.class json:response.data].mutableCopy;
|
|
[weakSelf.titleArr enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
|
|
if ([obj isKindOfClass:[DDLabelModel class]]) {
|
|
DDLabelModel * model = (DDLabelModel *)obj;
|
|
[weakSelf.titles addObject:model.type_name];
|
|
}
|
|
}];
|
|
weakSelf.categoryView.titles = weakSelf.titles;
|
|
dispatch_async(dispatch_get_main_queue(), ^{
|
|
weakSelf.categoryView.defaultSelectedIndex = 1;
|
|
weakSelf.pagerView.defaultSelectedIndex = 1;
|
|
[weakSelf.pagerView reloadData];
|
|
[weakSelf.categoryView reloadData];
|
|
});
|
|
}
|
|
}];
|
|
|
|
}
|
|
-(void)initBaseUI
|
|
{
|
|
self.backgroundColor = UIColor.clearColor;
|
|
self.pagerView = [self preferredPagingView];
|
|
JXCategoryIndicatorBackgroundView *backgroundView = [[JXCategoryIndicatorBackgroundView alloc] init];
|
|
DDGradientView *gradientView = [DDGradientView new];
|
|
gradientView.gradientLayer.startPoint = CGPointMake(0, 0.5);
|
|
gradientView.gradientLayer.endPoint = CGPointMake(1, 0.5);
|
|
gradientView.gradientLayer.colors = @[(__bridge id)UIColor.whiteColor.CGColor, (__bridge id)UIColor.whiteColor.CGColor];
|
|
gradientView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
|
|
[backgroundView addSubview:gradientView];
|
|
backgroundView.indicatorHeight = 24;
|
|
backgroundView.indicatorWidth = 52;
|
|
backgroundView.layer.cornerRadius = 12;
|
|
backgroundView.layer.masksToBounds = YES;
|
|
self.backgroundView = backgroundView;
|
|
self.categoryView.indicators = @[self.backgroundView];
|
|
self.pagerView.pinSectionHeaderVerticalOffset = CGFLOAT_MIN;
|
|
self.pagerView.backgroundColor = UIColor.clearColor;
|
|
self.categoryView.frame = CGRectMake(0, 0,kWidth, 44);
|
|
self.categoryView.cellSpacing = 12;
|
|
self.categoryView.contentEdgeInsetLeft = 20;
|
|
self.pagerView.mainTableView.backgroundColor = UIColor.clearColor;
|
|
self.pagerView.listContainerView.listCellBackgroundColor = UIColor.clearColor;
|
|
self.categoryView.titleSelectedColor = [UIColor jk_colorWithHexString:@"#A739FE"];
|
|
self.categoryView.titleColor = [UIColor jk_colorWithHexString:@"#999999"];
|
|
self.categoryView.titleSelectedFont = [UIFont systemFontOfSize:14];
|
|
self.categoryView.titleFont = [UIFont systemFontOfSize:14];
|
|
self.categoryView.titleColorGradientEnabled = YES;
|
|
self.categoryView.titleDataSource = self;
|
|
self.categoryView.titleLabelZoomScale = 1;
|
|
self.pagerView.mainTableView.gestureDelegate = self;
|
|
self.categoryView.titles = @[];
|
|
self.categoryView.defaultSelectedIndex = 1;
|
|
self.pagerView.defaultSelectedIndex = 1;
|
|
[self addSubview:self.pagerView];
|
|
if ([ToolsObject getCurrentViewController].navigationController) {
|
|
[self.pagerView.mainTableView.panGestureRecognizer requireGestureRecognizerToFail:[ToolsObject getCurrentViewController].navigationController.interactivePopGestureRecognizer];
|
|
}
|
|
WeakSelf(weakSelf)
|
|
self.pagerView.mainTableView.mj_header = [MJRefreshGifHeader headerWithRefreshingBlock:^{
|
|
[weakSelf.pagerView reloadData];
|
|
[weakSelf.pagerView.mainTableView.mj_header endRefreshing];
|
|
}];
|
|
|
|
}
|
|
-(JXCategoryTitleView *)categoryView{
|
|
if (!_categoryView) {
|
|
_categoryView = [[JXCategoryTitleView alloc] initWithFrame:CGRectMake(0, 0, kWidth, 50)];
|
|
_categoryView.backgroundColor = [UIColor clearColor];
|
|
_categoryView.delegate = self;
|
|
_categoryView.averageCellSpacingEnabled = NO;
|
|
_categoryView.titleColorGradientEnabled = YES;
|
|
_categoryView.titleLabelZoomEnabled = YES;
|
|
_categoryView.contentScrollViewClickTransitionAnimationEnabled = NO;
|
|
|
|
_categoryView.listContainer = (id<JXCategoryViewListContainer>)self.pagerView.listContainerView;
|
|
|
|
}return _categoryView;
|
|
}
|
|
- (JXCategoryIndicatorImageView *)indicatorImageView {
|
|
if (!_indicatorImageView) {
|
|
_indicatorImageView = [[JXCategoryIndicatorImageView alloc] init];
|
|
_indicatorImageView.indicatorImageViewSize = CGSizeMake(34, 9);
|
|
}
|
|
return _indicatorImageView;
|
|
}
|
|
- (JXPagerView *)preferredPagingView {
|
|
return [[JXPagerView alloc] initWithDelegate:self];
|
|
}
|
|
- (void)layoutSubviews{
|
|
[super layoutSubviews];
|
|
self.pagerView.frame = CGRectMake(0, 0, kWidth, self.height);
|
|
}
|
|
- (NSMutableArray <NSString *>*)titles{
|
|
if (!_titles) {
|
|
_titles = @[].mutableCopy;
|
|
}
|
|
return _titles;
|
|
}
|
|
-(NSMutableArray *)titleArr
|
|
{
|
|
if (!_titleArr) {
|
|
_titleArr = [NSMutableArray array];
|
|
}
|
|
return _titleArr;
|
|
}
|
|
#pragma mark - JXPagerViewDelegate
|
|
|
|
- (UIView *)tableHeaderViewInPagerView:(JXPagerView *)pagerView {
|
|
UIView *view = [[UIView alloc]init];
|
|
return view;
|
|
}
|
|
|
|
- (NSUInteger)tableHeaderViewHeightInPagerView:(JXPagerView *)pagerView {
|
|
return 0;
|
|
}
|
|
|
|
- (NSUInteger)heightForPinSectionHeaderInPagerView:(JXPagerView *)pagerView {
|
|
return 50;
|
|
}
|
|
|
|
- (UIView *)viewForPinSectionHeaderInPagerView:(JXPagerView *)pagerView {
|
|
return self.categoryView;
|
|
}
|
|
|
|
- (NSInteger)numberOfListsInPagerView:(JXPagerView *)pagerView {
|
|
return self.categoryView.titles.count;
|
|
}
|
|
|
|
- (id<JXPagerViewListViewDelegate>)pagerView:(JXPagerView *)pagerView initListAtIndex:(NSInteger)index {
|
|
DDDynamicDataView *listView = [[DDDynamicDataView alloc]initWithFrame:CGRectMake(0, 0, self.pagerView.width, self.pagerView.height - 50)];
|
|
listView.type = index;
|
|
[listView originRequest];
|
|
listView.backgroundColor = UIColor.clearColor;
|
|
listView.myTableView.backgroundColor = UIColor.clearColor;
|
|
return listView;
|
|
}
|
|
- (CGFloat)categoryTitleView:(JXCategoryTitleView *)titleView widthForTitle:(NSString *)title{
|
|
CGFloat titleWidth = [ToolsObject sizeWithText:title andFont:[UIFont systemFontOfSize:14] maxSize:CGSizeMake(200, 28) andlineSpacing:0].width+20;
|
|
self.backgroundView.indicatorWidth = titleWidth;
|
|
return titleWidth;
|
|
}
|
|
|
|
@end
|