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.
426 lines
15 KiB
426 lines
15 KiB
// |
|
// WXYZ_BookReaderBottomBar.m |
|
// TFReader |
|
// |
|
// Created by Andrew on 2018/6/12. |
|
// Copyright © 2018年 Andrew. All rights reserved. |
|
// |
|
|
|
#import "WXYZ_BookReaderBottomBar.h" |
|
#import "TFSliderView.h" |
|
#import "WXYZ_BookReaderMenuBar.h" |
|
#import "WXYZ_BookReaderBottomSettingBar.h" |
|
#import "TFReaderSettingHelper.h" |
|
#import "TFReaderBookManager.h" |
|
#import "AppDelegate.h" |
|
#import "TFWebViewController.h" |
|
|
|
#define ToolBar_Normal_Height (60 + PUB_TABBAR_OFFSET) |
|
|
|
#define ToolBarSettingView_Height ((50 * 4) + kHalfMargin) |
|
|
|
#define ToolBarAutoReadView_Height (ToolBar_Normal_Height + 20 + kMargin) |
|
|
|
#define ToolBar_Large_Height (ToolBar_Normal_Height + ToolBarSettingView_Height) |
|
|
|
#define animateDuration 0.2f |
|
|
|
@interface WXYZ_BookReaderBottomBar () <TFSliderViewDelegate> |
|
{ |
|
// 菜单按钮 |
|
UIView *menuView; |
|
|
|
// 菜单栏设置背景 |
|
WXYZ_BookReaderBottomSettingBar *settingBackView; |
|
|
|
// 自动阅读按钮 |
|
TFButton *autoReadButton; |
|
|
|
// 分割线 |
|
UIView *grayLine; |
|
|
|
// 亮度滑块 |
|
TFSliderView *brightnessSlider; |
|
|
|
// 阅读速度滑块 |
|
TFSliderView *autoReadSpeedSlider; |
|
|
|
// 夜间模式 |
|
UIButton *nightModeButton; |
|
|
|
TFReaderSettingHelper *functionalManager; |
|
|
|
TFButton *directoryButton; |
|
TFButton *brightnessButton; |
|
TFButton *fontSetButton; |
|
|
|
#if TF_Comments_Mode |
|
TFButton *commentButton; |
|
#endif |
|
|
|
} |
|
|
|
@end |
|
|
|
@implementation WXYZ_BookReaderBottomBar |
|
|
|
- (instancetype)initWithFrame:(CGRect)frame |
|
{ |
|
if (self = [super initWithFrame:frame]) { |
|
|
|
[self initialize]; |
|
|
|
[self createSubViews]; |
|
} |
|
return self; |
|
} |
|
|
|
- (void)initialize |
|
{ |
|
self.backgroundColor = [UIColor whiteColor]; |
|
|
|
functionalManager = [TFReaderSettingHelper sharedManager]; |
|
} |
|
|
|
- (void)createSubViews |
|
{ |
|
UIImageView *topLine = [[UIImageView alloc] initWithFrame:CGRectMake(0, - 10, self.width, 10)]; |
|
topLine.image = [UIImage imageNamed:@"tapbar_top_line"]; |
|
topLine.userInteractionEnabled = YES; |
|
[self addSubview:topLine]; |
|
|
|
menuView = [[UIView alloc] init]; |
|
menuView.backgroundColor = [UIColor whiteColor]; |
|
[self addSubview:menuView]; |
|
|
|
[menuView mas_makeConstraints:^(MASConstraintMaker *make) { |
|
make.left.mas_equalTo(0); |
|
make.bottom.mas_equalTo(self.mas_bottom).offset(- PUB_TABBAR_OFFSET); |
|
make.width.mas_equalTo(SCREEN_WIDTH); |
|
make.height.mas_equalTo(ToolBar_Normal_Height - PUB_TABBAR_OFFSET); |
|
}]; |
|
|
|
#pragma mark - 目录按钮 |
|
directoryButton = [[TFButton alloc] initWithFrame:CGRectZero buttonTitle:TFLocalizedString(@"目录") buttonImageName:@"book_menu_directory" buttonIndicator:TFButtonIndicatorTitleBottom]; |
|
directoryButton.tag = 0; |
|
directoryButton.graphicDistance = 5; |
|
directoryButton.buttonImageScale = 0.5; |
|
[directoryButton addTarget:self action:@selector(toolBarButtonClick:) forControlEvents:UIControlEventTouchUpInside]; |
|
[menuView addSubview:directoryButton]; |
|
|
|
#pragma mark - 亮度 |
|
brightnessButton = [[TFButton alloc] initWithFrame:CGRectZero buttonTitle:TFLocalizedString(@"亮度") buttonImageName:@"book_menu_brightness_higher" buttonIndicator:TFButtonIndicatorTitleBottom]; |
|
brightnessButton.tag = 1; |
|
brightnessButton.graphicDistance = 5; |
|
brightnessButton.buttonImageScale = 0.5; |
|
[brightnessButton addTarget:self action:@selector(toolBarButtonClick:) forControlEvents:UIControlEventTouchUpInside]; |
|
[menuView addSubview:brightnessButton]; |
|
|
|
#pragma mark - 字体设置 |
|
fontSetButton = [[TFButton alloc] initWithFrame:CGRectZero buttonTitle:TFLocalizedString(@"设置") buttonImageName:@"book_menu_setting" buttonIndicator:TFButtonIndicatorTitleBottom]; |
|
fontSetButton.tag = 2; |
|
fontSetButton.graphicDistance = 5.5; |
|
fontSetButton.buttonImageScale = 0.45; |
|
[fontSetButton addTarget:self action:@selector(toolBarButtonClick:) forControlEvents:UIControlEventTouchUpInside]; |
|
[menuView addSubview:fontSetButton]; |
|
|
|
#pragma mark - 评论 |
|
|
|
#if TF_Comments_Mode |
|
commentButton = [[TFButton alloc] initWithFrame:CGRectZero buttonTitle:TFLocalizedString(@"评论") buttonImageName:@"book_menu_comment_icon" buttonIndicator:TFButtonIndicatorTitleBottom]; |
|
commentButton.tag = 3; |
|
commentButton.graphicDistance = 5; |
|
commentButton.buttonImageScale = 0.45; |
|
[commentButton addTarget:self action:@selector(toolBarButtonClick:) forControlEvents:UIControlEventTouchUpInside]; |
|
[menuView addSubview:commentButton]; |
|
#endif |
|
|
|
NSArray *buttonMenuArr = [NSArray arrayWithObjects:directoryButton, brightnessButton, fontSetButton, |
|
#if TF_Comments_Mode |
|
commentButton, |
|
#endif |
|
nil]; |
|
|
|
[buttonMenuArr mas_distributeViewsAlongAxis:MASAxisTypeHorizontal withFixedItemLength:(SCREEN_WIDTH / buttonMenuArr.count) leadSpacing:0 tailSpacing:0]; |
|
[buttonMenuArr mas_makeConstraints:^(MASConstraintMaker *make) { |
|
make.top.mas_equalTo(8); |
|
make.height.mas_equalTo(menuView.mas_height).with.offset(- 16); |
|
}]; |
|
|
|
|
|
#pragma mark - 亮度调节按钮 |
|
brightnessSlider = [[TFSliderView alloc] initWithFrame:CGRectMake(kMargin, kMargin, SCREEN_WIDTH - 2 * kMargin, ToolBar_Normal_Height - 2 * kMargin - PUB_TABBAR_OFFSET) sliderCutPointCount:1]; |
|
brightnessSlider.minimumValue = 0.01; |
|
brightnessSlider.tag = 0; |
|
brightnessSlider.hidden = YES; |
|
brightnessSlider.sliderValue = [functionalManager getBrightness]; |
|
brightnessSlider.delegate = self; |
|
brightnessSlider.minimumTintColor = kMainColor; |
|
brightnessSlider.leftImageName = @"book_menu_brightness_lower"; |
|
brightnessSlider.rightImageName = @"book_menu_brightness_higher"; |
|
[self addSubview:brightnessSlider]; |
|
|
|
#pragma mark - 菜单栏设置背景 |
|
settingBackView = [[WXYZ_BookReaderBottomSettingBar alloc] initWithFrame:CGRectMake(0, 0, self.width, ToolBarSettingView_Height)]; |
|
settingBackView.hidden = YES; |
|
[self addSubview:settingBackView]; |
|
|
|
#pragma mark - 自动阅读按钮 |
|
autoReadButton = [[TFButton alloc] initWithFrame:CGRectZero buttonTitle:TFLocalizedString(@"开启自动阅读") buttonImageName:@"book_menu_auto_read_icon" buttonIndicator:TFButtonIndicatorTitleRight]; |
|
autoReadButton.graphicDistance = 0; |
|
autoReadButton.buttonImageScale = 0.4; |
|
autoReadButton.hidden = YES; |
|
autoReadButton.buttonTintColor = kBlackColor; |
|
[autoReadButton addTarget:self action:@selector(autoReadButtonClick) forControlEvents:UIControlEventTouchUpInside]; |
|
[self addSubview:autoReadButton]; |
|
|
|
[autoReadButton mas_makeConstraints:^(MASConstraintMaker *make) { |
|
make.bottom.mas_equalTo(self.mas_bottom).with.offset(- PUB_TABBAR_OFFSET); |
|
make.centerX.mas_equalTo(settingBackView.mas_centerX); |
|
make.width.mas_equalTo(SCREEN_WIDTH); |
|
make.height.mas_equalTo(45); |
|
}]; |
|
|
|
// 横线 |
|
grayLine = [[UIView alloc] init]; |
|
grayLine.hidden = YES; |
|
grayLine.backgroundColor = kColorRGBA(247, 247, 247, 1); |
|
[self addSubview:grayLine]; |
|
|
|
[grayLine mas_makeConstraints:^(MASConstraintMaker *make) { |
|
make.left.mas_equalTo(0); |
|
make.bottom.mas_equalTo(autoReadButton.mas_top); |
|
make.width.mas_equalTo(SCREEN_WIDTH); |
|
make.height.mas_equalTo(5); |
|
}]; |
|
|
|
#pragma mark - 阅读速度调节 |
|
autoReadSpeedSlider = [[TFSliderView alloc] initWithFrame:CGRectMake(kMargin, kHalfMargin, SCREEN_WIDTH - 2 * kMargin, 30) sliderCutPointCount:10]; |
|
autoReadSpeedSlider.tag = 1; |
|
autoReadSpeedSlider.hidden = YES; |
|
autoReadSpeedSlider.stepSlider = YES; |
|
autoReadSpeedSlider.delegate = self; |
|
autoReadSpeedSlider.invertedValue = YES; |
|
autoReadSpeedSlider.sliderValue = 10 - [functionalManager getReadSpeed] / 5; |
|
autoReadSpeedSlider.leftImageName = @"book_menu_auto_read_slow"; |
|
autoReadSpeedSlider.rightImageName = @"book_menu_auto_read_fast"; |
|
[self addSubview:autoReadSpeedSlider]; |
|
|
|
nightModeButton = [UIButton buttonWithType:UIButtonTypeCustom]; |
|
nightModeButton.tag = 10000; |
|
nightModeButton.adjustsImageWhenHighlighted = NO; |
|
nightModeButton.contentVerticalAlignment = UIControlContentVerticalAlignmentFill; |
|
nightModeButton.contentHorizontalAlignment = UIControlContentVerticalAlignmentFill; |
|
if ([functionalManager getNightModeState] == TFReaderPatternModeNight) { |
|
[nightModeButton setImage:[UIImage imageNamed:@"book_menu_reader_night"] forState:UIControlStateNormal]; |
|
} else { |
|
[nightModeButton setImage:[UIImage imageNamed:@"book_menu_reader_day"] forState:UIControlStateNormal]; |
|
} |
|
[nightModeButton addTarget:self action:@selector(nightModeClick:) forControlEvents:UIControlEventTouchUpInside]; |
|
[self addSubview:nightModeButton]; |
|
|
|
[nightModeButton mas_makeConstraints:^(MASConstraintMaker *make) { |
|
make.width.height.mas_equalTo(40); |
|
make.right.mas_equalTo(self.mas_right).with.offset(- kMargin); |
|
make.bottom.mas_equalTo(menuView.mas_top).with.offset(- kMargin); |
|
}]; |
|
|
|
} |
|
|
|
- (void)reloadTabbar |
|
{ |
|
[self removeAllSubviews]; |
|
|
|
[self createSubViews]; |
|
} |
|
|
|
// 菜单栏按钮点击 |
|
- (void)toolBarButtonClick:(UIButton *)sender |
|
{ |
|
switch (sender.tag) { |
|
case 0:// 目录 |
|
[[NSNotificationCenter defaultCenter] postNotificationName:NSNotification_Reader_Push object:@"WXBookDirectoryViewController"]; |
|
[self hiddenToolBar]; |
|
break; |
|
case 1:// 亮度 |
|
brightnessSlider.hidden = NO; |
|
break; |
|
case 2:// 设置 |
|
settingBackView.hidden = NO; |
|
[self showLargeToolBar]; |
|
break; |
|
case 3:// 评论 |
|
[[NSNotificationCenter defaultCenter] postNotificationName:NSNotification_Reader_Push object:@"TFCommentsViewController"]; |
|
[self hiddenToolBar]; |
|
break; |
|
default: |
|
break; |
|
} |
|
[self hiddenMenuView]; |
|
} |
|
|
|
// 显示底部菜单按钮 |
|
- (void)showMenuView |
|
{ |
|
menuView.hidden = NO; |
|
} |
|
|
|
// 隐藏底部菜单按钮 |
|
- (void)hiddenMenuView |
|
{ |
|
[self hiddenNavBar]; |
|
menuView.hidden = YES; |
|
} |
|
|
|
// 夜间模式 |
|
- (void)nightModeClick:(UIButton *)sender |
|
{ |
|
if ([functionalManager getNightModeState] == TFReaderPatternModeNight) { |
|
[functionalManager setNightModeState:TFReaderPatternModeDaytime]; |
|
[sender setImage:[UIImage imageNamed:@"book_menu_reader_day"] forState:UIControlStateNormal]; |
|
} else { |
|
[functionalManager setNightModeState:TFReaderPatternModeNight]; |
|
[sender setImage:[UIImage imageNamed:@"book_menu_reader_night"] forState:UIControlStateNormal]; |
|
} |
|
|
|
[[WXYZ_BookReaderMenuBar sharedManager] hiddend]; |
|
} |
|
|
|
// 隐藏导航栏 |
|
- (void)hiddenNavBar |
|
{ |
|
[[NSNotificationCenter defaultCenter] postNotificationName:NSNotification_Hidden_ToolNav object:nil]; |
|
} |
|
|
|
// 显示工具栏 |
|
- (void)showToolBar |
|
{ |
|
self.hidden = NO; |
|
menuView.hidden = NO; |
|
if ([functionalManager getNightModeState] == TFReaderPatternModeNight) { |
|
[nightModeButton setImage:[UIImage imageNamed:@"book_menu_reader_night"] forState:UIControlStateNormal]; |
|
} else { |
|
[nightModeButton setImage:[UIImage imageNamed:@"book_menu_reader_day"] forState:UIControlStateNormal]; |
|
} |
|
[UIView animateWithDuration:animateDuration animations:^{ |
|
self.frame = CGRectMake(0, SCREEN_HEIGHT - ToolBar_Normal_Height, SCREEN_WIDTH, ToolBar_Normal_Height); |
|
self->nightModeButton.alpha = 1; |
|
} completion:^(BOOL finished) { |
|
|
|
}]; |
|
|
|
autoReadButton.buttonTitle = TFLocalizedString(@"开启自动阅读"); |
|
[autoReadButton setNeedsLayout]; |
|
[autoReadButton layoutIfNeeded]; |
|
directoryButton.buttonTitle = TFLocalizedString(@"目录"); |
|
brightnessButton.buttonTitle = TFLocalizedString(@"亮度"); |
|
fontSetButton.buttonTitle = TFLocalizedString(@"设置"); |
|
commentButton.buttonTitle = TFLocalizedString(@"评论"); |
|
} |
|
|
|
// 显示自动阅读栏 |
|
- (void)showAutoReadToolBar |
|
{ |
|
nightModeButton.alpha = 0; |
|
self.hidden = NO; |
|
[UIView animateWithDuration:animateDuration animations:^{ |
|
self.frame = CGRectMake(0, SCREEN_HEIGHT - ToolBarAutoReadView_Height, SCREEN_WIDTH, ToolBarAutoReadView_Height); |
|
} completion:^(BOOL finished) { |
|
self->autoReadButton.hidden = NO; |
|
self->autoReadSpeedSlider.hidden = NO; |
|
self->settingBackView.hidden = YES; |
|
self->grayLine.hidden = NO; |
|
}]; |
|
} |
|
|
|
// 显示多选工具栏 |
|
- (void)showLargeToolBar |
|
{ |
|
nightModeButton.alpha = 0; |
|
[UIView animateWithDuration:animateDuration animations:^{ |
|
self.frame = CGRectMake(0, SCREEN_HEIGHT - ToolBar_Large_Height, SCREEN_WIDTH, ToolBar_Large_Height); |
|
} completion:^(BOOL finished) { |
|
self->grayLine.hidden = NO; |
|
self->autoReadButton.hidden = NO; |
|
}]; |
|
} |
|
|
|
// 隐藏工具栏 |
|
- (void)hiddenToolBar |
|
{ |
|
brightnessSlider.hidden = YES; |
|
settingBackView.hidden = YES; |
|
grayLine.hidden = YES; |
|
autoReadButton.hidden = YES; |
|
autoReadSpeedSlider.hidden = YES; |
|
|
|
if (_autoReading && functionalManager.state == TFReaderAutoReadStatePause) { |
|
[functionalManager setAutoReaderState:TFReaderAutoReadStateResume]; |
|
} |
|
|
|
[UIView animateWithDuration:animateDuration animations:^{ |
|
self.frame = CGRectMake(0, SCREEN_HEIGHT, SCREEN_WIDTH, ToolBar_Normal_Height); |
|
self->nightModeButton.alpha = 0; |
|
} completion:^(BOOL finished) { |
|
self.hidden = YES; |
|
}]; |
|
} |
|
|
|
#pragma mark - 按钮点击事件 |
|
- (void)sliderValueEndChanged:(CGFloat)endValue slider:(TFSliderView *)sender |
|
{ |
|
// 设置亮度 |
|
if (sender.tag == 0) { |
|
[functionalManager setBrightness:endValue]; |
|
|
|
} else {// 设置阅读速度 |
|
[functionalManager setReadSpeed:(NSInteger)((endValue + 1) * 5)]; |
|
} |
|
} |
|
|
|
// 关闭自动阅读 |
|
- (void)stopAutoRead |
|
{ |
|
if (_autoReading) { |
|
[TFPromptManager showPromptViewWithStatus:TFPromptStatusSuccess promptTitle:TFLocalizedString(@"自动阅读已关闭")]; |
|
} |
|
_autoReading = NO; |
|
[functionalManager setAutoReaderState:TFReaderAutoReadStateStop]; |
|
autoReadButton.buttonImageName = @"book_menu_auto_read_icon"; |
|
autoReadButton.buttonTitle = TFLocalizedString(@"开启自动阅读"); |
|
autoReadButton.buttonTintColor = kBlackColor; |
|
[self hiddenToolBar]; |
|
[self hiddenNavBar]; |
|
[[WXYZ_BookReaderMenuBar sharedManager] hiddend]; |
|
} |
|
|
|
// 自动阅读 |
|
- (void)autoReadButtonClick |
|
{ |
|
if (_autoReading) { |
|
[self stopAutoRead]; |
|
} else { |
|
_autoReading = YES; |
|
autoReadButton.buttonImageName = @"book_menu_auto_read_exit"; |
|
autoReadButton.buttonTitle = TFLocalizedString(@"关闭自动阅读"); |
|
autoReadButton.buttonTintColor = [UIColor colorWithRed: 241.0/255.0 green: 83.0/255.0 blue: 29.0/255.0 alpha: 1.0]; |
|
[functionalManager setAutoReaderState:TFReaderAutoReadStateStart]; |
|
[self hiddenToolBar]; |
|
[self hiddenNavBar]; |
|
[[WXYZ_BookReaderMenuBar sharedManager] hiddend]; |
|
} |
|
} |
|
|
|
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { |
|
UIView *view = [super hitTest:point withEvent:event]; |
|
if (view == nil) { |
|
// 超出父视图的按钮tag值为10000 |
|
CGPoint tempoint = [[self viewWithTag:10000] convertPoint:point fromView:self]; |
|
if (CGRectContainsPoint([self viewWithTag:10000].bounds, tempoint)) { |
|
view = [self viewWithTag:10000]; |
|
} |
|
} |
|
return view; |
|
} |
|
|
|
@end
|
|
|