4602 lines
177 KiB
Objective-C
4602 lines
177 KiB
Objective-C
//
|
||
// 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
|