// // IfishP2PMonitorController.m // IfihYooeeDemo // // Created by imac on 16/6/7. // Copyright © 2016年 xiang. All rights reserved. // #import "IfishP2PMonitorController.h" #import "XuanduoSettingController.h" #import #import #import #import "UIView+Toast.h" #import "AppDelegate.h" #import "UDManager.h" #import "Utils.h" #import "TouchButton.h" #import "ContactDAO.h" #import "FListManager.h" #import "Contact.h" #import "LocalDevice.h"//rtsp监控界面弹出修改 #import "CustomTopBar.h" #import "UINavigationBar+Background.h" #define MAX_VIDEO_RES_SIZE ((1920+32)*1088) #define DeviceId @"3157838" #define DevicePw @"616657769" #import "ShotScreenImgViewController.h" #import "UserModel.h" #import "DeviceCameraModel.h" #import "SetTimeController.h" #import "NoneControlNonetimerViewController.h" #import "TwoControlSetTimeViewController.h" #import "TwoControlnoneTimerViewController.h" #import "TwoControlNinetyninebiteViewController.h" #import "XuToSetViewController.h" #import "XuToLightModel.h" #import "XuToWenDuPicview.h" #import "JiaReWenDuModel.h" #import "FourControlSetViewController.h" #import "IfishMianTabViewController.h" #import "ScanViewController.h" #import "SetNameTextViewController.h" #import "SongNuoSetViewController.h" #import "KeLiAiSetViewController.h" #import "LXADViewTool.h" #import "MineKanHuViewController.h" #import "IfishKanHuServiceViewController.h" #import "LoveFishLiveListBaseViewController.h" #import "MineKankanEditViewController.h" #import "CameraRecordViewController.h" #import "IfishP2PPlayBackListViewController.h" #import "YMsgBox.h" #import "P2PPlaybackController.h" #import "IfishDeviceInfo.h" #import "RusunHaveHeateSetViewController.h" #import "KanHuFuWuViewController.h" #import "IfishBindDeviceSelectViewController.h" #import "MinekanHuNotSelectShopController.h" #import #import "RunSun84CHSetViewController.h" #import "HaveHotCoolWenDuPicview.h" #import "RuSunLightOrder.h" #import "RuiMeiSetViewController.h" #import "Xuanduo2SettingController.h" #import "MessageAlertView.h" #import "CreatErWeiMaController.h" #import "ELPCircleConsoleView.h" //上部分视频封装 下部分分段控制器 封装 (下一步代码优化) @interface IfishP2PMonitorController () { CGFloat _horizontalScreenH; CGFloat _monitorInterfaceW;//rtsp监控界面弹出修改 CGFloat _monitorInterfaceH;//rtsp监控界面弹出修改 UIButton* _btnDefence; BOOL _isCanAutoOrientation;//限制屏幕什么时候可以旋转 BOOL _connectDevice; //是否连接P2P BOOL _isConnectCamera;//是否连接到设备 BOOL _isStop;//是否暂停 用于区分是 暂停按钮 还是 连接失败按钮 dispatch_queue_t _xutoMainQueue; BOOL _isPushNextView; //是否push下级界面 BOOL _isNewXuanduo; //是新绚多设备 BOOL _isconnecting;//是否正在连接摄像头 } @property(nonatomic,strong) SetTimeController*SetTimeVC; @property(nonatomic,strong) NoneControlNonetimerViewController*noncontrolnonetimerVC; @property(nonatomic,strong) TwoControlSetTimeViewController *twoControlSetTimeVC; @property(nonatomic,strong) TwoControlnoneTimerViewController *twocontrolNonetimerVC; @property(nonatomic,strong) TwoControlNinetyninebiteViewController * twoControlNinetyninebiteVC; @property(nonatomic,strong) XuToSetViewController *xuToSetVC; //无制冷加热 @property(nonatomic,strong) XuToWenDuPicview *wenduPicview; //有制冷加热 @property(nonatomic,strong) HaveHotCoolWenDuPicview *ruSunPicview; @property(nonatomic,strong) FourControlSetViewController *forControlSetVC; @property(nonatomic,strong) SongNuoSetViewController *songNuoSetVC; @property(nonatomic,strong) KeLiAiSetViewController *keLiAiSetVc; @property(nonatomic,strong) RusunHaveHeateSetViewController *rusunSet; @property(nonatomic,strong) RunSun84CHSetViewController *rusun84Set; @property (nonatomic, strong) RuiMeiSetViewController *ruimeiSet; Strong MessageAlertView *popView; @property(nonatomic,strong) UIButton *rightPopButton; @property (nonatomic,strong) SetNameTextViewController *setNameVC; @property (nonatomic,strong) NSString *xinName; @property (nonatomic,strong) UILabel *nameTitle; @property (strong, nonatomic) UIView *shutterView; @property(nonatomic,strong) HaveHotCoolWenDuPicview *xuanduoPicView; @property(nonatomic,strong) ELPCircleConsoleView *directionView; Weak UIView *remoteView;//显示player的载体 Strong UIImage *screenShotImage;//截图 //自动重试次数 5次 @property (assign, nonatomic) NSInteger retryTime; @end extern BOOL formLogIn;//连接页面是否来自登录界面 BOOL isfromCameraView;//未绑定鱼缸时,去绑定鱼缸 判断是否从摄像头界面进入 @implementation IfishP2PMonitorController - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization } return self; } -(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; //跳转到录制界面会将cameraHViewDelegate 置nil _bottomToolHView.cameraHViewDelegate=self; //扫码激活用 更新isActive //屏幕长亮 [[ UIApplication sharedApplication] setIdleTimerDisabled:YES]; NSArray *yooseeDeviceArr = [[DataCenter defaultDtacenter] valueForKey:@"cameraArr"]; for (IfishCameraModel *camera in yooseeDeviceArr) { if ([camera.cameraId isEqualToString:self.contact.cameraId]) { self.contact = camera; } } [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveRemoteMessage:) name:RECEIVE_REMOTE_MESSAGE object:nil]; self.navigationController.navigationBarHidden = NO; _isCanAutoOrientation = YES; //设置默认竖屏 [[AppDelegate sharedDefault] application:[UIApplication sharedApplication] supportedInterfaceOrientationsForWindow:[AppDelegate sharedDefault].window]; //先判断是否授权 if (!self.contact.isActive) { [self.view makeToast:@"设备无授权字段"]; return; } if ([self.contact.isActive isEqualToString:@"1"]) { [self cameraConnectSeting]; }else if ([self.contact.isActive isEqualToString:@"0"]){ UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@"" message:@"请扫描产品外包装上的激活码来激活摄像头" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"前往扫描", nil]; alert.tag = WEIJIHUO_ALERT; [alert show]; } } //环境校验 -(void)checkNetStatus{ [[AFNetworkReachabilityManager sharedManager] startMonitoring]; [[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { NSLog(@"%ld", (long)status); switch (status) { case AFNetworkReachabilityStatusUnknown: NSLog(@"未知"); [self.view makeToast:@"当前网络环境:未知,请检查网络"]; break; case AFNetworkReachabilityStatusNotReachable: NSLog(@"无连接"); [self.view makeToast:@"当前网络环境:无网络,请检查网络"]; break; case AFNetworkReachabilityStatusReachableViaWWAN: [self.view makeToast:@"当前网络环境:3/4G,建议切换到WiFi"]; NSLog(@"2/3G"); break; case AFNetworkReachabilityStatusReachableViaWiFi: [self.view makeToast:@"当前网络环境:WiFi,请放心观看"]; break; default: break; } }]; } -(void)viewWillDisappear:(BOOL)animated{ [super viewWillDisappear:animated]; [self.view hideToast];//隐藏所有弹出框 //屏幕长亮关闭 [[ UIApplication sharedApplication] setIdleTimerDisabled:NO]; [AppDelegate sharedDefault].canFullScreen = NO; self.isReject = YES; [[UIApplication sharedApplication] setStatusBarHidden:NO]; if (self.isFullScreen){ if (self.scrollView){ [self.scrollView setZoomScale:1.0]; } } [self.player p2pStop]; [[NSNotificationCenter defaultCenter] removeObserver:self name:RECEIVE_REMOTE_MESSAGE object:nil]; } - (void)dealloc { NSLog(@"%s %d",__func__,__LINE__); [self.player p2pStop]; } - (void)viewDidLoad { [super viewDidLoad]; [self checkNetStatus]; self.isShowControllerBar = YES; self.isVideoModeHD = NO; _isReject=YES; _isStop = NO; _isPushNextView = NO; _isConnectCamera = NO; if ([self.contact.isActive isEqualToString:@"1"]) { [self connectDevice]; } //监控竖屏时,各控件初始化(先) [self initComponentForPortrait]; //监控横屏时,各控件初始化(后) [self initComponentForHorizontalScreen]; if ([self.contact.isActive isEqualToString:@"1"]) { }else{ [self.yProgressView stop]; } NSString* key = [NSString stringWithFormat:@"camera_%@_flip",self.contact.cameraId]; NSString* flip =[[DataCenter defaultDtacenter].cache stringForKey:key]; if ([flip isEqualToString:@"1"]) { [UIView animateWithDuration:0.1f animations:^{ self.player.viewController.view.transform = CGAffineTransformMakeRotation(M_PI); } completion:^(BOOL finished) { }]; } } #pragma mark --LoadBaseUI -(UIView *)canvasView{ if (!_canvasView) { //显示监控画面的载体canvasView CGFloat canvasView_h = [UIScreen mainScreen].bounds.size.width * 9/16; _canvasView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, screen_width, canvasView_h)]; _canvasView.backgroundColor = [UIColor clearColor]; self.canvasframe = _canvasView.frame; } return _canvasView; } #pragma mark - 初始化设备 p2pConnect -(void)cameraConnectSeting{ //rtsp监控界面弹出修改 [self monitorP2PCall]; if (_isPushNextView) { return; } [self hiddenMonitoringUI:NO callWithErrorType:100 isReCall:YES]; } -(void)connectDevice{ UserModel *model=[dataContorl getUserInfo]; NSString *userIDName=[NSString stringWithFormat:@"%d",(int)[model.gwellUserID integerValue]&0x7fffffff]; //初始化设备 if ([GWP2PClient sharedClient].linkStatus != P2PLinkStatusOK) { NSLog(@"正在检查P2P连接状态"); _connectDevice = [[GWP2PClient sharedClient] connectWithAccount:userIDName codeStr1:model.P2PVerifyCode1 codeStr2:model.P2PVerifyCode2 sessionID1:model.sessionID sessionID2:model.sessionID2 customerIDs:nil]; if (_connectDevice) { [self connectCamera]; }else{ NSLog(@"p2pConnect failure.失败,不能操作设备"); dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [self hiddenMonitoringUI:NO callWithErrorType:GWP2PCallErrorNone isReCall:NO]; }); } } } //连接到摄像头 -(void)connectCamera{ if (!_isconnecting) { _isconnecting = YES;//正在连接中 [[GWP2PClient sharedClient] getMultipleDeviceStatusWithDeviceID:self.contact.cameraId password:self.contact.cameraPass completionBlock:^(GWP2PClient *client, BOOL success, NSDictionary *dataDictionary) { _isconnecting = NO; //获取设备信息,无论是否成功,都直接连接摄像头add V5.0.0 if (success) { _isConnectCamera = YES; [self monitorP2PCall]; NSLog(@"当前连接设备信息:%@",dataDictionary); }else{ _isConnectCamera = YES; [self monitorP2PCall]; // _isConnectCamera = NO; // dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ // [self.view makeToast:@"连接设备失败"]; // [self hiddenMonitoringUI:NO callWithErrorType:100 isReCall:NO]; // }); // return; } }]; }else{ //设备连接中 } } #pragma mark --尝试连接摄像头 -(void)monitorP2PCall{ if ([self.player isPlaying]) {//如果已经连接,则不重复发出连接申请 return; } //p2p未连接 if ([GWP2PClient sharedClient].linkStatus != P2PLinkStatusOK) { [self connectDevice]; return; } //未连接到设备 if (!_isConnectCamera) { [self connectCamera]; return; } WEAK_SELF; dispatch_async(dispatch_get_global_queue(0, 0), ^{ [weakSelf.player p2pCallDeviceWithDeviceId:self.contact.cameraId password:self.contact.cameraPass definition:GWP2PPTZDefinitionSD calling:^(NSDictionary *parameters) { //呼叫设备 NSLog(@"[p2pCallDevice-Calling],paras=%@",parameters); } accept:^(NSDictionary *parameters) { NSLog(@"[p2pCallDevice-Accept],paras=%@",parameters); } reject:^(GWP2PCallError error, NSString *errorCode) { if (error==GWP2PCallErrorTimeout&&self.retryTime<5) { self.retryTime++; [self monitorP2PCall]; return; } else { _isReject=YES; NSLog(@"摄像头连接失败"); dispatch_async(dispatch_get_main_queue(), ^{ [self.view hideToast]; [self.view makeToast:@"连接失败"]; [self hiddenMonitoringUI:NO callWithErrorType:(NSInteger)error isReCall:NO]; }); } } ready:^{ //呼叫成功操作 NSLog(@"连接摄像头成功 当前所在线程为%@",[NSThread currentThread]); //隐藏呼叫中的UI dispatch_async(dispatch_get_main_queue(), ^{ //隐藏旋转按钮 [self.view makeToast:@"连接成功"]; [weakSelf hiddenMonitoringUI:YES callWithErrorType:100 isReCall:NO]; // [weakSelf didHiddenMonitorUIWith:YES]; }); } allowLAN:YES]; }); } //摄像头播放回调 #pragma mark - GWP2PPlayer代理回调测试 - (void)p2pPlayer:(GWP2PPlayer *)player recieveGestureRecognizer:(UIGestureRecognizer *)gesture { NSLog(@"-----delegate---recieveGestureRecognizer"); } - (void)p2pVideoPlayer:(GWP2PVideoPlayer *)player numberOfAudiencesChange:(NSUInteger)currentNumber { NSLog(@"-----delegate---numberOfAudiencesChange"); } #pragma mark - 监控竖屏时,各控件初始化 #define BOTTOM_BAR_HEIGHT (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? 95.0:50.0) #define PRESS_LAYOUT_WIDTH_AND_HEIGHT 38 #define CONTROLLER_BTN_COUNT 5 #define PUBLIC_WIDTH_OR_HEIGHT (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? 95.0:50.0) #define CONTROLLER_BTN_H_W (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? 70.0:40.0) //布防、声音...高度宽度 #define RESOLUTION_BTN_H (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? 44.0:30.0) //分辨率按钮高度 #define CONTROLLER_RIGHT_ITEM_WIDTH 70 #define CONTROLLER_RIGHT_ITEM_HEIGHT 40 #define CONTROLLER_LEFT_ITEM_WIDTH 20 #define CONTROLLER_BTN_TAG_HUNGUP 0 #define CONTROLLER_BTN_TAG_SOUND 1 #define CONTROLLER_BTN_TAG_SCREENSHOT 2 #define CONTROLLER_BTN_TAG_PRESS_TALK 3 #define CONTROLLER_BTN_TAG_DEFENCE_LOCK 4 #define CONTROLLER_BTN_TAG_HD 5 #define CONTROLLER_BTN_TAG_SD 6 #define CONTROLLER_BTN_TAG_LD 7 #define CONTROLLER_BTN_TAG_RESOLUTION 8 #define CONTROLLER_LABEL_TAG_HD 10 #define CONTROLLER_LABEL_TAG_SD 11 #define CONTROLLER_LABEL_TAG_LD 12 #define CONTROLLER_BTN_TAG_GPIO1_0 13 //lock #define LEFTVIEW_WIDTH (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? 88:88) #define LEFTVIEW_HEIGHT (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? 120:120) #define CUSTOM_BORDER_BUTTON_WIDTH 20 #define CUSTOM_BORDER_BUTTON_HEIGHT 45 #define LEFT_BAR_BTN_WIDTH (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? 90:60) #define LEFT_BAR_BTN_MARGIN (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? 15:10) #define LOADINGPRESSVIEW_WIDTH_HEIGHT (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? 50:80) //详情页为竖直方向 -(void)initComponentForPortrait{ //view的背景颜色 [self.view setBackgroundColor:RGB(242, 242, 242)]; //显示状态栏 [[UIApplication sharedApplication] setStatusBarHidden:NO]; //取得竖屏的rect CGRect rect = [AppDelegate getScreenSize:YES isHorizontal:NO]; CGFloat width = rect.size.width; CGFloat height = rect.size.height; if(CURRENT_VERSION<7.0){ height +=20; } //导航栏 NSString *deviceName = [NSString stringWithFormat:@"%@",self.contact.showName]; [self.navigationController.navigationBar resetBackgroundImage]; UIButton*leftBtn = [UIButton buttonWithType:UIButtonTypeCustom]; leftBtn.frame = CGRectMake(0, 0, 47,44); [leftBtn setImage:[UIImage imageNamed:@"back_btn"] forState:UIControlStateNormal]; [leftBtn addTarget: self action: @selector(btnClickToBack:) forControlEvents: UIControlEventTouchUpInside]; leftBtn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft; [leftBtn setContentEdgeInsets:UIEdgeInsetsMake(0, 10, 0, -10)]; UIBarButtonItem * lbbItem=[[UIBarButtonItem alloc]initWithCustomView:leftBtn]; self.navigationItem.leftBarButtonItem=lbbItem; //视频监控连接中的标题 self.nameTitle=[[UILabel alloc]initWithFrame:CGRectMake(0, 0, 60, 44)]; self.nameTitle.text=deviceName; self.nameTitle.textAlignment=NSTextAlignmentCenter; self.nameTitle.textColor=[UIColor whiteColor]; self.navigationItem.titleView=self.nameTitle; UIButton*rightButton = [UIButton buttonWithType:UIButtonTypeCustom]; rightButton.frame = CGRectMake(0, 0, 60, 44); [rightButton setImage:[UIImage imageNamed:@"ifishnav_dropview_list"] forState:UIControlStateNormal]; [rightButton addTarget:self action:@selector(popAppear) forControlEvents:UIControlEventTouchUpInside]; self.rightPopButton = rightButton; [self.rightPopButton setImageEdgeInsets:UIEdgeInsetsMake(0, 30, 0, 0)]; UIBarButtonItem*rightItem = [[UIBarButtonItem alloc]initWithCustomView:self.rightPopButton]; self.navigationItem.rightBarButtonItem = rightItem; [self.view addSubview:self.canvasView];//添加摄像头的背景view //视频监控连接中的背景图片 NSString *filePath = [Utils getHeaderFilePathWithId:self.contact.cameraId]; UIImage *headImg = [UIImage imageWithContentsOfFile:filePath]; if(headImg==nil){ headImg = LXImageWithImageName(@"ic_header.png"); } self.canvasView.layer.contents = (id)headImg.CGImage; //添加播放器VC self.player = [[GWP2PVideoPlayer alloc] init]; self.player.delegate = self; self.player.mute = YES; self.player.viewController.view.backgroundColor = [UIColor clearColor]; [self.canvasView addSubview:self.player.viewController.view]; [self addChildViewController:self.player.viewController]; self.player.viewController.view.frame = self.canvasframe; self.remoteView = self.player.viewController.view; //视频监控连接中或者连接失败的文字提示,以及旋转或者重连图片 UIButton *promptButton = [UIButton buttonWithType:UIButtonTypeCustom]; promptButton.frame = CGRectMake(0.0, 0.0, self.canvasView.frame.size.width, self.canvasView.frame.size.height); promptButton.backgroundColor = [UIColor clearColor]; promptButton.tag = PROMPT_BUTTON_TAG; [promptButton addTarget:self action:@selector(onVerticalBtnPress:) forControlEvents:UIControlEventTouchUpInside]; [self.canvasView addSubview:promptButton]; self.directionView=[[ELPCircleConsoleView alloc]init]; self.directionView.frame=CGRectMake(0, 0, 200, 200); self.directionView.delegate=self; [self.canvasView addSubview:self.directionView]; self.directionView.center=self.canvasView.center; self.directionView.hidden=YES; //self.directionView.image=LXImageWithImageName(@"equipment_iocn_joystick"); // [self.directionView mas_makeConstraints:^(MASConstraintMaker *make) { // make.center.mas_equalTo(self.canvasView); // make.width.mas_equalTo(200); // make.height.mas_equalTo(200); // }]; self.promptButton = promptButton; //图片frame CGFloat progressView_wh = LOADINGPRESSVIEW_WIDTH_HEIGHT; CGFloat progressView_y = (self.canvasView.frame.size.height-progressView_wh)/2; // 旋转或者重连图片 或者开始监控图片 ProgressImageView *progressView = [[ProgressImageView alloc] initWithFrame:CGRectMake((width-progressView_wh)/2, progressView_y, progressView_wh, progressView_wh)]; progressView.backgroundView.image = LXImageWithImageName(@"monitor_press.png"); [self.promptButton addSubview:progressView]; [progressView start]; self.yProgressView = progressView; //退出横屏时,也调整frame UIView *pressView = [[UIView alloc] initWithFrame:CGRectMake(10, self.canvasframe.size.height+NAVIGATION_BAR_HEIGHT-PRESS_LAYOUT_WIDTH_AND_HEIGHT, PRESS_LAYOUT_WIDTH_AND_HEIGHT/2, PRESS_LAYOUT_WIDTH_AND_HEIGHT)]; UIImageView *pressLeftView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, PRESS_LAYOUT_WIDTH_AND_HEIGHT/2, PRESS_LAYOUT_WIDTH_AND_HEIGHT)]; pressLeftView.image = LXImageWithImageName(@"ic_voice.png"); [pressView addSubview:pressLeftView]; UIImageView *pressRightView = [[UIImageView alloc] initWithFrame:CGRectMake(PRESS_LAYOUT_WIDTH_AND_HEIGHT/2, 0, PRESS_LAYOUT_WIDTH_AND_HEIGHT/2, PRESS_LAYOUT_WIDTH_AND_HEIGHT)]; NSArray *imagesArray = [NSArray arrayWithObjects:LXImageWithImageName(@"amp1.png"),LXImageWithImageName(@"amp2.png"),LXImageWithImageName(@"amp3.png"),LXImageWithImageName(@"amp4.png"),LXImageWithImageName(@"amp5.png"),LXImageWithImageName(@"amp6.png"),LXImageWithImageName(@"amp7.png"),LXImageWithImageName(@"amp6.png"),LXImageWithImageName(@"amp6.png"),LXImageWithImageName(@"amp3.png"),LXImageWithImageName(@"amp5.png"),LXImageWithImageName(@"amp6.png"),LXImageWithImageName(@"amp6.png"),LXImageWithImageName(@"amp3.png"),LXImageWithImageName(@"amp4.png"),LXImageWithImageName(@"amp5.png"),LXImageWithImageName(@"amp5.png"),nil]; pressRightView.animationImages = imagesArray; pressRightView.animationDuration = ((CGFloat)[imagesArray count])*200.0f/1000.0f; pressRightView.animationRepeatCount = 0; [pressRightView startAnimating]; [pressView addSubview:pressRightView]; [self.view addSubview:pressView]; [pressView setHidden:YES]; self.pressView = pressView; [self.canvasView bringSubviewToFront:self.directionView]; //、横屏工具栏 CGFloat midtH=self.canvasView.frame.size.height/5; UIView *midToolHView = [[UIView alloc] initWithFrame:CGRectMake(0.0, CGRectGetMaxY(self.canvasView.frame), width,0)]; midToolHView.backgroundColor = [UIColor colorWithWhite:0 alpha:0.5]; [self.view addSubview:midToolHView]; [self.view bringSubviewToFront:midToolHView]; self.midToolHView = midToolHView;//全屏时,隐藏 //_remoteView 添加点击手势现实和隐藏 midToolHView UITapGestureRecognizer *appermidToolView=[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onSingleTap)]; [appermidToolView setCancelsTouchesInView:YES]; [appermidToolView setDelaysTouchesEnded:YES]; [self.remoteView addGestureRecognizer:appermidToolView]; //暂停按钮 self.stopBtnH = [UIButton buttonWithType:UIButtonTypeCustom]; self.stopBtnH.frame = CGRectMake(50.0/SCREEN_SCALE, (midtH - midtH/2)/2, midtH/2, midtH/2); self.stopBtnH.tag = STOPBTN_TAG; [self.stopBtnH addTarget:self action:@selector(onVerticalBtnPress:) forControlEvents:UIControlEventTouchUpInside]; self.stopBtnH.hidden = YES; [self.midToolHView addSubview:self.stopBtnH]; //暂停按钮图片 UIImage *stopImageH = LXImageWithImageName(@"monitor_stop_h"); self.stopImageViewH = [[UIImageView alloc] initWithFrame:CGRectMake(0,0, midtH/2, midtH/2)]; self.stopImageViewH.contentMode = UIViewContentModeScaleToFill; self.stopImageViewH.image = stopImageH; self.stopImageViewH.tag = 10; [self.stopBtnH addSubview:self.stopImageViewH]; //横屏按钮 self.switchScreenButtonH = [UIButton buttonWithType:UIButtonTypeCustom]; CGFloat BtnH = midtH*2/3; self.switchScreenButtonH.frame = CGRectMake(self.midToolHView.frame.size.width-BtnH -50.0/SCREEN_SCALE, (midtH - BtnH)/2,BtnH + 50.0/SCREEN_SCALE, BtnH); self.switchScreenButtonH.tag = SWITCH_SCREEN_BUTTON_H_TAG; [self.switchScreenButtonH addTarget:self action:@selector(onVerticalBtnPress:) forControlEvents:UIControlEventTouchUpInside]; [self.midToolHView addSubview:self.switchScreenButtonH]; self.switchScreenButtonH.hidden = YES; //self.switchScreenButtonH = switchScreenButtonH; //横屏按钮图片 UIImage *switchScreenImageH = LXImageWithImageName(@"monitor_switch_screen_img_h.png"); UIImageView *switchScreenImageViewH = [[UIImageView alloc] initWithFrame:CGRectMake(0,0, BtnH, BtnH)]; switchScreenImageViewH.contentMode = UIViewContentModeScaleToFill; switchScreenImageViewH.image = switchScreenImageH; [self.switchScreenButtonH addSubview:switchScreenImageViewH]; CGFloat segMentH=kScreenSize.width*0.13; CGFloat controlSegY= CGRectGetMaxY(self.canvasView.frame); IifshSegmentView *seg = [[IifshSegmentView alloc] initWithFrame:CGRectMake(0.0, controlSegY,kScreenSize.width, segMentH)]; seg.segDelegate = self; NSString*title=@"水族箱"; NSArray*devicearray=[[DataCenter defaultDtacenter]valueForKey:@"deviceInfo"]; BOOL contain3F=NO; BOOL contain2F=NO; for (DeviceModel*model in devicearray) { if ([model.type isEqualToString:DECICE_TYPE_XUANDUO2F]) { contain2F=YES; } if ([model.type isEqualToString:DECICE_TYPE_XUANDUO3F]) { contain3F=YES; } } if (contain2F) { if (contain3F) { title=@"设备"; } else { title=@"水族箱"; } } else if(contain3F) { title=@"宠物笼"; } else { title=@"水族箱"; } [seg initleftTitle:@"摄像头" addRightTitle:title isSelectStyle:YES]; self.segControl = seg; [self.view addSubview:seg]; //布防撤防、对讲、截图工具栏 ****** 云台 CameraBottomHView *bottomToolHView = [[CameraBottomHView alloc] initWithFrame:CGRectMake(0.0, CGRectGetMaxY(self.segControl.frame) + 10, width, height-CGRectGetMaxY(self.segControl.frame)- MyNavBarHeight -10)]; bottomToolHView.cameraHViewDelegate = self; bottomToolHView.camera = self.contact; [self.view addSubview:bottomToolHView]; self.bottomToolHView = bottomToolHView;//全屏时,隐藏 self.bottomToolHView.hidden = NO; //底部view 水族箱view UIView *bottomHView = [[UIView alloc] initWithFrame:CGRectMake(0.0, CGRectGetMaxY(self.segControl.frame) + 10, width, height-CGRectGetMaxY(self.segControl.frame)-10-MyNavBarHeight)]; bottomHView.backgroundColor = JWUIColorFromRGB(0xdddddd); [self.view addSubview:bottomHView]; self.bottomFishHView = bottomHView; self.bottomFishHView.hidden = YES; //右侧下拉菜单 [self initPopOver]; } #pragma mark - 播放器代理回调 -(void)viewDidLayoutSubviews { [super viewDidLayoutSubviews]; self.player.viewController.view.frame = self.canvasView.bounds; } #pragma mark- 下拉菜单 -(MessageAlertView *)popView{ if (!_popView) { _popView = [[MessageAlertView alloc]initWithFrame:RECT(screen_width - kSizeFrom750(220), 0, kSizeFrom750(220), kSizeFrom750(337.5))]; WEAK_SELF; //点击 _popView.comboxBlock = ^(NSInteger tag) { if (tag == 0) { //修改设备名 [weakSelf sheZhiCameraMing]; }else if (tag == 1){ //删除摄像头 [weakSelf delectCamera]; }else if (tag == 2){ //删除摄像头 [weakSelf fenXiangSheBei]; } else if (tag == 3){ //检查设备更新 if ([weakSelf.player isPlaying]) { [weakSelf.view makeToastActivity:CSToastPositionCenter]; [[GWP2PClient sharedClient] checkDeviceUpdateWithDeviceID:weakSelf.contact.cameraId devicePassword:weakSelf.contact.cameraPass completionBlock:^(GWP2PClient *client, BOOL success, NSDictionary *dataDictionary) { //检查更新成功之后,处理回调事件 [weakSelf checkUpdateSuccessWithDictionary:dataDictionary]; }]; }else{ [weakSelf.view makeToast:@"设备已离线"]; } } else if (tag == 4){ //翻转 NSString* key = [NSString stringWithFormat:@"camera_%@_flip",weakSelf.contact.cameraId]; NSString* flip =[[DataCenter defaultDtacenter].cache stringForKey:key]; if ([flip isEqualToString:@"0"]||!flip.length) { [UIView animateWithDuration:0.25f animations:^{ weakSelf.player.viewController.view.transform = CGAffineTransformMakeRotation(M_PI); } completion:^(BOOL finished) { }]; [[DataCenter defaultDtacenter].cache setSynString:@"1" forKey:key]; } else { [UIView animateWithDuration:0.25 animations:^{ weakSelf.player.viewController.view.transform = CGAffineTransformIdentity; } completion:^(BOOL finished) { }]; [[DataCenter defaultDtacenter].cache setSynString:@"0" forKey:key]; } } [weakSelf popAppear];//隐藏弹出框 }; } return _popView; } -(void)popAppear{ BOOL isHidden = self.popView.hidden; if (isHidden) { self.popView.hidden = NO; } [UIView animateWithDuration:0.3 animations:^{ self.popView.transform = CGAffineTransformScale(self.popView.transform,isHidden?100:0.01,isHidden?100:0.01); } completion:^(BOOL finished) { self.popView.hidden = !isHidden; }]; } -(void)initPopOver{ [self.view addSubview:self.popView]; NSArray *titleImgs =nil; NSArray *titles=nil; titleImgs = @[@"ifishdropview_edite_device",@"ifishdropview_delect_device",@"Ifish_share_device",@"equipment_icon_equipmentupdate",@"revert"]; titles=@[@"修改名称",@"删除设备",@"分享设备",@"设备升级",@"图像翻转"]; [self.popView loadInfoWithTitle:titles Icons:titleImgs]; } #pragma mark - 方向控制 -(void)rotateCircleView:(ELPCircleConsoleView *)rotetaCircleView didRotateWithValueX:(NSString *)Xstr valueY:(NSString *)Ystr stop:(BOOL)needStop moveDirection:(ELPCircleConsoleMoveDirection)orientation{ //TODO for your own action method if(orientation == ELPCircleConsoleMoveDirectionUp){ [self.player p2pTurnDirection:GWP2PPTZDirectionUp]; } else if(orientation == ELPCircleConsoleMoveDirectionDown){ [self.player p2pTurnDirection:GWP2PPTZDirectionDown]; } else if(orientation == ELPCircleConsoleMoveDirectionLeft){ [self.player p2pTurnDirection:GWP2PPTZDirectionLeft]; } else if(orientation == ELPCircleConsoleMoveDirectionRight){ [self.player p2pTurnDirection:GWP2PPTZDirectionRight]; } else if(orientation == ELPCircleConsoleMoveDirectionUpStop){ [self.player p2pTurnDirection:GWP2PPTZDirectionUp]; } else if(orientation == ELPCircleConsoleMoveDirectionDownStop){ [self.player p2pTurnDirection:GWP2PPTZDirectionDown]; } else if(orientation == ELPCircleConsoleMoveDirectionLeftStop){ [self.player p2pTurnDirection:GWP2PPTZDirectionLeft]; } else if(orientation == ELPCircleConsoleMoveDirectionRightStop){ [self.player p2pTurnDirection:GWP2PPTZDirectionRight]; } } //判断摄像头是否有关系设备 #pragma mark - 判断摄像头是否有关系设备 -(BOOL)testCameraBindDeviceOrNot{ NSArray *devicCameraArr = [[DataCenter defaultDtacenter] valueForKey:@"devicamerArr"]; NSMutableArray *camerwIdArr = [[NSMutableArray alloc] init]; for (DeviceCameraModel *camera in devicCameraArr) { [camerwIdArr addObject:camera.cameraId]; } BOOL exst=[camerwIdArr containsObject:self.contact.cameraId]; if (exst) { return YES; } return NO; } #pragma mark- 设置设备名称 -(void)sheZhiCameraMing{ self.setNameVC = [[SetNameTextViewController alloc] init]; self.setNameVC.name = self.nameTitle.text; self.setNameVC.cameraModel = self.contact; self.setNameVC.deviceType = 1; __weak typeof (self)wself = self; _setNameVC.NameWithBlock = ^(NSString *nameStr){ wself.nameTitle.text = nameStr; }; if ([self.player isPlaying]) { [self stopGLViewVideo]; } [self.navigationController pushViewController:self.setNameVC animated:YES]; self.navigationController.navigationBarHidden = NO; } #pragma mark - 删除摄像头 -(void)delectCamera{ UIAlertController*ac2=[UIAlertController alertControllerWithTitle:@"提示" message:@"确认删除摄像头?" preferredStyle:UIAlertControllerStyleAlert]; [ac2 addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction*action){ }]]; [ac2 addAction:[UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction*action){ //删除摄像头 前判断是否有 设备与其绑定关系 有解除关系 从关系数组中删除 NSMutableArray *guanxiiArr= [[DataCenter defaultDtacenter] valueForKey:@"devicamerArr"]; for (DeviceCameraModel *model in guanxiiArr) { if (self.contact.cameraId == model.cameraId ) { [guanxiiArr removeObject:model]; //保存新关系数组 [[DataCenter defaultDtacenter] setValue:guanxiiArr forKey:@"devicamerArr"]; } } [self deleteCameraAtRequset]; }]]; [self presentViewController:ac2 animated:YES completion:nil]; } -(void)fenXiangSheBei{ CreatErWeiMaController*vc=[[CreatErWeiMaController alloc]init]; vc.isNewdevice = YES; vc.deviceid=self.contact.cameraId; [self.navigationController pushViewController:vc animated:YES]; } -(void)deleteCameraAtRequset{ AFHTTPRequestOperationManager*mannager=[AFHTTPRequestOperationManager manager]; AFSecurityPolicy*policy = [[AFSecurityPolicy alloc]init]; policy.validatesDomainName=NO; policy.validatesCertificateChain=NO; mannager.securityPolicy =policy; mannager.responseSerializer=[AFHTTPResponseSerializer serializer]; NSMutableDictionary * para = [NSMutableDictionary dictionary]; // NSMutableArray*deviceIdArr=[[NSMutableArray alloc]init]; UserModel*model=[[DataCenter defaultDtacenter]valueForKey:@"UserLogIn"]; NSString *cameraId=self.contact.cameraId; NSNumber *userId=model.userId; [para setValue:cameraId forKey:@"cameraId"]; [para setValue:userId forKey:@"userId"]; __weak typeof (self)weakSelf=self; [mannager POST:IfishdeleteCameraUser parameters:para success:^(AFHTTPRequestOperation *operation, id responseObject) { if (responseObject) { NSDictionary*resultDic=[NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil]; NSLog(@"result:%@",resultDic[@"result"]); if ([resultDic[@"result"] isEqualToString:@"100"]) { if ([weakSelf.player isPlaying]) { [weakSelf stopGLViewVideo]; } [[Socketsingleton sharedInstance] cutOffSocket]; [weakSelf.view makeToast:@"删除成功"]; NSArray*deviceArry=[[DataCenter defaultDtacenter]valueForKey:@"cameraArr"]; NSMutableArray *newArr = [NSMutableArray arrayWithArray:deviceArry]; for (IfishCameraModel *model in deviceArry) { if ([model.cameraId isEqual:self.contact.cameraId]) { [newArr removeObject:model]; } } [[DataCenter defaultDtacenter] setValue: newArr forKey:@"cameraArr"]; [weakSelf setAppTabRoot]; }else if ([resultDic[@"result"] isEqualToString:@"101"]){ [weakSelf.view makeToast:@"删除失败"]; }else if ([resultDic[@"result"] isEqualToString:@"301"]){ [weakSelf.view makeToast:@"请求验证失败,请重新登陆"]; }else if ([resultDic[@"result"] isEqualToString:@"302"]){ [weakSelf.view makeToast:@"请求被舍弃,未执行"]; } } } failure:^(AFHTTPRequestOperation *operation, NSError *error) { [weakSelf.view makeToast:@"请求异常"]; }]; } #pragma mark - 关系解绑事件 -(void)jieBangBtnAction{ UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@"" message:@"确定解除摄像头与水族箱的关系吗?" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil]; alert.tag = CAMERA_DEVICE_JIEBANG_ALERT; [alert show]; } #pragma mark- 解除 摄像头设备关系 -(void)camerDeviceDelectRelate{ //解除与当前显示摄像头 相关的 关系设备 NSMutableArray * devicCameraArr = [[DataCenter defaultDtacenter] valueForKey:@"devicamerArr"]; NSString *deviceId= nil; for (DeviceCameraModel *camera in devicCameraArr) { if (self.contact.cameraId == camera.cameraId) { deviceId = camera.deviceId; } } [AFNOHeaderHttpTool deleteDeviceCameraWith:self.contact.cameraId deiviceId:deviceId success:^(id response) { NSDictionary *reDic=[NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableContainers error:nil]; NSString *result= reDic[@"result"] ; if ([result isEqualToString:@"100"]) { [self.view makeToast:@"解除关系成功"]; [devicCameraArr enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { if ([obj isKindOfClass:[DeviceCameraModel class]]) { DeviceCameraModel *camera = (DeviceCameraModel *)obj; if (self.contact.cameraId == camera.cameraId) { [devicCameraArr removeObject:camera]; *stop = YES; } } }]; //重置关系数组 [[DataCenter defaultDtacenter] setValue:devicCameraArr forKey:@"devicamerArr"]; if (self.fishControlView) { [self.fishControlView.collectionView removeFromSuperview]; [self.fishControlView setTabViewWithFrame:self.fishControlView.frame]; //_jieBangBtn.hidden = YES; } [[Socketsingleton sharedInstance] cutOffSocket]; }else if ([result isEqualToString:@"101"]){ [self.view makeToast:@"解除关系失败"]; } } failure:^(NSError *err) { [self.view makeToast:@"请检查网络连接"]; }]; } #pragma mark --更新相关内容 //检查更新之后,是否更新 -(void)checkUpdateSuccessWithDictionary:(NSDictionary *)parameter { NSInteger result = [[parameter valueForKey:@"result"] intValue]; NSString *curVersion = [parameter valueForKey:@"current version"]; NSString *upgVersion = [parameter valueForKey:@"update version"]; NSString *updateStatus = [parameter valueForKey:@"can update"];//当前是否为最新版本 if(result==1){ //读取到了服务器升级文件 dispatch_async(dispatch_get_main_queue(), ^{ [self.view hideToastActivity]; if ([updateStatus integerValue]==0) {//当前为最新版本,不需要升级 [CommonUtils showAlerWithTitle:nil withMsg:[NSString stringWithFormat:@"%@:%@,%@",NSLocalizedString(@"cur_version_is", nil),curVersion,NSLocalizedString(@"is_latest_version", nil)]]; }else{ NSString *title = [NSString stringWithFormat:@"%@:%@,%@:%@",NSLocalizedString(@"cur_version_is", nil),curVersion,NSLocalizedString(@"can_update_to", nil),upgVersion]; UIAlertView *deleteAlert = [[UIAlertView alloc] initWithTitle:title message:@"" delegate:self cancelButtonTitle:NSLocalizedString(@"cancel", nil) otherButtonTitles:NSLocalizedString(@"ok", nil),nil]; deleteAlert.tag = ALERT_TAG_UPDATE; [deleteAlert show]; } }); }else if(result==72){//sd卡升级文件 //读取到了sd卡升级文件 dispatch_async(dispatch_get_main_queue(), ^{ [self.view hideToastActivity]; NSString *title = [NSString stringWithFormat:@"%@:%@,%@",NSLocalizedString(@"cur_version_is", nil),curVersion,NSLocalizedString(@"can_update_sd", nil)]; UIAlertView *deleteAlert = [[UIAlertView alloc] initWithTitle:title message:@"" delegate:self cancelButtonTitle:NSLocalizedString(@"cancel", nil) otherButtonTitles:NSLocalizedString(@"ok", nil),nil]; deleteAlert.tag = ALERT_TAG_UPDATE; [deleteAlert show]; }); }else if(result==54){ dispatch_async(dispatch_get_main_queue(), ^{ [self.view hideToastActivity]; [self.view makeToast:[NSString stringWithFormat:@"%@:%@",NSLocalizedString(@"now_version_is_latest", nil),curVersion]]; }); }else if(result==58){ dispatch_async(dispatch_get_main_queue(), ^{ [self.view hideToastActivity]; [self.view makeToast:NSLocalizedString(@"other_was_check_device_update", nil)]; }); }else{ dispatch_async(dispatch_get_main_queue(), ^{ [self.view hideToastActivity]; [self.view makeToast:NSLocalizedString(@"update_failed", nil)]; }); } } #pragma mark- Segment选择事件 with新UI -(void)segmentSelectAtIndext:(NSInteger)index { switch (index) { //云台 case 0: { self.bottomToolHView.hidden = NO; self.bottomFishHView.hidden = YES; } break; //水族箱 case 1: { self.bottomFishHView.hidden = NO; self.bottomToolHView.hidden = YES; NSLog(@"水族箱"); NSArray*devicearray=[[DataCenter defaultDtacenter]valueForKey:@"deviceInfo"]; //self.currentDevice = devicearray[0]; NSUserDefaults*userdefult=[NSUserDefaults standardUserDefaults]; [userdefult setObject:self.contact.cameraId forKey:@"OnShowCameraId"]; [userdefult synchronize]; if ([devicearray count]!=0) { CGRect rect = [AppDelegate getScreenSize:YES isHorizontal:NO]; CGFloat width = rect.size.width; CGFloat height = rect.size.height; if (!_fishControlView) { _fishControlView=[[MonitorBootmView alloc] initWithFrame:CGRectMake(0,0, width, height-CGRectGetMaxY(self.segControl.frame) -15-TOP_HEIGHT)]; _fishControlView.cameraId = self.contact.cameraId; _fishControlView.MonitorBottomDelegate=self; [self.bottomFishHView addSubview:_fishControlView]; } }else{ UIButton *notbindBtn=[UIButton buttonWithType:UIButtonTypeCustom]; NSString *title=@"您暂未绑定水族箱或宠物笼,前往绑定。"; [notbindBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; NSMutableAttributedString * attributedString = [[NSMutableAttributedString alloc] initWithString:title]; NSMutableParagraphStyle * paragraphStyle = [[NSMutableParagraphStyle alloc] init]; [paragraphStyle setLineSpacing:12]; [attributedString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [title length])]; [attributedString addAttribute:NSForegroundColorAttributeName value:[UIColor colorWithRed:0 green:170.0/255.0 blue:218.0/255.0 alpha:1] range:NSMakeRange(13,4)]; [attributedString addAttribute:NSForegroundColorAttributeName value:[UIColor blackColor] range:NSMakeRange(0,13)]; [attributedString addAttribute:NSForegroundColorAttributeName value:[UIColor blackColor] range:NSMakeRange([title length]-1,1)]; [notbindBtn setAttributedTitle:attributedString forState:UIControlStateNormal]; [notbindBtn sizeToFit]; notbindBtn.titleLabel.textAlignment = NSTextAlignmentCenter; CGFloat btnTitleW =[self widthForString:notbindBtn.titleLabel.text fontSize:20 andHeight:10]; CGFloat btnTitleH = [self heightForString:notbindBtn.titleLabel.text fontSize:20 andWidth:btnTitleW]; notbindBtn.frame =CGRectMake(self.bottomFishHView.frame.size.width/2 -btnTitleW/2,self.bottomFishHView.frame.size.height/2 -btnTitleH/2, btnTitleW, btnTitleH); [notbindBtn addTarget:self action:@selector(notbindClick) forControlEvents:UIControlEventTouchUpInside]; [self.bottomFishHView addSubview:notbindBtn]; } } break; default: break; } } #pragma -mark -functions //获取字符串的宽度 -(float) widthForString:(NSString *)value fontSize:(float)fontSize andHeight:(float)height { CGSize sizeToFit = [value sizeWithFont:[UIFont systemFontOfSize:fontSize] constrainedToSize:CGSizeMake(CGFLOAT_MAX, height) lineBreakMode:NSLineBreakByWordWrapping];//此处的换行类型(lineBreakMode)可根据自己的实际情况进行设置 return sizeToFit.width; } //获得字符串的高度 -(float) heightForString:(NSString *)value fontSize:(float)fontSize andWidth:(float)width { CGSize sizeToFit = [value sizeWithFont:[UIFont systemFontOfSize:fontSize] constrainedToSize:CGSizeMake(width, CGFLOAT_MAX) lineBreakMode:NSLineBreakByCharWrapping];//此处的换行类型(lineBreakMode)可根据自己的实际情况进行设置 return sizeToFit.height; } #pragma mark- 未绑定水族箱 -(void)notbindClick{ //挂断连接 [self stopGLViewVideo]; formLogIn = NO; isfromCameraView = YES; //主动 释放 openGL 内存 以 free buffer [AppDelegate sharedDefault].canFullScreen = NO; IfishBindDeviceSelectViewController *connectVC=[[IfishBindDeviceSelectViewController alloc]init]; [self.navigationController pushViewController:connectVC animated:YES]; } #pragma mark 按下按钮时,响应 -(void)onVerticalBtnTouchCancel:(UIButton *)button{ switch(button.tag){ case SOUND_BUTTON_H_TAG://声音 { } break; case SWITCH_SCREEN_BUTTON_H_TAG://横屏 { } break; case DEFENCE_BUTTON_H_TAG://布防撤防 { } break; case TALK_BUTTON_H_TAG: { [self.pressView setHidden:YES]; // [[PAIOUnit sharedUnit] setSpeckState:YES]; } break; case SCREENSHOT_BUTTON_H_TAG://载图 { } break; case PROMPT_BUTTON_TAG://重新连接监控 { } break; } } #pragma mark 点击竖屏上的按钮时,响应 //截图按钮点击 - (void)screenShot { // WEAK_SELF; //todo: 不停截图内存升高 [self.player p2pScreenshot:^(UIImage *screenshot, NSTimeInterval timeInterval) { dispatch_async(dispatch_get_main_queue(), ^{ UIImage *tempImage = [[UIImage alloc] initWithCGImage:screenshot.CGImage]; NSData *imgData = [NSData dataWithData:UIImagePNGRepresentation(tempImage)]; [Utils saveScreenshotFile:imgData]; [self.view makeToast:@"截图成功,请在图库中查看"]; }); }]; } -(void)onVerticalBtnPress:(UIButton *)button{ switch(button.tag){ case SOUND_BUTTON_H_TAG://声音 { if (![self.player isPlaying]) { //图像渲染出来前,不可以控制声音 return; } } break; case SWITCH_SCREEN_BUTTON_H_TAG://切换至横屏或者竖屏 { [self.view hideToast]; if (![self.player isPlaying]) { return; } if (!self.isFullScreen) { //设置横屏 [AppDelegate sharedDefault].canFullScreen = YES; static int isFullScreen = 3; // 3 == 全屏 1 == 竖屏 if (@available(iOS 16.0, *)) { [self setNeedsUpdateOfSupportedInterfaceOrientations]; [self.navigationController setNeedsUpdateOfSupportedInterfaceOrientations]; NSArray *array = [[[UIApplication sharedApplication] connectedScenes] allObjects]; UIWindowScene *scene = (UIWindowScene *)array[0]; UIWindowSceneGeometryPreferencesIOS *geometryPreferences = [[UIWindowSceneGeometryPreferencesIOS alloc] initWithInterfaceOrientations:UIInterfaceOrientationMaskLandscape]; [scene requestGeometryUpdateWithPreferences:geometryPreferences errorHandler:^(NSError * _Nonnull error) { NSLog(@"wuwuFQ:%@", error); }]; } else if ([[UIDevice currentDevice] respondsToSelector:@selector(setOrientation:)]) { NSNumber *numb=[NSNumber numberWithInteger:UIInterfaceOrientationLandscapeRight]; isFullScreen = UIInterfaceOrientationLandscapeRight; [[UIDevice currentDevice] performSelector:@selector(setOrientation:) withObject:numb]; SEL selector = NSSelectorFromString(@"setOrientation:"); NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[UIDevice instanceMethodSignatureForSelector:selector]]; [invocation setSelector:selector]; [invocation setTarget:[UIDevice currentDevice]]; NSLog(@"-%d-",isFullScreen); [invocation setArgument:&isFullScreen atIndex:2]; [invocation invoke]; self.navigationController.navigationBar.hidden = YES; self.navigationController.navigationBar.translucent = YES; //设置默认全屏 BOOL is16B9 = [[P2PClient sharedClient] is16B9]; if (!is16B9) { self.isFullScreen4B3 = NO; [self onDoubleTap]; } } } else { self.isFullScreen4B3 = !self.isFullScreen4B3; //设置竖屏 [AppDelegate sharedDefault].canFullScreen = NO; static int isFullScreen = 1; // 3 == 全屏 1 == 竖屏 if (@available(iOS 16.0, *)) { [self setNeedsUpdateOfSupportedInterfaceOrientations]; [self.navigationController setNeedsUpdateOfSupportedInterfaceOrientations]; NSArray *array = [[[UIApplication sharedApplication] connectedScenes] allObjects]; UIWindowScene *scene = (UIWindowScene *)array[0]; UIWindowSceneGeometryPreferencesIOS *geometryPreferences = [[UIWindowSceneGeometryPreferencesIOS alloc] initWithInterfaceOrientations:UIInterfaceOrientationMaskPortrait]; [scene requestGeometryUpdateWithPreferences:geometryPreferences errorHandler:^(NSError * _Nonnull error) { NSLog(@"wuwuFQ:%@", error); }]; } else if ([[UIDevice currentDevice] respondsToSelector:@selector(setOrientation:)]) { NSLog(@"self.interfaceOrientation%ld",(long)UIDeviceOrientationPortrait); isFullScreen = UIDeviceOrientationPortrait; //NSNumber *numb=[NSNumber numberWithInteger:UIDeviceOrientationPortrait]; //[[UIDevice currentDevice] performSelector:@selector(setOrientation:) // withObject:numb]; SEL selector = NSSelectorFromString(@"setOrientation:"); NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[UIDevice instanceMethodSignatureForSelector:selector]]; [invocation setSelector:selector]; [invocation setTarget:[UIDevice currentDevice]]; NSLog(@"-%d-",isFullScreen); [invocation setArgument:&isFullScreen atIndex:2]; [invocation invoke]; } } } break; case DEFENCE_BUTTON_H_TAG://布防撤防 { NSString *contactId = [[P2PClient sharedClient] callId]; NSString *contactPassword = [[P2PClient sharedClient] callPassword]; if (self.isDefenceOn) { [[P2PClient sharedClient] setRemoteDefenceWithId:contactId password:contactPassword state:SETTING_VALUE_REMOTE_DEFENCE_STATE_OFF]; }else{ [[P2PClient sharedClient] setRemoteDefenceWithId:contactId password:contactPassword state:SETTING_VALUE_REMOTE_DEFENCE_STATE_ON]; } } break; case TALK_BUTTON_H_TAG://对讲 { //非本地设备 NSInteger deviceType1 = [AppDelegate sharedDefault].contact.contactType; //本地设备 NSInteger deviceType2 = [[FListManager sharedFList] getType:[[P2PClient sharedClient] callId]]; if (deviceType1 == CONTACT_TYPE_DOORBELL || deviceType2 == CONTACT_TYPE_DOORBELL) {//支持门铃,点按开关说话 if (self.isTalking) { self.isTalking = NO; [self.pressView setHidden:YES]; // [[PAIOUnit sharedUnit] setSpeckState:YES]; //竖屏,对讲关闭 button.selected = NO; //横屏,对讲关闭 //LXImageWithImageName(@"ic_ctl_new_send_audio_p.png") UIButton *controllerTalkBtn = (UIButton *)[self.controllBar viewWithTag:CONTROLLER_BTN_TAG_PRESS_TALK]; [controllerTalkBtn setBackgroundImage:LXImageWithImageName(@"ic_ctl_new_send_audio.png") forState:UIControlStateNormal]; }else{ self.isTalking = YES; [self.pressView setHidden:NO]; // [[PAIOUnit sharedUnit] setSpeckState:NO]; //竖屏,对讲打开 button.selected = YES; //横屏,对讲打开 UIButton *controllerTalkBtn = (UIButton *)[self.controllBar viewWithTag:CONTROLLER_BTN_TAG_PRESS_TALK]; [controllerTalkBtn setBackgroundImage:LXImageWithImageName(@"ic_ctl_new_send_audio_p.png") forState:UIControlStateNormal]; } }else{ //不支持门铃,松开结束对讲 [self.pressView setHidden:YES]; // [[PAIOUnit sharedUnit] setSpeckState:YES]; } } break; case SCREENSHOT_BUTTON_H_TAG://截图 { [self screenShot];//截屏 } break; case PROMPT_BUTTON_TAG://重新连接监控 { [self hiddenMonitoringUI:NO callWithErrorType:100 isReCall:YES]; [self monitorP2PCall]; } break; //暂停按钮 case STOPBTN_TAG: { //获取暂停按钮图 UIImageView *stopImageViewH = (UIImageView *)[button viewWithTag:10]; //暂停结束,继续播放视频 if(![self.player isPlaying]){ _isStop = NO; [self hiddenMonitoringUI:NO callWithErrorType:100 isReCall:YES]; [self monitorP2PCall]; stopImageViewH.image = LXImageWithImageName(@"monitor_stop_h.png"); //横屏,声音打开 }else{ _isStop = YES;//点击暂停 [self stopGLViewVideo]; [self hiddenMonitoringUI:YES callWithErrorType:GWP2PCallErrorNone isReCall:NO]; stopImageViewH.image = LXImageWithImageName(@"monitor_on_h.png"); //横屏,声音关闭 } } break; //图库 case SCREENSHOT_BUTTON_FLIE_TAG: { if ([self.player isPlaying]) { [self stopGLViewVideo]; } usleep(50*1000); ShotScreenImgViewController *shootView=[[ShotScreenImgViewController alloc] init]; [self.navigationController pushViewController:shootView animated:YES]; NSLog(@"图库"); } } } #define MESG_SET_GPIO_PERMISSION_DENIED 86 #define MESG_GPIO_CTRL_QUEUE_IS_FULL 87 #define MESG_SET_DEVICE_NOT_SUPPORT 255 #define GPIO0_0 10 #define GPIO0_1 11 #define GPIO0_2 12 #define GPIO0_3 13 #define GPIO0_4 14 #define GPIO2_6 15 - (void)receiveRemoteMessage:(NSNotification *)notification{ NSDictionary *parameter = [notification userInfo]; int key = [[parameter valueForKey:@"key"] intValue]; switch(key){ case RET_GET_FOCUS_ZOOM: { int value = [[parameter valueForKey:@"value"] intValue]; if (value == 3) {//变倍变焦都有 dispatch_async(dispatch_get_main_queue(), ^{ self.isSupportFocalLength = YES; [self.pinchGestureRecognizer addTarget:self action:@selector(localLengthPinchToZoom:)]; }); }else if (value == 2){//只有变焦 dispatch_async(dispatch_get_main_queue(), ^{ self.isSupportFocalLength = YES; }); }else if (value == 1){//只有变倍 dispatch_async(dispatch_get_main_queue(), ^{ [self.pinchGestureRecognizer addTarget:self action:@selector(localLengthPinchToZoom:)]; }); } } break; case RET_SET_GPIO_CTL: { int result = [[parameter valueForKey:@"result"] intValue]; dispatch_async(dispatch_get_main_queue(), ^{ self.clickGPIO0_0Button.backgroundColor = [UIColor clearColor]; self.clickGPIO0_1Button.backgroundColor = [UIColor clearColor]; self.clickGPIO0_2Button.backgroundColor = [UIColor clearColor]; self.clickGPIO0_3Button.backgroundColor = [UIColor clearColor]; self.clickGPIO0_4Button.backgroundColor = [UIColor clearColor]; self.clickGPIO2_6Button.backgroundColor = [UIColor clearColor]; }); if (result == 0) { //设置成功 dispatch_async(dispatch_get_main_queue(), ^{ [self.view makeToast:NSLocalizedString(@"operator_success", nil)]; }); }else if (result == MESG_SET_GPIO_PERMISSION_DENIED){ //该GPIO未开放 dispatch_async(dispatch_get_main_queue(), ^{ [self.view makeToast:NSLocalizedString(@"not_open", nil)]; }); }else if (result == MESG_GPIO_CTRL_QUEUE_IS_FULL){ //操作过于频繁,之前的操作未执行完 dispatch_async(dispatch_get_main_queue(), ^{ [self.view makeToast:NSLocalizedString(@"too_frequent", nil)]; }); }else if(result == MESG_SET_DEVICE_NOT_SUPPORT){ //设备不支持此操作 dispatch_async(dispatch_get_main_queue(), ^{ [self.view makeToast:NSLocalizedString(@"not_support_operation", nil)]; }); } } break; case RET_GET_LIGHT_SWITCH_STATE: { int result = [[parameter valueForKey:@"result"] intValue]; if (result == 0) { int state = [[parameter valueForKey:@"state"] intValue]; dispatch_async(dispatch_get_main_queue(), ^{ self.isSupportLightSwitch = YES; if (state == 1) {//灯是开状态 self.isLightSwitchOn = YES; [self.lightButton setBackgroundImage:[UIImage imageNamed:@"lighton.png"] forState:UIControlStateNormal]; }else{ self.isLightSwitchOn = NO; [self.lightButton setBackgroundImage:[UIImage imageNamed:@"lightoff.png"] forState:UIControlStateNormal]; } }); } } break; case RET_SET_LIGHT_SWITCH_STATE: { int result = [[parameter valueForKey:@"result"] intValue]; if (result == 0) { dispatch_async(dispatch_get_main_queue(), ^{ [self.lightButton setHidden:NO]; [self.progressView setHidden:YES]; [self.progressView stopAnimating]; if (self.isLightSwitchOn) {//灯正开着 self.isLightSwitchOn = NO;//关灯 [self.lightButton setBackgroundImage:[UIImage imageNamed:@"lightoff.png"] forState:UIControlStateNormal]; }else{//灯正关着 self.isLightSwitchOn = YES;//开灯 [self.lightButton setBackgroundImage:[UIImage imageNamed:@"lighton.png"] forState:UIControlStateNormal]; } }); } } break; case RET_DEVICE_NOT_SUPPORT: { dispatch_async(dispatch_get_main_queue(), ^{ self.clickGPIO0_0Button.backgroundColor = [UIColor clearColor]; self.clickGPIO0_1Button.backgroundColor = [UIColor clearColor]; self.clickGPIO0_2Button.backgroundColor = [UIColor clearColor]; self.clickGPIO0_3Button.backgroundColor = [UIColor clearColor]; self.clickGPIO0_4Button.backgroundColor = [UIColor clearColor]; self.clickGPIO2_6Button.backgroundColor = [UIColor clearColor]; //[self.view makeToast:NSLocalizedString(@"device_not_support", nil)]; }); } break; case RET_GET_NPCSETTINGS_REMOTE_DEFENCE: { dispatch_async(dispatch_get_main_queue(), ^{ NSInteger state = [[parameter valueForKey:@"state"] intValue]; if(state==SETTING_VALUE_REMOTE_DEFENCE_STATE_ON) { //竖屏 [self.defenceButtonH setImage:LXImageWithImageName(@"monitor_defence_on_h.png")forState:UIControlStateNormal]; [self.defenceButtonH setImage:LXImageWithImageName(@"monitor_defence_on_h_p.png") forState:UIControlStateHighlighted]; //获取到布防状态,设置为可点且显示相应的图标 self.defenceButtonH.enabled = YES; self.isDefenceOn = YES; //横屏 [_btnDefence setBackgroundImage:LXImageWithImageName(@"ic_ctl_lock_on.png") forState:UIControlStateNormal]; } else { //竖屏 [self.defenceButtonH setImage:LXImageWithImageName(@"monitor_defence_off_h.png") forState:UIControlStateNormal]; [self.defenceButtonH setImage:LXImageWithImageName(@"monitor_defence_off_h_p.png") forState:UIControlStateHighlighted]; //获取到布防状态,设置为可点且显示相应的图标 self.defenceButtonH.enabled = YES; self.isDefenceOn = NO; //横屏 [_btnDefence setBackgroundImage:LXImageWithImageName(@"ic_ctl_lock_off.png") forState:UIControlStateNormal]; } if (_btnDefence.hidden == YES) { _btnDefence.hidden = NO; } }); } break; case RET_SET_NPCSETTINGS_REMOTE_DEFENCE: { dispatch_async(dispatch_get_main_queue(), ^{ NSInteger state = [[parameter valueForKey:@"state"] intValue]; if(state==SETTING_VALUE_REMOTE_DEFENCE_STATE_ON){ //竖屏 // LXImageWithImageName(@"ic_ctl_lock_off.png") [self.defenceButtonH setImage:LXImageWithImageName(@"monitor_defence_on_h.png") forState:UIControlStateNormal]; [self.defenceButtonH setImage:LXImageWithImageName(@"monitor_defence_on_h_p.png") forState:UIControlStateHighlighted]; self.isDefenceOn = YES; //横屏 [_btnDefence setBackgroundImage:LXImageWithImageName(@"ic_ctl_lock_on.png") forState:UIControlStateNormal]; }else{ //竖屏 [self.defenceButtonH setImage:LXImageWithImageName(@"monitor_defence_off_h.png") forState:UIControlStateNormal]; [self.defenceButtonH setImage:LXImageWithImageName(@"monitor_defence_off_h_p.png") forState:UIControlStateHighlighted]; self.isDefenceOn = NO; //横屏 [_btnDefence setBackgroundImage:LXImageWithImageName(@"ic_ctl_lock_off.png") forState:UIControlStateNormal]; } }); } break; case RET_CHECK_DEVICE_UPDATE: //检查设备更新 { NSInteger result = [[parameter valueForKey:@"result"] intValue]; NSString *curVersion = [parameter valueForKey:@"curVersion"]; NSString *upgVersion = [parameter valueForKey:@"upgVersion"]; if(result==1){ //读取到了服务器升级文件 dispatch_async(dispatch_get_main_queue(), ^{ [self.view hideToastActivity]; NSString *title = [NSString stringWithFormat:@"%@:%@,%@:%@",NSLocalizedString(@"cur_version_is", nil),curVersion,NSLocalizedString(@"can_update_to", nil),upgVersion]; UIAlertView *deleteAlert = [[UIAlertView alloc] initWithTitle:title message:@"" delegate:self cancelButtonTitle:NSLocalizedString(@"cancel", nil) otherButtonTitles:NSLocalizedString(@"ok", nil),nil]; deleteAlert.tag = ALERT_TAG_UPDATE; [deleteAlert show]; }); }else if(result==72){//sd卡升级文件 //读取到了sd卡升级文件 dispatch_async(dispatch_get_main_queue(), ^{ [self.view hideToastActivity]; NSString *title = [NSString stringWithFormat:@"%@:%@,%@",NSLocalizedString(@"cur_version_is", nil),curVersion,NSLocalizedString(@"can_update_sd", nil)]; UIAlertView *deleteAlert = [[UIAlertView alloc] initWithTitle:title message:@"" delegate:self cancelButtonTitle:NSLocalizedString(@"cancel", nil) otherButtonTitles:NSLocalizedString(@"ok", nil),nil]; deleteAlert.tag = ALERT_TAG_UPDATE; [deleteAlert show]; }); }else if(result==54){ dispatch_async(dispatch_get_main_queue(), ^{ [self.view hideToastActivity]; [self.view makeToast:[NSString stringWithFormat:@"%@:%@",NSLocalizedString(@"now_version_is_latest", nil),curVersion]]; }); }else if(result==58){ dispatch_async(dispatch_get_main_queue(), ^{ [self.view hideToastActivity]; [self.view makeToast:NSLocalizedString(@"other_was_check_device_update", nil)]; }); }else{ dispatch_async(dispatch_get_main_queue(), ^{ [self.view hideToastActivity]; [self.view makeToast:NSLocalizedString(@"update_failed", nil)]; }); } } break; case RET_DO_DEVICE_UPDATE: { NSInteger result = [[parameter valueForKey:@"result"] intValue]; NSInteger value = [[parameter valueForKey:@"value"] intValue]; dispatch_async(dispatch_get_main_queue(), ^{ if(result==1){ self.progressLabel.text = [NSString stringWithFormat:@"%li%%",(long)value];//device update [self.progressMaskView setHidden:NO]; }else if(result==65){ [self.progressMaskView setHidden:YES]; [self.view makeToast:@"升级成功"]; }else{ [self.progressMaskView setHidden:YES]; [self.view makeToast:NSLocalizedString(@"update_failed", nil)]; } }); } break; } } - (void)ack_receiveRemoteMessage:(NSNotification *)notification{ NSDictionary *parameter = [notification userInfo]; int key = [[parameter valueForKey:@"key"] intValue]; int result = [[parameter valueForKey:@"result"] intValue]; switch(key){ case ACK_RET_SET_GPIO_CTL: { dispatch_async(dispatch_get_main_queue(), ^{ if(result==1){ [self.view makeToast:NSLocalizedString(@"device_password_error", nil)]; }else if(result==2){ DLog(@"resend do device update"); NSString *contactId = [[P2PClient sharedClient] callId]; NSString *contactPassword = [[P2PClient sharedClient] callPassword]; [[P2PClient sharedClient] setGpioCtrlWithId:contactId password:contactPassword group:self.lastGroup pin:self.lastPin value:self.lastValue time:self.lastTime]; } }); } break; case ACK_RET_GET_LIGHT_STATE: { dispatch_async(dispatch_get_main_queue(), ^{ if(result==1){ [self.view makeToast:NSLocalizedString(@"device_password_error", nil)]; }else if(result==2){ DLog(@"resend do device update"); NSString *contactId = [[P2PClient sharedClient] callId]; NSString *contactPassword = [[P2PClient sharedClient] callPassword]; [[P2PClient sharedClient] getLightStateWithDeviceId:contactId password:contactPassword]; } }); } break; case ACK_RET_SET_LIGHT_STATE: { dispatch_async(dispatch_get_main_queue(), ^{ if(result==1){ [self.view makeToast:NSLocalizedString(@"device_password_error", nil)]; }else if(result==2){ DLog(@"resend do device update"); NSString *contactId = [[P2PClient sharedClient] callId]; NSString *contactPassword = [[P2PClient sharedClient] callPassword]; if (self.isLightSwitchOn) {//灯正开着 [[P2PClient sharedClient] setLightStateWithDeviceId:contactId password:contactPassword switchState:0];//关灯 }else{ [[P2PClient sharedClient] setLightStateWithDeviceId:contactId password:contactPassword switchState:1];//开灯 } } }); } break; case ACK_RET_GET_DEFENCE_STATE: { if(result==2){ //超时 NSString *callId = [[P2PClient sharedClient] callId]; NSString *callPassword = [[P2PClient sharedClient] callPassword]; [[P2PClient sharedClient]getDefenceState:callId password:callPassword]; } } break; case ACK_RET_SET_NPCSETTINGS_REMOTE_DEFENCE: { if (result == 2) { dispatch_async(dispatch_get_main_queue(), ^{ [self.view makeToast:NSLocalizedString(@"net_exception", nil)]; }); } } break; } } #pragma mark - 监控横屏时,各控件初始化 -(void)initComponentForHorizontalScreen{ CGRect rect = [AppDelegate getScreenSize:NO isHorizontal:YES]; CGFloat width = rect.size.width; _monitorInterfaceW = width; CGFloat height = rect.size.height; if(CURRENT_VERSION<7.0){ height +=20; } _monitorInterfaceH = height; _horizontalScreenH = height; //横屏背景 UIView *fullScreenBgView = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, width, height)]; fullScreenBgView.backgroundColor = XBlack; self.fullScreenBgView = fullScreenBgView; //进入横屏时,响应onDoubleTap //退出横屏时,响应onDoubleTap 暂停 UITapGestureRecognizer *doubleTapG = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onDoubleTap)]; doubleTapG.delegate = self; [doubleTapG setNumberOfTapsRequired:2]; [self.remoteView addGestureRecognizer:doubleTapG]; //进入横屏时,响应onSingleTap //退出横屏时,响应onSingleTap UITapGestureRecognizer *singleTapG = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onSingleTap)]; singleTapG.delegate = self; [singleTapG setNumberOfTapsRequired:1]; [singleTapG requireGestureRecognizerToFail:doubleTapG]; [self.remoteView addGestureRecognizer:singleTapG]; //进入横屏时,响应localLengthPinchToZoom //退出横屏时,不响应localLengthPinchToZoom NSString * plist = [[NSBundle mainBundle] pathForResource:@"Common-Configuration" ofType:@"plist"]; NSDictionary * dic = [NSDictionary dictionaryWithContentsOfFile:plist]; BOOL isSupportZoom = [dic[@"isSupportZoom"] boolValue]; UIPinchGestureRecognizer *pinchGestureRecognizer = [[UIPinchGestureRecognizer alloc] init]; if (!isSupportZoom) {//电子放大与焦距变倍不共存 [_canvasView addGestureRecognizer:pinchGestureRecognizer]; } self.pinchGestureRecognizer = pinchGestureRecognizer; //右边的画质图标 //进入横屏时,显示 //退出横屏时,隐藏 int rightItemCount = 3; //半透明背景 UIView *controllerRightBg = [[UIView alloc] initWithFrame:CGRectMake(5.0, height, CONTROLLER_RIGHT_ITEM_WIDTH, CONTROLLER_RIGHT_ITEM_HEIGHT*rightItemCount)]; controllerRightBg.layer.cornerRadius = 1.0f; [controllerRightBg setAlpha:0.5]; [controllerRightBg setBackgroundColor:XBlack]; self.controllerRightBg = controllerRightBg; [self.view addSubview:controllerRightBg]; [self.controllerRightBg setHidden:YES]; UIView *controllerRight = [[UIView alloc] initWithFrame:CGRectMake(5.0, height, CONTROLLER_RIGHT_ITEM_WIDTH, CONTROLLER_RIGHT_ITEM_HEIGHT*rightItemCount)]; self.controllerRight = controllerRight; [self.view addSubview:controllerRight]; [self.controllerRight setHidden:YES]; //分隔线 for (int i=1; i < rightItemCount; i++) { UIView *lineView = [[UIView alloc] initWithFrame:CGRectMake(0.0, i*CONTROLLER_RIGHT_ITEM_HEIGHT+1.0*(i-1), CONTROLLER_RIGHT_ITEM_WIDTH, 1.0)]; lineView.backgroundColor = XWhite; [controllerRight addSubview:lineView]; } for(int i=0;i scrollView.contentSize.width)?(scrollView.bounds.size.width - scrollView.contentSize.width)/2 : 0.0; CGFloat offsetY = (scrollView.bounds.size.height > scrollView.contentSize.height)?(scrollView.bounds.size.height - scrollView.contentSize.height)/2 : 0.0; self.remoteView.center = CGPointMake(scrollView.contentSize.width/2 + offsetX,scrollView.contentSize.height/2 + offsetY); } } //监控界面缩放 -(void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale{ if(scale>1.0){ if (self.isShowControllerBar) { self.isShowControllerBar = !self.isShowControllerBar; [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:0.2]; [self.controllerRightBg setAlpha:0.0]; [self.controllerRight setAlpha:0.0]; [self.bottomView setAlpha:0.0]; [self.bottomBarView setAlpha:0.0]; [self.customBorderButton setAlpha:0.0]; [self.leftView setAlpha:0.0]; [UIView commitAnimations]; } } if (self.isFullScreen) { if(scale>1.0){ self.isScale = YES; }else{ self.isScale = NO; } } } #pragma mark - 对讲 -(void)onBegin:(TouchButton *)touchButton widthTouches:(NSSet *)touches withEvent:(UIEvent *)event{ DLog(@"onBegin"); [self.pressView setHidden:NO]; } -(void)onCancelled:(TouchButton *)touchButton widthTouches:(NSSet *)touches withEvent:(UIEvent *)event{ DLog(@"onCancelled"); [self.pressView setHidden:YES]; } -(void)onEnded:(TouchButton *)touchButton widthTouches:(NSSet *)touches withEvent:(UIEvent *)event{ DLog(@"onEnded"); [self.pressView setHidden:YES]; } -(void)onMoved:(TouchButton *)touchButton widthTouches:(NSSet *)touches withEvent:(UIEvent *)event{ DLog(@"onMoved"); } #pragma mark - 横屏时的按钮(画质、声音...) -(void)onControllerBtnPress:(id)sender{ UIButton *button = (UIButton*)sender; switch(button.tag){ case CONTROLLER_BTN_TAG_HUNGUP: { if(!self.isReject){ self.isReject = !self.isReject; [self.player p2pStop]; } } break; case CONTROLLER_BTN_TAG_SOUND: { DLog(@"onControllerBtnPress:CONTROLLER_BTN_TAG_SOUND"); } break; case CONTROLLER_BTN_TAG_SCREENSHOT: { [self screenShot]; } break; case CONTROLLER_BTN_TAG_GPIO1_0: { UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"door_bell", nil) message:NSLocalizedString(@"confirm_open", nil) delegate:self cancelButtonTitle:NSLocalizedString(@"cancel", nil) otherButtonTitles:NSLocalizedString(@"ok", nil), nil]; alertView.tag = DOOR_BELLALERT; [alertView show]; } break; case CONTROLLER_BTN_TAG_PRESS_TALK://支持门铃,点按开关说话 { if (self.isTalking) { //竖屏,对讲关闭 UIButton *talkButtonH = (UIButton *)[self.bottomToolHView viewWithTag:TALK_BUTTON_H_TAG]; talkButtonH.selected = NO; //横屏,对讲关闭 [sender setBackgroundImage:[UIImage imageNamed:@"ic_ctl_new_send_audio.png"] forState:UIControlStateNormal]; self.isTalking = NO; [self.pressView setHidden:YES]; }else{ UIButton *talkButtonH = (UIButton *)[self.bottomToolHView viewWithTag:TALK_BUTTON_H_TAG]; //竖屏,对讲打开 talkButtonH.selected = YES; //横屏,对讲打开 [sender setBackgroundImage:[UIImage imageNamed:@"ic_ctl_new_send_audio_p.png"] forState:UIControlStateNormal]; self.isTalking = YES; [self.pressView setHidden:NO]; } } break; case CONTROLLER_BTN_TAG_DEFENCE_LOCK://重新调整监控画面 { NSString *contactId = [[P2PClient sharedClient] callId]; NSString *contactPassword = [[P2PClient sharedClient] callPassword]; if (self.isDefenceOn) { [[P2PClient sharedClient] setRemoteDefenceWithId:contactId password:contactPassword state:SETTING_VALUE_REMOTE_DEFENCE_STATE_OFF]; }else{ [[P2PClient sharedClient] setRemoteDefenceWithId:contactId password:contactPassword state:SETTING_VALUE_REMOTE_DEFENCE_STATE_ON]; } } break; case CONTROLLER_BTN_TAG_HD: { [self.player p2pSetDefinition:GWP2PPTZDefinitionHD];//高清 [self updateRightButtonState:CONTROLLER_BTN_TAG_HD]; } break; case CONTROLLER_BTN_TAG_SD: { [self.player p2pSetDefinition:GWP2PPTZDefinitionSD];//标清 [self updateRightButtonState:CONTROLLER_BTN_TAG_SD]; } break; case CONTROLLER_BTN_TAG_LD: { [self.player p2pSetDefinition:GWP2PPTZDefinitionLD];//流畅 [self updateRightButtonState:CONTROLLER_BTN_TAG_LD]; } break; } } #pragma mark - UIAlertViewDelegate(开门) -(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ if (alertView.tag == XUANDUO_GUANSHUIBENG_ALERT) { //解绑关系弹窗 if ( buttonIndex ==1 ) { [self guanbiShuiBeng]; } }else if(alertView.tag == CAMERA_DEVICE_JIEBANG_ALERT) { //解绑关系弹窗 if ( buttonIndex ==1 ) { [self camerDeviceDelectRelate]; } }else if (alertView.tag == DOOR_BELLALERT){ if (buttonIndex==1) { //GPIO口开锁 int time[8] = {0}; time[0] = -15; time[1] = 6000; time[2] = -1; //记录当前的GPIO设置参数 self.lastGroup = 1; self.lastPin = 0; self.lastValue = 3; self.lastTime = time; NSString *contactId = [[P2PClient sharedClient] callId]; NSString *contactPassword = [[P2PClient sharedClient] callPassword]; [[P2PClient sharedClient] setGpioCtrlWithId:contactId password:contactPassword group:1 pin:0 value:3 time:time]; //透传开锁 [[P2PClient sharedClient] sendCustomCmdWithId:contactId password:contactPassword cmd:@"IPC1anerfa:unlock"]; } }else if (alertView.tag == WEIJIHUO_ALERT){ if (buttonIndex ==0) { //取消 [self stopGLViewVideo]; [Socketsingleton sharedInstance].communiteDelegate=nil; [[Socketsingleton sharedInstance] cutOffSocket]; [self screenShot]; [AppDelegate sharedDefault].canFullScreen = NO; // [self.remoteView releseromotViewSet]; [self setAppTabRoot]; }else if (buttonIndex ==1){ //扫码激活 [self stopGLViewVideo]; ScanViewController*scanVC=[[ScanViewController alloc]init]; scanVC.cameraModel = self.contact ; UINavigationController * nVC = [[UINavigationController alloc]initWithRootViewController:scanVC]; [self presentViewController: nVC animated:YES completion:^{ }]; } }else if (alertView.tag == ALERT_TAG_UPDATE){ if(buttonIndex==1){ //确定固件升级 UIAlertView *alert= [[UIAlertView alloc] initWithTitle:@"提示" message:@"正在升级中,升级过程中摄像头会离线,两分钟后摄像头会自动重连,再点击播放按钮即可。" delegate:self cancelButtonTitle:@"知道了" otherButtonTitles:nil, nil]; alert.tag = ALERT_UPDATE_SURE; [alert show]; //执行更新 [[GWP2PClient sharedClient] performUpdateWithDeviceID:self.contact.cameraId devicePassword:self.contact.cameraPass completionBlock:^(GWP2PClient *client, BOOL success, NSDictionary *dataDictionary) { NSInteger result = [[dataDictionary valueForKey:@"result"] intValue]; NSInteger value = [[dataDictionary valueForKey:@"value"] intValue]; dispatch_async(dispatch_get_main_queue(), ^{ if(result==1){ self.progressLabel.text = [NSString stringWithFormat:@"%li%%",(long)value];//device update [self.progressMaskView setHidden:NO]; }else if(result==65){ [self.progressMaskView setHidden:YES]; [self.view makeToast:@"升级成功"]; }else{ [self.progressMaskView setHidden:YES]; [self.view makeToast:NSLocalizedString(@"update_failed", nil)]; } }); }]; }else{ //取消更新 [[GWP2PClient sharedClient] cancelUpdateWithDeviceID:self.contact.cameraId devicePassword:self.contact.cameraPass completionBlock:^(GWP2PClient *client, BOOL success, NSDictionary *dataDictionary) { }]; } }else if (alertView.tag == ALERT_TAG_UPDATE){ } } #pragma mark-OPENGL 代理 截图 -(void)onScreenShotted:(UIImage *)image{ UIImage *tempImage = [[UIImage alloc] initWithCGImage:image.CGImage]; NSData *imgData = [NSData dataWithData:UIImagePNGRepresentation(tempImage)]; [Utils saveScreenshotFile:imgData]; dispatch_async(dispatch_get_main_queue(), ^{ [self.view makeToast:@"截图成功,请在图库中查看"]; }); } -(void)popLXAdViewWith:(UIImage*)image{ // 关闭pop效果添加按钮 // [_contentView addSubview:_popBtn]; UIImageView *imageV = [[UIImageView alloc]initWithFrame:_shutterView.bounds]; imageV.image = image ; [_shutterView addSubview:imageV]; [LXADViewTool sharedInstance].shadeBackgroundType = ShadeBackgroundTypeSolid; [LXADViewTool sharedInstance].closeButtonType = ButtonPositionTypeRight; [[LXADViewTool sharedInstance] showWithPresentView:_shutterView animated:YES]; AudioServicesPlaySystemSound (1108); [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(closeLXAdView) userInfo:nil repeats:NO]; } - (void)closeLXAdView{ [[LXADViewTool sharedInstance] closeWithBlcok:^{ }]; } #pragma mark - 隐藏监控连接中的UI -(void)hiddenMonitoringUI:(BOOL)isHidden callWithErrorType:(GWP2PCallError)errorType isReCall:(BOOL)isReCall{ if (isHidden) { [self.yProgressView stop]; [self.yProgressView setHidden:YES]; [self.promptButton setEnabled:NO]; [self.promptButton setHidden:YES]; [self.stopBtnH setEnabled:YES]; }else{ if (isReCall) { self.yProgressView.backgroundView.image = LXImageWithImageName(@"monitor_press.png"); [self.yProgressView start]; [self.promptButton setEnabled:NO]; self.stopImageViewH.image = LXImageWithImageName(@"monitor_stop_h.png"); // 禁用 底部栏暂停按钮 [self.stopBtnH setEnabled:NO]; }else{ // self.yProgressView.angle = 0.0f; self.yProgressView.backgroundView.image = LXImageWithImageName(@"ifishCamera_start"); self.stopImageViewH.image = LXImageWithImageName(@"monitor_on_h.png"); [self.yProgressView stop]; [self.promptButton setEnabled:YES]; [self.stopBtnH setEnabled:YES]; } [self.yProgressView setHidden:NO]; [self.promptButton setHidden:NO]; [self.canvasView bringSubviewToFront:self.promptButton]; } } /* GWP2PCallErrorNone = 0, //0无原因 GWP2PCallErrorDesidNotEnable, //1对方的ID 被禁用 GWP2PCallErrorDesidOverDate, //2对方的ID 过期了 GWP2PCallErrorDesidNotAcitve, //3对方的ID 尚未激活 GWP2PCallErrorDesidOffline, //4对方离线 GWP2PCallErrorDesidBusy, //5对方忙线中 GWP2PCallErrorDesidPowerDown, //6对方已关机 GWP2PCallErrorNoHelper, //7没有找到协助人 GWP2PCallErrorHangUp, //8对方已经挂断 GWP2PCallErrorTimeout, //9连接超时 GWP2PCallErrorInterError, //10内部错误 GWP2PCallErrorRingTimeout, //11无人接听 GWP2PCallErrorPwdWrong, //12密码错误(在远程监控时用到密码,在视频通话是不需要) GWP2PCallErrorConnFail, GWP2PCallErrorNotSupport, */ -(NSString *)getCallErrorStringWithErrorType:(GWP2PCallError)errorType{ switch((int)errorType) { case GWP2PCallErrorNone: { return NSLocalizedString(@"id_unknown_error", nil); } break; case GWP2PCallErrorDesidNotEnable: { return NSLocalizedString(@"id_disabled", nil); } break; case GWP2PCallErrorDesidOverDate: { return NSLocalizedString(@"id_overdate", nil); } break; case GWP2PCallErrorDesidNotAcitve: { return NSLocalizedString(@"id_inactived", nil); } break; case GWP2PCallErrorDesidOffline: { return NSLocalizedString(@"id_offline", nil); } break; case GWP2PCallErrorDesidBusy: { return NSLocalizedString(@"id_busy", nil); } break; case GWP2PCallErrorDesidPowerDown: { return NSLocalizedString(@"id_powerdown", nil); } break; case GWP2PCallErrorNoHelper: { return NSLocalizedString(@"id_connect_failed", nil); } break; case GWP2PCallErrorHangUp: { return NSLocalizedString(@"id_hangup", nil); break; } case GWP2PCallErrorTimeout: { return NSLocalizedString(@"id_timeout", nil); } break; case GWP2PCallErrorInterError: { return NSLocalizedString(@"id_internal_error", nil); } break; case GWP2PCallErrorRingTimeout: { return NSLocalizedString(@"id_no_accept", nil); } break; case GWP2PCallErrorPwdWrong: { return NSLocalizedString(@"id_password_error", nil); } break; case GWP2PCallErrorConnFail: { return NSLocalizedString(@"id_connect_failed", nil); } break; case GWP2PCallErrorNotSupport: { return NSLocalizedString(@"id_not_support", nil); } break; default: { return NSLocalizedString(@"id_unknown_error", nil); } break; } } -(void)didHiddenMonitorUIWith:(BOOL)isAfterRender{ if (!isAfterRender) { [self.controllerRightBg setAlpha:0.0]; [self.controllerRight setAlpha:0.0]; [self.bottomView setAlpha:0.0]; [self.bottomBarView setAlpha:0.0]; [self.customBorderButton setAlpha:0.0]; [self.leftView setAlpha:0.0]; [self.focalLengthView setAlpha:0.0]; [self.pressView setAlpha:0.0]; }else{ [self.controllerRightBg setAlpha:0.5]; [self.controllerRight setAlpha:1.0]; [self.bottomView setAlpha:0.5]; [self.bottomBarView setAlpha:1.0]; [self.customBorderButton setAlpha:0.5]; [self.leftView setAlpha:0.5]; [self.focalLengthView setAlpha:1.0]; [self.pressView setAlpha:1.0]; } } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } - (TouchButton *)getControllerButton { TouchButton *button = [TouchButton buttonWithType:UIButtonTypeCustom]; [button setFrame:CGRectMake(0, 0, 50, 38)]; [button setAlpha:0.5]; [button setOpaque:YES]; [button setBackgroundColor:[UIColor darkGrayColor]]; [button.layer setBorderColor:[[UIColor blackColor] CGColor]]; [button.layer setBorderWidth:2.0f]; return button; } /* #pragma mark - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { // Get the new view controller using [segue destinationViewController]. // Pass the selected object to the new view controller. } */ #pragma mark - 设置高清、标清选中 -(void)updateRightButtonState:(NSInteger)tag{ for(UIView *view in self.controllerRight.subviews){ UILabel *labelHD = (UILabel *)[view viewWithTag:CONTROLLER_LABEL_TAG_HD]; if (labelHD) { labelHD.textColor = XWhite; } UILabel *labelSD = (UILabel *)[view viewWithTag:CONTROLLER_LABEL_TAG_SD]; if (labelSD) { labelSD.textColor = XWhite; } UILabel *labelLD = (UILabel *)[view viewWithTag:CONTROLLER_LABEL_TAG_LD]; if (labelLD) { labelLD.textColor = XWhite; } } UIButton *button = (UIButton*)[self.controllerRight viewWithTag:tag]; //重新调整监控画面 UIButton *rButton = (UIButton *)[self.bottomBarView viewWithTag:CONTROLLER_BTN_TAG_RESOLUTION]; if (tag == CONTROLLER_BTN_TAG_HD) { UILabel *label = (UILabel *)[button viewWithTag:CONTROLLER_LABEL_TAG_HD]; label.textColor = XBlue; [rButton setTitle:NSLocalizedString(@"高清", nil) forState:UIControlStateNormal]; }else if(tag == CONTROLLER_BTN_TAG_SD){ UILabel *label = (UILabel *)[button viewWithTag:CONTROLLER_LABEL_TAG_SD]; label.textColor = XBlue; [rButton setTitle:NSLocalizedString(@"标清", nil) forState:UIControlStateNormal]; }else if (tag == CONTROLLER_BTN_TAG_LD){ UILabel *label = (UILabel *)[button viewWithTag:CONTROLLER_LABEL_TAG_LD]; label.textColor = XBlue; [rButton setTitle:NSLocalizedString(@"流畅", nil) forState:UIControlStateNormal]; } [self didHiddenResolutionInterface]; } #pragma mark - 自带方向滑动 //上滑动 - (void)swipeUp:(id)sender { [self.player p2pTurnDirection:GWP2PPTZDirectionUp]; } //下滑 - (void)swipeDown:(id)sender { [self.player p2pTurnDirection:GWP2PPTZDirectionDown]; } //左滑 - (void)swipeLeft:(id)sender { [self.player p2pTurnDirection:GWP2PPTZDirectionLeft]; } //右滑 - (void)swipeRight:(id)sender { [self.player p2pTurnDirection:GWP2PPTZDirectionRight]; } //竖屏幕 时 -(void)dismissMidToolView{ __weak typeof(self) wself = self; if (wself.stopBtnH.hidden == YES) { [UIView animateWithDuration:0.5 animations:^{ CGFloat midtH=wself.canvasView.frame.size.height/5; wself.midToolHView.frame = CGRectMake(0.0, CGRectGetMaxY(wself.canvasView.frame) - midtH, kScreenSize.width, midtH); wself.stopBtnH.hidden = NO; wself.switchScreenButtonH.hidden = NO; wself.isShowVToolBar = YES; } completion:^(BOOL finished) { [NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(dismissMidToolView) userInfo:nil repeats:NO]; }]; }else{ [UIView animateWithDuration:0.5 animations:^{ wself.midToolHView.frame = CGRectMake(0.0, CGRectGetMaxY(wself.canvasView.frame), kScreenSize.width, 0); wself.stopBtnH.hidden = YES; wself.switchScreenButtonH.hidden = YES; wself.isShowVToolBar = NO; } completion:^(BOOL finished) { }]; } } -(void)onSingleTap{ if (!self.isFullScreen) { //竖屏时点击屏幕 弹出工具栏打开下面方法 5s 自动消失 if (self.isShowVToolBar) { return; } [self dismissMidToolView]; }else{ if (!self.isShowControllerBar) { [self hidHbottomView]; } } } #pragma mark - 隐藏横屏底部控件 -(void)hidHbottomView{ if (self.isShowControllerBar) { self.isShowControllerBar = !self.isShowControllerBar; [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:0.2]; [self.controllerRightBg setAlpha:0.0];//重新调整监控画面 [self.controllerRight setAlpha:0.0]; [self.bottomView setAlpha:0.0];//重新调整监控画面 [self.bottomBarView setAlpha:0.0];//重新调整监控画面 [self.customBorderButton setAlpha:0.0]; [self.leftView setAlpha:0.0]; [self.focalLengthView setAlpha:0.0]; [UIView commitAnimations]; }else{ self.isShowControllerBar = !self.isShowControllerBar; [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:0.2]; [self.controllerRightBg setAlpha:0.5];//重新调整监控画面 [self.controllerRight setAlpha:1.0];//重新调整监控画面 [self.bottomView setAlpha:0.5];//重新调整监控画面 [self.bottomBarView setAlpha:1.0];//重新调整监控画面 [self.customBorderButton setAlpha:0.5]; [self.leftView setAlpha:0.5]; [self.focalLengthView setAlpha:1.0]; [UIView commitAnimations]; [self hideBootommViewAfterSecondes]; } //重新调整监控画面 [self didHiddenResolutionInterface]; } -(void)onDoubleTap{ if (!self.isFullScreen) { // if (_isStop == NO) { // [self hiddenMonitoringUI:NO callErrorInfo:nil isReCall:NO]; // _isStop = YES; // } // // [self stopGLViewVideo]; return; } if (self.isScale) { //处于电子放大时,不往下执行 return; } BOOL is16B9 = [[P2PClient sharedClient] is16B9]; if(!is16B9){ //渲染画面4:3 CGRect rect = [AppDelegate getScreenSize:NO isHorizontal:YES]; CGFloat width = rect.size.width; CGFloat height = rect.size.height; if(CURRENT_VERSION<7.0){ height +=20; } if (self.isFullScreen4B3) { self.isFullScreen4B3 = !self.isFullScreen4B3; [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:0.2]; CGAffineTransform transform; transform = CGAffineTransformMakeScale(1.0, 1.0f); self.remoteView.transform = transform; [UIView commitAnimations]; }else{ self.isFullScreen4B3 = !self.isFullScreen4B3; [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:0.2]; if (CURRENT_VERSION>=8.0) { CGAffineTransform transform = CGAffineTransformMakeScale(height/(width*4/3),1.0f); self.remoteView.transform = transform; }else{ CGAffineTransform transform = CGAffineTransformMakeScale(width/(height*4/3),1.0f); self.remoteView.transform = transform; } [UIView commitAnimations]; } } } #pragma mark- 暂停 挂断 -(void)stopGLViewVideo{ [self.player p2pStop]; } #pragma mark - 计算文本的尺寸 -(CGSize)sizeWithString:(NSString*)string font:(UIFont*)font maxWidth:(CGFloat)maxWidth{ if ([UIDevice currentDevice].systemVersion.floatValue < 7.0) { CGSize sizeToFit = [string sizeWithFont:font constrainedToSize:CGSizeMake(maxWidth, MAXFLOAT)]; return sizeToFit; }else{ NSDictionary *dict = @{NSFontAttributeName : font}; CGRect rectToFit = [string boundingRectWithSize:CGSizeMake(maxWidth, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin attributes:dict context:nil]; return rectToFit.size; } } //rtsp监控界面弹出修改 #pragma mark - 渲染监控界面 -(void)monitorStartRender:(NSNotification*)notification{ //监控横屏rect CGFloat height = _monitorInterfaceH; BOOL is16B9 = [[P2PClient sharedClient] is16B9]; BOOL is960P = [[P2PClient sharedClient] is960P]; //右边的画质图标 //进入横屏时,显示 //退出横屏时,隐藏 UIView *lineView1 = self.controllerRight.subviews[0]; UIButton *buttonHD = (UIButton *)[self.controllerRight viewWithTag:CONTROLLER_BTN_TAG_HD]; UIButton *buttonSD = (UIButton *)[self.controllerRight viewWithTag:CONTROLLER_BTN_TAG_SD]; UILabel *labelSD = (UILabel *)[buttonSD viewWithTag:CONTROLLER_LABEL_TAG_SD]; UIButton *buttonLD = (UIButton *)[self.controllerRight viewWithTag:CONTROLLER_BTN_TAG_LD]; UILabel *labelLD = (UILabel *)[buttonLD viewWithTag:CONTROLLER_LABEL_TAG_LD]; UILabel *labelHD = (UILabel *)[buttonLD viewWithTag:CONTROLLER_LABEL_TAG_HD]; if(is16B9 || is960P){//支持高清 //半透明背景 self.controllerRightBg.frame = CGRectMake(5.0, height, CONTROLLER_RIGHT_ITEM_WIDTH, CONTROLLER_RIGHT_ITEM_HEIGHT*3); //分隔线 [lineView1 setHidden:NO]; //高清按钮 [buttonHD setHidden:NO]; //标清文本 labelSD.textColor = XWhite; //流畅文本 labelLD.textColor = XWhite; //高清文本 labelHD.textColor = XBlue; }else{//不支持高清 self.controllerRightBg.frame = CGRectMake(5.0, height, CONTROLLER_RIGHT_ITEM_WIDTH, CONTROLLER_RIGHT_ITEM_HEIGHT*2); //分隔线 [lineView1 setHidden:YES]; //高清按钮 [buttonHD setHidden:YES]; //标清文本 labelSD.textColor = XWhite; //流畅文本 labelLD.textColor = XBlue; } UIButton *resolutionButton = (UIButton *)[self.bottomBarView viewWithTag:CONTROLLER_BTN_TAG_RESOLUTION]; if(is16B9 || is960P){//支持高清 [resolutionButton setTitle:NSLocalizedString(@"HD", nil) forState:UIControlStateNormal]; }else{//不支持高清 [resolutionButton setTitle:NSLocalizedString(@"LD", nil) forState:UIControlStateNormal]; } //开始渲染 self.isReject = NO; //根据访客密码监控、门铃监控来重新布局controllBar上的按钮 [self reLayoutButtonInControlBar]; [self doOperationsAfterMonitorStartRender]; } #pragma mark - 改变焦距 -(void)btnClickToChangeFocalLength:(id)sender{ UIView *view = (UIView *)sender; if (view.tag == FocalLength_Elongation_btnTag) { //焦距变长 BYTE cmdData[5] = {0}; cmdData[0] = 0x05; fgSendUserData(9, 1, cmdData, sizeof(cmdData)); }else if (view.tag == FocalLength_Shorten_btnTag){ //焦距变短 BYTE cmdData[5] = {0}; cmdData[0] = 0x15; fgSendUserData(9, 1, cmdData, sizeof(cmdData)); }else{ UISlider *focalLengthSlider = (UISlider *)view; if (focalLengthSlider.value < 7.5) { //焦距变长 BYTE cmdData[5] = {0}; cmdData[0] = 0x05; fgSendUserData(9, 1, cmdData, sizeof(cmdData)); }else{ //焦距变短 BYTE cmdData[5] = {0}; cmdData[0] = 0x15; fgSendUserData(9, 1, cmdData, sizeof(cmdData)); } focalLengthSlider.value = 7.5; } } #pragma mark - 焦距变倍 -(void)localLengthPinchToZoom:(id)sender { if (!self.isFullScreen) { return; } if([(UIPinchGestureRecognizer*)sender state] == UIGestureRecognizerStateEnded) { if ([(UIPinchGestureRecognizer*)sender scale] > 1.0) { BYTE cmdData[5] = {0}; cmdData[0] = 0x05; fgSendUserData(9, 2, cmdData, sizeof(cmdData)); }else{ BYTE cmdData[5] = {0}; cmdData[0] = 0x15; fgSendUserData(9, 2, cmdData, sizeof(cmdData)); } } } #pragma mark - 监控开始渲染后,此处执行相关操作 -(void)doOperationsAfterMonitorStartRender{//rtsp监控界面弹出修改 /* *1. 应该放在监控准备就绪之后(即渲染之后) */ //[[PAIOUnit sharedUnit] setMuteAudio:YES]; // [[PAIOUnit sharedUnit] setSpeckState:YES]; //放在渲染之后 if([AppDelegate sharedDefault].isDoorBellAlarm){//门铃推送,点按开关说话 self.isTalking = YES; [self.pressView setHidden:NO]; // [[PAIOUnit sharedUnit] setSpeckState:NO]; }else{ self.isTalking = NO; [self.pressView setHidden:YES]; // [[PAIOUnit sharedUnit] setSpeckState:YES]; } NSString *callId = [[P2PClient sharedClient] callId]; NSString *callPassword = [[P2PClient sharedClient] callPassword]; [[P2PClient sharedClient]getDefenceState:callId password:callPassword]; //判断设备是否支持变倍变焦(38) [[P2PClient sharedClient] getNpcSettingsWithId:callId password:callPassword]; } #pragma mark - 竖屏时,显示状态栏 -(BOOL)prefersStatusBarHidden { return NO; } #pragma mark - 屏幕Autorotate -(BOOL)shouldAutorotate{ return YES; } #pragma mark 屏幕支持的旋转方向 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interface { return (interface == UIInterfaceOrientationPortrait || interface == UIInterfaceOrientationLandscapeRight); } // #ifdef IOS6 - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation { return UIInterfaceOrientationLandscapeRight; } - (BOOL)shouldAutorotate { return NO; } - (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskLandscapeRight; } #endif // #pragma mark 支持哪些方向 -(UIInterfaceOrientationMask)supportedInterfaceOrientations{ if (_isCanAutoOrientation) { return UIInterfaceOrientationMaskPortrait|UIInterfaceOrientationMaskLandscapeRight; } return UIInterfaceOrientationMaskPortrait; } #pragma mark 一开始希望的屏幕方向 -(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation{ return UIInterfaceOrientationPortrait; } #pragma mark - 屏幕旋转 -(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { if (toInterfaceOrientation == UIInterfaceOrientationPortrait) { [self quitFullController]; } else if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft) { } else if (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) { [self enterFullController]; } } #pragma mark 屏幕旋转(退出全屏) -(void)quitFullController{ if (self.scrollView){ [self.scrollView setZoomScale:1.0]; } self.isFullScreen = NO; [[UIApplication sharedApplication] setStatusBarHidden:NO]; self.navigationController.navigationBar.hidden = NO; self.navigationController.navigationBar.translucent = NO; //隐藏横屏里的控件 [self.controllerRightBg setHidden:YES]; [self.controllerRight setHidden:YES]; [self.bottomView setHidden:YES]; [self.bottomBarView setHidden:YES]; [self.customBorderButton setHidden:YES]; [self.leftView setHidden:YES]; if (self.isSupportLightSwitch) { [self.lightButton setHidden:YES]; } if (self.isSupportFocalLength) { [self.focalLengthView setHidden:YES]; } //显示竖屏里的控件 //[self.topBar setHidden:NO]; [self.midToolHView setHidden:NO]; [self.bottomToolHView setHidden:NO]; [self.segControl setHidden:NO]; [self.fishControlView setHidden:NO]; //视频监控连接中的背景图片 //进入竖屏时,调整frame self.canvasView.frame = self.canvasframe; //视频监控连接中的背景图片 NSString *filePath = [Utils getHeaderFilePathWithId:[[P2PClient sharedClient] callId]]; UIImage *headImg = [UIImage imageWithContentsOfFile:filePath]; if(headImg==nil){ headImg = [UIImage imageNamed:@"ic_header.png"]; } self.canvasView.layer.contents = (id)headImg.CGImage; self.remoteView.frame = CGRectMake(0.0, 0.0, self.canvasframe.size.width, self.canvasframe.size.height); NSString * plist = [[NSBundle mainBundle] pathForResource:@"Common-Configuration" ofType:@"plist"]; NSDictionary * dic = [NSDictionary dictionaryWithContentsOfFile:plist]; BOOL isSupportZoom = [dic[@"isSupportZoom"] boolValue]; if (isSupportZoom) { //退出全屏时,要将remoteView添加回到canvasView if (self.remoteView.superview) { [self.remoteView removeFromSuperview]; } //监控界面缩放 if (self.scrollView){ if (self.scrollView.superview) { [self.scrollView removeFromSuperview]; } _scrollView = nil; } [self.canvasView addSubview:self.remoteView]; } //视频监控连接中的文字提示,以及旋转 //进入横屏时,调整frame self.promptButton.frame = CGRectMake(0.0, 0.0, self.canvasView.frame.size.width, self.canvasView.frame.size.height); //上面的canvasView重新add了remoteView [self.canvasView bringSubviewToFront:self.promptButton]; self.directionView.center=self.canvasView.center; [self.canvasView bringSubviewToFront:self.directionView]; //旋转图片 CGFloat tipHeight = LOADINGPRESSVIEW_WIDTH_HEIGHT; self.yProgressView.frame = CGRectMake((self.canvasView.frame.size.width-LOADINGPRESSVIEW_WIDTH_HEIGHT)/2, (self.canvasView.frame.size.height-tipHeight)/2, LOADINGPRESSVIEW_WIDTH_HEIGHT, LOADINGPRESSVIEW_WIDTH_HEIGHT); //左边的按住说话弹出的声音图标 //退出横屏时,调整frame self.pressView.frame = CGRectMake(10, self.canvasframe.size.height+NAVIGATION_BAR_HEIGHT-PRESS_LAYOUT_WIDTH_AND_HEIGHT, PRESS_LAYOUT_WIDTH_AND_HEIGHT/2, PRESS_LAYOUT_WIDTH_AND_HEIGHT); } #pragma mark - 屏幕旋转(进入全屏) -(void)enterFullController{ //ios 9 self.isFullScreen = YES; [[UIApplication sharedApplication] setStatusBarHidden:YES]; //隐藏竖屏里的控件 [self.midToolHView setHidden:YES]; [self.segControl setHidden:YES]; [self.bottomToolHView setHidden:YES]; [self.fishControlView setHidden:YES]; //显示横屏里的控件 [self.controllerRightBg setHidden:NO]; [self.controllerRight setHidden:NO]; [self.bottomView setHidden:NO]; [self.bottomBarView setHidden:NO]; [self.customBorderButton setHidden:NO]; [self.leftView setHidden:NO]; if (self.isSupportLightSwitch) { [self.lightButton setHidden:NO]; } if (self.isSupportFocalLength) { [self.focalLengthView setHidden:YES];//横屏也隐藏变焦控件 } //监控横屏rect CGFloat width = _monitorInterfaceW; CGFloat height = _monitorInterfaceH; //视频监控连接中的背景图片 //进入横屏时,调整frame self.canvasView.frame = CGRectMake(0.0, 0.0, width, height); self.canvasView.layer.contents = (id)self.fullScreenBgView; //视频监控连接中的文字提示,以及旋转 //进入横屏时,调整frame self.promptButton.frame = self.canvasView.frame; //旋转图片 CGFloat tipHeight = LOADINGPRESSVIEW_WIDTH_HEIGHT; self.yProgressView.frame = CGRectMake((width-LOADINGPRESSVIEW_WIDTH_HEIGHT)/2, (height-tipHeight)/2, LOADINGPRESSVIEW_WIDTH_HEIGHT, LOADINGPRESSVIEW_WIDTH_HEIGHT); //进入横屏,修改remoteView的frame BOOL is16B9 = [[P2PClient sharedClient] is16B9]; if(is16B9){ CGFloat finalWidth = height*16/9; CGFloat finalHeight = height; if(finalWidth>width){ finalWidth = width; finalHeight = width*9/16; }else{ finalWidth = height*16/9; finalHeight = height; } self.remoteView.frame = CGRectMake((width-finalWidth)/2, (height-finalHeight)/2, finalWidth, finalHeight); }else{ self.remoteView.frame = CGRectMake((width-height*4/3)/2, 0, height*4/3, height); } /* *1. 进入全屏时,创建一个缩放控件 *2. 将remoteView添加到scrollView上面(注意,退出全屏时,要将remoteView添加回到canvasView) */ NSString * plist = [[NSBundle mainBundle] pathForResource:@"Common-Configuration" ofType:@"plist"]; NSDictionary * dic = [NSDictionary dictionaryWithContentsOfFile:plist]; BOOL isSupportZoom = [dic[@"isSupportZoom"] boolValue]; if (isSupportZoom) { UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, width, height)]; scrollView.multipleTouchEnabled = YES; scrollView.minimumZoomScale = 1.0; scrollView.maximumZoomScale = 4.0; scrollView.delegate = self; scrollView.backgroundColor = [UIColor clearColor]; if (self.remoteView.superview) { [self.remoteView removeFromSuperview]; } [scrollView addSubview:self.remoteView]; [self.canvasView addSubview:scrollView]; self.scrollView = scrollView; } //进入横屏,修改lightButton和progressView的frame self.progressView.frame = CGRectMake(self.remoteView.frame.size.width-30.0-20.0, (self.remoteView.frame.size.height-30.0)/2, 30.0, 30.0); self.lightButton.frame = CGRectMake(self.remoteView.frame.size.width-30.0-20.0, (self.remoteView.frame.size.height-30.0)/2, 30.0, 30.0); //进入横屏,修改焦距控件的frame //宽、高 CGFloat focalLengthView_w = 40.0; CGFloat focalLengthView_h = 180.0; //焦距控件与屏幕右边框的间距 CGFloat space_FocalLView_Screen = (width - self.remoteView.frame.size.width)/2+20+focalLengthView_w; self.focalLengthView.frame = CGRectMake(width-space_FocalLView_Screen, height-self.bottomBarView.frame.size.height-20.0-focalLengthView_h, focalLengthView_w, focalLengthView_h); //左边的按住说话弹出的声音图标 //进入横屏时,调整frame self.pressView.frame = CGRectMake(10, height-PRESS_LAYOUT_WIDTH_AND_HEIGHT-BOTTOM_BAR_HEIGHT, PRESS_LAYOUT_WIDTH_AND_HEIGHT/2, PRESS_LAYOUT_WIDTH_AND_HEIGHT); self.directionView.center=self.canvasView.center; [self.canvasView bringSubviewToFront:self.directionView]; //设置横屏底部工具栏5秒隐藏 [self hideBootommViewAfterSecondes]; } -(void)hideBootommViewAfterSecondes{ [NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(dismissHbtoomToolView) userInfo:nil repeats:NO]; } -(void)dismissHbtoomToolView{ if (self.isShowControllerBar) { [self hidHbottomView]; } } #pragma mark - 爱鱼控制器分底部协议****************************************************# -(void)didselectCollectionIex:(NSIndexPath *)indexPath withData:(DeviceModel *)dmodel addMassglength:(NSUInteger)bufferlenth{ NSLog(@"indexPath%ld",(long)indexPath.row); if (indexPath.row ==0) { //品牌 [self stopGLViewVideo]; usleep(50*1000); SongBaoViewController*brand=[[SongBaoViewController alloc]init]; brand.brandIntroduce=dmodel.brandIntroduce; [self.navigationController pushViewController:brand animated:YES]; }else if (indexPath.row ==1){ }else if (indexPath.row ==2){ //设置 [self stopGLViewVideo]; if ([dmodel.type isEqualToString:DECICE_TYPE_THREETMP]) { _rusunSet = [[RusunHaveHeateSetViewController alloc] init]; _rusunSet.currentdevice = dmodel; usleep(50*1000); [self.navigationController pushViewController:_rusunSet animated:YES]; }else if ([dmodel.type isEqualToString:DECICE_TYPE_RUSUN2A]){ _rusun84Set = [[RunSun84CHSetViewController alloc] init]; _rusun84Set.currentdevice = dmodel; usleep(50*1000); [self.navigationController pushViewController:_rusun84Set animated:YES]; }else if ([dmodel.type isEqualToString:DECICE_TYPE_RUIMEI]){ _ruimeiSet = [[RuiMeiSetViewController alloc] init]; _ruimeiSet.currentdevice = dmodel; NSString*stateString=[self.fishControlView.ruiMeiBack.customModel substringWithRange:NSMakeRange(2, 2)]; if ([stateString isEqualToString:@"01"]) { _ruimeiSet.customModeOn=YES; }else{ _ruimeiSet.customModeOn=NO; } usleep(50*1000); [self.navigationController pushViewController:_ruimeiSet animated:YES]; }else if ([dmodel.type isEqualToString:DECICE_TYPE_JUNENGCC]){ }else if ([dmodel.type isEqualToString:DECICE_TYPE_SONGNEWBD]){ }else{ int controlAmount=[dmodel.controlAmount intValue]; switch (controlAmount) { case IFISH_DEVICE_CONTROLAMOUNT0: { _noncontrolnonetimerVC = [[NoneControlNonetimerViewController alloc] init]; _noncontrolnonetimerVC.currentdevice = dmodel; usleep(50*1000); [self.navigationController pushViewController:_noncontrolnonetimerVC animated:YES]; } break; case IFISH_DEVICE_CONTROLAMOUNT2: { int timerAmount= [dmodel.timerAmount intValue]; if (bufferlenth == IFISH_BACKMASGTYAP57) { //57 字节 if (timerAmount == 0) { //两控零定时器 _twocontrolNonetimerVC = [[TwoControlnoneTimerViewController alloc] init]; _twocontrolNonetimerVC.currentdevice = dmodel; usleep(50*1000); [self.navigationController pushViewController:_twocontrolNonetimerVC animated:YES]; }else if (timerAmount == 4){ //两控四定时器 _twoControlSetTimeVC = [[TwoControlSetTimeViewController alloc] init]; _twoControlSetTimeVC.currentdevice = dmodel; usleep(50*1000); [self.navigationController pushViewController:_twoControlSetTimeVC animated:YES]; } }else if (bufferlenth == IFISH_BACKMASGTYAP99){ //两控四定时器99 字节 _twoControlNinetyninebiteVC = [[TwoControlNinetyninebiteViewController alloc] init]; _twoControlNinetyninebiteVC.currentdevice = dmodel; usleep(50*1000); [self.navigationController pushViewController:_twoControlNinetyninebiteVC animated:YES]; } } break; case IFISH_DEVICE_CONTROLAMOUNT3: { _SetTimeVC = [[SetTimeController alloc] init]; _SetTimeVC.currentdevice = dmodel; usleep(50*1000); [self.navigationController pushViewController:_SetTimeVC animated:YES]; } break; case IFISH_DEVICE_CONTROLAMOUNT4: { int timerAmount= [dmodel.timerAmount intValue]; if (timerAmount ==8) { _forControlSetVC = [[FourControlSetViewController alloc] init]; _forControlSetVC.currentdevice = dmodel; usleep(50*1000); [self.navigationController pushViewController:_forControlSetVC animated:YES]; }else if (timerAmount ==6){ _keLiAiSetVc = [[KeLiAiSetViewController alloc] init]; _keLiAiSetVc.currentdevice = dmodel; usleep(50*1000); [self.navigationController pushViewController: _keLiAiSetVc animated:YES]; } } break; case IFISH_DEVICE_CONTROLAMOUNT5: { if (bufferlenth == IFISH_BACKMASGTYAP73) { _xuToSetVC= [[XuToSetViewController alloc] init]; _xuToSetVC.currentdevice = dmodel; usleep(50*1000); [self.navigationController pushViewController:_xuToSetVC animated:YES]; } } break; case IFISH_DEVICE_CONTROLAMOUNT6: { } break; case IFISH_DEVICE_CONTROLAMOUNT8: { //松诺设置按钮 if (bufferlenth == IFISH_BACKMASGTYAP128) { _songNuoSetVC = [[SongNuoSetViewController alloc] init]; _songNuoSetVC.currentdevice = dmodel; usleep(50*1000); [self.navigationController pushViewController:_songNuoSetVC animated:YES]; } } break; default: break; } } } } -(void)setTimeVCReloadDatawithTimerArr:(NSArray*) timerArr withData:(DeviceModel *)dmodel addMassglength:(NSUInteger) bufferlenth { // 可以去掉最初 使用属性控制器 实现 两个手机 绑定统一设备(分享出去)控制其中一个手机设置界面的按钮时 另一个手机的设置界面也会同步更新 下一步改进放入设置界面 if ([dmodel.type isEqualToString:DECICE_TYPE_THREETMP]) { _rusunSet.timeArr = timerArr; [_rusunSet.indicatorView stopAnimating]; [_rusunSet.tableView reloadData]; }else if ([dmodel.type isEqualToString:DECICE_TYPE_RUSUN2A]){ _rusun84Set.timeArr = timerArr; [_rusun84Set.indicatorView stopAnimating]; [_rusun84Set.tableView reloadData]; }else if ([dmodel.type isEqualToString:DECICE_TYPE_RUIMEI]){ _ruimeiSet.timeArr = timerArr; [_ruimeiSet.indicatorView stopAnimating]; NSString*stateString=[self.fishControlView.ruiMeiBack.customModel substringWithRange:NSMakeRange(2, 2)]; if ([stateString isEqualToString:@"01"]) { _ruimeiSet.customModeOn=YES; }else{ _ruimeiSet.customModeOn=NO; } [_ruimeiSet.tableView reloadData]; }else if ([dmodel.type isEqualToString:DECICE_TYPE_JUNENGCC]){ }else if ([dmodel.type isEqualToString:DECICE_TYPE_SONGNEWBD]){ }else{ int controlAmount=[dmodel.controlAmount intValue]; switch (controlAmount) { case IFISH_DEVICE_CONTROLAMOUNT0: { _noncontrolnonetimerVC.timeArr = timerArr; [_noncontrolnonetimerVC.indicatorView stopAnimating]; [_noncontrolnonetimerVC.tableView reloadData]; } break; case IFISH_DEVICE_CONTROLAMOUNT2: { int timerAmount= [dmodel.timerAmount intValue]; if (bufferlenth == IFISH_BACKMASGTYAP57) { //57 字节 if (timerAmount == 0) { //两控零定时器 _twocontrolNonetimerVC.timeArr = timerArr; [_twocontrolNonetimerVC.indicatorView stopAnimating]; [_twocontrolNonetimerVC.tableView reloadData]; }else if (timerAmount == 4){ //两控四定时器 _twoControlSetTimeVC.timeArr = timerArr; [_twoControlSetTimeVC.indicatorView stopAnimating]; [_twoControlSetTimeVC.tableView reloadData]; } }else if (bufferlenth == IFISH_BACKMASGTYAP99){ //两控四定时器99 字节 _twoControlNinetyninebiteVC.timeArr = timerArr; [_twoControlNinetyninebiteVC.indicatorView stopAnimating]; [_twoControlNinetyninebiteVC.tableView reloadData]; } } break; case IFISH_DEVICE_CONTROLAMOUNT3: { _SetTimeVC.timeArr = timerArr; [_SetTimeVC.indicatorView stopAnimating]; [_SetTimeVC.tableView reloadData]; } break; case IFISH_DEVICE_CONTROLAMOUNT4: { int timerAmount= [dmodel.timerAmount intValue]; if (timerAmount ==8) { _forControlSetVC.timeArr = timerArr; [_forControlSetVC.indicatorView stopAnimating]; [_forControlSetVC.tableView reloadData]; }else if (timerAmount ==6){ _keLiAiSetVc.timeArr = timerArr; [_keLiAiSetVc.indicatorView stopAnimating]; [_keLiAiSetVc.tableView reloadData]; } } break; case IFISH_DEVICE_CONTROLAMOUNT5: { if (bufferlenth == IFISH_BACKMASGTYAP73){ _xuToSetVC.timeArr = timerArr; [_xuToSetVC.indicatorView stopAnimating]; [_xuToSetVC.tableView reloadData]; } } break; case IFISH_DEVICE_CONTROLAMOUNT6: { } break; case IFISH_DEVICE_CONTROLAMOUNT8: { if (bufferlenth == IFISH_BACKMASGTYAP128){ _songNuoSetVC.timeArr = timerArr; [_songNuoSetVC.indicatorView stopAnimating]; [_songNuoSetVC.tableView reloadData]; } } break; default: break; } } } -(void)cameraBindDeviceSuccess{ } -(void)noCanuserDevicePush{ if ([self.player isPlaying]) { [self stopGLViewVideo]; } formLogIn = NO; isfromCameraView = YES; [AppDelegate sharedDefault].canFullScreen = NO; //再次sleep 防止音频内存泄漏问题; usleep(50*1000); IfishBindDeviceSelectViewController *connectVC=[[IfishBindDeviceSelectViewController alloc]init]; [self.navigationController pushViewController:connectVC animated:YES]; } -(void)didselectXuanduo2SetttngWithData:(DeviceModel *)dmodel andBackModel:(Xuanduo2Model *)backmodel { if ([dmodel.type isEqualToString:DECICE_TYPE_XUANDUO4F]||[dmodel.type isEqualToString:DECICE_TYPE_XUANDUO5F]) { XuanduoSettingController *setVC = [[XuanduoSettingController alloc] init]; setVC.currentdevice = dmodel; setVC.dataModel = backmodel; usleep(50*1000); [self.navigationController pushViewController:setVC animated:YES]; } else { Xuanduo2SettingController *setVC = [[Xuanduo2SettingController alloc] init]; setVC.currentdevice = dmodel; setVC.dataModel = backmodel; usleep(50*1000); [self.navigationController pushViewController:setVC animated:YES]; } } //炫多 -(void)selectXuToAtIndex:(NSIndexPath*)index withbackModel:(XutoBackMsgModel *)backmodel{ //XUANDUO_GUANSHUIBENG_ALERT manulswitchMSModel*manulModel=[[manulswitchMSModel alloc]init]; [[Socketsingleton sharedInstance] setSoketLightDataWith:manulModel]; NSString*switchString=manulModel.description; if (index.row ==7 ) { NSString*stateString=[backmodel.waterpump substringWithRange:NSMakeRange(2, 2)]; if ([stateString isEqualToString:@"01"]) { UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@"提示" message:@"确认关闭水泵?" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil]; alert.tag = XUANDUO_GUANSHUIBENG_ALERT; [alert show]; }else{ //开 manulModel.lightNumber = @"05"; manulModel.switchBtn = @"01"; manulModel.crc16Str = @"0000"; NSString*switchString2=[NSString stringWithFormat:@"%@%@%@%@",switchString,manulModel.lightNumber,manulModel.switchBtn,manulModel.crc16Str]; NSData*manulData=[dataContorl stringToHexData:switchString2]; [[Socketsingleton sharedInstance] soketWriteData:manulData]; } }else if (index.row == 8){ [self showWenDuPic]; [self jiaReMianQue]; } } //关闭水泵 -(void)guanbiShuiBeng{ //manulswitchMSModel 和摄像头sdk 中的类重名报错 //[self.bottomFishHView makeToastActivity:CSToastPositionCenter]; XuToLightModel*manulModel=[[XuToLightModel alloc]init]; [[Socketsingleton sharedInstance] setXuToSoketLightDataWith:manulModel]; NSString*switchString=manulModel.description; //开 manulModel.lightNumber = @"05"; manulModel.switchBtn = @"00"; manulModel.crc16Str = @"0000"; NSString*switchString2=[NSString stringWithFormat:@"%@%@%@%@",switchString,manulModel.lightNumber,manulModel.switchBtn,manulModel.crc16Str]; NSData*manulData=[dataContorl stringToHexData:switchString2]; [[Socketsingleton sharedInstance] soketWriteData:manulData]; } -(void)jiaReMianQue{ XutoBackMsgModel*backmodel=[[DataCenter defaultDtacenter]valueForKey:@"xutoBackInfo"]; UInt64 mac=[dataContorl hexToTen:backmodel.heatTemperature]; NSLog(@"%llu",mac); //float TPlabel=mac/10+(mac%10)*0.1; [self setMianQueueWithUint64:mac]; } #pragma mark - 确定加热棒温度 -(void)sureBtnClick:(UIButton *)btn{ NSLog(@"%@******** _wenduPicview.picViewResultString",_wenduPicview.picViewResultString); if (_wenduPicview.picViewResultString ==nil) { [_wenduPicview removeFromSuperview]; }else{ JiaReWenDuModel *model=[[JiaReWenDuModel alloc] init]; [[Socketsingleton sharedInstance] setXuToJiaReBangDataWith:model]; int intlowString = [_wenduPicview.picViewResultString intValue]; int newIntlowString=intlowString*10; NSLog(@"%d******** newIntlowString",newIntlowString); // 转四位16进制 model.JiaReWenDu=[dataContorl tpIntStringToFourHex:newIntlowString]; model.crc16Code =@"0000"; NSString * hexstring=[NSString stringWithFormat:@"%@%@%@",model.description,model.JiaReWenDu,model.crc16Code]; NSData*data=[dataContorl stringToHexData:hexstring]; [ [Socketsingleton sharedInstance] soketWriteData:data]; } [_wenduPicview removeFromSuperview]; } -(void)hotCoolBtnClick:(UIButton *)btn { NSLog(@"%@******** _wenduPicview.picViewResultString",_wenduPicview.picViewResultString); if (_ruSunPicview.picViewResultString ==nil) { [_ruSunPicview removeFromSuperview]; }else{ JiaReWenDuModel *model=[[JiaReWenDuModel alloc] init]; [[Socketsingleton sharedInstance] setXuToJiaReBangDataWith:model]; int intlowString = [_ruSunPicview.picViewResultString intValue]; int newIntlowString=intlowString*10; NSLog(@"%d******** newIntlowString",newIntlowString); // 转四位16进制 model.JiaReWenDu=[dataContorl tpIntStringToFourHex:newIntlowString]; model.crc16Code =@"0000"; NSString * hexstring=[NSString stringWithFormat:@"%@%@%@",model.description,model.JiaReWenDu,model.crc16Code]; NSData*data=[dataContorl stringToHexData:hexstring]; [ [Socketsingleton sharedInstance] soketWriteData:data]; } [_ruSunPicview removeFromSuperview]; } #pragma mark - 点击松诺加热棒事件 -(void)slectSongNuoInde:(NSIndexPath *)index withBackModel:(SongNuoBackMassage *)backModel{ //和炫多 温度选择器一样 这里用炫多选择器展示 [self showWenDuPic]; [self songNuojiaReMianQue]; } -(void)songNuojiaReMianQue{ SongNuoBackMassage *backmodel=[[DataCenter defaultDtacenter]valueForKey:@"SongNuoBackMassage"]; UInt64 mac=[dataContorl hexToTen:backmodel.heatTemperature]; [self setMianQueueWithUint64:mac]; } //摄像头已不存在 -(void)cameraIsNotExit{ [self.player p2pStop]; [Socketsingleton sharedInstance].communiteDelegate=nil; [[Socketsingleton sharedInstance] cutOffSocket]; [self screenShotImage]; [AppDelegate sharedDefault].canFullScreen = NO; //改 tab 栏后新增 [self setAppTabRoot]; } #pragma mark - 可丽爱加热棒 -(void)selctKeLiAiIndex:(NSIndexPath *)index withBackModel:(KeLiAiBackMassage *)backModel { [self showWenDuPic]; // [self keLiAijiaReMianQueWith]; } -(void)keLiAijiaReMianQueWith { KeLiAiBackMassage*backmodel=[[DataCenter defaultDtacenter]valueForKey:@"KeLiAiBackInfo"]; UInt64 mac=[dataContorl hexToTen:backmodel.heatTemperature]; [self setMianQueueWithUint64:mac]; } #pragma mark - 显示温度选择器初始数据 -(void)setMianQueueWithUint64:(UInt64)mac { float TPlabel=mac/10; int temp= (int)(TPlabel+0.5); NSString *stringFloat = [NSString stringWithFormat:@"%d",temp]; NSLog(@"%@",stringFloat); NSArray*wenDuArr=[_wenduPicview.picArr objectAtIndex:0]; //主线程名字和炫多通用 _xutoMainQueue 无影响 dispatch_async(_xutoMainQueue, ^{ for (NSInteger i=0; i