ifish/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PMonitorController.m

4602 lines
177 KiB
Objective-C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// IfishP2PMonitorController.m
// IfihYooeeDemo
//
// Created by imac on 16/6/7.
// Copyright © 2016年 xiang. All rights reserved.
//
#import "IfishP2PMonitorController.h"
#import <QuartzCore/QuartzCore.h>
#import <AVFoundation/AVFoundation.h>
#import <AssetsLibrary/AssetsLibrary.h>
#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"
#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 <UMSocialCore/UMSocialCore.h>
#import "RunSun84CHSetViewController.h"
#import "HaveHotCoolWenDuPicview.h"
#import "RuSunLightOrder.h"
#import "RuiMeiSetViewController.h"
#import "Xuanduo2SettingController.h"
#import "MessageAlertView.h"
#import "CreatErWeiMaController.h"
//上部分视频封装 下部分分段控制器 封装 (下一步代码优化)
@interface IfishP2PMonitorController ()<HaveHotCoolWenDuPicviewDelegate,GWP2PVideoPlayerProtocol>
{
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;
Weak UIView *remoteView;//显示player的载体
Strong UIImage *screenShotImage;//截图
@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];
}
}
#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<NSString *,id> *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) {
_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 setBackgroundImage:[UIImage imageNamed:@"blackbar.png"] forBarMetrics:UIBarMetricsDefault];
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.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;
//、横屏工具栏
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(270))];
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<NSString *,id> *dataDictionary) {
//检查更新成功之后,处理回调事件
[weakSelf checkUpdateSuccessWithDictionary:dataDictionary];
}];
}else{
[weakSelf.view makeToast:@"设备已离线"];
}
}
[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"];
titles=@[@"修改名称",@"删除设备",@"分享设备",@"设备升级"];
[self.popView loadInfoWithTitle:titles Icons:titleImgs];
}
//判断摄像头是否有关系设备
#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];
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 ([[UIDevice currentDevice] respondsToSelector:@selector(setOrientation:)])
{
NSNumber *numb=[NSNumber numberWithInteger: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 ([[UIDevice currentDevice] respondsToSelector:@selector(setOrientation:)])
{
NSLog(@"self.interfaceOrientation%ld",(long)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<rightItemCount;i++){
TouchButton *button = [self getBottomBarButton];
button.frame = CGRectMake(0, (CONTROLLER_RIGHT_ITEM_HEIGHT+1.0)*i, CONTROLLER_RIGHT_ITEM_WIDTH, CONTROLLER_RIGHT_ITEM_HEIGHT);
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, button.frame.size.width, button.frame.size.height)];
label.backgroundColor = [UIColor clearColor];
label.textAlignment = NSTextAlignmentCenter;
label.textColor = XWhite;
label.font = [UIFont boldSystemFontOfSize:16.0];
if(rightItemCount==2){//NPC
//无高清
if(i==0){
label.text = NSLocalizedString(@"标清", nil);
label.tag = CONTROLLER_LABEL_TAG_SD;
button.tag = CONTROLLER_BTN_TAG_SD;
}else if(i==1){
label.text = NSLocalizedString(@"流畅", nil);
label.tag = CONTROLLER_LABEL_TAG_LD;
label.textColor = XBlue;
button.tag = CONTROLLER_BTN_TAG_LD;
}
}else if(rightItemCount==3){//IPC
//有高清
if(i==0){
label.text = NSLocalizedString(@"高清", nil);
label.tag = CONTROLLER_LABEL_TAG_HD;
button.tag = CONTROLLER_BTN_TAG_HD;
}else if(i==1){
label.text = NSLocalizedString(@"标清", nil);
label.tag = CONTROLLER_LABEL_TAG_SD;
label.textColor = XBlue;
button.tag = CONTROLLER_BTN_TAG_SD;
}else if(i==2){
label.text = NSLocalizedString(@"流畅", nil);
label.tag = CONTROLLER_LABEL_TAG_LD;
button.tag = CONTROLLER_BTN_TAG_LD;
//
}
}
[button addSubview:label];
[button addTarget:self action:@selector(onControllerBtnPress:) forControlEvents:UIControlEventTouchUpInside];
[controllerRight addSubview:button];
}
//进入横屏时,显示
//退出横屏时,隐藏
//底部半透明块
UIView *bottomView = [[UIView alloc] initWithFrame:CGRectMake(0.0, height-BOTTOM_BAR_HEIGHT, width, BOTTOM_BAR_HEIGHT)];
[bottomView setAlpha:0.5];
[bottomView setBackgroundColor:XBlack];
self.bottomView = bottomView;
[self.view addSubview:bottomView];
[self.bottomView setHidden:YES];
UIView *bottomBarView = [[UIView alloc] initWithFrame:CGRectMake(0.0, height-BOTTOM_BAR_HEIGHT, width, BOTTOM_BAR_HEIGHT)];
self.bottomBarView = bottomBarView;
[self.view addSubview:bottomBarView];
[self.bottomBarView setHidden:YES];
//左边的画质图标
//由于要隐藏掉此处改为暂停按钮
TouchButton *resolutionButton = [self getBottomBarButton];
[resolutionButton setFrame:CGRectMake(5.0, (BOTTOM_BAR_HEIGHT-RESOLUTION_BTN_H)/2.0, CONTROLLER_RIGHT_ITEM_WIDTH, RESOLUTION_BTN_H)];
resolutionButton.tag = CONTROLLER_BTN_TAG_RESOLUTION;
if (rightItemCount == 2) {
[resolutionButton setTitle:NSLocalizedString(@"LD", nil) forState:UIControlStateNormal];
}else{
[resolutionButton setTitle:NSLocalizedString(@"SD", nil) forState:UIControlStateNormal];
}
[resolutionButton setBackgroundImage:LXImageWithImageName(@"ic_ctl_resolution.png") forState:UIControlStateNormal];
[resolutionButton addTarget:self action:@selector(selectResolutionClick:) forControlEvents:UIControlEventTouchUpInside];
//暂时隐藏只选择高清 现在又放出来了
[bottomBarView addSubview:resolutionButton];
//右边的切换屏幕图标
TouchButton *switchScreenButton = [self getBottomBarButton];
[switchScreenButton setFrame:CGRectMake(width-CONTROLLER_BTN_H_W-5.0, (BOTTOM_BAR_HEIGHT-CONTROLLER_BTN_H_W)/2.0, CONTROLLER_BTN_H_W, CONTROLLER_BTN_H_W)];
switchScreenButton.tag = SWITCH_SCREEN_BUTTON_H_TAG;
[switchScreenButton setBackgroundImage:LXImageWithImageName(@"monitor_half_screen.png") forState:UIControlStateNormal];
[switchScreenButton addTarget:self action:@selector(onVerticalBtnPress:) forControlEvents:UIControlEventTouchUpInside];
[bottomBarView addSubview:switchScreenButton];
//右边的挂断图标
TouchButton *hungUpButton = [self getBottomBarButton];
[hungUpButton setFrame:CGRectMake(switchScreenButton.frame.origin.x-CONTROLLER_BTN_H_W-5.0, (BOTTOM_BAR_HEIGHT-CONTROLLER_BTN_H_W)/2.0, CONTROLLER_BTN_H_W, CONTROLLER_BTN_H_W)];
hungUpButton.tag = CONTROLLER_BTN_TAG_HUNGUP;
[hungUpButton setBackgroundImage:LXImageWithImageName(@"ic_ctl_new_hungup.png") forState:UIControlStateNormal];
[hungUpButton addTarget:self action:@selector(onControllerBtnPress:) forControlEvents:UIControlEventTouchUpInside];
// [bottomBarView addSubview:hungUpButton];
//布防撤防、声音开关、截图开关、按住说话开关、开门按钮
UIView *controllBar = [[UIView alloc] initWithFrame:CGRectMake(CONTROLLER_RIGHT_ITEM_WIDTH+5.0, 0.0, width-CONTROLLER_RIGHT_ITEM_WIDTH-5.0-PUBLIC_WIDTH_OR_HEIGHT*2-5.0*2, PUBLIC_WIDTH_OR_HEIGHT)];
controllBar.backgroundColor = [UIColor clearColor];
self.controllBar = controllBar;
int btnCount = CONTROLLER_BTN_COUNT;
CGFloat firstControllerBtnX = (controllBar.frame.size.width-PUBLIC_WIDTH_OR_HEIGHT*btnCount)/2.0;
for(int i=0;i<btnCount;i++){
TouchButton *controllerBtn = [self getBottomBarButton];
controllerBtn.frame = CGRectMake(PUBLIC_WIDTH_OR_HEIGHT*i+firstControllerBtnX, (BOTTOM_BAR_HEIGHT-CONTROLLER_BTN_H_W)/2.0, CONTROLLER_BTN_H_W,CONTROLLER_BTN_H_W);
if(i==0){//布防撤防
_btnDefence = controllerBtn;
_btnDefence.hidden = YES;
//LXImageWithImageName(@"long_press_lock.png")
controllerBtn.tag = CONTROLLER_BTN_TAG_DEFENCE_LOCK;
}else if(i==1){//声音开关
controllerBtn.tag = CONTROLLER_BTN_TAG_SOUND;
[controllerBtn setBackgroundImage:LXImageWithImageName(@"ic_ctl_new_sound_on.png") forState:UIControlStateNormal];
controllerBtn.hidden = YES;
}else if(i==2){//按住说话开关
controllerBtn.tag = CONTROLLER_BTN_TAG_PRESS_TALK;
[controllerBtn setBackgroundImage:LXImageWithImageName(@"ic_ctl_new_send_audio.png") forState:UIControlStateNormal];
[controllerBtn setBackgroundImage:LXImageWithImageName(@"ic_ctl_new_send_audio_p.png") forState:UIControlStateHighlighted];
controllerBtn.hidden = YES;
}else if(i==3){//截图开关
controllerBtn.tag = CONTROLLER_BTN_TAG_SCREENSHOT;
[controllerBtn setBackgroundImage:LXImageWithImageName(@"ic_ctl_new_screenshot.png") forState:UIControlStateNormal];
controllerBtn.hidden = YES;
}else if(i==4){//输出6秒高电平脉冲按钮
controllerBtn.tag = CONTROLLER_BTN_TAG_GPIO1_0;
[controllerBtn setBackgroundImage:LXImageWithImageName(@"long_press_lock.png") forState:UIControlStateNormal];
controllerBtn.hidden = YES;
}
if(i==2){
//对讲按钮
}else{
[controllerBtn addTarget:self action:@selector(onControllerBtnPress:) forControlEvents:UIControlEventTouchUpInside];
}
[controllBar addSubview:controllerBtn];
}
[bottomBarView addSubview:controllBar];
//button arrow
//进入横屏时,显示
//退出横屏时,隐藏
CGFloat customBorderButtonY = (height - CUSTOM_BORDER_BUTTON_HEIGHT)/2.0;
CustomBorderButton *customBorderButton=[CustomBorderButton buttonWithType:UIButtonTypeCustom];
customBorderButton.frame = CGRectMake(0, customBorderButtonY, CUSTOM_BORDER_BUTTON_WIDTH, CUSTOM_BORDER_BUTTON_HEIGHT);
[customBorderButton setNeedLineTop:true left:true bottom:true right:true];
[customBorderButton setLineColorTop:[UIColor blackColor] left:[UIColor clearColor] bottom:[UIColor blackColor] right:[UIColor blackColor]];//用同一色边线
[customBorderButton setLineWidthTop:2.0 left:2.0 bottom:2.0 right:2.0];//设置线的粗细,这里可以随意调整
[customBorderButton setRadiusTopLeft:0 topRight:8.0 bottomLeft:0 bottomRight:8.0];//边线加弧度
[customBorderButton setClipsToBoundsWithBorder:true];//裁剪掉边线外面的区域
[customBorderButton setFillColor:[UIColor darkGrayColor]];//增加内部填充颜色
[customBorderButton setAlpha:0.5];
[customBorderButton setOpaque:YES];
[customBorderButton setImage:[UIImage imageNamed:@"button_right"] forState:UIControlStateNormal];
[customBorderButton setImage:[UIImage imageNamed:@"button_right_selected"] forState:UIControlStateHighlighted];
[customBorderButton addTarget:self action:@selector(showLeftView:) forControlEvents:UIControlEventTouchUpInside];
self.customBorderButton = customBorderButton;
//左侧界面
//进入横屏时,显示
//退出横屏时,隐藏
CGFloat leftViewY = (height - LEFTVIEW_HEIGHT)/2.0;
CustomView *leftView = [[CustomView alloc] initWithFrame:CGRectMake(-LEFTVIEW_WIDTH, leftViewY, LEFTVIEW_WIDTH, LEFTVIEW_HEIGHT)];
[leftView setNeedLineTop:true left:true bottom:true right:true];
[leftView setLineColorTop:[UIColor blackColor] left:[UIColor blackColor] bottom:[UIColor blackColor] right:[UIColor blackColor]];//用同一色边线
[leftView setLineWidthTop:2.0 left:2.0 bottom:2.0 right:2.0];//设置线的粗细,这里可以随意调整
[leftView setRadiusTopLeft:8.0 topRight:8.0 bottomLeft:8.0 bottomRight:8.0];//边线加弧度
[leftView setClipsToBoundsWithBorder:true];//裁剪掉边线外面的区域
[leftView setFillColor:[UIColor darkGrayColor]];//增加内部填充颜色
[leftView setAlpha:0.5];
[leftView setOpaque:YES];
self.leftView = leftView;
//[self.leftView setHidden:YES];
CGFloat xSpace = 4.0;
CGFloat ySpace = 4.0;
CGFloat numLabelW = 12.0;
CGFloat buttonW = (leftView.frame.size.width - numLabelW - xSpace*4)/2.0;
CGFloat buttonH = (leftView.frame.size.height - ySpace*4)/3.0;
int tag = 10;
for (int i = 0; i < 3; i++) {
UIButton *onButton = [UIButton buttonWithType:UIButtonTypeCustom];
onButton.frame = CGRectMake(xSpace, (buttonH+ySpace)*i+ySpace, buttonW, buttonH);
onButton.tag = tag++;
[onButton setTitle:@"ON" forState:UIControlStateNormal];
[onButton setTitleColor:XWhite forState:UIControlStateNormal];
onButton.titleLabel.font = XFontBold_12;
[onButton addTarget:self action:@selector(onOrOffButtonClick:) forControlEvents:UIControlEventTouchUpInside];
[self.leftView addSubview:onButton];
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(2*xSpace+buttonW, (buttonH+ySpace)*i+ySpace, numLabelW, buttonH)];
label.backgroundColor = [UIColor clearColor];
label.textColor = XWhite;
label.text = [NSString stringWithFormat:@"%d",i + 1];
label.font = XFontBold_12;
label.textAlignment = NSTextAlignmentCenter;
[self.leftView addSubview:label];
UIButton *offButton = [UIButton buttonWithType:UIButtonTypeCustom];
offButton.frame = CGRectMake(3*xSpace+buttonW +numLabelW, (buttonH+ySpace)*i+ySpace, buttonW, buttonH);
offButton.tag = tag++;
[offButton setTitle:@"OFF" forState:UIControlStateNormal];
[offButton setTitleColor:XWhite forState:UIControlStateNormal];
offButton.titleLabel.font = XFontBold_12;
[offButton addTarget:self action:@selector(onOrOffButtonClick:) forControlEvents:UIControlEventTouchUpInside];
[self.leftView addSubview:offButton];
}
//右侧,灯控制按钮
//进入横屏时,显示,并调整frame
//退出横屏时,隐藏
//提示器
UIActivityIndicatorView *progressView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
// progressView.frame = CGRectMake(self.remoteView.frame.size.width-30.0-20.0, (self.remoteView.frame.size.height-30.0)/2, 30.0, 30.0);
progressView.frame = CGRectMake(self.canvasView.frame.size.width-30.0-20.0, (self.canvasView.frame.size.height-30.0)/2, 30.0, 30.0);
[self.remoteView addSubview:progressView];
self.progressView = progressView;
[self.progressView setHidden:YES];
//若设备支持灯设备时,则显示开关;若不支持,则隐藏
UIButton *lightButton = [UIButton buttonWithType:UIButtonTypeCustom];
// lightButton.frame = CGRectMake(self.remoteView.frame.size.width-30.0-20.0, (self.remoteView.frame.size.height-30.0)/2, 30.0, 30.0);
lightButton.frame = CGRectMake(self.canvasView.frame.size.width-30.0-20.0, (self.canvasView.frame.size.height-30.0)/2, 30.0, 30.0);
lightButton.backgroundColor = [UIColor clearColor];
[lightButton setBackgroundImage:[UIImage imageNamed:@"lighton.png"] forState:UIControlStateNormal];
[lightButton addTarget:self action:@selector(btnClickToSetLightState:) forControlEvents:UIControlEventTouchUpInside];
[self.remoteView addSubview:lightButton];
[lightButton setHidden:YES];
self.lightButton = lightButton;
//进入横屏时,显示
//退出横屏时,隐藏
//焦距控件
//宽、高
CGFloat focalLengthView_w = 40.0;
CGFloat focalLengthView_h = 180.0;
//焦距控件与屏幕右边框的间距
CGFloat space_FocalLView_Screen = (width - self.canvasView.width)/2+20+focalLengthView_w;
UIView *focalLengthView = [[UIView alloc] initWithFrame:CGRectMake(width-space_FocalLView_Screen, height-self.bottomBarView.frame.size.height-20.0-focalLengthView_h, focalLengthView_w, focalLengthView_h)];
if (!isSupportZoom) {//电子放大与焦距变焦不共存
[self.view addSubview:focalLengthView];
}
[focalLengthView setHidden:YES];
self.focalLengthView = focalLengthView;
//焦距伸长按钮
//宽、高
CGFloat elongationButton_w = 34.0;
CGFloat elongationButton_h = elongationButton_w*(46/43);
UIButton *elongationButton = [UIButton buttonWithType:UIButtonTypeCustom];
elongationButton.frame = CGRectMake((focalLengthView_w-elongationButton_w)/2, 0.0, elongationButton_w, elongationButton_h);
[elongationButton setBackgroundImage:[UIImage imageNamed:@"monitor_localLenght_zoom_normal.png"] forState:UIControlStateNormal];
[elongationButton setBackgroundImage:[UIImage imageNamed:@"monitor_localLenght_zoom_highlighted.png"] forState:UIControlStateHighlighted];
elongationButton.tag = FocalLength_Elongation_btnTag;
[elongationButton addTarget:self action:@selector(btnClickToChangeFocalLength:) forControlEvents:UIControlEventTouchUpInside];
[self.focalLengthView addSubview:elongationButton];
//拖动条
UISlider *focalLengthSlider = [[UISlider alloc] initWithFrame:CGRectMake(0.0, 0.0, focalLengthView_h-elongationButton_h*2, 30.0)];
focalLengthSlider.center = CGPointMake(self.focalLengthView.center.x-self.focalLengthView.frame.origin.x, self.focalLengthView.center.y-self.focalLengthView.frame.origin.y);
//设置旋转90度
focalLengthSlider.transform = CGAffineTransformMakeRotation(90*M_PI/180);
focalLengthSlider.minimumValue = 1.0;
focalLengthSlider.maximumValue = 15.0;
focalLengthSlider.value = 7.5;
focalLengthSlider.continuous = NO;//在手指离开的时候触发一次valueChange事件而不是在拖动的过程中不断触发valueChange事件
focalLengthSlider.tag = FocalLength_Change_sliderTag;
[focalLengthSlider addTarget:self action:@selector(btnClickToChangeFocalLength:) forControlEvents:UIControlEventValueChanged];
[self.focalLengthView addSubview:focalLengthSlider];
//焦距变短按钮
//宽、高
CGFloat shortenButton_w = elongationButton_w;
CGFloat shortenButton_h = elongationButton_h;
UIButton *shortenButton = [UIButton buttonWithType:UIButtonTypeCustom];
shortenButton.frame = CGRectMake((focalLengthView_w-shortenButton_w)/2, focalLengthView_h-shortenButton_h, shortenButton_w, shortenButton_h);
[shortenButton setBackgroundImage:[UIImage imageNamed:@"monitor_localLenght_narrow_normal.png"] forState:UIControlStateNormal];
[shortenButton setBackgroundImage:[UIImage imageNamed:@"monitor_localLenght_narrow_highlighted.png"] forState:UIControlStateHighlighted];
shortenButton.tag = FocalLength_Shorten_btnTag;
[shortenButton addTarget:self action:@selector(btnClickToChangeFocalLength:) forControlEvents:UIControlEventTouchUpInside];
[self.focalLengthView addSubview:shortenButton];
}
#pragma mark - 设置标清或高清
//由于要隐藏掉 画质选项卡 这里重写方法 设置视频默认高清 或标清
-(void)setGaoQingHuoBiaoQing{
BOOL is16B9 = [[P2PClient sharedClient] is16B9];
BOOL is960P = [[P2PClient sharedClient] is960P];
//右边的画质图标
int rightItemCount = 0;
if(is16B9 || is960P){
rightItemCount = 3;
}else{
rightItemCount = 2;
}
//设置高清
if (rightItemCount==3) {
[self.player p2pSetDefinition:GWP2PPTZDefinitionHD];
[self updateRightButtonState:CONTROLLER_BTN_TAG_HD];
}else if (rightItemCount == 2){
//设置标清
[self.player p2pSetDefinition:GWP2PPTZDefinitionSD];
[self updateRightButtonState:CONTROLLER_BTN_TAG_SD];
}
}
#pragma mark- 横屏暂停按钮事件
-(void)HorizontalStopBtnPress:(UIButton *)btn{
if(![self.player isPlaying]){
[self hiddenMonitoringUI:NO callWithErrorType:100 isReCall:YES];
[self monitorP2PCall];
[_HorizontalStopBtn setBackgroundImage:LXImageWithImageName(@"monitor_stop_h.png") forState:UIControlStateNormal];
}else{
[self stopGLViewVideo];
[_HorizontalStopBtn setBackgroundImage:LXImageWithImageName(@"monitor_on_h.png") forState:UIControlStateNormal];
}
}
#pragma mark - 开灯或关灯
-(void)btnClickToSetLightState:(UIButton *)button{
NSString *contactId = [[P2PClient sharedClient] callId];
NSString *contactPassword = [[P2PClient sharedClient] callPassword];
if (self.isLightSwitchOn) {//灯正开着
[self.lightButton setHidden:YES];
[self.progressView setHidden:NO];
[self.progressView startAnimating];
[[P2PClient sharedClient] setLightStateWithDeviceId:contactId password:contactPassword switchState:0];//关灯
}else{
[self.lightButton setHidden:YES];
[self.progressView setHidden:NO];
[self.progressView startAnimating];
[[P2PClient sharedClient] setLightStateWithDeviceId:contactId password:contactPassword switchState:1];//开灯
}
}
#pragma mark - 根据访客密码监控、门铃监控来重新布局controllBar上的按钮
-(void)reLayoutButtonInControlBar{
int btnCount = 0;
if (self.contact.defenceState == DEFENCE_STATE_NO_PERMISSION|| self.contact.defenceState == DEFENCE_STATE_NO_PERMISSION) {//访客密码
btnCount = CONTROLLER_BTN_COUNT-2;//3个按钮
}else if ([AppDelegate sharedDefault].isDoorBellAlarm) {
btnCount = CONTROLLER_BTN_COUNT;//5个按钮
}else{
btnCount = CONTROLLER_BTN_COUNT-1;//4个按钮
}
CGFloat firstControllerBtnX = (self.controllBar.frame.size.width-PUBLIC_WIDTH_OR_HEIGHT*btnCount)/2.0;
for(int i=0;i<btnCount;i++){
if (self.contact.defenceState == DEFENCE_STATE_NO_PERMISSION|| self.contact.defenceState == DEFENCE_STATE_NO_PERMISSION) {//访客密码
//布防撤防
TouchButton *controllerDefenceBtn = (TouchButton *)[self.controllBar viewWithTag:CONTROLLER_BTN_TAG_DEFENCE_LOCK];
[controllerDefenceBtn setHidden:YES];
//输出6秒高电平脉冲按钮
TouchButton *controllerDoorLockBtn = (TouchButton *)[self.controllBar viewWithTag:CONTROLLER_BTN_TAG_GPIO1_0];
[controllerDoorLockBtn setHidden:YES];
if(i==0){//声音开关
TouchButton *controllerSoundBtn = (TouchButton *)[self.controllBar viewWithTag:CONTROLLER_BTN_TAG_SOUND];
controllerSoundBtn.frame = CGRectMake(PUBLIC_WIDTH_OR_HEIGHT*i+firstControllerBtnX, (BOTTOM_BAR_HEIGHT-CONTROLLER_BTN_H_W)/2.0, CONTROLLER_BTN_H_W,CONTROLLER_BTN_H_W);
}else if(i==1){//按住说话开关
TouchButton *controllerTalkBtn = (TouchButton *)[self.controllBar viewWithTag:CONTROLLER_BTN_TAG_PRESS_TALK];
controllerTalkBtn.frame = CGRectMake(PUBLIC_WIDTH_OR_HEIGHT*i+firstControllerBtnX, (BOTTOM_BAR_HEIGHT-CONTROLLER_BTN_H_W)/2.0, CONTROLLER_BTN_H_W,CONTROLLER_BTN_H_W);
}else if(i==2){//截图开关
TouchButton *controllerScreenshotBtn = (TouchButton *)[self.controllBar viewWithTag:CONTROLLER_BTN_TAG_SCREENSHOT];
controllerScreenshotBtn.frame = CGRectMake(PUBLIC_WIDTH_OR_HEIGHT*i+firstControllerBtnX, (BOTTOM_BAR_HEIGHT-CONTROLLER_BTN_H_W)/2.0, CONTROLLER_BTN_H_W,CONTROLLER_BTN_H_W);
}
}else{
if ([AppDelegate sharedDefault].isDoorBellAlarm) {
//布防撤防
TouchButton *controllerDefenceBtn = (TouchButton *)[self.controllBar viewWithTag:CONTROLLER_BTN_TAG_DEFENCE_LOCK];
[controllerDefenceBtn setHidden:NO];
//输出6秒高电平脉冲按钮
TouchButton *controllerDoorLockBtn = (TouchButton *)[self.controllBar viewWithTag:CONTROLLER_BTN_TAG_GPIO1_0];
[controllerDoorLockBtn setHidden:NO];
}else{
//布防撤防
TouchButton *controllerDefenceBtn = (TouchButton *)[self.controllBar viewWithTag:CONTROLLER_BTN_TAG_DEFENCE_LOCK];
[controllerDefenceBtn setHidden:NO];
//输出6秒高电平脉冲按钮
TouchButton *controllerDoorLockBtn = (TouchButton *)[self.controllBar viewWithTag:CONTROLLER_BTN_TAG_GPIO1_0];
[controllerDoorLockBtn setHidden:YES];
}
if(i==0){//布防撤防
TouchButton *controllerDefenceBtn = (TouchButton *)[self.controllBar viewWithTag:CONTROLLER_BTN_TAG_DEFENCE_LOCK];
controllerDefenceBtn.frame = CGRectMake(PUBLIC_WIDTH_OR_HEIGHT*i+firstControllerBtnX, (BOTTOM_BAR_HEIGHT-CONTROLLER_BTN_H_W)/2.0, CONTROLLER_BTN_H_W,CONTROLLER_BTN_H_W);
}else if(i==1){//声音开关
TouchButton *controllerSoundBtn = (TouchButton *)[self.controllBar viewWithTag:CONTROLLER_BTN_TAG_SOUND];
controllerSoundBtn.frame = CGRectMake(PUBLIC_WIDTH_OR_HEIGHT*i+firstControllerBtnX, (BOTTOM_BAR_HEIGHT-CONTROLLER_BTN_H_W)/2.0, CONTROLLER_BTN_H_W,CONTROLLER_BTN_H_W);
}else if(i==2){//按住说话开关
TouchButton *controllerTalkBtn = (TouchButton *)[self.controllBar viewWithTag:CONTROLLER_BTN_TAG_PRESS_TALK];
controllerTalkBtn.frame = CGRectMake(PUBLIC_WIDTH_OR_HEIGHT*i+firstControllerBtnX, (BOTTOM_BAR_HEIGHT-CONTROLLER_BTN_H_W)/2.0, CONTROLLER_BTN_H_W,CONTROLLER_BTN_H_W);
}else if(i==3){//截图开关
TouchButton *controllerScreenshotBtn = (TouchButton *)[self.controllBar viewWithTag:CONTROLLER_BTN_TAG_SCREENSHOT];
controllerScreenshotBtn.frame = CGRectMake(PUBLIC_WIDTH_OR_HEIGHT*i+firstControllerBtnX, (BOTTOM_BAR_HEIGHT-CONTROLLER_BTN_H_W)/2.0, CONTROLLER_BTN_H_W,CONTROLLER_BTN_H_W);
}else if(i==4){//输出6秒高电平脉冲按钮
TouchButton *controllerDoorLockBtn = (TouchButton *)[self.controllBar viewWithTag:CONTROLLER_BTN_TAG_GPIO1_0];
controllerDoorLockBtn.frame = CGRectMake(PUBLIC_WIDTH_OR_HEIGHT*i+firstControllerBtnX, (BOTTOM_BAR_HEIGHT-CONTROLLER_BTN_H_W)/2.0, CONTROLLER_BTN_H_W,CONTROLLER_BTN_H_W);
}
}
}
}
#pragma mark --上送最后一帧截图数据
-(void)getLastImgGoback{
UIImage *image = self.screenShotImage;
if (!image) {
return;
}
NSData *imgData = [NSData dataWithData:UIImagePNGRepresentation(image)];
int contactid = [[GWP2PClient sharedClient] getDeviceIDInAPMode];
[Utils saveHeaderFileWithId:[NSString stringWithFormat:@"%d",contactid] data:imgData];
}
#pragma mark - 返回
-(void)btnClickToBack:(UIButton*)btn{
if ([self.player isPlaying]) {
[self getLastImgGoback];
}
[self.player p2pStop];
[Socketsingleton sharedInstance].communiteDelegate=nil;
[[Socketsingleton sharedInstance] cutOffSocket];
[AppDelegate sharedDefault].canFullScreen = NO;
//改 tab 栏后新增
if ([self.navigationController.viewControllers firstObject]==self)
{
[self setAppTabRoot];
}
else
{
[self.navigationController popViewControllerAnimated:YES];
}
}
-(void)setAppTabRoot{
IfishMianTabViewController *mianVC=[[IfishMianTabViewController alloc] init];
UIApplication*app=[UIApplication sharedApplication];
AppDelegate *app1=(AppDelegate *)app.delegate;
app1.window.rootViewController=mianVC;
}
-(void)showLeftView:(UIButton *)button{
if (!self.isShowLeftView) {
self.isShowLeftView = YES;
[self.leftView setHidden:NO];
[UIView animateWithDuration:0.2 animations:^{
CGRect leftViewRect = self.leftView.frame;
leftViewRect.origin.x = 0;
self.leftView.frame = leftViewRect;
CGRect customBorderButtoRect = self.customBorderButton.frame;
customBorderButtoRect.origin.x = LEFTVIEW_WIDTH;
self.customBorderButton.frame = customBorderButtoRect;
[self.customBorderButton setImage:[UIImage imageNamed:@"button_left"] forState:UIControlStateNormal];
[self.customBorderButton setImage:[UIImage imageNamed:@"button_left_selected"] forState:UIControlStateHighlighted];
} completion:^(BOOL finished) {
}];
}else{
self.isShowLeftView = NO;
[UIView animateWithDuration:0.2 animations:^{
CGRect leftViewRect = self.leftView.frame;
leftViewRect.origin.x = -LEFTVIEW_WIDTH;
self.leftView.frame = leftViewRect;
CGRect customBorderButtoRect = self.customBorderButton.frame;
customBorderButtoRect.origin.x = 0;
self.customBorderButton.frame = customBorderButtoRect;
[self.customBorderButton setImage:[UIImage imageNamed:@"button_right"] forState:UIControlStateNormal];
[self.customBorderButton setImage:[UIImage imageNamed:@"button_right_selected"] forState:UIControlStateHighlighted];
} completion:^(BOOL finished) {
[self.leftView setHidden:YES];
}];
}
}
-(void)onOrOffButtonClick:(UIButton *)button{
//
int group = 0, pin = 0;
int value = 5;
int time[8] = {0};
time[0] = -1000;
time[1] = 1000;
time[2] = -1000;
time[3] = 1000;
time[4] = -1000;
switch (button.tag) {
case GPIO0_0:
{
group = 0;
pin = 0;
self.clickGPIO0_0Button = button;
self.clickGPIO0_0Button.backgroundColor = XBlue;
}
break;
case GPIO0_1:
{
group = 0;
pin = 1;
self.clickGPIO0_1Button = button;
self.clickGPIO0_1Button.backgroundColor = XBlue;
}
break;
case GPIO0_2:
{
group = 0;
pin = 2;
self.clickGPIO0_2Button = button;
self.clickGPIO0_2Button.backgroundColor = XBlue;
}
break;
case GPIO0_3:
{
group = 0;
pin = 3;
self.clickGPIO0_3Button = button;
self.clickGPIO0_3Button.backgroundColor = XBlue;
}
break;
case GPIO0_4:
{
group = 0;
pin = 4;
self.clickGPIO0_4Button = button;
self.clickGPIO0_4Button.backgroundColor = XBlue;
}
break;
case GPIO2_6:
{
group = 2;
pin = 6;
self.clickGPIO2_6Button = button;
self.clickGPIO2_6Button.backgroundColor = XBlue;
}
break;
}
//记录当前的GPIO设置参数
self.lastGroup = group;
self.lastPin = pin;
self.lastValue = value;
self.lastTime = time;
NSString *contactId = [[P2PClient sharedClient] callId];
NSString *contactPassword = [[P2PClient sharedClient] callPassword];
[[P2PClient sharedClient] setGpioCtrlWithId:contactId password:contactPassword group:group pin:pin value:value time:time];
}
- (TouchButton *)getBottomBarButton//重新调整监控画面
{
TouchButton *button = [TouchButton buttonWithType:UIButtonTypeCustom];
[button setFrame:CGRectMake(0.0, 0.0, 50.0, 50.0)];
return button;
}
-(void)didShowResolutionInterface{
BOOL is16B9 = [[P2PClient sharedClient] is16B9];
BOOL is960P = [[P2PClient sharedClient] is960P];
//右边的画质图标
int rightItemCount = 0;
if(is16B9 || is960P){
rightItemCount = 3;
}else{
rightItemCount = 2;
}
[UIView animateWithDuration:0.2 animations:^{
CGRect controllerRight = self.controllerRight.frame;
controllerRight.origin.y = _horizontalScreenH-BOTTOM_BAR_HEIGHT-CONTROLLER_RIGHT_ITEM_HEIGHT*3-1.0;
self.controllerRight.frame = controllerRight;
CGRect controllerRightBgRect = self.controllerRightBg.frame;
controllerRightBgRect.origin.y = _horizontalScreenH-BOTTOM_BAR_HEIGHT-CONTROLLER_RIGHT_ITEM_HEIGHT*rightItemCount-1.0;
self.controllerRightBg.frame = controllerRightBgRect;
} completion:^(BOOL finished) {
self.isAlreadyShowResolution = YES;
}];
}
-(void)didHiddenResolutionInterface{
[UIView animateWithDuration:0.2 animations:^{
CGRect controllerRight = self.controllerRight.frame;
controllerRight.origin.y = _horizontalScreenH;
self.controllerRight.frame = controllerRight;
self.controllerRightBg.frame = controllerRight;
} completion:^(BOOL finished) {
self.isAlreadyShowResolution = NO;
}];
}
-(void)selectResolutionClick:(UIButton *)button{//重新调整监控画面
if (self.isAlreadyShowResolution) {
[self didHiddenResolutionInterface];
}else{
[self didShowResolutionInterface];
}
}
#pragma mark - 电子放大
//监控界面缩放
-(UIView*)viewForZoomingInScrollView:(UIScrollView *)scrollView{
//进入全屏时,方可允许操作缩放功能
if (self.isFullScreen) {
return self.remoteView;
}
return nil;
}
//监控界面缩放
-(void)scrollViewDidZoom:(UIScrollView *)scrollView{
if (self.isFullScreen) {
CGFloat offsetX = (scrollView.bounds.size.width > 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<NSString *,id> *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<NSString *,id> *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];
}
//上滑动
- (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];
//旋转图片
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);
//设置横屏底部工具栏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 {
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<wenDuArr.count; i++) {
NSString*picString=wenDuArr[i];
if ([picString isEqualToString:stringFloat ] ) {
[_wenduPicview.pic selectRow:i inComponent:0 animated:NO];
}
}
});
}
-(void)setHotCoolMianQueueWithUint64:(UInt64)mac
{
float TPlabel=mac/10;
int temp= (int)(TPlabel+0.5);
NSString *stringFloat = [NSString stringWithFormat:@"%d",temp];
NSLog(@"%@",stringFloat);
NSArray*wenDuArr=[_ruSunPicview.picArr objectAtIndex:0];
//主线程名字和炫多通用 _xutoMainQueue 无影响
dispatch_async(_xutoMainQueue, ^{
for (NSInteger i=0; i<wenDuArr.count; i++) {
NSString*picString=wenDuArr[i];
if ([picString isEqualToString:stringFloat ] ) {
[_ruSunPicview.pic selectRow:i inComponent:0 animated:NO];
}
}
});
}
//睿芯三控加热棒 加热指令同上
#pragma mark - 睿芯三控加热棒
-(void)selectRuSunIndex:(NSIndexPath *)index withbackModle:(RuSunProtocol *)backModel
{
[self showWenDuPic];
[self ruSunMianQueWith];
}
-(void)ruSunMianQueWith
{
RuSunProtocol*backmodel=[[DataCenter defaultDtacenter]valueForKey:@"RuSunBackMessageInfo"];
UInt64 mac=[dataContorl hexToTen:backmodel.heatTemperature];
[self setMianQueueWithUint64:mac];
}
#pragma mark - 睿芯84加热棒
-(void)selectRuSun84Index:(NSIndexPath*)index withbackModle:(RunSun84Protocol *)backModel
{
//有加热制冷
[self showRunHotCoolPic:backModel];
[self ruSun84MianQueWith];
}
-(void)ruSun84MianQueWith
{
RunSun84Protocol*backmodel=[[DataCenter defaultDtacenter]valueForKey:@"RuSunBackMessage84bite"];
UInt64 mac=[dataContorl hexToTen:backmodel.heatTemperature];
[self setHotCoolMianQueueWithUint64:mac];
}
#pragma mark - 瑞美
-(void)selectRuiMeiIndex:(NSIndexPath *)index withbackModle:(RuiMeiProtocolModel *)backModel {
[self showWenDuPic];
[self setMeiMianQueue];
}
-(void)setMeiMianQueue
{
RuiMeiProtocolModel*backmodel=[[DataCenter defaultDtacenter]valueForKey:DataCenterRuiMeiModelKey];
UInt64 mac=[dataContorl hexToTen:backmodel.heatTemperature];
[self setMianQueueWithUint64:mac];
}
#pragma mark - 松诺BD 加热棒
-(void)selectSongNuoBDIndex:(NSIndexPath *)index withBackModel:(SongNuoBDProtocol *)backModel{
[self showWenDuPic];
[self songNuoBDMianQueue];
}
-(void)selectXuanduo2Index:(NSIndexPath *)index withBackModel:(Xuanduo2Model *)backModel{
if (backModel) {
if (index.row == 3)
{
if ([backModel isKindOfClass:[Xuanduo2Model class]]) {
//循环泵
manulswitchMSModel*manulModel=[[manulswitchMSModel alloc]init];
[[Socketsingleton sharedInstance] setSoketLightDataWith:manulModel];
NSString*switchString=manulModel.description;
manulModel.lightNumber = @"04";
if([[backModel.waterPump substringWithRange:NSMakeRange(2, IFISH_LIGHTBTN_BYTE)] isEqualToString:@"00"])
{
manulModel.switchBtn = @"01";
}else{
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"提示" message:@"确认关闭循环泵?" preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleDefault handler:nil];
UIAlertAction *sureAction = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
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];
}];
[alertController addAction:cancelAction];
[alertController addAction:sureAction];
[self.navigationController presentViewController:alertController animated:YES completion:nil];
return;
}
manulModel.crc16Str = @"0000";
NSString*switchString2=[NSString stringWithFormat:@"%@%@%@%@",switchString,manulModel.lightNumber,manulModel.switchBtn,manulModel.crc16Str];
NSData*manulData=[dataContorl stringToHexData:switchString2];
[[Socketsingleton sharedInstance] soketWriteData:manulData];
}
else
{
//循环泵
Xuanduo3fModel*backModel=backModel; manulswitchMSModel*manulModel=[[manulswitchMSModel alloc]init];
[[Socketsingleton sharedInstance] setSoketLightDataWith:manulModel];
NSString*switchString=manulModel.description;
manulModel.lightNumber = @"01";
if([[backModel.light substringWithRange:NSMakeRange(2, IFISH_LIGHTBTN_BYTE)] isEqualToString:@"00"])
{
manulModel.switchBtn = @"01";
}else
{
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];
}
}else {
_xuanduoPicView=[[HaveHotCoolWenDuPicview alloc] init];
_xuanduoPicView.frame=CGRectMake(0, 0, kScreenSize.width, kScreenSize.height);
[_xuanduoPicView.sureBtn addTarget:self action:@selector(xuanduoSureBtnClick:) forControlEvents:UIControlEventTouchUpInside];
_isNewXuanduo = YES;
[self.view.window addSubview:_xuanduoPicView];
_xuanduoPicView.wenDuPicviewDelegate = self;
NSString *stateStr =nil;
if ([backModel.status isKindOfClass:[NSNull class]]||!backModel.status ) {
backModel.status = @"0000";
}
stateStr = [backModel.status substringWithRange:NSMakeRange(2, 2)];
[_xuanduoPicView initCateBtnSate:stateStr];
[self heatAction:backModel];
}
}
}
- (void)heatAction:(Xuanduo2Model*)model
{
UInt64 mac=[dataContorl hexToTen:model.heatingTemperature];
NSLog(@"%llu",mac);
float TPlabel=mac/10;
int temp= (int)(TPlabel+0.5);
NSString *stringFloat = [NSString stringWithFormat:@"%d",temp];
NSLog(@"%@",stringFloat);
NSArray*wenDuArr=[_xuanduoPicView.picArr objectAtIndex:0];
for (NSInteger i=0; i<wenDuArr.count; i++) {
NSString*picString=wenDuArr[i];
if ([picString isEqualToString:stringFloat ] ) {
[_xuanduoPicView.pic selectRow:i inComponent:0 animated:NO];
}
}
}
- (void)xuanduoSureBtnClick:(UIButton *)btn {
NSLog(@"%@******** _wenduPicview.picViewResultString",_wenduPicview.picViewResultString);
if (_xuanduoPicView.picViewResultString ==nil) {
[_xuanduoPicView removeFromSuperview];
}else{
JiaReWenDuModel *model=[[JiaReWenDuModel alloc] init];
model.resavemacId = [Socketsingleton sharedInstance].macAddress;
model.sendmacId =[Socketsingleton sharedInstance].macAddress;
int intlowString = [_xuanduoPicView.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];
}
[_xuanduoPicView removeFromSuperview];
_isNewXuanduo = NO;
}
-(void)songNuoBDMianQueue
{
SongNuoBDProtocol*backmodel=[[DataCenter defaultDtacenter]valueForKey:@"SongNuoDBProto"];
UInt64 mac=[dataContorl hexToTen:backmodel.heatTemperature];
[self setMianQueueWithUint64:mac];
}
#pragma mark - 温度选择器show
-(void)showWenDuPic
{
//和炫多 温度选择器一样 这里用炫多选择器展示
_wenduPicview=[[XuToWenDuPicview alloc] init];
_wenduPicview.frame=CGRectMake(0, 0, kScreenSize.width, kScreenSize.height);
[_wenduPicview.sureBtn addTarget:self action:@selector(sureBtnClick:) forControlEvents:UIControlEventTouchUpInside];
[self.view.window addSubview:_wenduPicview];
if (!_xutoMainQueue) {
_xutoMainQueue = dispatch_get_main_queue();
}
}
#pragma mark - 制冷 制热 类型 温度选择
-(void)showRunHotCoolPic:(RunSun84Protocol *)backModel
{
_ruSunPicview=[[HaveHotCoolWenDuPicview alloc] init];
_ruSunPicview.frame=CGRectMake(0, 0, kScreenSize.width, kScreenSize.height);
[_ruSunPicview.sureBtn addTarget:self action:@selector(hotCoolBtnClick:) forControlEvents:UIControlEventTouchUpInside];
[self.view.window addSubview:_ruSunPicview];
_ruSunPicview.wenDuPicviewDelegate = self;
NSString *stateStr =nil;
if ([backModel.hotCool isKindOfClass:[NSNull class]]||!backModel.hotCool) {
backModel.hotCool = @"0000";
}
stateStr = [backModel.hotCool substringWithRange:NSMakeRange(2, 2)];
[_ruSunPicview initCateBtnSate:stateStr];
if (!_xutoMainQueue) {
_xutoMainQueue = dispatch_get_main_queue();
}
}
-(void)didSelectCoolOrHeat:(NSString *)hotCool{
//由s5 控制 原理同灯
RuSunLightOrder*lightOrder=[[RuSunLightOrder alloc]init];
lightOrder.sendmacId = self.fishControlView.device.macAddress;
lightOrder.resavemacId = self.fishControlView.device.macAddress;
NSString*switchString1=lightOrder.description;
lightOrder.switchBtn = hotCool;
lightOrder.crc16Str=@"0000";
if (_isNewXuanduo) {
lightOrder.lightNumber=@"07";
}else{
lightOrder.lightNumber=@"05";
}
NSString*switchString2=[NSString stringWithFormat:@"%@%@%@%@",switchString1,lightOrder.lightNumber,lightOrder.switchBtn,lightOrder.crc16Str];
NSData*manulData=[dataContorl stringToHexData:switchString2];
[ [Socketsingleton sharedInstance] soketWriteData:manulData];
if ([Socketsingleton sharedInstance].clientSocket.isConnected) {
//soket 未断开时显示 离线
}
}
#pragma mark-cameraBottomHView delegate
-(void)cameraBottomHViewdidSelectAt:(NSIndexPath*)indexPath
{
if (indexPath.row ==0) {
//截图
[self screenShot];
}else if (indexPath.row ==1){
//进入图库
if ([self.player isPlaying]) {
[self stopGLViewVideo];
}
usleep(50*1000);
ShotScreenImgViewController *shootView=[[ShotScreenImgViewController alloc] init];
[self.navigationController pushViewController:shootView animated:YES];
}
else if (indexPath.row ==2){
UserModel *mode=[dataContorl getUserInfo];
if (mode.userType) {
//用户为商家 看护服务
if ([mode.userType isEqualToString:@"1"]) {
[self.view makeToast:@"您是商家,请在「我是商家」中查看「看护管理」"];
return ;
}
}
CertificationShopModel *ShopsInfo2= [[DataCenter defaultDtacenter] valueForKey:@"ShopsInfo2"];
if ([self.player isPlaying]) {
[self stopGLViewVideo];
}
usleep(50*1000);
if (ShopsInfo2.shopsId) {
MineKanHuViewController *wodeKanHu=[[MineKanHuViewController alloc] init];
wodeKanHu.xinXiModel = ShopsInfo2;
[self.navigationController pushViewController:wodeKanHu animated:YES];
}else{
MinekanHuNotSelectShopController *notselct = [[MinekanHuNotSelectShopController alloc] init];
[self.navigationController pushViewController:notselct animated:YES];
}
}else if (indexPath.row ==3){
if ([self.player isPlaying]) {
[self stopGLViewVideo];
}
usleep(50*1000);
[self pushkankanView];
}else if (indexPath.row ==4){
if ([self.player isPlaying]) {
[self stopGLViewVideo];
}
usleep(50*1000);
MineKankanEditViewController *editVC = [[MineKankanEditViewController alloc] init];
[self.navigationController pushViewController:editVC animated:YES];
}else if (indexPath.row ==5){
if ([self.player isPlaying]) {
[self stopGLViewVideo];
}
usleep(50*1000);
//分享爱鱼奇
UMSocialMessageObject *messageObject = [UMSocialMessageObject messageObject];
UMShareImageObject *shareObject = [[UMShareImageObject alloc] init];
shareObject.title = @"爱鱼奇";
UIImage *shareImg = [UIImage imageNamed:@"ifish_sharaApp.jpg"];
shareObject.shareImage = shareImg;
//分享消息对象设置分享内容对象
messageObject.shareObject = shareObject;
[[UMSocialManager defaultManager] shareToPlatform:UMSocialPlatformType_WechatTimeLine messageObject:messageObject currentViewController:self completion:^(id result, NSError *error) {
if (error) {
[self.view makeToast:@"暂时无法打开微信"];
NSLog(@"************Share fail with error %@*********",error);
}else{
[[IfishUserObsever sharedInstance] addGoldWith:SHAREIFISHAPP addType:IFISHADDGOLDTYPE0];
NSLog(@"response data is %@",result);
}
}];
}
//视频录制
else if (indexPath.row ==6){
CameraRecordViewController*ca=[[CameraRecordViewController alloc]init];
ca.camera=self.contact;
[self.navigationController pushViewController:ca animated:YES];
}
else if (indexPath.row ==7){
IfishP2PPlayBackListViewController *cameraShopVC=[[IfishP2PPlayBackListViewController alloc]init];
cameraShopVC.camera = self.contact;
[self.navigationController pushViewController:cameraShopVC animated:YES];
}
}
-(void)pushkankanView{
LoveFishLiveListBaseViewController *kankanVc=[[LoveFishLiveListBaseViewController alloc] init];
[self.navigationController pushViewController:kankanVc animated:YES];
}
@end