Files
WebApp/ShenQi/WMDragView/DSWebMenuCollectionView.m
2024-12-25 09:41:16 +08:00

162 lines
6.0 KiB
Objective-C

//
// DSWebMenuCollectionView.m
// VietnamGame
//
//
#import "DSWebMenuCollectionView.h"
#import "DSAvatarCollectionViewCell.h"
static NSString *identifier = @"AvatarCollectionViewCell";
@implementation DSWebMenuCollectionView
-(void)awakeFromNib
{
[super awakeFromNib];
UICollectionViewFlowLayout *flowlayout = [[UICollectionViewFlowLayout alloc] init];
flowlayout.scrollDirection = UICollectionViewScrollDirectionVertical;
self.collectionViewLayout = flowlayout;
self.delegate = self;
self.dataSource = self;
self.showsVerticalScrollIndicator = NO;
self.showsHorizontalScrollIndicator = NO;
self.backgroundColor = [UIColor clearColor];
[self registerNib:[UINib nibWithNibName:@"DSAvatarCollectionViewCell" bundle:nil] forCellWithReuseIdentifier:identifier];
[self registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:identifier];
}
-(void)setShareArray:(NSMutableArray<NSNumber *> *)shareArray
{
_shareArray = shareArray;
[self reloadData];
}
#pragma mark - 推荐
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
{
return 1;
}
-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
return self.shareArray.count;
}
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
return CGSizeMake(collectionView.frame.size.width, ((collectionView.frame.size.height-(self.shareArray.count-1)*10))/self.shareArray.count);
}
-(UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section
{
return UIEdgeInsetsMake(0, 0, 0, 0);
}
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section
{
return 10;
}
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section
{
return 10;
}
-(UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
{
UICollectionReusableView *view = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:identifier forIndexPath:indexPath];
return view;
}
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
DSAvatarCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];
id value = self.shareArray[indexPath.row];
if ([value isKindOfClass:[LinkConfig class]]) {
LinkConfig *link = value;
if (ISNULLSTR(link.icon)) {
cell.avatarImageView.image = [self circularImageWithText:link.name];
}else{
NSURLSessionDataTask *dataTask = [[NSURLSession sharedSession] dataTaskWithURL:[NSURL URLWithString:link.icon] completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (error) {
NSLog(@"Error downloading image: %@", error);
} else {
dispatch_async(dispatch_get_main_queue(), ^{
UIImage *image = [UIImage imageWithData:data];
cell.avatarImageView.image = image;
});
}
}];
[dataTask resume];
}
}else if ([value isKindOfClass:[NSNumber class]]) {
NSNumber *number = value;
DSWebMenuType type = number.integerValue;
if (type == DSWebMenuHomeType) {
cell.avatarImageView.image = [UIImage imageNamed:@"menu"];
}else if (type == DSWebMenuRefreshType) {
cell.avatarImageView.image = [UIImage imageNamed:@"refresh"];
}else if (type == DSWebMenuTelegramType) {
cell.avatarImageView.image = [UIImage imageNamed:@"telegram"];
}else if (type == DSWebMenuWhatsAppType) {
cell.avatarImageView.image = [UIImage imageNamed:@"whatsapp"];
}else if (type == DSWebMenuFacebookType) {
cell.avatarImageView.image = [UIImage imageNamed:@"facebook"];
}
}
cell.avatarImageView.contentMode = UIViewContentModeScaleAspectFit;
return cell;
}
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
id value = self.shareArray[indexPath.row];
if (self.webMenuDelegate && [self.webMenuDelegate respondsToSelector:@selector(webMenuCollectionViewWithMenuType:)]) {
[self.webMenuDelegate webMenuCollectionViewWithMenuType:value];
}
}
- (UIImage *)circularImageWithText:(NSString *)text {
// 设置字体和大小
UIFont *font = [UIFont systemFontOfSize:16.0f];
CGSize textSize = [text sizeWithFont:font];
// 创建图形上下文
CGFloat size = 60.0f;
UIGraphicsBeginImageContextWithOptions(CGSizeMake(size, size), NO, 0.0);
CGContextRef context = UIGraphicsGetCurrentContext();
// 绘制圆形路径
CGRect rect = CGRectMake(0, 0, size, size);
CGContextAddEllipseInRect(context, rect);
CGContextClip(context);
// 设置背景颜色(可选)
CGContextSetRGBFillColor(context, 1.0, 1.0, 1.0, 1.0); // 白色背景
CGContextFillRect(context, rect);
// 设置文本颜色
[[UIColor redColor] set];
// 计算文本绘制位置,使其居中
CGFloat x = (size - textSize.width) / 2.0f;
CGFloat y = (size - textSize.height) / 2.0f;
// 绘制文本
[text drawAtPoint:CGPointMake(x, y) withFont:font];
// 获取UIImage对象
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
// 结束图形上下文
UIGraphicsEndImageContext();
return image;
}
@end