123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367 |
- //
- // YMGroupGreetingPopupView.m
- // MSYOUPAI
- //
- // Created by YoMi on 2024/12/19.
- // Copyright © 2024 MS. All rights reserved.
- //
- #import "YMGroupGreetingPopupView.h"
- #import <SDWebImage/UIImageView+WebCache.h>
- @interface YMGroupGreetingPopupView ()
- /** 换一换按钮 */
- @property (nonatomic, strong) UIView *bgv;
- /** 换一换按钮 */
- @property (nonatomic, strong) UIButton *refreshBtn;
- /** 用户容器视图 */
- @property (nonatomic, strong) UIView *userContainerView;
- @property (nonatomic, assign) CGFloat userContainerViewHeight;
- /** 打个招呼按钮 */
- @property (nonatomic, strong) UIButton *sendGreetingBtn;
- /** 用户列表数据 */
- @property (nonatomic, strong) NSArray<YMGroupGreetingUserModel *> *userList;
- @end
- @implementation YMGroupGreetingPopupView
- /**
- * 初始化视图
- */
- - (void)ym_setupViews {
- self.backgroundColor = UIColor.clearColor;
- self.layer.cornerRadius = adapt(12);
- self.layer.masksToBounds = YES;
-
- self.userContainerViewHeight = adapt(120); // 默认
-
- [self addSubview:self.bgv];
- [self.bgv addSubview:self.refreshBtn];
- [self.bgv addSubview:self.userContainerView];
- [self.bgv addSubview:self.sendGreetingBtn];
-
- [self setNeedsUpdateConstraints];
- [self updateConstraintsIfNeeded];
-
- [self addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithActionBlock:^(id _Nonnull sender) {
- if (self.clickBlankAreaBlock) {
- self.clickBlankAreaBlock();
- }
- }]];
- }
- /**
- * 更新约束
- */
- - (void)updateConstraints {
- [self.bgv mas_remakeConstraints:^(MASConstraintMaker *make) {
- make.center.equalTo(self);
- make.width.mas_equalTo(kScreenWidth - adapt(40));
- }];
-
- [self.refreshBtn mas_remakeConstraints:^(MASConstraintMaker *make) {
- make.top.equalTo(self.bgv).offset(adapt(16));
- make.right.equalTo(self.bgv).offset(adapt(-16));
- make.width.mas_equalTo(adapt(70));
- make.height.mas_equalTo(adapt(26));
- }];
-
- [self.userContainerView mas_remakeConstraints:^(MASConstraintMaker *make) {
- make.top.equalTo(self.refreshBtn.mas_bottom).offset(adapt(20));
- make.left.equalTo(self.bgv).offset(adapt(20));
- make.right.equalTo(self.bgv).offset(adapt(-20));
- make.height.mas_equalTo(self.userContainerViewHeight); // 默认高度,会根据用户数量动态调整
- }];
-
- [self.sendGreetingBtn mas_remakeConstraints:^(MASConstraintMaker *make) {
- make.top.equalTo(self.userContainerView.mas_bottom).offset(adapt(20));
- make.left.equalTo(self.bgv).offset(adapt(20));
- make.right.equalTo(self.bgv).offset(adapt(-20));
- make.bottom.equalTo(self.bgv).offset(adapt(-20));
- make.height.mas_equalTo(adapt(50));
- }];
-
- [super updateConstraints];
- }
- /**
- * 配置用户列表数据
- */
- - (void)configureWithUserList:(NSArray<YMGroupGreetingUserModel *> *)userList {
- self.userList = userList;
- [self setupUserViews];
- [self updateConstraints];
- }
- /**
- * 设置用户视图
- */
- - (void)setupUserViews {
- // 清除之前的子视图
- for (UIView *subview in self.userContainerView.subviews) {
- [subview removeFromSuperview];
- }
-
- NSInteger userCount = self.userList.count;
- if (userCount == 0) return;
-
- // 限制最多显示5个用户
- userCount = MIN(userCount, 6);
-
- CGFloat avatarSize = (kScreenWidth - (adapt(40) * 4)) / 3;
- CGFloat spacing = adapt(40);
- CGFloat containerWidth = kScreenWidth - adapt(40); // 减去左右边距
-
- // 根据用户数量决定布局
- [self setupLayoutWithCount:userCount avatarSize:avatarSize spacing:spacing containerWidth:containerWidth];
- self.userContainerViewHeight = (avatarSize + adapt(40)) * (userCount / 3 + (userCount % 3 == 0 ? 0 : 1));
- }
- - (void)setupLayoutWithCount:(NSInteger)count avatarSize:(CGFloat)avatarSize spacing:(CGFloat)spacing containerWidth:(CGFloat)containerWidth {
-
- NSInteger rowCount = count / 3 + (count % 3 == 0 ? 0 : 1);
-
- CGFloat startX = 0;
-
- for (NSInteger i = 0; i < rowCount; i ++) {
- for (NSInteger j = 0; j < 3; j ++) {
- NSInteger index = i * 3 + j;
- if (index >= count) {
- break;
- }
-
- YMGroupGreetingUserModel *user = self.userList[index];
- UIView *userView = [self createUserViewWithModel:user];
- [self.userContainerView addSubview:userView];
-
- [userView mas_makeConstraints:^(MASConstraintMaker *make) {
- make.top.equalTo(self.userContainerView).offset(i * (avatarSize + adapt(40)));
- make.left.equalTo(self.userContainerView).offset(startX + j * (avatarSize + spacing));
- make.width.mas_equalTo(avatarSize);
- make.height.mas_equalTo(avatarSize + adapt(40));
- }];
- }
- }
- }
- /**
- * 单行布局
- */
- - (void)setupSingleRowLayoutWithCount:(NSInteger)count avatarSize:(CGFloat)avatarSize spacing:(CGFloat)spacing containerWidth:(CGFloat)containerWidth {
- //CGFloat totalWidth = count * avatarSize + (count - 1) * spacing;
- CGFloat startX = 0;
-
- for (NSInteger i = 0; i < count; i++) {
- YMGroupGreetingUserModel *user = self.userList[i];
- UIView *userView = [self createUserViewWithModel:user];
- [self.userContainerView addSubview:userView];
-
- [userView mas_makeConstraints:^(MASConstraintMaker *make) {
- make.left.equalTo(self.userContainerView).offset(startX + i * (avatarSize + spacing));
- make.top.equalTo(self.userContainerView);
- make.width.mas_equalTo(avatarSize);
- make.height.mas_equalTo(avatarSize + adapt(40));
- }];
- }
- }
- /**
- * 双行布局
- */
- - (void)setupDoubleRowLayoutWithCount:(NSInteger)count avatarSize:(CGFloat)avatarSize spacing:(CGFloat)spacing containerWidth:(CGFloat)containerWidth {
- NSInteger firstRowCount = (count + 1) / 2; // 第一行用户数
- NSInteger secondRowCount = count - firstRowCount; // 第二行用户数
-
- // 第一行
- //CGFloat firstRowTotalWidth = firstRowCount * avatarSize + (firstRowCount - 1) * spacing;
- CGFloat firstRowStartX = 0;
-
- for (NSInteger i = 0; i < firstRowCount; i++) {
- YMGroupGreetingUserModel *user = self.userList[i];
- UIView *userView = [self createUserViewWithModel:user];
- [self.userContainerView addSubview:userView];
-
- [userView mas_makeConstraints:^(MASConstraintMaker *make) {
- make.left.equalTo(self.userContainerView).offset(firstRowStartX + i * (avatarSize + spacing));
- make.top.equalTo(self.userContainerView);
- make.width.mas_equalTo(avatarSize);
- make.height.mas_equalTo(avatarSize + adapt(40));
- }];
- }
-
- // 第二行
- if (secondRowCount > 0) {
- //CGFloat secondRowTotalWidth = secondRowCount * avatarSize + (secondRowCount - 1) * spacing;
- //CGFloat secondRowStartX = 0 + avatarSize + adapt(20) - (avatarSize / 2.0);
- CGFloat secondRowStartX = 0;
-
- for (NSInteger i = 0; i < secondRowCount; i++) {
- YMGroupGreetingUserModel *user = self.userList[firstRowCount + i];
- UIView *userView = [self createUserViewWithModel:user];
- [self.userContainerView addSubview:userView];
-
- [userView mas_makeConstraints:^(MASConstraintMaker *make) {
- make.left.equalTo(self.userContainerView).offset(secondRowStartX + i * (avatarSize + spacing));
- make.top.equalTo(self.userContainerView).offset(avatarSize + adapt(40));
- make.width.mas_equalTo(avatarSize);
- make.height.mas_equalTo(avatarSize + adapt(40));
- }];
- }
- }
- }
- /**
- * 创建用户视图
- */
- - (UIView *)createUserViewWithModel:(YMGroupGreetingUserModel *)user {
-
- CGFloat avatarSize = (kScreenWidth - (adapt(40) * 4)) / 3;
-
- UIView *userView = [[UIView alloc] init];
-
- // 头像
- UIImageView *avatarImageView = [[UIImageView alloc] init];
- avatarImageView.layer.cornerRadius = avatarSize / 2.0;
- avatarImageView.layer.masksToBounds = YES;
- avatarImageView.backgroundColor = HexColorFromRGB(0xF5F5F5);
- avatarImageView.contentMode = UIViewContentModeScaleAspectFill;
-
- // 设置头像
- if (user.avatar.length > 0) {
- NSURL *avatarURL = [LCTools getImageUrlWithAddress:user.avatar];
- [avatarImageView sd_setImageWithURL:avatarURL placeholderImage:[UIImage imageNamed:@"vqu_images_P_man"]];
- } else {
- avatarImageView.image = [UIImage imageNamed:@"vqu_images_P_man"];
- }
-
- [userView addSubview:avatarImageView];
-
- // 昵称
- UILabel *nicknameLabel = [[UILabel alloc] init];
- nicknameLabel.text = user.nickname.length > 0 ? user.nickname : @"用户";
- nicknameLabel.font = [UIFont systemFontOfSize:adapt(10)];
- nicknameLabel.textColor = HexColorFromRGB(0x333333);
- nicknameLabel.textAlignment = NSTextAlignmentCenter;
- nicknameLabel.lineBreakMode = NSLineBreakByTruncatingTail;
- [userView addSubview:nicknameLabel];
-
- // 约束
- [avatarImageView mas_makeConstraints:^(MASConstraintMaker *make) {
- make.top.centerX.equalTo(userView);
- make.width.height.mas_equalTo(avatarSize);
- }];
-
- [nicknameLabel mas_makeConstraints:^(MASConstraintMaker *make) {
- make.top.equalTo(avatarImageView.mas_bottom).offset(adapt(0));
- make.left.right.equalTo(userView);
- make.height.mas_equalTo(adapt(40));
- }];
-
- return userView;
- }
- #pragma mark - 按钮事件
- /**
- * 换一换按钮点击
- */
- - (void)refreshButtonClicked {
- if (self.refreshBlock) {
- self.refreshBlock();
- }
- }
- /**
- * 发送打招呼按钮点击
- */
- - (void)sendGreetingButtonClicked {
- if (self.sendBlock) {
- self.sendBlock();
- }
- }
- #pragma mark - Lazy Loading
- - (UIView *)bgv {
- if (!_bgv) {
- _bgv = [[UIView alloc] init];
- _bgv.backgroundColor = UIColor.whiteColor;
- _bgv.layer.cornerRadius = adapt(16);
- _bgv.layer.masksToBounds = YES;
- _bgv.layer.shadowColor = HexColorFromRGB(0x000000).CGColor;
- _bgv.layer.shadowOpacity = 0.1;
- _bgv.layer.shadowOffset = CGSizeMake(0, 0);
- _bgv.layer.shadowRadius = adapt(8);
- [_bgv addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithActionBlock:^(id _Nonnull sender) { }]];
- }
- return _bgv;
- }
- /**
- * 换一换按钮
- */
- - (UIButton *)refreshBtn {
- if (!_refreshBtn) {
- _refreshBtn = [UIButton buttonWithType:UIButtonTypeCustom];
- [_refreshBtn setTitle:@"换一批" forState:UIControlStateNormal];
- //[_refreshBtn setTitleColor:HexColorFromRGB(0xFD7BC5) forState:UIControlStateNormal];
- _refreshBtn.backgroundColor = HexColorFromRGB(0xFD7BC5);
- _refreshBtn.titleLabel.font = [UIFont systemFontOfSize:adapt(14)];
- _refreshBtn.layer.cornerRadius = adapt(13);
- _refreshBtn.layer.borderWidth = 1.0;
- _refreshBtn.layer.borderColor = HexColorFromRGB(0xFD7BC5).CGColor;
- [_refreshBtn addTarget:self action:@selector(refreshButtonClicked) forControlEvents:UIControlEventTouchUpInside];
- }
- return _refreshBtn;
- }
- /**
- * 用户容器视图
- */
- - (UIView *)userContainerView {
- if (!_userContainerView) {
- _userContainerView = [[UIView alloc] init];
- _userContainerView.backgroundColor = UIColor.clearColor;
- }
- return _userContainerView;
- }
- /**
- * 发送打招呼按钮
- */
- - (UIButton *)sendGreetingBtn {
- if (!_sendGreetingBtn) {
- _sendGreetingBtn = [UIButton buttonWithType:UIButtonTypeCustom];
- [_sendGreetingBtn setTitle:@"打个招呼" forState:UIControlStateNormal];
- [_sendGreetingBtn setTitleColor:UIColor.whiteColor forState:UIControlStateNormal];
- _sendGreetingBtn.titleLabel.font = [UIFont boldSystemFontOfSize:adapt(16)];
- _sendGreetingBtn.backgroundColor = HexColorFromRGB(0xFD7BC5);
- _sendGreetingBtn.layer.cornerRadius = adapt(25);
- [_sendGreetingBtn addTarget:self action:@selector(sendGreetingButtonClicked) forControlEvents:UIControlEventTouchUpInside];
- }
- return _sendGreetingBtn;
- }
- @end
- #pragma mark - YMGroupGreetingUserModel
- @implementation YMGroupGreetingUserModel
- /**
- * MJExtension 属性名替换
- */
- + (NSDictionary *)mj_replacedKeyFromPropertyName {
- return @{
- @"userId" : @"id"
- };
- }
- @end
|