FullVideoCell.m 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. //
  2. // FullVideoCell.m
  3. // TeacherDaya
  4. //
  5. // Created by Kyle on 2020/9/8.
  6. // Copyright © 2020 DayaMusic. All rights reserved.
  7. //
  8. #import "FullVideoCell.h"
  9. #import "RTCService.h"
  10. #import "ClassroomService.h"
  11. #import "LocalRenderManager.h"
  12. @interface FullVideoCell ()
  13. @property (nonatomic, strong) NSString *displayUserId;
  14. @property (weak, nonatomic) IBOutlet UIView *backGroundView;
  15. @property (strong, nonatomic) UILabel *roleLable;
  16. @property (strong, nonatomic) UILabel *nameLable;
  17. @property (nonatomic, strong) UILabel *promptLable;
  18. @end
  19. @implementation FullVideoCell
  20. - (void)awakeFromNib {
  21. [super awakeFromNib];
  22. // Initialization code
  23. }
  24. - (instancetype)initWithCoder:(NSCoder *)coder {
  25. self = [super initWithCoder:coder];
  26. if (self) {
  27. [self.contentView addSubview:self.videoView];
  28. [self.contentView addSubview:self.roleLable];
  29. [self.contentView addSubview:self.nameLable];
  30. [self.contentView addSubview:self.promptLable];
  31. }
  32. return self;
  33. }
  34. - (void)setCellSize:(CGSize)cellSize {
  35. _cellSize = cellSize;
  36. CGFloat height = cellSize.height - 2;
  37. CGFloat width = height / 3.0f * 4;
  38. if (width > cellSize.width - 2) {
  39. width = cellSize.width - 2;
  40. height = width / 4.0f * 3;
  41. }
  42. self.videoView.frame = CGRectMake((cellSize.width - width) / 2.0f, (cellSize.height - height) / 2.0f, width, height);
  43. [self.nameLable mas_makeConstraints:^(MASConstraintMaker *make) {
  44. }];
  45. [self.roleLable mas_makeConstraints:^(MASConstraintMaker *make) {
  46. make.top.mas_equalTo(self.mas_top).offset((cellSize.height - height) / 2.0f + 4);
  47. make.left.mas_equalTo(self.mas_left).offset((cellSize.width - width) / 2.0f + 4);
  48. make.height.equalTo(@18);
  49. make.width.equalTo(@24);
  50. }];
  51. [self.nameLable mas_makeConstraints:^(MASConstraintMaker *make) {
  52. make.left.equalTo(self.mas_left).offset(10 + (cellSize.width - width) / 2.0f);
  53. make.bottom.equalTo(self.mas_bottom).offset(-(cellSize.height - height) / 2.0f - 10);
  54. make.height.equalTo(@22);
  55. make.right.mas_equalTo(self.mas_right).offset(-10);
  56. }];
  57. [self.promptLable mas_makeConstraints:^(MASConstraintMaker *make) {
  58. make.centerY.equalTo(self.videoView.mas_centerY);
  59. make.centerX.equalTo(self.videoView.mas_centerX);
  60. make.height.equalTo(@25);
  61. make.width.equalTo(@84);
  62. }];
  63. }
  64. - (void)setModel:(RoomMember *)member displayUserId:(NSString *)displayUserId {
  65. [self resetDefaultStyle];
  66. self.displayUserId = displayUserId;
  67. if (member == nil) {
  68. return;
  69. }
  70. if (member.userId == nil) {
  71. self.nameLable.hidden = YES;
  72. self.videoView.hidden = YES;
  73. self.roleLable.hidden = YES;
  74. }
  75. else {
  76. if ([member.userId isEqualToString:[ClassroomService sharedService].currentRoom.currentMember.userId]) {
  77. self.nameLable.text = @"我";
  78. self.roleLable.hidden = NO;
  79. }
  80. else {
  81. self.roleLable.hidden = YES;
  82. [self remakeNameLable:member];
  83. }
  84. if ([[ClassroomService sharedService].currentRoom.shareUserId isEqualToString:member.userId]) {
  85. member.handUpOn = NO;
  86. self.promptLable.text = @"演示中";
  87. self.promptLable.hidden = NO;
  88. }
  89. }
  90. if (![member.userId isEqualToString:displayUserId]) {
  91. [self renderVideo:member];
  92. }
  93. }
  94. - (void)resetDefaultStyle {
  95. self.nameLable.text = nil;
  96. self.roleLable.hidden = NO;
  97. self.nameLable.hidden = NO;
  98. self.videoView.hidden = NO;
  99. self.promptLable.hidden = YES;
  100. [self cancelVideo];
  101. }
  102. - (void)renderVideo:(RoomMember *)member {
  103. if([[ClassroomService sharedService].currentRoom.currentMemberId isEqualToString:member.userId]) {
  104. RoomMember *curMemeber =[ClassroomService sharedService].currentRoom.currentMember;
  105. [[RTCService sharedInstance] renderLocalVideoOnView:self.videoView cameraEnable:curMemeber.cameraEnable];
  106. }else {
  107. if (![member.userId isEqualToString:self.displayUserId]) {
  108. [[RTCService sharedInstance] renderRemoteVideoOnView:self.videoView forUser:member.userId];
  109. }
  110. }
  111. }
  112. - (void)cancelVideo {
  113. [[RTCService sharedInstance] cancelRenderVideoInView:self.videoView];
  114. }
  115. - (void)remakeNameLable:(RoomMember *)member {
  116. NSString * nameTxt = member.name.length > 8 ? [NSString stringWithFormat:@"%@...",[member.name substringToIndex:8]] : member.name;
  117. self.nameLable.text = nameTxt;
  118. }
  119. - (UIView *)videoView {
  120. if(!_videoView) {
  121. _videoView = [[UIView alloc] init];
  122. _videoView.backgroundColor = [UIColor colorWithHexString:@"3D4041" alpha:1];
  123. }
  124. return _videoView;
  125. }
  126. - (UILabel *)roleLable {
  127. if(!_roleLable) {
  128. _roleLable = [[UILabel alloc] init];
  129. _roleLable.font = [UIFont systemFontOfSize:10];
  130. _roleLable.textAlignment = NSTextAlignmentCenter;
  131. _roleLable.textColor = [UIColor colorWithHexString:@"FFFFFF" alpha:1];
  132. _roleLable.backgroundColor = HexRGB(0xFF5500);
  133. _roleLable.text = @"讲师";
  134. _roleLable.layer.cornerRadius = 4;
  135. _roleLable.layer.masksToBounds = YES;
  136. }
  137. return _roleLable;
  138. }
  139. - (UILabel *)nameLable {
  140. if(!_nameLable) {
  141. _nameLable = [[UILabel alloc] init];
  142. _nameLable.font = [UIFont systemFontOfSize:16.0];
  143. _nameLable.numberOfLines = 1;
  144. _nameLable.textAlignment = NSTextAlignmentLeft;
  145. _nameLable.textColor = [UIColor colorWithHexString:@"FFFFFF" alpha:1];
  146. }
  147. return _nameLable;
  148. }
  149. - (UILabel *)promptLable {
  150. if(!_promptLable) {
  151. _promptLable = [[UILabel alloc] init];
  152. _promptLable.font = [UIFont systemFontOfSize:12];
  153. _promptLable.numberOfLines = 1;
  154. _promptLable.textAlignment = NSTextAlignmentCenter;
  155. _promptLable.backgroundColor = [UIColor clearColor];
  156. _promptLable.textColor = [UIColor colorWithHexString:@"FFFFFF" alpha:1];
  157. _promptLable.text = @"演示中";
  158. _promptLable.hidden = YES;
  159. }
  160. return _promptLable;
  161. }
  162. @end