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.
269 lines
11 KiB
269 lines
11 KiB
// |
|
// TFReadNovelTextController.m |
|
// TFReader |
|
// |
|
// Created by 谢腾飞 on 2020/12/15. |
|
// Copyright © 2020 xtfei_2011@126.com. All rights reserved. |
|
// |
|
|
|
#import "TFReadNovelTextController.h" |
|
#import "TYAttributedLabel.h" |
|
#import "TFReaderBookManager.h" |
|
#import "TFReaderSettingHelper.h" |
|
#import "WXYZ_BatteryView.h" |
|
#import "TFEmptyViewHeader.h" |
|
#import "WXYZ_BookReaderMenuPayView.h" |
|
#import "NSAttributedString+TReaderPage.h" |
|
#import "TFNetworkManager.h" |
|
|
|
#import "TFReaderBookManager.h" |
|
|
|
@interface TFReadNovelTextController () |
|
{ |
|
UILabel *emptyTitleLabel; |
|
UIButton *emptyButton; |
|
} |
|
|
|
@property (nonatomic ,strong) UILabel *chapterTitleLabel; |
|
|
|
@property (nonatomic ,strong) UILabel *bookNameLabel; |
|
|
|
@property (nonatomic ,strong) UILabel *pageNumberLabel; |
|
|
|
@property (nonatomic ,strong) TYAttributedLabel *chapterContentLabel; |
|
|
|
@property (nonatomic ,strong) WXYZ_BatteryView *battery; |
|
|
|
@property (nonatomic ,strong) WXYZ_BookReaderMenuPayView *payView; |
|
|
|
@end |
|
|
|
@implementation TFReadNovelTextController |
|
|
|
- (void)viewDidLoad |
|
{ |
|
[super viewDidLoad]; |
|
|
|
self.view.backgroundColor = [[TFReaderSettingHelper sharedManager] getReaderBackgroundColor]; |
|
|
|
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reloadFrame) name:Notification_Check_Setting_Update object:nil]; |
|
|
|
WS(weakSelf) |
|
[TFReaderSettingHelper sharedManager].readerBackgroundViewChanged = ^() { |
|
[weakSelf reloadSubviews]; |
|
[[NSNotificationCenter defaultCenter] postNotificationName:NSNotification_Retry_Chapter object:nil]; |
|
}; |
|
} |
|
|
|
- (void)setContentString:(NSAttributedString *)contentString |
|
{ |
|
if ([contentString.string isEqualToString:k_Chapter_RequstFail] || !contentString) { |
|
[self createEmptyView]; |
|
[[NSNotificationCenter defaultCenter] postNotificationName:NSNotification_EmptyView_Changed object:@1]; |
|
return; |
|
} |
|
[self reloadSubviews]; |
|
|
|
if ([[TFReaderBookManager sharedManager] isPreviewChapter] && contentString.length > 1) { |
|
CGSize size = CGSizeMake(CGRectGetWidth(self.chapterContentLabel.bounds), CGRectGetHeight(self.chapterContentLabel.bounds) / 2.0); |
|
NSArray<NSValue *> *t_arr = [contentString pageRangeArrayWithConstrainedToSize:size]; |
|
if (t_arr.count > 0) { |
|
NSRange range = [t_arr.firstObject rangeValue]; |
|
contentString = [contentString attributedSubstringFromRange:range]; |
|
} |
|
|
|
[self payView]; |
|
} else { |
|
TFReaderBookManager *manager = [TFReaderBookManager sharedManager]; |
|
NSString *chapter_id = [NSString stringWithFormat:@"%zd", manager.chapter_id]; |
|
[[NSNotificationCenter defaultCenter] postNotificationName:Notification_Production_Pay_Success object:@[chapter_id]]; |
|
_payView.hidden = YES; |
|
} |
|
|
|
_contentString = contentString; |
|
self.chapterContentLabel.attributedText = contentString; |
|
|
|
// 总章节页数 |
|
NSUInteger totalChapterPagerCount = [[TFReaderBookManager sharedManager] totalChapterPagerCount]; |
|
NSUInteger readedPagerCount = ([[TFReaderBookManager sharedManager] currentPagerIndex] + 1) + (([[TFReaderBookManager sharedManager] currentChapterPagerCount]) * ([[TFReaderBookManager sharedManager] currentChapterIndex])); |
|
|
|
float progressValue = [[NSNumber numberWithUnsignedInteger:readedPagerCount] floatValue] / [[NSNumber numberWithUnsignedInteger:totalChapterPagerCount] floatValue] * 100; |
|
dispatch_async(dispatch_get_main_queue(), ^{ |
|
self.pageNumberLabel.text = [NSString stringWithFormat:@"%.1lf%@", progressValue < 0.1?0.1f:progressValue, @"%"]; |
|
}); |
|
|
|
[[NSNotificationCenter defaultCenter] postNotificationName:NSNotification_EmptyView_Changed object:@0]; |
|
} |
|
|
|
- (void)reloadSubviews |
|
{ |
|
kCodeSync({ |
|
self.view.backgroundColor = [[TFReaderSettingHelper sharedManager] getReaderBackgroundColor]; |
|
|
|
UIColor *textColor = [[TFReaderSettingHelper sharedManager] getReaderTextColor]; |
|
UIColor *titleTextColor = [[TFReaderSettingHelper sharedManager] getReaderTitleTextColor]; |
|
|
|
self.chapterContentLabel.font = [UIFont systemFontOfSize:[[TFReaderSettingHelper sharedManager] getReaderFontSize]]; |
|
self.chapterContentLabel.linesSpacing = [[TFReaderSettingHelper sharedManager] getReaderLinesSpacing]; |
|
|
|
self.bookNameLabel.text = [[TFReaderBookManager sharedManager] getBookName]; |
|
self.bookNameLabel.textColor = titleTextColor; |
|
|
|
self.chapterTitleLabel.text = [[TFReaderBookManager sharedManager] getChapterTitle]; |
|
self.chapterTitleLabel.textColor = titleTextColor; |
|
|
|
self.chapterContentLabel.textColor = textColor; |
|
|
|
self.battery.batteryTintColor = titleTextColor; |
|
|
|
self.pageNumberLabel.textColor = [[TFReaderSettingHelper sharedManager] getReaderTitleTextColor]; |
|
self.pageNumberLabel.hidden = NO; |
|
|
|
emptyButton.hidden = YES; |
|
emptyTitleLabel.hidden = YES; |
|
|
|
if ([TFReaderBookManager sharedManager].currentChapterIndex == 0 && [TFReaderBookManager sharedManager].currentPagerIndex == 0) { |
|
self.chapterTitleLabel.hidden = YES; |
|
self.battery.hidden = YES; |
|
self.pageNumberLabel.hidden = YES; |
|
self.bookNameLabel.hidden = YES; |
|
} else { |
|
self.chapterTitleLabel.hidden = NO; |
|
self.battery.hidden = NO; |
|
self.pageNumberLabel.hidden = NO; |
|
self.bookNameLabel.hidden = NO; |
|
} |
|
}); |
|
} |
|
|
|
- (void)reloadFrame |
|
{ |
|
[self reloadSubviews]; |
|
_pageNumberLabel.frame = CGRectMake(SCREEN_WIDTH / 2, [[TFReaderSettingHelper sharedManager] getReaderViewBottom] + kHalfMargin, (SCREEN_WIDTH - 2 * kMargin) / 2, kMargin); |
|
_battery.frame = CGRectMake(kMargin, [[TFReaderSettingHelper sharedManager] getReaderViewBottom] + kHalfMargin, SCREEN_WIDTH / 2, kMargin); |
|
_bookNameLabel.frame = CGRectMake(SCREEN_WIDTH / 3, [[TFReaderSettingHelper sharedManager] getReaderViewBottom] + kHalfMargin, SCREEN_WIDTH / 3, kMargin); |
|
_chapterContentLabel.frame = [[TFReaderSettingHelper sharedManager] getReaderViewFrame]; |
|
} |
|
|
|
- (UILabel *)pageNumberLabel |
|
{ |
|
if (!_pageNumberLabel) { |
|
_pageNumberLabel = [[UILabel alloc] initWithFrame:CGRectMake(SCREEN_WIDTH / 2, [[TFReaderSettingHelper sharedManager] getReaderViewBottom] + kHalfMargin, (SCREEN_WIDTH - 2 * kMargin) / 2, kMargin)]; |
|
_pageNumberLabel.text = @"0.1%"; |
|
_pageNumberLabel.font = kFont12; |
|
_pageNumberLabel.hidden = YES; |
|
_pageNumberLabel.textAlignment = NSTextAlignmentRight; |
|
[self.view addSubview:_pageNumberLabel]; |
|
} |
|
return _pageNumberLabel; |
|
} |
|
|
|
- (WXYZ_BatteryView *)battery |
|
{ |
|
if (!_battery) { |
|
_battery = [[WXYZ_BatteryView alloc] initWithFrame:CGRectMake(kMargin, [[TFReaderSettingHelper sharedManager] getReaderViewBottom] + kHalfMargin, SCREEN_WIDTH / 2, kMargin)]; |
|
[self.view addSubview:_battery]; |
|
} |
|
return _battery; |
|
} |
|
|
|
- (UILabel *)bookNameLabel |
|
{ |
|
if (!_bookNameLabel) { |
|
_bookNameLabel = [[UILabel alloc] initWithFrame:CGRectMake(SCREEN_WIDTH / 3, [[TFReaderSettingHelper sharedManager] getReaderViewBottom] + kHalfMargin, SCREEN_WIDTH / 3, kMargin)]; |
|
_bookNameLabel.font = kFont12; |
|
_bookNameLabel.textAlignment = NSTextAlignmentCenter; |
|
[self.view addSubview:_bookNameLabel]; |
|
} |
|
return _bookNameLabel; |
|
} |
|
|
|
- (UILabel *)chapterTitleLabel |
|
{ |
|
if (!_chapterTitleLabel) { |
|
_chapterTitleLabel = [[UILabel alloc] initWithFrame:CGRectMake(kMargin, kMargin + PUB_NAVBAR_OFFSET, (SCREEN_WIDTH - 2 * kMargin) / 2, kMargin)]; |
|
_chapterTitleLabel.font = kFont12; |
|
_chapterTitleLabel.textAlignment = NSTextAlignmentLeft; |
|
[self.view addSubview:_chapterTitleLabel]; |
|
} |
|
return _chapterTitleLabel; |
|
} |
|
|
|
- (TYAttributedLabel *)chapterContentLabel |
|
{ |
|
if (!_chapterContentLabel) { |
|
_chapterContentLabel = nil; |
|
kCodeSync({ |
|
_chapterContentLabel = [[TYAttributedLabel alloc] init]; |
|
_chapterContentLabel.frame = [[TFReaderSettingHelper sharedManager] getReaderViewFrame]; |
|
_chapterContentLabel.font = [UIFont systemFontOfSize:[[TFReaderSettingHelper sharedManager] getReaderFontSize]]; |
|
_chapterContentLabel.backgroundColor = [UIColor clearColor]; |
|
_chapterContentLabel.linesSpacing = [[TFReaderSettingHelper sharedManager] getReaderLinesSpacing]; |
|
_chapterContentLabel.lineBreakMode = NSLineBreakByWordWrapping; |
|
[self.view addSubview:_chapterContentLabel]; |
|
}); |
|
} |
|
return _chapterContentLabel; |
|
} |
|
|
|
- (WXYZ_BookReaderMenuPayView *)payView |
|
{ |
|
if (!_payView) { |
|
_payView = [[WXYZ_BookReaderMenuPayView alloc] init]; |
|
[self.view addSubview:_payView]; |
|
} |
|
_payView.hidden = NO; |
|
return _payView; |
|
} |
|
|
|
- (void)createEmptyView |
|
{ |
|
if (!emptyTitleLabel) { |
|
emptyTitleLabel = [[UILabel alloc] init]; |
|
emptyTitleLabel.textColor = [TFReaderSettingHelper sharedManager].getReaderTextColor; |
|
emptyTitleLabel.font = kFont16; |
|
emptyTitleLabel.text = TFLocalizedString(@"内容加载失败"); |
|
emptyTitleLabel.textAlignment = NSTextAlignmentCenter; |
|
[self.view addSubview:emptyTitleLabel]; |
|
|
|
[emptyTitleLabel mas_makeConstraints:^(MASConstraintMaker *make) { |
|
make.bottom.mas_equalTo(self.view.mas_centerY).with.offset(- kHalfMargin); |
|
make.left.mas_equalTo(0); |
|
make.width.mas_equalTo(SCREEN_WIDTH); |
|
make.height.mas_equalTo(kLabelHeight); |
|
}]; |
|
} |
|
|
|
if (!emptyButton) { |
|
emptyButton = [UIButton buttonWithType:UIButtonTypeCustom]; |
|
emptyButton.backgroundColor = [UIColor clearColor]; |
|
emptyButton.layer.cornerRadius = 15; |
|
emptyButton.layer.borderColor = [TFReaderSettingHelper sharedManager].getReaderTextColor.CGColor; |
|
emptyButton.layer.borderWidth = 1.0; |
|
[emptyButton setTitle:TFLocalizedString(@"重试") forState:UIControlStateNormal]; |
|
[emptyButton setTitleColor:[TFReaderSettingHelper sharedManager].getReaderTextColor forState:UIControlStateNormal]; |
|
[emptyButton.titleLabel setFont:kFont12]; |
|
[emptyButton addTarget:self action:@selector(retryClick:) forControlEvents:UIControlEventTouchUpInside]; |
|
[self.view addSubview:emptyButton]; |
|
|
|
[emptyButton mas_makeConstraints:^(MASConstraintMaker *make) { |
|
make.centerX.mas_equalTo(self.view.mas_centerX); |
|
make.top.mas_equalTo(emptyTitleLabel.mas_bottom); |
|
make.width.mas_equalTo(80); |
|
make.height.mas_equalTo(kLabelHeight); |
|
}]; |
|
} |
|
|
|
emptyButton.hidden = NO; |
|
emptyTitleLabel.hidden = NO; |
|
} |
|
|
|
- (void)retryClick:(UIButton *)sender |
|
{ |
|
if (![TFNetworkManager networkingStatus] || [TFNetworkManager currentNetworkStatus] == kCTCellularDataRestrictedStateUnknown) { |
|
return; |
|
} |
|
[[NSNotificationCenter defaultCenter] postNotificationName:NSNotification_Retry_Chapter object:@"1"]; |
|
} |
|
|
|
@end
|
|
|