Commit 3f466d85 authored by 朱璇's avatar 朱璇

update code

parent ff08d7a2
......@@ -234,8 +234,9 @@
//1v1的付款金额字段
fee = weakSelf.dict[@"service_fee"];
}
//是否需要付款
if (fee.floatValue == 0) {
//需要付款
//是否需要付款(逻辑改为和安卓一致)
if (!model.needPay) {
//金额为0则直接开启面诊
[self videoDiagnose];
}else {
......
......@@ -50,7 +50,7 @@
@property (nonatomic, assign) NSInteger paymentAmount;
@property (nonatomic, copy) NSString *paymentAmountStr;
/** */
@property (nonatomic, assign) NSInteger needPay;
@property (nonatomic, assign) BOOL needPay;
/** 支付方式 */
@property (nonatomic, strong) NSMutableArray <GMToFacePayTypeModel>*paymentChannels;
......
......@@ -15,6 +15,9 @@
#import "GMAppCameraAndMicrophone.h"
#import "GMVideoPhobos.h"
#import <GMBase/GMBaseTool.h>
#import "GMNimChannelManager.h"
#import <GMFoundation/NSString+GM.h>
@import GMHud;
@import GMRouter;
......@@ -33,6 +36,9 @@ static GMDoctorVideoTelephoneLogin *loginManager = nil;
/// 扩展字段
@property (nonatomic, strong) NSDictionary *extensionDict;
/// 网易云信
@property (nonatomic, strong) GMNeteaseIMModel *neteaseModel;
@end
@implementation GMDoctorVideoTelephoneLogin
......@@ -41,6 +47,14 @@ static GMDoctorVideoTelephoneLogin *loginManager = nil;
GMTelephoneAudioPlay *_audioPlay;
GMTelephoneView *_telephoneView;//医生端接电话页面
GMVideoTelephoneWindow *_window;
GMVideoTelephoneModel *_videoModel;
/// 加入房间重试次数,大于等于0,0代表不重试
NSInteger _joinChannelRetryCount;
/// 重试间隔,毫秒,大于等于0
NSInteger _joinChannelRetryMs;
}
+ (GMDoctorVideoTelephoneLogin *)sharedDoctorVideoTelephoneLogin {
......@@ -69,8 +83,11 @@ static GMDoctorVideoTelephoneLogin *loginManager = nil;
if (success) {
[[[UIApplication sharedApplication] keyWindow] endEditing:YES];
if (_telephoneView == nil) {
GMVideoTelephoneModel *model = modelDict[@"model"];
[self showTelephoneView:model];
_videoModel = modelDict[@"model"];
// 重试数据
_joinChannelRetryMs = _videoModel.joinChannelRetryMs;
_joinChannelRetryCount = _videoModel.joinChannelRetryCount;
[self showTelephoneView:_videoModel];
}
} else {
TTManager.telephoneStatus = TelephoneVideoStatus_rest;
......@@ -97,6 +114,7 @@ static GMDoctorVideoTelephoneLogin *loginManager = nil;
_uid = (NSInteger)[[GMRouter sharedInstance] pushScheme:@"gengmei://gm_userId"];;
_channelId = model.channelId;
_pushURL = model.streamUrl;
_neteaseModel = model.neteaseIm;
if (_channelId.integerValue == 0 || _channelId.length >= 19) {
TTManager.telephoneStatus = TelephoneVideoStatus_rest;
......@@ -133,7 +151,7 @@ static GMDoctorVideoTelephoneLogin *loginManager = nil;
#pragma mark - 医生端展示电话页面
- (void)showTelephoneView:(GMVideoTelephoneModel *)model {
[_audioPlay startAudioPlay];
[_audioPlay startAudioPlayAndVibration];
_telephoneView = [[GMTelephoneView alloc] initWithFrame:CGRectMake(0, 0, MAINSCREEN_WIDTH, MAINSCREEN_HEIGHT)];
_telephoneView.model = model;
_telephoneView.delegate = self;
......@@ -184,7 +202,7 @@ static GMDoctorVideoTelephoneLogin *loginManager = nil;
}
- (void)killCurrentView {
[_audioPlay stopAudioPlay];
[_audioPlay stopAudioPlayAndVibration];
_telephoneView.hidden = YES;
[_telephoneView removeFromSuperview];
_telephoneView = nil;
......@@ -203,6 +221,17 @@ static GMDoctorVideoTelephoneLogin *loginManager = nil;
#pragma mark - TTTRtcEngineDelegate初始化成功
-(void)rtcEngine:(TTTRtcEngineKit *)engine didJoinChannel:(NSString *)channel withUid:(int64_t)uid elapsed:(NSInteger)elapsed {
// 加入房间并邀请
if (_neteaseModel && [_neteaseModel.toAccountId isNonEmpty] && [_neteaseModel.channelId isNonEmpty]) {
[[GMNimChannelManager shareInstance] doJoinAndInviteJoinChannelWithChannelId:_neteaseModel.channelId accountId:_neteaseModel.toAccountId customInfo:_neteaseModel.inviteExt resultBlock:^(BOOL isSuccess) {
if (!isSuccess) {
#ifdef DEBUG
[[GMBaseTool getCurrentViewController] toast:@"doJoinAndInviteJoinChannelWithChannelId失败"];
#endif
}
}];
}
[GMVideoTelephoneRequestTool telephoneMessageEventType:GMEventType_addSuccess consultationRecordId:TTManager.consultationRecordId finishBlock:nil];
[self showWindow:_clientRole];
}
......@@ -231,6 +260,22 @@ static GMDoctorVideoTelephoneLogin *loginManager = nil;
errorInfo = @"未知错误";
break;
}
TTManager.telephoneStatus = TelephoneVideoStatus_rest;
[self tryAgainIfFailedWithErrorInfo:errorInfo errorCode:errorCode];
}
- (void)tryAgainIfFailedWithErrorInfo:(NSString *)errorInfo errorCode:(TTTRtcErrorCode)errorCode {
if (_clientRole == TTTRtc_ClientRole_Broadcaster && _joinChannelRetryCount > 0) {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(_joinChannelRetryMs / 1000.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self doctorLoginVideoRoomModel:_videoModel];
_joinChannelRetryCount--;
});
} else {
[self uploadFailedRecordWithErrorInfo:errorInfo];
}
}
- (void)uploadFailedRecordWithErrorInfo:(NSString *)errorInfo {
[GMVideoTelephoneRequestTool telephoneMessageEventType:GMEventType_addFail consultationRecordId:TTManager.consultationRecordId finishBlock:nil];
[GMHudModule showWarning:errorInfo];
if (_telephoneView) {//关闭医生端接电话图层
......@@ -238,7 +283,6 @@ static GMDoctorVideoTelephoneLogin *loginManager = nil;
_telephoneView = nil;
[_audioPlay stopAudioPlay];
}
TTManager.telephoneStatus = TelephoneVideoStatus_rest;
}
......
......@@ -30,6 +30,13 @@ typedef void(^NIMResultCreateBlock)(NIMSignalingChannelInfo *);
/// @param resultBlock 结果
- (void)doJoinChannelWithChannelId:(NSString *)channelId resultBlock:(NIMResultBlock)resultBlock;
/// 加入并邀请对方加入频道
/// @param channelId channelId
/// @param accountId 对方,被邀请人,必填
/// @param customInfo 通知事件额外字段,非必填(邀请者附加的自定义信息,透传给被邀请者)
/// @param resultBlock 结果
- (void)doJoinAndInviteJoinChannelWithChannelId:(NSString *)channelId accountId:(NSString *)accountId customInfo:(NSString *)customInfo resultBlock:(nonnull NIMResultBlock)resultBlock;
/// 离开频道
/// @param channelId channelId
/// @param resultBlock 结果
......
......@@ -46,6 +46,24 @@
}
}];
}
/// 加入并邀请对方加入频道
/// @param channelId channelId
/// @param accountId 对方,被邀请人,必填
/// @param customInfo 通知事件额外字段,非必填(邀请者附加的自定义信息,透传给被邀请者)
/// @param resultBlock 结果
- (void)doJoinAndInviteJoinChannelWithChannelId:(NSString *)channelId accountId:(NSString *)accountId customInfo:(NSString *)customInfo resultBlock:(nonnull NIMResultBlock)resultBlock {
[self doJoinChannelWithChannelId:channelId resultBlock:^(BOOL isSuccess) {
if (isSuccess) {
[self doInviteJoinWithChannelId:channelId accountId:accountId customInfo:customInfo resultBlock:^(BOOL isSuccess) {
resultBlock(isSuccess);
}];
} else {
resultBlock(NO);
}
}];
}
/// 离开频道
/// @param channelId channelId
/// @param resultBlock 结果
......
......@@ -14,6 +14,12 @@ NS_ASSUME_NONNULL_BEGIN
- (GMTelephoneAudioPlay *)initWithAudioSource:(NSString *)name ofType:(NSString *)type;
- (void) startAudioPlay;
- (void) stopAudioPlay;
/// 声音加震动
- (void) startAudioPlayAndVibration;
/// 关闭声音和震动
- (void) stopAudioPlayAndVibration;
@end
NS_ASSUME_NONNULL_END
......@@ -8,6 +8,7 @@
#import "GMTelephoneAudioPlay.h"
#import <AVFoundation/AVFoundation.h>
#import <AudioToolbox/AudioToolbox.h>
@interface GMTelephoneAudioPlay ()
@property (nonatomic, strong) AVAudioPlayer *audioPlay;
......@@ -43,4 +44,25 @@
- (void) stopAudioPlay {
[self.audioPlay pause];
}
- (void)startAudioPlayAndVibration {
[self startAudioPlay];
// 开始震动
AudioServicesAddSystemSoundCompletion(kSystemSoundID_Vibrate, NULL, NULL, vibrationCompleteCallback, NULL);
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
}
- (void)stopAudioPlayAndVibration {
[self stopAudioPlay];
// 停止震动
AudioServicesRemoveSystemSoundCompletion(kSystemSoundID_Vibrate);
AudioServicesDisposeSystemSoundID(kSystemSoundID_Vibrate);
}
void vibrationCompleteCallback(SystemSoundID sound,void * clientData) {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(800 * NSEC_PER_MSEC)), dispatch_get_global_queue(0, 0), ^{
AudioServicesPlaySystemSound(sound);
});
}
@end
......@@ -48,6 +48,11 @@ static GMUserVideoTelephoneLogin *loginManager = nil;
GMRtcManager *TTManager;
GMTelephoneAudioPlay *_audioPlay;
GMVideoTelephoneWindow *_window;
/// 加入房间重试次数,大于等于0,0代表不重试
NSInteger _joinChannelRetryCount;
/// 重试间隔,毫秒,大于等于0
NSInteger _joinChannelRetryMs;
}
+ (GMUserVideoTelephoneLogin *)sharedVideoTelephoneLogin {
......@@ -107,7 +112,10 @@ static GMUserVideoTelephoneLogin *loginManager = nil;
_clientRole = TTTRtc_ClientRole_Broadcaster;
_extensionDict = extentsionDict;
TTManager = [GMRtcManager sharedRtcManager];
GMVideoTelephoneModel *model = [[GMVideoTelephoneModel alloc] initWithDictionary:messageDict error:nil];;
GMVideoTelephoneModel *model = [[GMVideoTelephoneModel alloc] initWithDictionary:messageDict error:nil];
// 重试数据
_joinChannelRetryMs = model.joinChannelRetryMs;
_joinChannelRetryCount = model.joinChannelRetryCount;
[self userLoginVideoRoomModel:model];
}
......@@ -155,16 +163,17 @@ static GMUserVideoTelephoneLogin *loginManager = nil;
#pragma mark - TTTRtcEngineDelegate初始化成功
-(void)rtcEngine:(TTTRtcEngineKit *)engine didJoinChannel:(NSString *)channel withUid:(int64_t)uid elapsed:(NSInteger)elapsed {
[[NSNotificationCenter defaultCenter] postNotificationName:@"gm_push_remove_waiting_success" object:nil];
// 加入房间并邀请
[[GMNimChannelManager shareInstance] doJoinChannelWithChannelId:_neteaseModel.channelId resultBlock:^(BOOL isSuccess) {
if (isSuccess) {
NSDictionary *customInfo = @{@"type": @1,
@"consultation_record_id": TTManager.consultationRecordId
};
[[GMNimChannelManager shareInstance] doInviteJoinWithChannelId:_neteaseModel.channelId accountId:_neteaseModel.toAccountId customInfo:[NSDictionary dictionaryToJson:customInfo] resultBlock:^(BOOL isSuccess) {
}];
}
}];
if (_neteaseModel && [_neteaseModel.toAccountId isNonEmpty] && [_neteaseModel.channelId isNonEmpty]) {
[[GMNimChannelManager shareInstance] doJoinAndInviteJoinChannelWithChannelId:_neteaseModel.channelId accountId:_neteaseModel.toAccountId customInfo:_neteaseModel.inviteExt resultBlock:^(BOOL isSuccess) {
if (!isSuccess) {
#ifdef DEBUG
[[GMBaseTool getCurrentViewController] toast:@"doJoinAndInviteJoinChannelWithChannelId失败"];
#endif
}
}];
}
[GMVideoTelephoneRequestTool telephoneMessageEventType:GMEventType_addSuccess consultationRecordId:TTManager.consultationRecordId finishBlock:nil];
[self showWindow:_clientRole];
......@@ -193,11 +202,33 @@ static GMUserVideoTelephoneLogin *loginManager = nil;
errorInfo = @"未知错误";
break;
}
TTManager.telephoneStatus = TelephoneVideoStatus_rest;
// 增加失败重试功能(当我是复播的时候)
[self tryAgainIfFailedWithErrorInfo:errorInfo errorCode:errorCode];
}
/// 初始化失败重试
/// @param errorInfo 错误toast
/// @param errorCode 错误代码
- (void)tryAgainIfFailedWithErrorInfo:(NSString *)errorInfo errorCode:(TTTRtcErrorCode)errorCode {
if (_clientRole == TTTRtc_ClientRole_Broadcaster && _joinChannelRetryCount > 0) {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(_joinChannelRetryMs / 1000.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self userLoginVideoRoomModel:[[GMVideoTelephoneModel alloc] initWithDictionary:_messageDict error:nil]];
_joinChannelRetryCount--;
});
} else {
[self uploadFailedRecordWithErrorInfo:errorInfo];
}
}
/// 上传状态到服务器
/// @param errorInfo 错误信息
- (void)uploadFailedRecordWithErrorInfo:(NSString *)errorInfo {
[[NSNotificationCenter defaultCenter] postNotificationName:@"gm_push_remove_waiting_success" object:nil];
[GMVideoTelephoneRequestTool telephoneMessageEventType:GMEventType_addFail consultationRecordId:TTManager.consultationRecordId finishBlock:nil];
if (TTManager.totalTime <= 0) {
[GMHudModule showWarning:errorInfo];
}
TTManager.telephoneStatus = TelephoneVideoStatus_rest;
}
#pragma mark - 展示直播页面
......
......@@ -17,10 +17,13 @@ NS_ASSUME_NONNULL_BEGIN
@protocol GMNeteaseIMModel @end
@interface GMNeteaseIMModel : GMObject
/// 被叫方的account_id,可能是空字符串
@property (nonatomic, strong) NSString *toAccountId;
@property (nonatomic, copy) NSString *toAccountId;
/// 双方需要加入的信令房间id,可能是空字符串
@property (nonatomic, strong) NSString *channelId;
@property (nonatomic, copy) NSString *channelId;
/// 额外参数
@property (nonatomic, copy) NSString *inviteExt;
@end
@interface GMVideoTelephoneModel : GMObject
......@@ -54,6 +57,11 @@ NS_ASSUME_NONNULL_BEGIN
@property (nonatomic, strong) GMConsultationInfoModel *counsellorInfo;
// 网易云信
@property (nonatomic, strong) GMNeteaseIMModel *neteaseIm;
/// 加入房间重试次数,大于等于0,0代表不重试
@property (nonatomic, assign) NSInteger joinChannelRetryCount;
/// 重试间隔,毫秒,大于等于0
@property (nonatomic, assign) NSInteger joinChannelRetryMs;
/// 获取性别字符串
......
......@@ -145,9 +145,7 @@
#pragma mark - 超时退出直播间
- (void)userExitTime {
[super userExitTime];
//主播与副主播的被动挂断提示不同
NSString *message = _TTManager.me.clientRole == TTTRtc_ClientRole_Anchor ? @"用户接入异常,即将退出视频通话":@"用户接入异常,即将退出视频";
[GMHudModule showWarning:message];
[GMHudModule showWarning:@"用户取消,连线结束"];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self exitRoom:NO];
});
......@@ -208,9 +206,7 @@
#pragma mark - 记录通话时长
- (void)doctorTimeChange:(int)currentTime {
_TTManager.totalTime = currentTime;
if (currentTime%10 == 0) { // 10s 上报一次
[GMVideoTelephoneRequestTool telephoneMessageEventType:GMEventType_video consultationRecordId:_TTManager.consultationRecordId finishBlock:nil];
}
[GMVideoTelephoneRequestTool telephoneMessageEventType:GMEventType_video consultationRecordId:_TTManager.consultationRecordId finishBlock:nil];
}
#pragma mark - 退出房间 status yes 正常退出 no 异常退出
......@@ -276,6 +272,21 @@
[self.userVideoView configureRegion:_user];
[_TTManager setTelephoneVideoCompositingLayout:self.windowStatu userId:uid doctorId:_TTManager.me.uid];
[GMHudModule toastInView:self text:@"已接通"];
[GMVideoTelephoneRequestTool telephoneMessageEventType:GMEventType_video consultationRecordId:_TTManager.consultationRecordId finishBlock:^(BOOL success, NSDictionary *message) {
if (success) {
// 在医生抢单的瞬间,用户取消派单会出现 医生进入视频页面一直不取消,所以加此处理逻辑
if ([message.allKeys containsObject:@"model"]) {
GMTelphoneStatusModel *model = message[@"model"];
if (model.status == 3) { // 已结束
[self userExitTime];
}
}
}
}];
[_functionView startTime];
}
......
......@@ -297,9 +297,7 @@
#pragma mark - 更新记录通话时长
- (void)userTimeChange:(int)currentTime {
_TTManager.totalTime = currentTime;
if (currentTime%10 == 0) { // 10s 上报一次
[GMVideoTelephoneRequestTool telephoneMessageEventType:GMEventType_video consultationRecordId:_TTManager.consultationRecordId finishBlock:nil];
}
[GMVideoTelephoneRequestTool telephoneMessageEventType:GMEventType_video consultationRecordId:_TTManager.consultationRecordId finishBlock:nil];
}
#pragma mark - 变成小窗口
......
......@@ -26,6 +26,15 @@ NS_ASSUME_NONNULL_BEGIN
@property (nonatomic, copy) NSString *consultPeopleNumber;
/** 展示类型,0:不显示 1: 好评率 + 接通率 2: 好评率 + 有效面诊人数*/
@property (nonatomic, assign) NSInteger showType;
/// 是否显示倒计时
@property (nonatomic, assign) BOOL showCountdown;
/// 倒计时 单位 微秒
@property (nonatomic, assign) NSInteger countdown;
/// 显示文案
@property (nonatomic, copy) NSString *countdownText;
@end
NS_ASSUME_NONNULL_END
......@@ -34,12 +34,17 @@
@property (nonatomic, strong) GMWaitingSuccessView *successView;
@property (nonatomic, strong) SDAnimatedImageView *animationView;
@property (nonatomic, strong) GMImageView *beijingView;
@property (nonatomic, assign) BOOL isCanceling;
@end
@implementation GMVideoWaitingView
- (void)setup {
[super setup];
// 监听 是否有人抢单成功(信令消息)
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(fetchAndPingCurrentDispatch) name:@"gm_push_consouller_accept" object:nil];
self.container.size = CGSizeMake(MAINSCREEN_WIDTH, 380 + UIView.safeAreaInsetsBottom);
[self containerRectCorner:self.container];
......@@ -178,19 +183,11 @@
self.bottomLabel.text = [NSString stringWithFormat:@"%ds", self.currentTime];
self.currentTime --;
if (self.currentTime % 5 == 0) {
__weak __typeof(self)weakSelf = self;
[GMNetworking requestOCWithApi:@"/api/consultation_counsel/get_current_dispatch_info" method:GMHTTPMethodGet parameters:nil completion:^(GMResponseOC * _Nonnull response) {
if (response.data[@"notice_info"]) {
[weakSelf showSuccessView];
weakSelf.successView.object = [[GMNoticeInfoObject alloc] initWithDictionary:response.data[@"notice_info"] error:nil];
NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithDictionary:response.data[@"consultation_record_info"]];
[dict setValue:@(weakSelf.counsellorType) forKey:@"counsellor_type"];
[dict setValue:@(weakSelf.consultationType) forKey:@"consultation_type"];
weakSelf.successView.info = dict;
[GMVideoPhobos video_monitoringWithActionStep:@"用户客户端收到匹配成功回执" consultId:weakSelf.successView.info[@"consultation_record_id"] traceId:nil];
}
}];
[self fetchCurrentDispatchInfo];
}
// 1s请求一次
[self pingCurrentDispatch];
} else {
NSString *str = self.counsellorType == 1 ? @"医生":@"面诊师";
str = [NSString stringWithFormat:@"抱歉,暂无%@接单,请稍后再试,本次视频面诊订单金额将原路退还至您的账户中",str];
......@@ -204,16 +201,56 @@
}
}
- (void)cancelDispatch {
[GMNetworking requestOCWithApi:@"/api/consultation_counsel/cancel_dispatch" method:GMHTTPMethodPost parameters:nil completion:^(GMResponseOC * _Nonnull response) {
- (void)fetchCurrentDispatchInfo {
if (self.isCanceling) {
return;
}
__weak __typeof(self)weakSelf = self;
[GMNetworking requestOCWithApi:@"/api/consultation_counsel/get_current_dispatch_info" method:GMHTTPMethodGet parameters:nil completion:^(GMResponseOC * _Nonnull response) {
if (response.data[@"notice_info"]) {
[weakSelf showSuccessView];
weakSelf.successView.object = [[GMNoticeInfoObject alloc] initWithDictionary:response.data[@"notice_info"] error:nil];
NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithDictionary:response.data[@"consultation_record_info"]];
[dict setValue:@(weakSelf.counsellorType) forKey:@"counsellor_type"];
[dict setValue:@(weakSelf.consultationType) forKey:@"consultation_type"];
weakSelf.successView.info = dict;
[GMVideoPhobos video_monitoringWithActionStep:@"用户客户端收到匹配成功回执" consultId:weakSelf.successView.info[@"consultation_record_id"] traceId:nil];
}
}];
}
- (void)pingCurrentDispatch {
// 只要客户端还处于等待派单的状态,就每1秒POST一次
[GMNetworking requestOCWithApi:@"/api/consultation_counsel/current_dispatch_ping" method:GMHTTPMethodPost parameters:nil completion:nil];
}
- (void)fetchAndPingCurrentDispatch {
if (self.isCanceling) {
return;
}
[self fetchCurrentDispatchInfo];
[self pingCurrentDispatch];
}
- (void)cancelDispatch {
__weak typeof(self)weakSelf = self;
[GMNetworking requestOCWithApi:@"/api/consultation_counsel/cancel_dispatch" method:GMHTTPMethodPost parameters:nil completion:^(GMResponseOC * _Nonnull response) {
if (response.isSuccess) {
if (weakSelf.isCanceling) {
[weakSelf waitViewHide];
}
} else {
weakSelf.isCanceling = NO;
[weakSelf fetchAndPingCurrentDispatch];
}
}];
}
- (void)cancelBtnClick {
if (self.currentTime >= 0) {
self.isCanceling = YES;
[self cancelDispatch];
[self waitViewHide];
} else {
__weak __typeof(self)weakSelf = self;
UIAlertController *alert = [UIAlertController alert:@"正在为您全力匹配医生、面诊师 真的不再等一等了么?" leftTitle:@"残忍离开" rightTitle:@"取消" leftAlterAction:^{
......@@ -228,10 +265,10 @@
- (void)showSuccessView {
[self invalidateCountDownTimer];
[self removeAnimation];
[self hide];
[self.successView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.mas_equalTo(0);
}];
[self hide];
}
- (void)invalidateCountDownTimer{
[_timer invalidate];
......@@ -276,4 +313,9 @@
}
return _animationView;
}
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
@end
......@@ -16,7 +16,7 @@
@interface GMWaitingSuccessView ()
{
NSTimer *_timer;
int currentTime;
CGFloat currentTime;
}
@property (nonatomic, strong) GMImageView *doctorView;
@property (nonatomic, strong) GMLabel *nameLabel;
......@@ -35,6 +35,9 @@
- (void)setup {
[super setup];
// 监听 successview 啥时候移除
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dismissSelf) name:@"gm_push_remove_waiting_success" object:nil];
self.container.size = CGSizeMake(MAINSCREEN_WIDTH, 323 + UIView.safeAreaInsetsBottom);
[self containerRectCorner:self.container];
......@@ -151,7 +154,6 @@
make.centerX.mas_equalTo(0);
make.size.mas_equalTo(CGSizeMake(56, 56));
}];
currentTime = 5;
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(didBecomeActive)
name:UIApplicationDidBecomeActiveNotification object:nil];
......@@ -165,13 +167,12 @@
}
- (void)didBecomeActive {
[self invalidateCountDownTimer];
[[NSNotificationCenter defaultCenter] removeObserver:self];
[self removeFromSuperview];
[[GMUserVideoTelephoneLogin sharedVideoTelephoneLogin] userEnterVideoRoom:self.info extension:nil];
}
- (void)setObject:(GMNoticeInfoObject *)object {
_object = object;
currentTime = object.countdown / 1000.0;
[self addCountDownTimer];
[self.doctorView setImageWithUrlString:object.portraitUrl placeHolder:nil];
[self.iconView setImageWithUrlString:object.iconUrl placeHolder:nil];
......@@ -211,24 +212,37 @@
}
}
- (void)addCountDownTimer{
_timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(updateCountDown) userInfo:nil repeats:YES];
[_timer fire];
- (void)addCountDownTimer {
// 展示倒计时
if (_object.showCountdown) {
_timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(updateCountDown) userInfo:nil repeats:YES];
[_timer fire];
} else { // 不展示倒计时
self.successInfoLabel.text = SafeString(_object.countdownText);
// 等待一段时间移除页面,接通视频
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(currentTime * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[[GMUserVideoTelephoneLogin sharedVideoTelephoneLogin] userEnterVideoRoom:self.info extension:nil];
});
}
}
- (void)hide {
}
- (void)dismissSelf {
[self removeFromSuperview];
}
- (void)updateCountDown {
if (currentTime >= 0) {
NSMutableAttributedString *attribute = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%dS 后开启摄像头进行视频通话\n建议您选择安静、光线充足的环境", currentTime]];
NSMutableAttributedString *attribute = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%dS %@\n建议您选择安静、光线充足的环境", currentTime, _object.countdownText]];
[attribute addAttribute:NSForegroundColorAttributeName value:RGBCOLOR_HEX(0x4ABAB4) range:NSMakeRange(0, 2)];
self.successInfoLabel.attributedText = attribute;
currentTime --;
} else {
[self invalidateCountDownTimer];
[self removeFromSuperview];
[[GMUserVideoTelephoneLogin sharedVideoTelephoneLogin] userEnterVideoRoom:self.info extension:nil];
}
}
......@@ -238,4 +252,8 @@
_timer = nil;
}
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
@end
......@@ -55,9 +55,7 @@
_grabBtn = [GMButton new];
[_grabBtn setImage:[UIImage imageNamed:@"wt_can_select_grab_icon"] forState:UIControlStateNormal];
[_grabBtn addTarget:self action:@selector(grabBtnAction:) forControlEvents:UIControlEventTouchUpInside];
// _grabBtn.userInteractionEnabled = NO;
// [_grabBtn setBackgroundColor:GMColorD5D5D5 forState:UIControlStateNormal];
_grabBtn.multiControlTimeInterva = 2.f;
[_bgImage addSubview:_grabBtn];
[_grabBtn mas_makeConstraints:^(MASConstraintMaker *make) {
make.size.mas_equalTo(CGSizeMake(60, 60));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment