YOUPAILCBaseVideoCallVC.m 93 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190
  1. //
  2. // YOUPAILCBaseVideoCallVC.m
  3. // LiveChat
  4. //
  5. // Created by 张灿 on 2018/9/17.
  6. // Copyright © 2018年 caicai. All rights reserved.
  7. //
  8. #import "YOUPAILCBaseVideoCallVC.h"
  9. #import "FUCamera.h"
  10. #import "FUManager.h"
  11. #import "FULiveModel.h"
  12. #import "FUAPIDemoBar.h"
  13. //#import "YOUPAIAGVideoProcessing.h"
  14. #import "AppDelegate.h"
  15. //add by leo v1.0.8 视频中守护
  16. #import "YOUPAILPGuardHerVC.h"
  17. #import "UIViewController+TFPresent.h"
  18. #import "YOUPAIZYXianNvBangVC.h"
  19. #import "YOUPAILZVideoDiscountWindow.h"
  20. #import "YOUPAILCReportVC.h"
  21. #import <SVGAParser.h>
  22. #import <SVGAPlayer.h>
  23. #import "YOUPAIXRWalletVC.h"
  24. #import "LZAlertWindow.h"
  25. #import "YOUPAILZCommonGiftView.h"
  26. #import "YOUPAIHRRechargePayWindow.h"
  27. #import "SDCycleScrollView.h"
  28. #import "YOUPAIHRWebWindow.h"
  29. #import "YOUPAIZYAdvertWindow.h"
  30. #import "NIMMessageMaker.h"
  31. #import "YOUPAILCIMTool.h"
  32. @interface YOUPAILCBaseVideoCallVC ()<FUCameraDelegate,FUAPIDemoBarDelegate,SVGAPlayerDelegate,LZChatRoomGiftViewDelegate,LPGuardHerDelegate,SDCycleScrollViewDelegate,ZYAdvertWindowDelegate>
  33. @property (assign,nonatomic) CGPoint youpaipstartPoint; //用来做清屏
  34. @property (nonatomic, strong) FUCamera *youpaipmCamera; //Faceunity Camera
  35. @property (strong, nonatomic) FUAPIDemoBar *youpaipdemoBar; //Tool Bar
  36. @property (nonatomic, strong) FULiveModel *youpaipliveModel ;
  37. @property(nonatomic,assign)BOOL youpaipisRecordScreen;
  38. @property(nonatomic,strong)UIView *youpaiprecoderHideView;
  39. @property (nonatomic,strong)UIView *youpaipdemoBarBgV;
  40. @property (nonatomic,strong)UIButton *youpaipgiftPopBtn;
  41. @property (nonatomic, strong) NSMutableArray *youpaipgifts; // 礼物数据
  42. @property (nonatomic, strong) NSMutableArray <YOUPAILZChatRoomGiftView *>* youpaipgiftViews;// 礼物
  43. @property (nonatomic,strong)SVGAPlayer *youpaipsvgaPlayer;
  44. @property (nonatomic,strong)SVGAParser *youpaipparser;
  45. @property (nonatomic, assign) BOOL youpaipisPlaySvga;
  46. @property(nonatomic,strong)UIButton *closeBtn;
  47. @property(nonatomic,strong)SDCycleScrollView* youpaipscrollView;//右下侧轮播
  48. @property (nonatomic, strong) NSArray <YOUPAILCBannerModel *> *youpaipbannerArray;
  49. @property (strong, nonatomic) YOUPAILCFirstRechargeModel *youpaipfirstRechargeModel;
  50. @end
  51. @implementation YOUPAILCBaseVideoCallVC
  52. //@synthesize consumer;
  53. -(BOOL)prefersStatusBarHidden
  54. {
  55. return YES;
  56. }
  57. - (FUAPIDemoBar*)youpaipdemoBar{
  58. if (!_youpaipdemoBar) {
  59. _youpaipdemoBar = [[FUAPIDemoBar alloc] initWithFrame:CGRectMake(0, KScreenHeight-182, KScreenWidth, 182)];
  60. if (Is_iPhoneX) {
  61. _youpaipdemoBar.frame = CGRectMake(0, KScreenHeight-182-30, KScreenWidth, 182);
  62. }
  63. _youpaipdemoBar.mDelegate = self ;
  64. }
  65. return _youpaipdemoBar ;
  66. }
  67. - (FUCamera *)youpaipmCamera {
  68. if (!_youpaipmCamera) {
  69. _youpaipmCamera = [[FUCamera alloc] init];
  70. _youpaipmCamera.delegate = self;
  71. }
  72. return _youpaipmCamera;
  73. }
  74. - (void)dealloc{
  75. NSLog(@"dealloc basevideo");
  76. [[NSNotificationCenter defaultCenter] removeObserver:self];
  77. [[UIApplication sharedApplication] setIdleTimerDisabled:NO];
  78. }
  79. - (void)viewWillAppear:(BOOL)animated{
  80. [super viewWillAppear:animated];
  81. self.navigationController.navigationBarHidden = YES;
  82. [LCSaveData saveIsVideo:YES];
  83. if (self.youpaipliveModel.type == FULiveModelTypeBeautifyFace) {
  84. [self demoBarSetBeautyDefultParams];
  85. }
  86. [self.youpaipmCamera startCapture];
  87. }
  88. - (void)viewDidAppear:(BOOL)animated{
  89. [super viewDidAppear:animated];
  90. }
  91. - (void)viewWillDisappear:(BOOL)animated{
  92. [super viewWillDisappear:animated];
  93. // if (self.youpaipsvgaPlayer) {
  94. // [self.youpaipsvgaPlayer removeFromSuperview];
  95. // }
  96. [self.youpaipplayer stop];
  97. //add by leo 此处会导致vc无法释放
  98. self.youpaipplayer =nil;
  99. //add by leo 异常退出/被踢 显示处于视频中
  100. [LCSaveData saveIsVideo:NO];
  101. self.navigationController.navigationBarHidden = NO;
  102. }
  103. - (void)viewDidLoad{
  104. [super viewDidLoad];
  105. [self youpaifmonitorShot];
  106. [self youpaifmonitorRecordVideo];
  107. self.sx_disableInteractivePop = YES;
  108. self.youpaipchatArray = [NSMutableArray array];
  109. self.youpaipsocketManager = [[LCWebSocketManager alloc]initWithDelegate:self serverUrl:self.youpaipvideoModel.youpaipsocket_url roomId:self.youpaipvideoModel.youpaiproom_id];
  110. kAppDelegate.ksocketManager = self.youpaipsocketManager;
  111. NSString* path = [[NSBundle mainBundle] pathForResource:@"sound"ofType:@"bundle"];
  112. NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/call_bg.mp3",path]];
  113. self.youpaipplayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
  114. [self.youpaipplayer prepareToPlay];
  115. self.youpaipplayer.numberOfLoops = -1;
  116. [self.youpaipplayer play];
  117. [self youpaifinitView];
  118. [self youpaifinitSvga];
  119. [self youpaifinitAgora];
  120. [self youpaifrequestBannerData];
  121. // NSString* str=[AgoraRtcEngineKit getSdkVersion];
  122. self.youpaipliveModel = [FUManager shareManager].dataSource[0][0];
  123. //设置默认曝光度
  124. [self.youpaipmCamera setExposureValue:0];
  125. [self.youpaipmCamera startCapture];
  126. [self demoBarSetBeautyDefultParams];
  127. [[FUManager shareManager] loadFilter] ;
  128. [[FUManager shareManager] setAsyncTrackFaceEnable:NO];
  129. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(youpaifkeyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
  130. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(youpaifkeyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
  131. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(youpaifwillResignActive) name:UIApplicationWillResignActiveNotification object:nil];
  132. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willEnterForeground) name:UIApplicationWillEnterForegroundNotification object:nil];
  133. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didBecomeActive) name:UIApplicationDidBecomeActiveNotification object:nil];
  134. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(youpaiflLogout) name:@"AbnormalLogout" object:nil];
  135. }
  136. - (void)youpaiflLogout{
  137. [self videoEnd:5];
  138. }
  139. - (void)youpaifinitView{
  140. self.youpaipremoteVideo = [[YMMagicView alloc]initWithFrame:CGRectMake(0,0,KScreenWidth,KScreenHeight)];
  141. self.youpaipremoteVideo.backgroundColor = [UIColor clearColor];
  142. [self.view addSubview:self.youpaipremoteVideo];
  143. self.youpaiprecoderHideView = [[UIView alloc]init];
  144. [self.youpaiprecoderHideView setBackgroundColor:[UIColor whiteColor]];
  145. [self.youpaiprecoderHideView setHidden:YES];
  146. [self.view addSubview:self.youpaiprecoderHideView];
  147. UIView* msgCoverView = [[UIView alloc]initWithFrame:CGRectMake(-KScreenWidth, 0, KScreenWidth*2, KScreenHeight)];
  148. msgCoverView.backgroundColor = [UIColor clearColor];
  149. UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(youpaifmsgViewPanHandel:)];
  150. [msgCoverView addGestureRecognizer:pan];
  151. UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(youpaifdoubleTapHandel:)];
  152. doubleTap.numberOfTapsRequired = 2;
  153. [msgCoverView addGestureRecognizer:doubleTap];
  154. self.youpaipmsgCoverView = msgCoverView;
  155. [self.view addSubview:msgCoverView];
  156. UIView* interView = [[UIView alloc]initWithFrame:CGRectMake(KScreenWidth, 0, KScreenWidth, KScreenHeight)];
  157. interView.backgroundColor = [UIColor clearColor];
  158. self.youpaipinterView = interView;
  159. [msgCoverView addSubview:interView];
  160. //设置顶部按钮
  161. UIButton* closeBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  162. [closeBtn setImage:[UIImage imageNamed:@"vqu_images_video_end"] forState:(UIControlStateNormal)];
  163. self.closeBtn = closeBtn;
  164. [closeBtn addTarget:self action:@selector(youpaifcloseBtnClick) forControlEvents:(UIControlEventTouchUpInside)];
  165. [self.youpaipinterView addSubview:closeBtn];
  166. [closeBtn mas_makeConstraints:^(MASConstraintMaker *make) {
  167. make.left.offset(14.0f);
  168. make.top.offset(StatusBarHeight + 4.0f);
  169. make.size.mas_offset(CGSizeMake(30.0f, 30.0f));
  170. }];
  171. closeBtn.hidden = YES;
  172. UIView *timeBgv = [[UIView alloc] init];
  173. timeBgv.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.7];
  174. timeBgv.layer.cornerRadius = 10;
  175. timeBgv.layer.masksToBounds = YES;
  176. [self.youpaipinterView addSubview:timeBgv];
  177. UILabel *durationLb = [UILabel new];
  178. durationLb.textColor = [UIColor whiteColor];
  179. durationLb.font = [UIFont monospacedDigitSystemFontOfSize:12 weight:(UIFontWeightRegular)];
  180. durationLb.textAlignment = NSTextAlignmentCenter;
  181. durationLb.text = @"通话时长: 00:00:00";
  182. [timeBgv addSubview:durationLb];
  183. self.youpaiptimeLabel = durationLb;
  184. UILabel *hLine = [UILabel new];
  185. hLine.backgroundColor = [UIColor whiteColor];
  186. [timeBgv addSubview:hLine];
  187. UILabel *remainLb = [UILabel new];
  188. remainLb.textColor = [UIColor whiteColor];
  189. remainLb.font = [UIFont monospacedDigitSystemFontOfSize:12 weight:(UIFontWeightRegular)];
  190. remainLb.textAlignment = NSTextAlignmentCenter;
  191. remainLb.text = @"剩余时长: 00:00:00";
  192. [timeBgv addSubview:remainLb];
  193. self.youpaipcancallTimeLab = remainLb;
  194. [timeBgv mas_makeConstraints:^(MASConstraintMaker *make) {
  195. make.top.equalTo(closeBtn.mas_bottom).offset(10);
  196. make.left.equalTo(closeBtn.mas_left).offset(0);
  197. }];
  198. [durationLb mas_makeConstraints:^(MASConstraintMaker *make) {
  199. make.top.equalTo(timeBgv.mas_top).offset(10);
  200. make.left.equalTo(timeBgv.mas_left).offset(10);
  201. make.right.equalTo(timeBgv.mas_right).offset(-10);
  202. }];
  203. [hLine mas_makeConstraints:^(MASConstraintMaker *make) {
  204. make.top.equalTo(durationLb.mas_bottom).offset(6);
  205. make.left.equalTo(timeBgv.mas_left).offset(10);
  206. make.right.equalTo(timeBgv.mas_right).offset(-10);
  207. make.height.mas_equalTo(0.7);
  208. }];
  209. [remainLb mas_makeConstraints:^(MASConstraintMaker *make) {
  210. make.top.equalTo(hLine.mas_bottom).offset(6);
  211. make.left.equalTo(timeBgv.mas_left).offset(10);
  212. make.right.equalTo(timeBgv.mas_right).offset(-10);
  213. make.bottom.equalTo(timeBgv.mas_bottom).offset(-10);
  214. }];
  215. UIView *demoBarBgV = [[UIView alloc] initWithFrame:self.view.bounds];
  216. demoBarBgV.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.3f];
  217. demoBarBgV.hidden = YES;
  218. [self.view addSubview:demoBarBgV];
  219. self.youpaipdemoBarBgV = demoBarBgV;
  220. [demoBarBgV addSubview:self.youpaipdemoBar];
  221. [self.youpaipdemoBar mas_makeConstraints:^(MASConstraintMaker *make) {
  222. make.bottom.offset(-SafeHeight);
  223. make.left.right.offset(0.0f);
  224. make.height.offset(182.0f);
  225. }];
  226. // UITapGestureRecognizer* interTap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(youpaifinterHandel:)];
  227. // [self.demoBarBgV addGestureRecognizer:interTap];
  228. self.youpaiplocalVideo = [[YMMagicView alloc]initWithFrame:CGRectMake(KScreenWidth-14.0f-90.0f,StatusBarHeight+4, 90.0f, 120.0f)];
  229. self.youpaiplocalVideo.backgroundColor = [UIColor blackColor];
  230. self.youpaiplocalVideo.layer.cornerRadius = 5.0;
  231. self.youpaiplocalVideo.layer.masksToBounds = YES;
  232. [self.view addSubview:self.youpaiplocalVideo];
  233. self.youpaiplocalVideo.hidden = YES;
  234. UITapGestureRecognizer* localTap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(youpaifloaclVideoHandel:)];
  235. [self.youpaiplocalVideo addGestureRecognizer:localTap];
  236. //右下侧轮播
  237. SDCycleScrollView *bannerView1 = [SDCycleScrollView cycleScrollViewWithFrame:CGRectMake(KScreenWidth - 12.0f - 49.0f, (KScreenHeight-50)/2, 50, 50.0f) delegate:self placeholderImage:[UIImage imageNamed:@""]];
  238. self.youpaipscrollView = bannerView1;
  239. bannerView1.pageControlDotSize = CGSizeMake(0, 0);
  240. bannerView1.autoScrollTimeInterval = 3.0;//2s轮播
  241. bannerView1.pageControlStyle = SDCycleScrollViewPageContolStyleNone;
  242. bannerView1.bannerImageViewContentMode = UIViewContentModeScaleAspectFit;
  243. bannerView1.backgroundColor = [UIColor clearColor];
  244. [self.view addSubview:bannerView1];
  245. bannerView1.hidden = YES;
  246. }
  247. /// 获取banner数据
  248. - (void)youpaifrequestBannerData{
  249. @weakify(self);
  250. [LCHttpHelper requestWithURLString:GetAdvert parameters:@{@"position":@"10"} needToken:YES type:(HttpRequestTypePost) success:^(id responseObject) {
  251. @strongify(self);
  252. NSDictionary* dict = (NSDictionary*)responseObject;
  253. NSInteger code = [[dict objectForKey:@"code"] integerValue];
  254. if (code==0) {//成功
  255. self.youpaipfirstRechargeModel = [YOUPAILCFirstRechargeModel mj_objectWithKeyValues:dict[@"data"]];
  256. NSMutableArray *imgUrlArray1 = [NSMutableArray new];
  257. for (YOUPAILCBannerModel* model in self.youpaipfirstRechargeModel.youpaiplist) {
  258. [imgUrlArray1 addObject:[LCTools getImageUrlWithAddress:model.youpaipimage]];
  259. }
  260. self.youpaipscrollView.imageURLStringsGroup = imgUrlArray1;
  261. }
  262. } failure:^(NSError *error) {
  263. }];
  264. }
  265. #pragma mark - SDCycleScrollViewDelegate
  266. - (void)cycleScrollView:(SDCycleScrollView *)cycleScrollView didSelectItemAtIndex:(NSInteger)index
  267. {
  268. YOUPAILCBannerModel* model = self.youpaipfirstRechargeModel.youpaiplist[index];
  269. if (model.youpaipwindow_type==2) {
  270. YOUPAIHRWebWindow *window = [[YOUPAIHRWebWindow alloc] init];
  271. window.isTouchDismiss = YES;
  272. window.youpaipurl = model.youpaipwindow_link;
  273. window.youpaipwidth = model.youpaipwidth;
  274. window.youpaipheight = model.youpaipheight;
  275. window.youpaipgravity = model.youpaipgravity;
  276. [self TFPresentVC:window completion:^{}];
  277. }else {
  278. YOUPAIZYAdvertWindow *VC= [[YOUPAIZYAdvertWindow alloc]init];
  279. VC.youpaipdelegate = self;
  280. VC.vWidth = KScreenWidth -30;
  281. VC.vHeight = KScreenWidth-30;
  282. VC.youpaipimageurl = model.youpaipimage;
  283. VC.youpaiplink_type = model.youpaiplink_type;
  284. VC.youpaiplink_url = model.youpaiplink_url;
  285. VC.isTouchDismiss = YES;
  286. [self TFPresentVC:VC completion:^{}];
  287. }
  288. }
  289. #pragma mark -ZYAdvertWindowDelegate
  290. -(void)youpaifclickAdverImage:(NSInteger)link_type andUrl:(NSString *)link_url
  291. {
  292. if (link_type == 1) {
  293. ZCBaseWebVC* baseWeb = [[ZCBaseWebVC alloc]init];
  294. baseWeb.contentUrl = link_url;
  295. [self.navigationController pushViewController:baseWeb animated:YES];
  296. }else if (link_type==2 || link_type==3){
  297. [self youpaifpageToStr:link_url];
  298. }
  299. }
  300. - (void)youpaifinitSvga{
  301. self.youpaipsvgaPlayer = [[SVGAPlayer alloc] initWithFrame:[UIScreen mainScreen].bounds];
  302. self.youpaipsvgaPlayer.contentMode = UIViewContentModeScaleAspectFit;
  303. self.youpaipsvgaPlayer.delegate = self;
  304. [self.view addSubview:self.youpaipsvgaPlayer];
  305. self.youpaipsvgaPlayer.userInteractionEnabled = NO;
  306. self.youpaipsvgaPlayer.hidden = YES;
  307. self.youpaipsvgaPlayer.loops = 1;
  308. self.youpaipsvgaPlayer.clearsAfterStop = true;
  309. self.youpaipparser = [[SVGAParser alloc] init];
  310. }
  311. - (UILabel*)youpaifcreateLabelWithFrame:(CGRect)frame text:(NSString*)contentText{
  312. UILabel* lab = [[UILabel alloc]initWithFrame:frame];
  313. lab.textColor = [UIColor whiteColor];
  314. lab.font = [UIFont systemFontOfSize:11];
  315. lab.textAlignment = NSTextAlignmentLeft;
  316. lab.text = contentText;
  317. return lab;
  318. }
  319. - (void)youpaifinitTextToolView{
  320. UIView* textToolView = [[UIView alloc]initWithFrame:CGRectMake(0, KScreenHeight, KScreenWidth, 65)];
  321. [LCTools clipCorner:UIRectCornerTopLeft|UIRectCornerTopRight View:textToolView size:CGSizeMake(20.0f, 20.0f)];
  322. textToolView.backgroundColor = HexColorFromRGB(0xffffff);
  323. [self.view addSubview:textToolView];
  324. self.youpaiptextToolView = textToolView;
  325. //文本
  326. UITextField *sendTextView = [[UITextField alloc]init];
  327. sendTextView.layer.cornerRadius = 17.5f;
  328. sendTextView.clipsToBounds = YES;
  329. sendTextView.tintColor = ZYPinkColor;
  330. sendTextView.leftViewMode = UITextFieldViewModeAlways;
  331. sendTextView.leftView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 13, 35)];
  332. UIView* rightView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 13, 35)];
  333. sendTextView.rightView = rightView;
  334. sendTextView.rightViewMode = UITextFieldViewModeAlways;
  335. sendTextView.font = [UIFont systemFontOfSize:14];
  336. sendTextView.placeholder = @"说点什么...";
  337. sendTextView.backgroundColor = LZF7F8FAColor;
  338. //sendTextView.delegate = self;
  339. self.youpaipsendTextF = sendTextView;
  340. [textToolView addSubview:sendTextView];
  341. //发送
  342. UIButton *sendMsgBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  343. sendMsgBtn.titleLabel.font = [UIFont systemFontOfSize:14];
  344. [sendMsgBtn setTitle:@"发送" forState:UIControlStateNormal];
  345. [sendMsgBtn setTitleColor:[UIColor whiteColor] forState:(UIControlStateNormal)];
  346. sendMsgBtn.layer.cornerRadius = 17.5f;
  347. sendMsgBtn.clipsToBounds = YES;
  348. [sendMsgBtn setBackgroundImage:[LCTools ColorImage:CGSizeMake(62, 35) FromColors:@[LZBFB6FFColor,LZ7C69FEColor] ByGradientType:GradientLeftToRight] forState:UIControlStateNormal];
  349. [sendMsgBtn addTarget:self action:@selector(youpaifsendMsgBtnClick) forControlEvents:UIControlEventTouchUpInside];
  350. [textToolView addSubview:sendMsgBtn];
  351. [sendTextView makeConstraints:^(MASConstraintMaker *make) {
  352. make.left.offset(12);
  353. make.centerY.equalTo(textToolView);
  354. make.right.equalTo(sendMsgBtn.mas_left).offset(-12.0f);
  355. make.height.equalTo(35);
  356. }];
  357. [sendMsgBtn makeConstraints:^(MASConstraintMaker *make) {
  358. make.right.offset(-12.0f);
  359. make.centerY.equalTo(textToolView);
  360. make.height.equalTo(35.0f);
  361. make.width.equalTo(62);
  362. }];
  363. }
  364. - (void)youpaifsetupInterView{
  365. UIView *timerBgV = [[UIView alloc] init];
  366. timerBgV.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.3f];
  367. timerBgV.layer.cornerRadius = 10.5f;
  368. timerBgV.clipsToBounds = YES;
  369. [self.view addSubview:timerBgV];
  370. [timerBgV mas_makeConstraints:^(MASConstraintMaker *make) {
  371. make.left.offset(54.0f);
  372. make.top.offset(StatusBarHeight + 9.0f);
  373. make.height.offset(21.0f);
  374. make.width.greaterThanOrEqualTo(45.0f);
  375. }];
  376. // UIImageView *timerImgV = [[UIImageView alloc] init];
  377. // timerImgV.image = [UIImage imageNamed:@"vqu_images_video_timer"];
  378. // [timerBgV addSubview:timerImgV];
  379. // [timerImgV mas_makeConstraints:^(MASConstraintMaker *make) {
  380. // make.left.offset(6.0f);
  381. // make.centerY.equalTo(timerBgV);
  382. // make.size.mas_offset(CGSizeMake(14.0f, 14.0f));
  383. // }];
  384. // UILabel *timeL = [[UILabel alloc] init];
  385. // timeL.textColor = [UIColor whiteColor];
  386. // timeL.font = LCFont12;
  387. // timeL.text = @"00:00";
  388. // [timerBgV addSubview:timeL];
  389. // self.youpaiptimeLabel = timeL;
  390. // [timeL mas_makeConstraints:^(MASConstraintMaker *make) {
  391. // make.left.offset(6.0f);
  392. // // make.left.equalTo(timerImgV.mas_right).offset(4.0f);
  393. // make.top.bottom.offset(0.0f);
  394. // make.centerY.equalTo(timerBgV);
  395. // }];
  396. UIButton *reportBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  397. reportBtn.hidden = YES;
  398. reportBtn.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.3f];
  399. reportBtn.frame = CGRectMake(0.0f, StatusBarHeight + 72.0f, 45.0f, 21.0f);
  400. [LCTools clipCorner:UIRectCornerBottomRight|UIRectCornerTopRight View:reportBtn size:CGSizeMake(10.5f, 10.5f)];
  401. [reportBtn addTarget:self action:@selector(youpaifreportBtnClick) forControlEvents:UIControlEventTouchUpInside];
  402. [self.view addSubview:reportBtn];
  403. UILabel *reportL = [[UILabel alloc] init];
  404. reportL.hidden = YES;
  405. reportL.textColor = HexColorFromRGB(0xEEEEEE);
  406. reportL.font = LCFont12;
  407. reportL.text = @"举报";
  408. [reportBtn addSubview:reportL];
  409. [reportL mas_makeConstraints:^(MASConstraintMaker *make) {
  410. make.right.offset(-7.0f);
  411. make.top.bottom.offset(0.0f);
  412. }];
  413. UIView *footerView = [[UIView alloc] init];
  414. [self.youpaipinterView addSubview:footerView];
  415. [footerView mas_makeConstraints:^(MASConstraintMaker *make) {
  416. make.left.right.offset(0.0f);
  417. make.bottom.offset(0.0f);
  418. make.height.offset(52.0f + SafeHeight);
  419. }];
  420. NSMutableArray *btns = [NSMutableArray array];
  421. // 美颜
  422. [btns addObject:@{
  423. @"image":[UIImage imageNamed:@"vqu_images_video_beauty"],
  424. @"selectedImage":[UIImage imageNamed:@"vqu_images_video_beauty"],
  425. @"event":@"youpaifbeautyBtnClick"
  426. }];
  427. // 切换摄像头
  428. [btns addObject:@{
  429. @"image":[UIImage imageNamed:@"vqu_images_video_change"],
  430. @"selectedImage":[UIImage imageNamed:@"vqu_images_video_change"],
  431. @"event":@"youpaifswitchBtnClick:"
  432. }];
  433. // 麦克风
  434. [btns addObject:@{
  435. @"image":[UIImage imageNamed:@"vqu_images_video_sound_on"],
  436. @"selectedImage":[UIImage imageNamed:@"vqu_images_video_sound_off"],
  437. @"event":@"youpaifvoiceBtnClick:"
  438. }];
  439. if (![[LCSaveModel getUserModel].youpaipuserinfo.youpaipuser_id isEqualToString:self.youpaipvideoModel.youpaipto_uid]){
  440. // 关闭摄像头
  441. [btns addObject:@{
  442. @"image":[UIImage imageNamed:@"vqu_images_video_on"],
  443. @"selectedImage":[UIImage imageNamed:@"vqu_images_video_off"],
  444. @"event":@"youpaifcameraBtnClick:"
  445. }];
  446. }
  447. // 信息
  448. [btns addObject:@{
  449. @"image":[UIImage imageNamed:@"vqu_images_video_news"],
  450. @"selectedImage":[UIImage imageNamed:@"vqu_images_video_news"],
  451. @"event":@"youpaifmsgBtnClick"
  452. }];
  453. // 礼物
  454. [btns addObject:@{
  455. @"image":[UIImage imageNamed:@"vqu_images_video_gift"],
  456. @"selectedImage":[UIImage imageNamed:@"vqu_images_video_gift"],
  457. @"event":@"youpaifgiftBtnClick"
  458. }];
  459. CGFloat totalWidth = btns.count * 46.0f + (btns.count - 1) * 15.0f;
  460. CGFloat startX = (KScreenWidth - totalWidth) / 2.0f;
  461. CGFloat width = kScreenWidth / btns.count;
  462. for (NSInteger i = 0; i < btns.count; i ++) {
  463. NSDictionary *dict = btns[i];
  464. UIImage *image = dict[@"image"];
  465. UIImage *selectedImage = dict[@"selectedImage"];
  466. UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
  467. [btn setImage:image forState:UIControlStateNormal];
  468. [btn setImage:selectedImage forState:UIControlStateSelected];
  469. [btn addTarget:self action:NSSelectorFromString(dict[@"event"]) forControlEvents:(UIControlEventTouchUpInside)];
  470. //CGFloat x = startX + i * 46.0f + i * 15.0f;
  471. CGFloat x = i * width;
  472. btn.frame = CGRectMake(x, 0.0f, width, 46.0f);
  473. [footerView addSubview:btn];
  474. }
  475. UIButton *giftPopBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  476. [giftPopBtn setBackgroundImage:[UIImage imageNamed:@"vqu_images_video_gift_remind"] forState:UIControlStateNormal];
  477. [giftPopBtn addTarget:self action:@selector(youpaifgiftBtnClick) forControlEvents:UIControlEventTouchUpInside];
  478. giftPopBtn.hidden = YES;
  479. [self.youpaipinterView addSubview:giftPopBtn];
  480. self.youpaipgiftPopBtn = giftPopBtn;
  481. [giftPopBtn mas_makeConstraints:^(MASConstraintMaker *make) {
  482. make.right.offset(-startX);
  483. make.bottom.equalTo(footerView.mas_top).offset(-8.0f);
  484. make.size.mas_offset(CGSizeMake(157.5f, 33.0f));
  485. }];
  486. if (![[LCSaveModel getUserModel].youpaipuserinfo.youpaipuser_id isEqualToString:self.youpaipvideoModel.youpaipto_uid]){
  487. UIButton *guardBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  488. [guardBtn setBackgroundImage:[UIImage imageNamed:@"vqu_images_video_guard"] forState:UIControlStateNormal];
  489. [guardBtn addTarget:self action:@selector(youpaifguardBtnClick) forControlEvents:UIControlEventTouchUpInside];
  490. [self.youpaipinterView addSubview:guardBtn];
  491. [guardBtn mas_makeConstraints:^(MASConstraintMaker *make) {
  492. make.right.offset(-14.0f);
  493. make.bottom.equalTo(giftPopBtn.mas_top).offset(-6.0f);
  494. make.size.mas_offset(CGSizeMake(57.0f, 45.0f));
  495. }];
  496. }
  497. UIView *durationBgL = [[UIView alloc] init];
  498. durationBgL.backgroundColor = [HexColorFromRGB(0x000000) colorWithAlphaComponent:0.3f];
  499. durationBgL.layer.cornerRadius = 14.5f;
  500. durationBgL.clipsToBounds = YES;
  501. [self.youpaipinterView addSubview:durationBgL];
  502. [durationBgL mas_makeConstraints:^(MASConstraintMaker *make) {
  503. make.left.offset(14.0f);
  504. make.bottom.equalTo(footerView.mas_top).offset(-14.0f);
  505. make.height.offset(29.0f);
  506. make.width.greaterThanOrEqualTo(46.0f);
  507. }];
  508. UIButton *rechargeBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  509. rechargeBtn.hidden = YES;
  510. [rechargeBtn setBackgroundImage:[LCTools ColorImage:CGSizeMake(46.0f, 29.0f) FromColors:@[LZBFB6FFColor,LZ7C69FEColor] ByGradientType:(GradientLeftToRight)] forState:(UIControlStateNormal)];
  511. rechargeBtn.titleLabel.font = LCFont14;
  512. [rechargeBtn setTitleColor:[UIColor whiteColor] forState:(UIControlStateNormal)];
  513. if ([[LCSaveModel getUserModel].youpaipuserinfo.youpaipuser_id isEqualToString:self.youpaipvideoModel.youpaipto_uid]){
  514. [rechargeBtn setTitle:@"提醒" forState:UIControlStateNormal];
  515. }else{
  516. [rechargeBtn setTitle:@"充值" forState:UIControlStateNormal];
  517. }
  518. rechargeBtn.layer.cornerRadius = 14.5f;
  519. rechargeBtn.layer.masksToBounds = YES;
  520. [rechargeBtn addTarget:self action:@selector(youpaiftoRecharge) forControlEvents:UIControlEventTouchUpInside];
  521. [durationBgL addSubview:rechargeBtn];
  522. [rechargeBtn mas_makeConstraints:^(MASConstraintMaker *make) {
  523. make.right.bottom.top.offset(0.0f);
  524. make.width.offset(46.0f);
  525. }];
  526. // UILabel *cancallTimeLab = [[UILabel alloc] init];
  527. // cancallTimeLab.textColor = [UIColor whiteColor];
  528. // cancallTimeLab.font = LCFont14;
  529. // [durationBgL addSubview:cancallTimeLab];
  530. // self.youpaipcancallTimeLab = cancallTimeLab;
  531. // [cancallTimeLab mas_makeConstraints:^(MASConstraintMaker *make) {
  532. // make.left.mas_equalTo(0);
  533. // make.right.mas_equalTo(rechargeBtn.mas_left).offset(-7.0f);
  534. // make.top.bottom.mas_equalTo(0.0f);
  535. // }];
  536. [self youpaiftimeStart];
  537. //设置聊天列表
  538. UITableView *tableView = [[UITableView alloc]initWithFrame:CGRectMake(14, KScreenHeight-KScreenHeight/4-70, 276.0f, KScreenHeight/4) style:UITableViewStylePlain];
  539. tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
  540. tableView.showsVerticalScrollIndicator = NO;
  541. tableView.delegate = self;
  542. tableView.dataSource = self;
  543. tableView.backgroundColor = [UIColor clearColor];
  544. tableView.transform = CGAffineTransformMakeScale(1, -1);
  545. tableView.rowHeight = UITableViewAutomaticDimension;
  546. // tableView.estimatedRowHeight = 44.0f;
  547. tableView.estimatedSectionHeaderHeight = 0.0f;
  548. tableView.estimatedSectionFooterHeight = 0.0f;
  549. if (@available(iOS 15.0, *)) {
  550. tableView.sectionHeaderTopPadding = 0;
  551. }
  552. self.youpaipchatTableView = tableView;
  553. [self.youpaipinterView addSubview:tableView];
  554. [tableView mas_makeConstraints:^(MASConstraintMaker *make) {
  555. make.left.offset(14.0f);
  556. make.bottom.offset(-(52.0f+SafeHeight+6.0f+29.0f+14.0f));
  557. make.size.mas_offset(CGSizeMake(kScreenWidth - 28, KScreenHeight/4));
  558. }];
  559. if ([[LCSaveModel getUserModel].youpaipuserinfo.youpaipuser_id isEqualToString:self.youpaipvideoModel.youpaipto_uid] && self.youpaipvideoModel.youpaipchat_open_reduce == 1){
  560. // UIView *discountBgV = [[UIView alloc] init];
  561. // discountBgV.backgroundColor = [HexColorFromRGB(0x000000) colorWithAlphaComponent:0.3f];
  562. // discountBgV.layer.cornerRadius = 10.5f;
  563. // discountBgV.clipsToBounds = YES;
  564. // [self.view addSubview:discountBgV];
  565. // [discountBgV mas_makeConstraints:^(MASConstraintMaker *make) {
  566. // make.right.offset(-14.0f);
  567. // make.top.equalTo(self.youpaiplocalVideo.mas_bottom).offset(6.0f);
  568. // make.height.offset(21.0f);
  569. // make.width.greaterThanOrEqualTo(38.0f);
  570. // }];
  571. // UIButton *discountBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  572. // [discountBtn setBackgroundImage:[LCTools ColorImage:CGSizeMake(38.0f, 21.0f) FromColors:@[LZBFB6FFColor,LZ7C69FEColor] ByGradientType:(GradientLeftToRight)] forState:(UIControlStateNormal)];
  573. // discountBtn.titleLabel.font = LCFont12;
  574. // [discountBtn setTitleColor:[UIColor whiteColor] forState:(UIControlStateNormal)];
  575. // [discountBtn setTitle:@"减免" forState:UIControlStateNormal];
  576. // discountBtn.layer.cornerRadius = 10.5f;
  577. // discountBtn.layer.masksToBounds = YES;
  578. // [discountBtn addTarget:self action:@selector(youpaifdiscountBtnClick) forControlEvents:UIControlEventTouchUpInside];
  579. // [discountBgV addSubview:discountBtn];
  580. // [discountBtn mas_makeConstraints:^(MASConstraintMaker *make) {
  581. // make.left.bottom.top.offset(0.0f);
  582. // make.width.offset(38.0f);
  583. // }];
  584. // UILabel *discountL = [[UILabel alloc] init];
  585. // discountL.font = LCFont12;
  586. // discountL.textColor = [UIColor whiteColor];
  587. // [discountBgV addSubview:discountL];
  588. // self.youpaipdiscountL = discountL;
  589. // [discountL mas_makeConstraints:^(MASConstraintMaker *make) {
  590. // make.right.bottom.top.offset(0.0f);
  591. //// make.left.equalTo(discountBtn.mas_right).offset(0.0f);
  592. // make.left.bottom.top.offset(0.0f);
  593. // }];
  594. UIView *balanceBgV = [[UIView alloc] init];
  595. balanceBgV.layer.cornerRadius = 10.5f;
  596. balanceBgV.clipsToBounds = YES;
  597. balanceBgV.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.3f];
  598. [self.view addSubview:balanceBgV];
  599. [balanceBgV mas_makeConstraints:^(MASConstraintMaker *make) {
  600. make.right.offset(-14.0f);
  601. make.top.equalTo(self.youpaiplocalVideo.mas_bottom).offset(6.0f);
  602. make.height.offset(21.0f);
  603. }];
  604. UILabel *balanceL = [[UILabel alloc] init];
  605. balanceL.textColor = [UIColor whiteColor];
  606. balanceL.font = LCFont12;
  607. [balanceBgV addSubview:balanceL];
  608. self.youpaipbalanceL = balanceL;
  609. [balanceL mas_makeConstraints:^(MASConstraintMaker *make) {
  610. make.top.bottom.offset(0.0f);
  611. make.right.offset(-7.0f);
  612. make.left.offset(7.0f);
  613. }];
  614. }else{
  615. UIView *discountBgV = [[UIView alloc] init];
  616. discountBgV.backgroundColor = [HexColorFromRGB(0x000000) colorWithAlphaComponent:0.3f];
  617. discountBgV.layer.cornerRadius = 10.5f;
  618. discountBgV.clipsToBounds = YES;
  619. discountBgV.hidden =YES;
  620. [self.view addSubview:discountBgV];
  621. self.youpaipformDiscountBgV = discountBgV;
  622. [discountBgV mas_makeConstraints:^(MASConstraintMaker *make) {
  623. make.right.offset(-14.0f);
  624. make.top.equalTo(self.youpaiplocalVideo.mas_bottom).offset(6.0f);
  625. make.height.offset(21.0f);
  626. }];
  627. UILabel *discountL = [[UILabel alloc] init];
  628. discountL.font = LCFont12;
  629. discountL.textColor = [UIColor whiteColor];
  630. [discountBgV addSubview:discountL];
  631. self.youpaipformDiscountL = discountL;
  632. [discountL mas_makeConstraints:^(MASConstraintMaker *make) {
  633. make.bottom.offset(-3.0f);
  634. make.top.offset(3.0f);
  635. make.left.offset(7.0f);
  636. make.right.offset(-7.0f);
  637. }];
  638. }
  639. [self youpaifinitTextToolView];
  640. }
  641. - (void)youpaifreportBtnClick{
  642. NSString *uid = [[LCSaveModel getUserModel].youpaipuserinfo.youpaipuser_id isEqual:self.youpaipvideoModel.youpaipto_uid] ? self.youpaipvideoModel.youpaipfrom_uid : self.youpaipvideoModel.youpaipto_uid;
  643. YOUPAILCReportVC* report = [[YOUPAILCReportVC alloc]init];
  644. report.youpaipreport_uid = uid;
  645. report.youpaiptype = 2;
  646. [self.navigationController pushViewController:report animated:YES];
  647. }
  648. -(void)youpaiftoRecharge
  649. {
  650. [UMengRecordTool umengEventCountWithId:RechargeClickVideo];
  651. if ([[LCSaveModel getUserModel].youpaipuserinfo.youpaipuser_id isEqualToString:self.youpaipvideoModel.youpaipto_uid]){
  652. [self.youpaipsocketManager sendChat:1 content:@"你余额不足哦,快去充值继续聊吧"];
  653. }
  654. else
  655. {
  656. YOUPAIXRWalletVC* coinRecharge = [[YOUPAIXRWalletVC alloc]init];
  657. [[ZCUtils getCurrentVC].navigationController pushViewController:coinRecharge animated:YES];
  658. }
  659. }
  660. - (void)youpaifdiscountBtnClick{
  661. @weakify(self);
  662. [LCHttpHelper requestWithURLString:VideoGetReduce parameters:@{@"room_id":self.youpaipvideoModel.youpaiproom_id} needToken:YES type:(HttpRequestTypePost) success:^(id responseObject) {
  663. @strongify(self);
  664. NSDictionary* dict = (NSDictionary*)responseObject;
  665. NSInteger code = [[dict objectForKey:@"code"] integerValue];
  666. if (code==0) {//成功
  667. YOUPAILZVideoDiscountWindow *vc = [[YOUPAILZVideoDiscountWindow alloc] init];
  668. vc.isTouchDismiss = YES;
  669. vc.youpaipmodel = [YOUPAILZVideoDiscountModel mj_objectWithKeyValues:[dict objectForKey:@"data"]];
  670. [vc setConfirmBtnClickBlock:^(YOUPAILZVideoDiscountItemModel * _Nonnull itemModel) {
  671. @strongify(self);
  672. [self.youpaipsocketManager discountWithTimerId:itemModel.youpaiptime_id];
  673. }];
  674. [self TFPresentVC:vc completion:^{}];
  675. }
  676. } failure:^(NSError *error) {
  677. }];
  678. }
  679. - (void)demoBarSetBeautyDefultParams {
  680. _youpaipdemoBar.mDelegate = nil ;
  681. [_youpaipdemoBar reloadSkinView:[FUManager shareManager].skinParams];
  682. [_youpaipdemoBar reloadShapView:[FUManager shareManager].shapeParams];
  683. [_youpaipdemoBar reloadFilterView:[FUManager shareManager].filters];
  684. _youpaipdemoBar.mDelegate = self;
  685. }
  686. #pragma mark - Agora
  687. - (void)youpaifinitAgora{
  688. self.youpaipagoraKit = [AgoraRtcEngineKit sharedEngineWithAppId:AgoraID delegate:self];
  689. NSLog(@"version is %@",[AgoraRtcEngineKit getSdkVersion]);
  690. AgoraVideoEncoderConfiguration *configuration = [[AgoraVideoEncoderConfiguration alloc] initWithSize:AgoraVideoDimension1280x720 frameRate:AgoraVideoFrameRateFps24 bitrate:AgoraVideoBitrateCompatible orientationMode:AgoraVideoOutputOrientationModeAdaptative mirrorMode:AgoraVideoMirrorModeAuto];
  691. [self.youpaipagoraKit setVideoEncoderConfiguration:configuration];
  692. [self.youpaipagoraKit enableVideo];
  693. [self.youpaipagoraKit setExternalVideoSource:YES useTexture:YES sourceType:AgoraExternalVideoSourceTypeVideoFrame]; //只允许外部源
  694. [self.youpaipagoraKit setChannelProfile:AgoraChannelProfileLiveBroadcasting];
  695. [self.youpaipagoraKit setClientRole:AgoraClientRoleBroadcaster];
  696. //add by leo 修复视频镜像问题
  697. // [self.youpaipagoraKit setLocalVideoMirrorMode:AgoraVideoMirrorModeDisabled];
  698. // [self.youpaipagoraKit enableWebSdkInteroperability:YES];
  699. //
  700. AgoraRtcVideoCanvas *videoCanvas = [[AgoraRtcVideoCanvas alloc] init];
  701. videoCanvas.mirrorMode = AgoraVideoMirrorModeDisabled;
  702. videoCanvas.uid = 0;
  703. videoCanvas.view = self.youpaiplocalVideo.displayerOpenGLView;
  704. videoCanvas.renderMode = AgoraVideoRenderModeHidden;
  705. self.youpaiplocalCanvas = videoCanvas;
  706. [self.youpaipagoraKit setupLocalVideo:videoCanvas];
  707. }
  708. #pragma mark - AgoraRtcEngineDelegate
  709. //收到对方的视频
  710. - (void)rtcEngine:(AgoraRtcEngineKit *)engine firstRemoteVideoDecodedOfUid:(NSUInteger)uid size:(CGSize)size elapsed:(NSInteger)elapsed
  711. {
  712. self.youpaiplocalVideo.hidden = NO;
  713. self.youpaipremoteVideo.hidden = NO;
  714. self.closeBtn.hidden = NO;
  715. self.youpaipscrollView.hidden = NO;
  716. AgoraRtcVideoCanvas *videoCanvas = [[AgoraRtcVideoCanvas alloc] init];
  717. videoCanvas.renderMode = AgoraVideoRenderModeHidden;
  718. videoCanvas.mirrorMode = AgoraVideoMirrorModeDisabled;
  719. self.youpaipremoteCanvas= videoCanvas;
  720. self.youpaipremoteCanvas.uid = uid;
  721. self.youpaipremoteCanvas.view = self.youpaipremoteVideo.displayerOpenGLView;
  722. int value = [self.youpaipagoraKit setupRemoteVideo:self.youpaipremoteCanvas];
  723. NSLog(@"%d",value);
  724. }
  725. //- (void)rtcEngine:(AgoraRtcEngineKit *)engine
  726. // didVideoMuted:(BOOL)muted byUid:(NSUInteger)uid{
  727. // if (muted) {//对端关闭了视频
  728. // self.youpaiplocalCanvas.view = self.youpaipremoteVideo;
  729. // self.youpaipremoteCanvas.view = self.youpaiplocalVideo;
  730. // [self.youpaipagoraKit setupLocalVideo:self.youpaiplocalCanvas];
  731. // [self.youpaipagoraKit setupRemoteVideo:self.youpaipremoteCanvas];
  732. // self.youpaiplocalVideo.hidden = YES;
  733. // }else{
  734. // self.youpaiplocalCanvas.view = self.youpaiplocalVideo;
  735. // self.youpaipremoteCanvas.view = self.youpaipremoteVideo;
  736. // [self.youpaipagoraKit setupLocalVideo:self.youpaiplocalCanvas];
  737. // [self.youpaipagoraKit setupRemoteVideo:self.youpaipremoteCanvas];
  738. // self.youpaiplocalVideo.hidden = NO;
  739. // }
  740. //
  741. //}
  742. - (void)rtcEngine:(AgoraRtcEngineKit * _Nonnull)engine
  743. remoteVideoStateChangedOfUid:(NSUInteger)uid state:(AgoraVideoRemoteState)state reason:(AgoraVideoRemoteReason)reason elapsed:(NSInteger)elapsed
  744. {
  745. if(reason == AgoraVideoRemoteReasonRemoteMuted){
  746. self.youpaiplocalCanvas.view = self.youpaipremoteVideo.displayerOpenGLView;
  747. self.youpaipremoteCanvas.view = self.youpaiplocalVideo.displayerOpenGLView;
  748. [self.youpaipagoraKit setupLocalVideo:self.youpaiplocalCanvas];
  749. [self.youpaipagoraKit setupRemoteVideo:self.youpaipremoteCanvas];
  750. self.youpaiplocalVideo.hidden = YES;
  751. [YOUPAIXLVideoShotTool sharedPusher].localVideo = self.youpaipremoteVideo.displayerOpenGLView;
  752. [YOUPAIXLVideoShotTool sharedPusher].remoteVideo = self.youpaiplocalVideo.displayerOpenGLView;
  753. }else if(reason == AgoraVideoRemoteReasonRemoteUnmuted){ //远端恢复视频上传
  754. self.youpaiplocalCanvas.view = self.youpaiplocalVideo.displayerOpenGLView;
  755. self.youpaipremoteCanvas.view = self.youpaipremoteVideo.displayerOpenGLView;
  756. [self.youpaipagoraKit setupLocalVideo:self.youpaiplocalCanvas];
  757. [self.youpaipagoraKit setupRemoteVideo:self.youpaipremoteCanvas];
  758. self.youpaiplocalVideo.hidden = NO;
  759. [YOUPAIXLVideoShotTool sharedPusher].localVideo = self.youpaiplocalVideo.displayerOpenGLView;
  760. [YOUPAIXLVideoShotTool sharedPusher].remoteVideo = self.youpaipremoteVideo.displayerOpenGLView;
  761. }
  762. }
  763. - (void)rtcEngine:(AgoraRtcEngineKit *)engine didAudioRouteChanged:(AgoraAudioOutputRouting)routing{
  764. // [ZCHUDHelper showTitle:[NSString stringWithFormat:@"音频路由已切换%d",routing]];
  765. }
  766. //踢人 v1.1.1
  767. //- (void)rtcEngine:(AgoraRtcEngineKit *_Nonnull)engine connectionChangedToState:(AgoraConnectionStateType)state reason:(AgoraConnectionChangedReason)reason
  768. //{
  769. // if(reason ==3)
  770. // {
  771. // NSLog(@"收到踢人消息");
  772. // // [self videoEnd:5];
  773. // }
  774. //}
  775. #pragma mark - Agora Video Source Protocol
  776. - (BOOL)shouldInitialize {
  777. return YES;
  778. }
  779. - (void)shouldStart {
  780. [self.youpaipmCamera startCapture];
  781. }
  782. - (void)shouldStop {
  783. [self.youpaipmCamera stopCapture];
  784. }
  785. - (void)shouldDispose {
  786. }
  787. //- (AgoraVideoBufferType)bufferType {
  788. // return AgoraVideoBufferTypePixelBuffer;
  789. //}
  790. //- (AgoraVideoCaptureType)captureType{
  791. // return AgoraVideoCaptureTypeCamera;
  792. //}
  793. #pragma mark - FUCameraDelegate
  794. bool isNeeded = YES;
  795. -(void)didOutputVideoSampleBuffer:(CMSampleBufferRef)sampleBuffer {
  796. if (isNeeded) {
  797. isNeeded = !isNeeded;
  798. return;
  799. }
  800. isNeeded = !isNeeded;
  801. CFAbsoluteTime startTime = CFAbsoluteTimeGetCurrent();
  802. CVPixelBufferRef pixelBuffer = (CVPixelBufferRef)CMSampleBufferGetImageBuffer(sampleBuffer) ;
  803. CVPixelBufferLockBaseAddress(pixelBuffer, 0);
  804. // CFAbsoluteTime startRenderTime = CFAbsoluteTimeGetCurrent();
  805. //render the items to pixelbuffer
  806. if ([LCSaveModel getBeautyModel].beautyOpen) {
  807. [[FUManager shareManager] renderItemsToPixelBuffer:pixelBuffer];
  808. }
  809. // CFAbsoluteTime renderTime = (CFAbsoluteTimeGetCurrent() - startRenderTime);
  810. //
  811. //
  812. // CFAbsoluteTime frameTime = (CFAbsoluteTimeGetCurrent() - startTime);
  813. //
  814. // int frameWidth = (int)CVPixelBufferGetWidth(pixelBuffer);
  815. // int frameHeight = (int)CVPixelBufferGetHeight(pixelBuffer);
  816. CGSize frameSize;
  817. if (CVPixelBufferGetPixelFormatType(pixelBuffer) == kCVPixelFormatType_32BGRA) {
  818. frameSize = CGSizeMake(CVPixelBufferGetBytesPerRow(pixelBuffer) / 4, CVPixelBufferGetHeight(pixelBuffer));
  819. }else{
  820. frameSize = CGSizeMake(CVPixelBufferGetWidth(pixelBuffer), CVPixelBufferGetHeight(pixelBuffer));
  821. }
  822. // push video frame to agora
  823. // [self.consumer consumePixelBuffer:pixelBuffer withTimestamp:CMSampleBufferGetPresentationTimeStamp(sampleBuffer) rotation:AgoraVideoRotationNone];
  824. // CVPixelBufferUnlockBaseAddress(pixelBuffer, 0);
  825. AgoraVideoFrame *videoFrame = [[AgoraVideoFrame alloc] init];
  826. videoFrame.format = 12;
  827. videoFrame.rotation = 0;
  828. videoFrame.textureBuf = pixelBuffer;
  829. // self.youpaiplocalCanvas.view;
  830. [[YOUPAIXLVideoShotTool sharedPusher].localVideo displayPixelBuffer:pixelBuffer withLandmarks:NULL count:0 MAX:YES];
  831. // [self.youpaiplocalVideo displayPixelBuffer:pixelBuffer withLandmarks:NULL count:0 MAX:YES];
  832. // BOOL result = [self.youpaipagoraKit pushExternalAudioFrameSampleBuffer:videoFrame];
  833. BOOL result = [self.youpaipagoraKit pushExternalVideoFrame:videoFrame];
  834. // pushExternalVideoFrame:videoFrame];
  835. // CVPixelBufferUnlockBaseAddress(pixelBuffer, 0);
  836. }
  837. #pragma mark - WebSocketDelegate
  838. - (void)youpaifrequestSuccess{
  839. }
  840. - (void)responseConnent{
  841. }
  842. - (void)responseChoosing:(NSString*)tip{
  843. }
  844. //add by leo 剩余可通话时间
  845. - (void)canCallTime:(NSString*)tip
  846. {
  847. }
  848. //v1.1.1断连重连
  849. - (void)videoStart:(NSDictionary*)dict{
  850. [self.youpaipplayer stop];
  851. self.youpaipvideoModel.youpaipduration = [dict[@"duration"] integerValue];
  852. //测试闪退
  853. /*
  854. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(10 * NSEC_PER_SEC)), dispatch_get_main_queue(),^{
  855. NSString *aSt = nil;
  856. NSDictionary *dic = @{@"key":aSt};
  857. });
  858. */
  859. //add by leo 防止录屏
  860. UIScreen * sc = [UIScreen mainScreen];
  861. if (@available(iOS 11.0, *))
  862. {
  863. if (sc.isCaptured)
  864. {
  865. [self youpaifshowPromptWarningView:YES];
  866. //add by leo 录屏上报
  867. [self youpaifshotCheck:2];
  868. }
  869. }
  870. else {
  871. // Fallback on earlier versions
  872. }
  873. //是否主叫
  874. BOOL callfrom = [[LCSaveModel getUserModel].youpaipuserinfo.youpaipuser_id isEqualToString:self.youpaipvideoModel.youpaipfrom_uid];
  875. if (self.youpaipvideoModel.youpaipporn_check_v2.youpaipis_open && (self.youpaipvideoModel.youpaipporn_check_v2.youpaipcheck_from_user || callfrom)) {
  876. NSLog(@"鉴黄已打开");
  877. [YOUPAIXLVideoShotTool sharedPusher].shotCycle = self.youpaipvideoModel.youpaipporn_check_v2.youpaipinterval_time;
  878. [YOUPAIXLVideoShotTool sharedPusher].periodArray = self.youpaipvideoModel.youpaipporn_check_v2.youpaipperiod_array;
  879. // [YOUPAIAGVideoProcessing registerVideoPreprocessing:self.youpaipagoraKit];
  880. //老版本
  881. /*
  882. [YOUPAIXLVideoShotTool sharedPusher].shotCycle = self.videoModel.porn_check.interval_time;
  883. [YOUPAIXLVideoShotTool sharedPusher].period = self.videoModel.porn_check.period;
  884. */
  885. [YOUPAIXLVideoShotTool sharedPusher].room_id = self.youpaipvideoModel.youpaiproom_id;
  886. [YOUPAIXLVideoShotTool sharedPusher].localVideo = self.youpaiplocalVideo.displayerOpenGLView;
  887. [YOUPAIXLVideoShotTool sharedPusher].remoteVideo = self.youpaipremoteVideo.displayerOpenGLView;
  888. [YOUPAIXLVideoShotTool sharedPusher].isPornCheckOpen = YES;
  889. if ([[LCSaveModel getUserModel].youpaipuserinfo.youpaipuser_id isEqualToString:self.youpaipvideoModel.youpaipfrom_uid]){//自己是被叫端
  890. [YOUPAIXLVideoShotTool sharedPusher].isFrom = YES;
  891. [YOUPAIXLVideoShotTool sharedPusher].uid = self.youpaipvideoModel.youpaipto_uid;
  892. }else{
  893. [YOUPAIXLVideoShotTool sharedPusher].isFrom = NO;
  894. [YOUPAIXLVideoShotTool sharedPusher].uid = self.youpaipvideoModel.youpaipfrom_uid;
  895. }
  896. [YOUPAIXLVideoShotTool start];
  897. }
  898. //加入声网频道
  899. //modify by leo fix bug object unrelease
  900. @weakify(self);
  901. int status = [self.youpaipagoraKit joinChannelByToken:nil channelId:self.youpaipvideoModel.youpaiproom_id info:nil uid:[[LCSaveModel getUserModel].youpaipuserinfo.youpaipuser_id integerValue] joinSuccess:^(NSString *channel, NSUInteger uid, NSInteger elapsed) {
  902. @strongify(self);
  903. if([self.youpaipagoraKit isSpeakerphoneEnabled]){
  904. [self.youpaipagoraKit setEnableSpeakerphone:YES];
  905. }
  906. // self.localVideo.hidden = YES;
  907. [UIApplication sharedApplication].idleTimerDisabled = YES;
  908. }];
  909. if (status<0) {
  910. NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
  911. NSString *cachesDir = [paths objectAtIndex:0];
  912. // 构建文件路径
  913. NSString *filePath = [cachesDir stringByAppendingPathComponent:@"agorasdk.log"];
  914. // 检查文件是否存在
  915. if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
  916. [LCCommonHttp uploadWithLocalFile:filePath successBlock:nil];
  917. }
  918. }
  919. }
  920. //1主动取消 2。拒绝 3.超时 4.被叫者挂断 5.主叫者挂断 6.费用不足
  921. - (void)videoEnd:(NSInteger)type{
  922. [self.youpaipsocketManager stopConnect];
  923. self.youpaipsocketManager = nil;
  924. kAppDelegate.ksocketManager = nil;
  925. [LCSaveData saveIsVideo:NO];
  926. [[NSNotificationCenter defaultCenter] removeObserver:self];
  927. if (self.youpaiptimer) {
  928. dispatch_source_cancel(self.youpaiptimer);//删除GCD定时器
  929. self.youpaiptimer = nil;
  930. }
  931. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  932. [self.youpaipmCamera stopCapture];
  933. dispatch_async(self.youpaipmCamera.videoCaptureQueue, ^{
  934. [[FUManager shareManager] destoryItems];
  935. });
  936. [self.youpaipagoraKit setExternalVideoSource:YES useTexture:YES sourceType:AgoraExternalVideoSourceTypeVideoFrame]; //只允许外部源
  937. [self.youpaipagoraKit leaveChannel:nil];
  938. [AgoraRtcEngineKit destroy];
  939. if (type==11) {
  940. if ([[LCSaveModel getUserModel].youpaipuserinfo.youpaipuser_id isEqualToString:self.youpaipvideoModel.youpaipto_uid]){//自己是被叫端
  941. [self.navigationController dismissViewControllerAnimated:YES completion:^{
  942. }];
  943. }else{//自己是主叫端
  944. [YOUPAIXLVideoShotTool stop];
  945. YOUPAILCVideoFinishVC* finish = [[YOUPAILCVideoFinishVC alloc]init];
  946. finish.youpaipvideoModel = self.youpaipvideoModel;
  947. finish.role = 1;
  948. [self.navigationController pushViewController:finish animated:YES];
  949. }
  950. }
  951. if (type==4|| type==5 || type==6 || type==10) {//去往评价结束界面
  952. //add by leo 关闭上传截图 定时器
  953. [YOUPAIXLVideoShotTool stop];
  954. YOUPAILCVideoFinishVC* finish = [[YOUPAILCVideoFinishVC alloc]init];
  955. finish.youpaipvideoModel = self.youpaipvideoModel;
  956. finish.role = 2;
  957. [self.navigationController pushViewController:finish animated:YES];
  958. }else{
  959. [self.navigationController dismissViewControllerAnimated:YES completion:^{
  960. NSLog(@"2222222");
  961. }];
  962. }
  963. });
  964. }
  965. //刷新会话页面的chatTableView
  966. - (void)reciveTxt:(NSDictionary*)dict{
  967. YOUPAILCVideoChatMessageModel* msgModel = [YOUPAILCVideoChatMessageModel mj_objectWithKeyValues:dict];
  968. if ([msgModel.youpaipfrom_uid isEqual:self.youpaipvideoModel.youpaipfrom_uid]) {
  969. msgModel.youpaipfrom_nickname = self.youpaipvideoModel.youpaipfrom_nickname;
  970. msgModel.youpaipto_nickname = self.youpaipvideoModel.youpaipto_nickname;
  971. msgModel.youpaipfrom_avatar = self.youpaipvideoModel.youpaipfrom_avatar;
  972. msgModel.youpaipto_avatar = self.youpaipvideoModel.youpaipto_avatar;
  973. }else{
  974. msgModel.youpaipfrom_nickname = self.youpaipvideoModel.youpaipto_nickname;
  975. msgModel.youpaipto_nickname = self.youpaipvideoModel.youpaipfrom_nickname;
  976. msgModel.youpaipfrom_avatar = self.youpaipvideoModel.youpaipto_avatar;
  977. msgModel.youpaipto_avatar = self.youpaipvideoModel.youpaipfrom_avatar;
  978. }
  979. NSLog(@"reciveTxt 消息类型 = %ld",msgModel.youpaiptype);
  980. NSLog(@"reciveTxt content = %@",msgModel.youpaipcontent);
  981. [self.youpaipchatArray insertObject:msgModel atIndex:0];
  982. [self.youpaipchatTableView beginUpdates];
  983. [self.youpaipchatTableView insertRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:0]] withRowAnimation:(UITableViewRowAnimationNone)];
  984. [self.youpaipchatTableView endUpdates];
  985. [self.youpaipchatTableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:(UITableViewScrollPositionNone) animated:YES];
  986. if (msgModel.youpaiptype == 6 && [self.youpaipvideoModel.youpaipto_uid isEqual:[LCSaveModel getUserModel].youpaipuserinfo.youpaipuser_id]) {
  987. [ZCHUDHelper showTitle:@"减免成功"];
  988. return;
  989. }
  990. NSDictionary* giftDict = [msgModel.youpaipcontent mj_JSONObject];
  991. NSString* gifttype = [giftDict objectForKey:@"gifttype"];
  992. NSString* giftsvga = [giftDict objectForKey:@"giftsvga"];
  993. if (giftsvga.length == 0) {
  994. gifttype = [dict objectForKey:@"gifttype"];
  995. giftsvga = [dict objectForKey:@"giftsvga"];
  996. }
  997. NSInteger link_type = [[dict objectForKey:@"link_type"] integerValue];
  998. NSString *link_url = [dict objectForKey:@"link_url"];
  999. if (msgModel.youpaiptype == 1 && link_type == 2 && [link_url isEqual:@"rechargeCoin"]){//礼物
  1000. LZAlertAction *cancelAction = [LZAlertAction actionWithTitle:@"舍不得" handler:^(LZAlertAction *action) {
  1001. }];
  1002. cancelAction.cornerRadius = 24.0f;
  1003. cancelAction.color = LZ273145Color;
  1004. cancelAction.bgColor = LZF5F4F7Color;
  1005. LZAlertAction *confimAction = [LZAlertAction actionWithTitle:@"去充值" handler:^(LZAlertAction *action) {
  1006. [[NSNotificationCenter defaultCenter] postNotificationName:@"InsufficientBalanceNotice" object:nil userInfo:nil];
  1007. // YOUPAIHRRechargePayWindow *payWindow = [YOUPAIHRRechargePayWindow new];
  1008. // payWindow.isTouchDismiss = NO;
  1009. // [self.navigationController TFPresentVC:payWindow completion:^{
  1010. //
  1011. // }];
  1012. YMAccountBalanceViewModel *accountBalanceVM = [[YMAccountBalanceViewModel alloc]initWithParams:@{
  1013. ParamsId:@([[LCSaveModel getUserModel].youpaipuserinfo.youpaipuser_id intValue])
  1014. }];
  1015. YMAccountBalanceRechargePopupView *customView = [[YMAccountBalanceRechargePopupView alloc]init];
  1016. [customView ym_bindViewModel:accountBalanceVM];
  1017. YMPopupView *popupView = [YMPopupView initWithCustomView:customView parentView:nil popStyle:YMPopupStyleSmoothFromBottom dismissStyle:YMDismissStyleSmoothToBottom];
  1018. popupView.priority = 999;
  1019. popupView.cornerRadius = adapt(10);
  1020. popupView.rectCorners = UIRectCornerTopLeft|UIRectCornerTopRight;
  1021. popupView.positionStyle = YMPositionStyleBottom;
  1022. popupView.isClickBgDismiss = YES;
  1023. popupView.isHideBg = NO;
  1024. popupView.bgAlpha = 0.5;
  1025. [popupView pop];
  1026. @weakify(popupView)
  1027. customView.dismissBlock = ^{
  1028. @strongify(popupView)
  1029. [popupView dismissWithStyle:YMDismissStyleSmoothToBottom duration:2.0];
  1030. };
  1031. }];
  1032. confimAction.cornerRadius = 24.0f;
  1033. confimAction.color = [UIColor whiteColor];
  1034. confimAction.bgColor = [UIColor colorWithPatternImage:[LCTools ColorImage:CGSizeMake((KScreenWidth - 105.0f) / 2.0f, 48.0f) FromColors:@[LZBFB6FFColor,LZ7C69FEColor] ByGradientType:GradientLeftToRight]];
  1035. LZAlertWindow *alert = [LZAlertWindow alertWithTitle:@"提示" content:@"您的钻石数量不足,去购买" action:@[cancelAction,confimAction]];
  1036. alert.contentTextAlignment = NSTextAlignmentCenter;
  1037. [self TFPresentVC:alert completion:^{}];
  1038. }
  1039. if (msgModel.youpaiptype==3){//礼物
  1040. // NSDictionary* giftDict = [msgModel.content mj_JSONObject];
  1041. NSString* giftcount = [giftDict objectForKey:@"giftcount"];
  1042. NSInteger giftid = [[giftDict objectForKey:@"giftid"] integerValue];
  1043. // NSString* gifttype = [giftDict objectForKey:@"gifttype"];
  1044. // NSString* giftsvga = [giftDict objectForKey:@"giftsvga"];
  1045. NSString* gifticon = [giftDict objectForKey:@"gifticon"];
  1046. YOUPAILZLiveGIftModel *giftModel = [[YOUPAILZLiveGIftModel alloc] init];
  1047. giftModel.youpaipavatar = msgModel.youpaipfrom_avatar;
  1048. giftModel.youpaipnickName = msgModel.youpaipfrom_nickname;
  1049. giftModel.youpaipgiftImage = gifticon;
  1050. giftModel.youpaipgiftCount = [giftcount integerValue];
  1051. giftModel.youpaipuser_id = [msgModel.youpaipfrom_uid integerValue];
  1052. giftModel.youpaipgift_id = giftid;
  1053. giftModel.youpaipgift_svga = giftsvga;
  1054. giftModel.youpaipgift_type = [gifttype integerValue];
  1055. giftModel.youpaipto_uid = [msgModel.youpaipto_uid integerValue];
  1056. giftModel.youpaipto_nickName= msgModel.youpaipto_nickname;
  1057. if ([[LCSaveModel getUserModel].youpaipuserinfo.youpaipuser_id isEqual:msgModel.youpaipfrom_uid]) {
  1058. [self.youpaipgifts insertObject:giftModel atIndex:0];
  1059. }else{
  1060. [self.youpaipgifts addObject:giftModel];
  1061. }
  1062. [self youpaifeditGiftView];
  1063. }else if (msgModel.youpaiptype==1 && giftsvga.length != 0){
  1064. // NSDictionary* giftDict = [msgModel.content mj_JSONObject];
  1065. NSString* giftcount = [dict objectForKey:@"giftcount"];
  1066. NSInteger giftid = -1;
  1067. // NSString* gifttype = [giftDict objectForKey:@"gifttype"];
  1068. // NSString* giftsvga = [giftDict objectForKey:@"giftsvga"];
  1069. NSString* gifticon = [dict objectForKey:@"gifticon"];
  1070. YOUPAILZLiveGIftModel *giftModel = [[YOUPAILZLiveGIftModel alloc] init];
  1071. giftModel.youpaipavatar = msgModel.youpaipto_avatar;
  1072. giftModel.youpaipnickName = msgModel.youpaipto_nickname;
  1073. giftModel.youpaipgiftImage = gifticon;
  1074. giftModel.youpaipgiftCount = [giftcount integerValue];
  1075. giftModel.youpaipuser_id = [msgModel.youpaipfrom_uid integerValue];
  1076. giftModel.youpaipgift_id = giftid;
  1077. giftModel.youpaipgift_svga = giftsvga;
  1078. giftModel.youpaipgift_type = [gifttype integerValue];
  1079. giftModel.youpaipto_uid = [msgModel.youpaipfrom_uid integerValue];
  1080. giftModel.youpaipto_nickName= msgModel.youpaipfrom_nickname;
  1081. if ([[LCSaveModel getUserModel].youpaipuserinfo.youpaipuser_id isEqual:msgModel.youpaipfrom_uid]) {
  1082. [self.youpaipgifts insertObject:giftModel atIndex:0];
  1083. }else{
  1084. [self.youpaipgifts addObject:giftModel];
  1085. }
  1086. [self youpaifeditGiftView];
  1087. }
  1088. }
  1089. #pragma mark -消息来自聊天房间
  1090. - (void)giftMsgForIm:(YOUPAILZLiveGIftModel *)chatRoomGiftModel{
  1091. NSString *youpaipfrom_uid = self.youpaipvideoModel.youpaipfrom_uid; //呼叫者UID
  1092. NSString *youpaipto_uid = self.youpaipvideoModel.youpaipto_uid; // 被叫者UID
  1093. // 只播放当前房间正在交流的 礼物svga
  1094. if([youpaipto_uid integerValue] == chatRoomGiftModel.youpaipuser_id ||
  1095. [youpaipfrom_uid integerValue] == chatRoomGiftModel.youpaipuser_id){
  1096. [self.youpaipgifts insertObject:chatRoomGiftModel atIndex:0];
  1097. [self youpaifeditGiftView];
  1098. }
  1099. }
  1100. //视频过程中 收到同房间的消息
  1101. - (void)videoingRecMessage:(NIMMessage *)message{
  1102. NSString *youpaipto_uid = self.youpaipvideoModel.youpaipto_uid; //被叫者UID
  1103. NSString *youpaipfrom_uid = self.youpaipvideoModel.youpaipfrom_uid; //呼叫者UID
  1104. NSString *currentAccount = [[[NIMSDK sharedSDK] loginManager] currentAccount];
  1105. // BOOL recIsMe = [message.session.sessionId isEqualToString:currentAccount]; // 收到消息是发给我的
  1106. // 且发消息的人 是我们正在视频中的人
  1107. BOOL recIsCurrRoom = [message.session.sessionId isEqualToString:youpaipto_uid] || [message.session.sessionId isEqualToString:youpaipfrom_uid];
  1108. if(recIsCurrRoom){
  1109. // asds
  1110. YOUPAILCVideoChatMessageModel* msgModel = [[YOUPAILCVideoChatMessageModel alloc] init];
  1111. msgModel.youpaiptype = 2;
  1112. msgModel.youpaipcontent = message.text;
  1113. if ([message.from isEqualToString:currentAccount]) { // 如果收到的消息 是自己发送的消息
  1114. msgModel.youpaipfrom_nickname = @"我";
  1115. msgModel.youpaipto_nickname = @"";
  1116. msgModel.youpaipfrom_avatar = @"";
  1117. msgModel.youpaipto_avatar = @"";
  1118. msgModel.youpaipfrom_uid = [LCSaveModel getUserModel].youpaipuserinfo.youpaipuser_id; //
  1119. }else{
  1120. // 是对方发过来的
  1121. msgModel.youpaipfrom_nickname = message.senderName; //发送消息人的名字
  1122. msgModel.youpaipto_nickname = @"我";
  1123. msgModel.youpaipfrom_avatar = @"";
  1124. msgModel.youpaipto_avatar = @"";
  1125. msgModel.youpaipfrom_uid = [self getRemoteSessionID]; //
  1126. }
  1127. NSLog(@"reciveTxt 消息类型 = %ld",msgModel.youpaiptype);
  1128. NSLog(@"reciveTxt content = %@",msgModel.youpaipcontent);
  1129. [self.youpaipchatArray insertObject:msgModel atIndex:0];
  1130. [self.youpaipchatTableView beginUpdates];
  1131. [self.youpaipchatTableView insertRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:0]] withRowAnimation:(UITableViewRowAnimationNone)];
  1132. [self.youpaipchatTableView endUpdates];
  1133. [self.youpaipchatTableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:(UITableViewScrollPositionNone) animated:YES];
  1134. }
  1135. }
  1136. /// 处理礼物
  1137. - (void)youpaifeditGiftView{
  1138. NSInteger maxCount = 2;
  1139. NSInteger count = maxCount - self.youpaipgiftViews.count;
  1140. if (count > self.youpaipgifts.count) {
  1141. count = self.youpaipgifts.count;
  1142. }
  1143. if (count <= 0) {
  1144. for (NSInteger i = 0; i < self.youpaipgiftViews.count; i ++) {
  1145. if (self.youpaipgifts.count <= 0) {
  1146. return;
  1147. }
  1148. YOUPAILZLiveGIftModel *giftModel = self.youpaipgifts[i];
  1149. YOUPAILZChatRoomGiftView *giftView = nil;
  1150. for (YOUPAILZChatRoomGiftView *f_giftView in self.youpaipgiftViews) {
  1151. if (f_giftView.youpaipgiftModel.youpaipuser_id == giftModel.youpaipuser_id && f_giftView.youpaipgiftModel.youpaipgift_id == giftModel.youpaipgift_id && giftModel.youpaipgift_id != -1) {
  1152. giftView = f_giftView;
  1153. break;
  1154. }
  1155. }
  1156. if (giftView != nil) {
  1157. i --;
  1158. [giftView youpaifupdateGiftCount:giftModel.youpaipgiftCount];
  1159. [self.youpaipgifts removeObject:giftModel];
  1160. if (giftModel.youpaipgift_type == 1 && ![giftModel.youpaipgift_svga isEqualToString:@""]) {
  1161. [self.youpaipsvgas addObject:giftModel];
  1162. [self youpaifstartPlaySvga];
  1163. }
  1164. [self.youpaipgifts removeObject:giftModel];
  1165. }
  1166. }
  1167. }else{
  1168. for (NSInteger i = 0; i < count; i ++) {
  1169. if (self.youpaipgifts.count <= 0) {
  1170. return;
  1171. }
  1172. YOUPAILZLiveGIftModel *giftModel = self.youpaipgifts[i];
  1173. YOUPAILZChatRoomGiftView *giftView = nil;
  1174. for (YOUPAILZChatRoomGiftView *f_giftView in self.youpaipgiftViews) {
  1175. if (f_giftView.youpaipgiftModel.youpaipuser_id == giftModel.youpaipuser_id && f_giftView.youpaipgiftModel.youpaipgift_id == giftModel.youpaipgift_id && giftModel.youpaipgift_id != -1) {
  1176. giftView = f_giftView;
  1177. break;
  1178. }
  1179. }
  1180. if (giftView != nil) {
  1181. i --;
  1182. [giftView youpaifupdateGiftCount:giftModel.youpaipgiftCount];
  1183. [self.youpaipgifts removeObject:giftModel];
  1184. if (giftModel.youpaipgift_type == 1 && ![giftModel.youpaipgift_svga isEqualToString:@""]) {
  1185. [self.youpaipsvgas addObject:giftModel];
  1186. [self youpaifstartPlaySvga];
  1187. }
  1188. }else{
  1189. if (giftModel.youpaipgift_type == 1 && ![giftModel.youpaipgift_svga isEqualToString:@""]) {
  1190. [self.youpaipsvgas addObject:giftModel];
  1191. [self youpaifstartPlaySvga];
  1192. }
  1193. YOUPAILZChatRoomGiftView *giftView = [[YOUPAILZChatRoomGiftView alloc] initWithModel:giftModel];
  1194. // [giftView addTarget:self action:@selector(youpaifgiftAnimationViewClick:) forControlEvents:UIControlEventTouchUpInside];
  1195. NSInteger tag = 0;
  1196. if (self.youpaipgiftViews.count == 1){
  1197. if (self.youpaipgiftViews.lastObject.tag == 1) {
  1198. tag = 0;
  1199. }else{
  1200. tag = 1;
  1201. }
  1202. }
  1203. giftView.tag = tag;
  1204. [self.youpaipinterView addSubview:giftView];
  1205. [self.youpaipgiftViews addObject:giftView];
  1206. if (giftView != nil) {
  1207. UIView *view = self.youpaipgiftViews.lastObject;
  1208. if (view != nil) {
  1209. [giftView mas_makeConstraints:^(MASConstraintMaker *make) {
  1210. make.left.offset(-200.0f);
  1211. if (view.tag == 0) {
  1212. make.bottom.equalTo(self.youpaipchatTableView.mas_top).offset(-15.0f);
  1213. }else{
  1214. make.bottom.equalTo(self.youpaipchatTableView.mas_top).offset(-30.0f-40.0f);
  1215. }
  1216. make.height.offset(40.0f);
  1217. }];
  1218. }
  1219. }
  1220. [giftView.superview layoutIfNeeded];
  1221. [giftView youpaifshowAnimation];
  1222. giftView.delegate = self;
  1223. [self.youpaipgifts removeObject:giftModel];
  1224. }
  1225. }
  1226. }
  1227. }
  1228. - (void)youpaifanimatiomFinishWithView:(YOUPAILZChatRoomGiftView *)liveGiftView{
  1229. [self.youpaipgiftViews removeObject:liveGiftView];
  1230. [liveGiftView removeFromSuperview];
  1231. [self youpaifeditGiftView];
  1232. }
  1233. - (void)youpaifstartPlaySvga{
  1234. if (self.youpaipisPlaySvga == NO && self.youpaipsvgas.count != 0) {
  1235. self.youpaipisPlaySvga = YES;
  1236. YOUPAILZLiveGIftModel* giftModel = self.youpaipsvgas[0];
  1237. [self.youpaipsvgaPlayer stopAnimation];
  1238. if (giftModel.youpaipgift_type == 1 && ![giftModel.youpaipgift_svga isEqualToString:@""]) {
  1239. self.youpaipsvgaPlayer.hidden = NO;
  1240. }
  1241. NSString* svgaName = [[giftModel.youpaipgift_svga componentsSeparatedByString:@"/"] lastObject];
  1242. NSString* svgaCanchesPath= [[NSString alloc]initWithFormat:@"%@/%@/%@",CachesPath,@"SVGA",svgaName];
  1243. if (![LCTools giftSVGAWithSvgaUrlStr:giftModel.youpaipgift_svga]){
  1244. NSString* urlStr = [NSString stringWithFormat:@"%@/%@",[LCSaveData getImageUrl]?[LCSaveData getImageUrl]:BaseImgUrl,giftModel.youpaipgift_svga];
  1245. @weakify(self);
  1246. [self.youpaipparser parseWithURLRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:urlStr]] completionBlock:^(SVGAVideoEntity * _Nullable videoItem) {
  1247. @strongify(self);
  1248. if (videoItem != nil) {
  1249. self.youpaipsvgaPlayer.hidden = NO;
  1250. self.youpaipsvgaPlayer.videoItem = videoItem;
  1251. [self.youpaipsvgaPlayer startAnimation];
  1252. }
  1253. } failureBlock:^(NSError * _Nullable error) {
  1254. @strongify(self);
  1255. self.youpaipsvgaPlayer.hidden = YES;
  1256. self.youpaipisPlaySvga = NO;
  1257. [self youpaifstartPlaySvga];
  1258. }];
  1259. [LCTools giftSVGAWithSvgaUrlStr:giftModel.youpaipgift_svga];
  1260. }else{
  1261. @weakify(self);
  1262. [self.youpaipparser parseWithData:[LCTools giftSVGAWithSvgaUrlStr:giftModel.youpaipgift_svga] cacheKey:svgaCanchesPath completionBlock:^(SVGAVideoEntity * _Nonnull videoItem) {
  1263. @strongify(self);
  1264. if (videoItem != nil) {
  1265. self.youpaipsvgaPlayer.hidden = NO;
  1266. self.youpaipsvgaPlayer.videoItem = videoItem;
  1267. [self.youpaipsvgaPlayer startAnimation];
  1268. }
  1269. } failureBlock:^(NSError * _Nonnull error) {
  1270. @strongify(self);
  1271. self.youpaipsvgaPlayer.hidden = YES;
  1272. self.youpaipisPlaySvga = NO;
  1273. [self youpaifstartPlaySvga];
  1274. }];
  1275. }
  1276. [self.youpaipsvgas removeObject:giftModel];
  1277. }
  1278. }
  1279. - (NSMutableArray *)youpaipgifts{// 礼物数据
  1280. if (!_youpaipgifts) {
  1281. _youpaipgifts = [NSMutableArray array];
  1282. }
  1283. return _youpaipgifts;
  1284. }
  1285. - (NSMutableArray<YOUPAILZChatRoomGiftView *> *)youpaipgiftViews{// 礼物
  1286. if (!_youpaipgiftViews) {
  1287. _youpaipgiftViews = [NSMutableArray array];
  1288. }
  1289. return _youpaipgiftViews;
  1290. }
  1291. - (NSMutableArray *)youpaipsvgas{
  1292. if (!_youpaipsvgas) {
  1293. _youpaipsvgas = [NSMutableArray array];
  1294. }
  1295. return _youpaipsvgas;
  1296. }
  1297. #pragma mark - SVGAPlayerDelegate
  1298. - (void)svgaPlayerDidFinishedAnimation:(SVGAPlayer *)player{
  1299. self.youpaipsvgaPlayer.hidden = YES;
  1300. self.youpaipisPlaySvga = NO;
  1301. [self youpaifstartPlaySvga];
  1302. }
  1303. - (void)youpaifcloseBtnClick{
  1304. LZAlertAction *cancelAction = [LZAlertAction actionWithTitle:@"取消" handler:^(LZAlertAction *action) {
  1305. }];
  1306. cancelAction.cornerRadius = 24.0f;
  1307. cancelAction.color = LZ273145Color;
  1308. cancelAction.bgColor = LZF5F4F7Color;
  1309. @weakify(self);
  1310. LZAlertAction *confimAction = [LZAlertAction actionWithTitle:@"确定" handler:^(LZAlertAction *action) {
  1311. @strongify(self);
  1312. [self.youpaipsocketManager sendHangup];
  1313. }];
  1314. confimAction.cornerRadius = 24.0f;
  1315. confimAction.color = [UIColor whiteColor];
  1316. confimAction.bgColor = [UIColor colorWithPatternImage:[LCTools ColorImage:CGSizeMake((KScreenWidth - 105.0f) / 2.0f, 48.0f) FromColors:@[LZBFB6FFColor,LZ7C69FEColor] ByGradientType:GradientLeftToRight]];
  1317. LZAlertWindow *alert = [LZAlertWindow alertWithTitle:@"提示" content:@"确定挂断视频咨询?" action:@[cancelAction,confimAction]];
  1318. alert.contentTextAlignment = NSTextAlignmentCenter;
  1319. [self TFPresentVC:alert completion:^{}];
  1320. }
  1321. // 获取对方的id
  1322. - (NSString *)getRemoteSessionID{
  1323. NSString *youpaipto_uid = self.youpaipvideoModel.youpaipto_uid; //被叫者UID
  1324. NSString *youpaipfrom_uid = self.youpaipvideoModel.youpaipfrom_uid; //呼叫者UID
  1325. NSString *currentAccount = [[[NIMSDK sharedSDK] loginManager] currentAccount];
  1326. if([currentAccount isEqualToString:youpaipto_uid]){
  1327. return youpaipfrom_uid;
  1328. }else{
  1329. return youpaipto_uid;
  1330. }
  1331. }
  1332. #pragma mark - interActive
  1333. - (void)youpaifsendMsgBtnClick{
  1334. NSString* sendText =[self.youpaipsendTextF.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
  1335. if (sendText.length > 0) {
  1336. // 组装消息体
  1337. NIMMessage *message = [NIMMessageMaker msgWithText:sendText];
  1338. NIMSession *session = [NIMSession session:[self getRemoteSessionID] type:(NIMSessionTypeP2P)];
  1339. WeakSelf;
  1340. [YOUPAILCIMTool sendMessage:message sessionid:session.sessionId completion:^(NIMMessage *resultMsg,NSInteger filter,NSString *contentStr) {
  1341. if (filter==0) {
  1342. [[[NIMSDK sharedSDK] chatManager] sendMessage:resultMsg toSession:session error:nil];
  1343. }else{
  1344. resultMsg.text = contentStr;
  1345. [[[NIMSDK sharedSDK] chatManager] sendMessage:resultMsg toSession:session error:nil];
  1346. }
  1347. [self videoingRecMessage:message];
  1348. }];
  1349. self.youpaipsendTextF.text = @"";
  1350. }else{
  1351. [ZCHUDHelper showTitle:@"发送内容不能为空"];
  1352. }
  1353. }
  1354. - (void)youpaiftimeStart{
  1355. //v1.1.1断连重连
  1356. __block NSInteger timeout = self.youpaipvideoModel.youpaipduration;
  1357. @weakify(self);
  1358. dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
  1359. dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0,queue);
  1360. self.youpaiptimer = timer;
  1361. dispatch_source_set_timer(timer,dispatch_walltime(NULL, 0),1.0*NSEC_PER_SEC, 0); //每秒执行
  1362. dispatch_source_set_event_handler(timer, ^{
  1363. timeout++;
  1364. dispatch_async(dispatch_get_main_queue(), ^{
  1365. @strongify(self);
  1366. self.youpaiptimeLabel.text = [NSString stringWithFormat:@"通话时长: %@",[ZCUtils getHHMMSSFromSS:timeout]];
  1367. kAppDelegate.logCallTime = self.youpaiptimeLabel.text;
  1368. if (timeout >= 30 && timeout <= 40 && ![[LCSaveModel getUserModel].youpaipuserinfo.youpaipuser_id isEqualToString:self.youpaipvideoModel.youpaipto_uid]) {
  1369. self.youpaipgiftPopBtn.hidden = NO;
  1370. }else{
  1371. self.youpaipgiftPopBtn.hidden = YES;
  1372. }
  1373. });
  1374. });
  1375. dispatch_resume(timer);
  1376. }
  1377. - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
  1378. UITouch* touch = [touches anyObject];
  1379. UIView* view = [touch view];
  1380. if (view == self.youpaipdemoBarBgV) {
  1381. self.youpaipdemoBarBgV.hidden = YES;
  1382. }
  1383. [self.view endEditing:YES];
  1384. }
  1385. //- (void)youpaifinterHandel:(UITapGestureRecognizer*)interTap{
  1386. // if (interTap.state == UIGestureRecognizerStateEnded) {
  1387. // if (interTap.view == self.demoBarBgV) {
  1388. // self.demoBarBgV.hidden = YES;
  1389. // [self.view endEditing:YES];
  1390. // }else{}
  1391. // }
  1392. //}
  1393. - (void)youpaifdoubleTapHandel:(UITapGestureRecognizer*)tap{
  1394. if (tap.state == UIGestureRecognizerStateEnded) {
  1395. if (self.youpaipinterView.frame.origin.x == KScreenWidth) {
  1396. [self youpaifmsgViewAnimWithX:0];
  1397. }else{
  1398. [self youpaifmsgViewAnimWithX:KScreenWidth];
  1399. }
  1400. }
  1401. }
  1402. - (void)youpaifmsgViewPanHandel:(UIPanGestureRecognizer*)panGesture{
  1403. //移动两点之间的绝对距离
  1404. [self.view endEditing:YES];
  1405. CGPoint translation = [panGesture translationInView:self.youpaipinterView];
  1406. if (self.youpaipinterView.frame.origin.x==0 && translation.x<0) {
  1407. }else if(self.youpaipinterView.frame.origin.x==KScreenWidth && translation.x>0){
  1408. }else {
  1409. CGPoint endPosition;
  1410. if (panGesture.state == UIGestureRecognizerStateBegan){
  1411. self.youpaipstartPoint = [panGesture locationInView:self.youpaipinterView];
  1412. }else if (panGesture.state == UIGestureRecognizerStateChanged){
  1413. CGPoint origin = self.youpaipinterView.frame.origin;
  1414. origin.x+=translation.x;
  1415. if (origin.x<=0) {
  1416. origin.x = 0;
  1417. self.youpaipinterView.frame= CGRectMake(origin.x, 0, KScreenWidth, KScreenHeight);
  1418. }else if(origin.x>=KScreenWidth){
  1419. origin.x = KScreenWidth;
  1420. self.youpaipinterView.frame= CGRectMake(origin.x, 0, KScreenWidth, KScreenHeight);
  1421. }
  1422. }else if (panGesture.state == UIGestureRecognizerStateEnded) {
  1423. endPosition = [panGesture locationInView:self.youpaipinterView];
  1424. if (endPosition.x-self.youpaipstartPoint.x>80) {//右移 小动画
  1425. [self youpaifmsgViewAnimWithX:KScreenWidth];
  1426. }else if(endPosition.x-self.youpaipstartPoint.x<-80){ //移
  1427. [self youpaifmsgViewAnimWithX:0];
  1428. }
  1429. }
  1430. }
  1431. }
  1432. - (void)youpaifmsgViewAnimWithX:(CGFloat)x{
  1433. NSTimeInterval durtionTime = fabs(self.youpaipinterView.x-x)*0.5/KScreenWidth;
  1434. [UIView animateWithDuration:durtionTime animations:^{
  1435. self.youpaipinterView.frame = CGRectMake(x, 0, KScreenWidth, KScreenHeight);
  1436. } completion:^(BOOL finished) {
  1437. self.youpaipinterView.frame = CGRectMake(x, 0, KScreenWidth, KScreenHeight);
  1438. }];
  1439. }
  1440. - (void)youpaifloaclVideoHandel:(UITapGestureRecognizer*)localTap{
  1441. if (localTap.state == UIGestureRecognizerStateEnded) {
  1442. if([self.youpaipremoteCanvas.view isEqual:self.youpaipremoteVideo.displayerOpenGLView]){
  1443. self.youpaipremoteCanvas.view = self.youpaiplocalVideo.displayerOpenGLView;
  1444. self.youpaiplocalCanvas.view = self.youpaipremoteVideo.displayerOpenGLView;
  1445. [self.youpaipagoraKit setupLocalVideo:self.youpaiplocalCanvas];
  1446. [self.youpaipagoraKit setupRemoteVideo:self.youpaipremoteCanvas];
  1447. [YOUPAIXLVideoShotTool sharedPusher].remoteVideo = self.youpaiplocalVideo.displayerOpenGLView;
  1448. [YOUPAIXLVideoShotTool sharedPusher].localVideo = self.youpaipremoteVideo.displayerOpenGLView;
  1449. // 默认
  1450. // [YOUPAIXLVideoShotTool sharedPusher].localVideo = self.youpaiplocalVideo;
  1451. // [YOUPAIXLVideoShotTool sharedPusher].remoteVideo = self.youpaipremoteVideo;
  1452. }else{
  1453. self.youpaipremoteCanvas.view = self.youpaipremoteVideo.displayerOpenGLView;
  1454. self.youpaiplocalCanvas.view = self.youpaiplocalVideo.displayerOpenGLView;
  1455. [self.youpaipagoraKit setupLocalVideo:self.youpaiplocalCanvas];
  1456. [self.youpaipagoraKit setupRemoteVideo:self.youpaipremoteCanvas];
  1457. [YOUPAIXLVideoShotTool sharedPusher].remoteVideo = self.youpaipremoteVideo.displayerOpenGLView;
  1458. [YOUPAIXLVideoShotTool sharedPusher].localVideo = self.youpaiplocalVideo.displayerOpenGLView;
  1459. }
  1460. }
  1461. }
  1462. #pragma mark - ButtonClick
  1463. - (void)youpaifmsgBtnClick{
  1464. [self.youpaipsendTextF becomeFirstResponder];
  1465. }
  1466. - (void)youpaifbeautyBtnClick{
  1467. self.youpaipdemoBarBgV.hidden = NO;
  1468. [self.view bringSubviewToFront:self.youpaipdemoBarBgV];
  1469. }
  1470. - (void)youpaifgiftBtnClick{
  1471. self.youpaipgiftPopBtn.hidden = YES;
  1472. YOUPAILZCommonGiftView *view = [YOUPAILZCommonGiftView new];
  1473. view.isTouchDismiss = YES;
  1474. view.youpaipisAnchor = NO;
  1475. @weakify(self);
  1476. [self TFPresentVC:view completion:^{
  1477. }];
  1478. [view setJumToWalletBlock1:^{
  1479. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  1480. [[NSNotificationCenter defaultCenter] postNotificationName:@"InsufficientBalanceNotice" object:nil userInfo:nil];
  1481. // YOUPAIHRRechargePayWindow *payWindow = [YOUPAIHRRechargePayWindow new];
  1482. // payWindow.isTouchDismiss = NO;
  1483. // [self.navigationController TFPresentVC:payWindow completion:^{
  1484. //
  1485. // }];
  1486. YMAccountBalanceViewModel *accountBalanceVM = [[YMAccountBalanceViewModel alloc]initWithParams:@{
  1487. ParamsId:@([[LCSaveModel getUserModel].youpaipuserinfo.youpaipuser_id intValue])
  1488. }];
  1489. YMAccountBalanceRechargePopupView *customView = [[YMAccountBalanceRechargePopupView alloc]init];
  1490. [customView ym_bindViewModel:accountBalanceVM];
  1491. YMPopupView *popupView = [YMPopupView initWithCustomView:customView parentView:nil popStyle:YMPopupStyleSmoothFromBottom dismissStyle:YMDismissStyleSmoothToBottom];
  1492. popupView.priority = 999;
  1493. popupView.cornerRadius = adapt(10);
  1494. popupView.rectCorners = UIRectCornerTopLeft|UIRectCornerTopRight;
  1495. popupView.positionStyle = YMPositionStyleBottom;
  1496. popupView.isClickBgDismiss = YES;
  1497. popupView.isHideBg = NO;
  1498. popupView.bgAlpha = 0.5;
  1499. [popupView pop];
  1500. @weakify(popupView)
  1501. customView.dismissBlock = ^{
  1502. @strongify(popupView)
  1503. [popupView dismissWithStyle:YMDismissStyleSmoothToBottom duration:2.0];
  1504. };
  1505. });
  1506. }];
  1507. [view setYoupaiplzgiftblock:^(YOUPAILCGiftModel * _Nonnull giftModel, NSInteger count,NSString*categoryID) {
  1508. @strongify(self);
  1509. [UMengRecordTool umengEventCountWithId:GiveawayGiftVideo];
  1510. [self.youpaipsocketManager sendGift:giftModel.youpaipid count:count tyID:categoryID];
  1511. }];
  1512. }
  1513. - (void)youpaifswitchBtnClick:(UIButton*)btn{
  1514. [_youpaipmCamera changeCameraInputDeviceisFront:!_youpaipmCamera.isFrontCamera];
  1515. [self.youpaipagoraKit switchCamera];
  1516. [[FUManager shareManager] onCameraChange];
  1517. }
  1518. - (void)youpaifvoiceBtnClick:(UIButton*)btn{
  1519. btn.selected = !btn.selected;
  1520. if (btn.selected == YES) {
  1521. [self.youpaipagoraKit disableAudio];
  1522. }else{
  1523. [self.youpaipagoraKit enableAudio];
  1524. }
  1525. }
  1526. - (void)youpaifcameraBtnClick:(UIButton*)btn{
  1527. btn.selected = !btn.selected;
  1528. if (btn.selected == YES) {
  1529. self.youpaiplocalCanvas.view = self.youpaiplocalVideo.displayerOpenGLView;
  1530. self.youpaipremoteCanvas.view = self.youpaipremoteVideo.displayerOpenGLView;
  1531. [self.youpaipagoraKit setupLocalVideo:self.youpaiplocalCanvas];
  1532. [self.youpaipagoraKit setupRemoteVideo:self.youpaipremoteCanvas];
  1533. [self.youpaipagoraKit muteLocalVideoStream:YES];
  1534. self.youpaiplocalVideo.hidden = YES;
  1535. }else{
  1536. [self.youpaipagoraKit muteLocalVideoStream:NO];
  1537. self.youpaiplocalVideo.hidden = NO;
  1538. }
  1539. }
  1540. //仙女棒
  1541. -(void)youpaifxianNvBangBtnClick
  1542. {
  1543. YOUPAIZYXianNvBangVC *VC= [[YOUPAIZYXianNvBangVC alloc]init];
  1544. // VC.delegate = self;
  1545. VC.vWidth = KScreenWidth *(320.0/375.0);
  1546. VC.vHeight = (VC.vWidth*137)/320.0+165;
  1547. VC.youpaipinfoModel = self.youpaipvideoModel.youpaipfairy;
  1548. VC.youpaipuser_id = self.youpaipvideoModel.youpaipto_uid;
  1549. VC.youpaiproomid = self.youpaipvideoModel.youpaiproom_id;
  1550. VC.youpaipisRoom = YES;
  1551. VC.isTouchDismiss = YES;
  1552. if(VC.youpaipinfoModel!=nil)
  1553. [self TFPresentVC:VC completion:^{
  1554. }];
  1555. }
  1556. //add by leo 视频中守护v1.0.8
  1557. -(void)youpaifguardBtnClick
  1558. {
  1559. YOUPAILPGuardHerVC *VC= [[YOUPAILPGuardHerVC alloc]init];
  1560. VC.youpaipdelegate = self;
  1561. VC.vWidth = KScreenWidth-54;
  1562. VC.vHeight = ((KScreenWidth-54)*165)/321.0+261.5;
  1563. VC.youpaipinfoModel = self.youpaipvideoModel.youpaipguard;
  1564. VC.youpaiproomid = self.youpaipvideoModel.youpaiproom_id;
  1565. VC.youpaipuser_id = self.youpaipvideoModel.youpaipto_uid;
  1566. VC.youpaipisRoom = YES;
  1567. VC.isTouchDismiss = YES;
  1568. [self TFPresentVC:VC completion:^{
  1569. }];
  1570. }
  1571. #pragma mark - TableViewDelegate
  1572. -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
  1573. return 1;
  1574. }
  1575. -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
  1576. return self.youpaipchatArray.count;
  1577. }
  1578. -(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
  1579. YOUPAILCVideoChatMessageCell *cell = [tableView dequeueReusableCellWithIdentifier:@"YOUPAILCVideoChatMessageCell"];
  1580. if (cell == nil) {
  1581. cell = [[YOUPAILCVideoChatMessageCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"YOUPAILCVideoChatMessageCell"];
  1582. }
  1583. // YOUPAILCVideoChatMessageCell *cell = [[YOUPAILCVideoChatMessageCell alloc]initWithStyle:(UITableViewCellStyleDefault) reuseIdentifier:@"YOUPAILCVideoChatMessageCell"];
  1584. cell.youpaipmsgModel = self.youpaipchatArray[indexPath.row];
  1585. cell.youpaipdelegate = self;
  1586. return cell;
  1587. }
  1588. //- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
  1589. //{
  1590. // YOUPAILCVideoChatMessageModel* model = (YOUPAILCVideoChatMessageModel*)self.chatArray[indexPath.row];
  1591. // return [YOUPAILCVideoChatMessageCell youpaifcellHeightWithModel:model];
  1592. //}
  1593. //
  1594. //- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {
  1595. // return 40;
  1596. //}
  1597. //- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
  1598. // YOUPAILCVideoChatMessageModel* model =self.chatArray[indexPath.row];
  1599. // if (model.link_type==1) {
  1600. // ZCBaseWebVC* web = [[ZCBaseWebVC alloc]init];
  1601. // web.contentUrl = model.link_url;
  1602. // [self.navigationController pushViewController:web animated:YES];
  1603. // }else if (model.link_type==2){
  1604. // [self youpaifpageToStr:model.link_url];
  1605. // }
  1606. //}
  1607. - (void)youpaifcontentClicked:(YOUPAILCVideoChatMessageModel *)model{
  1608. if (model.youpaiplink_type==1) {
  1609. if (model.youpaiplink_url.length>0) {
  1610. ZCBaseWebVC* web = [[ZCBaseWebVC alloc]init];
  1611. web.contentUrl = model.youpaiplink_url;
  1612. [self.navigationController pushViewController:web animated:YES];
  1613. }
  1614. }else if (model.youpaiplink_type==2){
  1615. if (model.youpaiplink_url.length>0) {
  1616. [self youpaifpageToStr:model.youpaiplink_url];
  1617. }
  1618. }
  1619. }
  1620. #pragma mark - 键盘交互事件
  1621. - (void)youpaifwillResignActive {
  1622. [_youpaipmCamera stopCapture];
  1623. }
  1624. #pragma mark - FUAPIDemoBarDelegate
  1625. -(void)restDefaultValue:(int)type{
  1626. if (type == 1) {//美肤
  1627. [[FUManager shareManager] setBeautyDefaultParameters:FUBeautyModuleTypeSkin];
  1628. }
  1629. if (type == 2) {
  1630. [[FUManager shareManager] setBeautyDefaultParameters:FUBeautyModuleTypeShape];
  1631. }
  1632. }
  1633. -(void)filterValueChange:(FUBeautyParam *)param{
  1634. int handle = [[FUManager shareManager] getHandleAboutType:FUNamaHandleTypeBeauty];
  1635. [FURenderer itemSetParam:handle withName:@"filter_name" value:[param.mParam lowercaseString]];
  1636. [FURenderer itemSetParam:handle withName:@"filter_level" value:@(param.mValue)]; //滤镜程度
  1637. [FUManager shareManager].seletedFliter = param;
  1638. }
  1639. -(void)beautyParamValueChange:(FUBeautyParam *)param{
  1640. if (_youpaipdemoBar.selBottomIndex == 3) {//风格栏
  1641. if (param.beautyAllparams) {
  1642. [[FUManager shareManager] setStyleBeautyParams:param.beautyAllparams];
  1643. [FUManager shareManager].currentStyle = param;
  1644. }else{// 点击无
  1645. [FUManager shareManager].currentStyle = param;
  1646. [[FUManager shareManager] loadFilter];
  1647. }
  1648. return;
  1649. }
  1650. if ([param.mParam isEqualToString:@"cheek_narrow"] || [param.mParam isEqualToString:@"cheek_small"]){//程度值 只去一半
  1651. [[FUManager shareManager] setParamItemAboutType:FUNamaHandleTypeBeauty name:param.mParam value:param.mValue * 0.5];
  1652. }else if([param.mParam isEqualToString:@"blur_level"]) {//磨皮 0~6
  1653. [[FUManager shareManager] setParamItemAboutType:FUNamaHandleTypeBeauty name:param.mParam value:param.mValue * 6];
  1654. }else{
  1655. [[FUManager shareManager] setParamItemAboutType:FUNamaHandleTypeBeauty name:param.mParam value:param.mValue];
  1656. }
  1657. }
  1658. - (void)willEnterForeground {
  1659. [_youpaipmCamera startCapture];
  1660. // if (self.voiceBtn.selected == NO) {
  1661. // [self.agoraKit enableAudio];
  1662. // [self.agoraKit disableAudio];
  1663. // }else{
  1664. // [self.agoraKit disableAudio];
  1665. // [self.agoraKit enableAudio];
  1666. // }
  1667. }
  1668. - (void)didBecomeActive {
  1669. [_youpaipmCamera startCapture];
  1670. }
  1671. //键盘即将隐藏
  1672. - (void)youpaifkeyboardWillHide:(NSNotification *)note{
  1673. // CGRect keyboardF = [note.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
  1674. [UIView animateWithDuration:0.25 animations:^{
  1675. //KScreenHeight-KScreenHeight/3-60
  1676. self.youpaiptextToolView.mj_y = KScreenHeight;
  1677. // self.chatTableView.frame = CGRectMake(10, KScreenHeight-KScreenHeight/4-70, 3*KScreenWidth/4, KScreenHeight/4);
  1678. [self.youpaipchatTableView mas_updateConstraints:^(MASConstraintMaker *make) {
  1679. make.bottom.offset(-(52.0f+SafeHeight+6.0f+29.0f+14.0f));
  1680. }];
  1681. }];
  1682. }
  1683. //键盘即将弹出
  1684. - (void)youpaifkeyboardWillShow:(NSNotification *)note{
  1685. CGRect keyboardF = [note.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
  1686. CGFloat keyboardH = keyboardF.size.height;
  1687. [UIView animateWithDuration:0.25 animations:^{
  1688. self.youpaiptextToolView.mj_y = KScreenHeight-keyboardH-65;
  1689. [self.youpaipchatTableView mas_updateConstraints:^(MASConstraintMaker *make) {
  1690. make.bottom.offset(-(52.0f+SafeHeight+6.0f+29.0f+14.0f)-keyboardH/*(52.0f+6.0f+29.0f+14.0f+keyboardH-48+6.0f)*/);
  1691. }];
  1692. }];
  1693. }
  1694. //add by leo 防止录屏
  1695. #pragma mark - 监听录制
  1696. /**
  1697. 监听屏幕录制
  1698. iOS 11.0 版本以上
  1699. */
  1700. - (void)youpaifmonitorRecordVideo {// 监听屏幕录制
  1701. @weakify(self);
  1702. // 监测设备的录制状态
  1703. if (@available(iOS 11.0, *)) {
  1704. [[NSNotificationCenter defaultCenter] addObserverForName:UIScreenCapturedDidChangeNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * _Nonnull note) {
  1705. @strongify(self);
  1706. NSLog(@"屏幕录制 ...");
  1707. //用self就会循环引用
  1708. if(self.youpaipisRecordScreen)
  1709. {
  1710. [self youpaifshowPromptWarningView:NO];
  1711. }
  1712. else
  1713. {
  1714. [self youpaifshowPromptWarningView:YES];
  1715. //add by leo 录屏上报
  1716. [self youpaifshotCheck:2];
  1717. }
  1718. }];
  1719. } else {
  1720. // Fallback on earlier versions
  1721. }
  1722. }
  1723. /**
  1724. 提示视图
  1725. */
  1726. - (void)youpaifshowPromptWarningView:(BOOL)warning {
  1727. if(warning)
  1728. {
  1729. _youpaipisRecordScreen = YES;
  1730. [_youpaiprecoderHideView setFrame:self.youpaipremoteVideo.bounds];
  1731. [_youpaiprecoderHideView setHidden:NO];
  1732. NSLog(@"正在录屏");
  1733. [ZCHUDHelper showTitle:@"请勿录制屏幕" showtime:1];
  1734. }
  1735. else
  1736. {
  1737. NSLog(@"录屏取消了");
  1738. _youpaipisRecordScreen =NO;
  1739. [_youpaiprecoderHideView setHidden:YES];
  1740. }
  1741. }
  1742. #pragma mark 防止截屏
  1743. - (void)youpaifmonitorShot
  1744. {
  1745. @weakify(self);
  1746. [[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationUserDidTakeScreenshotNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * _Nonnull note) {
  1747. @strongify(self);
  1748. NSLog(@"屏幕截图 ...");
  1749. if(![[ZCUtils getCurrentVC] isKindOfClass:[YOUPAILCBaseVideoCallVC class]])
  1750. {
  1751. return;
  1752. }
  1753. [self youpaifshotCheck:1];
  1754. }];
  1755. }
  1756. - (void)userDidTakeScreenshot {
  1757. NSLog(@"检测到截屏");
  1758. UIView *backView = [[UIView alloc]initWithFrame:self.youpaipremoteVideo.bounds];
  1759. [backView setBackgroundColor:HexColorFromRGBA(0xffffff, 1.0)];
  1760. [self.youpaipremoteVideo addSubview:backView];
  1761. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  1762. [backView removeFromSuperview];
  1763. });
  1764. [ZCHUDHelper showTitle:@"尊重隐私,请勿截屏" showtime:1];
  1765. //人为操作,获取截屏图片数据
  1766. /*
  1767. UIImage *image = [self youpaifimageWithScreenshot];
  1768. NSLog(@"userDidTakeScreenshot:\n%@", image);
  1769. UIImageView *imageScreenshot = [[UIImageView alloc] initWithImage:image];// 此处 image 资源可根据实际需求进行操作,展示当前截屏图片或者替换成一张固定的图片方式等等等!
  1770. imageScreenshot.frame = self.remoteVideo.bounds;
  1771. [imageScreenshot setBackgroundColor:[UIColor whiteColor]];
  1772. [self.remoteVideo addSubview:imageScreenshot];// 展示在当前 View 层级
  1773. */
  1774. }
  1775. /**
  1776. 返回截屏数据
  1777. @return 返回截屏数据
  1778. */
  1779. - (UIImage *)youpaifimageWithScreenshot {
  1780. NSData *imageData = [self youpaifdataWithScreenshotInPNGFormat];
  1781. return [UIImage imageWithData:imageData];
  1782. }
  1783. /**
  1784. 获取当前屏幕
  1785. @return 获取当前屏幕
  1786. */
  1787. - (NSData *)youpaifdataWithScreenshotInPNGFormat {
  1788. // Source (Under MIT License):
  1789. CGSize imageSize = CGSizeZero;
  1790. UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
  1791. if (UIInterfaceOrientationIsPortrait(orientation)) {
  1792. imageSize = CGSizeMake(KScreenWidth,KScreenHeight);
  1793. }
  1794. else {
  1795. imageSize = CGSizeMake(KScreenHeight, KScreenWidth);
  1796. }
  1797. // 传入的View.frame.size是0的话,直接返回nil,防止 UIGraphicsBeginImageContext() 传入0,导致崩溃
  1798. if (CGSizeEqualToSize(imageSize, CGSizeZero)) {
  1799. return nil;
  1800. }
  1801. UIGraphicsBeginImageContextWithOptions(imageSize, NO, 0);
  1802. CGContextRef context = UIGraphicsGetCurrentContext();
  1803. for (UIWindow *window in [[UIApplication sharedApplication] windows]) {
  1804. CGContextSaveGState(context);
  1805. CGContextTranslateCTM(context, window.center.x, window.center.y);
  1806. CGContextConcatCTM(context, window.transform);
  1807. CGContextTranslateCTM(context, -window.bounds.size.width * window.layer.anchorPoint.x, -window.bounds.size.height * window.layer.anchorPoint.y);
  1808. // Correct for the screen orientation
  1809. if (orientation == UIInterfaceOrientationLandscapeLeft) {
  1810. CGContextRotateCTM(context, M_PI_2);
  1811. CGContextTranslateCTM(context, 0, -imageSize.width);
  1812. }
  1813. else if (orientation == UIInterfaceOrientationLandscapeRight) {
  1814. CGContextRotateCTM(context, -M_PI_2);
  1815. CGContextTranslateCTM(context, -imageSize.height, 0);
  1816. }
  1817. else if (orientation == UIInterfaceOrientationPortraitUpsideDown) {
  1818. CGContextRotateCTM(context, M_PI);
  1819. CGContextTranslateCTM(context, -imageSize.width, -imageSize.height);
  1820. }
  1821. if ([window respondsToSelector:@selector(drawViewHierarchyInRect:afterScreenUpdates:)]) {
  1822. [window drawViewHierarchyInRect:window.bounds afterScreenUpdates:YES];
  1823. }
  1824. else {
  1825. [window.layer renderInContext:context];
  1826. }
  1827. CGContextRestoreGState(context);
  1828. }
  1829. UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
  1830. UIGraphicsEndImageContext();
  1831. return UIImagePNGRepresentation(image);
  1832. }
  1833. //add by leo 截屏上报
  1834. -(void)youpaifshotCheck:(NSInteger)type
  1835. {
  1836. @weakify(self);
  1837. [LCHttpHelper requestWithURLString:ScreenShtoCheck parameters:@{@"type":@(type)} needToken:YES type:(HttpRequestTypePost) success:^(id responseObject) {
  1838. @strongify(self);
  1839. NSDictionary* dict = (NSDictionary*)responseObject;
  1840. NSInteger code = [[dict objectForKey:@"code"] integerValue];
  1841. NSString *message =[dict objectForKey:@"message"];
  1842. if (code==0) {//成功
  1843. [self.youpaipsocketManager sendHangup];
  1844. }
  1845. // [ZCHUDHelper showTitle:message];
  1846. LZAlertAction *confimAction = [LZAlertAction actionWithTitle:@"我知道了" handler:^(LZAlertAction *action) {
  1847. }];
  1848. confimAction.cornerRadius = 24.0f;
  1849. confimAction.color = [UIColor whiteColor];
  1850. confimAction.bgColor = [UIColor colorWithPatternImage:[LCTools ColorImage:CGSizeMake(KScreenWidth - 148.0f, 48.0f) FromColors:@[LZBFB6FFColor,LZ7C69FEColor] ByGradientType:GradientLeftToRight]];
  1851. LZAlertWindow *alert = [LZAlertWindow alertWithTitle:@"提示" content:message action:@[confimAction]];
  1852. [self TFPresentVC:alert completion:^{}];
  1853. } failure:^(NSError *error) {
  1854. }];
  1855. if(type ==2)
  1856. {
  1857. /*
  1858. dispatch_async(dispatch_get_main_queue(), ^{
  1859. [self.socketManager youpaifsendHangup];
  1860. });
  1861. */
  1862. }
  1863. }
  1864. //add by leo v1.0.8 视频中守护回调
  1865. -(void)youpaifaddGuardSuccess
  1866. {
  1867. }
  1868. //add by leo v1.0.8 弱网警告
  1869. -(void)autoHangUp
  1870. {
  1871. if(self.youpaipsocketManager)
  1872. {
  1873. //确定退出视频咨询
  1874. UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"您的网络状况糟糕" message:@"为了良好的视频体验,建议您先挂断视频" preferredStyle:UIAlertControllerStyleAlert];
  1875. UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action){
  1876. }];
  1877. UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action){
  1878. [self videoEnd:5];
  1879. }];
  1880. [alertController addAction:cancelAction];
  1881. [alertController addAction:okAction];
  1882. [self presentViewController:alertController animated:YES completion:nil];
  1883. }
  1884. }
  1885. @end