处理键盘部分

This commit is contained in:
2026-01-29 19:18:38 +08:00
parent d0c5cada35
commit 23c0d14128
13 changed files with 467 additions and 213 deletions

View File

@@ -27,6 +27,7 @@
#import "Masonry.h"
#import "UIImage+KBColor.h"
#import <AVFoundation/AVFoundation.h>
#import <SDWebImage/SDWebImage.h>
// #import "KBLog.h"
@@ -74,6 +75,9 @@ static void KBSkinInstallNotificationCallback(CFNotificationCenterRef center,
KBFunctionView *functionView; // 0
@property(nonatomic, strong) KBSettingView *settingView; //
@property(nonatomic, strong) UIImageView *bgImageView; //
@property(nonatomic, strong) UIImageView *personaAvatarImageView; // persona
@property(nonatomic, strong) UIImageView *personaGrayImageView; // persona
@property(nonatomic, strong) KBChatPanelView *chatPanelView;
@property(nonatomic, strong) KBKeyboardSubscriptionView *subscriptionView;
@property(nonatomic, strong) KBSuggestionEngine *suggestionEngine;
@@ -154,6 +158,8 @@ static void KBSkinInstallNotificationCallback(CFNotificationCenterRef center,
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[[KBBackspaceUndoManager shared] registerNonClearAction];
// persona
[self kb_hidePersonaAvatar];
}
- (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection {
@@ -653,6 +659,8 @@ static void KBSkinInstallNotificationCallback(CFNotificationCenterRef center,
if (index == 1) {
[self showFunctionPanel:NO];
[self showChatPanel:YES];
// persona
[self kb_showPersonaAvatarOnBgImageView];
return;
}
[self showFunctionPanel:NO];
@@ -812,6 +820,8 @@ static void KBSkinInstallNotificationCallback(CFNotificationCenterRef center,
}
self.chatAudioPlayer = nil;
[self showChatPanel:NO];
// persona
[self kb_hidePersonaAvatar];
}
#pragma mark - Chat Helpers
@@ -1292,6 +1302,92 @@ static void KBSkinInstallNotificationCallback(CFNotificationCenterRef center,
return _subscriptionView;
}
- (UIImageView *)personaAvatarImageView {
if (!_personaAvatarImageView) {
_personaAvatarImageView = [[UIImageView alloc] init];
_personaAvatarImageView.contentMode = UIViewContentModeScaleAspectFill;
_personaAvatarImageView.clipsToBounds = YES;
_personaAvatarImageView.hidden = YES;
}
return _personaAvatarImageView;
}
- (UIImageView *)personaGrayImageView{
if (!_personaGrayImageView) {
_personaGrayImageView = [[UIImageView alloc] init];
_personaAvatarImageView.contentMode = UIViewContentModeScaleAspectFill;
}
return _personaGrayImageView;
}
#pragma mark - Persona Avatar
/// AppGroup persona
- (NSDictionary *)kb_selectedPersonaFromAppGroup {
NSUserDefaults *ud = [[NSUserDefaults alloc] initWithSuiteName:AppGroup];
NSDictionary *personaDict = [ud objectForKey:@"AppGroup_SelectedPersona"];
if ([personaDict isKindOfClass:[NSDictionary class]]) {
return personaDict;
}
return nil;
}
/// bgImageView persona
- (void)kb_showPersonaAvatarOnBgImageView {
// 访
if (![[KBFullAccessManager shared] hasFullAccess]) {
NSLog(@"[Keyboard] 未开启完全访问,无法显示 persona 头像");
return;
}
// AppGroup
NSURL *containerURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:AppGroup];
if (!containerURL) {
NSLog(@"[Keyboard] 无法获取 AppGroup 容器目录");
return;
}
NSString *imagePath = [[containerURL path] stringByAppendingPathComponent:@"persona_cover.jpg"];
if (![[NSFileManager defaultManager] fileExistsAtPath:imagePath]) {
NSLog(@"[Keyboard] persona 封面图文件不存在: %@", imagePath);
return;
}
NSLog(@"[Keyboard] 准备从本地加载 persona 封面图: %@", imagePath);
// contentView bgImageView
if (!self.personaAvatarImageView.superview) {
[self.contentView insertSubview:self.personaAvatarImageView aboveSubview:self.bgImageView];
[self.personaAvatarImageView addSubview:self.personaGrayImageView];
[self.personaAvatarImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(self.bgImageView);
}];
[self.personaGrayImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.bottom.equalTo(self.personaAvatarImageView);
make.height.mas_equalTo(self.keyBoardMainView);
}];
}
//
self.personaAvatarImageView.image = nil;
//
UIImage *image = [UIImage imageWithContentsOfFile:imagePath];
if (image) {
self.personaAvatarImageView.image = image;
self.personaAvatarImageView.hidden = NO;
NSLog(@"[Keyboard] persona 封面图加载成功");
} else {
NSLog(@"[Keyboard] persona 封面图加载失败");
}
}
/// persona
- (void)kb_hidePersonaAvatar {
self.personaAvatarImageView.hidden = YES;
self.personaAvatarImageView.image = nil;
}
#pragma mark - Actions
- (void)kb_openRechargeForProduct:(KBKeyboardSubscriptionProduct *)product {
@@ -1472,6 +1568,8 @@ static void KBSkinInstallNotificationCallback(CFNotificationCenterRef center,
NSLog(@"⌨️[Keyboard] apply theme id=%@ hasBg=%d", t.skinId, (img != nil));
[self kb_logSkinDiagnosticsWithTheme:t backgroundImage:img];
self.bgImageView.image = img;
self.personaGrayImageView.image = img;
// [self.chatPanelView kb_setBackgroundImage:img];
BOOL hasImg = (img != nil);
//