chore: import upstream snapshot with attribution

This commit is contained in:
wehub-resource-sync
2026-07-13 12:35:01 +08:00
commit a2e318a963
2974 changed files with 158180 additions and 0 deletions
@@ -0,0 +1,118 @@
//
// TLImageMessageCell.m
// TLChat
//
// Created by 李伯坤 on 16/3/14.
// Copyright © 2016年 李伯坤. All rights reserved.
//
#import "TLImageMessageCell.h"
#import "TLMessageImageView.h"
#import "NSFileManager+TLChat.h"
#define MSG_SPACE_TOP 2
@interface TLImageMessageCell ()
@property (nonatomic, strong) TLMessageImageView *msgImageView;
@end
@implementation TLImageMessageCell
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
[self.contentView addSubview:self.msgImageView];
}
return self;
}
- (void)setMessage:(TLImageMessage *)message
{
[self.msgImageView setAlpha:1.0]; // 取消长按效果
if (self.message && [self.message.messageID isEqualToString:message.messageID]) {
return;
}
TLMessageOwnerType lastOwnType = self.message ? self.message.ownerTyper : -1;
[super setMessage:message];
if ([message imagePath]) {
NSString *imagePath = [NSFileManager pathUserChatImage:[message imagePath]];
[self.msgImageView setThumbnailPath:imagePath highDefinitionImageURL:[message imagePath]];
}
else {
[self.msgImageView setThumbnailPath:nil highDefinitionImageURL:[message imagePath]];
[self.msgImageView tt_setImageWithURL:[NSURL URLWithString:[message imageURL]]];
}
if (lastOwnType != message.ownerTyper) {
if (message.ownerTyper == TLMessageOwnerTypeSelf) {
[self.msgImageView setBackgroundImage:[UIImage imageNamed:@"message_sender_bg"]];
[self.msgImageView mas_remakeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.messageBackgroundView);
make.right.mas_equalTo(self.messageBackgroundView);
}];
}
else if (message.ownerTyper == TLMessageOwnerTypeFriend){
[self.msgImageView setBackgroundImage:[UIImage imageNamed:@"message_receiver_bg"]];
[self.msgImageView mas_remakeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.messageBackgroundView);
make.left.mas_equalTo(self.messageBackgroundView);
}];
}
}
[self.msgImageView mas_updateConstraints:^(MASConstraintMaker *make) {
make.size.mas_equalTo(message.messageFrame.contentSize);
}];
}
#pragma mark - Event Response -
- (void)tapMessageView
{
if (self.delegate && [self.delegate respondsToSelector:@selector(messageCellTap:)]) {
[self.delegate messageCellTap:self.message];
}
}
- (void)longPressMsgBGView:(UIGestureRecognizer *)gestureRecognizer
{
if (gestureRecognizer.state != UIGestureRecognizerStateBegan) {
return;
}
[self.msgImageView setAlpha:0.7]; // 比较low的选中效果
if (self.delegate && [self.delegate respondsToSelector:@selector(messageCellLongPress:rect:)]) {
CGRect rect = self.msgImageView.frame;
rect.size.height -= 10; // 北京图片底部空白区域
[self.delegate messageCellLongPress:self.message rect:rect];
}
}
- (void)doubleTabpMsgBGView
{
if (self.delegate && [self.delegate respondsToSelector:@selector(messageCellDoubleClick:)]) {
[self.delegate messageCellDoubleClick:self.message];
}
}
#pragma mark - Getter -
- (TLMessageImageView *)msgImageView
{
if (_msgImageView == nil) {
_msgImageView = [[TLMessageImageView alloc] init];
[_msgImageView setUserInteractionEnabled:YES];
UITapGestureRecognizer *tapGR = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapMessageView)];
[_msgImageView addGestureRecognizer:tapGR];
UILongPressGestureRecognizer *longPressGR = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressMsgBGView:)];
[_msgImageView addGestureRecognizer:longPressGR];
UITapGestureRecognizer *doubleTapGR = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doubleTabpMsgBGView)];
[doubleTapGR setNumberOfTapsRequired:2];
[_msgImageView addGestureRecognizer:doubleTapGR];
}
return _msgImageView;
}
@end