You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
354 lines
16 KiB
354 lines
16 KiB
// |
|
// WXYZ_GiftRewardView.m |
|
// WXReader |
|
// |
|
// Created by LL on 2020/5/28. |
|
// Copyright © 2020 Andrew. All rights reserved. |
|
// |
|
|
|
#import "WXYZ_GiftRewardView.h" |
|
|
|
#import "NSObject+Observer.h" |
|
#import "WXYZ_GiftRewardModel.h" |
|
|
|
#import "LLPageControl.h" |
|
#import "WXYZ_AnnouncementView.h" |
|
#import "TFReaderBookManager.h" |
|
#import "TFRechargeViewController.h" |
|
|
|
#import "WXYZ_GiftView.h" |
|
|
|
@interface WXYZ_GiftRewardView ()<UICollectionViewDataSource, UICollectionViewDelegate> |
|
|
|
@property (nonatomic, strong) NSArray<WXYZ_GiftRewardListModel *> *dataSourceArray; |
|
|
|
@property (nonatomic, strong) WXYZ_GiftRewardModel *giftRewardModel; |
|
|
|
@property (nonatomic, weak) UICollectionView *mainCollectionView; |
|
|
|
@property (nonatomic, weak) LLPageControl *pageControl; |
|
|
|
@property (nonatomic, weak) WXYZ_AnnouncementView *announcementView; |
|
|
|
@property (nonatomic, weak) UILabel *remainLabel; |
|
|
|
@property (nonatomic, assign) NSInteger selectedIndex; |
|
|
|
@end |
|
|
|
@implementation WXYZ_GiftRewardView |
|
|
|
- (instancetype)initWithBookModel:(TFProductionModel *)bookModel { |
|
if (self = [super init]) { |
|
self.bookModel = bookModel; |
|
[self initialize]; |
|
[self createSubviews]; |
|
[self netRequest]; |
|
} |
|
return self; |
|
} |
|
|
|
- (void)initialize { |
|
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(loginSuccess) name:Notification_Login_Success object:nil]; |
|
} |
|
|
|
- (void)createSubviews { |
|
UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init]; |
|
flowLayout.itemSize = CGSizeMake((SCREEN_WIDTH - 2.0 * kMoreHalfMargin - 3 * kHalfMargin) / 4.0, 127.0); |
|
flowLayout.minimumInteritemSpacing = kHalfMargin; |
|
flowLayout.minimumLineSpacing = kHalfMargin; |
|
flowLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal; |
|
|
|
UICollectionView *mainCollectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:flowLayout]; |
|
self.mainCollectionView = mainCollectionView; |
|
mainCollectionView.showsHorizontalScrollIndicator = NO; |
|
mainCollectionView.showsVerticalScrollIndicator = NO; |
|
mainCollectionView.backgroundColor = [UIColor clearColor]; |
|
mainCollectionView.pagingEnabled = YES; |
|
mainCollectionView.dataSource = self; |
|
mainCollectionView.delegate = self; |
|
mainCollectionView.contentInset = UIEdgeInsetsMake(0, 0, 0, kMoreHalfMargin); |
|
[mainCollectionView registerClass:WXYZ_GiftRewardCell.class forCellWithReuseIdentifier:@"Identifier"]; |
|
[self addSubview:mainCollectionView]; |
|
[mainCollectionView mas_makeConstraints:^(MASConstraintMaker *make) { |
|
make.left.equalTo(self).offset(15); |
|
make.right.equalTo(self).offset(0); |
|
make.top.equalTo(self).offset(kMoreHalfMargin); |
|
make.height.mas_equalTo(127.0); |
|
}]; |
|
|
|
// [mainCollectionView addObserver:KEY_PATH(mainCollectionView, contentSize) complete:^(UICollectionView * _Nonnull obj, id _Nullable oldVal, id _Nullable newVal) { |
|
// CGSize size = [newVal CGSizeValue]; |
|
// [obj mas_updateConstraints:^(MASConstraintMaker *make) { |
|
// make.height.mas_equalTo(size.height); |
|
// }]; |
|
// [obj.superview setNeedsLayout]; |
|
// [obj.superview layoutIfNeeded]; |
|
// }]; |
|
|
|
LLPageControl *pageControl = [LLPageControl pageControlWithRadius:3.5 spacing:6.0f numberOfPages:1]; |
|
self.pageControl = pageControl; |
|
pageControl.currentPageIndicatorTintColor = kMainColor; |
|
pageControl.pageIndicatorTintColor = kColorRGB(225, 225, 225); |
|
[self addSubview:pageControl]; |
|
[pageControl mas_makeConstraints:^(MASConstraintMaker *make) { |
|
make.top.equalTo(mainCollectionView.mas_bottom).offset(12.0); |
|
make.centerX.equalTo(self); |
|
}]; |
|
|
|
WXYZ_AnnouncementView *announcementView = [[WXYZ_AnnouncementView alloc] init]; |
|
self.announcementView = announcementView; |
|
announcementView.backgroundColor = kColorRGB(249, 248, 253); |
|
announcementView.layer.cornerRadius = 14.0f; |
|
announcementView.layer.masksToBounds = YES; |
|
announcementView.textFont = kFont11; |
|
announcementView.textColor = kGrayTextColor; |
|
announcementView.isCenter = YES; |
|
announcementView.duration = 5.0f; |
|
announcementView.userInteractionEnabled = NO; |
|
[self addSubview:announcementView]; |
|
[announcementView mas_makeConstraints:^(MASConstraintMaker *make) { |
|
make.top.equalTo(pageControl.mas_bottom).offset(17.0f); |
|
make.left.equalTo(self).offset(kMoreHalfMargin); |
|
make.right.equalTo(self).offset(-kMoreHalfMargin); |
|
make.height.equalTo(announcementView.mas_width).multipliedBy(28.0 / 345.0); |
|
}]; |
|
|
|
UIView *bottomView = [[UIView alloc] init]; |
|
bottomView.backgroundColor = kColorRGB(249, 248, 253); |
|
[self addSubview:bottomView]; |
|
[bottomView mas_makeConstraints:^(MASConstraintMaker *make) { |
|
make.top.equalTo(announcementView.mas_bottom).offset(17.0f); |
|
make.left.right.equalTo(self); |
|
make.height.mas_equalTo(65.0f); |
|
}]; |
|
|
|
UILabel *remainLabel = [[UILabel alloc] init]; |
|
self.remainLabel = remainLabel; |
|
remainLabel.backgroundColor = [UIColor clearColor]; |
|
[self addSubview:remainLabel]; |
|
[remainLabel mas_makeConstraints:^(MASConstraintMaker *make) { |
|
make.left.equalTo(bottomView).offset(kMoreHalfMargin); |
|
make.top.equalTo(bottomView.mas_top).offset(15.0); |
|
}]; |
|
|
|
UIButton *rewardBtn = [UIButton buttonWithType:UIButtonTypeCustom]; |
|
rewardBtn.layer.cornerRadius = 19.0f; |
|
[rewardBtn setImage:[UIImage imageNamed:TFLocalizedString(@"book_giftBtn")] forState:UIControlStateNormal]; |
|
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(rewardEvent)]; |
|
[rewardBtn addGestureRecognizer:tap]; |
|
[bottomView addSubview:rewardBtn]; |
|
[rewardBtn mas_makeConstraints:^(MASConstraintMaker *make) { |
|
make.top.equalTo(bottomView).offset(6.0); |
|
make.right.equalTo(bottomView).offset(-kMoreHalfMargin); |
|
make.size.mas_equalTo(CGSizeMake(105, 38)); |
|
}]; |
|
|
|
UIView *splitLine = [[UIView alloc] init]; |
|
splitLine.backgroundColor = [UIColor clearColor]; |
|
[self addSubview:splitLine]; |
|
[splitLine mas_makeConstraints:^(MASConstraintMaker *make) { |
|
make.height.mas_equalTo(0.1); |
|
make.left.right.bottom.equalTo(self); |
|
make.top.equalTo(bottomView.mas_bottom).priorityLow(); |
|
}]; |
|
} |
|
|
|
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { |
|
return self.dataSourceArray.count; |
|
} |
|
|
|
- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { |
|
WXYZ_GiftRewardCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Identifier" forIndexPath:indexPath]; |
|
[cell setGiftRewardModel:self.dataSourceArray[indexPath.row]]; |
|
[cell setSelected:self.selectedIndex == indexPath.row]; |
|
return cell; |
|
} |
|
|
|
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { |
|
self.selectedIndex = indexPath.row; |
|
[collectionView reloadData]; |
|
} |
|
|
|
- (void)loginSuccess { |
|
NSString *prefix = TFLocalizedString(@"余额:"); |
|
NSString *remain = [NSString stringWithFormat:@"%zd", TFUserInfoManager.shareInstance.masterRemain]; |
|
NSString *suffix = TFSystemInfoManager.masterUnit; |
|
NSMutableAttributedString *str = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@%@ %@", prefix, remain, suffix] attributes:@{NSForegroundColorAttributeName: kGrayTextColor, NSFontAttributeName: kFont14}]; |
|
[str addAttribute:NSForegroundColorAttributeName value:kMainColor range:NSMakeRange(prefix.length, remain.length)]; |
|
self.remainLabel.attributedText = str; |
|
} |
|
|
|
- (void)rewardEvent { |
|
if (!TFUserInfoManager.isLogin) { |
|
[TFLoginOptionsViewController presentLoginView:nil]; |
|
return; |
|
} |
|
|
|
WXYZ_GiftRewardListModel *model = self.dataSourceArray[self.selectedIndex]; |
|
NSDictionary *params = @{ |
|
@"book_id" : @(self.bookModel.production_id), |
|
@"chapter_id" : @([TFReaderBookManager sharedManager].chapter_id), |
|
@"gift_id" : @(model.gift_id) |
|
}; |
|
WS(weakSelf) |
|
[TFNetworkTools POST:Book_Reward_Gift_Send parameters:params model:nil success:^(BOOL isSuccess, NSDictionary *_Nullable t_model, TFNetworkRequestModel *requestModel) { |
|
if (isSuccess) { |
|
[TFPromptManager showPromptViewWithStatus:TFPromptStatusSuccess promptTitle:TFLocalizedString(@"打赏成功")]; |
|
NSString *text = [NSString stringWithFormat:@"%@", t_model[@"data"][@"reward_num"]]; |
|
[[NSNotificationCenter defaultCenter] postNotificationName:@"changeReward" object:text]; |
|
!weakSelf.giftNumBlock ?: weakSelf.giftNumBlock([text integerValue]); |
|
[weakSelf.giftView hide]; |
|
} else if (Compare_Json_isEqualTo(requestModel.code, 802)) { |
|
[[NSNotificationCenter defaultCenter] postNotificationName:NSNotification_Reader_Push object:@""]; |
|
[[TFViewHelper getCurrentNavigationController] pushViewController:[[TFRechargeViewController alloc] init] animated:YES]; |
|
} else { |
|
[TFPromptManager showPromptViewWithStatus:TFPromptStatusError promptTitle:requestModel.msg]; |
|
} |
|
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { |
|
[TFPromptManager showPromptWithError:error defaultText:nil]; |
|
}]; |
|
} |
|
|
|
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { |
|
// 计算偏移量更新分页控件 |
|
NSUInteger page = CGRectGetMinX(scrollView.bounds) / scrollView.contentOffset.x; |
|
if (scrollView.contentOffset.x == 0) { |
|
page = 0; |
|
} |
|
self.pageControl.currentPage = page; |
|
} |
|
|
|
- (void)netRequest { |
|
WS(weakSelf) |
|
[TFNetworkTools POST:Gift_List parameters:@{@"book_id":@(self.bookModel.production_id)} model:WXYZ_GiftRewardModel.class success:^(BOOL isSuccess, WXYZ_GiftRewardModel *_Nullable t_model, TFNetworkRequestModel *requestModel) { |
|
if (isSuccess) { |
|
weakSelf.giftRewardModel = t_model; |
|
weakSelf.dataSourceArray = t_model.list; |
|
weakSelf.pageControl.numberOfPages = ceil(weakSelf.dataSourceArray.count / 4.0); |
|
NSMutableArray<TFAnnouncementModel *> *arr = [NSMutableArray array]; |
|
for (NSString *str in t_model.announce_list) { |
|
TFAnnouncementModel *tt_model = [[TFAnnouncementModel alloc] init]; |
|
tt_model.content = @""; |
|
tt_model.title = str; |
|
[arr addObject:tt_model]; |
|
} |
|
weakSelf.announcementView.modelArr = arr; |
|
NSString *prefix = TFLocalizedString(@"余额:"); |
|
NSString *remain = [NSString stringWithFormat:@"%zd", t_model.user.goldRemain]; |
|
NSString *suffix = TFSystemInfoManager.masterUnit; |
|
NSMutableAttributedString *str = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@%@ %@", prefix, remain, suffix] attributes:@{NSForegroundColorAttributeName: kGrayTextColor, NSFontAttributeName: kFont14}]; |
|
[str addAttribute:NSForegroundColorAttributeName value:kMainColor range:NSMakeRange(prefix.length, remain.length)]; |
|
weakSelf.remainLabel.attributedText = str; |
|
[weakSelf.mainCollectionView reloadData]; |
|
} else { |
|
[TFPromptManager showPromptViewWithStatus:TFPromptStatusError promptTitle:requestModel.msg]; |
|
} |
|
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { |
|
[TFPromptManager showPromptWithError:error defaultText:nil]; |
|
}]; |
|
} |
|
|
|
@end |
|
|
|
|
|
@implementation WXYZ_GiftRewardCell |
|
|
|
- (instancetype)initWithFrame:(CGRect)frame { |
|
if (self = [super initWithFrame:frame]) { |
|
[self createSubviews]; |
|
} |
|
return self; |
|
} |
|
|
|
- (void)createSubviews { |
|
self.contentView.layer.cornerRadius = 2.5; |
|
self.contentView.layer.borderColor = kMainColor.CGColor; |
|
self.contentView.layer.borderWidth = 0.0f; |
|
self.contentView.backgroundColor = [UIColor clearColor]; |
|
|
|
UILabel *flagLabel = [[UILabel alloc] init]; |
|
flagLabel.font = kFont10; |
|
flagLabel.textColor = [UIColor whiteColor]; |
|
flagLabel.backgroundColor = kColorRGB(255, 83, 81); |
|
flagLabel.preferredMaxLayoutWidth = CGRectGetWidth(self.contentView.bounds) - kHalfMargin; |
|
flagLabel.textAlignment = NSTextAlignmentCenter; |
|
flagLabel.layer.cornerRadius = 2.0f; |
|
flagLabel.numberOfLines = 0; |
|
flagLabel.layer.masksToBounds = YES; |
|
[self.contentView addSubview:flagLabel]; |
|
[flagLabel mas_makeConstraints:^(MASConstraintMaker *make) { |
|
make.top.right.equalTo(self.contentView); |
|
}]; |
|
|
|
UIImageView *coverImageView = [[UIImageView alloc] init]; |
|
coverImageView.backgroundColor = [UIColor clearColor]; |
|
[self.contentView addSubview:coverImageView]; |
|
[self.contentView sendSubviewToBack:coverImageView]; |
|
[coverImageView mas_makeConstraints:^(MASConstraintMaker *make) { |
|
make.top.equalTo(self.contentView).offset(kMargin); |
|
make.centerX.equalTo(self.contentView); |
|
make.size.mas_equalTo(CGSizeMake(50.0, 50.0)); |
|
}]; |
|
|
|
UILabel *subtitle = [[UILabel alloc] init]; |
|
subtitle.textColor = kGrayTextColor; |
|
subtitle.font = kFont10; |
|
subtitle.textAlignment = NSTextAlignmentCenter; |
|
subtitle.numberOfLines = 0; |
|
subtitle.backgroundColor = [UIColor clearColor]; |
|
[self.contentView addSubview:subtitle]; |
|
[subtitle mas_makeConstraints:^(MASConstraintMaker *make) { |
|
make.bottom.equalTo(self.contentView).offset(-kQuarterMargin); |
|
make.left.equalTo(self.contentView).offset(kQuarterMargin); |
|
make.right.equalTo(self.contentView).offset(-kQuarterMargin); |
|
}]; |
|
|
|
UILabel *titleLabel = [[UILabel alloc] init]; |
|
titleLabel.textColor = kBlackColor; |
|
titleLabel.font = kFont13; |
|
titleLabel.textAlignment = NSTextAlignmentCenter; |
|
titleLabel.backgroundColor = [UIColor clearColor]; |
|
[self.contentView addSubview:titleLabel]; |
|
[titleLabel mas_makeConstraints:^(MASConstraintMaker *make) { |
|
make.bottom.equalTo(subtitle.mas_top).offset(- kQuarterMargin); |
|
make.left.equalTo(self.contentView).offset(kQuarterMargin); |
|
make.right.equalTo(self.contentView).offset(-kQuarterMargin); |
|
}]; |
|
|
|
[self addObserver:KEY_PATH(self, giftRewardModel) complete:^(WXYZ_GiftRewardCell * _Nonnull obj, id _Nullable oldVal, WXYZ_GiftRewardListModel * _Nullable newVal) { |
|
flagLabel.text = newVal.flag ?: @""; |
|
CGFloat maxWidth = CGRectGetWidth(obj.contentView.bounds) - kHalfMargin; |
|
if (flagLabel.intrinsicContentSize.width + 12 < maxWidth) { |
|
maxWidth = flagLabel.intrinsicContentSize.width + 12; |
|
} |
|
[flagLabel mas_updateConstraints:^(MASConstraintMaker *make) { |
|
make.width.mas_equalTo(maxWidth); |
|
make.height.mas_equalTo(flagLabel.intrinsicContentSize.height + kQuarterMargin); |
|
}]; |
|
flagLabel.hidden = newVal.flag.length == 0; |
|
[coverImageView setImageWithURL:[NSURL URLWithString:newVal.icon ?: @""] placeholder:HoldImage]; |
|
titleLabel.text = newVal.title ?: @""; |
|
subtitle.text = newVal.gift_price ?: @""; |
|
}]; |
|
} |
|
|
|
//- (UICollectionViewLayoutAttributes*)preferredLayoutAttributesFittingAttributes:(UICollectionViewLayoutAttributes*)layoutAttributes { |
|
// [self setNeedsLayout]; |
|
// [self layoutIfNeeded]; |
|
// CGSize size = [self.contentView systemLayoutSizeFittingSize:layoutAttributes.size]; |
|
// CGRect cellFrame = layoutAttributes.frame; |
|
// cellFrame.size.height = size.height; |
|
// layoutAttributes.frame = cellFrame; |
|
// return layoutAttributes; |
|
//} |
|
|
|
- (void)setSelected:(BOOL)selected { |
|
if (selected) { |
|
self.contentView.layer.borderWidth = 1.0f; |
|
} else { |
|
self.contentView.layer.borderWidth = 0.0f; |
|
} |
|
} |
|
|
|
@end
|
|
|