This commit is contained in:
2026-01-27 16:28:17 +08:00
parent ce889e1ed0
commit 2b749cd2b0
26 changed files with 1092 additions and 128 deletions

View File

@@ -14,6 +14,7 @@
@property(nonatomic, strong) UILabel *titleLabel;
@property(nonatomic, strong) KBAiWaveformView *waveformView;
@property(nonatomic, strong) UIImageView *micIconView;
@property(nonatomic, strong) UIImageView *recordingIconView;
@property(nonatomic, assign) BOOL isPressing;
@end
@@ -50,7 +51,7 @@
self.backgroundView.translatesAutoresizingMaskIntoConstraints = NO;
[self addSubview:self.backgroundView];
//
//
self.micIconView = [[UIImageView alloc] init];
self.micIconView.image = [UIImage systemImageNamed:@"mic.fill"];
self.micIconView.tintColor = self.tintColor;
@@ -58,6 +59,13 @@
self.micIconView.translatesAutoresizingMaskIntoConstraints = NO;
[self.backgroundView addSubview:self.micIconView];
//
self.recordingIconView = [[UIImageView alloc] init];
self.recordingIconView.contentMode = UIViewContentModeScaleAspectFit;
self.recordingIconView.translatesAutoresizingMaskIntoConstraints = NO;
self.recordingIconView.hidden = YES;
[self.backgroundView addSubview:self.recordingIconView];
//
self.titleLabel = [[UILabel alloc] init];
self.titleLabel.text = self.normalTitle;
@@ -104,6 +112,13 @@
constraintEqualToAnchor:self.backgroundView.centerYAnchor],
[self.waveformView.widthAnchor constraintEqualToConstant:60],
[self.waveformView.heightAnchor constraintEqualToConstant:30],
[self.recordingIconView.centerXAnchor
constraintEqualToAnchor:self.backgroundView.centerXAnchor],
[self.recordingIconView.centerYAnchor
constraintEqualToAnchor:self.backgroundView.centerYAnchor],
[self.recordingIconView.widthAnchor constraintEqualToConstant:36],
[self.recordingIconView.heightAnchor constraintEqualToConstant:36],
]];
//
@@ -131,6 +146,18 @@
self.waveformView.waveColor = tintColor;
}
- (void)setNormalIconImage:(UIImage *)normalIconImage {
_normalIconImage = normalIconImage;
if (normalIconImage) {
self.micIconView.image = normalIconImage;
}
}
- (void)setRecordingIconImage:(UIImage *)recordingIconImage {
_recordingIconImage = recordingIconImage;
self.recordingIconView.image = recordingIconImage;
}
#pragma mark - Public Methods
- (void)updateVolumeRMS:(float)rms {
@@ -144,18 +171,21 @@
case KBAiRecordButtonStateNormal:
self.titleLabel.text = self.normalTitle;
self.backgroundView.backgroundColor = [UIColor systemGray6Color];
self.micIconView.alpha = 1;
self.micIconView.hidden = NO;
self.titleLabel.hidden = NO;
self.recordingIconView.hidden = YES;
self.waveformView.alpha = 0;
[self.waveformView stopAnimation];
break;
case KBAiRecordButtonStateRecording:
self.titleLabel.text = self.recordingTitle;
self.backgroundView.backgroundColor =
[self.tintColor colorWithAlphaComponent:0.15];
self.micIconView.alpha = 1;
self.waveformView.alpha = 1;
[self.waveformView startIdleAnimation];
self.backgroundView.backgroundColor = [UIColor colorWithWhite:0 alpha:0.6];
self.micIconView.hidden = YES;
self.titleLabel.hidden = YES;
self.recordingIconView.hidden = NO;
self.waveformView.alpha = 0;
[self.waveformView stopAnimation];
break;
case KBAiRecordButtonStateDisabled: