处理键盘部分
This commit is contained in:
@@ -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 回复,禁止滚动");
|
||||
|
||||
Reference in New Issue
Block a user