Files
midi_ios/TUIKit/TUIChat/UI_Classic/Cell/Chat/TUIFaceMessageCell.m
2025-08-14 10:07:49 +08:00

101 lines
3.2 KiB
Objective-C

//
// FaceMessageCell.m
// UIKit
//
// Created by annidyfeng on 2019/5/30.
// Copyright © 2023 Tencent. All rights reserved.
//
#import "TUIFaceMessageCell.h"
#import <TIMCommon/TIMDefine.h>
@interface TUIFaceMessageCell ()
@end
@implementation TUIFaceMessageCell
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
_face = [[UIImageView alloc] init];
_face.contentMode = UIViewContentModeScaleAspectFit;
[self.container addSubview:_face];
_face.mm_fill();
_face.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
}
return self;
}
- (void)layoutSubviews {
[super layoutSubviews];
}
+ (BOOL)requiresConstraintBasedLayout {
return YES;
}
// this is Apple's recommended place for adding/updating constraints
- (void)updateConstraints {
[super updateConstraints];
CGFloat topMargin = 0;
CGFloat height = self.container.mm_h;
if (self.messageData.messageContainerAppendSize.height > 0) {
topMargin = 10;
CGFloat tagViewTopPadding = 6;
height = self.container.mm_h - topMargin - self.messageData.messageContainerAppendSize.height - tagViewTopPadding;
self.bubbleView.hidden = NO;
} else {
self.bubbleView.hidden = YES;
}
[self.face mas_remakeConstraints:^(MASConstraintMaker *make) {
make.height.mas_equalTo(height);
make.centerX.mas_equalTo(self.container.mas_centerX);
make.top.mas_equalTo(topMargin);
make.width.mas_equalTo(self.container);
}];
}
- (void)fillWithData:(TUIFaceMessageCellData *)data {
// set data
[super fillWithData:data];
self.faceData = data;
UIImage *image = [[TUIImageCache sharedInstance] getFaceFromCache:data.path];
if (!image) {
image = [UIImage imageWithContentsOfFile:TUIChatFaceImagePath(@"ic_unknown_image")];
}
_face.image = image;
// tell constraints they need updating
[self setNeedsUpdateConstraints];
// update constraints now so we can animate the change
[self updateConstraintsIfNeeded];
[self layoutIfNeeded];
}
#pragma mark - TUIMessageCellProtocol
+ (CGSize)getContentSize:(TUIMessageCellData *)data {
NSAssert([data isKindOfClass:TUIFaceMessageCellData.class], @"data must be kind of TUIFaceMessageCellData");
TUIFaceMessageCellData *faceCellData = (TUIFaceMessageCellData *)data;
UIImage *image = [[TUIImageCache sharedInstance] getFaceFromCache:faceCellData.path];
if (!image) {
image = [UIImage imageWithContentsOfFile:TUIChatFaceImagePath(@"ic_unknown_image")];
}
CGFloat imageHeight = image.size.height;
CGFloat imageWidth = image.size.width;
if (imageHeight > TFaceMessageCell_Image_Height_Max) {
imageHeight = TFaceMessageCell_Image_Height_Max;
imageWidth = image.size.width / image.size.height * imageHeight;
}
if (imageWidth > TFaceMessageCell_Image_Width_Max) {
imageWidth = TFaceMessageCell_Image_Width_Max;
imageHeight = image.size.height / image.size.width * imageWidth;
}
return CGSizeMake(imageWidth, imageHeight);
}
@end