小说绘上架版本

This commit is contained in:
xtfei2011
2021-02-07 11:24:08 +08:00
commit ee5c1c8b12
1762 changed files with 115892 additions and 0 deletions
@@ -0,0 +1,116 @@
//
// TFReaderBookManager.h
// WXReader
//
// Created by 谢腾飞 on 2020/12/2.
// Copyright © 2020 xtfei_2011@126.com. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface TFReaderBookManager : NSObject
// 当前阅读章节
@property (nonatomic, assign) NSInteger currentChapterIndex;
// 当前页数
@property (nonatomic, assign) NSInteger currentPagerIndex;
// 书籍id
@property (nonatomic, assign) NSInteger book_id;
// 章节id
@property (nonatomic, assign) NSInteger chapter_id;
// 下一页
@property (nonatomic, assign) NSInteger nextPagerIndex;
// 上一页
@property (nonatomic, assign) NSInteger previousPagerIndex;
// 当前章节页数
@property (nonatomic, assign, readonly) NSInteger currentChapterPagerCount;
// 总章节数
@property (nonatomic, assign, readonly) NSInteger totalChapterCount;
// 书籍总页数
@property (nonatomic, assign, readonly) NSInteger totalChapterPagerCount;
@property (nonatomic, strong, readonly) TFProductionChapterModel *chapterModel;
@property (nonatomic, strong) TFProductionModel *bookModel;
/// 章节末尾投票数
@property (nonatomic, copy, nullable) NSString *reward_num;
/// 章节末尾月票数
@property (nonatomic, copy, nullable) NSString *ticket_num;
/// 书签标记位置
@property (nonatomic, assign) NSInteger markIndex;
interface_singleton
// 获取书籍名称
- (NSString *)getBookName;
// 获取章节名称
- (NSString *)getChapterTitle;
// 是否是预览章节
- (BOOL)isPreviewChapter;
// 是否有下章节
- (BOOL)haveNextChapter;
// 是否有上章节
- (BOOL)havePreChapter;
// 是否是最后一章最后一页
- (BOOL)isTheLastPager;
// 是否是第一章第一页
- (BOOL)isTheFormerPager;
// 是否有下一页
- (BOOL)haveNextPager;
// 上一章是否有缓存
- (BOOL)havePreCache;
// 下一章是否有缓存
- (BOOL)haveNextCache;
// 获取下一页
- (void)getNextPagerAttributedText:(void(^ _Nullable)(NSAttributedString *content))complete;
// 获取上一页
- (void)getPrePagerAttributedText:(void(^ _Nullable)(NSAttributedString * _Nullable content))complete;
// 获取某一章节某一页
- (void)getPagerAttributedTextWithChapterIndex:(NSInteger)chapterIndex pagerIndex:(NSInteger)pageIndex completionHandler:(void(^)(NSAttributedString *content))completionHandler;
// 获取某一章节全部内容
- (void)getChapterTextWithBook_id:(NSInteger)book_id chapter_index:(NSInteger)chapter_index completionHandler:(void(^)(NSString *content))completionHandler;
// 书籍model请求
- (void)requestBookModelWithBookId:(NSUInteger)book_id completionHandler:(void(^ _Nullable)(void))completionHandler;
// 获取章节所有内容
- (NSString *)getChapterContent;
// 获取章节详细内容
- (NSString *)getChapterDetailContent;
- (NSMutableArray *)chapterRangeArray;
// 预加载多个章节(不支持自动订阅 && 支持多章下载)
- (void)downloadPrestrainChaptersWithProductionModel:(TFProductionModel *)productionModel production_id:(NSInteger)production_id chapter_id:(NSInteger)chapter_id prestrainNumber:(NSInteger)prestrainNumber;
// 预加载章节(支持自动订阅 && 仅支持单章下载)
- (void)downloadPrestrainChapterWithProductionModel:(TFProductionModel *)productionModel production_id:(NSInteger)production_id chapter_id:(NSInteger)chapter_id completionHandler:(void(^ _Nullable)(NSString *chapterContentString, NSInteger production_id, NSInteger chapter_id))completionHandler;
@end
NS_ASSUME_NONNULL_END
@@ -0,0 +1,219 @@
//
// TFReaderSettingHelper.h
// TFReader
//
// Created by 谢腾飞 on 2020/12/2.
// Copyright © 2020 xtfei_2011@126.com. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
typedef NS_ENUM(NSUInteger, TFReaderTransitionStyle) {
TFReaderTransitionStylePageCurl = 0,
TFReaderTransitionStyleScroll = 1,
TFReaderTransitionStyleCover = 2,
TFReaderTransitionStyleNone = 3
};
typedef NS_ENUM(NSUInteger, TFReaderAutoReadState) {
TFReaderAutoReadStateStop = 0, // 停止
TFReaderAutoReadStateStart = 1, // 开启
TFReaderAutoReadStatePause = 2, // 暂停
TFReaderAutoReadStateResume = 3, // 恢复
};
typedef NS_ENUM(NSUInteger, TFReaderLineSpacingState) {
TFReaderLineSpacingStateBig = 0,
TFReaderLineSpacingStateMedium = 1,
TFReaderLineSpacingStateSmall = 2
};
typedef NS_ENUM(NSUInteger, TFReaderPatternMode) {
TFReaderPatternModeDaytime = 0,
TFReaderPatternModeNight = 1
};
typedef NS_ENUM(NSUInteger, TFReaderBackColorMode) {
TFReaderBackColorYellow,
TFReaderBackColorGreen,
TFReaderBackColorBlue,
TFReaderBackColorPink,
TFReaderBackColorWhite,
TFReaderBackColorGray,
TFReaderBackColorBlack
};
static CGFloat line_spacing_small = 5.0f;
static CGFloat line_spacing_medium = 10.0f;
static CGFloat line_spacing_big = 20.0f;
typedef void(^ReaderFontChanged)(void);
typedef void(^ReaderBackgroundViewChanged)(void);
typedef void(^ReaderBrightnessChanged)(void);
typedef void(^ReaderLinesSpacingChanged)(void);
typedef void(^ReaderTransitionStyleChanged)(TFReaderTransitionStyle transitionStyle);
typedef void(^ReaderAutoReaderStateChanged)(TFReaderAutoReadState state);
typedef void(^ReaderAutoReadSpeedChanged)(NSInteger readSpeed);
@interface TFReaderSettingHelper : NSObject
// 字体改变
@property (nonatomic, copy) ReaderFontChanged readerFontChanged;
// 背景改变
@property (nonatomic, copy) ReaderBackgroundViewChanged readerBackgroundViewChanged;
// 亮度改变
@property (nonatomic, copy) ReaderBrightnessChanged readerBrightnessChanged;
// 间距改变
@property (nonatomic, copy) ReaderLinesSpacingChanged readerLinesSpacingChanged;
// 翻页样式改变
@property (nonatomic, copy) ReaderTransitionStyleChanged readerTransitionStyleChanged;
// 自动阅读启动或者停止
@property (nonatomic, copy) ReaderAutoReaderStateChanged readerAutoReaderStateChanged;
// 改变自动阅读时间
@property (nonatomic, copy) ReaderAutoReadSpeedChanged readerAutoReadSpeedChanged;
/**
单例方法
@return self
*/
interface_singleton
@property (nonatomic, assign) TFReaderAutoReadState state;
// 开启屏幕常亮
- (void)openScreenKeep;
// 关闭屏幕常亮
- (void)closeScreenKeep;
// 隐藏状态栏
- (void)hiddenStatusBar;
// 显示状态栏
- (void)showStatusBar;
/*
Font
*/
// 设置字号
- (void)setReaderFontSize:(CGFloat)fontSize;
// 获取字号
- (CGFloat)getReaderFontSize;
- (CGFloat)getReaderMinFontSize;
- (CGFloat)getReaderMaxFontSize;
// 设置行间距
- (void)setReaderLinesSpacing:(CGFloat)linesSpacing;
// 获取行间距
- (CGFloat)getReaderLinesSpacing;
// 获取行间距类型
- (TFReaderLineSpacingState)getReaderLineSpacingState;
/*
Frame
*/
// 获取页面size
- (CGSize)getReaderViewSize;
// 获取页面frame
- (CGRect)getReaderViewFrame;
// 获取页面bottom
- (CGFloat)getReaderViewBottom;
/*
Color
*/
// 设置背景色
- (void)setReaderBackgroundColor:(TFReaderBackColorMode)colorMode;
// 获取背景色枚举值
- (TFReaderBackColorMode)getReaderBackgroundColorMode;
// 获取背景色
- (UIColor *)getReaderBackgroundColor;
// 背景颜色合集
- (NSArray *)getReaderBackgroundColorModeArray;
// 获取字体颜色
- (UIColor *)getReaderTextColor;
// 获取标题字体颜色
- (UIColor *)getReaderTitleTextColor;
// 获取夜间模式状态
- (TFReaderPatternMode)getNightModeState;
// 设置夜间模式状态
- (void)setNightModeState:(TFReaderPatternMode)state;
/*
Brightness
*/
// 获取屏幕亮度
- (CGFloat)getBrightness;
// 设定屏幕亮度
- (void)setBrightness:(CGFloat)brightness;
/*
TransitionStyle
*/
// 设置翻页类型
- (void)setTransitionStyle:(TFReaderTransitionStyle)transitionStyle;
// 获取翻页类型
- (TFReaderTransitionStyle)getTransitionStyle;
/*
RecordLocation
*/
// 获取记录章节
- (NSInteger)getMemoryChapterIndexWithBook_id:(NSUInteger)book_id;
// 获取记录页数
- (NSInteger)getMemoryPagerIndexWithBook_id:(NSUInteger)book_id;
// 记录章节 页数
- (void)setLocationMemoryOfChapterIndex:(NSInteger)chapterIndex pagerIndex:(NSInteger)pagerIndex book_id:(NSUInteger)book_id;
/*
设置阅读速度
*/
// 设置阅读速度
- (void)setReadSpeed:(NSUInteger)animationDuration;
// 获取阅读速度
- (NSUInteger)getReadSpeed;
// 开启或关闭自动阅读
- (void)setAutoReaderState:(TFReaderAutoReadState)state;
@end
NS_ASSUME_NONNULL_END
@@ -0,0 +1,409 @@
//
// TFReaderSettingHelper.m
// TFReader
//
// Created by 谢腾飞 on 2020/12/2.
// Copyright © 2020 xtfei_2011@126.com. All rights reserved.
//
#import "TFReaderSettingHelper.h"
#import "AppDelegate.h"
#define PUB_DEFAULT_READ_SPEED 10
#define PUB_MIN_READ_SPEED 5
#define PUB_MAX_READ_SPEED 60
@implementation TFReaderSettingHelper
implementation_singleton(TFReaderSettingHelper)
#pragma mark - Screen
// 开启屏幕常亮
- (void)openScreenKeep
{
[UIApplication sharedApplication].idleTimerDisabled = YES;
}
// 关闭屏幕常亮
- (void)closeScreenKeep
{
[UIApplication sharedApplication].idleTimerDisabled = NO;
}
#pragma mark - Status
- (void)hiddenStatusBar
{
[UIApplication sharedApplication].statusBarHidden = YES;
}
- (void)showStatusBar
{
[UIApplication sharedApplication].statusBarHidden = NO;
}
#pragma mark - Font
- (void)setReaderFontSize:(CGFloat)fontSize
{
[[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithFloat:fontSize] forKey:TF_READER_FONT];
[[NSUserDefaults standardUserDefaults] synchronize];
if (self.readerFontChanged) {
self.readerFontChanged();
}
}
- (CGFloat)getReaderFontSize
{
CGFloat textFontSize = [[[NSUserDefaults standardUserDefaults] objectForKey:TF_READER_FONT] floatValue];
if (!textFontSize || textFontSize <= [self getReaderMinFontSize]) {
return [self getReaderMinFontSize];
}
if (textFontSize >= [self getReaderMaxFontSize]) {
return [self getReaderMaxFontSize];
}
return textFontSize;
}
- (CGFloat)getReaderMinFontSize
{
return kFontSize15;
}
- (CGFloat)getReaderMaxFontSize
{
return kFontSize30;
}
// 设置行间距
- (void)setReaderLinesSpacing:(CGFloat)linesSpacing
{
[[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithFloat:linesSpacing] forKey:TF_READER_LINESPACING];
[[NSUserDefaults standardUserDefaults] synchronize];
if (self.readerLinesSpacingChanged) {
self.readerLinesSpacingChanged();
}
}
// 获取行间距
- (CGFloat)getReaderLinesSpacing
{
CGFloat t_linesSpacing = [[[NSUserDefaults standardUserDefaults] objectForKey:TF_READER_LINESPACING] floatValue];
if (t_linesSpacing == 0) {
[self setReaderLinesSpacing:line_spacing_medium];
return line_spacing_medium;
}
return t_linesSpacing;
}
- (TFReaderLineSpacingState)getReaderLineSpacingState
{
CGFloat t_lineSpacing = [self getReaderLinesSpacing];
if (t_lineSpacing == line_spacing_small) {
return TFReaderLineSpacingStateSmall;
} else if (t_lineSpacing == line_spacing_medium) {
return TFReaderLineSpacingStateMedium;
} else {
return TFReaderLineSpacingStateBig;
}
}
#pragma mark - Frame
- (CGSize)getReaderViewSize
{
return [self getReaderViewFrame].size;
}
- (CGRect)getReaderViewFrame
{
AppDelegate *appDelegate = (AppDelegate *)kRCodeSync([[UIApplication sharedApplication] delegate]);
if (!appDelegate.checkSettingModel.ad_status_setting.chapter_read_bottom) {
return CGRectMake(kMargin,
2 * kMargin + PUB_NAVBAR_OFFSET + 10,
SCREEN_WIDTH - 2 * kMargin,
SCREEN_HEIGHT - 2 * kMargin - PUB_NAVBAR_OFFSET - PUB_TABBAR_OFFSET - 2 * kHalfMargin - kMargin);
}
return CGRectMake(kMargin,
2 * kMargin + PUB_NAVBAR_OFFSET + 10,
SCREEN_WIDTH - 2 * kMargin,
SCREEN_HEIGHT - 2 * kMargin - PUB_NAVBAR_OFFSET - 2 * kHalfMargin - kMargin - PUB_TABBAR_HEIGHT - (is_iPhoneX?-kMargin:0));
}
- (CGFloat)getReaderViewBottom
{
return [self getReaderViewFrame].origin.y + [self getReaderViewFrame].size.height;
}
#pragma mark - Color
// 设置背景色
- (void)setReaderBackgroundColor:(TFReaderBackColorMode)colorMode
{
if ([self getNightModeState] == TFReaderPatternModeNight) {
return;
}
[[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithUnsignedInteger:colorMode] forKey:@"xtfei_back_color"];
[[NSUserDefaults standardUserDefaults] synchronize];
if ([self getNightModeState] == TFReaderPatternModeDaytime) {
if (self.readerBackgroundViewChanged) {
self.readerBackgroundViewChanged();
}
}
}
// 获取背景色枚举值
- (TFReaderBackColorMode)getReaderBackgroundColorMode
{
if ([self getNightModeState] == TFReaderPatternModeNight) {
return TFReaderBackColorBlack;
}
return [[[NSUserDefaults standardUserDefaults] objectForKey:@"xtfei_back_color"] integerValue];
}
// 获取背景色
- (UIColor *)getReaderBackgroundColor
{
return [UIColor colorWithPatternImage:[UIImage imageNamed:[[self getReaderBackgroundColorModeArray] objectAtIndex:[self getReaderBackgroundColorMode]]]];
}
- (NSArray *)getReaderBackgroundColorModeArray
{
return @[@"read_page_bg_yellow.png", @"read_page_bg_green.png", @"read_page_bg_blue.png", @"read_page_bg_pink.png", @"read_page_bg_white.png", @"read_page_bg_gray.png", @"read_page_bg_black.png"];
}
// 获取字体颜色
- (UIColor *)getReaderTextColor
{
switch ([self getReaderBackgroundColorMode]) {
case TFReaderBackColorYellow:
return kColorRGBA(92, 66, 45, 1);
case TFReaderBackColorGreen:
return kColorRGBA(69, 81, 72, 1);
break;
case TFReaderBackColorBlue:
return kColorRGBA(50, 63, 74, 1);
break;
case TFReaderBackColorPink:
return kColorRGBA(144, 38, 61, 1);
break;
case TFReaderBackColorWhite:
return kBlackColor;
break;
case TFReaderBackColorGray:
return kColorRGBA(159, 161, 163, 1);
break;
case TFReaderBackColorBlack:
return kColorRGBA(127, 127, 127, 1);
break;
default:
break;
}
}
// 获取标题字体颜色
- (UIColor *)getReaderTitleTextColor
{
CGFloat alpha = 0.5;
switch ([self getReaderBackgroundColorMode]) {
case TFReaderBackColorYellow:
return kColorRGBA(92, 66, 45, alpha);
case TFReaderBackColorGreen:
return kColorRGBA(69, 81, 72, alpha);
break;
case TFReaderBackColorBlue:
return kColorRGBA(50, 63, 74, alpha);
break;
case TFReaderBackColorPink:
return kColorRGBA(144, 38, 61, alpha);
break;
case TFReaderBackColorWhite:
return kColorRGBA(33, 34, 35, alpha);
break;
case TFReaderBackColorGray:
return kColorRGBA(159, 161, 163, alpha);
break;
case TFReaderBackColorBlack:
return kColorRGBA(127, 127, 127, alpha);
break;
default:
break;
}
}
// 获取夜间模式状态
- (TFReaderPatternMode)getNightModeState
{
NSInteger nightModeState = [[[NSUserDefaults standardUserDefaults] objectForKey:TF_READER_NIGHT_MODE] integerValue];
if (nightModeState == 0) {
return TFReaderPatternModeDaytime;
}
return TFReaderPatternModeNight;
}
// 设置夜间模式状态
- (void)setNightModeState:(TFReaderPatternMode)state
{
if (state == TFReaderPatternModeDaytime) {
[[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithUnsignedInteger:0] forKey:TF_READER_NIGHT_MODE];
[[NSUserDefaults standardUserDefaults] synchronize];
} else {
[[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithUnsignedInteger:1] forKey:TF_READER_NIGHT_MODE];
[[NSUserDefaults standardUserDefaults] synchronize];
}
if (self.readerBackgroundViewChanged) {
self.readerBackgroundViewChanged();
}
}
#pragma mark - Brightness
// 获取屏幕亮度
- (CGFloat)getBrightness
{
CGFloat brightness = [UIScreen mainScreen].brightness;
return brightness;
}
// 设定屏幕亮度
- (void)setBrightness:(CGFloat)brightness
{
[[UIScreen mainScreen] setBrightness:brightness];
if (self.readerBrightnessChanged) {
self.readerBrightnessChanged();
}
}
#pragma mark - TransitionStyle
// 设置翻页类型
- (void)setTransitionStyle:(TFReaderTransitionStyle)transitionStyle
{
NSUInteger t_tStyle = 0;
switch (transitionStyle) {
case TFReaderTransitionStylePageCurl:
t_tStyle = 0;
break;
case TFReaderTransitionStyleScroll:
t_tStyle = 1;
break;
case TFReaderTransitionStyleCover:
t_tStyle = 2;
break;
case TFReaderTransitionStyleNone:
t_tStyle = 3;
break;
default:
break;
}
[[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithUnsignedInteger:t_tStyle] forKey:TF_READER_TRANSITION_STYLE];
[[NSUserDefaults standardUserDefaults] synchronize];
if (self.readerTransitionStyleChanged) {
self.readerTransitionStyleChanged(transitionStyle);
}
}
// 获取翻页类型
- (TFReaderTransitionStyle)getTransitionStyle
{
NSUInteger t_transitionStyle = [[[NSUserDefaults standardUserDefaults] objectForKey:TF_READER_TRANSITION_STYLE] unsignedIntegerValue];
switch (t_transitionStyle) {
case 0:
return TFReaderTransitionStylePageCurl;
break;
case 1:
return TFReaderTransitionStyleScroll;
break;
case 2:
return TFReaderTransitionStyleCover;
break;
case 3:
return TFReaderTransitionStyleNone;
break;
default:
break;
}
return t_transitionStyle;
}
#pragma mark - RecordLocation
// 获取记录章节
- (NSInteger)getMemoryChapterIndexWithBook_id:(NSUInteger)book_id
{
NSUInteger t_chapterIndex = [[[NSUserDefaults standardUserDefaults] objectForKey:[NSString stringWithFormat:@"%@_%@",TF_READER_CHAPTER_INDEX, [TFUtilsHelper formatStringWithInteger:book_id]]] integerValue];
return t_chapterIndex;
}
// 获取记录页数
- (NSInteger)getMemoryPagerIndexWithBook_id:(NSUInteger)book_id
{
NSUInteger t_pagerIndex = [[[NSUserDefaults standardUserDefaults] objectForKey:[NSString stringWithFormat:@"%@_%@",TF_READER_PAGER_INDEX, [TFUtilsHelper formatStringWithInteger:book_id]]] unsignedIntegerValue];
return t_pagerIndex;
}
// 记录章节 页数
- (void)setLocationMemoryOfChapterIndex:(NSInteger)chapterIndex pagerIndex:(NSInteger)pagerIndex book_id:(NSUInteger)book_id
{
[[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithUnsignedInteger:chapterIndex] forKey:[NSString stringWithFormat:@"%@_%@",TF_READER_CHAPTER_INDEX, [TFUtilsHelper formatStringWithInteger:book_id]]];
[[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithUnsignedInteger:pagerIndex] forKey:[NSString stringWithFormat:@"%@_%@",TF_READER_PAGER_INDEX, [TFUtilsHelper formatStringWithInteger:book_id]]];
[[NSUserDefaults standardUserDefaults] synchronize];
}
/*
设置阅读速度
*/
// 设置阅读速度
- (void)setReadSpeed:(NSUInteger)animationDuration
{
[[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInteger:animationDuration] forKey:TF_READER_READ_SPEED];
[[NSUserDefaults standardUserDefaults] synchronize];
if (self.readerAutoReadSpeedChanged) {
self.readerAutoReadSpeedChanged(animationDuration);
}
}
// 获取阅读速度
- (NSUInteger)getReadSpeed
{
NSInteger t_readSpeed = [[[NSUserDefaults standardUserDefaults] objectForKey:TF_READER_READ_SPEED] unsignedIntegerValue];
if (t_readSpeed == 0) {
return PUB_DEFAULT_READ_SPEED;
}
if (t_readSpeed < PUB_MIN_READ_SPEED) {
return PUB_MIN_READ_SPEED;
}
if (t_readSpeed > kFontSize30) {
return PUB_MAX_READ_SPEED;
}
return t_readSpeed;
}
- (void)setAutoReaderState:(TFReaderAutoReadState)state
{
self.state = state;
if (self.readerAutoReaderStateChanged) {
self.readerAutoReaderStateChanged(state);
}
}
@end