123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250 |
- //
- // WidgetViewController.m
- // KulexiuForStudent
- //
- // Created by 王智 on 2022/9/13.
- //
- #import "WidgetViewController.h"
- #import "WidgetNavView.h"
- #import "WidgetDotView.h"
- #import "WidgetSpeedView.h"
- #import "WidgetFunctionView.h"
- #import "KSChoosePicker.h"
- #import "WidgetBottomButtonView.h"
- #import <AVFoundation/AVFoundation.h>
- #import "KSMetronomePlayer.h"
- #import "MetronomeManager.h"
- @interface WidgetViewController ()<MetronomeControlViewDelegate,MetronomeFunctionDelegate,MetronomeManagerDelegate>
- @property (nonatomic, strong) WidgetNavView *navView;
- @property (nonatomic, strong) WidgetDotView *dotView;
- @property (nonatomic, strong) WidgetSpeedView *speedView;
- @property (nonatomic, strong) WidgetFunctionView *functionView;
- @property (nonatomic, assign) int speed;
- @property (nonatomic, assign) KSWidgeMetronomeType metronomeType;
- @property (nonatomic, strong) KSChoosePicker *pickerView;
- @property (nonatomic, strong) WidgetBottomButtonView *bottomView;
- @end
- @implementation WidgetViewController
- - (void)viewDidLoad {
- [super viewDidLoad];
- // Do any additional setup after loading the view.
- self.ks_prefersNavigationBarHidden = YES;
- [self configUI];
- }
- - (void)viewDidAppear:(BOOL)animated {
- [super viewDidAppear:animated];
- [self setDefaultConfig];
- }
- - (void)backAction {
- [self.navigationController popViewControllerAnimated:YES];
- }
- - (void)setDefaultConfig {
- _speed = METRONOME_MANAGER.speed;
- self.speedView.speed = self.speed;
- self.functionView.speed = self.speed;
- self.metronomeType = METRONOME_MANAGER.metronomeType;
- [self changeBeat];
- self.functionView.volumeRate = METRONOME_MANAGER.playVolume;
- METRONOME_MANAGER.delegate = self;
- self.bottomView.isPlay = METRONOME_MANAGER.isPlaying;
- }
- - (void)configUI {
- [self.scrollView removeFromSuperview];
-
- // 背景图
- UIImage *bgImage = [UIImage imageNamed:@"gadget_bg"];
- UIImageView *imageView = [[UIImageView alloc] initWithImage:bgImage];
- imageView.contentMode = UIViewContentModeRedraw;
- [self.view addSubview:imageView];
- [imageView mas_makeConstraints:^(MASConstraintMaker *make) {
- make.left.right.top.bottom.mas_equalTo(self.view);
- }];
-
- [self.view addSubview:self.navView];
- [self.navView mas_makeConstraints:^(MASConstraintMaker *make) {
- make.left.right.top.mas_equalTo(self.view);
- make.height.mas_equalTo(kNaviBarHeight);
- }];
- CGFloat topSpace = IS_IPAD ? 100 : 10;
- [self.view addSubview:self.dotView];
- [self.dotView mas_makeConstraints:^(MASConstraintMaker *make) {
- make.left.right.mas_equalTo(self.view);
- make.top.mas_equalTo(self.navView.mas_bottom).offset(topSpace);
- make.height.mas_equalTo(44);
- }];
-
- CGFloat speedViewHeight = [WidgetSpeedView getViewHeight];
- [self.view addSubview:self.speedView];
- [self.speedView mas_makeConstraints:^(MASConstraintMaker *make) {
- make.left.right.mas_equalTo(self.view);
- make.top.mas_equalTo(self.dotView.mas_bottom);
- make.height.mas_equalTo(speedViewHeight);
- }];
-
- [self.view addSubview:self.functionView];
- [self.functionView mas_makeConstraints:^(MASConstraintMaker *make) {
- make.left.right.mas_equalTo(self.view);
- make.top.mas_equalTo(self.speedView.mas_bottom);
- make.height.mas_equalTo(115);
- }];
-
- [self.view addSubview:self.bottomView];
- [self.bottomView mas_makeConstraints:^(MASConstraintMaker *make) {
- make.left.right.mas_equalTo(self.view);
- make.top.mas_equalTo(self.functionView.mas_bottom).offset(10);
- make.height.mas_equalTo(60);
- }];
- }
- #pragma mark --- delegate
- - (void)volumeChange:(float)volume {
- METRONOME_MANAGER.playVolume = volume;
- }
- - (void)clickChangeBeat {
- [METRONOME_MANAGER beatChooseCallback:^(KSWidgeMetronomeType type) {
- [self stopBeat];
- self.metronomeType = type;
- [self changeBeat];
- }];
- }
- - (void)clickChangeSpeed:(int)speed {
- self.speed = speed;
- [self.speedView.slider resetInitially];
- // 更新UI
- [self updateSpeedUI];
- }
- - (void)modifySpeed:(int)speed {
- self.speed = speed;
- // 更新UI
- [self updateSpeedUI];
- }
- - (void)updateSpeedUI {
- self.speedView.speed = self.speed;
- self.functionView.speed = self.speed;
- METRONOME_MANAGER.speed = self.speed;
- [self stopBeat];
- }
- #pragma mark --- lazying
- - (WidgetNavView *)navView {
- if (!_navView) {
- _navView = [WidgetNavView shareInstance];
- MJWeakSelf;
- [_navView navBackAction:^{
- [weakSelf backAction];
- }];
- }
- return _navView;
- }
- - (WidgetDotView *)dotView {
- if (!_dotView) {
- _dotView = [WidgetDotView shareInstance];
- }
- return _dotView;
- }
- - (WidgetSpeedView *)speedView {
- if (!_speedView) {
- _speedView = [WidgetSpeedView shareInstance];
- _speedView.delegate = self;
- }
- return _speedView;
- }
- - (WidgetFunctionView *)functionView {
- if (!_functionView) {
- _functionView = [WidgetFunctionView shareInstance];
- _functionView.delegate = self;
- }
- return _functionView;
- }
- - (WidgetBottomButtonView *)bottomView {
- if (!_bottomView) {
- _bottomView = [WidgetBottomButtonView shareInstance];
- MJWeakSelf;
- [_bottomView metronomePlayCallback:^(BOOL isPlay) {
- if (isPlay) {
- [weakSelf playBeat];
- }
- else {
- [weakSelf stopBeat];
- }
- }];
- }
- return _bottomView;
- }
- - (void)playBeat {
- self.bottomView.isPlay = YES;
- [METRONOME_MANAGER startPlay];
-
- }
- - (void)stopBeat {
- self.bottomView.isPlay = NO;
- [METRONOME_MANAGER stopPlay];
- }
- - (void)changeBeat {
- [self.dotView updateSpotView:self.metronomeType];
- self.functionView.currentMetronomeType = self.metronomeType;
- self.speedView.currentType = self.metronomeType;
- }
- - (void)setSpeed:(int)speed {
- _speed = speed;
- [self stopBeat];
- }
- #pragma mark ---- delegate
- - (void)playInterruption {
- [self stopBeat];
- }
- - (void)updateSpotHightState:(int)currentNo {
- [self.dotView updateSpotViewHeightState:currentNo];
- }
- - (void)dealloc {
- NSLog(@"----dealloc ");
- }
- /*
- #pragma mark - Navigation
- // In a storyboard-based application, you will often want to do a little preparation before navigation
- - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
- // Get the new view controller using [segue destinationViewController].
- // Pass the selected object to the new view controller.
- }
- */
- @end
|