cdts/xdts-ios 3/TreeHole/Code/Features/Chat/UIPatch/TUIConversationCell+TUIPatch.m
2023-07-27 09:20:00 +08:00

234 lines
8.8 KiB
Objective-C

//
// TUIConversationCell+TUIPatch.m
// TreeHole
//
// Created by mambaxie on 2022/4/25.
//
#import "TUIConversationCell+TUIPatch.h"
#import <JRSwizzle.h>
static const NSInteger ReloadtionLabelTag = 2205051056;
static const NSInteger GenderIconImageViewTag = 2206031119;
static const NSInteger VIPTageImageVieTag = 2205051130;
static const NSInteger NianVipTageImageVieTag = 2205051137;
static const NSInteger ManagerTageImageVieTag = 2205051138;
@implementation TUIConversationCell (TUIPatch)
+ (void)load {
NSError *error;
[self jr_swizzleMethod:@selector(patch_layoutSubviews) withMethod:@selector(layoutSubviews) error:&error];
[self jr_swizzleMethod:@selector(patch_setHighlighted:animated:) withMethod:@selector(setHighlighted:animated:) error:&error];
[self jr_swizzleMethod:@selector(patch_setBackgroundColor:) withMethod:@selector(setBackgroundColor:) error:&error];
if (error) {
NSLog(@"patch TUI error: %@", error);
}
}
- (void)patch_layoutSubviews {
[self patch_layoutSubviews];
for (UIView *subview in self.subviews) {
if ([NSStringFromClass([subview class]) isEqualToString:@"_UITableViewCellSeparatorView"]) {
subview.backgroundColor = [UIColor colorWithWhite:1.0 alpha:0.1];
subview.height = 0.5;
subview.x = self.titleLabel.x;
} else {
subview.backgroundColor = [UIColor clearColor];
}
}
self.subTitleLabel.textColor = COLOR_WITH_RGB(0xB3B3B3);
UserOtherInfo *info = [UserService userOtherInfoForUserID:self.convData.userID];
UILabel *relationLabel = [self patch_relationLabel];
if (info.relation_str.length > 0) {
relationLabel.hidden = NO;
relationLabel.text = info.relation_str;
[relationLabel sizeToFit];
relationLabel.width += FIX_SIZE(6);
relationLabel.height += FIX_SIZE(2);
}else{
relationLabel.hidden = YES;
}
UIImageView *genderIcon = [self patch_genderIcon];
// info.gender_str = [NSString stringWithFormat:@"TH_%@",info.gender_str];
// genderIcon.image = ImageNamed([[info.gender_str lowercaseString] stringByAppendingString:@"_tag"]);
#warning 1
if([info.gender_str isEqualToString:@"CD"]){
genderIcon.image = [UIImage imageNamed:@"TH_cd_tag"];
}else if([info.gender_str isEqualToString:@"TS"]){
genderIcon.image = [UIImage imageNamed:@"TH_ts_tag"];
}else{
genderIcon.image = [UIImage imageNamed:@"TH_zn_tag"];
}
CGFloat maxTitleWidth = (self.timeLabel.x - FIX_SIZE(8) - self.titleLabel.x - (relationLabel.hidden ? 0 : relationLabel.width)) - (genderIcon.width + FIX_SIZE(10));
genderIcon.backgroundColor = [UIColor clearColor];
[self.titleLabel sizeToFit];
self.titleLabel.width = MIN(maxTitleWidth, self.titleLabel.width);
genderIcon.x = self.titleLabel.right + FIX_SIZE(2);
relationLabel.x = genderIcon.right + FIX_SIZE(8);
genderIcon.centerY = relationLabel.centerY = self.titleLabel.centerY;
relationLabel.backgroundColor = COLOR_WITH_RGB_A(0xFFBE00, 0.3);
self.titleLabel.textColor = info.isVIP ? COLOR_WITH_RGB(0xFDCF7F) : [UIColor whiteColor];
self.backgroundColor = [UIColor clearColor];
PYImageView *vipTagImageView = [self patch_vipTagImageView];
vipTagImageView.hidden = !info.isVIP;
vipTagImageView.right = self.headImageView.width;
vipTagImageView.bottom = self.headImageView.height;
self.headImageView.contentMode = UIViewContentModeScaleAspectFill;
UIView *VipView = [self patch_nianVipView];
UIView* managerView = [self patch_managerView];
managerView.centerY = self.titleLabel.centerY;
managerView.hidden = !info.is_manager;
if (info.is_manager) {
if(info.relation_str.length > 0){
managerView.left = relationLabel.right + 2;
}else{
managerView.left = genderIcon.right + 2;
}
}else{
VipView.hidden = YES;
}
VipView.centerY = self.titleLabel.centerY;
VipView.hidden = info.vip_kind!=10;
if (info.vip_kind==10) {
if(info.relation_str.length > 0){
VipView.left = relationLabel.right + 2;
}else{
VipView.left = genderIcon.right + 2;
}
}else{
managerView.hidden = YES;
}
}
- (void)patch_setBackgroundColor:(UIColor *)backgroundColor {
[self patch_setBackgroundColor:[UIColor clearColor]];
}
- (void)patch_setHighlighted:(BOOL)highlighted animated:(BOOL)animated {
}
- (UILabel *)patch_relationLabel {
UILabel *relationLabel = [self viewWithTag:ReloadtionLabelTag];
if (relationLabel) {
return relationLabel;
}
UILabel *label = [[UILabel alloc] init];
label.text = @"互关";
label.font = MT_FONT_REGULAR_SIZE(11);
label.textColor = THEME_COLOR;
[label sizeToFit];
label.textAlignment = NSTextAlignmentCenter;
label.width += FIX_SIZE(8);
label.height = FIX_SIZE(16);
label.layer.cornerRadius = FIX_SIZE(5);
label.clipsToBounds = YES;
label.tag = ReloadtionLabelTag;
[self addSubview:label];
return label;
}
- (UIImageView *)patch_genderIcon {
UIImageView *genderIcon = [self viewWithTag:GenderIconImageViewTag];
if (genderIcon) {
return genderIcon;
}
genderIcon = [[UIImageView alloc] init];
genderIcon.size = [User genderSize];
genderIcon.backgroundColor = [UIColor clearColor];
genderIcon.tag = GenderIconImageViewTag;
[self addSubview:genderIcon];
return genderIcon;
}
- (PYImageView *)patch_vipTagImageView {
PYImageView *vipTageImageView = [self.headImageView viewWithTag:VIPTageImageVieTag];
if (!vipTageImageView) {
vipTageImageView = [[PYImageView alloc] init];
vipTageImageView.contentMode = UIViewContentModeScaleAspectFit;
vipTageImageView.size = CGSizeMake(FIX_SIZE(12), FIX_SIZE(12));
vipTageImageView.tag = VIPTageImageVieTag;
vipTageImageView.image = ImageNamed(@"vip_tag");
[self.headImageView addSubview:vipTageImageView];
vipTageImageView.hidden = YES;
WeakSelf(self);
[self.headImageView addTapWithAction:^{
[PYAppService showUserCardVCWithUserID:[UserService userIDFromIMUserID:weakself.convData.userID].intValue];
}];
}
return vipTageImageView;
}
- (UIView *)patch_nianVipView{
UIView *managerView = [self viewWithTag:NianVipTageImageVieTag];
if (!managerView) {
managerView = [[UIView alloc] init];
managerView.tag = NianVipTageImageVieTag;
managerView.size = CGSizeMake(FIX_SIZE(34), FIX_SIZE(16));
managerView.layer.cornerRadius = managerView.height/2.0;
managerView.layer.masksToBounds = YES;
// gradient
CAGradientLayer *gl = [CAGradientLayer layer];
gl.frame = CGRectMake(0,0,managerView.width,managerView.height);
gl.startPoint = CGPointMake(0, 0.5);
gl.endPoint = CGPointMake(1, 0.5);
gl.colors = @[(__bridge id)HEX_COLOR(0xE4B18B).CGColor, (__bridge id)HEX_COLOR(0xFFF4EC).CGColor, (__bridge id)HEX_COLOR(0xE4B18B).CGColor];
gl.locations = @[@(0), @(0.5f), @(1.0f)];
[managerView.layer addSublayer:gl];
UILabel* managerLab = [[UILabel alloc]initWithFrame:managerView.bounds];
managerLab.text = @"年VIP";
managerLab.textColor = HEX_COLOR(0x000000);
managerLab.textAlignment = NSTextAlignmentCenter;
managerLab.font = MT_FONT_MEDIUM_SIZE(10);
[managerView addSubview:managerLab];
[self addSubview:managerView];
return managerView;
}
return managerView;
}
- (UIView *)patch_managerView{
UIView *managerView = [self viewWithTag:ManagerTageImageVieTag];
if (!managerView) {
managerView = [[UIView alloc] init];
managerView.tag = ManagerTageImageVieTag;
managerView.size = CGSizeMake(FIX_SIZE(34), FIX_SIZE(16));
managerView.layer.cornerRadius = managerView.height/2.0;
managerView.layer.masksToBounds = YES;
// gradient
CAGradientLayer *gl = [CAGradientLayer layer];
gl.frame = CGRectMake(0,0,managerView.width,managerView.height);
gl.startPoint = CGPointMake(0, 0.5);
gl.endPoint = CGPointMake(1, 0.5);
gl.colors = @[(__bridge id)HEX_COLOR(0xE4B18B).CGColor, (__bridge id)HEX_COLOR(0xFFF4EC).CGColor, (__bridge id)HEX_COLOR(0xE4B18B).CGColor];
gl.locations = @[@(0), @(0.5f), @(1.0f)];
[managerView.layer addSublayer:gl];
UILabel* managerLab = [[UILabel alloc]initWithFrame:managerView.bounds];
managerLab.text = @"官方";
managerLab.textColor = HEX_COLOR(0x000000);
managerLab.textAlignment = NSTextAlignmentCenter;
managerLab.font = MT_FONT_MEDIUM_SIZE(10);
[managerView addSubview:managerLab];
[self addSubview:managerView];
return managerView;
}
return managerView;
}
@end