优化房间
@@ -31,7 +31,7 @@
|
||||
</Testables>
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
buildConfiguration = "Release"
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
launchStyle = "0"
|
||||
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 2.6 KiB |
@@ -10,6 +10,7 @@
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "room_menu_face@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
|
Before Width: | Height: | Size: 721 B After Width: | Height: | Size: 1.4 KiB |
BIN
YuMi/Assets.xcassets/yna/Menu/room_menu_face.imageset/room_menu_face@3x.png
vendored
Normal file
After Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 5.2 KiB After Width: | Height: | Size: 5.0 KiB |
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 5.4 KiB After Width: | Height: | Size: 5.4 KiB |
Before Width: | Height: | Size: 859 B After Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.9 KiB |
@@ -10,6 +10,7 @@
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "room_menu_more@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
|
Before Width: | Height: | Size: 849 B After Width: | Height: | Size: 1.3 KiB |
BIN
YuMi/Assets.xcassets/yna/Menu/room_menu_more.imageset/room_menu_more@3x.png
vendored
Normal file
After Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 7.7 KiB |
22
YuMi/Assets.xcassets/yna/Menu/room_menu_send_bg.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "room_menu_send_bg@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "room_menu_send_bg@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
YuMi/Assets.xcassets/yna/Menu/room_menu_send_bg.imageset/room_menu_send_bg@2x.png
vendored
Normal file
After Width: | Height: | Size: 715 B |
BIN
YuMi/Assets.xcassets/yna/Menu/room_menu_send_bg.imageset/room_menu_send_bg@3x.png
vendored
Normal file
After Width: | Height: | Size: 1.1 KiB |
22
YuMi/Assets.xcassets/yna/Menu/room_menu_voice_close.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "room_menu_voice_close@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "room_menu_voice_close@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
YuMi/Assets.xcassets/yna/Menu/room_menu_voice_close.imageset/room_menu_voice_close@2x.png
vendored
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
YuMi/Assets.xcassets/yna/Menu/room_menu_voice_close.imageset/room_menu_voice_close@3x.png
vendored
Normal file
After Width: | Height: | Size: 1.8 KiB |
22
YuMi/Assets.xcassets/yna/Menu/room_menu_voice_open.imageset/Contents.json
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "room_menu_voice_open@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "room_menu_voice_open@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
YuMi/Assets.xcassets/yna/Menu/room_menu_voice_open.imageset/room_menu_voice_open@2x.png
vendored
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
YuMi/Assets.xcassets/yna/Menu/room_menu_voice_open.imageset/room_menu_voice_open@3x.png
vendored
Normal file
After Width: | Height: | Size: 1.7 KiB |
@@ -10,15 +10,15 @@
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
typedef NS_ENUM(NSInteger, XPRoomMenuItemType) {
|
||||
XPRoomMenuItemType_Input = 1,
|
||||
XPRoomMenuItemType_Mic,///话筒
|
||||
XPRoomMenuItemType_Face,///表情
|
||||
XPRoomMenuItemType_Message,///房间私聊
|
||||
XPRoomMenuItemType_More,///更多
|
||||
XPRoomMenuItemType_ArrangeMic,///排麦
|
||||
XPRoomMenuItemType_Gift,///礼物
|
||||
XPRoomMenuItemType_Input = 1,
|
||||
XPRoomMenuItemType_Mic,///话筒
|
||||
XPRoomMenuItemType_Voice, ///声音
|
||||
XPRoomMenuItemType_Face,///表情
|
||||
XPRoomMenuItemType_Message,///房间私聊
|
||||
XPRoomMenuItemType_More,///更多
|
||||
XPRoomMenuItemType_ArrangeMic,///排麦
|
||||
XPRoomMenuItemType_Gift,///礼物
|
||||
XPRoomMenuItemType_Noble,///贵族
|
||||
XPRoomMenuItemType_Play,///更多玩法
|
||||
};
|
||||
|
||||
@interface XPRoomMenuItem : NSObject
|
||||
|
@@ -1,8 +1,8 @@
|
||||
//
|
||||
// YMRoomBottomMenuView.m
|
||||
// YUMI
|
||||
// XPRoomBottomMenuView.m
|
||||
// xplan-ios
|
||||
//
|
||||
// Created by YUMI on 2021/10/11.
|
||||
// Created by 冯硕 on 2021/10/11.
|
||||
//
|
||||
|
||||
#import "XPRoomMenuContainerView.h"
|
||||
@@ -12,12 +12,10 @@
|
||||
#import "AccountInfoStorage.h"
|
||||
#import "TTPopup.h"
|
||||
#import "RtcManager.h"
|
||||
#import "XNDJTDDLoadingTool.h"
|
||||
|
||||
#import "StatisticsServiceHelper.h"
|
||||
#import "DJDKMIMOMColor.h"
|
||||
#import "YUMIMacroUitls.h"
|
||||
#import "XCCurrentVCStackManager.h"
|
||||
#import "ClientConfig.h"
|
||||
#import "UIImage+Utils.h"
|
||||
///Model
|
||||
#import "XPRoomMenuItem.h"
|
||||
#import "MicroQueueModel.h"
|
||||
@@ -30,12 +28,10 @@
|
||||
#import "XPSendGiftView.h"
|
||||
#import "SessionListViewController.h"
|
||||
#import "XPRoomMoreMenuViewController.h"
|
||||
#import "XPNobleCenterViewController.h"
|
||||
#import "XPRoomFaceViewController.h"
|
||||
#import "XPRoomHalfMessageView.h"
|
||||
#import "XPRoomMessageBubbleView.h"
|
||||
#import "XPRoomMorePlayViewController.h"
|
||||
|
||||
NSString * const kRoomPlayEnterKey = @"kRoomPlayEnterKey";
|
||||
|
||||
@interface XPRoomMenuContainerView ()<XPRoomMessageBubbleViewDelegate>
|
||||
///滚动的容器
|
||||
@@ -46,6 +42,8 @@ NSString * const kRoomPlayEnterKey = @"kRoomPlayEnterKey";
|
||||
@property (nonatomic,strong) UIButton *inputButton;
|
||||
///麦
|
||||
@property (nonatomic,strong) UIButton *micButton;
|
||||
///声音
|
||||
@property (nonatomic,strong) UIButton *voiceButton;
|
||||
///表情
|
||||
@property (nonatomic,strong) UIButton *faceButton;
|
||||
///私聊
|
||||
@@ -69,113 +67,133 @@ NSString * const kRoomPlayEnterKey = @"kRoomPlayEnterKey";
|
||||
@implementation XPRoomMenuContainerView
|
||||
|
||||
- (instancetype)initWithDelegate:(id<RoomHostDelegate>)delegate {
|
||||
self = [super init];
|
||||
if (self) {
|
||||
self.delegate = delegate;
|
||||
[self initSubViews];
|
||||
[self initSubViewConstraints];
|
||||
self = [super init];
|
||||
if (self) {
|
||||
self.delegate = delegate;
|
||||
[self initSubViews];
|
||||
[self initSubViewConstraints];
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showGiftView:) name:@"kShowGiftView" object:nil];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
return self;
|
||||
}
|
||||
- (void)menuResignFirstResponder {
|
||||
[self.inputTextView.editTextFiled resignFirstResponder];
|
||||
[self.inputTextView.editTextFiled resignFirstResponder];
|
||||
}
|
||||
|
||||
#pragma mark - Response
|
||||
- (void)menuButtonAction:(UIButton *)sender {
|
||||
XPRoomMenuItemType type = sender.tag;
|
||||
switch (type) {
|
||||
case XPRoomMenuItemType_Input:
|
||||
{
|
||||
if (self.delegate.getRoomInfo.isCloseScreen) {
|
||||
[XNDJTDDLoadingTool showErrorWithMessage:YMLocalizedString(@"XPRoomMenuContainerView0")];
|
||||
return;
|
||||
}
|
||||
if (self.delegate.getRoomInfo.type == RoomType_Anchor) {
|
||||
self.inputTextView = [XPRoomSendTextView showTextView:self.superview.superview delegate:self.delegate atUid:nil atNick:nil];
|
||||
} else {
|
||||
self.inputTextView = [XPRoomSendTextView showTextView:self.superview delegate:self.delegate atUid:nil atNick:nil];
|
||||
}
|
||||
[StatisticsServiceHelper trackEventWithKey:StatisticsServiceEventroom_chatbox_click];
|
||||
}
|
||||
break;
|
||||
XPRoomMenuItemType type = sender.tag;
|
||||
switch (type) {
|
||||
case XPRoomMenuItemType_Input:
|
||||
{
|
||||
if (self.delegate.getRoomInfo.isCloseScreen) {
|
||||
[XNDJTDDLoadingTool showErrorWithMessage:YMLocalizedString(@"XPRoomMenuContainerView0")];
|
||||
return;
|
||||
}
|
||||
if (self.delegate.getRoomInfo.type == RoomType_Anchor) {
|
||||
self.inputTextView = [XPRoomSendTextView showTextView:self.superview.superview delegate:self.delegate atUid:nil atNick:nil];
|
||||
} else {
|
||||
self.inputTextView = [XPRoomSendTextView showTextView:self.superview delegate:self.delegate atUid:nil atNick:nil];
|
||||
}
|
||||
|
||||
}
|
||||
break;
|
||||
|
||||
case XPRoomMenuItemType_Mic: {
|
||||
[RtcManager instance].localMuted = !self.micButton.isSelected;
|
||||
if([RtcManager instance].localMuted == NO){
|
||||
for (MicroQueueModel *sequence in [self.delegate getMicroQueue].allValues) {
|
||||
if ([AccountInfoStorage instance].getUid.integerValue == sequence.userInfo.uid) {
|
||||
[[RtcManager instance] broadcast:YES];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
self.micButton.selected = [RtcManager instance].isLocalMuted;
|
||||
}
|
||||
break;
|
||||
case XPRoomMenuItemType_Face: {
|
||||
XPRoomFaceViewController * faceVC = [[XPRoomFaceViewController alloc] init];
|
||||
faceVC.modalPresentationStyle = UIModalPresentationOverFullScreen;
|
||||
faceVC.roomId = [NSString stringWithFormat:@"%ld", self.delegate.getRoomInfo.roomId];
|
||||
[self.delegate.getCurrentNav presentViewController:faceVC animated:YES completion:nil];
|
||||
|
||||
case XPRoomMenuItemType_Voice: {
|
||||
[RtcManager instance].remoteMuted = !self.voiceButton.isSelected;
|
||||
self.voiceButton.selected = [RtcManager instance].isRemoteMuted;
|
||||
}
|
||||
break;
|
||||
case XPRoomMenuItemType_Gift: {
|
||||
[StatisticsServiceHelper trackEventWithKey:StatisticsServiceEventroom_gift_click];
|
||||
NSString * roomUid = [NSString stringWithFormat:@"%ld", [self.delegate getRoomInfo].uid];
|
||||
XPSendGiftView * giftView = [[XPSendGiftView alloc] initWithType:SendGiftType_Room uid:roomUid];
|
||||
giftView.delegate = self.delegate;
|
||||
|
||||
case XPRoomMenuItemType_Face: {
|
||||
XPRoomFaceViewController * faceVC = [[XPRoomFaceViewController alloc] init];
|
||||
faceVC.modalPresentationStyle = UIModalPresentationOverFullScreen;
|
||||
faceVC.roomId = [NSString stringWithFormat:@"%ld", self.delegate.getRoomInfo.roomId];
|
||||
[self.delegate.getCurrentNav presentViewController:faceVC animated:YES completion:nil];
|
||||
}
|
||||
break;
|
||||
case XPRoomMenuItemType_Gift: {
|
||||
NSString * roomUid = [NSString stringWithFormat:@"%ld", [self.delegate getRoomInfo].uid];
|
||||
XPSendGiftView * giftView = [[XPSendGiftView alloc] initWithType:SendGiftType_Room uid:roomUid];
|
||||
giftView.delegate = self.delegate;
|
||||
giftView.freeModel = self.freeModel;
|
||||
NSArray * giftUses = [self configGiftUsers:[self.delegate getMicroQueue]];
|
||||
[giftView configGiftUsers:giftUses];
|
||||
[self.delegate.getCurrentNav presentViewController:giftView animated:YES completion:nil];
|
||||
}
|
||||
break;
|
||||
case XPRoomMenuItemType_Message:
|
||||
{
|
||||
[StatisticsServiceHelper trackEventWithKey:StatisticsServiceEventroom_privateletter_click];
|
||||
UIViewController * controller = (UIViewController *)self.delegate;
|
||||
XPRoomHalfMessageView *halfMessageView = [[XPRoomHalfMessageView alloc] initWithFrame:CGRectMake(0, KScreenHeight, KScreenWidth, KScreenHeight) controller:controller];
|
||||
[controller.view addSubview:halfMessageView];
|
||||
[UIView animateWithDuration:.35 animations:^{
|
||||
CGRect rect = halfMessageView.frame;
|
||||
rect.origin.y = 0;
|
||||
halfMessageView.frame = rect;
|
||||
}];
|
||||
|
||||
}
|
||||
break;
|
||||
case XPRoomMenuItemType_More: {
|
||||
XPRoomMoreMenuViewController * moreMenuVC = [[XPRoomMoreMenuViewController alloc] initWithDelegate:self.delegate];
|
||||
[self.delegate.getCurrentNav presentViewController:moreMenuVC animated:YES completion:nil];
|
||||
}
|
||||
break;
|
||||
case XPRoomMenuItemType_ArrangeMic:{
|
||||
if (self.delegate.getRoomInfo.roomModeType == RoomModeType_Open_PK_Mode && self.delegate.isRoomPKPlaying) {
|
||||
[XNDJTDDLoadingTool showErrorWithMessage:YMLocalizedString(@"XPRoomMenuContainerView1")];
|
||||
return;
|
||||
}
|
||||
|
||||
self.arrangeMicButton.selected = NO;
|
||||
NIMChatroomMembersByIdsRequest *request = [[NIMChatroomMembersByIdsRequest alloc]init];
|
||||
request.roomId = [NSString stringWithFormat:@"%ld", self.delegate.getRoomInfo.roomId];
|
||||
request.userIds = @[[AccountInfoStorage instance].getUid];
|
||||
[[NIMSDK sharedSDK].chatroomManager fetchChatroomMembersByIds:request completion:^(NSError * _Nullable error, NSArray<NIMChatroomMember *> * _Nullable members) {
|
||||
NIMChatroomMember * member;
|
||||
if (error == nil) {
|
||||
member = members.firstObject;
|
||||
}
|
||||
RoomInfoModel * roomInfo = self.delegate.getRoomInfo;
|
||||
XPArrangeMicInfoModel * info = [[XPArrangeMicInfoModel alloc] init];
|
||||
info.roomUid = [NSString stringWithFormat:@"%ld", roomInfo.uid];
|
||||
info.roomId = [NSString stringWithFormat:@"%ld", roomInfo.roomId];
|
||||
info.nick = roomInfo.nick;
|
||||
info.roomAvatar = roomInfo.avatar;
|
||||
info.roomTitle = roomInfo.title;
|
||||
info.micQueue = [self.delegate getMicroQueue];
|
||||
info.isManager = (member.type == NIMChatroomMemberTypeCreator || member.type == NIMChatroomMemberTypeManager);
|
||||
info.type = roomInfo.roomModeType == RoomModeType_Open_Blind ? ArrangeMicType_Dating : roomInfo.roomModeType == RoomModeType_Open_PK_Mode ? ArrangeMicType_Room_PK : ArrangeMicType_Normal;
|
||||
XPArrangeMicViewController * arrangeMicVC = [[XPArrangeMicViewController alloc] initWithInfo:info];
|
||||
[self.delegate.getCurrentNav presentViewController:arrangeMicVC animated:YES completion:nil];
|
||||
}];
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
NSArray * giftUses = [self configGiftUsers:[self.delegate getMicroQueue]];
|
||||
[giftView configGiftUsers:giftUses];
|
||||
[self.delegate.getCurrentNav presentViewController:giftView animated:YES completion:nil];
|
||||
}
|
||||
break;
|
||||
case XPRoomMenuItemType_Message:
|
||||
{
|
||||
UIViewController * controller = (UIViewController *)self.delegate;
|
||||
XPRoomHalfMessageView *halfMessageView = [[XPRoomHalfMessageView alloc] initWithFrame:CGRectMake(0, KScreenHeight, KScreenWidth, KScreenHeight) controller:controller];
|
||||
[controller.view addSubview:halfMessageView];
|
||||
[UIView animateWithDuration:.35 animations:^{
|
||||
CGRect rect = halfMessageView.frame;
|
||||
rect.origin.y = 0;
|
||||
halfMessageView.frame = rect;
|
||||
}];
|
||||
|
||||
}
|
||||
break;
|
||||
case XPRoomMenuItemType_More: {
|
||||
XPRoomMoreMenuViewController * moreMenuVC = [[XPRoomMoreMenuViewController alloc] initWithDelegate:self.delegate];
|
||||
[self.delegate.getCurrentNav presentViewController:moreMenuVC animated:YES completion:nil];
|
||||
}
|
||||
break;
|
||||
case XPRoomMenuItemType_ArrangeMic:{
|
||||
if (self.delegate.getRoomInfo.roomModeType == RoomModeType_Open_PK_Mode && self.delegate.isRoomPKPlaying) {
|
||||
[XNDJTDDLoadingTool showErrorWithMessage:YMLocalizedString(@"XPRoomMenuContainerView1")];
|
||||
return;
|
||||
}
|
||||
|
||||
self.arrangeMicButton.selected = NO;
|
||||
NIMChatroomMembersByIdsRequest *request = [[NIMChatroomMembersByIdsRequest alloc]init];
|
||||
request.roomId = [NSString stringWithFormat:@"%ld", self.delegate.getRoomInfo.roomId];
|
||||
request.userIds = @[[AccountInfoStorage instance].getUid];
|
||||
[[NIMSDK sharedSDK].chatroomManager fetchChatroomMembersByIds:request completion:^(NSError * _Nullable error, NSArray<NIMChatroomMember *> * _Nullable members) {
|
||||
NIMChatroomMember * member;
|
||||
if (error == nil) {
|
||||
member = members.firstObject;
|
||||
}
|
||||
RoomInfoModel * roomInfo = self.delegate.getRoomInfo;
|
||||
XPArrangeMicInfoModel * info = [[XPArrangeMicInfoModel alloc] init];
|
||||
info.roomUid = [NSString stringWithFormat:@"%ld", roomInfo.uid];
|
||||
info.roomId = [NSString stringWithFormat:@"%ld", roomInfo.roomId];
|
||||
info.nick = roomInfo.nick;
|
||||
info.roomAvatar = roomInfo.avatar;
|
||||
info.roomTitle = roomInfo.title;
|
||||
info.micQueue = [self.delegate getMicroQueue];
|
||||
info.isManager = (member.type == NIMChatroomMemberTypeCreator || member.type == NIMChatroomMemberTypeManager);
|
||||
info.type = roomInfo.roomModeType == RoomModeType_Open_Blind ? ArrangeMicType_Dating : roomInfo.roomModeType == RoomModeType_Open_PK_Mode ? ArrangeMicType_Room_PK : ArrangeMicType_Normal;
|
||||
XPArrangeMicViewController * arrangeMicVC = [[XPArrangeMicViewController alloc] initWithInfo:info];
|
||||
[self.delegate.getCurrentNav presentViewController:arrangeMicVC animated:YES completion:nil];
|
||||
}];
|
||||
}
|
||||
break;
|
||||
case XPRoomMenuItemType_Noble: {
|
||||
[StatisticsServiceHelper trackEventWithKey:StatisticsServiceEventvipEntranceRoomClick];
|
||||
XPNobleCenterViewController * nobleVC = [[XPNobleCenterViewController alloc] initWithRoomUid:self.delegate.getRoomInfo.uid];
|
||||
[self.delegate.getCurrentNav pushViewController:nobleVC animated:YES];
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark - notification
|
||||
@@ -193,70 +211,76 @@ NSString * const kRoomPlayEnterKey = @"kRoomPlayEnterKey";
|
||||
|
||||
#pragma mark - Private Method
|
||||
- (void)initSubViews {
|
||||
[self addSubview:self.scrollView];
|
||||
[self addSubview:self.giftButton];
|
||||
|
||||
[self.scrollView addSubview:self.stackView];
|
||||
|
||||
[self.stackView addArrangedSubview:self.inputButton];
|
||||
[self.stackView addArrangedSubview:self.micButton];
|
||||
[self.stackView addArrangedSubview:self.faceButton];
|
||||
[self.stackView addArrangedSubview:self.arrangeMicButton];
|
||||
[self.stackView addArrangedSubview:self.messageButton];
|
||||
[self.stackView addArrangedSubview:self.moreButton];
|
||||
[self addSubview:self.scrollView];
|
||||
[self addSubview:self.giftButton];
|
||||
|
||||
[self.scrollView addSubview:self.stackView];
|
||||
|
||||
[self.stackView addArrangedSubview:self.inputButton];
|
||||
[self.stackView addArrangedSubview:self.micButton];
|
||||
[self.stackView addArrangedSubview:self.voiceButton];
|
||||
[self.stackView addArrangedSubview:self.faceButton];
|
||||
[self.stackView addArrangedSubview:self.arrangeMicButton];
|
||||
[self.stackView addArrangedSubview:self.messageButton];
|
||||
[self.stackView addArrangedSubview:self.moreButton];
|
||||
[self.stackView addArrangedSubview:self.nobleButton];
|
||||
|
||||
self.backgroundColor = UIColorRGBAlpha(0xFFFFFF, 0.15);
|
||||
CAShapeLayer * layer = [CAShapeLayer layer];
|
||||
layer.path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, KScreenWidth, 52 +kSafeAreaBottomHeight) byRoundingCorners:UIRectCornerTopLeft | UIRectCornerTopRight cornerRadii:CGSizeMake(25, 25)].CGPath;
|
||||
self.layer.shadowColor = UIColorRGBAlpha(0xFFFFFF, 0.1).CGColor;
|
||||
self.layer.shadowOffset = CGSizeMake(0, 5);
|
||||
self.layer.mask = layer;
|
||||
}
|
||||
|
||||
- (void)initSubViewConstraints {
|
||||
[self.scrollView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.mas_equalTo(self).offset(15);
|
||||
make.right.mas_equalTo(self.giftButton.mas_left).offset(-10);
|
||||
make.top.bottom.mas_equalTo(self);
|
||||
}];
|
||||
|
||||
[self.stackView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.top.bottom.leading.trailing.height.mas_equalTo(self.scrollView);
|
||||
}];
|
||||
if ([ClientConfig shareConfig].canOpen) {
|
||||
[self.inputButton mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.size.mas_equalTo(CGSizeMake(100, 30));
|
||||
}];
|
||||
} else {
|
||||
[self.inputButton mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.size.mas_equalTo(CGSizeMake(150, 30));
|
||||
}];
|
||||
}
|
||||
|
||||
[self.giftButton mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.centerY.mas_equalTo(self);
|
||||
make.right.mas_equalTo(self).offset(-15);
|
||||
make.size.mas_equalTo(CGSizeMake(38, 38));
|
||||
}];
|
||||
[self.scrollView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.mas_equalTo(self).offset(15);
|
||||
make.right.mas_equalTo(self.giftButton.mas_left).offset(-10);
|
||||
make.top.mas_equalTo(self).offset(8);
|
||||
make.bottom.mas_equalTo(self).offset(-12 - kSafeAreaBottomHeight);
|
||||
}];
|
||||
|
||||
[self.stackView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.top.bottom.leading.trailing.height.mas_equalTo(self.scrollView);
|
||||
}];
|
||||
|
||||
[self.inputButton mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.size.mas_equalTo(CGSizeMake(95, 32));
|
||||
}];
|
||||
|
||||
[self.giftButton mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.centerY.mas_equalTo(self.scrollView);
|
||||
make.right.mas_equalTo(self).offset(-20);
|
||||
make.size.mas_equalTo(CGSizeMake(35, 35));
|
||||
}];
|
||||
|
||||
}
|
||||
|
||||
- (NSArray<XPGiftUserInfoModel *> *)configGiftUsers:(NSMutableDictionary<NSString *,MicroQueueModel *> *)queue {
|
||||
NSMutableArray * array = [NSMutableArray array];
|
||||
for (MicroQueueModel * microModel in queue.allValues) {
|
||||
if (microModel.userInfo && microModel.userInfo.uid >0) {
|
||||
UserInfoModel * userInfo = microModel.userInfo;
|
||||
XPGiftUserInfoModel * userModel = [[XPGiftUserInfoModel alloc] init];
|
||||
userModel.avatar = userInfo.avatar;
|
||||
userModel.vipMic = userInfo.vipMic;
|
||||
userModel.position = [NSString stringWithFormat:@"%d", microModel.microState.position];
|
||||
userModel.uid = userInfo.uid;
|
||||
NSMutableArray * array = [NSMutableArray array];
|
||||
for (MicroQueueModel * microModel in queue.allValues) {
|
||||
if (microModel.userInfo && microModel.userInfo.uid >0) {
|
||||
UserInfoModel * userInfo = microModel.userInfo;
|
||||
XPGiftUserInfoModel * userModel = [[XPGiftUserInfoModel alloc] init];
|
||||
userModel.avatar = userInfo.avatar;
|
||||
userModel.vipMic = userInfo.vipMic;
|
||||
userModel.position = [NSString stringWithFormat:@"%d", microModel.microState.position];
|
||||
userModel.uid = userInfo.uid;
|
||||
if (self.delegate.getRoomInfo.type == RoomType_Anchor && microModel.microState.position == -1) {///个播房一直为离开模式,不需要添加房主位
|
||||
continue;
|
||||
}
|
||||
[array addObject:userModel];
|
||||
}
|
||||
}
|
||||
|
||||
if (self.delegate.getRoomInfo.leaveMode) {
|
||||
RoomInfoModel * roomInfo= self.delegate.getRoomInfo;
|
||||
XPGiftUserInfoModel * userModel = [[XPGiftUserInfoModel alloc] init];
|
||||
userModel.avatar = roomInfo.avatar;
|
||||
userModel.position = @"-1";
|
||||
userModel.uid = roomInfo.uid;
|
||||
[array addObject:userModel];
|
||||
[array addObject:userModel];
|
||||
}
|
||||
}
|
||||
|
||||
if (self.delegate.getRoomInfo.leaveMode) {
|
||||
RoomInfoModel * roomInfo= self.delegate.getRoomInfo;
|
||||
XPGiftUserInfoModel * userModel = [[XPGiftUserInfoModel alloc] init];
|
||||
userModel.avatar = roomInfo.avatar;
|
||||
userModel.position = @"-1";
|
||||
userModel.uid = roomInfo.uid;
|
||||
[array addObject:userModel];
|
||||
} else if (self.delegate.getRoomInfo.type == RoomType_Anchor) {
|
||||
RoomInfoModel * roomInfo= self.delegate.getRoomInfo;
|
||||
BOOL hadContainerOwner = NO;
|
||||
@@ -274,222 +298,218 @@ NSString * const kRoomPlayEnterKey = @"kRoomPlayEnterKey";
|
||||
[array addObject:userModel];
|
||||
}
|
||||
}
|
||||
return array;
|
||||
return array;
|
||||
}
|
||||
|
||||
- (MicroQueueModel *)findMySelfMicro:(NSMutableDictionary<NSString *,MicroQueueModel *> *)queue {
|
||||
NSString * uid = [AccountInfoStorage instance].getUid;
|
||||
for (MicroQueueModel * microModel in queue.allValues) {
|
||||
if (microModel.userInfo && microModel.userInfo.uid == uid.integerValue) {
|
||||
return microModel;
|
||||
}
|
||||
}
|
||||
return nil;
|
||||
NSString * uid = [AccountInfoStorage instance].getUid;
|
||||
for (MicroQueueModel * microModel in queue.allValues) {
|
||||
if (microModel.userInfo && microModel.userInfo.uid == uid.integerValue) {
|
||||
return microModel;
|
||||
}
|
||||
}
|
||||
return nil;
|
||||
}
|
||||
|
||||
#pragma mark - RoomGuestDelegate
|
||||
- (void)onMicroQueueUpdate:(NSMutableDictionary<NSString *,MicroQueueModel *> *)queue {
|
||||
MicroQueueModel * model = [self findMySelfMicro:queue];
|
||||
if (model) {
|
||||
self.micButton.hidden = NO;
|
||||
self.micButton.selected = model.microState.micState == MicroMicStateType_Close ? YES : [RtcManager instance].isLocalMuted;
|
||||
self.micButton.enabled = model.microState.micState == MicroMicStateType_Open;
|
||||
if (![ClientConfig shareConfig].canOpen) {
|
||||
self.faceButton.hidden = YES;
|
||||
} else {
|
||||
self.faceButton.hidden = NO;
|
||||
}
|
||||
} else {
|
||||
self.micButton.hidden = YES;
|
||||
MicroQueueModel * model = [self findMySelfMicro:queue];
|
||||
if (model) {
|
||||
self.micButton.hidden = NO;
|
||||
self.micButton.selected = model.microState.micState == MicroMicStateType_Close ? YES : [RtcManager instance].isLocalMuted;
|
||||
self.micButton.enabled = model.microState.micState == MicroMicStateType_Open;
|
||||
self.faceButton.hidden = NO;
|
||||
} else {
|
||||
self.micButton.hidden = YES;
|
||||
self.faceButton.hidden = YES;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
- (void)onRoomEntered {
|
||||
NSInteger unreadCount = [[NIMSDK sharedSDK].conversationManager allUnreadCount];
|
||||
self.messageButton.selected = unreadCount > 0;
|
||||
[self onRoomUpdate];
|
||||
NSInteger unreadCount = [[NIMSDK sharedSDK].conversationManager allUnreadCount];
|
||||
self.messageButton.selected = unreadCount > 0;
|
||||
[self onRoomUpdate];
|
||||
}
|
||||
|
||||
- (void)onRoomUpdate {
|
||||
RoomInfoModel * roomInfo = self.delegate.getRoomInfo;
|
||||
UserInfoModel * userInfo = self.delegate.getUserInfo;
|
||||
|
||||
if (userInfo.isFirstCharge) {
|
||||
[self.giftButton setImage:[UIImage imageNamed:@"room_menu_gift_first_recharge"] forState:UIControlStateNormal];
|
||||
[self.giftButton setImage:[UIImage imageNamed:@"room_menu_gift_first_recharge"] forState:UIControlStateSelected];
|
||||
} else {
|
||||
[self.giftButton setImage:[UIImage imageNamed:@"room_menu_gift"] forState:UIControlStateNormal];
|
||||
[self.giftButton setImage:[UIImage imageNamed:@"room_menu_gift"] forState:UIControlStateSelected];
|
||||
}
|
||||
|
||||
if (![ClientConfig shareConfig].canOpen) {
|
||||
[self.giftButton setImage:[UIImage imageNamed:@"room_menu_gift1"] forState:UIControlStateNormal];
|
||||
[self.giftButton setImage:[UIImage imageNamed:@"room_menu_gift1"] forState:UIControlStateSelected];
|
||||
}
|
||||
|
||||
self.arrangeMicButton.hidden = roomInfo.roomModeType != RoomModeType_Open_Micro_Mode;
|
||||
if (roomInfo.roomModeType == RoomModeType_Open_Blind || roomInfo.roomModeType == RoomModeType_Open_PK_Mode || roomInfo.roomModeType == RoomModeType_Open_Micro_Mode) {
|
||||
NIMChatroomMembersByIdsRequest *request = [[NIMChatroomMembersByIdsRequest alloc]init];
|
||||
request.roomId = [NSString stringWithFormat:@"%ld", roomInfo.roomId];
|
||||
request.userIds = @[[AccountInfoStorage instance].getUid];
|
||||
[[NIMSDK sharedSDK].chatroomManager fetchChatroomMembersByIds:request completion:^(NSError * _Nullable error, NSArray<NIMChatroomMember *> * _Nullable members) {
|
||||
if (error == nil) {
|
||||
NIMChatroomMember * member = members.firstObject;
|
||||
if (member.type == NIMChatroomMemberTypeCreator || member.type == NIMChatroomMemberTypeManager) {
|
||||
self.arrangeMicButton.hidden = NO;
|
||||
return;
|
||||
}
|
||||
}
|
||||
self.arrangeMicButton.hidden = YES;
|
||||
}];
|
||||
}
|
||||
RoomInfoModel * roomInfo = self.delegate.getRoomInfo;
|
||||
UserInfoModel * userInfo = self.delegate.getUserInfo;
|
||||
|
||||
if (userInfo.isFirstCharge) {
|
||||
[self.giftButton setImage:[UIImage imageNamed:@"room_menu_gift_first_recharge"] forState:UIControlStateNormal];
|
||||
[self.giftButton setImage:[UIImage imageNamed:@"room_menu_gift_first_recharge"] forState:UIControlStateSelected];
|
||||
} else {
|
||||
[self.giftButton setImage:[UIImage imageNamed:@"room_menu_gift"] forState:UIControlStateNormal];
|
||||
[self.giftButton setImage:[UIImage imageNamed:@"room_menu_gift"] forState:UIControlStateSelected];
|
||||
}
|
||||
|
||||
self.arrangeMicButton.hidden = roomInfo.roomModeType != RoomModeType_Open_Micro_Mode;
|
||||
if (roomInfo.roomModeType == RoomModeType_Open_Blind || roomInfo.roomModeType == RoomModeType_Open_PK_Mode || roomInfo.roomModeType == RoomModeType_Open_Micro_Mode) {
|
||||
NIMChatroomMembersByIdsRequest *request = [[NIMChatroomMembersByIdsRequest alloc]init];
|
||||
request.roomId = [NSString stringWithFormat:@"%ld", roomInfo.roomId];
|
||||
request.userIds = @[[AccountInfoStorage instance].getUid];
|
||||
[[NIMSDK sharedSDK].chatroomManager fetchChatroomMembersByIds:request completion:^(NSError * _Nullable error, NSArray<NIMChatroomMember *> * _Nullable members) {
|
||||
if (error == nil) {
|
||||
NIMChatroomMember * member = members.firstObject;
|
||||
if (member.type == NIMChatroomMemberTypeCreator || member.type == NIMChatroomMemberTypeManager) {
|
||||
self.arrangeMicButton.hidden = NO;
|
||||
return;
|
||||
}
|
||||
}
|
||||
self.arrangeMicButton.hidden = YES;
|
||||
}];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)handleNIMCustomMessage:(NIMMessage *)message {
|
||||
NIMCustomObject *obj = (NIMCustomObject *)message.messageObject;
|
||||
if (obj.attachment != nil && [obj.attachment isKindOfClass:[AttachmentModel class]]) {
|
||||
AttachmentModel *attachment = (AttachmentModel *)obj.attachment;
|
||||
if (attachment.first == CustomMessageType_Arrange_Mic || attachment.first == CustomMessageType_Room_PK) {
|
||||
if (attachment.second == Custom_Message_Sub_Arrange_Mic_Non_Empty || attachment.second == Custom_Message_Sub_Arrange_Mic_Empty || attachment.second == Custom_Message_Sub_Room_PK_Empty || attachment.second == Custom_Message_Sub_Room_PK_Non_Empty) {
|
||||
NIMChatroomMembersByIdsRequest *request = [[NIMChatroomMembersByIdsRequest alloc]init];
|
||||
request.roomId = [NSString stringWithFormat:@"%ld", self.delegate.getRoomInfo.roomId];
|
||||
request.userIds = @[[AccountInfoStorage instance].getUid];
|
||||
[[NIMSDK sharedSDK].chatroomManager fetchChatroomMembersByIds:request completion:^(NSError * _Nullable error, NSArray<NIMChatroomMember *> * _Nullable members) {
|
||||
NIMChatroomMember * member;
|
||||
if (error == nil) {
|
||||
member = members.firstObject;
|
||||
}
|
||||
if (member.type == NIMChatroomMemberTypeCreator || member.type == NIMChatroomMemberTypeManager) {
|
||||
self.arrangeMicButton.selected = (attachment.second == Custom_Message_Sub_Arrange_Mic_Non_Empty || attachment.second == Custom_Message_Sub_Room_PK_Non_Empty);
|
||||
};
|
||||
}];
|
||||
}
|
||||
}
|
||||
}
|
||||
NIMCustomObject *obj = (NIMCustomObject *)message.messageObject;
|
||||
if (obj.attachment != nil && [obj.attachment isKindOfClass:[AttachmentModel class]]) {
|
||||
AttachmentModel *attachment = (AttachmentModel *)obj.attachment;
|
||||
if (attachment.first == CustomMessageType_Arrange_Mic || attachment.first == CustomMessageType_Room_PK) {
|
||||
if (attachment.second == Custom_Message_Sub_Arrange_Mic_Non_Empty || attachment.second == Custom_Message_Sub_Arrange_Mic_Empty || attachment.second == Custom_Message_Sub_Room_PK_Empty || attachment.second == Custom_Message_Sub_Room_PK_Non_Empty) {
|
||||
NIMChatroomMembersByIdsRequest *request = [[NIMChatroomMembersByIdsRequest alloc]init];
|
||||
request.roomId = [NSString stringWithFormat:@"%ld", self.delegate.getRoomInfo.roomId];
|
||||
request.userIds = @[[AccountInfoStorage instance].getUid];
|
||||
[[NIMSDK sharedSDK].chatroomManager fetchChatroomMembersByIds:request completion:^(NSError * _Nullable error, NSArray<NIMChatroomMember *> * _Nullable members) {
|
||||
NIMChatroomMember * member;
|
||||
if (error == nil) {
|
||||
member = members.firstObject;
|
||||
}
|
||||
if (member.type == NIMChatroomMemberTypeCreator || member.type == NIMChatroomMemberTypeManager) {
|
||||
self.arrangeMicButton.selected = (attachment.second == Custom_Message_Sub_Arrange_Mic_Non_Empty || attachment.second == Custom_Message_Sub_Room_PK_Non_Empty);
|
||||
};
|
||||
}];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
- (void)handleNIMNotificationMessage:(NIMMessage *)message {
|
||||
NIMNotificationObject *notiMsg = (NIMNotificationObject *)message.messageObject;
|
||||
NIMChatroomNotificationContent *content = (NIMChatroomNotificationContent *)notiMsg.content;
|
||||
switch (content.eventType) {
|
||||
case NIMChatroomEventTypeAddManager:
|
||||
{
|
||||
if (self.delegate.getRoomInfo.roomModeType == RoomModeType_Open_Blind || self.delegate.getRoomInfo.roomModeType == RoomModeType_Open_PK_Mode) {
|
||||
for (NIMChatroomNotificationMember * member in content.targets) {
|
||||
if (member.userId.intValue == [AccountInfoStorage instance].getUid.integerValue) {
|
||||
self.arrangeMicButton.hidden = NO;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case NIMChatroomEventTypeRemoveManager:
|
||||
{
|
||||
if (self.delegate.getRoomInfo.roomModeType == RoomModeType_Open_Blind || self.delegate.getRoomInfo.roomModeType == RoomModeType_Open_PK_Mode) {
|
||||
for (NIMChatroomNotificationMember * member in content.targets) {
|
||||
if (member.userId.intValue == [AccountInfoStorage instance].getUid.integerValue) {
|
||||
self.arrangeMicButton.hidden = YES;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
NIMNotificationObject *notiMsg = (NIMNotificationObject *)message.messageObject;
|
||||
NIMChatroomNotificationContent *content = (NIMChatroomNotificationContent *)notiMsg.content;
|
||||
switch (content.eventType) {
|
||||
case NIMChatroomEventTypeAddManager:
|
||||
{
|
||||
if (self.delegate.getRoomInfo.roomModeType == RoomModeType_Open_Blind || self.delegate.getRoomInfo.roomModeType == RoomModeType_Open_PK_Mode) {
|
||||
for (NIMChatroomNotificationMember * member in content.targets) {
|
||||
if (member.userId.intValue == [AccountInfoStorage instance].getUid.integerValue) {
|
||||
self.arrangeMicButton.hidden = NO;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case NIMChatroomEventTypeRemoveManager:
|
||||
{
|
||||
if (self.delegate.getRoomInfo.roomModeType == RoomModeType_Open_Blind || self.delegate.getRoomInfo.roomModeType == RoomModeType_Open_PK_Mode) {
|
||||
for (NIMChatroomNotificationMember * member in content.targets) {
|
||||
if (member.userId.intValue == [AccountInfoStorage instance].getUid.integerValue) {
|
||||
self.arrangeMicButton.hidden = YES;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
- (void)addNIMRecentSession:(NIMRecentSession *)session {
|
||||
if (!self.miniMessageView.superview) {
|
||||
[self.superview insertSubview:self.miniMessageView aboveSubview:self];
|
||||
[self.miniMessageView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.centerX.mas_equalTo(self.messageButton);
|
||||
make.bottom.mas_equalTo(self.messageButton.mas_top).offset(-2);
|
||||
make.size.mas_equalTo(CGSizeMake(87, 55));
|
||||
}];
|
||||
}
|
||||
[self.miniMessageView addRecentSession:session];
|
||||
NSInteger unreadCount = [[NIMSDK sharedSDK].conversationManager allUnreadCount];
|
||||
self.messageButton.selected = unreadCount > 0;
|
||||
if (!self.miniMessageView.superview) {
|
||||
[self.superview insertSubview:self.miniMessageView aboveSubview:self];
|
||||
[self.miniMessageView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.centerX.mas_equalTo(self.messageButton);
|
||||
make.bottom.mas_equalTo(self.messageButton.mas_top).offset(-2);
|
||||
make.size.mas_equalTo(CGSizeMake(87, 55));
|
||||
}];
|
||||
}
|
||||
[self.miniMessageView addRecentSession:session];
|
||||
NSInteger unreadCount = [[NIMSDK sharedSDK].conversationManager allUnreadCount];
|
||||
self.messageButton.selected = unreadCount > 0;
|
||||
}
|
||||
|
||||
- (void)removeNIMRecentSession:(NIMRecentSession *)session {
|
||||
NSInteger unreadCount = [[NIMSDK sharedSDK].conversationManager allUnreadCount];
|
||||
self.messageButton.selected = unreadCount > 0;
|
||||
NSInteger unreadCount = [[NIMSDK sharedSDK].conversationManager allUnreadCount];
|
||||
self.messageButton.selected = unreadCount > 0;
|
||||
}
|
||||
|
||||
#pragma mark - XPRoomMessageBubbleViewDelegate
|
||||
- (void)xPRoomMessageBubbleView:(XPRoomMessageBubbleView *)view didSelectSession:(NIMRecentSession *)session {
|
||||
UIViewController * controller = (UIViewController *)self.delegate;
|
||||
XPRoomHalfMessageView *halfMessageView = [[XPRoomHalfMessageView alloc] initWithFrame:CGRectMake(0, KScreenHeight, KScreenWidth, KScreenHeight) controller:controller];
|
||||
halfMessageView.chatUserId = session.session.sessionId;
|
||||
[controller.view addSubview:halfMessageView];
|
||||
[UIView animateWithDuration:.35 animations:^{
|
||||
CGRect rect = halfMessageView.frame;
|
||||
rect.origin.y = 0;
|
||||
halfMessageView.frame = rect;
|
||||
}];
|
||||
UIViewController * controller = (UIViewController *)self.delegate;
|
||||
XPRoomHalfMessageView *halfMessageView = [[XPRoomHalfMessageView alloc] initWithFrame:CGRectMake(0, KScreenHeight, KScreenWidth, KScreenHeight) controller:controller];
|
||||
halfMessageView.chatUserId = session.session.sessionId;
|
||||
[controller.view addSubview:halfMessageView];
|
||||
[UIView animateWithDuration:.35 animations:^{
|
||||
CGRect rect = halfMessageView.frame;
|
||||
rect.origin.y = 0;
|
||||
halfMessageView.frame = rect;
|
||||
}];
|
||||
}
|
||||
|
||||
#pragma mark - Getters And Setters
|
||||
- (UIButton *)inputButton {
|
||||
if (!_inputButton) {
|
||||
_inputButton = [UIButton buttonWithType:UIButtonTypeCustom];
|
||||
if ([ClientConfig shareConfig].canOpen) {
|
||||
[_inputButton setTitle:YMLocalizedString(@"XPRoomMenuContainerView2") forState:UIControlStateNormal];
|
||||
} else {
|
||||
[_inputButton setTitle:YMLocalizedString(@"XPRoomMenuContainerView3") forState:UIControlStateNormal];
|
||||
}
|
||||
|
||||
[_inputButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
|
||||
_inputButton.titleLabel.font = [UIFont systemFontOfSize:15];
|
||||
_inputButton.layer.masksToBounds = YES;
|
||||
_inputButton.layer.cornerRadius = 15;
|
||||
_inputButton.backgroundColor = UIColorRGBAlpha(0xFFFFFF, 0.3);
|
||||
_inputButton.tag = XPRoomMenuItemType_Input;
|
||||
[_inputButton addTarget:self action:@selector(menuButtonAction:) forControlEvents:UIControlEventTouchUpInside];
|
||||
}
|
||||
return _inputButton;
|
||||
if (!_inputButton) {
|
||||
_inputButton = [UIButton buttonWithType:UIButtonTypeCustom];
|
||||
[_inputButton setTitle:YMLocalizedString(@"XPRoomMenuContainerView2") forState:UIControlStateNormal];
|
||||
[_inputButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
|
||||
_inputButton.titleLabel.font = [UIFont systemFontOfSize:12];
|
||||
_inputButton.layer.masksToBounds = YES;
|
||||
_inputButton.layer.cornerRadius = 15;
|
||||
[_inputButton setBackgroundImage:[UIImage imageNamed:@"room_menu_send_bg"] forState:UIControlStateNormal];
|
||||
_inputButton.tag = XPRoomMenuItemType_Input;
|
||||
[_inputButton addTarget:self action:@selector(menuButtonAction:) forControlEvents:UIControlEventTouchUpInside];
|
||||
}
|
||||
return _inputButton;
|
||||
}
|
||||
|
||||
- (UIButton *)micButton {
|
||||
if (!_micButton) {
|
||||
_micButton = [UIButton buttonWithType:UIButtonTypeCustom];
|
||||
[_micButton setImage:[UIImage imageNamed:@"room_menu_mic_open"] forState:UIControlStateNormal];
|
||||
[_micButton setImage:[UIImage imageNamed:@"room_menu_mic_close"] forState:UIControlStateSelected];
|
||||
[_micButton setImage:[UIImage imageNamed:@"room_menu_mic_close"] forState:UIControlStateDisabled | UIControlStateSelected];
|
||||
_micButton.tag = XPRoomMenuItemType_Mic;
|
||||
[_micButton addTarget:self action:@selector(menuButtonAction:) forControlEvents:UIControlEventTouchUpInside];
|
||||
_micButton.hidden = YES;
|
||||
}
|
||||
return _micButton;
|
||||
if (!_micButton) {
|
||||
_micButton = [UIButton buttonWithType:UIButtonTypeCustom];
|
||||
[_micButton setImage:[UIImage imageNamed:@"room_menu_mic_open"] forState:UIControlStateNormal];
|
||||
[_micButton setImage:[UIImage imageNamed:@"room_menu_mic_close"] forState:UIControlStateSelected];
|
||||
[_micButton setImage:[UIImage imageNamed:@"room_menu_mic_close"] forState:UIControlStateDisabled | UIControlStateSelected];
|
||||
_micButton.tag = XPRoomMenuItemType_Mic;
|
||||
[_micButton addTarget:self action:@selector(menuButtonAction:) forControlEvents:UIControlEventTouchUpInside];
|
||||
_micButton.hidden = YES;
|
||||
}
|
||||
return _micButton;
|
||||
}
|
||||
|
||||
- (UIButton *)voiceButton {
|
||||
if (!_voiceButton) {
|
||||
_voiceButton = [UIButton buttonWithType:UIButtonTypeCustom];
|
||||
[_voiceButton setImage:[UIImage imageNamed:@"room_menu_voice_open"] forState:UIControlStateNormal];
|
||||
[_voiceButton setImage:[UIImage imageNamed:@"room_menu_voice_close"] forState:UIControlStateSelected];
|
||||
_voiceButton.tag = XPRoomMenuItemType_Voice;
|
||||
[_voiceButton addTarget:self action:@selector(menuButtonAction:) forControlEvents:UIControlEventTouchUpInside];
|
||||
}
|
||||
return _voiceButton;
|
||||
}
|
||||
|
||||
- (UIButton *)faceButton {
|
||||
if (!_faceButton) {
|
||||
_faceButton = [UIButton buttonWithType:UIButtonTypeCustom];
|
||||
[_faceButton setImage:[UIImage imageNamed:@"room_menu_face"] forState:UIControlStateNormal];
|
||||
[_faceButton setImage:[UIImage imageNamed:@"room_menu_face"] forState:UIControlStateSelected];
|
||||
_faceButton.tag = XPRoomMenuItemType_Face;
|
||||
[_faceButton addTarget:self action:@selector(menuButtonAction:) forControlEvents:UIControlEventTouchUpInside];
|
||||
_faceButton.hidden = YES;
|
||||
}
|
||||
return _faceButton;
|
||||
if (!_faceButton) {
|
||||
_faceButton = [UIButton buttonWithType:UIButtonTypeCustom];
|
||||
[_faceButton setImage:[UIImage imageNamed:@"room_menu_face"] forState:UIControlStateNormal];
|
||||
[_faceButton setImage:[UIImage imageNamed:@"room_menu_face"] forState:UIControlStateSelected];
|
||||
_faceButton.tag = XPRoomMenuItemType_Face;
|
||||
[_faceButton addTarget:self action:@selector(menuButtonAction:) forControlEvents:UIControlEventTouchUpInside];
|
||||
_faceButton.hidden = YES;
|
||||
}
|
||||
return _faceButton;
|
||||
}
|
||||
|
||||
- (UIButton *)messageButton {
|
||||
if (!_messageButton) {
|
||||
_messageButton = [UIButton buttonWithType:UIButtonTypeCustom];
|
||||
[_messageButton setImage:[UIImage imageNamed:@"room_menu_message"] forState:UIControlStateNormal];
|
||||
[_messageButton setImage:[UIImage imageNamed:@"room_menu_new_message"] forState:UIControlStateSelected];
|
||||
_messageButton.tag = XPRoomMenuItemType_Message;
|
||||
[_messageButton addTarget:self action:@selector(menuButtonAction:) forControlEvents:UIControlEventTouchUpInside];
|
||||
}
|
||||
return _messageButton;
|
||||
if (!_messageButton) {
|
||||
_messageButton = [UIButton buttonWithType:UIButtonTypeCustom];
|
||||
[_messageButton setImage:[UIImage imageNamed:@"room_menu_message"] forState:UIControlStateNormal];
|
||||
[_messageButton setImage:[UIImage imageNamed:@"room_menu_new_message"] forState:UIControlStateSelected];
|
||||
_messageButton.tag = XPRoomMenuItemType_Message;
|
||||
[_messageButton addTarget:self action:@selector(menuButtonAction:) forControlEvents:UIControlEventTouchUpInside];
|
||||
}
|
||||
return _messageButton;
|
||||
}
|
||||
|
||||
- (UIButton *)moreButton {
|
||||
@@ -514,54 +534,54 @@ NSString * const kRoomPlayEnterKey = @"kRoomPlayEnterKey";
|
||||
}
|
||||
|
||||
- (UIButton *)giftButton {
|
||||
if (!_giftButton) {
|
||||
_giftButton = [UIButton buttonWithType:UIButtonTypeCustom];
|
||||
[_giftButton setImage:[UIImage imageNamed:@"room_menu_gift"] forState:UIControlStateNormal];
|
||||
[_giftButton setImage:[UIImage imageNamed:@"room_menu_gift"] forState:UIControlStateSelected];
|
||||
_giftButton.tag = XPRoomMenuItemType_Gift;
|
||||
[_giftButton addTarget:self action:@selector(menuButtonAction:) forControlEvents:UIControlEventTouchUpInside];
|
||||
}
|
||||
return _giftButton;
|
||||
if (!_giftButton) {
|
||||
_giftButton = [UIButton buttonWithType:UIButtonTypeCustom];
|
||||
[_giftButton setImage:[UIImage imageNamed:@"room_menu_gift"] forState:UIControlStateNormal];
|
||||
[_giftButton setImage:[UIImage imageNamed:@"room_menu_gift"] forState:UIControlStateSelected];
|
||||
_giftButton.tag = XPRoomMenuItemType_Gift;
|
||||
[_giftButton addTarget:self action:@selector(menuButtonAction:) forControlEvents:UIControlEventTouchUpInside];
|
||||
}
|
||||
return _giftButton;
|
||||
}
|
||||
|
||||
- (UIStackView *)stackView {
|
||||
if (!_stackView) {
|
||||
_stackView = [[UIStackView alloc] init];
|
||||
_stackView.axis = UILayoutConstraintAxisHorizontal;
|
||||
_stackView.distribution = UIStackViewDistributionFill;
|
||||
_stackView.alignment = UIStackViewAlignmentCenter;
|
||||
_stackView.spacing = 8;
|
||||
}
|
||||
return _stackView;
|
||||
if (!_stackView) {
|
||||
_stackView = [[UIStackView alloc] init];
|
||||
_stackView.axis = UILayoutConstraintAxisHorizontal;
|
||||
_stackView.distribution = UIStackViewDistributionFill;
|
||||
_stackView.alignment = UIStackViewAlignmentCenter;
|
||||
_stackView.spacing = 12;
|
||||
}
|
||||
return _stackView;
|
||||
}
|
||||
|
||||
- (UIButton *)arrangeMicButton {
|
||||
if (!_arrangeMicButton) {
|
||||
_arrangeMicButton = [UIButton buttonWithType:UIButtonTypeCustom];
|
||||
[_arrangeMicButton setImage:[UIImage imageNamed:@"room_menu_arrange_mic"] forState:UIControlStateNormal];
|
||||
[_arrangeMicButton setImage:[UIImage imageNamed:@"room_menu_arrange_mic_new"] forState:UIControlStateSelected];
|
||||
_arrangeMicButton.tag = XPRoomMenuItemType_ArrangeMic;
|
||||
[_arrangeMicButton addTarget:self action:@selector(menuButtonAction:) forControlEvents:UIControlEventTouchUpInside];
|
||||
_arrangeMicButton.hidden = YES;
|
||||
}
|
||||
return _arrangeMicButton;
|
||||
if (!_arrangeMicButton) {
|
||||
_arrangeMicButton = [UIButton buttonWithType:UIButtonTypeCustom];
|
||||
[_arrangeMicButton setImage:[UIImage imageNamed:@"room_menu_arrange_mic"] forState:UIControlStateNormal];
|
||||
[_arrangeMicButton setImage:[UIImage imageNamed:@"room_menu_arrange_mic_new"] forState:UIControlStateSelected];
|
||||
_arrangeMicButton.tag = XPRoomMenuItemType_ArrangeMic;
|
||||
[_arrangeMicButton addTarget:self action:@selector(menuButtonAction:) forControlEvents:UIControlEventTouchUpInside];
|
||||
_arrangeMicButton.hidden = YES;
|
||||
}
|
||||
return _arrangeMicButton;
|
||||
}
|
||||
|
||||
- (UIScrollView *)scrollView {
|
||||
if (!_scrollView) {
|
||||
_scrollView = [[UIScrollView alloc] init];
|
||||
_scrollView.backgroundColor = [UIColor clearColor];
|
||||
_scrollView.showsHorizontalScrollIndicator = NO;
|
||||
}
|
||||
return _scrollView;
|
||||
if (!_scrollView) {
|
||||
_scrollView = [[UIScrollView alloc] init];
|
||||
_scrollView.backgroundColor = [UIColor clearColor];
|
||||
_scrollView.showsHorizontalScrollIndicator = NO;
|
||||
}
|
||||
return _scrollView;
|
||||
}
|
||||
|
||||
- (XPRoomMessageBubbleView *)miniMessageView {
|
||||
if (!_miniMessageView) {
|
||||
_miniMessageView = [[XPRoomMessageBubbleView alloc] init];
|
||||
_miniMessageView.delegate = self;
|
||||
}
|
||||
return _miniMessageView;
|
||||
if (!_miniMessageView) {
|
||||
_miniMessageView = [[XPRoomMessageBubbleView alloc] init];
|
||||
_miniMessageView.delegate = self;
|
||||
}
|
||||
return _miniMessageView;
|
||||
}
|
||||
|
||||
@end
|
||||
|
@@ -11,7 +11,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface XPRoomSendTextView : UIView
|
||||
|
||||
- (instancetype) :(id<RoomHostDelegate>)delegate;
|
||||
- (instancetype)initWithDelegate:(id<RoomHostDelegate>)delegate;
|
||||
///输入框
|
||||
@property (nonatomic, strong, readonly) UITextField *editTextFiled;
|
||||
///发小消息的弹框
|
||||
|
@@ -1,8 +1,8 @@
|
||||
//
|
||||
// YMRoomSendTextView.m
|
||||
// YUMI
|
||||
// XPRoomSendTextView.m
|
||||
// xplan-ios
|
||||
//
|
||||
// Created by YUMI on 2021/10/29.
|
||||
// Created by 冯硕 on 2021/10/29.
|
||||
//
|
||||
|
||||
#import "XPRoomSendTextView.h"
|
||||
@@ -13,11 +13,8 @@
|
||||
#import <IQKeyboardManager/IQKeyboardManager.h>
|
||||
///Tool
|
||||
#import "ThemeColor+Room.h"
|
||||
#import "YUMIMacroUitls.h"
|
||||
#import "UIImage+Utils.h"
|
||||
#import "YUMIConstant.h"
|
||||
#import "AccountInfoStorage.h"
|
||||
#import "NSMutableDictionary+Saft.h"
|
||||
///Model
|
||||
#import "XPMessageRemoteExtModel.h"
|
||||
#import "UserInfoModel.h"
|
||||
@@ -46,39 +43,39 @@
|
||||
@implementation XPRoomSendTextView
|
||||
|
||||
- (void)dealloc {
|
||||
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
||||
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
||||
}
|
||||
|
||||
- (instancetype)initWithDelegate:(id<RoomHostDelegate>)delegate {
|
||||
self = [super initWithFrame:CGRectMake(0, KScreenHeight - 40, KScreenWidth, 40)];
|
||||
if (self) {
|
||||
self.delegate = delegate;
|
||||
[self addNotification];
|
||||
[self initSubViews];
|
||||
[self initSubViewConstraints];
|
||||
self = [super initWithFrame:CGRectMake(0, KScreenHeight - 40, KScreenWidth, 40)];
|
||||
if (self) {
|
||||
self.delegate = delegate;
|
||||
[self addNotification];
|
||||
[self initSubViews];
|
||||
[self initSubViewConstraints];
|
||||
[IQKeyboardManager sharedManager].enable = NO;
|
||||
}
|
||||
return self;
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
#pragma mark - Response
|
||||
|
||||
- (void)sendButtonDidClick:(UIButton *)sender {
|
||||
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;
|
||||
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;
|
||||
extModel.fromSayHelloChannel = userInfo.fromSayHelloChannel;
|
||||
|
||||
NIMMessage * message = [[NIMMessage alloc] init];
|
||||
message.text = self.inputMessage;
|
||||
@@ -99,25 +96,26 @@
|
||||
}
|
||||
id uidStr = [uidArray toJSONObject];
|
||||
id nickStr = [nickArray toJSONObject];
|
||||
[remoteExt safeSetObject:uidStr forKey:@"atUids"];
|
||||
[remoteExt safeSetObject:nickStr forKey:@"atNames"];
|
||||
[remoteExt setObject:uidStr forKey:@"atUids"];
|
||||
[remoteExt setObject:nickStr forKey:@"atNames"];
|
||||
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) {
|
||||
self.editTextFiled.text = @"";
|
||||
[self.editTextFiled resignFirstResponder];
|
||||
///网易易盾 拦截高风险
|
||||
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];
|
||||
//构造会话
|
||||
self.sendButton.enabled = NO;
|
||||
NIMSession *session = [NIMSession session:sessionId type:NIMSessionTypeChatroom];
|
||||
[[NIMSDK sharedSDK].chatManager sendMessage:message toSession:session completion:^(NSError * _Nullable error) {
|
||||
self.editTextFiled.text = @"";
|
||||
[self.editTextFiled resignFirstResponder];
|
||||
[self.atUids removeAllObjects];
|
||||
[self.atNames removeAllObjects];
|
||||
self.inputMessage = nil;
|
||||
}];
|
||||
}];
|
||||
}
|
||||
|
||||
- (void)keyboardWillShow:(NSNotification *)notification {
|
||||
@@ -130,11 +128,13 @@
|
||||
CGRect endKeyboardRect = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
|
||||
CGFloat h = endKeyboardRect.size.height;
|
||||
[UIView animateWithDuration:duration animations:^{
|
||||
[self mas_remakeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.right.equalTo(self.superview);
|
||||
make.height.equalTo(@40);
|
||||
make.bottom.equalTo(self.superview).offset(-h);
|
||||
}];
|
||||
if(self.superview){
|
||||
[self mas_remakeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.right.equalTo(self.superview);
|
||||
make.height.equalTo(@40);
|
||||
make.bottom.equalTo(self.superview).offset(-h);
|
||||
}];
|
||||
}
|
||||
[UIView setAnimationBeginsFromCurrentState:YES];
|
||||
[UIView setAnimationCurve:[curve intValue]];
|
||||
self.center = CGPointMake(self.center.x, keyBoardEndY - statusbarHeight - self.bounds.size.height/2.0);
|
||||
@@ -155,68 +155,68 @@
|
||||
}
|
||||
|
||||
-(void)textFieldEditChanged:(NSNotification *)notification{
|
||||
UITextField *textField = (UITextField *)notification.object;
|
||||
NSString *toBeString = textField.text;
|
||||
NSString *lang = [textField.textInputMode primaryLanguage];
|
||||
if ([lang isEqualToString:@"zh-Hans"]){// 简体中文输入
|
||||
//获取高亮部分
|
||||
UITextRange *selectedRange = [textField markedTextRange];
|
||||
UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0];
|
||||
// 没有高亮选择的字,则对已输入的文字进行字数统计和限制
|
||||
if (!position){
|
||||
if (toBeString.length > MAX_STARWORDS_LENGTH){
|
||||
NSRange rangeIndex = [toBeString rangeOfComposedCharacterSequenceAtIndex:MAX_STARWORDS_LENGTH];
|
||||
if (rangeIndex.length == 1){
|
||||
|
||||
textField.text = [toBeString substringToIndex:MAX_STARWORDS_LENGTH];
|
||||
}else{
|
||||
NSRange rangeRange = [toBeString rangeOfComposedCharacterSequencesForRange:NSMakeRange(0, MAX_STARWORDS_LENGTH)];
|
||||
textField.text = [toBeString substringWithRange:rangeRange];
|
||||
}
|
||||
}
|
||||
}
|
||||
}else{ // 中文输入法以外的直接对其统计限制即可,不考虑其他语种情况
|
||||
if (toBeString.length > MAX_STARWORDS_LENGTH){
|
||||
NSRange rangeIndex = [toBeString rangeOfComposedCharacterSequenceAtIndex:MAX_STARWORDS_LENGTH];
|
||||
if (rangeIndex.length == 1){
|
||||
|
||||
textField.text = [toBeString substringToIndex:MAX_STARWORDS_LENGTH];
|
||||
}else{
|
||||
|
||||
NSRange rangeRange = [toBeString rangeOfComposedCharacterSequencesForRange:NSMakeRange(0, MAX_STARWORDS_LENGTH)];
|
||||
textField.text = [toBeString substringWithRange:rangeRange];
|
||||
}
|
||||
}
|
||||
}
|
||||
self.inputMessage = textField.text;
|
||||
if (self.inputMessage.length > 0) {
|
||||
self.sendButton.enabled = YES;
|
||||
} else {
|
||||
self.sendButton.enabled = NO;
|
||||
}
|
||||
UITextField *textField = (UITextField *)notification.object;
|
||||
NSString *toBeString = textField.text;
|
||||
NSString *lang = [textField.textInputMode primaryLanguage];
|
||||
if ([lang isEqualToString:@"zh-Hans"]){// 简体中文输入
|
||||
//获取高亮部分
|
||||
UITextRange *selectedRange = [textField markedTextRange];
|
||||
UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0];
|
||||
// 没有高亮选择的字,则对已输入的文字进行字数统计和限制
|
||||
if (!position){
|
||||
if (toBeString.length > MAX_STARWORDS_LENGTH){
|
||||
NSRange rangeIndex = [toBeString rangeOfComposedCharacterSequenceAtIndex:MAX_STARWORDS_LENGTH];
|
||||
if (rangeIndex.length == 1){
|
||||
|
||||
textField.text = [toBeString substringToIndex:MAX_STARWORDS_LENGTH];
|
||||
}else{
|
||||
NSRange rangeRange = [toBeString rangeOfComposedCharacterSequencesForRange:NSMakeRange(0, MAX_STARWORDS_LENGTH)];
|
||||
textField.text = [toBeString substringWithRange:rangeRange];
|
||||
}
|
||||
}
|
||||
}
|
||||
}else{ // 中文输入法以外的直接对其统计限制即可,不考虑其他语种情况
|
||||
if (toBeString.length > MAX_STARWORDS_LENGTH){
|
||||
NSRange rangeIndex = [toBeString rangeOfComposedCharacterSequenceAtIndex:MAX_STARWORDS_LENGTH];
|
||||
if (rangeIndex.length == 1){
|
||||
|
||||
textField.text = [toBeString substringToIndex:MAX_STARWORDS_LENGTH];
|
||||
}else{
|
||||
|
||||
NSRange rangeRange = [toBeString rangeOfComposedCharacterSequencesForRange:NSMakeRange(0, MAX_STARWORDS_LENGTH)];
|
||||
textField.text = [toBeString substringWithRange:rangeRange];
|
||||
}
|
||||
}
|
||||
}
|
||||
self.inputMessage = textField.text;
|
||||
if (self.inputMessage.length > 0) {
|
||||
self.sendButton.enabled = YES;
|
||||
} else {
|
||||
self.sendButton.enabled = NO;
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark - Public Method
|
||||
+ (instancetype)showTextView:(UIView *)view delegate:(id<RoomHostDelegate>)delegate atUid:(NSString *)uid atNick:(NSString *)nick {
|
||||
__block XPRoomSendTextView * textView;
|
||||
[view.subviews enumerateObjectsUsingBlock:^(__kindof UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
|
||||
if ([obj isKindOfClass:[XPRoomSendTextView class]]) {
|
||||
textView = obj;
|
||||
*stop = YES;
|
||||
}
|
||||
}];
|
||||
if (textView == nil) {
|
||||
textView = [[XPRoomSendTextView alloc] initWithDelegate:delegate];
|
||||
[view addSubview:textView];
|
||||
}
|
||||
textView.hidden = NO;
|
||||
__block XPRoomSendTextView * textView;
|
||||
[view.subviews enumerateObjectsUsingBlock:^(__kindof UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
|
||||
if ([obj isKindOfClass:[XPRoomSendTextView class]]) {
|
||||
textView = obj;
|
||||
*stop = YES;
|
||||
}
|
||||
}];
|
||||
if (textView == nil) {
|
||||
textView = [[XPRoomSendTextView alloc] initWithDelegate:delegate];
|
||||
[view addSubview:textView];
|
||||
}
|
||||
textView.hidden = NO;
|
||||
|
||||
|
||||
[textView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.right.bottom.mas_equalTo(view);
|
||||
make.height.mas_equalTo(40);
|
||||
}];
|
||||
[textView.editTextFiled becomeFirstResponder];
|
||||
[textView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.right.bottom.mas_equalTo(view);
|
||||
make.height.mas_equalTo(40);
|
||||
}];
|
||||
[textView.editTextFiled becomeFirstResponder];
|
||||
if (nick) {
|
||||
[textView.atUids addObject:uid];
|
||||
[textView.atNames addObject:[NSString stringWithFormat:@"@%@", nick]];
|
||||
@@ -224,75 +224,75 @@
|
||||
textView.inputMessage = textView.editTextFiled.text;
|
||||
textView.sendButton.enabled = YES;
|
||||
}
|
||||
return textView;
|
||||
return textView;
|
||||
}
|
||||
|
||||
#pragma mark - Private Method
|
||||
- (void)initSubViews {
|
||||
self.backgroundColor = [DJDKMIMOMColor appBackgroundColor];
|
||||
[self addSubview:self.stackView];
|
||||
[self.stackView addArrangedSubview:self.editTextFiled];
|
||||
[self.stackView addArrangedSubview:self.sendButton];
|
||||
self.backgroundColor = [DJDKMIMOMColor appBackgroundColor];
|
||||
[self addSubview:self.stackView];
|
||||
[self.stackView addArrangedSubview:self.editTextFiled];
|
||||
[self.stackView addArrangedSubview:self.sendButton];
|
||||
}
|
||||
|
||||
- (void)initSubViewConstraints {
|
||||
[self.stackView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.mas_equalTo(self).offset(8);
|
||||
make.right.mas_equalTo(self).offset(-5);
|
||||
make.top.bottom.mas_equalTo(self);
|
||||
}];
|
||||
|
||||
[self.sendButton mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.width.mas_equalTo(50);
|
||||
make.top.bottom.mas_equalTo(self).inset(5);
|
||||
}];
|
||||
[self.stackView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.mas_equalTo(self).offset(8);
|
||||
make.right.mas_equalTo(self).offset(-5);
|
||||
make.top.bottom.mas_equalTo(self);
|
||||
}];
|
||||
|
||||
[self.sendButton mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.width.mas_equalTo(50);
|
||||
make.top.bottom.mas_equalTo(self).inset(5);
|
||||
}];
|
||||
}
|
||||
|
||||
- (void)addNotification {
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHidden:) name:UIKeyboardWillHideNotification object:nil];
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldEditChanged:) name:UITextFieldTextDidChangeNotification object:self.editTextFiled];
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHidden:) name:UIKeyboardWillHideNotification object:nil];
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldEditChanged:) name:UITextFieldTextDidChangeNotification object:self.editTextFiled];
|
||||
}
|
||||
|
||||
#pragma mark - Getters And Setters
|
||||
- (UITextField *)editTextFiled{
|
||||
if (!_editTextFiled) {
|
||||
_editTextFiled = [[UITextField alloc] init];
|
||||
NSAttributedString * attribute = [[NSAttributedString alloc] initWithString:YMLocalizedString(@"XPRoomSendTextView0") attributes:@{NSFontAttributeName : [UIFont systemFontOfSize:15], NSForegroundColorAttributeName : [DJDKMIMOMColor secondTextColor]}];
|
||||
_editTextFiled.attributedPlaceholder = attribute;
|
||||
_editTextFiled.borderStyle = UITextBorderStyleNone;
|
||||
_editTextFiled.textColor = [DJDKMIMOMColor alertTitleColor];
|
||||
_editTextFiled.font = [UIFont systemFontOfSize:15];
|
||||
[_editTextFiled setContentHuggingPriority:UILayoutPriorityDefaultLow forAxis:UILayoutConstraintAxisHorizontal];
|
||||
|
||||
}
|
||||
return _editTextFiled;
|
||||
if (!_editTextFiled) {
|
||||
_editTextFiled = [[UITextField alloc] init];
|
||||
NSAttributedString * attribute = [[NSAttributedString alloc] initWithString:YMLocalizedString(@"XPRoomSendTextView0") attributes:@{NSFontAttributeName : [UIFont systemFontOfSize:15], NSForegroundColorAttributeName : [DJDKMIMOMColor secondTextColor]}];
|
||||
_editTextFiled.attributedPlaceholder = attribute;
|
||||
_editTextFiled.borderStyle = UITextBorderStyleNone;
|
||||
_editTextFiled.textColor = [DJDKMIMOMColor alertTitleColor];
|
||||
_editTextFiled.font = [UIFont systemFontOfSize:15];
|
||||
[_editTextFiled setContentHuggingPriority:UILayoutPriorityDefaultLow forAxis:UILayoutConstraintAxisHorizontal];
|
||||
|
||||
}
|
||||
return _editTextFiled;
|
||||
}
|
||||
- (UIButton *)sendButton{
|
||||
if (!_sendButton) {
|
||||
_sendButton = [[UIButton alloc] init];
|
||||
[_sendButton setTitle:YMLocalizedString(@"XPRoomSendTextView1") forState:UIControlStateNormal];
|
||||
_sendButton.titleLabel.textColor = [DJDKMIMOMColor mainTextColor];
|
||||
_sendButton.titleLabel.font = [UIFont systemFontOfSize:15];
|
||||
[_sendButton setBackgroundImage:[UIImage imageWithColor:[DJDKMIMOMColor disableButtonColor] ]forState:UIControlStateDisabled];
|
||||
[_sendButton setBackgroundImage:[UIImage gradientColorImageFromColors:@[[DJDKMIMOMColor confirmButtonGradientStartColor], [DJDKMIMOMColor confirmButtonGradientEndColor]] gradientType:GradientTypeLeftToRight imgSize:CGSizeMake(10, 10)] forState:UIControlStateNormal];
|
||||
_sendButton.enabled = NO;
|
||||
_sendButton.layer.cornerRadius = 5.0;
|
||||
_sendButton.layer.masksToBounds = YES;
|
||||
[_sendButton addTarget:self action:@selector(sendButtonDidClick:) forControlEvents:UIControlEventTouchUpInside];
|
||||
}
|
||||
return _sendButton;
|
||||
if (!_sendButton) {
|
||||
_sendButton = [[UIButton alloc] init];
|
||||
[_sendButton setTitle:YMLocalizedString(@"XPRoomSendTextView1") forState:UIControlStateNormal];
|
||||
_sendButton.titleLabel.textColor = [DJDKMIMOMColor mainTextColor];
|
||||
_sendButton.titleLabel.font = [UIFont systemFontOfSize:15];
|
||||
[_sendButton setBackgroundImage:[UIImage imageWithColor:[DJDKMIMOMColor disableButtonColor] ]forState:UIControlStateDisabled];
|
||||
[_sendButton setBackgroundImage:[UIImage gradientColorImageFromColors:@[[DJDKMIMOMColor confirmButtonGradientStartColor], [DJDKMIMOMColor confirmButtonGradientEndColor]] gradientType:GradientTypeLeftToRight imgSize:CGSizeMake(10, 10)] forState:UIControlStateNormal];
|
||||
_sendButton.enabled = NO;
|
||||
_sendButton.layer.cornerRadius = 5.0;
|
||||
_sendButton.layer.masksToBounds = YES;
|
||||
[_sendButton addTarget:self action:@selector(sendButtonDidClick:) forControlEvents:UIControlEventTouchUpInside];
|
||||
}
|
||||
return _sendButton;
|
||||
}
|
||||
|
||||
- (UIStackView *)stackView {
|
||||
if (!_stackView) {
|
||||
_stackView = [[UIStackView alloc] init];
|
||||
_stackView.axis = UILayoutConstraintAxisHorizontal;
|
||||
_stackView.distribution = UIStackViewDistributionFill;
|
||||
_stackView.alignment = UIStackViewAlignmentCenter;
|
||||
_stackView.spacing = 10;
|
||||
}
|
||||
return _stackView;
|
||||
if (!_stackView) {
|
||||
_stackView = [[UIStackView alloc] init];
|
||||
_stackView.axis = UILayoutConstraintAxisHorizontal;
|
||||
_stackView.distribution = UIStackViewDistributionFill;
|
||||
_stackView.alignment = UIStackViewAlignmentCenter;
|
||||
_stackView.spacing = 10;
|
||||
}
|
||||
return _stackView;
|
||||
}
|
||||
|
||||
- (NSMutableArray *)atNames {
|
||||
|
@@ -123,12 +123,7 @@
|
||||
redPacket.type = RoomMoreMenuType_Room_redPacket;
|
||||
redPacket.titleColor = [DJDKMIMOMColor roomMoreMenuTextColor];
|
||||
|
||||
XPRoomMoreItemModel * voice = [[XPRoomMoreItemModel alloc] init];
|
||||
voice.title = YMLocalizedString(@"XPMoreMenuPresenter25");
|
||||
voice.imageName = [RtcManager instance].isRemoteMuted ? @"room_more_voice_close" : @"room_more_voice_open";
|
||||
voice.type = RoomMoreMenuType_Room_Voice;
|
||||
voice.titleColor = [DJDKMIMOMColor roomMoreMenuTextColor];
|
||||
voice.isSelected = [RtcManager instance].isRemoteMuted;
|
||||
|
||||
|
||||
XPRoomMoreItemModel * report = [[XPRoomMoreItemModel alloc] init];
|
||||
report.title = YMLocalizedString(@"XPMoreMenuPresenter36");
|
||||
@@ -192,13 +187,13 @@
|
||||
} else {
|
||||
[array addObject:giftEffect];
|
||||
}
|
||||
[array addObject:voice];
|
||||
|
||||
|
||||
if (![ClientConfig shareConfig].canOpen) {
|
||||
[array removeAllObjects];
|
||||
[array addObject:clearScreen];
|
||||
[array addObject:roomSetting];
|
||||
[array addObject:voice];
|
||||
|
||||
}
|
||||
[array addObject:report];
|
||||
[[self getView] getMoreMenuDataSuccess:array];
|
||||
|
@@ -354,9 +354,8 @@ NSString * const kHadQuitOtherRoomKey = @"kHadQuitOtherRoomKey";//是否退出
|
||||
make.left.right.mas_equalTo(self.view);
|
||||
}];
|
||||
[self.menuContainerView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.right.mas_equalTo(self.view);
|
||||
make.bottom.mas_equalTo(-kSafeAreaBottomHeight- 8);
|
||||
make.height.mas_equalTo(40);
|
||||
make.left.right.bottom.mas_equalTo(self.view);
|
||||
make.height.mas_equalTo(52 + kSafeAreaBottomHeight);
|
||||
}];
|
||||
|
||||
[self.activityContainerView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
@@ -404,9 +403,8 @@ NSString * const kHadQuitOtherRoomKey = @"kHadQuitOtherRoomKey";//是否退出
|
||||
make.right.equalTo(self.activityContainerView.mas_left).offset(-10);
|
||||
}];
|
||||
[self.menuContainerView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.right.mas_equalTo(self.anchorScrollView.middleImageView);
|
||||
make.bottom.mas_equalTo(self.anchorScrollView.middleImageView).offset(-kSafeAreaBottomHeight- 8);
|
||||
make.height.mas_equalTo(40);
|
||||
make.left.right.bottom.mas_equalTo(self.anchorScrollView.middleImageView);
|
||||
make.height.mas_equalTo(52 + kSafeAreaBottomHeight);
|
||||
}];
|
||||
[self.activityContainerView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.top.mas_equalTo(self.messageContainerView);
|
||||
|
@@ -1099,7 +1099,7 @@
|
||||
"XPMoreMenuPresenter22" = "邀请粉丝";
|
||||
"XPMoreMenuPresenter23" = "发佈广播";
|
||||
"XPMoreMenuPresenter24" = "红包";
|
||||
"XPMoreMenuPresenter25" = "扬声器";
|
||||
|
||||
"XPMoreMenuPresenter26" = "PK中...";
|
||||
"XPMoreMenuPresenter27" = "关闭礼物值";
|
||||
"XPMoreMenuPresenter28" = "关闭我的特效";
|
||||
|
@@ -1099,7 +1099,7 @@
|
||||
"XPMoreMenuPresenter22" = "邀請粉絲";
|
||||
"XPMoreMenuPresenter23" = "發佈廣播";
|
||||
"XPMoreMenuPresenter24" = "紅包";
|
||||
"XPMoreMenuPresenter25" = "揚聲器";
|
||||
|
||||
"XPMoreMenuPresenter26" = "PK中...";
|
||||
"XPMoreMenuPresenter27" = "關閉禮物值";
|
||||
"XPMoreMenuPresenter28" = "關閉我的特效";
|
||||
|