YMAudioVideoMatchingViewController.m 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. //
  2. // YMAudioVideoMatchingViewController.m
  3. // MSYOUPAI
  4. //
  5. // Created by YoMi on 2024/2/20.
  6. // Copyright © 2024 MS. All rights reserved.
  7. //
  8. #import "YMAudioVideoMatchingViewController.h"
  9. #import "YMAudioVideoMatchingViewModel.h"
  10. #import "YMAudioVideoMatchingTransitionView.h"
  11. #import "YMAudioVideoMatchingInfoPopupView.h"
  12. @interface YMAudioVideoMatchingViewController ()<UIGestureRecognizerDelegate>
  13. /// 音视频匹配VM
  14. @property (nonatomic, strong) YMAudioVideoMatchingViewModel *viewModel;
  15. /// 容器滚动视图
  16. @property (nonatomic, strong) UIScrollView *contentScrollView;
  17. /// 容器视图
  18. @property (nonatomic, strong) UIView *contentView;
  19. /// 音视频匹配背景视图
  20. @property (nonatomic, strong) UIImageView *audioVideoMatchingBgView;
  21. /// 音视频匹配过渡视图
  22. @property (nonatomic, strong) YMAudioVideoMatchingTransitionView *audioVideoMatchingTransitionView;
  23. @end
  24. @implementation YMAudioVideoMatchingViewController
  25. @dynamic viewModel;
  26. - (void)viewDidLoad {
  27. [super viewDidLoad];
  28. self.ym_navigationStyle = YMBaseNavigationStyleClearBgWhiteBackArrow;
  29. [OCNotificationCenter addObserver:self selector:@selector(audioVideoMatchingData:) name:AUDIO_VIDEO_MATCHING object:nil];
  30. [OCNotificationCenter addObserver:self selector:@selector(audioVideoMatchingDataEND:) name:AUDIO_VIDEO_MATCHING_END object:nil];
  31. id traget = self.navigationController.interactivePopGestureRecognizer.delegate;
  32. UIPanGestureRecognizer * pan = [[UIPanGestureRecognizer alloc]initWithTarget:traget action:nil];
  33. [self.view addGestureRecognizer:pan];
  34. @weakify(self)
  35. [self setLeftBarButtonWithImage:@"ym_navigation_white_icon" block:^(id _Nonnull sender) {
  36. @strongify(self)
  37. YMTipsPopupView *customView = [[YMTipsPopupView alloc]init];
  38. customView.titleText = @"女神正在赶来的路上";
  39. customView.titleFont = LCFont(16);
  40. customView.cancelTitle = @"继续匹配";
  41. customView.cancelTitleColor = HexColorFromRGB(0x333333);
  42. customView.cancelBgColor = HexColorFromRGB(0xf5f5f5);
  43. customView.confirmTitle = @"放弃缘分";
  44. customView.confirmTitleColor = HexColorFromRGB(0xFFFFFF);
  45. customView.confirmBgColor = HexColorFromRGB(0xff7ac2);
  46. [customView configutationWithTips:@"别错过缘分,再等等呐~" TipsAlignment:NSTextAlignmentCenter IsHideTitle:NO IsHideSingleButton:YES];
  47. YMPopupView *popupView = [YMPopupView initWithCustomView:customView parentView:nil popStyle:YMPopupStyleFade dismissStyle:YMDismissStyleFade];
  48. popupView.priority = 999;
  49. popupView.cornerRadius = adapt(10);
  50. popupView.rectCorners = UIRectCornerAllCorners;
  51. popupView.positionStyle = YMPositionStyleCenter;
  52. popupView.isHideBg = NO;
  53. popupView.bgAlpha = 0.3;
  54. @weakify(popupView)
  55. customView.buttonBlock = ^(BOOL isConfirm) {
  56. @strongify(popupView)
  57. if (isConfirm) {
  58. [self.viewModel closeAudioVideoMatchingCompletion:^(BOOL finished) {
  59. [self.navigationController popViewControllerAnimated:YES];
  60. }];
  61. }
  62. [popupView dismissWithStyle:YMDismissStyleFade duration:2.0];
  63. };
  64. [popupView pop];
  65. }];
  66. }
  67. - (void)ym_setupViews{
  68. [self.view addSubview:self.audioVideoMatchingBgView];
  69. [self.view sendSubviewToBack:self.audioVideoMatchingBgView];
  70. [self.audioVideoMatchingBgView addSubview:self.contentScrollView];
  71. [self.contentScrollView addSubview:self.contentView];
  72. [self.contentView addSubview:self.audioVideoMatchingTransitionView];
  73. [self.view setNeedsUpdateConstraints];
  74. [self.view updateConstraintsIfNeeded];
  75. }
  76. - (void)updateViewConstraints{
  77. [self.audioVideoMatchingBgView mas_makeConstraints:^(MASConstraintMaker *make) {
  78. make.top.equalTo(self.view);
  79. make.left.equalTo(self.view);
  80. make.right.equalTo(self.view);
  81. make.bottom.equalTo(self.view);
  82. }];
  83. [self.contentScrollView mas_makeConstraints:^(MASConstraintMaker *make) {
  84. make.top.equalTo(self.audioVideoMatchingBgView);
  85. make.left.equalTo(self.audioVideoMatchingBgView);
  86. make.right.equalTo(self.audioVideoMatchingBgView);
  87. make.bottom.equalTo(self.audioVideoMatchingBgView);
  88. }];
  89. [self.contentView mas_makeConstraints:^(MASConstraintMaker *make) {
  90. make.edges.equalTo(self.contentScrollView);
  91. make.width.equalTo(self.contentScrollView.mas_width);
  92. }];
  93. [self.audioVideoMatchingTransitionView mas_makeConstraints:^(MASConstraintMaker *make) {
  94. make.top.equalTo(self.contentView).offset(kYMNavHeight + adapt(10));
  95. make.left.equalTo(self.contentView);
  96. make.right.equalTo(self.contentView);
  97. make.bottom.equalTo(self.contentView);
  98. }];
  99. [super updateViewConstraints];
  100. }
  101. - (void)ym_bindViewModel{
  102. [self.audioVideoMatchingTransitionView ym_bindViewModel:self.viewModel];
  103. [self.viewModel openAudioVideoMatchingCompletion:^(BOOL finished) {
  104. }];
  105. }
  106. - (void)audioVideoMatchingDataEND:(NSNotification *)notice{
  107. if (![self.viewModel isFemaleGender]) {// 如果不是女用户 男用户需要10秒以后才进入队列
  108. [self.audioVideoMatchingTransitionView.countdownLab setHidden:NO];
  109. __block NSInteger timeout= 10; //倒计时时间
  110. dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, timeout);
  111. dispatch_source_t _timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER,0 ,0 ,queue);
  112. dispatch_source_set_timer(_timer,dispatch_walltime(NULL, 0),1.0*NSEC_PER_SEC, 0); //每秒执行
  113. dispatch_source_set_event_handler(_timer, ^{
  114. if(timeout <= 0){ //倒计时结束,关闭
  115. dispatch_source_cancel(_timer);
  116. dispatch_async(dispatch_get_main_queue(), ^{
  117. //设置界面的按钮显示 根据自己需求设置
  118. [self.audioVideoMatchingTransitionView.countdownLab setHidden:YES];
  119. [self.viewModel openAudioVideoMatchingCompletion:^(BOOL finished) {
  120. }];
  121. });
  122. }else{
  123. // int minutes = timeout / 60;
  124. NSInteger seconds = timeout % (10 + 1);
  125. dispatch_async(dispatch_get_main_queue(), ^{
  126. //设置界面的按钮显示 根据自己需求设置
  127. NSString *strTime = [NSString stringWithFormat:@"正在进入速配(%li)", seconds];
  128. [self.audioVideoMatchingTransitionView.countdownLab setText:strTime];
  129. });
  130. timeout--;
  131. }
  132. });
  133. dispatch_resume(_timer);
  134. }
  135. }
  136. - (void)audioVideoMatchingData:(NSNotification *)notice{
  137. NSDictionary *data = [notice.userInfo dictionaryValueForKey:@"data" defaultValue:@{}];
  138. if ([self.viewModel isFemaleGender]) {
  139. YMAudioVideoMatchingInfoPopupView *customView = [[YMAudioVideoMatchingInfoPopupView alloc]init];
  140. [customView configutationWithDictionary:data];
  141. YMPopupView *popupView = [YMPopupView initWithCustomView:customView parentView:nil popStyle:YMPopupStyleSpringFromTop dismissStyle:YMDismissStyleSmoothToTop];
  142. popupView.adjustY = kYMStatusBarHeight + adapt(10);
  143. popupView.isSingle = YES;
  144. popupView.cornerRadius = adapt(10);
  145. popupView.rectCorners = UIRectCornerAllCorners;
  146. popupView.positionStyle = YMPositionStyleTop;
  147. popupView.isClickBgDismiss = YES;
  148. popupView.isHideBg = YES;
  149. popupView.bgAlpha = 0.5;
  150. [popupView pop];
  151. @weakify(popupView)
  152. customView.buttonBlock = ^(BOOL isConfirm, NSString * _Nonnull matchId, NSString * _Nonnull matchUserId) {
  153. @strongify(popupView)
  154. if (isConfirm) {
  155. WS(weakSelf)
  156. [self.viewModel receiveAudioVideoMatchingWithMatchId:matchId OfUserId:[matchUserId intValue]];
  157. }
  158. [popupView dismissWithStyle:YMDismissStyleSmoothToTop duration:2.0];
  159. };
  160. }
  161. }
  162. - (UIScrollView *)contentScrollView{
  163. if (!_contentScrollView) {
  164. _contentScrollView = [[UIScrollView alloc]init];
  165. _contentScrollView.alwaysBounceVertical = YES;
  166. _contentScrollView.showsVerticalScrollIndicator = NO;
  167. _contentScrollView.showsHorizontalScrollIndicator = NO;
  168. _contentScrollView.backgroundColor = UIColor.clearColor;
  169. _contentScrollView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag;
  170. }
  171. return _contentScrollView;
  172. }
  173. - (UIView *)contentView{
  174. if (!_contentView) {
  175. _contentView = [[UIView alloc]init];
  176. }
  177. return _contentView;
  178. }
  179. - (UIImageView *)audioVideoMatchingBgView{
  180. if (!_audioVideoMatchingBgView) {
  181. _audioVideoMatchingBgView = [[UIImageView alloc]init];
  182. _audioVideoMatchingBgView.contentMode = UIViewContentModeScaleAspectFill;
  183. _audioVideoMatchingBgView.image = ImageByName(@"ym_audio_video_matching_bg");
  184. }
  185. return _audioVideoMatchingBgView;
  186. }
  187. - (YMAudioVideoMatchingTransitionView *)audioVideoMatchingTransitionView{
  188. if (!_audioVideoMatchingTransitionView) {
  189. _audioVideoMatchingTransitionView = [[YMAudioVideoMatchingTransitionView alloc]init];
  190. }
  191. return _audioVideoMatchingTransitionView;
  192. }
  193. - (void)dealloc{
  194. [[NSNotificationCenter defaultCenter] removeObserver:self name:AUDIO_VIDEO_MATCHING object:nil];
  195. [[NSNotificationCenter defaultCenter] removeObserver:self name:AUDIO_VIDEO_MATCHING_END object:nil];
  196. }
  197. @end