处理键盘部分

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

@@ -19,6 +19,7 @@
#import "LSTPopView.h"
#import "KBAIMessageVC.h"
#import <Masonry/Masonry.h>
#import <SDWebImage/SDWebImage.h>
@interface KBAIHomeVC () <UICollectionViewDelegate, UICollectionViewDataSource, KBVoiceToTextManagerDelegate, KBVoiceRecordManagerDelegate, UIGestureRecognizerDelegate, KBChatLimitPopViewDelegate, UITextViewDelegate>
@@ -387,10 +388,96 @@
if (currentPage < self.personas.count) {
NSLog(@"当前在第 %ld 个人设:%@", (long)currentPage, self.personas[currentPage].name);
// persona AppGroup使
[self saveSelectedPersonaToAppGroup:self.personas[currentPage]];
}
[self updateChatViewBottomInset];
}
#pragma mark - AppGroup Persona
/// persona AppGroup
- (void)saveSelectedPersonaToAppGroup:(KBPersonaModel *)persona {
if (!persona) {
return;
}
NSUserDefaults *ud = [[NSUserDefaults alloc] initWithSuiteName:AppGroup];
if (!ud) {
NSLog(@"[KBAIHomeVC] 无法访问 AppGroup");
return;
}
// persona
NSDictionary *personaDict = @{
@"personaId": @(persona.personaId),
@"name": persona.name ?: @"",
@"avatarUrl": persona.avatarUrl ?: @"",
@"coverImageUrl": persona.coverImageUrl ?: @"",
@"shortDesc": persona.shortDesc ?: @""
};
[ud setObject:personaDict forKey:@"AppGroup_SelectedPersona"];
[ud synchronize];
NSLog(@"[KBAIHomeVC] 已保存选中的 persona 到 AppGroup: %@, coverImageUrl: %@", persona.name, persona.coverImageUrl);
// AppGroup
[self downloadAndSavePersonaCoverImage:persona.coverImageUrl];
}
/// persona AppGroup
- (void)downloadAndSavePersonaCoverImage:(NSString *)imageUrl {
if (imageUrl.length == 0) {
return;
}
// AppGroup
NSURL *containerURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:AppGroup];
if (!containerURL) {
NSLog(@"[KBAIHomeVC] 无法获取 AppGroup 容器目录");
return;
}
NSString *imagePath = [[containerURL path] stringByAppendingPathComponent:@"persona_cover.jpg"];
// 使 SDWebImage
[[SDWebImageManager sharedManager] loadImageWithURL:[NSURL URLWithString:imageUrl]
options:SDWebImageHighPriority
progress:nil
completed:^(UIImage *image, NSData *data, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
if (error || !image) {
NSLog(@"[KBAIHomeVC] 下载 persona 封面图失败: %@", error.localizedDescription);
return;
}
// 390
CGFloat targetWidth = 390.0;
CGFloat scale = targetWidth / image.size.width;
CGSize targetSize = CGSizeMake(targetWidth, image.size.height * scale);
UIGraphicsBeginImageContextWithOptions(targetSize, YES, 1.0);
[image drawInRect:CGRectMake(0, 0, targetSize.width, targetSize.height)];
UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
// JPEG 0.6
NSData *jpegData = UIImageJPEGRepresentation(scaledImage, 0.6);
if (!jpegData) {
NSLog(@"[KBAIHomeVC] 压缩图片失败");
return;
}
// AppGroup
BOOL success = [jpegData writeToFile:imagePath atomically:YES];
if (success) {
NSLog(@"[KBAIHomeVC] persona 封面图已保存到: %@, 大小: %lu KB", imagePath, (unsigned long)jpegData.length / 1024);
} else {
NSLog(@"[KBAIHomeVC] 保存 persona 封面图失败");
}
}];
}
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
if (self.isWaitingForAIResponse) {
NSLog(@"[KBAIHomeVC] 正在等待 AI 回复,禁止滚动");