// // 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 () { // 菜单按钮 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