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.

343 lines
14 KiB

//
// TFComicDetailRightViewController.m
// TFReader
//
// Created by 谢腾飞 on 2020/12/19.
// Copyright © 2020 xtfei_2011@126.com. All rights reserved.
//
#import "TFComicDetailRightViewController.h"
#import "TFComicDetailRightViewCell.h"
#import "TFComicBrowseViewController.h"
#import "TFReadRecordManager.h"
#define MenuButtonHeight 50
@interface TFComicDetailRightViewController ()<UITableViewDelegate, UITableViewDataSource>
{
TFButton *gotoCurrent;
TFButton *gotoEnd;
CGFloat beginOffSetY;
BOOL clickGotoButton;
}
@property (nonatomic, strong) UILabel *headTitleLabel;
@property (nonatomic, strong) TFButton *sortButton;
/// 已阅读章节索引
@property (nonatomic, assign) NSInteger readIndex;
@end
@implementation TFComicDetailRightViewController
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self.mainTableView reloadData];
}
- (void)viewDidLoad
{
[super viewDidLoad];
[self initialize];
[self createSubviews];
}
- (void)initialize
{
// 计算已读章节的位置
NSInteger readIndex = [[TFReadRecordManager shareManagerWithProductionType:TFProductionTypeComic] getReadingRecordChapter_idWithProduction_id:self.comicModel.production_id];
NSArray<NSNumber *> *t_arr = [self.comicModel.chapter_list valueForKeyPath:@"chapter_id"];
self.readIndex = [t_arr indexOfObject:@(readIndex)];
if (self.readIndex == NSNotFound) {
self.readIndex = -1;
}
[self hiddenNavigationBar:YES];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reloadRecordData) name:NSNotification_Updata_Read_Record object:nil];
}
- (void)createSubviews
{
self.mainTableView.delegate = self;
self.mainTableView.dataSource = self;
[self.view addSubview:self.mainTableView];
[self.mainTableView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.mas_equalTo(self.view);
}];
gotoCurrent = [[TFButton alloc] initWithFrame:CGRectMake(SCREEN_WIDTH - MenuButtonHeight - kHalfMargin, SCREEN_HEIGHT - Comic_Detail_HeaderView_Height - PUB_TABBAR_HEIGHT - 44 - 44 - MenuButtonHeight - kMargin - kHalfMargin, MenuButtonHeight, MenuButtonHeight) buttonTitle:TFLocalizedString(@"当前") buttonImageName:@"comic_goto_current" buttonIndicator:TFButtonIndicatorTitleBottom];
gotoCurrent.layer.cornerRadius = 25;
gotoCurrent.layer.borderWidth = 1;
gotoCurrent.layer.borderColor = kGrayViewColor.CGColor;
gotoCurrent.clipsToBounds = YES;
gotoCurrent.backgroundColor = kWhiteColor;
gotoCurrent.buttonMargin = 8;
gotoCurrent.buttonTitleFont = kFont10;
gotoCurrent.graphicDistance = 0;
gotoCurrent.buttonImageScale = 0.4;
[gotoCurrent addTarget:self action:@selector(gotoCurrentClick:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:gotoCurrent];
gotoEnd = [[TFButton alloc] initWithFrame:CGRectMake(SCREEN_WIDTH - MenuButtonHeight - kHalfMargin, SCREEN_HEIGHT - Comic_Detail_HeaderView_Height - PUB_TABBAR_HEIGHT - 44 - 44 - kMargin, MenuButtonHeight, MenuButtonHeight) buttonTitle:TFLocalizedString(@"到底") buttonImageName:@"comic_goto_bottom" buttonIndicator:TFButtonIndicatorTitleBottom];
gotoEnd.layer.cornerRadius = 25;
gotoEnd.layer.borderWidth = 1;
gotoEnd.layer.borderColor = kGrayViewColor.CGColor;
gotoEnd.clipsToBounds = YES;
gotoEnd.tag = 0;
gotoEnd.backgroundColor = kWhiteColor;
gotoEnd.buttonMargin = 8;
gotoEnd.buttonTitleFont = kFont10;
gotoEnd.graphicDistance = 0;
gotoEnd.buttonImageScale = 0.4;
[gotoEnd addTarget:self action:@selector(gotoEndClick:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:gotoEnd];
[self setEmptyOnView:self.mainTableView title:TFLocalizedString(@"暂无目录列表") buttonTitle:@"" tapBlock:^{}];
if (self.comicModel.chapter_list.count == 0) {
gotoCurrent.hidden = YES;
gotoEnd.hidden = YES;
self.sortButton.hidden = YES;
self.headTitleLabel.hidden = YES;
} else {
gotoCurrent.hidden = NO;
gotoEnd.hidden = NO;
self.sortButton.hidden = NO;
self.headTitleLabel.hidden = NO;
}
dispatch_async(dispatch_get_main_queue(), ^{
[self.mainTableView xtfei_endLoading];
});
}
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
beginOffSetY = scrollView.contentOffset.y;
clickGotoButton = NO;
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
if (!clickGotoButton) {
if ([scrollView isEqual:self.mainTableView]) {
if (!self.canScroll) {
scrollView.contentOffset = CGPointZero;
}
if (scrollView.contentOffset.y <= 0) {
self.canScroll = NO;
scrollView.contentOffset = CGPointZero;
//到顶通知父视图改变状态
[[NSNotificationCenter defaultCenter] postNotificationName:Notification_Can_Leave_Top object:@YES];
} else {
[[NSNotificationCenter defaultCenter] postNotificationName:Notification_Can_Leave_Top object:@NO];
}
}
if (scrollView.contentOffset.y > beginOffSetY) {
gotoEnd.buttonImageName = @"comic_goto_bottom";
gotoEnd.buttonTitle = TFLocalizedString(@"到底");
gotoEnd.tag = 0;
} else if (scrollView.contentOffset.y < beginOffSetY) {
gotoEnd.buttonImageName = @"comic_goto_top";
gotoEnd.buttonTitle = TFLocalizedString(@"到顶");
gotoEnd.tag = 1;
}
}
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
if (scrollView.contentSize.height - scrollView.contentOffset.y <= CGRectGetHeight(scrollView.bounds)) {// 滑到了底部
gotoEnd.buttonImageName = @"comic_goto_top";
gotoEnd.buttonTitle = TFLocalizedString(@"到顶");
gotoEnd.tag = 1;
} else if (scrollView.contentOffset.y == 0) {// 滑到了顶部
gotoEnd.buttonImageName = @"comic_goto_bottom";
gotoEnd.buttonTitle = TFLocalizedString(@"到底");
gotoEnd.tag = 0;
}
}
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
if (!decelerate) {
if (scrollView.contentSize.height - scrollView.contentOffset.y <= CGRectGetHeight(scrollView.bounds)) {// 滑到了底部
gotoEnd.buttonImageName = @"comic_goto_top";
gotoEnd.buttonTitle = TFLocalizedString(@"到顶");
gotoEnd.tag = 1;
} else if (scrollView.contentOffset.y == 0) {// 滑到了顶部
gotoEnd.buttonImageName = @"comic_goto_bottom";
gotoEnd.buttonTitle = TFLocalizedString(@"到底");
gotoEnd.tag = 0;
}
}
}
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView {
if (scrollView.contentSize.height - scrollView.contentOffset.y <= CGRectGetHeight(scrollView.bounds)) {// 滑到了底部
gotoEnd.buttonImageName = @"comic_goto_top";
gotoEnd.buttonTitle = TFLocalizedString(@"到顶");
gotoEnd.tag = 1;
} else if (scrollView.contentOffset.y == 0) {// 滑到了顶部
gotoEnd.buttonImageName = @"comic_goto_bottom";
gotoEnd.buttonTitle = TFLocalizedString(@"到底");
gotoEnd.tag = 0;
}
}
- (void)setContentOffSetY:(CGFloat)contentOffSetY
{
gotoCurrent.frame = CGRectMake(SCREEN_WIDTH - MenuButtonHeight - kHalfMargin, SCREEN_HEIGHT - Comic_Detail_HeaderView_Height - PUB_TABBAR_HEIGHT - 44 - 44 - MenuButtonHeight - kMargin - kHalfMargin + contentOffSetY, MenuButtonHeight, MenuButtonHeight);
gotoEnd.frame = CGRectMake(SCREEN_WIDTH - MenuButtonHeight - kHalfMargin, SCREEN_HEIGHT - Comic_Detail_HeaderView_Height - PUB_TABBAR_HEIGHT - 44 - 44 - kMargin + contentOffSetY, MenuButtonHeight, MenuButtonHeight);
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return self.comicModel.chapter_list.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
TFProductionChapterModel *t_chapterList = [self.comicModel.chapter_list objectOrNilAtIndex:indexPath.row];
TFComicDetailRightViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"TFComicDetailRightViewCell"];
if (!cell) {
cell = [[TFComicDetailRightViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"TFComicDetailRightViewCell"];
}
cell.chapterModel = t_chapterList;
return cell;
}
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
return 44;
}
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, 44)];
view.backgroundColor = [UIColor whiteColor];
[view addSubview:self.headTitleLabel];
[view addSubview:self.sortButton];
return view;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
self.readIndex = indexPath.row;
TFProductionChapterModel *t_chapterModel = [self.comicModel.chapter_list objectOrNilAtIndex:indexPath.row];
[[TFReadRecordManager shareManagerWithProductionType:TFProductionTypeComic] addReadingRecordWithProduction_id:t_chapterModel.production_id chapter_id:t_chapterModel.chapter_id chapterTitle:t_chapterModel.chapter_title];
TFComicBrowseViewController *vc = [[TFComicBrowseViewController alloc] init];
vc.comicProductionModel = self.comicModel;
vc.chapter_id = t_chapterModel.chapter_id;
[self.navigationController pushViewController:vc animated:YES];
}
#pragma mark - 点击事件
- (void)changeDirectorySort:(TFButton *)sender
{
if (self.comicModel.chapter_list.count == 0) return;
if (sender.tag == 0) {
sender.tag = 1;
sender.buttonImageName = @"comic_reverse_order";
sender.buttonTitle = TFLocalizedString(@"倒序");
} else {
sender.tag = 0;
sender.buttonImageName = @"comic_positive_order";
sender.buttonTitle = TFLocalizedString(@"正序");
}
self.comicModel.chapter_list = [[self.comicModel.chapter_list reverseObjectEnumerator] allObjects];
// 计算已读章节的位置
NSInteger readIndex = [[TFReadRecordManager shareManagerWithProductionType:TFProductionTypeComic] getReadingRecordChapter_idWithProduction_id:self.comicModel.production_id];
NSArray<NSNumber *> *t_arr = [self.comicModel.chapter_list valueForKeyPath:@"chapter_id"];
self.readIndex = [t_arr indexOfObject:@(readIndex)];
if (self.readIndex == NSNotFound) {
self.readIndex = -1;
}
[self.mainTableView reloadData];
}
- (void)gotoCurrentClick:(UIButton *)sender
{
if (self.comicModel.chapter_list.count == 0) return;
[[NSNotificationCenter defaultCenter] postNotificationName:Notification_Directory_Move object:@"bottom"];
if (self.readIndex != -1) {
[self.mainTableView scrollToRow:self.readIndex inSection:0 atScrollPosition:UITableViewScrollPositionTop animated:YES];
}
}
- (void)gotoEndClick:(UIButton *)sender
{
if (self.comicModel.chapter_list.count == 0) return;
clickGotoButton = YES;
[[NSNotificationCenter defaultCenter] postNotificationName:Notification_Can_Leave_Top object:@NO];
if (sender.tag == 0) {
[[NSNotificationCenter defaultCenter] postNotificationName:Notification_Directory_Move object:@"bottom"];
[self.mainTableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:self.comicModel.chapter_list.count - 1 inSection:0] atScrollPosition:UITableViewScrollPositionBottom animated:YES];
gotoEnd.buttonImageName = @"comic_goto_top";
gotoEnd.buttonTitle = TFLocalizedString(@"到顶");
gotoEnd.tag = 1;
} else {
[[NSNotificationCenter defaultCenter] postNotificationName:Notification_Directory_Move object:@"top"];
[self.mainTableView setContentOffset:CGPointMake(0,0) animated:YES];
gotoEnd.buttonImageName = @"comic_goto_bottom";
gotoEnd.buttonTitle = TFLocalizedString(@"到底");
gotoEnd.tag = 0;
}
}
#pragma mark - 懒加载
- (UILabel *)headTitleLabel
{
if (!_headTitleLabel) {
_headTitleLabel = [[UILabel alloc] init];
_headTitleLabel.text = self.comicModel.flag?:@"";
_headTitleLabel.frame = CGRectMake(kHalfMargin, 0, SCREEN_WIDTH - kMargin, 44);
_headTitleLabel.font = kFont11;
_headTitleLabel.textColor = kGrayTextColor;
_headTitleLabel.textAlignment = NSTextAlignmentLeft;
}
return _headTitleLabel;
}
- (TFButton *)sortButton
{
if (!_sortButton) {
CGFloat width = [TFViewHelper getDynamicWidthWithLabelFont:kFont11 labelHeight:30.0 labelText:TFLocalizedString(@"正序") maxWidth:SCREEN_WIDTH / 2.0 - kMargin];
width += kLabelHeight;
_sortButton = [[TFButton alloc] initWithFrame:CGRectMake(SCREEN_WIDTH - kHalfMargin - width, 7, width, 30) buttonTitle:TFLocalizedString(@"正序") buttonSubTitle:@"" buttonImageName:@"comic_positive_order" buttonIndicator:TFButtonIndicatorImageRightBothRight showMaskView:NO];
_sortButton.buttonImageScale = 0.4;
_sortButton.buttonTitleFont = kFont11;
_sortButton.graphicDistance = 5;
_sortButton.buttonTitleColor = kGrayTextColor;
_sortButton.tag = 0;
[_sortButton addTarget:self action:@selector(changeDirectorySort:) forControlEvents:UIControlEventTouchUpInside];
}
return _sortButton;
}
- (void)setComicModel:(TFProductionModel *)comicModel
{
_comicModel = comicModel;
if (self.sortButton.tag == 1) {
self.comicModel.chapter_list = [[comicModel.chapter_list reverseObjectEnumerator] allObjects];
}
[self reloadRecordData];
}
- (void)reloadRecordData
{
[self.mainTableView reloadData];
}
@end