| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297 |
- //
- // TUIGroupPinCell.m
- // TUIChat
- //
- // Created by Tencent on 2024/05/20.
- // Copyright © 2023 Tencent. All rights reserved.
- //
- #import "TUIMessageDataProvider.h"
- #import "TUIGroupPinCell.h"
- @implementation TUIGroupPinCellView
- - (instancetype)init {
- self = [super init];
- if (self) {
- [self setupView];
- }
- return self;
- }
- - (void)fillWithData:(TUIMessageCellData *)cellData {
- self.cellData = cellData;
- self.titleLabel.text = [TUIMessageDataProvider getShowName:cellData.innerMessage];
- self.content.text = [TUIMessageDataProvider getDisplayString:cellData.innerMessage];
-
- // tell constraints they need updating
- [self setNeedsUpdateConstraints];
- // update constraints now so we can animate the change
- [self updateConstraintsIfNeeded];
- [self layoutIfNeeded];
- }
- + (BOOL)requiresConstraintBasedLayout {
- return YES;
- }
- // this is Apple's recommended place for adding/updating constraints
- - (void)updateConstraints {
- [super updateConstraints];
- [self.leftIcon mas_remakeConstraints:^(MASConstraintMaker *make) {
- make.leading.mas_equalTo(self);
- make.centerY.mas_equalTo(self);
- make.width.mas_equalTo(6);
- make.top.bottom.mas_equalTo(self);
- }];
-
- [self.titleLabel sizeToFit];
- [self.titleLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
- make.leading.mas_equalTo(self.leftIcon.mas_trailing).mas_offset(8);
- make.trailing.mas_lessThanOrEqualTo(self.removeButton.mas_leading);
- make.width.mas_equalTo(self.titleLabel.frame.size.width);
- make.height.mas_equalTo(self.titleLabel.frame.size.height);
- make.top.mas_equalTo(self).mas_offset(9);
- }];
-
- [self.content sizeToFit];
- [self.content mas_remakeConstraints:^(MASConstraintMaker *make) {
- make.leading.mas_equalTo(self.leftIcon.mas_trailing).mas_offset(8);
- make.trailing.mas_lessThanOrEqualTo(self.removeButton.mas_leading);
- make.width.mas_equalTo(self.content.frame.size.width);
- make.height.mas_equalTo(self.content.frame.size.height);
- make.bottom.mas_equalTo(self).mas_offset(-9);
- }];
-
- [self.removeButton mas_remakeConstraints:^(MASConstraintMaker *make) {
- make.trailing.mas_equalTo(-10);
- make.centerY.mas_equalTo(self);
- make.width.mas_equalTo(30);
- make.height.mas_equalTo(30);
- }];
-
- [self.removeButton.imageView mas_remakeConstraints:^(MASConstraintMaker *make) {
- make.center.mas_equalTo(self.removeButton);
- make.width.mas_equalTo(14);
- make.height.mas_equalTo(14);
- }];
-
- [self.multiAnimationView mas_remakeConstraints:^(MASConstraintMaker *make) {
- make.leading.mas_equalTo(self.mas_leading);
- make.trailing.mas_equalTo(self.mas_trailing);
- make.width.mas_equalTo(self);
- make.height.mas_equalTo(20);
- make.top.mas_equalTo(self.mas_bottom);
- }];
-
- [self.bottomLine mas_remakeConstraints:^(MASConstraintMaker *make) {
- make.width.mas_equalTo(self);
- make.height.mas_equalTo(0.5);
- make.centerX.mas_equalTo(self);
- make.bottom.mas_equalTo(self);
- }];
- }
- - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
- CGPoint newP = [self convertPoint:point toView:self.multiAnimationView];
- if ([self.multiAnimationView pointInside:newP withEvent:event]) {
- return self.multiAnimationView;
- }
- return [super hitTest:point withEvent:event];
- }
- - (void)setupView {
- self.backgroundColor = TUIChatDynamicColor(@"chat_pop_group_pin_back_color", @"#F9F9F9");
- [self addSubview:self.leftIcon];
- [self addSubview:self.titleLabel];
- [self addSubview:self.content];
- [self addSubview:self.removeButton];
- [self addSubview:self.multiAnimationView];
- [self addSubview:self.bottomLine];
-
- UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onTap:)];
- [self addGestureRecognizer:tap];
- }
- - (void)layoutSubviews {
- [super layoutSubviews];
- }
- - (UIImageView *)leftIcon {
- if (!_leftIcon) {
- _leftIcon = [[UIImageView alloc] init];
- _leftIcon.backgroundColor = TUIChatDynamicColor(@"chat_pop_group_pin_left_color", @"#D9D9D9");
- }
- return _leftIcon;
- }
- - (UILabel *)titleLabel {
- if (!_titleLabel) {
- _titleLabel = [[UILabel alloc] init];
- _titleLabel.textColor = TUIChatDynamicColor(@"chat_pop_group_pin_title_color", @"#141516");
- _titleLabel.font = [UIFont systemFontOfSize:16.0];
- }
- return _titleLabel;
- }
- - (UILabel *)content {
- if (!_content) {
- _content = [[UILabel alloc] init];
- _content.textColor = [TUIChatDynamicColor(@"chat_pop_group_pin_subtitle_color", @"#000000")
- colorWithAlphaComponent:0.6];
- _content.font = [UIFont systemFontOfSize:14.0];
- }
- return _content;
- }
- - (UIButton *)removeButton {
- if (!_removeButton) {
- _removeButton = [UIButton buttonWithType:UIButtonTypeCustom];;
- [_removeButton setImage:[UIImage imageNamed:TUIChatImagePath(@"chat_group_del_icon")] forState:UIControlStateNormal];
- [_removeButton addTarget:self action:@selector(removeCurrentGroupPin) forControlEvents:UIControlEventTouchUpInside];
- }
- return _removeButton;
- }
-
- - (UIView *)multiAnimationView {
- if (!_multiAnimationView) {
- _multiAnimationView = [[UIView alloc] initWithFrame:CGRectZero];
- _multiAnimationView.alpha = 0;
- UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onTap:)];
- _multiAnimationView.userInteractionEnabled = YES;
- [_multiAnimationView addGestureRecognizer:tap];
- UIView *arrowBackgroundView = [[UIView alloc] initWithFrame:CGRectZero];
- arrowBackgroundView.backgroundColor = [UIColor clearColor];
- arrowBackgroundView.layer.cornerRadius = 5;
- [_multiAnimationView addSubview:arrowBackgroundView];
- _multiAnimationView.clipsToBounds = YES;
- UIImageView *arrow = [[UIImageView alloc] initWithFrame:CGRectZero];
- arrow.image = TUIChatBundleThemeImage(@"chat_pop_group_pin_down_arrow_img", @"chat_down_arrow_icon");
- [arrowBackgroundView addSubview:arrow];
-
- UIView *bottomLine = [[UIView alloc] init];
- bottomLine.backgroundColor = [UIColor grayColor];
- [arrowBackgroundView addSubview:bottomLine];
- [arrowBackgroundView mas_makeConstraints:^(MASConstraintMaker *make) {
- make.center.mas_equalTo(_multiAnimationView);
- make.size.mas_equalTo(CGSizeMake(20, 20));
- }];
-
- [arrow mas_makeConstraints:^(MASConstraintMaker *make) {
- make.center.mas_equalTo(arrowBackgroundView);
- make.size.mas_equalTo(CGSizeMake(20, 20));
- }];
-
- [bottomLine mas_makeConstraints:^(MASConstraintMaker *make) {
- make.width.mas_equalTo(_multiAnimationView);
- make.height.mas_equalTo(0.5);
- make.centerX.mas_equalTo(_multiAnimationView);
- make.bottom.mas_equalTo(_multiAnimationView);
- }];
- }
- return _multiAnimationView;
- }
- - (UIView *)bottomLine {
- if (!_bottomLine) {
- _bottomLine = [[UIView alloc] init];
- _bottomLine.backgroundColor = [UIColor grayColor];
- }
- return _bottomLine;
- }
- - (void)removeCurrentGroupPin {
- if (self.onClickRemove) {
- self.onClickRemove(self.cellData.innerMessage);
- }
- }
- - (void)onTap:(id)sender {
- if (self.onClickCellView) {
- self.onClickCellView(self.cellData.innerMessage);
- }
- }
- - (void)hiddenMultiAnimation {
- self.multiAnimationView.backgroundColor = [[UIColor whiteColor] colorWithAlphaComponent:0];
- _multiAnimationView.alpha = 0;
- _bottomLine.alpha = 1;
- }
-
- - (void)showMultiAnimation {
- self.multiAnimationView.backgroundColor = TUIChatDynamicColor(@"chat_pop_group_pin_back_color", @"#F9F9F9");
- _multiAnimationView.alpha = 1;
- _bottomLine.alpha = 0;
- }
- @end
- @interface TUIGroupPinCell ()
- @property (nonatomic, strong) UIView *separatorView;
- @end
- @implementation TUIGroupPinCell
- - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
- if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
- [self setupView];
- }
- return self;
- }
- - (void)setupView {
- [self.contentView addSubview:self.cellView];
- [self.contentView addSubview:self.separatorView];
- }
- - (TUIGroupPinCellView *)cellView {
- if (!_cellView) {
- _cellView = [[TUIGroupPinCellView alloc] init];
- _cellView.isFirstPage = NO;
- }
- return _cellView;
- }
- - (UIView *)separatorView {
- if (!_separatorView) {
- _separatorView = [[UIView alloc] init];
- _separatorView.backgroundColor = TUIChatDynamicColor(@"chat_pop_group_pin_line_color", @"#DDDDDD");
- }
- return _separatorView;
- }
- - (void)fillWithData:(TUIMessageCellData *)cellData {
- [self.cellView fillWithData:cellData];
- // tell constraints they need updating
- [self setNeedsUpdateConstraints];
- // update constraints now so we can animate the change
- [self updateConstraintsIfNeeded];
- [self layoutIfNeeded];
- }
- + (BOOL)requiresConstraintBasedLayout {
- return YES;
- }
- // this is Apple's recommended place for adding/updating constraints
- - (void)updateConstraints {
-
- [super updateConstraints];
- [self.cellView mas_remakeConstraints:^(MASConstraintMaker *make) {
- make.leading.mas_equalTo(self);
- make.trailing.mas_equalTo(self);
- make.top.mas_equalTo(self);
- make.bottom.mas_equalTo(self);
- }];
-
- [self.separatorView mas_makeConstraints:^(MASConstraintMaker *make) {
- make.leading.mas_equalTo(self.contentView).mas_offset(6);
- make.trailing.mas_equalTo(self.contentView);
- make.bottom.mas_equalTo(self.contentView);
- make.height.mas_equalTo(0.5);
- }];
-
- }
- - (void)layoutSubviews {
- [super layoutSubviews];
- }
- @end
|