From 95f506d03abb25c3f56306587e4fe71f2ef35046 Mon Sep 17 00:00:00 2001 From: fengshuo <963787902@qq.com> Date: Fri, 3 Dec 2021 17:07:21 +0800 Subject: [PATCH] =?UTF-8?q?=E6=88=BF=E9=97=B4=E6=9C=80=E5=B0=8F=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- xplan-ios.xcodeproj/project.pbxproj | 6 + .../Assets.xcassets/Room/Mini/Contents.json | 6 + .../Contents.json | 22 ++ .../room_mini_background@2x.png | Bin 0 -> 4306 bytes .../room_mini_background@3x.png | Bin 0 -> 8094 bytes .../room_mini_close.imageset/Contents.json | 22 ++ .../room_mini_close@2x.png | Bin 0 -> 266 bytes .../room_mini_close@3x.png | Bin 0 -> 435 bytes .../Room/View/RoomHeaderView/RoomHeaderView.m | 2 +- xplan-ios/Main/Room/View/RoomHostDelegate.h | 1 + xplan-ios/Main/Room/View/XPMiniRoomView.h | 20 ++ xplan-ios/Main/Room/View/XPMiniRoomView.m | 272 ++++++++++++++++++ .../Main/Room/View/XPRoomViewController.m | 9 + xplan-ios/Main/Tabbar/TabbarViewController.m | 24 +- 14 files changed, 382 insertions(+), 2 deletions(-) create mode 100644 xplan-ios/Assets.xcassets/Room/Mini/Contents.json create mode 100644 xplan-ios/Assets.xcassets/Room/Mini/room_mini_background.imageset/Contents.json create mode 100644 xplan-ios/Assets.xcassets/Room/Mini/room_mini_background.imageset/room_mini_background@2x.png create mode 100644 xplan-ios/Assets.xcassets/Room/Mini/room_mini_background.imageset/room_mini_background@3x.png create mode 100644 xplan-ios/Assets.xcassets/Room/Mini/room_mini_close.imageset/Contents.json create mode 100644 xplan-ios/Assets.xcassets/Room/Mini/room_mini_close.imageset/room_mini_close@2x.png create mode 100644 xplan-ios/Assets.xcassets/Room/Mini/room_mini_close.imageset/room_mini_close@3x.png create mode 100644 xplan-ios/Main/Room/View/XPMiniRoomView.h create mode 100644 xplan-ios/Main/Room/View/XPMiniRoomView.m diff --git a/xplan-ios.xcodeproj/project.pbxproj b/xplan-ios.xcodeproj/project.pbxproj index 5e2b9e8f..026a84b4 100644 --- a/xplan-ios.xcodeproj/project.pbxproj +++ b/xplan-ios.xcodeproj/project.pbxproj @@ -172,6 +172,7 @@ E86596512701A1C000846EBD /* StatisticsService.m in Sources */ = {isa = PBXBuildFile; fileRef = E86596502701A1C000846EBD /* StatisticsService.m */; }; E86596542701A55500846EBD /* StatisticsServiceHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = E86596532701A55500846EBD /* StatisticsServiceHelper.m */; }; E8659909273E800D00EE349D /* XPGiftCollectionViewFlowLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = E8659908273E800D00EE349D /* XPGiftCollectionViewFlowLayout.m */; }; + E866B6E52759F96F009B002A /* XPMiniRoomView.m in Sources */ = {isa = PBXBuildFile; fileRef = E866B6E42759F96F009B002A /* XPMiniRoomView.m */; }; E8680718271967B00024F48F /* MicroView.m in Sources */ = {isa = PBXBuildFile; fileRef = E8680717271967B00024F48F /* MicroView.m */; }; E872308926E89BE000B90D4F /* LoginPhoneViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E872308826E89BE000B90D4F /* LoginPhoneViewController.m */; }; E872308D26E89DAA00B90D4F /* LoginInputView.m in Sources */ = {isa = PBXBuildFile; fileRef = E872308C26E89DAA00B90D4F /* LoginInputView.m */; }; @@ -632,6 +633,8 @@ E86596532701A55500846EBD /* StatisticsServiceHelper.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = StatisticsServiceHelper.m; sourceTree = ""; }; E8659907273E800D00EE349D /* XPGiftCollectionViewFlowLayout.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPGiftCollectionViewFlowLayout.h; sourceTree = ""; }; E8659908273E800D00EE349D /* XPGiftCollectionViewFlowLayout.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPGiftCollectionViewFlowLayout.m; sourceTree = ""; }; + E866B6E32759F96F009B002A /* XPMiniRoomView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPMiniRoomView.h; sourceTree = ""; }; + E866B6E42759F96F009B002A /* XPMiniRoomView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPMiniRoomView.m; sourceTree = ""; }; E8680716271967B00024F48F /* MicroView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MicroView.h; sourceTree = ""; }; E8680717271967B00024F48F /* MicroView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MicroView.m; sourceTree = ""; }; E872308726E89BE000B90D4F /* LoginPhoneViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LoginPhoneViewController.h; sourceTree = ""; }; @@ -2053,6 +2056,8 @@ E8AEAEE927141ACC0017FCE0 /* MenuContainerView */, 180806F92729A354001FD836 /* ThemeColor+Room.h */, 180806FA2729A354001FD836 /* ThemeColor+Room.m */, + E866B6E32759F96F009B002A /* XPMiniRoomView.h */, + E866B6E42759F96F009B002A /* XPMiniRoomView.m */, ); path = View; sourceTree = ""; @@ -2818,6 +2823,7 @@ 18486213271EA9DA005FC5DC /* RtcManager.m in Sources */, 186A536926FC6F2E00D67B2C /* XPShareView.m in Sources */, 186A534C26FC6ED900D67B2C /* TTAlertView.m in Sources */, + E866B6E52759F96F009B002A /* XPMiniRoomView.m in Sources */, E8B825BF26E9E57D009E8E9F /* LoginTicketInfo.m in Sources */, E8E7DAE82744F5EF00C631CC /* XPGiftStorage.m in Sources */, E878894C273A607C00BF1D57 /* XPGiftUserCollectionViewCell.m in Sources */, diff --git a/xplan-ios/Assets.xcassets/Room/Mini/Contents.json b/xplan-ios/Assets.xcassets/Room/Mini/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/xplan-ios/Assets.xcassets/Room/Mini/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/xplan-ios/Assets.xcassets/Room/Mini/room_mini_background.imageset/Contents.json b/xplan-ios/Assets.xcassets/Room/Mini/room_mini_background.imageset/Contents.json new file mode 100644 index 00000000..d734b0e3 --- /dev/null +++ b/xplan-ios/Assets.xcassets/Room/Mini/room_mini_background.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "room_mini_background@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "room_mini_background@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/xplan-ios/Assets.xcassets/Room/Mini/room_mini_background.imageset/room_mini_background@2x.png b/xplan-ios/Assets.xcassets/Room/Mini/room_mini_background.imageset/room_mini_background@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..aabe66a08c3be1cde7fed8eae9985c581becd5e8 GIT binary patch literal 4306 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 T?AJGeE@1F<^>bP0l+XkK-DZsV literal 0 HcmV?d00001 diff --git a/xplan-ios/Assets.xcassets/Room/Mini/room_mini_close.imageset/room_mini_close@3x.png b/xplan-ios/Assets.xcassets/Room/Mini/room_mini_close.imageset/room_mini_close@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..fe42b7aefbaf7b51080927cab8d53e9a59254d8c GIT binary patch literal 435 zcmeAS@N?(olHy`uVBq!ia0vp^x**KK3=%mav;s(Z2l#}z0_p!$0?jkI*@4DMlmz(& zGjRVFtN*(6=M<3%yfe0@_jI-%WPenm^=bW|giMf?o-U3d9>=dF%ZPuppggWoadQ>lkKC3VhxWn8>jB5QAIqN=Xi5 zA6Djs9>&jIj0UXC{`0xm&RLtWoeCFxcrnQ!#;D3JjDO+jt#-l|U;ar?51r3x;AGam z;yjC5I@|e_^DL5$UFl3boPuk&8M^$JIdox7PmO@uG@b@Sx4F)4(#bsR;kPA(7hVlx zlV(m#I)5y~XMcW`?>&jNHKk#{4c@H(mV47~(v$;-E;akr*Tfkf6_)=lQSuxZ6bzoO KelF{r5}E+BVAeAL literal 0 HcmV?d00001 diff --git a/xplan-ios/Main/Room/View/RoomHeaderView/RoomHeaderView.m b/xplan-ios/Main/Room/View/RoomHeaderView/RoomHeaderView.m index f170c441..84192dff 100644 --- a/xplan-ios/Main/Room/View/RoomHeaderView/RoomHeaderView.m +++ b/xplan-ios/Main/Room/View/RoomHeaderView/RoomHeaderView.m @@ -77,7 +77,7 @@ #pragma mark - Event Response - (void)backButtonAction:(UIButton *)sender { - [self.hostDelegate exitRoom]; + [self.hostDelegate miniRoom]; } - (void)shareButtonAction:(UIButton *)sender{ diff --git a/xplan-ios/Main/Room/View/RoomHostDelegate.h b/xplan-ios/Main/Room/View/RoomHostDelegate.h index c6edf0f7..35dc7afc 100644 --- a/xplan-ios/Main/Room/View/RoomHostDelegate.h +++ b/xplan-ios/Main/Room/View/RoomHostDelegate.h @@ -18,6 +18,7 @@ NS_ASSUME_NONNULL_BEGIN - (RoomInfoModel*)getRoomInfo; - (UserInfoModel*)getUserInfo; - (void)exitRoom; +- (void)miniRoom; - (UINavigationController *)getCurrentNav; @end diff --git a/xplan-ios/Main/Room/View/XPMiniRoomView.h b/xplan-ios/Main/Room/View/XPMiniRoomView.h new file mode 100644 index 00000000..3d23b2ea --- /dev/null +++ b/xplan-ios/Main/Room/View/XPMiniRoomView.h @@ -0,0 +1,20 @@ +// +// XPMiniRoomView.h +// xplan-ios +// +// Created by 冯硕 on 2021/12/3. +// + +#import + +NS_ASSUME_NONNULL_BEGIN +@class RoomInfoModel; +@interface XPMiniRoomView : UIView + +///房间最小化 初始化 +- (void)configView:(RoomInfoModel *)roomInfo controller:(UIViewController *)controller; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/xplan-ios/Main/Room/View/XPMiniRoomView.m b/xplan-ios/Main/Room/View/XPMiniRoomView.m new file mode 100644 index 00000000..55dc6f25 --- /dev/null +++ b/xplan-ios/Main/Room/View/XPMiniRoomView.m @@ -0,0 +1,272 @@ +// +// XPMiniRoomView.m +// xplan-ios +// +// Created by 冯硕 on 2021/12/3. +// + +#import "XPMiniRoomView.h" +///Third +#import +///Tool +#import "XPMacro.h" +#import "ThemeColor.h" +#import "NetImageView.h" +#import "RtcManager.h" +#import "UIButton+EnlargeTouchArea.h" +#import "XPNoteView.h" +///Model +#import "RoomInfoModel.h" +///View +#import "XPRoomViewController.h" + +@interface XPMiniRoomView () +///底部的底图 +@property (nonatomic,strong) UIImageView *backImageView; +///头像 +@property (nonatomic,strong) NetImageView *avatarImageView; +///昵称 +@property (nonatomic,strong) UILabel *nickLabel; +///id +@property (nonatomic,strong) UILabel *idLabel; +///关闭 +@property (nonatomic,strong) UIButton *closeButton; +///音符 +@property (nonatomic,strong) XPNoteView *noteView; +///房间最小化 +@property (nonatomic,strong) RoomInfoModel *roomInfo; +///进房需要的控制器 +@property (nonatomic,weak) UIViewController * controller; +@end + + +@implementation XPMiniRoomView + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + [self initEvents]; + [self initSubViews]; + [self initSubViewConstraints]; + } + return self; +} + +- (void)dealloc { + NSLog(@"房间最小化销毁了"); +} +#pragma mark - Public Method +- (void)configView:(RoomInfoModel *)roomInfo controller:(UIViewController *)controller { + self.roomInfo = roomInfo; + self.controller = controller; + [self startAvatarAnimation]; +} + +#pragma mark - Private Method +- (void)initSubViews { + [self addSubview:self.backImageView]; + + [self.backImageView addSubview:self.avatarImageView]; + [self.backImageView addSubview:self.noteView]; + [self.backImageView addSubview:self.nickLabel]; + [self.backImageView addSubview:self.idLabel]; + [self.backImageView addSubview:self.closeButton]; +} + +- (void)initSubViewConstraints { + self.frame = CGRectMake(KScreenWidth - 140 * 1.2, KScreenHeight - kSafeAreaBottomHeight - 150, 140 * 1.2, 34 * 1.2); + + [self.backImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.edges.mas_equalTo(self); + }]; + + [self.avatarImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.backImageView).offset(5); + make.top.bottom.mas_equalTo(self.backImageView).inset(5); + make.height.mas_equalTo(self.avatarImageView.mas_width); + }]; + + [self.nickLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.avatarImageView.mas_right).offset(5); + make.bottom.mas_equalTo(self.avatarImageView.mas_centerY).offset(-1.5); + }]; + + [self.idLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.mas_equalTo(self.nickLabel); + make.top.mas_equalTo(self.avatarImageView.mas_centerY).offset(1.5); + }]; + + [self.closeButton mas_makeConstraints:^(MASConstraintMaker *make) { + make.size.mas_equalTo(CGSizeMake(15, 15)); + make.centerY.mas_equalTo(self.backImageView); + make.right.mas_equalTo(self.backImageView).offset(-11); + }]; + + [self.noteView mas_makeConstraints:^(MASConstraintMaker *make) { + make.center.mas_equalTo(self.avatarImageView); + make.height.mas_equalTo(12); + make.width.mas_equalTo(12); + }]; +} + +- (void)initEvents { + UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(roomMiniTag:)]; + [self addGestureRecognizer:pan]; + + UITapGestureRecognizer *enterRoomTag = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(enterRomRecognizer:)]; + [self.avatarImageView addGestureRecognizer:enterRoomTag]; +} + +- (void)startAvatarAnimation { + CABasicAnimation *rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; + rotationAnimation.toValue = [NSNumber numberWithFloat: M_PI * 2.0 ]; + rotationAnimation.duration = 3; + rotationAnimation.cumulative = YES; + rotationAnimation.repeatCount = MAXFLOAT; + rotationAnimation.removedOnCompletion = NO; + [self.avatarImageView.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"]; +} + +#pragma mark - Event Response +- (void)closeButtonAction:(UIButton *)sender { + [[RtcManager instance] exitRoom]; + [self.avatarImageView.layer removeAllAnimations]; + [self.noteView stopAnimation]; + [self removeFromSuperview]; +} + +- (void)enterRomRecognizer:(UITapGestureRecognizer *)tap { + if (self.roomInfo.uid > 0 && self.controller) { + [self removeFromSuperview]; + NSString * roomUid = [NSString stringWithFormat:@"%ld", self.roomInfo.uid]; + [XPRoomViewController openRoom:roomUid viewController:self.controller]; + } +} + +- (void)roomMiniTag:(UIPanGestureRecognizer*)p { + UIWindow *appWindow = [UIApplication sharedApplication].delegate.window; + CGPoint panPoint = [p locationInView:appWindow]; + if (p.state == UIGestureRecognizerStateBegan) { + self.alpha = 1; + } else if(p.state == UIGestureRecognizerStateChanged) { + self.center = CGPointMake(panPoint.x, panPoint.y); + } else if(p.state == UIGestureRecognizerStateEnded + || p.state == UIGestureRecognizerStateCancelled) { + self.alpha = 1; + CGFloat touchWidth = self.frame.size.width; + CGFloat touchHeight = self.frame.size.height; + CGFloat screenWidth = [[UIScreen mainScreen] bounds].size.width; + CGFloat screenHeight = [[UIScreen mainScreen] bounds].size.height; + // fabs 是取绝对值的意思 + CGFloat left = fabs(panPoint.x); + CGFloat right = fabs(screenWidth - left); + CGFloat top = fabs(panPoint.y); + CGFloat bottom = fabs(screenHeight - top); + CGFloat minSpace = 0; + minSpace = MIN(MIN(MIN(top, left), bottom), right); + CGPoint newCenter; + CGFloat targetY = 0; + //校正Y + if (panPoint.y < 15 + touchHeight / 2.0) { + targetY = 15 + touchHeight / 2.0; + }else if (panPoint.y > (screenHeight - touchHeight / 2.0 - 15)) { + targetY = screenHeight - touchHeight / 2.0 - 15; + }else{ + targetY = panPoint.y; + } + + if (minSpace == left) { + newCenter = CGPointMake(15+touchWidth/2.0, targetY); + }else if (minSpace == right) { + newCenter = CGPointMake(screenWidth - touchWidth/2.0 - 15, targetY); + }else if (minSpace == top) { + newCenter = CGPointMake(panPoint.x, touchWidth / 3); + }else { + newCenter = CGPointMake(panPoint.x, screenHeight - touchWidth / 3); + } + [UIView animateWithDuration:0.25 animations:^{ + if (newCenter.y + self.frame.size.height / 2 > KScreenHeight - kSafeAreaBottomHeight - 44) { + self.center = CGPointMake(newCenter.x, KScreenHeight - self.frame.size.height / 2 - kSafeAreaBottomHeight - 44); + }else { + self.center = newCenter; + } + }]; + } else { + NSLog(@"pan state : %zd", p.state); + } +} + + +#pragma mark - Getters And Setters +- (void)setRoomInfo:(RoomInfoModel *)roomInfo { + _roomInfo = roomInfo; + if (_roomInfo) { + self.avatarImageView.imageUrl = _roomInfo.avatar; + if (_roomInfo.title.length > 8) { + _roomInfo.title = [NSString stringWithFormat:@"%@…", [_roomInfo.title substringToIndex:8]]; + } + self.nickLabel.text = _roomInfo.title; + self.idLabel.text = [NSString stringWithFormat:@"%@号:%ld", AppName,_roomInfo.erbanNo]; + } +} + +- (UIImageView *)backImageView { + if (!_backImageView) { + _backImageView = [[UIImageView alloc] init]; + _backImageView.userInteractionEnabled = YES; + _backImageView.image = [UIImage imageNamed:@"room_mini_background"]; + } + return _backImageView; +} + +- (NetImageView *)avatarImageView { + if (!_avatarImageView) { + NetImageConfig * config = [[NetImageConfig alloc] init]; + config.imageType = ImageTypeUserIcon; + config.placeHolder = [UIImageConstant defaultAvatarPlaceholder]; + _avatarImageView = [[NetImageView alloc] initWithConfig:config]; + _avatarImageView.layer.masksToBounds = YES; + _avatarImageView.layer.cornerRadius = (34 * 1.2 - 10)/2; + _avatarImageView.userInteractionEnabled = YES; + } + return _avatarImageView; +} + +- (UILabel *)nickLabel { + if (!_nickLabel) { + _nickLabel = [[UILabel alloc] init]; + _nickLabel.font = [UIFont systemFontOfSize:12]; + _nickLabel.textColor = [ThemeColor mainTextColor]; + } + return _nickLabel; +} +- (UILabel *)idLabel { + if (!_idLabel) { + _idLabel = [[UILabel alloc] init]; + _idLabel.font = [UIFont systemFontOfSize:10]; + _idLabel.textColor = [ThemeColor mainTextColor]; + } + return _idLabel; +} + +- (UIButton *)closeButton { + if (!_closeButton) { + _closeButton = [UIButton buttonWithType:UIButtonTypeCustom]; + [_closeButton setImage:[UIImage imageNamed:@"room_mini_close"] forState:UIControlStateNormal]; + [_closeButton addTarget:self action:@selector(closeButtonAction:) forControlEvents:UIControlEventTouchUpInside]; + [_closeButton setEnlargeEdgeWithTop:5 right:5 bottom:5 left:5]; + } + return _closeButton; +} + +- (XPNoteView *)noteView { + if (!_noteView) { + _noteView = [[XPNoteView alloc] init]; + _noteView.pillarColor = [UIColor colorWithWhite:1 alpha:0.6]; + _noteView.pillarWidth = 2; + [_noteView startAnimation]; + } + return _noteView; +} + +@end diff --git a/xplan-ios/Main/Room/View/XPRoomViewController.m b/xplan-ios/Main/Room/View/XPRoomViewController.m index ae6f40fe..bf207842 100644 --- a/xplan-ios/Main/Room/View/XPRoomViewController.m +++ b/xplan-ios/Main/Room/View/XPRoomViewController.m @@ -32,6 +32,8 @@ #import "RoomHostDelegate.h" #import "RoomGuestDelegate.h" +NSString * const kRoomMiniNotificationKey = @"RoomMiniNotificationKey"; + @interface XPRoomViewController () ///背景 @property (nonatomic,strong) XPRoomBackContainerView *backContainerView; @@ -223,6 +225,13 @@ [self dismissViewControllerAnimated:YES completion:nil]; } +- (void)miniRoom { + //使用了不是太优雅的办法 做了房间最小化 因为想把最小化的view 放在tabbar上 但是roomVC 好像和tabbar 没啥关系哦 + [[NSNotificationCenter defaultCenter] postNotificationName:kRoomMiniNotificationKey object:self.roomInfo]; + [self.view endEditing:YES]; + [self dismissViewControllerAnimated:YES completion:nil]; +} + - (XPRoomBackContainerView *)backContainerView { if (!_backContainerView) { _backContainerView = [[XPRoomBackContainerView alloc] initWithdelegate:self]; diff --git a/xplan-ios/Main/Tabbar/TabbarViewController.m b/xplan-ios/Main/Tabbar/TabbarViewController.m index da515cb7..a58ed08c 100644 --- a/xplan-ios/Main/Tabbar/TabbarViewController.m +++ b/xplan-ios/Main/Tabbar/TabbarViewController.m @@ -28,11 +28,12 @@ #import "XPMineViewController.h" #import "SessionListViewController.h" #import "XPHomeContainerViewController.h" +#import "XPMiniRoomView.h" ///Present #import "MainPresenter.h" #import "MainProtocol.h" - +UIKIT_EXTERN NSString * kRoomMiniNotificationKey; @interface TabbarViewController () @@ -49,6 +50,8 @@ [[NIMSDK sharedSDK].loginManager addDelegate:self]; [self.presenter juliandAdCallBackApi]; + [self roomMiniNotification]; + } - (void)viewWillAppear:(BOOL)animated { @@ -201,4 +204,23 @@ [XCHUDTool hideHUD]; } +#pragma mark - 房间最小化的通知 +- (void)roomMiniNotification { + [[NSNotificationCenter defaultCenter] addObserverForName:kRoomMiniNotificationKey object:nil queue:nil usingBlock:^(NSNotification * _Nonnull note) { + __block XPMiniRoomView * view; + [self.view.subviews enumerateObjectsUsingBlock:^(__kindof UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + if ([obj isKindOfClass:[XPMiniRoomView class]]) { + view = obj; + *stop = YES; + } + }]; + RoomInfoModel * roomInfo = note.object; + if (view == nil) { + view = [[XPMiniRoomView alloc] init]; + [self.view addSubview:view]; + } + [view configView:roomInfo controller:self]; + }]; +} + @end