Files
yinmeng-ios-store/yinmeng-ios/DingDangApp/CodeClass/Dynamic/VV/DynamicHomeView.m
2023-12-13 17:56:07 +08:00

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