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.
290 lines
12 KiB
290 lines
12 KiB
// |
|
// TFRecommendBookController.m |
|
// TFReader |
|
// |
|
// Created by 谢腾飞 on 2020/12/14. |
|
// Copyright © 2020 xtfei_2011@126.com. All rights reserved. |
|
// |
|
|
|
#import "TFRecommendBookController.h" |
|
#import "TFRecommendBookModel.h" |
|
#import "TFCollectionManager.h" |
|
#import "NSMutableArray+KVO.h" |
|
|
|
@interface TFRecommendBookController () |
|
|
|
@property (nonatomic ,strong) YYLabel *titleTop; |
|
@property (nonatomic ,strong) YYLabel *titleBottom; |
|
|
|
@property (nonatomic ,strong) UIScrollView *scrollView; |
|
@property (nonatomic ,strong) UIButton *nextStepButton; |
|
@property (nonatomic ,strong) NSMutableArray *addBookArray; |
|
|
|
@end |
|
|
|
@implementation TFRecommendBookController |
|
|
|
- (instancetype)init |
|
{ |
|
if (self = [super init]) { |
|
|
|
self.view.backgroundColor = kWhiteColor; |
|
self.addBookArray = [NSMutableArray array]; |
|
|
|
[self setupSubview]; |
|
[self setupSubviewFrame]; |
|
} |
|
return self; |
|
} |
|
|
|
- (void)viewWillAppear:(BOOL)animated |
|
{ |
|
[super viewWillAppear:animated]; |
|
|
|
[self setStatusBarDefaultStyle]; |
|
} |
|
|
|
- (void)viewDidLoad |
|
{ |
|
[super viewDidLoad]; |
|
|
|
[self hiddenNavigationBar:YES]; |
|
} |
|
|
|
- (void)setupSubview |
|
{ |
|
self.titleTop = [[YYLabel alloc] init]; |
|
self.titleTop.text = TFLocalizedString(@"独特的你"); |
|
self.titleTop.textColor = kBlackColor; |
|
self.titleTop.textAlignment = NSTextAlignmentCenter; |
|
self.titleTop.textVerticalAlignment = YYTextVerticalAlignmentBottom; |
|
self.titleTop.font = kFont18; |
|
[self.view addSubview:self.titleTop]; |
|
|
|
self.titleBottom = [[YYLabel alloc] init]; |
|
self.titleBottom.text = TFLocalizedString(@"请选择你感兴趣的书籍"); |
|
self.titleBottom.textColor = kGrayTextColor; |
|
self.titleBottom.textAlignment = NSTextAlignmentCenter; |
|
self.titleBottom.textVerticalAlignment = YYTextVerticalAlignmentTop; |
|
self.titleBottom.font = kMainFont; |
|
[self.view addSubview:self.titleBottom]; |
|
|
|
self.nextStepButton = [UIButton buttonWithType:UIButtonTypeCustom]; |
|
[self.nextStepButton setBackgroundColor:kColorRGBA(218, 218, 218, 1)]; |
|
[self.nextStepButton setTitleColor:kWhiteColor forState:UIControlStateNormal]; |
|
[self.nextStepButton.layer setCornerRadius:20]; |
|
[self.nextStepButton setUserInteractionEnabled:NO]; |
|
[self.nextStepButton setTitle:TFLocalizedString(@"完成") forState:UIControlStateNormal]; |
|
[self.nextStepButton addTarget:self action:@selector(nextStep) forControlEvents:UIControlEventTouchUpInside]; |
|
[self.view addSubview:self.nextStepButton]; |
|
|
|
self.scrollView = [[UIScrollView alloc] init]; |
|
[self.view addSubview:self.scrollView]; |
|
} |
|
|
|
- (void)setupSubviewFrame |
|
{ |
|
[self.titleTop mas_makeConstraints:^(MASConstraintMaker *make) { |
|
make.top.mas_equalTo(PUB_NAVBAR_OFFSET); |
|
make.left.mas_equalTo(0); |
|
make.width.mas_equalTo(self.view.mas_width); |
|
make.height.mas_equalTo(65); |
|
}]; |
|
|
|
[self.titleBottom mas_makeConstraints:^(MASConstraintMaker *make) { |
|
make.top.mas_equalTo(self.titleTop.mas_bottom).with.offset(kHalfMargin); |
|
make.left.mas_equalTo(0); |
|
make.width.mas_equalTo(self.view.mas_width); |
|
make.height.mas_equalTo(self.titleTop.mas_height); |
|
}]; |
|
|
|
WS(weakSelf) |
|
self.addBookArray.changeBlock = ^(NSMutableArray * _Nonnull newVal) { |
|
SS(strongSelf) |
|
if (newVal.count <= 0) { |
|
strongSelf.nextStepButton.backgroundColor = kColorRGBA(218, 218, 218, 1); |
|
strongSelf.nextStepButton.userInteractionEnabled = NO; |
|
} else { |
|
strongSelf.nextStepButton.backgroundColor = kMainColor; |
|
strongSelf.nextStepButton.userInteractionEnabled = YES; |
|
} |
|
}; |
|
|
|
[self.nextStepButton mas_makeConstraints:^(MASConstraintMaker *make) { |
|
make.bottom.mas_equalTo(self.view.mas_bottom).with.offset(- PUB_NAVBAR_OFFSET - kMargin); |
|
make.left.mas_equalTo(2 * kMargin); |
|
make.width.mas_equalTo(self.view.mas_width).with.offset(- 4 * kMargin); |
|
make.height.mas_equalTo(40); |
|
}]; |
|
|
|
[self.scrollView mas_makeConstraints:^(MASConstraintMaker *make) { |
|
make.left.mas_equalTo(0); |
|
make.width.mas_equalTo(SCREEN_WIDTH); |
|
make.top.mas_equalTo(self.titleBottom.mas_bottom); |
|
make.bottom.mas_equalTo(self.nextStepButton.mas_top).with.offset(- kMargin); |
|
}]; |
|
} |
|
|
|
- (void)setProductionArray:(NSArray *)productionArray |
|
{ |
|
_productionArray = productionArray; |
|
|
|
if (productionArray.count == 0) { |
|
return; |
|
} |
|
|
|
int buttonNum = 3; // 每行多少按钮 |
|
CGFloat button_W = BOOK_WIDTH; // 按钮宽 |
|
CGFloat button_H = BOOK_HEIGHT + BOOK_CELL_TITLE_HEIGHT + kQuarterMargin; // 按钮高 |
|
CGFloat margin_X = kHalfMargin; // 第一个按钮的X坐标 |
|
CGFloat margin_Y = 0; // 第一个按钮的Y坐标 |
|
CGFloat space_X = kHalfMargin; // 按钮间距 |
|
CGFloat space_Y = kMargin; // 行间距 |
|
|
|
[self.scrollView setContentSize:CGSizeMake(0, productionArray.count < 4 ? (button_H + space_Y) : 2 * (button_H + space_Y))]; |
|
|
|
for (int i = 0; i < (productionArray.count <= 6 ? productionArray.count : 6); i++) { |
|
int row = i / buttonNum; // 行号 |
|
int loc = i % buttonNum; // 列号 |
|
CGFloat button_X = margin_X + (space_X + button_W) * loc; |
|
CGFloat button_Y = margin_Y + (space_Y + button_H) * row; |
|
|
|
TFProductionModel *t_model = [productionArray objectOrNilAtIndex:i]; |
|
|
|
UIButton *bottomButton = [UIButton buttonWithType:UIButtonTypeCustom]; |
|
bottomButton.frame = CGRectMake(button_X, button_Y, button_W, button_H); |
|
bottomButton.tag = i; |
|
bottomButton.backgroundColor = [UIColor clearColor]; |
|
[bottomButton addTarget:self action:@selector(bookButtonClick:) forControlEvents:UIControlEventTouchUpInside]; |
|
bottomButton.selected = YES; |
|
[self.scrollView addSubview:bottomButton]; |
|
|
|
TFProductionCoverView *bookImageView = [[TFProductionCoverView alloc] initWithProductionType:t_model.productionType coverDirection:TFProductionCoverDirectionVertical]; |
|
bookImageView.coverImageUrl = t_model.cover; |
|
bookImageView.userInteractionEnabled = NO; |
|
[bottomButton addSubview:bookImageView]; |
|
|
|
[bookImageView mas_makeConstraints:^(MASConstraintMaker *make) { |
|
make.centerX.mas_equalTo(bottomButton.mas_centerX); |
|
make.top.mas_equalTo(bottomButton.mas_top); |
|
make.width.mas_equalTo(BOOK_WIDTH); |
|
make.height.mas_equalTo(BOOK_HEIGHT); |
|
}]; |
|
|
|
UILabel *connerLabel = [[UILabel alloc] init]; |
|
connerLabel.font = kFont10; |
|
connerLabel.layer.cornerRadius = 4.0f; |
|
connerLabel.textAlignment = NSTextAlignmentCenter; |
|
connerLabel.textColor = kWhiteColor; |
|
connerLabel.clipsToBounds = YES; |
|
[bookImageView addSubview:connerLabel]; |
|
|
|
[connerLabel mas_makeConstraints:^(MASConstraintMaker *make) { |
|
make.right.mas_equalTo(bookImageView.mas_right).with.offset(- kQuarterMargin); |
|
make.top.mas_equalTo(bookImageView.mas_top).with.offset(kQuarterMargin); |
|
make.width.mas_equalTo(40); |
|
make.height.mas_equalTo(20); |
|
}]; |
|
|
|
if (t_model.productionType == TFProductionTypeNovel) { |
|
connerLabel.backgroundColor = kMainColor; |
|
connerLabel.text = TFLocalizedString(@"小说"); |
|
} |
|
|
|
if (t_model.productionType == TFProductionTypeComic) { |
|
connerLabel.backgroundColor = kRedColor; |
|
connerLabel.text = TFLocalizedString(@"漫画"); |
|
} |
|
|
|
if (t_model.productionType == TFProductionTypeAudio) { |
|
connerLabel.backgroundColor = [UIColor colorWithHexString:@"#56a0ef"]; |
|
connerLabel.text = TFLocalizedString(@"听书"); |
|
} |
|
|
|
UILabel *titleLabel = [[UILabel alloc] init]; |
|
titleLabel.numberOfLines = 2; |
|
titleLabel.text = t_model.name; |
|
titleLabel.backgroundColor = kWhiteColor; |
|
titleLabel.font = kMainFont; |
|
titleLabel.textAlignment = NSTextAlignmentLeft; |
|
titleLabel.textColor = kBlackColor; |
|
[bottomButton addSubview:titleLabel]; |
|
|
|
[titleLabel mas_makeConstraints:^(MASConstraintMaker *make) { |
|
make.left.mas_equalTo(bookImageView.mas_left); |
|
make.top.mas_equalTo(bookImageView.mas_bottom).with.offset(kQuarterMargin); |
|
make.width.mas_equalTo(bookImageView.mas_width); |
|
make.height.mas_equalTo(BOOK_CELL_TITLE_HEIGHT); |
|
}]; |
|
|
|
UIImageView *selectView = [[UIImageView alloc] init]; |
|
selectView.userInteractionEnabled = YES; |
|
selectView.image = [UIImage imageNamed:@"audio_download_select"]; |
|
[bottomButton addSubview:selectView]; |
|
|
|
[selectView mas_makeConstraints:^(MASConstraintMaker *make) { |
|
make.right.mas_equalTo(bookImageView.mas_right).with.offset(- 5); |
|
make.bottom.mas_equalTo(bookImageView.mas_bottom).with.offset(- 5); |
|
make.height.width.mas_equalTo(18); |
|
}]; |
|
} |
|
|
|
[self.addBookArray KVO_addObjectsFromArray:productionArray]; |
|
} |
|
|
|
- (void)bookButtonClick:(UIButton *)sender |
|
{ |
|
TFProductionModel *t_books = [self.productionArray objectOrNilAtIndex:sender.tag]; |
|
if (sender.selected) { |
|
[sender.subviews enumerateObjectsUsingBlock:^(__kindof UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { |
|
if ([obj isKindOfClass:[TFProductionCoverView class]]) { |
|
obj.alpha = 0.5; |
|
} |
|
|
|
if ([obj isKindOfClass:[UIImageView class]]) { |
|
UIImageView *t_obj = (UIImageView *)obj; |
|
t_obj.image = [UIImage imageNamed:@"audio_download_unselect"]; |
|
*stop = YES; |
|
} |
|
}]; |
|
[self.addBookArray KVO_removeObject:t_books]; |
|
|
|
} else { |
|
[sender.subviews enumerateObjectsUsingBlock:^(__kindof UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { |
|
if ([obj isKindOfClass:[TFProductionCoverView class]]) { |
|
obj.alpha = 1; |
|
} |
|
|
|
if ([obj isKindOfClass:[UIImageView class]]) { |
|
UIImageView *t_obj = (UIImageView *)obj; |
|
t_obj.image = [UIImage imageNamed:@"audio_download_select"]; |
|
*stop = YES; |
|
} |
|
}]; |
|
[self.addBookArray KVO_addObject:t_books]; |
|
} |
|
sender.selected = !sender.selected; |
|
} |
|
|
|
- (void)nextStep |
|
{ |
|
for (TFProductionModel *t_model in self.addBookArray) { |
|
switch (t_model.productionType) { |
|
case TFProductionTypeNovel: |
|
[[TFCollectionManager shareManagerWithProductionType:TFProductionTypeNovel] addCollectionWithProductionModel:t_model atIndex:0]; |
|
break; |
|
case TFProductionTypeComic: |
|
[[TFCollectionManager shareManagerWithProductionType:TFProductionTypeComic] addCollectionWithProductionModel:t_model]; |
|
break; |
|
case TFProductionTypeAudio: |
|
[[TFCollectionManager shareManagerWithProductionType:TFProductionTypeAudio] addCollectionWithProductionModel:t_model]; |
|
break; |
|
|
|
default: |
|
break; |
|
} |
|
} |
|
[[NSNotificationCenter defaultCenter] postNotificationName:Notification_Insterest_Change object:@"step_two"]; |
|
} |
|
|
|
@end
|
|
|