Files
midi_ios/TUIKit/TUIEmojiPlugin/UI/UI/PopUI/TUIReactPopEmojiView.m
2025-08-14 10:07:49 +08:00

128 lines
5.5 KiB
Objective-C

//
// TUIReactPopEmojiView.m
// TUIChat
//
// Created by wyl on 2022/4/20.
// Copyright © 2023 Tencent. All rights reserved.
//
#import "TUIReactPopEmojiView.h"
#import <TIMCommon/NSString+TUIEmoji.h>
#import <TIMCommon/TIMCommonModel.h>
#import <TIMCommon/TIMDefine.h>
#import <TUIChat/TUIChatPopMenu.h>
#import <TIMCommon/TIMCommonMediator.h>
#import <TIMCommon/TUIEmojiMeditorProtocol.h>
#import "TUIMessageCellData+Reaction.h"
@interface TUIReactPopEmojiView ()
@end
@implementation TUIReactPopEmojiView
- (CGSize)collectionView:(UICollectionView *)collectionView
layout:(UICollectionViewLayout *)collectionViewLayout
sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
int groupIndex = [self.groupIndexInSection[indexPath.section] intValue];
TUIFaceGroup *group = self.faceGroups[groupIndex];
CGFloat width = (self.frame.size.width - TChatEmojiView_Padding * 2 - TChatEmojiView_Margin * (group.itemCountPerRow - 1)) / group.itemCountPerRow;
CGFloat height = (collectionView.frame.size.height - TChatEmojiView_MarginTopBottom * (group.rowCount - 1)) / group.rowCount;
return CGSizeMake(width, height);
}
- (void)layoutSubviews {
[super layoutSubviews];
[self defaultLayout];
[self updateFrame];
[self updateCorner];
}
- (void)defaultLayout {
self.faceFlowLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
self.faceFlowLayout.minimumLineSpacing = TChatEmojiView_Margin;
self.faceFlowLayout.minimumInteritemSpacing = TChatEmojiView_MarginTopBottom;
self.faceFlowLayout.sectionInset = UIEdgeInsetsMake(0, TChatEmojiView_Padding, 0, TChatEmojiView_Padding);
self.faceCollectionView.collectionViewLayout = self.faceFlowLayout;
}
- (void)updateFrame {
self.faceCollectionView.frame = CGRectMake(0, TChatEmojiView_CollectionOffsetY, self.frame.size.width, TChatEmojiView_CollectionHeight);
self.pageControl.frame =
CGRectMake(0, TChatEmojiView_CollectionOffsetY + self.faceCollectionView.frame.size.height, self.frame.size.width, TChatEmojiView_Page_Height);
}
- (void)updateCorner {
UIRectCorner corner = UIRectCornerBottomLeft | UIRectCornerBottomRight;
CGRect bounds = CGRectMake(self.bounds.origin.x, self.bounds.origin.y - 1, self.bounds.size.width, self.bounds.size.height);
UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:bounds byRoundingCorners:corner cornerRadii:CGSizeMake(5, 5)];
CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
maskLayer.frame = self.bounds;
maskLayer.path = maskPath.CGPath;
self.layer.mask = maskLayer;
}
- (void)setData:(NSMutableArray *)data {
[super setData:data];
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
TUIFaceCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:TFaceCell_ReuseId forIndexPath:indexPath];
cell.face.contentMode = UIViewContentModeScaleAspectFill;
int groupIndex = [self.groupIndexInSection[indexPath.section] intValue];
TUIFaceGroup *group = self.faceGroups[groupIndex];
int itemCount = group.rowCount * group.itemCountPerRow;
if (indexPath.row == itemCount - 1 && group.needBackDelete) {
TUIFaceCellData *data = [[TUIFaceCellData alloc] init];
data.path = TUIChatFaceImagePath(@"del_normal");
[cell setData:data];
cell.face.image = [cell.face.image rtl_imageFlippedForRightToLeftLayoutDirection];
} else {
NSNumber *index = [self.itemIndexs objectForKey:indexPath];
if (index.integerValue < group.faces.count) {
TUIFaceCellData *data = group.faces[index.integerValue];
[cell setData:data];
} else {
[cell setData:nil];
}
}
cell.frame = CGRectMake(cell.frame.origin.x, cell.frame.origin.y, kTIMDefaultEmojiSize.width, kTIMDefaultEmojiSize.height);
cell.face.frame = CGRectMake(cell.face.frame.origin.x, cell.face.frame.origin.y, kTIMDefaultEmojiSize.width, kTIMDefaultEmojiSize.height);;
return cell;
}
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
int groupIndex = [self.groupIndexInSection[indexPath.section] intValue];
TUIFaceGroup *faces = self.faceGroups[groupIndex];
int itemCount = faces.rowCount * faces.itemCountPerRow;
NSNumber *index = [self.itemIndexs objectForKey:indexPath];
if (index.integerValue < faces.faces.count) {
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:index.integerValue inSection:groupIndex];
[self faceView:self didSelectItemAtIndexPath:indexPath];
}
}
- (void)faceView:(TUIFaceView *)faceView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
TUIFaceGroup *group = faceView.faceGroups[indexPath.section];
TUIFaceCellData *face = group.faces[indexPath.row];
if (indexPath.section == 0) {
NSString *faceName = face.name;
NSLog(@"FaceName:%@", faceName);
[self updateRecentMenuQueue:faceName];
[self updateReactClick:faceName];
if (self.delegateView) {
[self.delegateView hideWithAnimation];
}
}
}
- (void)updateRecentMenuQueue:(NSString *)faceName {
id<TUIEmojiMeditorProtocol> service = [[TIMCommonMediator share] getObject:@protocol(TUIEmojiMeditorProtocol)];
return [service updateRecentMenuQueue:faceName];
}
- (void)updateReactClick:(NSString *)faceName {
if (self.delegateView.targetCellData) {
[self.delegateView.targetCellData updateReactClick:faceName];
}
}
@end