ToneTuningBodyView.m 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. //
  2. // ToneTuningBodyView.m
  3. // KulexiuForStudent
  4. //
  5. // Created by 王智 on 2022/10/14.
  6. //
  7. #import "ToneTuningBodyView.h"
  8. @interface ToneTuningBodyView ()
  9. @property (weak, nonatomic) IBOutlet NSLayoutConstraint *leadingSpace;
  10. @property (weak, nonatomic) IBOutlet NSLayoutConstraint *plateWidth;
  11. @property (weak, nonatomic) IBOutlet NSLayoutConstraint *plateMidWidth;
  12. @property (weak, nonatomic) IBOutlet UIButton *playButton;
  13. @property (weak, nonatomic) IBOutlet UILabel *distanceLabel;
  14. @property (weak, nonatomic) IBOutlet UIImageView *rightImage;
  15. @property (nonatomic, copy) TuningActionCallback callback;
  16. @property (weak, nonatomic) IBOutlet NSLayoutConstraint *lineWidth;
  17. @property (weak, nonatomic) IBOutlet UIImageView *topImage;
  18. @end
  19. @implementation ToneTuningBodyView
  20. - (void)awakeFromNib {
  21. [super awakeFromNib];
  22. if (IS_IPAD) {
  23. CGFloat leftSpace = KPortraitWidth / 8.0f;
  24. self.leadingSpace.constant = leftSpace;
  25. CGFloat width = (KPortraitWidth - leftSpace * 2);
  26. self.plateWidth.constant = width / 4;
  27. self.plateMidWidth.constant = self.plateWidth.constant + 50;
  28. }
  29. }
  30. + (instancetype)shareInstance {
  31. ToneTuningBodyView *view = [[[NSBundle mainBundle] loadNibNamed:@"ToneTuningBodyView" owner:nil options:nil] firstObject];
  32. return view;
  33. }
  34. - (void)tuningViewAction:(TuningActionCallback)callback {
  35. if (callback) {
  36. self.callback = callback;
  37. }
  38. }
  39. - (IBAction)chooseMetronomeSpeed:(id)sender {
  40. if (self.callback) {
  41. self.callback(TUNINGACTION_METRONOME, self.A4Frequence);
  42. }
  43. }
  44. - (IBAction)chooseBeat:(id)sender {
  45. if (self.callback) {
  46. self.callback(TUNINGACTION_BEATCHOOSE, self.A4Frequence);
  47. }
  48. }
  49. - (IBAction)metroPlayAction:(id)sender {
  50. self.metronomePlayStatus = !self.metronomePlayStatus;
  51. TUNINGACTION action = self.metronomePlayStatus ? TUNINGACTION_BEATPLAY : TUNINGACTION_BEATSTOP;
  52. if (self.callback) {
  53. self.callback(action, self.A4Frequence);
  54. }
  55. }
  56. - (void)setA4Frequence:(NSInteger)A4Frequence {
  57. _A4Frequence = A4Frequence;
  58. self.A4FrequenceLabel.text = [NSString stringWithFormat:@"A4=%zdHz",A4Frequence];
  59. if (A4Frequence > 440) {
  60. self.warningImage.hidden = NO;
  61. }
  62. else {
  63. self.warningImage.hidden = YES;
  64. }
  65. }
  66. - (IBAction)forkSetting:(id)sender {
  67. if (self.callback) {
  68. self.callback(TUNINGACTION_FORKSETTING, self.A4Frequence);
  69. }
  70. }
  71. - (IBAction)playButtonAction:(id)sender {
  72. self.isPlaying = !self.isPlaying;
  73. TUNINGACTION action = self.isPlaying ? TUNINGACTION_PLAY : TUNINGACTION_STOP;
  74. if (self.callback) {
  75. self.callback(action, self.A4Frequence);
  76. }
  77. }
  78. - (void)setIsPlaying:(BOOL)isPlaying {
  79. _isPlaying = isPlaying;
  80. NSString *playImage = isPlaying ? @"fork_play" : @"fork_unPlay";
  81. [self.playButton setImage:[UIImage imageNamed:playImage] forState:UIControlStateNormal];
  82. }
  83. - (void)setIsTransfer:(BOOL)isTransfer {
  84. _isTransfer = isTransfer;
  85. if (isTransfer) {
  86. self.nomalPitch.hidden = YES;
  87. self.transferView.hidden = NO;
  88. }
  89. else {
  90. self.nomalPitch.hidden = NO;
  91. self.transferView.hidden = YES;
  92. }
  93. }
  94. - (void)setDistance:(NSInteger)distance {
  95. _distance = distance;
  96. self.distanceLabel.text = [NSString stringWithFormat:@"%zd¢", distance];
  97. }
  98. - (void)setFrequenceCorrect:(BOOL)frequenceCorrect {
  99. _frequenceCorrect = frequenceCorrect;
  100. if (frequenceCorrect) {
  101. self.rightImage.hidden = NO;
  102. self.distanceLabel.textColor = HexRGB(0xffffff);
  103. [self.topImage setImage:[UIImage imageNamed:@"plate_top_blue"]];
  104. }
  105. else {
  106. self.rightImage.hidden = YES;
  107. self.distanceLabel.textColor = HexRGB(0x333333);
  108. [self.topImage setImage:[UIImage imageNamed:@"plate_top"]];
  109. }
  110. }
  111. - (void)setRateFrequence:(CGFloat)rateFrequence {
  112. _rateFrequence = rateFrequence;
  113. [UIView animateWithDuration:0.8 animations:^{
  114. self.lineWidth.constant = (kScreenWidth - 50) * rateFrequence;
  115. } completion:^(BOOL finished) {
  116. }];
  117. }
  118. + (CGFloat)getViewHeight {
  119. CGFloat leftSpace = KPortraitWidth / 8.0f;
  120. CGFloat plateHeight = IS_IPAD ? (KPortraitWidth - leftSpace * 2) / 2 : KPortraitWidth / 2;
  121. return plateHeight + 64 + 36 + 32 + 6 + 145 + 3 + 2 + 84 + 3 + 11 + 72 + 29+ 20;
  122. }
  123. - (void)setMetronomePlayStatus:(BOOL)metronomePlayStatus {
  124. _metronomePlayStatus = metronomePlayStatus;
  125. if (metronomePlayStatus) {
  126. [self.metronomeStatus setImage:[UIImage imageNamed:@"tuning_metronome_stop"]];
  127. }
  128. else {
  129. [self.metronomeStatus setImage:[UIImage imageNamed:@"tuning_metronome_play"]];
  130. }
  131. }
  132. /*
  133. // Only override drawRect: if you perform custom drawing.
  134. // An empty implementation adversely affects performance during animation.
  135. - (void)drawRect:(CGRect)rect {
  136. // Drawing code
  137. }
  138. */
  139. @end