123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265 |
- //
- // TuningForkSettingView.m
- // KulexiuForStudent
- //
- // Created by 王智 on 2022/10/20.
- //
- #import "TuningForkSettingView.h"
- #import "UIView+Animation.h"
- @interface TuningForkSettingView ()<UIGestureRecognizerDelegate>
- @property (weak, nonatomic) IBOutlet NSLayoutConstraint *containerWidth;
- @property (weak, nonatomic) IBOutlet UIView *containerView;
- @property (nonatomic, assign) NSInteger musicalScale;
- @property (weak, nonatomic) IBOutlet UILabel *frequenceLabel;
- @property (weak, nonatomic) IBOutlet UILabel *musicalScaleLabel;
- @property (weak, nonatomic) IBOutlet UIImageView *pitchCImage;
- @property (weak, nonatomic) IBOutlet UIImageView *pitchDImage;
- @property (weak, nonatomic) IBOutlet UIImageView *pitchEImage;
- @property (weak, nonatomic) IBOutlet UIImageView *pitchFImage;
- @property (weak, nonatomic) IBOutlet UIImageView *pitchGImage;
- @property (weak, nonatomic) IBOutlet UIImageView *pitchAImage;
- @property (weak, nonatomic) IBOutlet UIImageView *pitchBImage;
- @property (weak, nonatomic) IBOutlet UIImageView *pitchDhalfImage;
- @property (weak, nonatomic) IBOutlet UILabel *pitchDhalfLabel;
- @property (weak, nonatomic) IBOutlet UILabel *pitchDhalfDesc;
- @property (weak, nonatomic) IBOutlet UIImageView *pitchEhalfImage;
- @property (weak, nonatomic) IBOutlet UILabel *pitchEhalfLabel;
- @property (weak, nonatomic) IBOutlet UILabel *pitchEhalfDesc;
- @property (weak, nonatomic) IBOutlet UIImageView *pitchGhalfImage;
- @property (weak, nonatomic) IBOutlet UILabel *pitchGhalfLabel;
- @property (weak, nonatomic) IBOutlet UILabel *pitchGhalfDesc;
- @property (weak, nonatomic) IBOutlet UIImageView *pitchAhalfImage;
- @property (weak, nonatomic) IBOutlet UILabel *pitchAhalfLabel;
- @property (weak, nonatomic) IBOutlet UILabel *pitchAhalfDesc;
- @property (weak, nonatomic) IBOutlet UIImageView *pitchBhalfImage;
- @property (weak, nonatomic) IBOutlet UILabel *pitchBhalfLabel;
- @property (weak, nonatomic) IBOutlet UILabel *pitchBhalfDesc;
- @property (nonatomic, assign) NSInteger chooseIndex;
- @property (nonatomic, strong) NSMutableArray *imageArray;
- @property (nonatomic, strong) NSMutableArray *frequenceArray;
- @property (nonatomic, copy) ForkSettingCallback callback;
- @end
- @implementation TuningForkSettingView
- - (void)awakeFromNib {
- [super awakeFromNib];
- [self configDefaultSource];
- UITapGestureRecognizer *tapGes = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGesture:)];
- [self addGestureRecognizer:tapGes];
- tapGes.delegate = self;
- if (IS_IPAD) {
- self.containerWidth.constant = 320;
- }
- }
- - (void)tapGesture: (UITapGestureRecognizer *)tapGesture {
- if (self.callback) {
- // 获取频率
- NSInteger index = self.musicalScale * 12 + self.chooseIndex;
- if (self.frequenceArray.count > index) {
- NSInteger frequence = [self.frequenceArray[index] integerValue];
- self.callback(frequence,YES);
- }
- }
- [self removeView];
- }
- -(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{
- if ([touch.view isDescendantOfView:self.containerView]) {
- return NO;
- }
- return YES;
- }
- - (void)forkSettingAction:(ForkSettingCallback)callback {
- if (callback) {
- self.callback = callback;
- }
- }
- - (void)showView {
- [[NSObject getKeyWindow] addSubview:self];
- [self setPopAnimation];
-
- // 和安卓保持一致,点开后不播放
- // if (self.callback) {
- // NSInteger index = self.musicalScale * 12 + self.chooseIndex;
- // if (self.frequenceArray.count > index) {
- // NSInteger frequence = [self.frequenceArray[index] integerValue];
- // self.callback(frequence,NO);
- // }
- // }
- }
- - (void)removeView {
- [self removeFromSuperview];
- }
- - (void)configDefaultSource {
- self.A4Frequence = DEFALUT_A4FREQUENCE;
- self.musicalScale = 4;
- self.isFallingTone = YES;
- self.imageArray = [NSMutableArray arrayWithArray:@[self.pitchCImage,self.pitchDhalfImage,self.pitchDImage,self.pitchEhalfImage,self.pitchEImage,self.pitchFImage,self.pitchGhalfImage,self.pitchGImage,self.pitchAhalfImage,self.pitchAImage,self.pitchBhalfImage,self.pitchBImage]];
- self.chooseIndex = 9;
- self.frequenceArray = [NSMutableArray arrayWithArray:@[
- @16.35, @17.32, @18.35, @19.45, @20.60, @21.83, @23.12, @24.50, @25.96, @27.50, @29.14, @30.87, // 0
- @32.70, @34.65, @36.71, @38.89, @41.20, @43.65, @46.25, @49.00, @51.91, @55.00, @58.27, @61.74, // 1
- @65.41, @69.30, @73.42, @77.78, @82.41, @87.31, @92.50, @98.00, @103.8, @110.0, @116.5, @123.5, // 2
- @130.8, @138.6, @146.8, @155.6, @164.8, @174.6, @185.0, @196.0, @207.7, @220.0, @233.1, @246.9, // 3
- @261.6, @277.2, @293.7, @311.1, @329.6, @349.2, @370.0, @392.0, @415.3, @440.0, @466.2, @493.9, // 4
- @523.3, @554.4, @587.3, @622.3, @659.3, @698.5, @740.0, @784.0, @830.6, @880.0, @932.3, @987.8, // 5
- @1047, @1109, @1175, @1245, @1319, @1397, @1480, @1568, @1661, @1760, @1865, @1976, // 6
- @2093, @2217, @2349, @2489, @2637, @2794, @2960, @3136, @3322, @3520, @3729, @3951, // 7
- @4186, @4435, @4699, @4978, @5274, @5588, @5920, @6272, @6645, @7040, @7459, @7902 // 8
- ]];
- }
- + (instancetype)shareInstance {
- TuningForkSettingView *view = [[[NSBundle mainBundle] loadNibNamed:@"TuningForkSettingView" owner:nil options:nil] firstObject];
- return view;
- }
- - (void)setIsFallingTone:(BOOL)isFallingTone {
- _isFallingTone = isFallingTone;
- if (isFallingTone) {
- self.pitchDhalfLabel.text = @"D";
- self.pitchEhalfLabel.text = @"E";
- self.pitchGhalfLabel.text = @"G";
- self.pitchAhalfLabel.text = @"A";
- self.pitchBhalfLabel.text = @"B";
-
- self.pitchDhalfDesc.text = @"♭";
- self.pitchEhalfDesc.text = @"♭";
- self.pitchGhalfDesc.text = @"♭";
- self.pitchAhalfDesc.text = @"♭";
- self.pitchBhalfDesc.text = @"♭";
- }
- else {
-
- self.pitchDhalfLabel.text = @"C";
- self.pitchEhalfLabel.text = @"D";
- self.pitchGhalfLabel.text = @"F";
- self.pitchAhalfLabel.text = @"G";
- self.pitchBhalfLabel.text = @"A";
-
- self.pitchDhalfDesc.text = @"#";
- self.pitchEhalfDesc.text = @"#";
- self.pitchGhalfDesc.text = @"#";
- self.pitchAhalfDesc.text = @"#";
- self.pitchBhalfDesc.text = @"#";
-
- }
- }
- - (void)setA4Frequence:(NSInteger)A4Frequence {
- _A4Frequence = A4Frequence;
- self.frequenceLabel.text = [NSString stringWithFormat:@"A4=%zdHz",A4Frequence];
- }
- - (IBAction)pitchChooseAction:(UIButton *)sender {
- NSInteger index = sender.tag - 1000;
- if (self.chooseIndex == index) {
- return;
- }
- // 修改
- UIImageView *preChooseImage = self.imageArray[self.chooseIndex];
- [preChooseImage setImage:[UIImage imageNamed:@"fork_pitchUnChoosed"]];
-
- UIImageView *chooseImageView = self.imageArray[index];
- [chooseImageView setImage:[UIImage imageNamed:@"fork_pitchChoosed"]];
- self.chooseIndex = index;
- if (self.callback) {
- NSInteger index = self.musicalScale * 12 + self.chooseIndex;
- if (self.frequenceArray.count > index) {
- CGFloat frequence = [self.frequenceArray[index] doubleValue];
- self.callback(frequence,NO);
- }
- }
- }
- - (void)setChooseIndex:(NSInteger)chooseIndex {
- _chooseIndex = chooseIndex;
- UIImageView *chooseImageView = self.imageArray[chooseIndex];
- [chooseImageView setImage:[UIImage imageNamed:@"fork_pitchChoosed"]];
- }
- // 音阶+
- - (IBAction)musicalScaleAdd:(id)sender {
- if (self.musicalScale >= 6) {
- return;
- }
- self.musicalScale++;
- if (self.callback) {
- // 获取频率
- NSInteger index = self.musicalScale * 12 + self.chooseIndex;
- if (self.frequenceArray.count > index) {
- NSInteger frequence = [self.frequenceArray[index] integerValue];
- self.callback(frequence,NO);
- }
- }
- }
- // 音阶-
- - (IBAction)musicalScaleMinus:(id)sender {
- if (self.musicalScale <= 4) {
- return;
- }
- self.musicalScale--;
- if (self.callback) {
- // 获取频率
- NSInteger index = self.musicalScale * 12 + self.chooseIndex;
- if (self.frequenceArray.count > index) {
- NSInteger frequence = [self.frequenceArray[index] integerValue];
- self.callback(frequence,NO);
- }
- }
- }
- // 设置保存
- - (IBAction)forkSettingSureAction:(id)sender {
- if (self.callback) {
- // 获取频率
- NSInteger index = self.musicalScale * 12 + self.chooseIndex;
- if (self.frequenceArray.count > index) {
- NSInteger frequence = [self.frequenceArray[index] integerValue];
- self.callback(frequence,YES);
- }
- }
- [self removeView];
- }
- // 设置音阶
- - (void)setMusicalScale:(NSInteger)musicalScale {
- _musicalScale = musicalScale;
- self.musicalScaleLabel.text = [NSString stringWithFormat:@"%zd",musicalScale];
- }
- /*
- // Only override drawRect: if you perform custom drawing.
- // An empty implementation adversely affects performance during animation.
- - (void)drawRect:(CGRect)rect {
- // Drawing code
- }
- */
- @end
|