// // XPRoomQuickMessageContainView.m // xplan-ios // // Created by GreenLand on 2022/9/28. // #import "XPRoomQuickMessageContainView.h" #import "XPRoomQuidkMessageCell.h" #import #import ///Tool #import "AccountInfoStorage.h" #import "XPConstant.h" #import "XCHUDTool.h" ///Model #import "XPMessageRemoteExtModel.h" #import "UserInfoModel.h" #import "RoomInfoModel.h" @interface XPRoomQuickMessageContainView () @property (nonatomic, strong) UICollectionView *collectionView; @property (nonatomic, strong) NSMutableArray *titleArray; ///关闭 @property (nonatomic,strong) UIButton *closeButton; ///代理 @property (nonatomic,weak) id delegate; ///最后发送消息的时间 @property (nonatomic, assign) long long lastSendTime; @end @implementation XPRoomQuickMessageContainView - (instancetype)initWithDelegate:(id)delegate { self = [super init]; if (self) { self.delegate = delegate; self.clipsToBounds = YES; [self initSubViews]; [self initSubViewConstraints]; } return self; } #pragma mark - Private Method - (void)initSubViews { [self addSubview:self.collectionView]; [self addSubview:self.closeButton]; } - (void)initSubViewConstraints { [self.collectionView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.mas_equalTo(self).offset(15); make.right.mas_equalTo(self.closeButton.mas_left).offset(-8); make.top.bottom.mas_equalTo(self); }]; [self.closeButton mas_makeConstraints:^(MASConstraintMaker *make) { make.right.mas_equalTo(-8); make.width.height.mas_equalTo(30); make.centerY.mas_equalTo(self); }]; } #pragma mark - UICollectionViewDataSource - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { return self.titleArray.count; } - (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { XPRoomQuidkMessageCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:NSStringFromClass([XPRoomQuidkMessageCell class]) forIndexPath:indexPath]; cell.title = self.titleArray[indexPath.row]; return cell; } - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { NSString *str = self.titleArray[indexPath.row]; NSDictionary *dic = @{NSFontAttributeName:[UIFont systemFontOfSize:12]}; CGSize size = [str boundingRectWithSize:CGSizeMake(CGFLOAT_MAX, 25) options:NSStringDrawingUsesLineFragmentOrigin attributes:dic context:nil].size; return CGSizeMake(size.width + 10, 30); } - (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { NSDate *datenow = [NSDate date];//现在时间 long time2 = (long)([datenow timeIntervalSince1970]*1000); long aTime = (time2 - self.lastSendTime) / 1000; if (aTime < 10) { [XCHUDTool showErrorWithMessage:@"你发送的太频繁啦,请稍后再试"]; return; } self.lastSendTime = time2; NSString *str = self.titleArray[indexPath.row]; [self sendText:str]; } - (void)sendText:(NSString *)text { if ([self.delegate getRoomInfo].isCloseScreen) { return; } //移除记录关闭次数 [[NSUserDefaults standardUserDefaults] removeObjectForKey:kRoomQuickMessageCloseCount]; [[NSUserDefaults standardUserDefaults] synchronize]; UserInfoModel * userInfo = [self.delegate getUserInfo]; XPMessageRemoteExtModel *extModel = [[XPMessageRemoteExtModel alloc] init]; extModel.defUser = userInfo.defUser; extModel.erbanNo = userInfo.erbanNo; extModel.carName = userInfo.carName; extModel.inRoomNameplatePic = userInfo.nameplatePic; extModel.inRoomNameplateWord = userInfo.nameplateWord; extModel.charmUrl = userInfo.userLevelVo.charmUrl; extModel.experLevelSeq = userInfo.userLevelVo.experLevelSeq; extModel.experUrl = userInfo.userLevelVo.experUrl; extModel.newUser = userInfo.newUser; extModel.vipIcon = userInfo.userVipInfoVO.vipIcon; extModel.androidBubbleUrl = userInfo.androidBubbleUrl; extModel.iosBubbleUrl = userInfo.iosBubbleUrl; extModel.fromSayHelloChannel = userInfo.fromSayHelloChannel; NIMMessage * message = [[NIMMessage alloc] init]; message.text = text; NSMutableDictionary *remoteExt = [NSMutableDictionary dictionaryWithObject:extModel.model2dictionary forKey:[AccountInfoStorage instance].getUid]; message.remoteExt = remoteExt; ///网易易盾 拦截高风险 NIMAntiSpamOption *option = [[NIMAntiSpamOption alloc]init]; option.yidunEnabled = YES; option.businessId = KeyWithType(keyType_YiDunBussinessId); message.antiSpamOption = option; NSString * sessionId = [NSString stringWithFormat:@"%ld", [self.delegate getRoomInfo].roomId]; //构造会话 NIMSession *session = [NIMSession session:sessionId type:NIMSessionTypeChatroom]; [[NIMSDK sharedSDK].chatManager sendMessage:message toSession:session completion:^(NSError * _Nullable error) { }]; } - (void)onCloseButtonClick:(UIButton *)sender { [self mas_updateConstraints:^(MASConstraintMaker *make) { make.height.mas_equalTo(0); }]; NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; //记录关闭的次数 NSNumber *count = [defaults objectForKey:kRoomQuickMessageCloseCount]; [defaults setObject:@(count.intValue +1) forKey:kRoomQuickMessageCloseCount]; [defaults synchronize]; } #pragma mark - Getters And Setters - (UICollectionView *)collectionView{ if (!_collectionView) { UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; layout.scrollDirection = UICollectionViewScrollDirectionHorizontal; layout.minimumInteritemSpacing = 8; _collectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout]; _collectionView.showsHorizontalScrollIndicator = NO; _collectionView.backgroundColor = [UIColor clearColor]; _collectionView.dataSource = self; _collectionView.delegate = self; [_collectionView registerClass:[XPRoomQuidkMessageCell class] forCellWithReuseIdentifier:NSStringFromClass([XPRoomQuidkMessageCell class])]; } return _collectionView; } - (NSMutableArray *)titleArray { if (!_titleArray) { _titleArray = [NSMutableArray arrayWithObjects:@"萌新求关注", @"ღ( ´・ᴗ・` )比心", @"贴贴", @"这个怎么玩呀?", @"我要上麦", @"么么叽!么么哒", @"老板大气", @"下次一定!", nil]; } return _titleArray; } - (UIButton *)closeButton { if (!_closeButton) { _closeButton = [[UIButton alloc] init]; [_closeButton setImage:[UIImage imageNamed:@"room_gift_graffiti_close"] forState:UIControlStateNormal]; [_closeButton addTarget:self action:@selector(onCloseButtonClick:) forControlEvents:UIControlEventTouchUpInside]; } return _closeButton; } @end