Files
2026-07-13 12:35:01 +08:00

90 lines
3.7 KiB
Objective-C

//
// TLGroup+CreateAvatar.m
// TLChat
//
// Created by 李伯坤 on 2017/9/19.
// Copyright © 2017年 李伯坤. All rights reserved.
//
#import "TLGroup+CreateAvatar.h"
#import "NSFileManager+TLChat.h"
#import "TLMacros.h"
@implementation TLGroup (CreateAvatar)
- (void)createGroupAvatarWithCompleteAction:(void (^)(NSString *groupID))completeAction
{
dispatch_async(dispatch_get_global_queue(0, 0), ^{
NSInteger usersCount = self.users.count > 9 ? 9 : self.users.count;
CGFloat viewWidth = 200;
CGFloat width = viewWidth / 3 * 0.85;
CGFloat space3 = (viewWidth - width * 3) / 4; // 三张图时的边距(图与图之间的边距)
CGFloat space2 = (viewWidth - width * 2 + space3) / 2; // 两张图时的边距
CGFloat space1 = (viewWidth - width) / 2; // 一张图时的边距
CGFloat y = ({
int ans = space1;
if (usersCount > 6) {
ans = space3;
}
else if (usersCount >= 3) {
ans = space2 - space3;
}
ans;
});
CGFloat x = ({
CGFloat ans = space1;
if (usersCount % 3 == 0) {
ans = usersCount == 3 ? space1 :space3;
}
else if (usersCount % 2 == 0) {
ans = space2 - space3;
}
ans;
});
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, viewWidth, viewWidth)];
[view setBackgroundColor:[UIColor colorWithWhite:0.8 alpha:0.6]];
__block NSInteger count = 0; // 下载完成图片计数器
for (NSInteger i = usersCount - 1; i >= 0; i--) {
TLUser *user = [self.users objectAtIndex:i];
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(x, y, width, width)];
[view addSubview:imageView];
[imageView tt_setImageWithURL:user.avatarURL.toURL placeholderImage:[UIImage imageNamed:DEFAULT_AVATAR_PATH] completed:^(UIImage *image, NSError *error, TLImageCacheType cacheType, NSURL *imageURL) {
count ++;
if (count == usersCount) { // 图片全部下载完成
UIGraphicsBeginImageContextWithOptions(view.frame.size, NO, 2.0);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
CGImageRef imageRef = image.CGImage;
CGImageRef imageRefRect =CGImageCreateWithImageInRect(imageRef, CGRectMake(0, 0, view.width * 2, view.height * 2));
UIImage *ansImage = [[UIImage alloc] initWithCGImage:imageRefRect];
NSData *imageViewData = UIImagePNGRepresentation(ansImage);
NSString *savedImagePath = [NSFileManager pathUserAvatar:self.groupAvatarPath];
[imageViewData writeToFile:savedImagePath atomically:YES];
CGImageRelease(imageRefRect);
dispatch_async(dispatch_get_main_queue(), ^{
if (completeAction) {
completeAction(self.groupID);
}
});
}
}];
if (i % 3 == 0) { // 换行
y += (width + space3);
x = space3;
}
else if (i == 2 && usersCount == 3) { // 换行,只有三个时
y += (width + space3);
x = space2;
}
else {
x += (width + space3);
}
}
});
}
@end