From 3d80cf1dd9225676ad8c3756910d6a3a5405dc94 Mon Sep 17 00:00:00 2001 From: kai60 Date: Sun, 19 Jul 2020 19:12:56 +0800 Subject: [PATCH 01/13] =?UTF-8?q?=E6=9D=BE=E8=AF=BA=E6=8D=A2=E6=B0=B4?= =?UTF-8?q?=E9=97=AA=E9=80=80=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .DS_Store | Bin 10244 -> 10244 bytes .../IfishHttpRequest/AFNOHeaderHttpTool.m | 6 +++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.DS_Store b/.DS_Store index 1fbe5c137f6eff42b91861df7272508163f09fcb..c415a1c2a6fc382ce601c63332361540abcc7b30 100644 GIT binary patch delta 45 mcmZn(XbIRLEXp*+VY0iZ(qv5`UMAIo&2FM+`7wm{F#!NHw+!n5 delta 45 mcmZn(XbIRLEXve)e6qW!(qv5`UMAIq&2FM+`7wm{F#!Ndr46$H diff --git a/Ifish/Utinitys/IfishHttpRequest/AFNOHeaderHttpTool.m b/Ifish/Utinitys/IfishHttpRequest/AFNOHeaderHttpTool.m index c721128..83fd4e9 100644 --- a/Ifish/Utinitys/IfishHttpRequest/AFNOHeaderHttpTool.m +++ b/Ifish/Utinitys/IfishHttpRequest/AFNOHeaderHttpTool.m @@ -318,7 +318,11 @@ methodType url : (NSString *)url success:(void (^)(id response))success failure:(void (^)(NSError* err))failure { - + if ([deviceId isKindOfClass:[NSNumber class]]) + { + NSString*devid=[NSString stringWithFormat:@"%@",deviceId]; + deviceId=devid; + } NSString*macid=[[deviceId componentsSeparatedByString:@"_"] firstObject]; NSString*deviceType=[[deviceId componentsSeparatedByString:@"_"] lastObject]; From a346524901661b28b03ee56914bdd7ba48764413 Mon Sep 17 00:00:00 2001 From: kai60 Date: Mon, 20 Jul 2020 21:08:40 +0800 Subject: [PATCH 02/13] =?UTF-8?q?=E7=BB=9A=E5=A4=9A=E5=8A=A0=E7=83=AD?= =?UTF-8?q?=E5=88=B6=E5=86=B7=E9=97=AE=E9=A2=98=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CenterontrolControllers/XuTo/Xuanduo2fController.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Ifish/controllers/FishTinkController/maincontroller/CenterontrolControllers/XuTo/Xuanduo2fController.m b/Ifish/controllers/FishTinkController/maincontroller/CenterontrolControllers/XuTo/Xuanduo2fController.m index 059cdd4..5ba0ab7 100644 --- a/Ifish/controllers/FishTinkController/maincontroller/CenterontrolControllers/XuTo/Xuanduo2fController.m +++ b/Ifish/controllers/FishTinkController/maincontroller/CenterontrolControllers/XuTo/Xuanduo2fController.m @@ -608,7 +608,7 @@ { status=((Xuanduo3fModel*)self.dataModel).constTmep; } - if ([status isKindOfClass:[NSNull class]]||status ) { + if ([status isKindOfClass:[NSNull class]]||!status ) { status = @"0000"; } From db92b2796dc751863868237390bb97ccbed8e480 Mon Sep 17 00:00:00 2001 From: kai60 Date: Mon, 20 Jul 2020 21:14:00 +0800 Subject: [PATCH 03/13] =?UTF-8?q?=E7=89=88=E6=9C=AC=E5=8F=B7=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Ifish.xcodeproj/project.pbxproj | 8 ++++---- Ifish/Info.plist | 2 +- .../pushSetControllrs/AboutUsViewController.m | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Ifish.xcodeproj/project.pbxproj b/Ifish.xcodeproj/project.pbxproj index dc42e08..47a52ff 100644 --- a/Ifish.xcodeproj/project.pbxproj +++ b/Ifish.xcodeproj/project.pbxproj @@ -15753,7 +15753,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 29; + CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = WFX8GD5HFX; ENABLE_BITCODE = NO; ENABLE_TESTABILITY = YES; @@ -15828,7 +15828,7 @@ "$(PROJECT_DIR)/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/libAVCtrlIOS/libAVCtrl", "$(PROJECT_DIR)/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/libAVCtrl", ); - MARKETING_VERSION = 4.7.4; + MARKETING_VERSION = 5.1.6; ONLY_ACTIVE_ARCH = YES; OTHER_LDFLAGS = ( "-ObjC", @@ -15871,7 +15871,7 @@ CODE_SIGN_IDENTITY = "iPhone Distribution"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 29; + CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = WFX8GD5HFX; ENABLE_BITCODE = NO; ENABLE_TESTABILITY = YES; @@ -15946,7 +15946,7 @@ "$(PROJECT_DIR)/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/libAVCtrlIOS/libAVCtrl", "$(PROJECT_DIR)/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/libAVCtrl", ); - MARKETING_VERSION = 4.7.4; + MARKETING_VERSION = 5.1.6; ONLY_ACTIVE_ARCH = NO; OTHER_LDFLAGS = ( "-ObjC", diff --git a/Ifish/Info.plist b/Ifish/Info.plist index 13206fc..5bab6df 100644 --- a/Ifish/Info.plist +++ b/Ifish/Info.plist @@ -17,7 +17,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 5.1.5 + $(MARKETING_VERSION) CFBundleSignature ???? CFBundleURLTypes diff --git a/Ifish/controllers/IfishTabControllers/我的/mineControllers/pushSetControllrs/AboutUsViewController.m b/Ifish/controllers/IfishTabControllers/我的/mineControllers/pushSetControllrs/AboutUsViewController.m index e7ce529..546f3ad 100644 --- a/Ifish/controllers/IfishTabControllers/我的/mineControllers/pushSetControllrs/AboutUsViewController.m +++ b/Ifish/controllers/IfishTabControllers/我的/mineControllers/pushSetControllrs/AboutUsViewController.m @@ -25,7 +25,7 @@ // CFShow((__bridge CFTypeRef)(infoDic)); NSString *app_Version=[infoDic objectForKey:@"CFBundleShortVersionString"]; NSLog(@"app_Version%@",app_Version); - app_Version=@"4.7.5"; + app_Version=@"4.7.6"; NSString *versionStr = [NSString stringWithFormat:@"v%@",app_Version]; NSString *buildVersion = [infoDic objectForKey:@"CFBundleVersion"]; if (buildVersion.length > 0) { From 4bb3f1dcd5a2f211e18825dac795a72442ed23db Mon Sep 17 00:00:00 2001 From: kai60 Date: Wed, 22 Jul 2020 21:17:07 +0800 Subject: [PATCH 04/13] =?UTF-8?q?=E6=99=BA=E8=83=BD=E8=BF=9E=E6=8E=A5?= =?UTF-8?q?=E9=97=AA=E9=80=80=E9=97=AE=E9=A2=98=EF=BC=8C=E7=83=AD=E7=82=B9?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5=E6=8F=90=E7=A4=BA=E4=BF=AE=E5=A4=8D=EF=BC=8C?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E8=AF=BB=E8=AF=BB=E5=8F=96=E5=AE=9A=E6=97=B6?= =?UTF-8?q?=E5=99=A8hud=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Ifish/controllers/ConnectAauariumVC/ConnectingAquarVC.m | 5 +++++ .../CenterontrolControllers/XuTo/Xuanduo2SettingController.m | 2 +- Ifish/controllers/leftcontrollers/IFishHotpotUDPHelper.m | 2 +- .../leftcontrollers/SecondConnectWifiController.m | 2 +- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/Ifish/controllers/ConnectAauariumVC/ConnectingAquarVC.m b/Ifish/controllers/ConnectAauariumVC/ConnectingAquarVC.m index fae6f36..f337e3d 100644 --- a/Ifish/controllers/ConnectAauariumVC/ConnectingAquarVC.m +++ b/Ifish/controllers/ConnectAauariumVC/ConnectingAquarVC.m @@ -320,6 +320,11 @@ Copy NSString *deviceId; self.HUD = [MBProgressHUD showHUDAddedTo:self.view animated:YES]; self.HUD.mode = MBProgressHUDModeIndeterminate; self.HUD.labelText = msg; + if ([msg isEqualToString:@"Socket连接失败"]) + { + [self.HUD hide:YES afterDelay:3]; + [self endProgress]; + } } -(void)endProgress{ [self.progressView endProgressWithString:@"连接结束"]; diff --git a/Ifish/controllers/FishTinkController/maincontroller/CenterontrolControllers/XuTo/Xuanduo2SettingController.m b/Ifish/controllers/FishTinkController/maincontroller/CenterontrolControllers/XuTo/Xuanduo2SettingController.m index f23d97a..0e7cbeb 100644 --- a/Ifish/controllers/FishTinkController/maincontroller/CenterontrolControllers/XuTo/Xuanduo2SettingController.m +++ b/Ifish/controllers/FishTinkController/maincontroller/CenterontrolControllers/XuTo/Xuanduo2SettingController.m @@ -713,7 +713,7 @@ static NSString *setTimerflag = @"SetTimerCell"; NSLog(@"read str = %@",readString); NSData*readData=[dataContorl stringToHexData:readString]; [[Socketsingleton sharedInstance] soketWriteData:readData]; - [_indicatorView startAnimating]; + ; } else if ([group isKindOfClass: [XuanduoCycleModel class] ]) { diff --git a/Ifish/controllers/leftcontrollers/IFishHotpotUDPHelper.m b/Ifish/controllers/leftcontrollers/IFishHotpotUDPHelper.m index c1870c9..9f2c573 100644 --- a/Ifish/controllers/leftcontrollers/IFishHotpotUDPHelper.m +++ b/Ifish/controllers/leftcontrollers/IFishHotpotUDPHelper.m @@ -166,7 +166,7 @@ -(void)onUdpSocket:(AsyncUdpSocket *)sock didNotReceiveDataWithTag:(long)tag dueToError:(NSError *)error{ NSLog(@"dueToError%@",error); - [self postmsg:error.localizedDescription]; + [self postmsg:@"Socket连接失败"]; } diff --git a/Ifish/controllers/leftcontrollers/SecondConnectWifiController.m b/Ifish/controllers/leftcontrollers/SecondConnectWifiController.m index 0c8a5d1..01f5862 100644 --- a/Ifish/controllers/leftcontrollers/SecondConnectWifiController.m +++ b/Ifish/controllers/leftcontrollers/SecondConnectWifiController.m @@ -287,7 +287,7 @@ extern BOOL isfromCameraView; [self.view addSubview:_maclabel]; [self.view bringSubviewToFront:_maclabel]; self.bakbutton.userInteractionEnabled=YES; - [self mmPogressHUDdismiss]; + [self connectNormalView]; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [self.view makeToast:@"设备类型不匹配,请重新选择入口绑定"]; From 4ed0285813672ffb4c7e5ea1bf79cef6b048d64c Mon Sep 17 00:00:00 2001 From: kai60 Date: Thu, 23 Jul 2020 22:10:59 +0800 Subject: [PATCH 05/13] =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E5=AE=9A=E6=97=B6?= =?UTF-8?q?=E5=99=A8=E5=8E=BB=E9=99=A4hud=EF=BC=8C=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E9=A2=84=E8=AD=A6=E6=B8=A9=E5=BA=A6=EF=BC=8C=E7=AB=8B=E5=8D=B3?= =?UTF-8?q?=E6=9B=B4=E6=96=B0UI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Ifish.xcodeproj/project.pbxproj | 4 ++-- .../XuTo/Xuanduo2SettingController.m | 17 +++++++---------- Ifish/controllers/HotBar/IfishHotBarVc.m | 6 ++++++ 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/Ifish.xcodeproj/project.pbxproj b/Ifish.xcodeproj/project.pbxproj index 47a52ff..37019c6 100644 --- a/Ifish.xcodeproj/project.pbxproj +++ b/Ifish.xcodeproj/project.pbxproj @@ -15753,7 +15753,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 3; DEVELOPMENT_TEAM = WFX8GD5HFX; ENABLE_BITCODE = NO; ENABLE_TESTABILITY = YES; @@ -15871,7 +15871,7 @@ CODE_SIGN_IDENTITY = "iPhone Distribution"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 3; DEVELOPMENT_TEAM = WFX8GD5HFX; ENABLE_BITCODE = NO; ENABLE_TESTABILITY = YES; diff --git a/Ifish/controllers/FishTinkController/maincontroller/CenterontrolControllers/XuTo/Xuanduo2SettingController.m b/Ifish/controllers/FishTinkController/maincontroller/CenterontrolControllers/XuTo/Xuanduo2SettingController.m index 0e7cbeb..e28d17c 100644 --- a/Ifish/controllers/FishTinkController/maincontroller/CenterontrolControllers/XuTo/Xuanduo2SettingController.m +++ b/Ifish/controllers/FishTinkController/maincontroller/CenterontrolControllers/XuTo/Xuanduo2SettingController.m @@ -706,7 +706,7 @@ static NSString *setTimerflag = @"SetTimerCell"; NSData*selctorData=[dataContorl stringToHexData:selectorString]; [[Socketsingleton sharedInstance] soketWriteData:selctorData]; - [_indicatorView startAnimating]; + // [_indicatorView startAnimating]; readModel.selectorNumber = timerModel.selectorNumber; NSString*readString=[NSString stringWithFormat:@"%@%@%@",readModel.description,readModel.selectorNumber,readModel.crc16str]; @@ -1547,9 +1547,7 @@ static NSString *setTimerflag = @"SetTimerCell"; } NSLog(@"dataarr.count = %ld",dataArr.count); - [self.XuTohud hidmyHud]; - [self.indicatorView stopAnimating]; - [self.tableView reloadData]; + } else if (_selectSection-2<_titieArr.count && _selectSection-2>=0 && [readTimer isEqualToString:@"0119"]) { @@ -1561,17 +1559,16 @@ static NSString *setTimerflag = @"SetTimerCell"; [dataArr addObject:_cycleModel]; - [self.XuTohud hidmyHud]; - [self.indicatorView stopAnimating]; - [self.tableView reloadData]; + } if ([readTimer isEqualToString:@"0108"] || [readTimer isEqualToString:@"0105"]) { [Xuanduo2DataUtility readSocketDataWithBackMsgModel:self.dataModel addWithBackData:data type:self.currentdevice.type]; [self refreshWithData:self.dataModel]; - [self.XuTohud hidmyHud]; - [self.indicatorView stopAnimating]; - [self.tableView reloadData]; + } + [self.XuTohud hidmyHud]; + [self.indicatorView stopAnimating]; + [self.tableView reloadData]; } -(void)ifishDeviceLogInFail{ diff --git a/Ifish/controllers/HotBar/IfishHotBarVc.m b/Ifish/controllers/HotBar/IfishHotBarVc.m index 1573393..5c7ede5 100644 --- a/Ifish/controllers/HotBar/IfishHotBarVc.m +++ b/Ifish/controllers/HotBar/IfishHotBarVc.m @@ -184,6 +184,12 @@ Assign BOOL isInitHostoryView; self.vo.wornCode=code; self.vo.upTeamp=up; self.vo.downTeamp=down; + IfishHotBarVo*vo1=self.datas[1]; + if (!IsEmptyStr(self.vo.upTeamp)) { + vo1.subTitle = [NSString stringWithFormat:@"%.1f°c~%.1f°c",[self.vo.downTeamp floatValue],[self.vo.upTeamp floatValue]]; + } + + [self.mainTableView reloadData]; [self setTeampletureWithUp:self.vo.upTeamp andDown:self.vo.downTeamp andHnum:0 andWarmC:self.vo.wornCode]; } From 4addf7e817e5dc2a8535fdf0243c21a3067e8316 Mon Sep 17 00:00:00 2001 From: kai60 Date: Fri, 24 Jul 2020 11:25:48 +0800 Subject: [PATCH 06/13] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E5=90=8D=E7=A7=B0=E5=90=8E=E8=AE=BE=E7=BD=AE=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E4=B8=8D=E7=94=9F=E6=95=88=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../XuTo/Xuanduo2SettingController.m | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/Ifish/controllers/FishTinkController/maincontroller/CenterontrolControllers/XuTo/Xuanduo2SettingController.m b/Ifish/controllers/FishTinkController/maincontroller/CenterontrolControllers/XuTo/Xuanduo2SettingController.m index e28d17c..c094a00 100644 --- a/Ifish/controllers/FishTinkController/maincontroller/CenterontrolControllers/XuTo/Xuanduo2SettingController.m +++ b/Ifish/controllers/FishTinkController/maincontroller/CenterontrolControllers/XuTo/Xuanduo2SettingController.m @@ -26,6 +26,8 @@ #import "Xuanduo2TimerModel.h" #import "IfishDeviceInfo.h" #import "NSString+Add.h" +#import "XuToControlName.h" +#import "UserExtendataArchaver.h" #define kBtnTag 500 #define kSwitchBtnTag 600 @@ -120,11 +122,22 @@ static NSString *setTimerflag = @"SetTimerCell"; } - (void)setupTable { - _titieArr = @[@"循环泵",@"增氧泵",@"灯光1",@"灯光2",@"造浪泵",@"杀菌灯"]; + + XuToControlName *name = [UserExtendataArchaver currentNewXuToControlName:self.currentdevice.macAddress]; + if ([self.currentdevice.type isEqualToString:DECICE_TYPE_XUANDUO3F]) + { + name=[UserExtendataArchaver currentPetsXuToControlName:self.currentdevice.macAddress]; + } + // _titieArr = @[@"循环泵",@"增氧泵",@"灯光1",@"灯光2",@"造浪泵",@"杀菌灯"]; + _titieArr = @[name.xunhuanPump,name.zengyangPump,name.light1,name.light2,name.zaolangPump,name.shajunLight]; + _imgArr = @[@"xunhuan_big",@"gas_big",@"light_big",@"light_big",@"wave_big",@"shajun_big"]; + + + if ([self.currentdevice.type isEqualToString:DECICE_TYPE_XUANDUO3F]) { - _titieArr = @[@"照明",@"换气",@"杀菌"]; + _titieArr = @[name.xunhuanPump,name.zaolangPump,name.light1]; _imgArr = @[@"照明开",@"换气开",@"杀菌开"]; } From 68d139a184738589c4c777de033a7c6c6f8c459d Mon Sep 17 00:00:00 2001 From: kai60 Date: Sat, 3 Oct 2020 11:17:25 +0800 Subject: [PATCH 07/13] =?UTF-8?q?=E6=B3=A8=E5=86=8C=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E5=9B=BD=E5=AE=B6=E4=BB=A3=E7=A0=81=E9=97=AA=E9=80=80=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../XWCountryCode/XWCountryCodeController.m | 52 ++++++++++--------- 1 file changed, 28 insertions(+), 24 deletions(-) diff --git a/Ifish/controllers/logAddRegistController/XWCountryCode/XWCountryCodeController.m b/Ifish/controllers/logAddRegistController/XWCountryCode/XWCountryCodeController.m index 0f9130e..69335a8 100755 --- a/Ifish/controllers/logAddRegistController/XWCountryCode/XWCountryCodeController.m +++ b/Ifish/controllers/logAddRegistController/XWCountryCode/XWCountryCodeController.m @@ -12,11 +12,11 @@ #define CURR_LANG ([[NSLocale preferredLanguages] objectAtIndex:0]) #define LanguageIsEnglish ([CURR_LANG isEqualToString:@"en-US"] || [CURR_LANG isEqualToString:@"en-CA"] || [CURR_LANG isEqualToString:@"en-GB"] || [CURR_LANG isEqualToString:@"en-CN"] || [CURR_LANG isEqualToString:@"en"]) -@interface XWCountryCodeController(){ +@interface XWCountryCodeController(){ //国际代码主tableview UITableView *countryCodeTableView; //搜索 - UISearchDisplayController *searchController; + UISearchController *searchController; // UISearchController *searchController; UISearchBar *searchBar; //代码字典 @@ -53,7 +53,7 @@ -(void)creatSubviews{ searchResultValuesArray = [[NSMutableArray alloc] init]; - countryCodeTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 20, self.view.bounds.size.width, self.view.bounds.size.height-20) style:UITableViewStylePlain]; + countryCodeTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 20, self.view.bounds.size.width, self.view.bounds.size.height-40) style:UITableViewStylePlain]; [self.view addSubview:countryCodeTableView]; //自动调整自己的宽度,保证与superView左边和右边的距离不变。 [countryCodeTableView setAutoresizingMask:UIViewAutoresizingFlexibleWidth]; @@ -61,18 +61,15 @@ [countryCodeTableView setDelegate:self]; [countryCodeTableView setSectionIndexBackgroundColor:[UIColor clearColor]]; - searchBar = [[UISearchBar alloc] init]; - [searchBar sizeToFit]; - [searchBar setDelegate:self]; - //关闭系统自动联想和首字母大写功能 - [searchBar setAutocapitalizationType:UITextAutocapitalizationTypeNone]; - [countryCodeTableView setTableHeaderView:searchBar]; - - searchController = [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self]; - [searchController setDelegate:self]; - searchController.searchResultsDataSource = self; - searchController.searchResultsDelegate = self; + + searchController = [[UISearchController alloc]initWithSearchResultsController:nil]; + [searchController setSearchResultsUpdater:self]; + searchController.dimsBackgroundDuringPresentation=NO; + searchController.definesPresentationContext=NO; + searchController.searchBar.delegate=self; + countryCodeTableView.tableHeaderView=searchController.searchBar; + searchBar=searchController.searchBar; NSString *plistPathCH = [[NSBundle mainBundle] pathForResource:@"sortedChnames" ofType:@"plist"]; NSString *plistPathEN = [[NSBundle mainBundle] pathForResource:@"sortedEnames" ofType:@"plist"]; @@ -91,25 +88,29 @@ } -//搜索 --(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{ +-(void)updateSearchResultsForSearchController:(UISearchController *)searchController +{ NSLog(@"%s",__FUNCTION__); [searchResultValuesArray removeAllObjects]; for (NSArray *array in [sortedNameDict allValues]) { for (NSString *value in array) { - if ([value containsString:searchBar.text]) { + if ([value containsString:searchController.searchBar.text]) { [searchResultValuesArray addObject:value]; } } } - [searchController.searchResultsTableView reloadData]; + + + [countryCodeTableView reloadData]; } + + #pragma mark - UITableView //section -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ - if (tableView == countryCodeTableView) { + if (!searchController.isActive) { return [sortedNameDict allKeys].count; }else{ return 1; @@ -117,7 +118,7 @@ } //row -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ - if (tableView == countryCodeTableView) { + if (!searchController.isActive) { NSArray *array = [sortedNameDict objectForKey:[indexArray objectAtIndex:section]]; return array.count; @@ -134,7 +135,7 @@ //初始化cell -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ - if (tableView == countryCodeTableView) { + if (!searchController.isActive) { static NSString *ID1 = @"cellIdentifier1"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID1]; if (!cell) { @@ -164,7 +165,7 @@ //indexTitle -(NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView{ - if (tableView == countryCodeTableView) { + if (!searchController.isActive) { return indexArray; }else{ return nil; @@ -172,7 +173,7 @@ } // -(NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index{ - if (tableView == countryCodeTableView) { + if (!searchController.isActive) { return index; }else{ return 0; @@ -181,7 +182,7 @@ - (CGFloat) tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { - if (tableView == countryCodeTableView) { + if (!searchController.isActive) { if (section == 0) { return 0; } @@ -212,6 +213,9 @@ if (self.returnCountryCodeBlock != nil) { self.returnCountryCodeBlock(cell.textLabel.text); } + if (searchController.isActive) { + [searchController dismissViewControllerAnimated:YES completion:nil]; + } [self dismissViewControllerAnimated:YES completion:nil]; } From 55d25d8fbacc93cb706b455bbec7ee0494b96046 Mon Sep 17 00:00:00 2001 From: kai60 Date: Sat, 3 Oct 2020 16:49:18 +0800 Subject: [PATCH 08/13] =?UTF-8?q?=E5=BD=95=E5=88=B6=E5=92=8C=E5=9B=9E?= =?UTF-8?q?=E6=94=BE1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .DS_Store | Bin 10244 -> 10244 bytes .../设备/IfishDeviceViewController.m | 7 +- .../IfishP2PMonitorController.m | 19 +++- .../CameraBottomHView.m | 6 +- .../CameraRecordViewController.h | 4 + .../CameraRecordViewController.m | 82 +++++++++++++++++- .../images/equipment_iocn_videoback | Bin 0 -> 34441 bytes .../images/equipment_iocn_videorecord | Bin 0 -> 23707 bytes 8 files changed, 104 insertions(+), 14 deletions(-) create mode 100644 Ifish/controllers/IfishYooseeFile/IfishYooseeSource/IFISHYooseeImg.bundle/images/equipment_iocn_videoback create mode 100644 Ifish/controllers/IfishYooseeFile/IfishYooseeSource/IFISHYooseeImg.bundle/images/equipment_iocn_videorecord diff --git a/.DS_Store b/.DS_Store index c415a1c2a6fc382ce601c63332361540abcc7b30..56287ef998acfb52120bb9c370c237a6cb98af99 100644 GIT binary patch delta 164 zcmZn(XbG6$F8U^hRb&So9~Hdbc!{>PKuMU_Ny^Icq$a`KZH7#KKGEH>SGk#fip eDv^R!VzQYW;fALuFdQU+*C0thzS7ku{3}H delta 69 zcmZn(XbG6$LAU^hRb)@B|7HdbbpDGrkxMfI6g3mAa3(&nq8MqCpcayGLoaAT94 G%>)3+?G$MM diff --git a/Ifish/controllers/IfishTabControllers/设备/IfishDeviceViewController.m b/Ifish/controllers/IfishTabControllers/设备/IfishDeviceViewController.m index 201d9a5..637b789 100644 --- a/Ifish/controllers/IfishTabControllers/设备/IfishDeviceViewController.m +++ b/Ifish/controllers/IfishTabControllers/设备/IfishDeviceViewController.m @@ -1283,12 +1283,7 @@ Assign BOOL isPush; } else if ([model.type isEqualToString:@"camera"]){ - // self.hidesBottomBarWhenPushed = YES; - // IfishP2PPlayBackListViewController *cameraShopVC=[[IfishP2PPlayBackListViewController alloc]init]; - // cameraShopVC.camera = model.camera; - // [self.navigationController pushViewController:cameraShopVC animated:YES]; - // self.hidesBottomBarWhenPushed = NO; - + //切换时主动 断开 soket [[Socketsingleton sharedInstance] cutOffSocket]; //进入摄像头页面 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PMonitorController.m b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PMonitorController.m index 5b4db33..19c6aad 100644 --- a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PMonitorController.m +++ b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PMonitorController.m @@ -640,7 +640,7 @@ Strong UIImage *screenShotImage;//截图 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))]; + UIView *bottomHView = [[UIView alloc] initWithFrame:CGRectMake(0.0, CGRectGetMaxY(self.segControl.frame) + 10, width, height-CGRectGetMaxY(self.segControl.frame)-10)]; bottomHView.backgroundColor = JWUIColorFromRGB(0xdddddd); [self.view addSubview:bottomHView]; self.bottomFishHView = bottomHView; @@ -4570,6 +4570,23 @@ GWP2PCallErrorNotSupport, }]; } + //视频录制 + 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]; + + } + } diff --git a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishcameraBottomHView/CameraBottomHView.m b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishcameraBottomHView/CameraBottomHView.m index 960311a..90c4170 100644 --- a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishcameraBottomHView/CameraBottomHView.m +++ b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishcameraBottomHView/CameraBottomHView.m @@ -68,10 +68,10 @@ static NSString *bootomRecCellIdentifier = @"IfishRecVideoViewCell"; ////录制回放功能打开 //_dataImgArray = @[LXImageWithImageName(@"devicename_iocn_screenshots.png"),LXImageWithImageName(@"devicename_iocn_gallery.png"),LXImageWithImageName(@"devicename_iocn_rec.png"),LXImageWithImageName(@"devicename_iocn_playback.png"),LXImageWithImageName(@"devicename_iocn_care.png"),LXImageWithImageName(@"devicename_iocn_look.png"),LXImageWithImageName(@"devicename_iocn_Ilookat.png"),LXImageWithImageName(@"devicename_iocn_look.png"),LXImageWithImageName(@"devicename_iocn_look.png")]; //equipment_iocn_playback - _dataImgArray = @[LXImageWithImageName(@"equipment_iocn_printscreen"),LXImageWithImageName(@"equipment_iocn_gallery"),LXImageWithImageName(@"equipment_iocn_care"),LXImageWithImageName(@"equipment_iocn_look"),LXImageWithImageName(@"equipment_iocn_mylook"),LXImageWithImageName(@"equipment_iocn_share")]; + _dataImgArray = @[LXImageWithImageName(@"equipment_iocn_printscreen"),LXImageWithImageName(@"equipment_iocn_gallery"),LXImageWithImageName(@"equipment_iocn_care"),LXImageWithImageName(@"equipment_iocn_look"),LXImageWithImageName(@"equipment_iocn_mylook"),LXImageWithImageName(@"equipment_iocn_share"),LXImageWithImageName(@"equipment_iocn_videorecord"),LXImageWithImageName(@"equipment_iocn_videoback")]; //_dataNameArray = @[@"截图",@"图库",@"录制",@"回放",@"我的看护",@"爱鱼看看",@"我的看看",@"",@""]; - _dataNameArray = @[@"截图",@"图库",@"我的看护",@"爱鱼看看",@"我的看看",@"分享爱鱼奇"]; + _dataNameArray = @[@"截图",@"图库",@"我的看护",@"爱鱼看看",@"我的看看",@"分享爱鱼奇",@"视频录制",@"视频回放"]; } #pragma mark - UICollectionViewDataSource @@ -84,7 +84,7 @@ static NSString *bootomRecCellIdentifier = @"IfishRecVideoViewCell"; - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{ //return 9; - return 6; + return 8; } #pragma mark 设置item内容 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishcameraBottomHView/CameraRecordViewController.h b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishcameraBottomHView/CameraRecordViewController.h index 172aa7b..8b03ef1 100644 --- a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishcameraBottomHView/CameraRecordViewController.h +++ b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishcameraBottomHView/CameraRecordViewController.h @@ -9,7 +9,11 @@ #import "BaseViewController.h" #import "IfishCameraModel.h" #import "MBProgressHUD.h" +#import + + @interface CameraRecordViewController : BaseViewController @property (nonatomic,strong) IfishCameraModel *camera; +@property (nonatomic, strong) GWP2PVideoPlayer *player;//摄像头页面 @property (strong, nonatomic) MBProgressHUD *progressAlert; @end diff --git a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishcameraBottomHView/CameraRecordViewController.m b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishcameraBottomHView/CameraRecordViewController.m index 391e087..e2852f6 100644 --- a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishcameraBottomHView/CameraRecordViewController.m +++ b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishcameraBottomHView/CameraRecordViewController.m @@ -25,7 +25,7 @@ static const CGFloat ToastFade = 0.2; @property(nonatomic) NSInteger minute; @property(nonatomic,strong) NSTimer*timer; @property(nonatomic,copy) NSString *timestr; - +@property (nonatomic, assign) BOOL isConnectCamera; @property(nonatomic) BOOL isRecording; @property(nonatomic) NSIndexPath *timerIndex; @property(nonatomic) NSIndexPath *switchIndex; @@ -92,7 +92,78 @@ static const CGFloat ToastFade = 0.2; [self.view addSubview:self.tab]; } +-(void)connectDevice{ + + UserModel *model=[dataContorl getUserInfo]; + NSString *userIDName=[NSString stringWithFormat:@"%d",(int)[model.gwellUserID integerValue]&0x7fffffff]; + //初始化设备 + if ([GWP2PClient sharedClient].linkStatus != P2PLinkStatusOK) { + NSLog(@"正在检查P2P连接状态"); + BOOL 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.失败,不能操作设备"); + } + } + +} +//连接到摄像头 +-(void)connectCamera{ + [[GWP2PClient sharedClient] getMultipleDeviceStatusWithDeviceID:self.camera.cameraId password:self.camera.cameraPass completionBlock:^(GWP2PClient *client, BOOL success, NSDictionary *dataDictionary) { + + 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; + } + }]; +} +#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.camera.cameraId password:self.camera.cameraPass definition:GWP2PPTZDefinitionSD calling:^(NSDictionary *parameters) { + //呼叫设备 + NSLog(@"[p2pCallDevice-Calling],paras=%@",parameters); + + } accept:^(NSDictionary *parameters) { + + NSLog(@"[p2pCallDevice-Accept],paras=%@",parameters); + + } reject:^(GWP2PCallError error, NSString *errorCode) { + } ready:^{ + } allowLAN:YES]; + + + + }); +} - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. @@ -623,12 +694,15 @@ static const CGFloat ToastFade = 0.2; [self startTostVIew]; if (swt.isOn) { - _isManual = YES; + _isManual = NO; [[P2PClient sharedClient] setRemoteRecordWithId:self.camera.cameraId - password:self.camera.cameraPass state:SETTING_VALUE_REMOTE_RECORD_STATE_OFF]; + password:self.camera.cameraPass state:SETTING_VALUE_REMOTE_RECORD_STATE_ON]; + [[P2PClient sharedClient] setDeviceRecordType:GWP2PRecordTypeSchedule withDeviceID:self.camera.cameraId devicePassword:self.camera.cameraPass completionBlock:^(GWP2PClient *client, BOOL success, NSDictionary *dataDictionary) { + NSLog(@"data=%@",dataDictionary); + }];; }else{ - _isManual = NO; + _isManual = YES; [[P2PClient sharedClient] setRemoteRecordWithId:self.camera.cameraId password:self.camera.cameraPass state:SETTING_VALUE_REMOTE_RECORD_STATE_ON]; } diff --git a/Ifish/controllers/IfishYooseeFile/IfishYooseeSource/IFISHYooseeImg.bundle/images/equipment_iocn_videoback b/Ifish/controllers/IfishYooseeFile/IfishYooseeSource/IFISHYooseeImg.bundle/images/equipment_iocn_videoback new file mode 100644 index 0000000000000000000000000000000000000000..3c8ef5c83a23632c61ed0d9090d0cd1e052a6e5c GIT binary patch literal 34441 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 literal 0 HcmV?d00001 From 3356311c86d88ac555f9a87c4d022746fdea5975 Mon Sep 17 00:00:00 2001 From: kai60 Date: Sat, 17 Oct 2020 22:41:26 +0800 Subject: [PATCH 09/13] =?UTF-8?q?=E9=98=B6=E6=AE=B5=E6=80=A7=E5=AE=8C?= =?UTF-8?q?=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .DS_Store | Bin 10244 -> 10244 bytes Ifish.xcodeproj/project.pbxproj | 12 + .../CommonLogin/UMComLoginViewController.xib | 57 +- .../IfishP2PPlayBackListViewController.h | 3 + .../IfishP2PPlayBackListViewController.m | 622 ++++++--------- .../IfishP2PPlayBackListViewController.xib | 235 ++++++ .../IfishP2PPlayBack/IfishPlaybackViewCell.h | 9 +- .../IfishP2PPlayBack/IfishPlaybackViewCell.m | 32 +- .../IfishPlaybackViewCell.xib | 102 ++- .../CameraRecordViewController.m | 755 ++++-------------- .../ifishUserModel/TemperatureSetModel.h | 2 +- Ifish/views/mypicView/DatePickerCustomView.h | 16 + Ifish/views/mypicView/DatePickerCustomView.m | 114 +++ 13 files changed, 899 insertions(+), 1060 deletions(-) create mode 100644 Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PPlayBack/IfishP2PPlayBackListViewController.xib create mode 100644 Ifish/views/mypicView/DatePickerCustomView.h create mode 100644 Ifish/views/mypicView/DatePickerCustomView.m diff --git a/.DS_Store b/.DS_Store index 56287ef998acfb52120bb9c370c237a6cb98af99..343b7a6ad7bf8fca885df27f1cf94b2cb1866edd 100644 GIT binary patch delta 67 zcmZn(XbG6$LAU^hRb)@B|7Hdba0?&isjq6SP47=V=0=BuJcToW5|HnS^mW09N9 F1OTrk6ng*w delta 164 zcmZn(XbG6$F8U^hRb&So9~Hdbc!{>PKuMU_Ny^Icq$a`KZH7#KKGEH>SGk#fip eDv^R!VzQYW;fALuFdQU+*C0thzS7ku{3}H diff --git a/Ifish.xcodeproj/project.pbxproj b/Ifish.xcodeproj/project.pbxproj index 37019c6..6d0ace8 100644 --- a/Ifish.xcodeproj/project.pbxproj +++ b/Ifish.xcodeproj/project.pbxproj @@ -2245,6 +2245,9 @@ C024B7B12379668B00509424 /* NSMutableArray+AvoidCrash.h in Headers */ = {isa = PBXBuildFile; fileRef = C024B79D2379668B00509424 /* NSMutableArray+AvoidCrash.h */; }; C02ED596249E3B7300CAC37D /* InfoByImageViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = C02ED594249E3B7300CAC37D /* InfoByImageViewController.h */; }; C02ED597249E3B7300CAC37D /* InfoByImageViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C02ED595249E3B7300CAC37D /* InfoByImageViewController.m */; }; + C072196A253AE2290065CF17 /* IfishP2PPlayBackListViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = C0721969253AE2290065CF17 /* IfishP2PPlayBackListViewController.xib */; }; + C072196D253B1F4F0065CF17 /* DatePickerCustomView.h in Headers */ = {isa = PBXBuildFile; fileRef = C072196B253B1F4F0065CF17 /* DatePickerCustomView.h */; }; + C072196E253B1F4F0065CF17 /* DatePickerCustomView.m in Sources */ = {isa = PBXBuildFile; fileRef = C072196C253B1F4F0065CF17 /* DatePickerCustomView.m */; }; C0837A57244FF5510034FEC5 /* EGOCache.m in Sources */ = {isa = PBXBuildFile; fileRef = C0837A55244FF5500034FEC5 /* EGOCache.m */; }; C0837A58244FF5510034FEC5 /* EGOCache.h in Headers */ = {isa = PBXBuildFile; fileRef = C0837A56244FF5500034FEC5 /* EGOCache.h */; }; C0873EE12491060000D47D34 /* ESPUDPSocketClient.h in Headers */ = {isa = PBXBuildFile; fileRef = C0873EBE249105FF00D47D34 /* ESPUDPSocketClient.h */; }; @@ -5704,6 +5707,9 @@ C024B79D2379668B00509424 /* NSMutableArray+AvoidCrash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSMutableArray+AvoidCrash.h"; sourceTree = ""; }; C02ED594249E3B7300CAC37D /* InfoByImageViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = InfoByImageViewController.h; sourceTree = ""; }; C02ED595249E3B7300CAC37D /* InfoByImageViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = InfoByImageViewController.m; sourceTree = ""; }; + C0721969253AE2290065CF17 /* IfishP2PPlayBackListViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = IfishP2PPlayBackListViewController.xib; sourceTree = ""; }; + C072196B253B1F4F0065CF17 /* DatePickerCustomView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DatePickerCustomView.h; sourceTree = ""; }; + C072196C253B1F4F0065CF17 /* DatePickerCustomView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DatePickerCustomView.m; sourceTree = ""; }; C0837A55244FF5500034FEC5 /* EGOCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EGOCache.m; sourceTree = ""; }; C0837A56244FF5500034FEC5 /* EGOCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EGOCache.h; sourceTree = ""; }; C0873EBE249105FF00D47D34 /* ESPUDPSocketClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ESPUDPSocketClient.h; sourceTree = ""; }; @@ -6606,6 +6612,7 @@ 3D1C4FF3221A9EDD0096AE43 /* P2PPlayingbackVC.m */, 3D1C4FEF221A9EDD0096AE43 /* PlayBaseViewController.h */, 3D1C4FF5221A9EDD0096AE43 /* PlayBaseViewController.m */, + C0721969253AE2290065CF17 /* IfishP2PPlayBackListViewController.xib */, ); path = IfishP2PPlayBack; sourceTree = ""; @@ -10156,6 +10163,8 @@ 883E79771D48B0280030E075 /* mypicView */ = { isa = PBXGroup; children = ( + C072196B253B1F4F0065CF17 /* DatePickerCustomView.h */, + C072196C253B1F4F0065CF17 /* DatePickerCustomView.m */, 883E79781D48B0280030E075 /* Box.png */, 883E79791D48B0280030E075 /* MydatePickerView.h */, 883E797A1D48B0280030E075 /* MydatePickerView.m */, @@ -12875,6 +12884,7 @@ C0873EF62491060000D47D34 /* ESPTools.h in Headers */, CB8B6468230F7F980032EB24 /* IfishMainInfoCell.h in Headers */, C0EA8A2A23AF74F4003DC53B /* SDWebImageOperation.h in Headers */, + C072196D253B1F4F0065CF17 /* DatePickerCustomView.h in Headers */, CB484E1122B8C8C90075F050 /* version.h in Headers */, 3D1C5122221A9EE00096AE43 /* IfishRecVideoViewCell.h in Headers */, CB48207C2334E99700A50C92 /* IQTextView.h in Headers */, @@ -14533,6 +14543,7 @@ 882956DD1DBDA3A300E9DDD7 /* ifishdropview_add_device@3x.png in Resources */, 881478241E712A2700BFB79C /* task_openShareCamera@3x.png in Resources */, 887492511E7BB58A00CDA284 /* gold_background@3x.png in Resources */, + C072196A253AE2290065CF17 /* IfishP2PPlayBackListViewController.xib in Resources */, 882957961DBDA3A400E9DDD7 /* xutobtn2_on@3x.png in Resources */, 885606AC1E32081C0002C17C /* sharing_v_attestation@3x.png in Resources */, 881A1D331DD2C31500BA1AF4 /* kankanlook_icon_sentiment@2x.png in Resources */, @@ -14628,6 +14639,7 @@ 883E78621D48A5E50030E075 /* RightViewController.m in Sources */, CBA61675228F9AB100ED380D /* NSLayoutConstraint+MASDebugAdditions.m in Sources */, 886FB1A11E5A9D0A00256332 /* FishDocSection0ViewImgCell.m in Sources */, + C072196E253B1F4F0065CF17 /* DatePickerCustomView.m in Sources */, 881672381EA5DE2B00BEBF23 /* UMComSimpleAssociatedFeedTableViewCell.m in Sources */, 883E76431D4897570030E075 /* TwoControlBackmsgmodel.m in Sources */, 3D3512DB2159C172009DDB0F /* IfishHotBarModifyNameVc.m in Sources */, diff --git a/Ifish/UMCommunity/UMCommunitySDK/UMComModules/CommonLogin/UMComLoginViewController.xib b/Ifish/UMCommunity/UMCommunitySDK/UMComModules/CommonLogin/UMComLoginViewController.xib index be89668..cde5bf8 100644 --- a/Ifish/UMCommunity/UMCommunitySDK/UMComModules/CommonLogin/UMComLoginViewController.xib +++ b/Ifish/UMCommunity/UMCommunitySDK/UMComModules/CommonLogin/UMComLoginViewController.xib @@ -1,9 +1,10 @@ - - + + + - - + + @@ -20,22 +21,22 @@ - + - + - - + + - - + + - + @@ -53,7 +54,7 @@ - + @@ -71,14 +72,14 @@ - - + + - + @@ -112,38 +113,38 @@ - - + - + - + diff --git a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PPlayBack/IfishP2PPlayBackListViewController.h b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PPlayBack/IfishP2PPlayBackListViewController.h index b06616a..c3827f3 100644 --- a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PPlayBack/IfishP2PPlayBackListViewController.h +++ b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PPlayBack/IfishP2PPlayBackListViewController.h @@ -11,5 +11,8 @@ #import "IfishCameraModel.h" @interface IfishP2PPlayBackListViewController : BaseViewController @property (nonatomic,strong) IfishCameraModel *camera; +@property (weak, nonatomic) IBOutlet UIButton *startBtn; +@property (weak, nonatomic) IBOutlet UIButton *endBtn; +@property (weak, nonatomic) IBOutlet UIButton *searchBtn; @end diff --git a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PPlayBack/IfishP2PPlayBackListViewController.m b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PPlayBack/IfishP2PPlayBackListViewController.m index 6c29c4d..5ce3061 100644 --- a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PPlayBack/IfishP2PPlayBackListViewController.m +++ b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PPlayBack/IfishP2PPlayBackListViewController.m @@ -10,13 +10,15 @@ #import "CameraNoParyBackVideoView.h" #import "P2PClient.h" #import "IfishPlaybackViewCell.h" +#import +#import "DatePickerCustomView.h" #define BACKVIEW_ROWH 60 #define ANIM_VIEW_WIDTH_AND_HEIGHT 80 //新 #import "P2PPlayingbackVC.h" @interface IfishP2PPlayBackListViewController () -@property(nonatomic,strong)UITableView *tableView; +@property(nonatomic,strong) IBOutlet UITableView *tableView; @property(retain, nonatomic) NSMutableArray *playbackFiles; @property(retain, nonatomic) NSMutableArray *playbackSize; @property(retain, nonatomic) NSMutableArray *timesData; @@ -26,24 +28,27 @@ @property(retain, nonatomic) NSMutableArray *timesDataMore; @property(nonatomic,strong) CameraNoParyBackVideoView *noDataView; @property(strong, nonatomic) NSString *nextEndDate; -@property (nonatomic) BOOL isloadMore;//是否更多 +@property (nonatomic) BOOL hasSDCard;//是否更多 @property(strong, nonatomic) UIView *movieView; @property (nonatomic) BOOL isInItDevice; //是否连接设备 +@property (nonatomic, strong) DatePickerCustomView *datePickView; +@property (nonatomic, strong) NSDate *startDate; +@property (nonatomic, strong) NSDate *endDate; @end @implementation IfishP2PPlayBackListViewController - (void)viewDidLoad { [super viewDidLoad]; - [[P2PClient sharedClient] setIsClearPlaybackFilesLength:YES];//isClearPlaybackFilesLength - // Do any additional setup after loading the view. - _isloadMore = NO; - _isInItDevice = NO; + + _hasSDCard = NO; + self.playbackFiles = [NSMutableArray arrayWithCapacity:0]; self.playbackSize = [NSMutableArray arrayWithCapacity:0]; self.playbackFilesMore = [NSMutableArray arrayWithCapacity:0]; self.playbackSizeMore = [NSMutableArray arrayWithCapacity:0]; - [self addTitleViewWithTitle:@"回放"]; + [self addTitleViewWithTitle:@"视频回放"]; + [self connectDevice]; [self initUI]; //[[P2PClient sharedClient] setPlaybackDelegate:self]; @@ -53,57 +58,35 @@ -(void)connectDevice{ - //LoginResult *loginResult = [UDManager getLoginInfo]; - //8225账号 - // NSString * P2PVerifyCode1 = @"1528438234"; - // NSString * P2PVerifyCode2 = @"992805759"; - // NSString *UserID = @"-2144354932"; - - UserModel *model=[[DataCenter defaultDtacenter] valueForKey:@"UserLogIn"]; + UserModel *model=[dataContorl getUserInfo]; NSString *userIDName=[NSString stringWithFormat:@"%d",(int)[model.gwellUserID integerValue]&0x7fffffff]; - - //初始化设备 - if (!_isInItDevice) { - NSLog(@"正在初始化设备"); - _isInItDevice = [[P2PClient sharedClient] p2pConnectWithId:userIDName codeStr1:model.P2PVerifyCode1 codeStr2:model.P2PVerifyCode2]; - - // _isInItDevice = [[P2PClient sharedClient] p2pConnectWithId:model.gwellUserID codeStr1:model.P2PVerifyCode1 codeStr2:model.P2PVerifyCode2]; - - } - - - if(_isInItDevice){ - - NSLog(@"p2pConnect success. 成功 可以操作设备了"); - //成功 可以操作设备了 - usleep(600000); - [self startMonitor]; - - }else{//new added - NSLog(@"p2pConnect failure.失败,不能操作设备"); - //[self connectDevice]; - return; - } - - -} --(void)startMonitor{ - - if (_isInItDevice) { - NSLog(@"发送呼叫命令"); - - [[P2PClient sharedClient] setIsBCalled:NO]; - [[P2PClient sharedClient] setP2pCallState:P2PCALL_STATUS_CALLING]; - - - [[P2PClient sharedClient] p2pCallWithId:self.camera.cameraId password:self.camera.cameraPass callType:P2PCALL_TYPE_PLAYBACK]; + if ([GWP2PClient sharedClient].linkStatus != P2PLinkStatusOK) { + NSLog(@"正在检查P2P连接状态"); + BOOL connectDevice = [[GWP2PClient sharedClient] connectWithAccount:userIDName codeStr1:model.P2PVerifyCode1 codeStr2:model.P2PVerifyCode2 sessionID1:model.sessionID sessionID2:model.sessionID2 customerIDs:nil]; + if (connectDevice) { + + [[GWP2PClient sharedClient] getDeviceStorageInfomationWithDeviceID:self.camera.cameraId devicePassword:self.camera.cameraPass completionBlock:^(GWP2PClient *client, BOOL success, NSDictionary *dataDictionary) { + + if (success) + { + self.hasSDCard=YES; + } + else + { + [self initNoSDDataViewHidden:NO]; + } + }]; + }else{ + NSLog(@"p2pConnect failure.失败,不能操作设备"); + } } } + -(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; [AppDelegate sharedDefault].canFullScreen = YES; @@ -113,36 +96,16 @@ -(void)viewWillDisappear:(BOOL)animated{ [super viewWillDisappear:animated]; - //[AppDelegate sharedDefault].canFullScreen = YES; - [[NSNotificationCenter defaultCenter] removeObserver:self name:RECEIVE_REMOTE_MESSAGE object:nil]; - [[NSNotificationCenter defaultCenter] removeObserver:self name:@"read_play_false" object:nil]; } -(void)viewDidAppear:(BOOL)animated{ [super viewDidAppear:animated]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveRemoteMessage:) name:RECEIVE_REMOTE_MESSAGE object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(readPlayFalse:) name:@"read_play_false" object:nil]; - [[P2PClient sharedClient] getSDCardInfoWithId:self.camera.cameraId password:self.camera.cameraPass]; } --(void)readPlayFalse:(NSNotification*)noti{ - /// - dispatch_async(dispatch_get_main_queue(), ^{ - [UIView transitionWithView:self.movieView duration:0.3 options:UIViewAnimationOptionCurveEaseOut - animations:^{ - self.movieView.alpha = 0.3; - } - - completion:^(BOOL finished){ - [self.movieView setHidden:YES]; - [self.view makeToast:NSLocalizedString(@"connection_failed_please_reconnect", nil)]; - } - ]; - }); -} + -(void)goBackAction{ @@ -152,114 +115,7 @@ } -- (void)receiveRemoteMessage:(NSNotification *)notification{ - - NSDictionary *parameter = [notification userInfo]; - int key = [[parameter valueForKey:@"key"] intValue]; - - switch (key) { - case RET_GET_PLAYBACK_FILES: - { - //回放文件名称 - NSArray *array = [NSArray arrayWithArray:(NSArray*)[parameter valueForKey:@"files"]]; - //回放文件的时间记录 - NSArray *times = [NSArray arrayWithArray:(NSArray*)[parameter valueForKey:@"times"]]; - //回放文件的播放时长 - NSArray *sizes = [NSArray arrayWithArray:(NSArray*)[parameter valueForKey:@"sizes"]]; - - - //若不是加载更多时,则往已playbackFiles数组存放回放文件 - //若是加载更多,则往playbackFilesMore的数组添加回放文件 - //若不是加载更多时,则往playbackSize数组存放回放文件的播放时长 - //若是上拉加载更多,则往playbackSizeMore数组末尾添加回放文件的播放时长 - if (_isloadMore) { - - for (NSString *file in array){ - [self.playbackFilesMore addObject:file]; - } - for (NSString *size in sizes){ - [self.playbackSizeMore addObject:size]; - } - //刷新表格 - dispatch_async(dispatch_get_main_queue(), ^{ - [self.tableView reloadData]; - if (self.playbackFilesMore.count < 1) { - //[self.view makeToast:NSLocalizedString(@"no_playback_file", nil)]; - [self.view makeToast:@"没有更多视频"]; - } - }); - self.timesDataMore = [NSMutableArray arrayWithArray:times]; - if (self.timesDataMore.count==0) { - return; - } - - //记录最近1天、3天...已显示文件里最后一个文件的时间(最早文件的时间) - //用于上拉加载时传入的结束时间 - self.nextEndDate = [self.timesDataMore lastObject]; - }else{ - - for (NSString *file in array){ - [self.playbackFiles addObject:file]; - } - for (NSString *size in sizes){ - [self.playbackSize addObject:size]; - } - //刷新表格 - dispatch_async(dispatch_get_main_queue(), ^{ - [self.tableView reloadData]; - if (self.playbackFiles.count < 1) { - //[self.view makeToast:NSLocalizedString(@"no_playback_file", nil)]; - [self initNoVideoDataViewHidden:NO]; - - } - }); - - self.timesData = [NSMutableArray arrayWithArray:times]; - if (self.timesData.count==0) { - return; - } - - //记录最近1天、3天...已显示文件里最后一个文件的时间(最早文件的时间) - //用于上拉加载时传入的结束时间 - self.nextEndDate = [self.timesData lastObject]; - - } - - } - break; - - case RET_GET_SDCARD_INFO: - - { - NSInteger result = [[parameter valueForKey:@"result"] intValue]; - - dispatch_async(dispatch_get_main_queue(), ^{ - if (result == 1) { - - //[self.view makeToast:@"sdk卡可使用"]; - [[P2PClient sharedClient] setCurrentLabel:1]; - [[P2PClient sharedClient] getPlaybackFilesWithId:self.camera.cameraId password:self.camera.cameraPass timeInterval:1]; - [[P2PClient sharedClient] setPlaybackDelegate:self]; - - }else{ - //sd卡不存在, - //[self.view makeToast:NSLocalizedString(@"no_storage", nil)]; - [self initNoSDDataViewHidden:NO]; - - } - }); - - } - break; - - - default: - break; - } - - -} -(void)initNoSDDataViewHidden:(BOOL)hidden @@ -273,7 +129,7 @@ if (!self.noDataView) { - self.noDataView = [[CameraNoParyBackVideoView alloc] initWithFrame:self.view.bounds]; + self.noDataView = [[CameraNoParyBackVideoView alloc] initWithFrame:self.tableView.frame]; [self.view addSubview:self.noDataView]; } @@ -288,7 +144,7 @@ { if (!self.noDataView) { //CGFloat viewH =200; - self.noDataView = [[CameraNoParyBackVideoView alloc] initWithFrame:self.view.bounds]; + self.noDataView = [[CameraNoParyBackVideoView alloc] initWithFrame:self.tableView.frame]; [self.view addSubview:self.noDataView]; } @@ -301,34 +157,90 @@ } -(void)initUI { - - - self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(0,0,self.view.frame.size.width,self.view.frame.size.height) style:UITableViewStyleGrouped]; - self.tableView.delegate = self; - self.tableView.dataSource = self; - self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; - self.tableView.showsVerticalScrollIndicator = NO; - self.tableView.backgroundColor = RGB(241, 241, 241); - [self.view addSubview:self.tableView]; - - UIView *movieView = [[UIView alloc] initWithFrame:CGRectMake(0, NAVIGATION_BAR_HEIGHT, self.view.frame.size.width, self.view.frame.size.height-NAVIGATION_BAR_HEIGHT)]; - [movieView setBackgroundColor:XBlack_128]; - - UIImageView *animView = [[UIImageView alloc] initWithFrame:CGRectMake((movieView.frame.size.width-ANIM_VIEW_WIDTH_AND_HEIGHT)/2, (movieView.frame.size.height-ANIM_VIEW_WIDTH_AND_HEIGHT)/2, ANIM_VIEW_WIDTH_AND_HEIGHT, ANIM_VIEW_WIDTH_AND_HEIGHT)]; - - NSArray *imagesArray = [NSArray arrayWithObjects:LXImageWithImageName(@"movie1.png"),LXImageWithImageName(@"movie2.png"),LXImageWithImageName(@"movie3.png"),nil]; - - animView.animationImages = imagesArray; - animView.animationDuration = ((CGFloat)[imagesArray count])*100.0f/1000.0f; - animView.animationRepeatCount = 0; - [animView startAnimating]; - [movieView addSubview:animView]; - [movieView setHidden:YES]; - [self.view addSubview:movieView]; - self.movieView = movieView; - - + NSDate *nowDate = [NSDate date]; // 当前时间 + NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; + formatter.dateFormat = @"yyyy-MM-dd HH:mm"; + NSString *string = [formatter stringFromDate:nowDate]; // + [self.startBtn setTitle:[formatter stringFromDate:[nowDate dateByAddingTimeInterval:-60*60]] forState:UIControlStateNormal]; + [self.endBtn setTitle:string forState:UIControlStateNormal]; + self.startDate=nowDate; + self.startDate=[nowDate dateByAddingTimeInterval:-60*60*2]; } + +- (IBAction)startTimeClick:(UIButton *)sender { + + [self.datePickView removeFromSuperview]; + NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; + [dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier: @"zh_CN"]]; + [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm"]; + DatePickerCustomView* dateView = [DatePickerCustomView showInView:self.view Mode:UIDatePickerModeDateAndTime date:[dateFormatter dateFromString:[sender titleForState:UIControlStateNormal]]]; + dateView.datePicker.maximumDate=[NSDate date]; + + self.datePickView=dateView; + WEAK_SELF; + + __weak DatePickerCustomView* weakDateView =dateView; + dateView.dateChanged =^{ + + [sender setTitle:[dateFormatter stringFromDate:weakDateView.datePicker.date] forState:UIControlStateNormal]; + weakSelf.startDate=weakDateView.datePicker.date; + + }; + dateView.cancelBlock = ^{ + + }; +} +- (IBAction)endTimeClick:(UIButton *)sender { + + [self.datePickView removeFromSuperview]; + NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; + [dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier: @"zh_CN"]]; + [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm"]; + DatePickerCustomView* dateView = [DatePickerCustomView showInView:self.view Mode:UIDatePickerModeDateAndTime date:[dateFormatter dateFromString:[sender titleForState:UIControlStateNormal]]]; + dateView.datePicker.maximumDate=[NSDate date]; + + self.datePickView=dateView; + + __weak DatePickerCustomView* weakDateView =dateView; + WEAK_SELF; + dateView.dateChanged =^{ + + [sender setTitle:[dateFormatter stringFromDate:weakDateView.datePicker.date] forState:UIControlStateNormal]; + weakSelf.endDate=weakDateView.datePicker.date; + }; + dateView.cancelBlock = ^{ + + }; +} +- (IBAction)searchClick:(UIButton *)sender { + + [MBProgressHUD showHUDAddedTo:self.view animated:YES]; + [[GWP2PClient sharedClient] getDevicePlaybackFilesWithDeviceID:self.camera.cameraId devicePassword:self.camera.cameraPass startDate:self.startDate endDate:self.endDate completionBlock:^(GWP2PClient *client, BOOL success, NSDictionary *dataDictionary) { + [MBProgressHUD hideHUDForView:self.view animated:YES]; + NSLog(@"dataDictionary=%@",dataDictionary); + [self.playbackFiles removeAllObjects]; + if (success&&[dataDictionary[@"error value"] intValue]==0) + { + + NSArray*files=dataDictionary[@"files"]; + if ([files isKindOfClass:[NSArray class]]&&files.count) + { + [self.playbackFiles addObjectsFromArray:files]; + + [self.tableView reloadData]; + } + else + { + [self initNoVideoDataViewHidden:NO]; + } + } + else + { + [self initNoVideoDataViewHidden:NO]; + } + }]; +} + - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. @@ -336,17 +248,12 @@ -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ - return 2; + return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ - if (section ==0) { - - return [self.playbackFiles count]; - } - return [self.playbackFilesMore count]; - + return self.playbackFiles.count; } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ @@ -359,68 +266,15 @@ IfishPlaybackViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"IfishPlaybackViewCell"]; + GWPlaybackFileModel*model=[self.playbackFiles objectAtIndex:indexPath.row]; + if (!cell) { cell = [[[NSBundle mainBundle]loadNibNamed:@"IfishPlaybackViewCell" owner:self options:nil]lastObject]; } + cell.model=model; + - //每一分区这里加载不同数据源 - if (indexPath.section ==0) { - if (self.playbackFiles.count!=0) { - - NSString* name = [self.playbackFiles objectAtIndex:indexPath.row]; - - int iSize = 0; - if ([self.playbackFiles count] == [self.playbackSize count]) //查询到了文件长度 - { - NSNumber* number = [self.playbackSize objectAtIndex:indexPath.row]; - iSize = [number intValue]; - } - if (iSize != 0) {//支持返回播放时长 - //cell.videoTime.text = [NSString stringWithFormat:@"%@ (%02d:%02d)", name, iSize/60, iSize%60]; - cell.videoTime.text = [NSString stringWithFormat:@"%@", name]; - cell.videoLongth.text = [NSString stringWithFormat:@"%02d分钟",iSize/60]; - if (iSize<60) { - - cell.videoLongth.text = [NSString stringWithFormat:@"%02d秒钟",iSize%60]; - } - - } - else - { - cell.videoTime.text = [NSString stringWithFormat:@"%@", name]; - cell.videoLongth.text = @"未知"; - } - - } - - }else{ - //更多 - if (self.playbackFilesMore.count !=0) { - - NSString* name = [self.playbackFilesMore objectAtIndex:indexPath.row]; - - int iSize = 0; - if ([self.playbackFilesMore count] == [self.playbackSizeMore count]) //查询到了文件长度 - { - NSNumber* number = [self.playbackSizeMore objectAtIndex:indexPath.row]; - iSize = [number intValue]; - } - if (iSize != 0) {//支持返回播放时长 - //cell.videoTime.text = [NSString stringWithFormat:@"%@ (%02d:%02d)", name, iSize/60, iSize%60]; - cell.videoTime.text = [NSString stringWithFormat:@"%@", name]; - cell.videoLongth.text = [NSString stringWithFormat:@"%02d分钟",iSize/60]; - - } - else - { - cell.videoTime.text = [NSString stringWithFormat:@"%@", name]; - cell.videoLongth.text = @"未知"; - } - - } - - } return cell; @@ -450,122 +304,122 @@ } - --(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{ - - if (section==0) { - //描述 + 回放列表 + 今天 + 1 像素线 - return 50 +BACKVIEW_ROWH +BACKVIEW_ROWH + 1; - } - return 0.1; -} - --(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{ - - if (section ==1) { - - return BACKVIEW_ROWH; - } - return 0.1; -} --(UIView*)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{ - - CGFloat space = 10; - - if (section ==0) { - - UIView *section0Header =[[UIView alloc] init]; - section0Header.frame = CGRectMake(0, 0, self.view.frame.size.width, 191); - - UILabel *describleLabe=[[UILabel alloc] init]; - describleLabe.frame = CGRectMake(0, 0,self.view.frame.size.width, 50); - describleLabe.textColor =RGB(102, 102, 102); - describleLabe.textAlignment = NSTextAlignmentCenter; - describleLabe.text = @"30分钟录制一次,录像最多存储7日"; - describleLabe.font = [UIFont systemFontOfSize:12]; - describleLabe.backgroundColor = RGB(241, 245, 246); - - [section0Header addSubview:describleLabe]; - - UIView *listLabeBack =[[UIView alloc] init]; - listLabeBack.frame = CGRectMake(0,CGRectGetMaxY(describleLabe.frame), self.view.frame.size.width,BACKVIEW_ROWH); - listLabeBack.backgroundColor = [UIColor whiteColor]; - - [section0Header addSubview:listLabeBack]; - - UILabel *listLabe=[[UILabel alloc] init]; - listLabe.frame = CGRectMake(space,CGRectGetHeight(listLabeBack.frame)/2,200, 20); - listLabe.textColor =RGB(102, 102, 102); - listLabe.font = [UIFont systemFontOfSize:15]; - listLabe.text = @"回放列表"; - [listLabeBack addSubview:listLabe]; - CGFloat listlW = 50; - UILabel *listl=[[UILabel alloc] init]; - listl.frame = CGRectMake(self.view.frame.size.width - space -listlW -4,CGRectGetHeight(listLabeBack.frame)/2,listlW, 20); - listl.textColor =RGB(102, 102, 102); - listl.font = [UIFont systemFontOfSize:14]; - listl.text = @"时长"; - listl.textAlignment = NSTextAlignmentRight; - [listLabeBack addSubview:listl]; - - - //一像素分割线 - UIView *lineView =[[UIView alloc] init]; - lineView.frame = CGRectMake(0, CGRectGetMaxY(listLabeBack.frame), self.view.frame.size.width,1); - lineView.backgroundColor = RGB(241, 241, 241); - [section0Header addSubview:lineView]; - //今天 - UIView *todayLabeBack =[[UIView alloc] init]; - todayLabeBack.frame = CGRectMake(0,CGRectGetMaxY(lineView.frame),self.view.frame.size.width, BACKVIEW_ROWH); - todayLabeBack.backgroundColor = [UIColor whiteColor]; - - [section0Header addSubview:todayLabeBack]; - UILabel *todayLabe=[[UILabel alloc] init]; - todayLabe.frame = CGRectMake(space,0,self.view.frame.size.width, BACKVIEW_ROWH); - todayLabe.textColor =RGB(153, 153, 153); - todayLabe.font = [UIFont systemFontOfSize:14]; - todayLabe.text = @"最近24小时"; - todayLabe.backgroundColor = [UIColor whiteColor]; - //todayLabe.text. - [todayLabeBack addSubview:todayLabe]; - - - - return section0Header; - } - - return nil; - -} - --(UIView*)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section{ - CGFloat space = 10; - - if (section ==1) { - //更多 - UIView *moreLabeBack =[[UIView alloc] init]; - moreLabeBack.frame = CGRectMake(0,0,self.view.frame.size.width, BACKVIEW_ROWH); - moreLabeBack.backgroundColor = [UIColor whiteColor]; - UILabel *moreLabe=[[UILabel alloc] init]; - moreLabe.frame = CGRectMake(space,0,self.view.frame.size.width, BACKVIEW_ROWH); - moreLabe.textColor =RGB(153, 153, 153); - moreLabe.font = [UIFont systemFontOfSize:14]; - moreLabe.text = @"查看更多"; - moreLabe.backgroundColor = [UIColor whiteColor]; - [moreLabeBack addSubview:moreLabe]; - moreLabe.userInteractionEnabled = YES; - UITapGestureRecognizer *moreGesture =[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(moreDataRequset)]; - [moreLabe addGestureRecognizer:moreGesture]; - - return moreLabeBack; - - } - return nil; -} +// +//-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{ +// +// if (section==0) { +// //描述 + 回放列表 + 今天 + 1 像素线 +// return 50 +BACKVIEW_ROWH +BACKVIEW_ROWH + 1; +// } +// return 0.1; +//} +// +//-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{ +// +// if (section ==1) { +// +// return BACKVIEW_ROWH; +// } +// return 0.1; +//} +//-(UIView*)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{ +// +// CGFloat space = 10; +// +// if (section ==0) { +// +// UIView *section0Header =[[UIView alloc] init]; +// section0Header.frame = CGRectMake(0, 0, self.view.frame.size.width, 191); +// +// UILabel *describleLabe=[[UILabel alloc] init]; +// describleLabe.frame = CGRectMake(0, 0,self.view.frame.size.width, 50); +// describleLabe.textColor =RGB(102, 102, 102); +// describleLabe.textAlignment = NSTextAlignmentCenter; +// describleLabe.text = @"30分钟录制一次,录像最多存储7日"; +// describleLabe.font = [UIFont systemFontOfSize:12]; +// describleLabe.backgroundColor = RGB(241, 245, 246); +// +// [section0Header addSubview:describleLabe]; +// +// UIView *listLabeBack =[[UIView alloc] init]; +// listLabeBack.frame = CGRectMake(0,CGRectGetMaxY(describleLabe.frame), self.view.frame.size.width,BACKVIEW_ROWH); +// listLabeBack.backgroundColor = [UIColor whiteColor]; +// +// [section0Header addSubview:listLabeBack]; +// +// UILabel *listLabe=[[UILabel alloc] init]; +// listLabe.frame = CGRectMake(space,CGRectGetHeight(listLabeBack.frame)/2,200, 20); +// listLabe.textColor =RGB(102, 102, 102); +// listLabe.font = [UIFont systemFontOfSize:15]; +// listLabe.text = @"回放列表"; +// [listLabeBack addSubview:listLabe]; +// CGFloat listlW = 50; +// UILabel *listl=[[UILabel alloc] init]; +// listl.frame = CGRectMake(self.view.frame.size.width - space -listlW -4,CGRectGetHeight(listLabeBack.frame)/2,listlW, 20); +// listl.textColor =RGB(102, 102, 102); +// listl.font = [UIFont systemFontOfSize:14]; +// listl.text = @"时长"; +// listl.textAlignment = NSTextAlignmentRight; +// [listLabeBack addSubview:listl]; +// +// +// //一像素分割线 +// UIView *lineView =[[UIView alloc] init]; +// lineView.frame = CGRectMake(0, CGRectGetMaxY(listLabeBack.frame), self.view.frame.size.width,1); +// lineView.backgroundColor = RGB(241, 241, 241); +// [section0Header addSubview:lineView]; +// //今天 +// UIView *todayLabeBack =[[UIView alloc] init]; +// todayLabeBack.frame = CGRectMake(0,CGRectGetMaxY(lineView.frame),self.view.frame.size.width, BACKVIEW_ROWH); +// todayLabeBack.backgroundColor = [UIColor whiteColor]; +// +// [section0Header addSubview:todayLabeBack]; +// UILabel *todayLabe=[[UILabel alloc] init]; +// todayLabe.frame = CGRectMake(space,0,self.view.frame.size.width, BACKVIEW_ROWH); +// todayLabe.textColor =RGB(153, 153, 153); +// todayLabe.font = [UIFont systemFontOfSize:14]; +// todayLabe.text = @"最近24小时"; +// todayLabe.backgroundColor = [UIColor whiteColor]; +// //todayLabe.text. +// [todayLabeBack addSubview:todayLabe]; +// +// +// +// return section0Header; +// } +// +// return nil; +// +//} +// +//-(UIView*)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section{ +// CGFloat space = 10; +// +// if (section ==1) { +// //更多 +// UIView *moreLabeBack =[[UIView alloc] init]; +// moreLabeBack.frame = CGRectMake(0,0,self.view.frame.size.width, BACKVIEW_ROWH); +// moreLabeBack.backgroundColor = [UIColor whiteColor]; +// UILabel *moreLabe=[[UILabel alloc] init]; +// moreLabe.frame = CGRectMake(space,0,self.view.frame.size.width, BACKVIEW_ROWH); +// moreLabe.textColor =RGB(153, 153, 153); +// moreLabe.font = [UIFont systemFontOfSize:14]; +// moreLabe.text = @"查看更多"; +// moreLabe.backgroundColor = [UIColor whiteColor]; +// [moreLabeBack addSubview:moreLabe]; +// moreLabe.userInteractionEnabled = YES; +// UITapGestureRecognizer *moreGesture =[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(moreDataRequset)]; +// [moreLabe addGestureRecognizer:moreGesture]; +// +// return moreLabeBack; +// +// } +// return nil; +//} #pragma mark - moreDataRequset -(void)moreDataRequset{ - _isloadMore =YES; + // //today NSDate *nowDate = [NSDate date]; NSInteger interval =31; diff --git a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PPlayBack/IfishP2PPlayBackListViewController.xib b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PPlayBack/IfishP2PPlayBackListViewController.xib new file mode 100644 index 0000000..594f1a4 --- /dev/null +++ b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PPlayBack/IfishP2PPlayBackListViewController.xib @@ -0,0 +1,235 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PPlayBack/IfishPlaybackViewCell.h b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PPlayBack/IfishPlaybackViewCell.h index df189b2..0012375 100644 --- a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PPlayBack/IfishPlaybackViewCell.h +++ b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PPlayBack/IfishPlaybackViewCell.h @@ -7,11 +7,12 @@ // #import +#import @interface IfishPlaybackViewCell : UITableViewCell -@property (weak, nonatomic) IBOutlet UIImageView *palybackVideo; - -@property (weak, nonatomic) IBOutlet UILabel *videoLongth; -@property (weak, nonatomic) IBOutlet UILabel *videoTime; +@property (weak, nonatomic) IBOutlet UIImageView *playImageView; +@property (weak, nonatomic) IBOutlet UILabel *startTimeLabel; +@property (weak, nonatomic) IBOutlet UILabel *endTimeLabel; +@property (nonatomic, strong) GWPlaybackFileModel *model; @end diff --git a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PPlayBack/IfishPlaybackViewCell.m b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PPlayBack/IfishPlaybackViewCell.m index a2f5fb7..411aa3c 100644 --- a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PPlayBack/IfishPlaybackViewCell.m +++ b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PPlayBack/IfishPlaybackViewCell.m @@ -13,7 +13,7 @@ - (void)awakeFromNib { [super awakeFromNib]; // Initialization code - self.palybackVideo.image = LXImageWithImageName(@"playback_iocn_video"); + self.playImageView.image = LXImageWithImageName(@"playback_iocn_video"); } @@ -22,5 +22,35 @@ // Configure the view for the selected state } +-(void)setModel:(GWPlaybackFileModel *)model +{ + _model=model; + + NSString*start=[NSString stringWithFormat:@"%ld%02ld%02ld%02ld%02ld",model.year,model.month,model.day,model.hour,model.minute]; + NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; + formatter.dateFormat = @"yyyyMMddHHmm"; + NSDate*date=[formatter dateFromString:start]; + + NSString*end=[NSString stringWithFormat:@"%ld%02ld%02ld%02ld%02ld",model.year,model.month,model.day,model.hour,model.minute]; + if (date) + { + if ([model.cType isEqualToString:@"S"]) + { + date=[date dateByAddingTimeInterval:model.time]; + } + else + { + date=[date dateByAddingTimeInterval:model.time*60]; + } + end=[formatter stringFromDate:date]; + } + else + { + + } + self.startTimeLabel.text=start; + self.endTimeLabel.text=end; + NSLog(@"date =%@ time=%ld",model.date,model.time); +} @end diff --git a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PPlayBack/IfishPlaybackViewCell.xib b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PPlayBack/IfishPlaybackViewCell.xib index e7cb869..4bc54b0 100644 --- a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PPlayBack/IfishPlaybackViewCell.xib +++ b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PPlayBack/IfishPlaybackViewCell.xib @@ -1,60 +1,78 @@ - - - - - + + + - + + - + - - + + - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + + + + + + + diff --git a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishcameraBottomHView/CameraRecordViewController.m b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishcameraBottomHView/CameraRecordViewController.m index e2852f6..97ff62e 100644 --- a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishcameraBottomHView/CameraRecordViewController.m +++ b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishcameraBottomHView/CameraRecordViewController.m @@ -11,6 +11,9 @@ #import "IfishCameraRecordfirstCell.h" #import "IfishCameraRecordSecondCell.h" #import "IfishCameraRecordThirdCell.h" +#import "TemperatureSetModel.h" +#import "TemperatureSetCell.h" +#import "MydatePickerView.h" #define RECODIEECELL_TIME 911 #define RECODIEECELL_BTN 922 #define RECODIEECELL_SWiTCH 933 @@ -32,8 +35,8 @@ static const CGFloat ToastFade = 0.2; @property(nonatomic) NSIndexPath *buttonIndex; @property(assign) unsigned int remoteRecordState; //本app 需求模式 非摄像头模式 -@property(nonatomic) BOOL isManual; - +@property(nonatomic,strong) NSMutableArray*array; +@property (nonatomic, strong)MydatePickerView *mydatepicView; @end @@ -42,42 +45,17 @@ static const CGFloat ToastFade = 0.2; - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. - [self addTitleViewWithTitle:@"手动录制"]; - _timestr= @"00:00"; - _isRecording = NO; - _isManual = NO; + [self addTitleViewWithTitle:@"录制视频"]; + [self creatUI]; - self.view.backgroundColor = RGB(242, 242, 242); + // self.view.backgroundColor = RGB(242, 242, 242); } -(void)goBackAction{ - - if (_isRecording) { - - UIAlertController*ac=[UIAlertController alertControllerWithTitle:@"" message:@"是否结束手动录制" preferredStyle:UIAlertControllerStyleAlert]; - - [self presentViewController:ac animated:YES completion:nil]; - [ac addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction*action){ - - - - }]]; - - [ac addAction:[UIAlertAction actionWithTitle:@"结束" style:UIAlertActionStyleDefault handler:^(UIAlertAction*action){ - [[P2PClient sharedClient] setRemoteRecordWithId:self.camera.cameraId - password:self.camera.cameraPass state:SETTING_VALUE_REMOTE_RECORD_STATE_OFF]; - [self.navigationController popViewControllerAnimated:YES]; - - }]]; - - - }else{ - [self.navigationController popViewControllerAnimated:YES]; - } - + [self.navigationController popViewControllerAnimated:YES]; } -(void)creatUI{ @@ -88,7 +66,7 @@ static const CGFloat ToastFade = 0.2; self.tab.separatorStyle = UITableViewCellSeparatorStyleNone; self.tab.showsVerticalScrollIndicator = NO; self.tab.scrollEnabled = NO; - self.tab.backgroundColor = RGB(242, 242, 242); + //self.tab.backgroundColor = RGB(242, 242, 242); [self.view addSubview:self.tab]; } @@ -102,68 +80,16 @@ static const CGFloat ToastFade = 0.2; BOOL 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.失败,不能操作设备"); } } } -//连接到摄像头 --(void)connectCamera{ - - [[GWP2PClient sharedClient] getMultipleDeviceStatusWithDeviceID:self.camera.cameraId password:self.camera.cameraPass completionBlock:^(GWP2PClient *client, BOOL success, NSDictionary *dataDictionary) { - - 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; - } - }]; -} -#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.camera.cameraId password:self.camera.cameraPass definition:GWP2PPTZDefinitionSD calling:^(NSDictionary *parameters) { - //呼叫设备 - NSLog(@"[p2pCallDevice-Calling],paras=%@",parameters); - - } accept:^(NSDictionary *parameters) { - - NSLog(@"[p2pCallDevice-Accept],paras=%@",parameters); - - } reject:^(GWP2PCallError error, NSString *errorCode) { - } ready:^{ - } allowLAN:YES]; - - }); -} + - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. @@ -171,577 +97,206 @@ static const CGFloat ToastFade = 0.2; -(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveRemoteMessage:) name:RECEIVE_REMOTE_MESSAGE object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(ack_receiveRemoteMessage:) name:ACK_RECEIVE_REMOTE_MESSAGE object:nil]; - [[P2PClient sharedClient] getNpcSettingsWithId:self.camera.cameraId password:self.camera.cameraPass]; - // [[P2PClient sharedClient] getSDCardInfoWithId:self.camera.cameraId password:self.camera.cameraPass]; + } -(void)viewWillDisappear:(BOOL)animated{ [super viewWillDisappear:animated]; - [[NSNotificationCenter defaultCenter] removeObserver:self name:RECEIVE_REMOTE_MESSAGE object:nil]; - [[NSNotificationCenter defaultCenter] removeObserver:self name:ACK_RECEIVE_REMOTE_MESSAGE object:nil]; + } #pragma mark - receiveRemoteMessage -- (void)receiveRemoteMessage:(NSNotification *)notification -{ - NSDictionary *parameter = [notification userInfo]; - int key = [[parameter valueForKey:@"key"] intValue]; - switch (key) { - - case RET_GET_SDCARD_INFO: - { - NSInteger result = [[parameter valueForKey:@"result"] intValue]; - - dispatch_async(dispatch_get_main_queue(), ^{ - if (result == 1) { - - //[self.view makeToast:@"sdk卡可使用"]; - //获取状态信息 - // [[P2PClient sharedClient] getNpcSettingsWithId:self.camera.cameraId password:self.camera.cameraPass]; - - if (_isManual) { - if (self.remoteRecordState ==1){ - //[self.view makeToast:@"请先关闭自动录制"]; - [self showLableAction:@"请先关闭自动录制"]; - dispatch_async(dispatch_get_main_queue(), ^{ - [self hiddenTostVIew]; - - }); - [self resetTimerlabel]; - - return ; - - } - - NSArray *buttonindex =@[self.buttonIndex]; - [self.tab reloadRowsAtIndexPaths:buttonindex withRowAnimation:UITableViewRowAnimationNone]; - - [[P2PClient sharedClient] setRemoteRecordWithId:self.camera.cameraId - password:self.camera.cameraPass state:SETTING_VALUE_REMOTE_RECORD_STATE_ON]; - }else{ - - [self showLableAction:@"请先关闭自动录制"]; - dispatch_async(dispatch_get_main_queue(), ^{ - [self hiddenTostVIew]; - - }); - [self resetTimerlabel]; - } - - - }else{ - //sd卡不存在, - //停止计时 - - dispatch_async(dispatch_get_main_queue(), ^{ - [self hiddenTostVIew]; - - }); - [self resetTimerlabel]; - [self.view makeToast:NSLocalizedString(@"no_storage", nil)]; - - - } - }); - - } - break; - case RET_GET_NPCSETTINGS_PRERECORD: //预录像开关 获取时 - { - - NSInteger state = [[parameter valueForKey:@"state"] intValue]; - - NSLog(@"预录像开关 获取时state%ld",(long)state); - } - break; - - case RET_SET_NPCSETTINGS_PRERECORD: //预录像开关 设置时 - { - NSInteger result = [[parameter valueForKey:@"result"] intValue]; - - if(result==0){ - - NSLog(@"预录像开关设置result%ld",(long)result); - - }else{ - - NSLog(@"预录像开关设置result%ld",(long)result); - - } - } - break; - - case RET_SET_NPCSETTINGS_REMOTE_RECORD: - { - NSInteger result = [[parameter valueForKey:@"result"] integerValue]; - - - if(result==0){ - //设置成功主动获取一次状态 刷新 - dispatch_async(dispatch_get_main_queue(), ^{ - [self hiddenTostVIew]; - - }); - - [[P2PClient sharedClient] getNpcSettingsWithId:self.camera.cameraId password:self.camera.cameraPass]; - - - }else{ - - NSLog(@"设置失败:%li",(long)result); - } - - - } - break; - case RET_GET_NPCSETTINGS_REMOTE_RECORD: - { - // - - NSInteger state = [[parameter valueForKey:@"state"] intValue]; - self.remoteRecordState = (unsigned int)state; - - if (state ==0) { - - dispatch_async(dispatch_get_main_queue(), ^{ - - - [self resetTimerlabel]; - - }); - - }else{ - - - } - - if (_isManual) { - //手动模式开启不刷新switch按钮状态 - - return; - } - NSLog(@"获取 remote record state:%li",(long)state); - - dispatch_async(dispatch_get_main_queue(), ^{ - NSArray *index =@[self.switchIndex]; - [self.tab reloadRowsAtIndexPaths:index withRowAnimation:UITableViewRowAnimationNone]; - // NSArray *buttonindex =@[self.buttonIndex]; - // [self.tab reloadRowsAtIndexPaths:buttonindex withRowAnimation:UITableViewRowAnimationNone]; - }); - - } - - case RET_GET_NPCSETTINGS_RECORD_TYPE: - { - NSInteger type = [[parameter valueForKey:@"type"] intValue]; - //0手动模式 摄像头模式 - - NSLog(@"获取录像模式类型type%ld",(long)type); - - } - break; - - case RET_SET_NPCSETTINGS_RECORD_TYPE: - { - NSInteger result = [[parameter valueForKey:@"result"] intValue]; - //0类型设置成功 - if (result==0) { - //[[P2PClient sharedClient] setRemoteRecordWithId:self.camera.cameraId - // password:self.camera.cameraPass state:SETTING_VALUE_REMOTE_RECORD_STATE_ON]; - } - - NSLog(@"设置录像模式类型result%ld",(long)result); - - - } - break; - - default: - break; - } - -} - -#pragma mark -ack_receiveRemoteMessage -- (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_GET_SDCARD_INFO: - { - dispatch_async(dispatch_get_main_queue(), ^{ - if(result==1){ - - [self.view makeToast:NSLocalizedString(@"device_password_error", nil)]; -// dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ -// usleep(800000); -// -// -// }); - - }else if(result==2){ - DLog(@"resend do device update"); - - } - - - }); - - DLog(@"ACK_RET_GET_SDCARD_INFO:%i",result); - } - break; - case ACK_RET_SET_SDCARD_INFO: - { - dispatch_async(dispatch_get_main_queue(), ^{ - if(result==1){ - - [self.view makeToast:NSLocalizedString(@"device_password_error", nil)]; -// dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ -// usleep(800000); -// dispatch_async(dispatch_get_main_queue(), ^{ -// }); -// }); - - }else if(result==2){ - DLog(@"resend do device update"); - - } - - }); - - } - break; - - - default: - break; - } - -} -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ - if (section ==2) { - - return 2; - } return 1; } -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ - return 3; + return 2; } -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ + TemperatureSetCell*cell=[tableView dequeueReusableCellWithIdentifier:@"TemperatureSetCell"]; + if (cell==nil) { + cell=[[[NSBundle mainBundle]loadNibNamed:@"TemperatureSetCell" owner:self options:nil]lastObject]; + } + cell.backgroundView=nil; + cell.backgroundColor= RGB(242, 242, 242); if (indexPath.section ==0 && indexPath.row ==0) { - IfishCameraRecordfirstCell *cell = [tableView dequeueReusableCellWithIdentifier:@"IfishCameraRecordfirstCell"]; - if (!cell) { - cell = [[[NSBundle mainBundle]loadNibNamed:@"IfishCameraRecordfirstCell" owner:self options:nil]lastObject]; + + + TemperatureSetModel*model=[[TemperatureSetModel alloc]init]; + model.title=@"即时录制"; + model.temperatureLabel=@""; + model.status=[[DataCenter defaultDtacenter].cache stringForKey:@"NowRecord"]; + cell.titleLabel.text=model.title; + + cell.temperaturelabel.text=model.temperatureLabel; + [cell.temPSwitch addTarget:self action:@selector(nowRecordBtnAction:) forControlEvents:UIControlEventTouchUpInside]; + [cell.temPSwitch setBackgroundImage:[UIImage imageNamed:@"greenbtn_big"] forState:UIControlStateSelected]; + [cell.temPSwitch setBackgroundImage:[UIImage imageNamed:@"graybtn_big"] forState:UIControlStateNormal]; + + cell.selected=[model.status isEqualToString:@"1"]; - } - cell.selectionStyle = UITableViewCellSelectionStyleNone; - return cell; - - }else if (indexPath.section ==2 && indexPath.row ==0){ - IfishCameraRecordSecondCell *cell = [tableView dequeueReusableCellWithIdentifier:@"IfishCameraRecordSecondCell"]; - if (!cell) { - cell = [[[NSBundle mainBundle]loadNibNamed:@"IfishCameraRecordSecondCell" owner:self options:nil]lastObject]; - } - cell.selectionStyle = UITableViewCellSelectionStyleNone; - cell.tag = RECODIEECELL_TIME; - self.timerIndex = indexPath; - cell.timeLabe.text = _timestr; - _isRecording ? [cell.timeLabe setTextColor:RGB(51, 51, 51)] : [cell.timeLabe setTextColor:RGB(153, 153, 153)]; - [cell cellRecordBViewCorner]; - return cell; - - }else if (indexPath.section ==2 && indexPath.row ==1){ - - IfishCameraRecordThirdCell *cell = [tableView dequeueReusableCellWithIdentifier:@"IfishCameraRecordThirdCell"]; - if (!cell) { - cell = [[[NSBundle mainBundle]loadNibNamed:@"IfishCameraRecordThirdCell" owner:self options:nil]lastObject]; - - } - cell.tag = RECODIEECELL_BTN; - cell.selectionStyle = UITableViewCellSelectionStyleNone; - [cell.recordBtn addTarget:self action:@selector(recordBtnAction:) forControlEvents:UIControlEventTouchUpInside]; - - if (_isRecording) { - cell.recordBtn.selected = YES; - [cell.recordBtn setBackgroundColor:RGB(255,115,92)]; - [cell.recordBtn setTitle:@"结束录制" forState:UIControlStateNormal]; - }else{ - cell.recordBtn.selected = NO; - [cell.recordBtn setBackgroundColor:RGB(0,184,239)]; - [cell.recordBtn setTitle:@"开始录制" forState:UIControlStateNormal]; - } - self.buttonIndex =indexPath; - [cell cellSetRecordBtnBackViewCorner]; - return cell; + }else if (indexPath.section ==1 && indexPath.row ==0){ - self.switchIndex = indexPath; - IfishCameraRecordFourCell *cell = [tableView dequeueReusableCellWithIdentifier:@"IfishCameraRecordFourCell"]; - if (!cell) { - cell = [[[NSBundle mainBundle]loadNibNamed:@"IfishCameraRecordFourCell" owner:self options:nil]lastObject]; - - } - cell.tag = RECODIEECELL_SWiTCH; - cell.selectionStyle = UITableViewCellSelectionStyleNone; - [cell.zidongSw addTarget:self action:@selector(switchAction:) forControlEvents:UIControlEventTouchUpInside]; - if (self.remoteRecordState==1) { - - [cell.zidongSw setOn:YES]; - - }else{ - [cell.zidongSw setOn:NO]; - } - return cell; + TemperatureSetModel*model=[[TemperatureSetModel alloc]init]; + model.title=@"定时录制"; + model.temperatureLabel=[[DataCenter defaultDtacenter].cache stringForKey:@"schduleRecordTime"].length?[[DataCenter defaultDtacenter].cache stringForKey:@"schduleRecordTime"]:@"09:00-16:00"; + model.status=[[DataCenter defaultDtacenter].cache stringForKey:@"schduleRecord"]; + cell.titleLabel.text=model.title; + + cell.temperaturelabel.text=model.temperatureLabel; + [cell.temPSwitch addTarget:self action:@selector(schduleRecordAction:) forControlEvents:UIControlEventTouchUpInside]; + + [cell.temPSwitch setBackgroundImage:[UIImage imageNamed:@"greenbtn_big"] forState:UIControlStateSelected]; + [cell.temPSwitch setBackgroundImage:[UIImage imageNamed:@"graybtn_big"] forState:UIControlStateNormal]; + + cell.selected=[model.status isEqualToString:@"1"]; + + + + } - - return nil; + return cell; } -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { - if (indexPath.section ==0 && indexPath.row ==0) { - - return kScreenSize.width*0.516; - - }else if (indexPath.section ==2 && indexPath.row ==0){ - - return kScreenSize.width*0.357; - - }else if (indexPath.section ==1 && indexPath.row ==0){ - - return 46*KWidth_Scale; - }else if (indexPath.section ==2 && indexPath.row ==1){ - - return 76*KWidth_Scale; - } - return 0; + return 50; } -(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{ - if (section==0) { - return kScreenSize.width*0.213; - } - return 5; + return 5; } -(UIView*)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{ - if (section ==0) { - UIView *sectionV1=[[UIView alloc] initWithFrame:CGRectMake(0, 0,self.view.frame.size.width,kScreenSize.width*0.213)]; - sectionV1.backgroundColor = RGB(242, 242, 242); - return sectionV1; - - } + UIView *sectionV2=[[UIView alloc] initWithFrame:CGRectMake(0, 0,self.view.frame.size.width,5)]; - sectionV2.backgroundColor = RGB(242, 242, 242); + sectionV2.backgroundColor =[UIColor whiteColor]; return sectionV2; } +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + if (indexPath.section==1) + { + if (!self.mydatepicView) { + _mydatepicView=[[MydatePickerView alloc]init]; + + _mydatepicView.frame=CGRectMake(0,0,kScreenSize.width,kScreenSize.height); + [_mydatepicView setIsNewXuanduo:YES]; + [_mydatepicView.picView reloadAllComponents]; + [_mydatepicView.cancleButton addTarget:self action:@selector(cancleButtonClick) forControlEvents:UIControlEventTouchUpInside]; + [_mydatepicView.sureButton addTarget:self action:@selector(doneButtonClick) forControlEvents:UIControlEventTouchUpInside]; + NSString*time=[[DataCenter defaultDtacenter].cache stringForKey:@"schduleRecordTime"].length?[[DataCenter defaultDtacenter].cache stringForKey:@"schduleRecordTime"]:@"09:00-16:00"; + NSString*start=[[time componentsSeparatedByString:@"-"] firstObject]; + NSString*end=[[time componentsSeparatedByString:@"-"] lastObject]; + NSString*startHour=[[start componentsSeparatedByString:@":"] firstObject]; + NSString*startMin=[[start componentsSeparatedByString:@":"] lastObject]; + + NSString*endHour=[[end componentsSeparatedByString:@":"] firstObject]; + + NSString*endMin=[[end componentsSeparatedByString:@":"] lastObject]; + _mydatepicView.startString=startHour; + _mydatepicView.endString=startMin; + _mydatepicView.startString1=endHour; + _mydatepicView.endString1=endHour; + [_mydatepicView.picView selectRow:[(NSArray*)(_mydatepicView.dataArr[0]) indexOfObject:startHour] inComponent:0 animated:YES]; + [_mydatepicView.picView selectRow:[(NSArray*)(_mydatepicView.dataArr[1]) indexOfObject:startMin] inComponent:1 animated:YES]; + [_mydatepicView.picView selectRow:[(NSArray*)(_mydatepicView.dataArr[2]) indexOfObject:endHour] inComponent:2 animated:YES]; + [_mydatepicView.picView selectRow:[(NSArray*)(_mydatepicView.dataArr[3]) indexOfObject:endMin] inComponent:3 animated:YES]; + + + + } + + [self.view addSubview:_mydatepicView]; + } +} #pragma mark - recordBtnAction - --(void)recordBtnAction:(UIButton*)btn{ +#pragma mark 设置时间段 +-(void)doneButtonClick{ - if (btn.selected) { - [self resetTimerlabel]; - - _isManual = NO; - //停止录制 - [self startTostVIew]; - [[P2PClient sharedClient] setRemoteRecordWithId:self.camera.cameraId - password:self.camera.cameraPass state:SETTING_VALUE_REMOTE_RECORD_STATE_OFF]; - - [self showLableAction:@"录制成功,请在回放中查看"]; - - }else{ - - - [self startRunTimerlabel]; - _isManual = YES; - //开始录制 - //获取SDCard状态 - [self startTostVIew]; - [[P2PClient sharedClient] getSDCardInfoWithId:self.camera.cameraId password:self.camera.cameraPass]; - } - - -} - --(void)startRunTimerlabel - -{ - //IfishCameraRecordThirdCell *cell=[self.view viewWithTag:RECODIEECELL_BTN]; - //cell.recordBtn.selected =YES; - _isRecording=YES; - __weak typeof(self)weakSelf=self; - NSInteger count = 30*60; - //NSInteger count = -1; - //NSInteger count = 60; - weakSelf.timer = [NSTimer scheduledTimerWithTimeInterval:1 count:count callback:^{ - weakSelf.second++; - if (weakSelf.second ==60) { - weakSelf.second = 0; - weakSelf.minute++; - } - if (weakSelf.minute ==30) { - weakSelf.minute =0; - weakSelf.second =0; - - [self resetTimerlabel]; - - _isManual = NO; - //停止录制 - [self startTostVIew]; - [[P2PClient sharedClient] setRemoteRecordWithId:self.camera.cameraId - password:self.camera.cameraPass state:SETTING_VALUE_REMOTE_RECORD_STATE_OFF]; - [self showLableAction:@"录制成功,请在回放中查看"]; - return ; - - } - - _timestr= [IfishHelperUtils formatCameraPalybackTime:weakSelf.minute second:weakSelf.second]; - NSArray *index =@[self.timerIndex]; - [self.tab reloadRowsAtIndexPaths:index withRowAnimation:UITableViewRowAnimationNone]; - - }]; - - [[NSRunLoop currentRunLoop] addTimer: weakSelf.timer forMode:NSRunLoopCommonModes]; - - - // NSArray *buttonindex =@[self.buttonIndex]; - // [self.tab reloadRowsAtIndexPaths:buttonindex withRowAnimation:UITableViewRowAnimationNone]; - -} - --(void)resetTimerlabel -{ - - _isRecording=NO; - - if (_timer) { - [_timer unfireTimer]; - } - self.minute =0; - self.second =0; - _timestr = @"00:00"; - NSArray *index =@[self.timerIndex]; - [self.tab reloadRowsAtIndexPaths:index withRowAnimation:UITableViewRowAnimationNone]; - - NSArray *buttonindex =@[self.buttonIndex]; - [self.tab reloadRowsAtIndexPaths:buttonindex withRowAnimation:UITableViewRowAnimationNone]; - - -} - -#pragma mark -加载中 - --(void)startTostVIew{ - - self.progressAlert = [[MBProgressHUD alloc] initWithView:self.view]; - [self.view addSubview:self.progressAlert]; - self.progressAlert.mode=MBProgressHUDModeIndeterminate; - self.progressAlert.customView = [[UIView alloc] init]; - //self.progressAlert.labelText = [NSString stringWithFormat:@"%@...",NSLocalizedString(@"validating", nil)]; - [self.progressAlert show:YES]; - //设置5秒超时 - [self.progressAlert hide:YES afterDelay:5]; -} - --(void)hiddenTostVIew -{ - [self.progressAlert hide:YES]; - -} - -#pragma mark - switchAction: - --(void)switchAction:(UISwitch*)sender - -{ - - IfishCameraRecordFourCell *cell =[self.view viewWithTag:RECODIEECELL_SWiTCH]; - UISwitch* swt=(UISwitch*)sender; - cell.zidongSw = swt; - if (_isRecording) { - - dispatch_async(dispatch_get_main_queue(), ^{ - [cell.zidongSw setOn:NO]; - }); - //[self.view makeToast:@"请先结束手动录制"]; - [self showLableAction:@"请先结束手动录制"]; - return; - } - - [self startTostVIew]; - - if (swt.isOn) { - _isManual = NO; - [[P2PClient sharedClient] setRemoteRecordWithId:self.camera.cameraId - password:self.camera.cameraPass state:SETTING_VALUE_REMOTE_RECORD_STATE_ON]; - [[P2PClient sharedClient] setDeviceRecordType:GWP2PRecordTypeSchedule withDeviceID:self.camera.cameraId devicePassword:self.camera.cameraPass completionBlock:^(GWP2PClient *client, BOOL success, NSDictionary *dataDictionary) { - NSLog(@"data=%@",dataDictionary); - }];; + _mydatepicView.resultString=nil; + if (_mydatepicView.startString==nil||_mydatepicView.endString==nil) { + [self showTitle:@"" messsage:@"请选择时间"]; }else{ - _isManual = YES; - [[P2PClient sharedClient] setRemoteRecordWithId:self.camera.cameraId - password:self.camera.cameraPass state:SETTING_VALUE_REMOTE_RECORD_STATE_ON]; + _mydatepicView.resultString=[NSString stringWithFormat:@"%@:%@-%@:%@",_mydatepicView.startString,_mydatepicView.endString,_mydatepicView.startString1,_mydatepicView.endString1]; + [[DataCenter defaultDtacenter].cache setString:_mydatepicView.resultString forKey:@"schduleRecordTime"]; + + [_mydatepicView removeFromSuperview]; + + TemperatureSetCell*cell=[self.tab cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:1]]; + cell.temperaturelabel.text=_mydatepicView.resultString; + + } +} +-(void)cancleButtonClick{ + + + [_mydatepicView removeFromSuperview]; +} + +-(void)nowRecordBtnAction:(UIButton*)btn{ + + btn.selected=!btn.selected; + [[DataCenter defaultDtacenter].cache setString:[NSString stringWithFormat:@"%ld",btn.selected] forKey:@"NowRecord"]; + if (btn.selected) + { + + + }else + { + + + + + } + + +} + + + +-(void)schduleRecordAction:(UISwitch*)btn + +{ + + btn.selected=!btn.selected; + + [[DataCenter defaultDtacenter].cache setString:[NSString stringWithFormat:@"%ld",btn.selected] forKey:@"schduleRecord"]; + + if (btn.selected) { + + + [[GWP2PClient sharedClient] setDeviceRecordType:GWP2PRecordTypeSchedule withDeviceID:self.camera.cameraId devicePassword:self.camera.cameraPass completionBlock:^(GWP2PClient *client, BOOL success, NSDictionary *dataDictionary) { + NSLog(@"data=%@",dataDictionary); + }]; + }else{ + + + } } -- (void)showLableAction:(NSString *)str{ - - UILabel *laberAction =[[UILabel alloc]init]; - CGFloat labW = 200; - laberAction.frame =CGRectMake(kScreenSize.width/2 - labW/2,kScreenSize.height*3/4 - 50 , labW, 40); - laberAction.clipsToBounds =YES; - laberAction.layer.cornerRadius =5; - laberAction.layer.backgroundColor = [UIColor blackColor].CGColor; - laberAction.alpha =1; - laberAction.text =str; - laberAction.textAlignment =NSTextAlignmentCenter; - //laberAction.backgroundColor =IndicatorBack_COLOR; - laberAction.font=[UIFont systemFontOfSize:14]; - laberAction.textColor=[UIColor whiteColor]; - - [self.view addSubview:laberAction]; - - [UIView animateWithDuration:ToastFade - delay:0.0 - options:UIViewAnimationOptionCurveEaseOut - animations:^{ - laberAction.alpha = 1.0; - } completion:^(BOOL finished) { - [UIView animateWithDuration:ToastFade - delay:1.5 - options:UIViewAnimationOptionCurveEaseIn - animations:^{ - laberAction.alpha = 0.0; - } completion:^(BOOL finished) { - [laberAction removeFromSuperview]; - }]; - }]; -} @end diff --git a/Ifish/models/ifishUserModel/TemperatureSetModel.h b/Ifish/models/ifishUserModel/TemperatureSetModel.h index 56544c1..96f7339 100644 --- a/Ifish/models/ifishUserModel/TemperatureSetModel.h +++ b/Ifish/models/ifishUserModel/TemperatureSetModel.h @@ -11,5 +11,5 @@ @interface TemperatureSetModel : NSObject @property(nonatomic,copy)NSString*title; @property(nonatomic,copy)NSString*temperatureLabel; -//@property(nonatomic); +@property(nonatomic,copy)NSString*status;//开关状态,新增 @end diff --git a/Ifish/views/mypicView/DatePickerCustomView.h b/Ifish/views/mypicView/DatePickerCustomView.h new file mode 100644 index 0000000..d63e15b --- /dev/null +++ b/Ifish/views/mypicView/DatePickerCustomView.h @@ -0,0 +1,16 @@ +// +// DatePickerCustomView.h +// E-Mobile +// +// Created by Yang on 15/9/18. +// +// + +#import + +@interface DatePickerCustomView : UIView +@property(nonatomic,copy)dispatch_block_t dateChanged; +@property(nonatomic,copy)dispatch_block_t cancelBlock; +@property(nonatomic,strong)UIDatePicker* datePicker; ++(instancetype)showInView:(UIView*)view Mode:(UIDatePickerMode)mode date:(NSDate*)date; +@end diff --git a/Ifish/views/mypicView/DatePickerCustomView.m b/Ifish/views/mypicView/DatePickerCustomView.m new file mode 100644 index 0000000..0c910fe --- /dev/null +++ b/Ifish/views/mypicView/DatePickerCustomView.m @@ -0,0 +1,114 @@ +// +// DatePickerCustomView.m +// E-Mobile +// +// Created by Yang on 15/9/18. +// +// +#import "DatePickerCustomView.h" + +@interface DatePickerCustomView(){ + +} +@property(nonatomic,strong)UIButton* timePickerCancelBtn; +@property(nonatomic,strong)UIView* buttonView; +@end + +@implementation DatePickerCustomView + ++(instancetype)showInView:(UIView*)view Mode:(UIDatePickerMode)mode date:(NSDate*)date +{ + DatePickerCustomView* customView = [[self alloc] initWithFrame:CGRectMake(0, 0, view.frame.size.width, view.frame.size.height)]; + if (customView) { + customView.backgroundColor=RGBA(0, 0, 0, 0.3); + + UIButton* timePickerCancelBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + customView.timePickerCancelBtn = timePickerCancelBtn; + timePickerCancelBtn.tag = 100; + timePickerCancelBtn.frame = customView.bounds; + [timePickerCancelBtn addTarget:customView action:@selector(datePickerCancelBtnPressed:) forControlEvents:UIControlEventTouchUpInside]; + [customView addSubview:timePickerCancelBtn]; + + UIDatePicker* datePicker = [[UIDatePicker alloc] initWithFrame: CGRectMake(0, customView.frame.size.height+40, customView.frame.size.width, 216)]; + customView.datePicker = datePicker; + [datePicker setLocale:[NSLocale autoupdatingCurrentLocale]]; + [datePicker setDatePickerMode:mode]; + datePicker.backgroundColor=[UIColor whiteColor]; + datePicker.tag = 101; + if (date) { + [datePicker setDate:date]; + } +// [datePicker addTarget:customView action:@selector(datePickerChanged:) forControlEvents:UIControlEventValueChanged]; + [customView addSubview:datePicker]; + + UIView *buttonView = [[UIView alloc] initWithFrame:CGRectMake(0, customView.frame.size.height, customView.frame.size.width, 40)]; + customView.buttonView = buttonView; + buttonView.backgroundColor = [UIColor colorWithRed:0.95 green:0.95 blue:0.95 alpha:1]; + [customView addSubview:buttonView]; + + UIButton *cancelBtn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 60, 40)]; + [cancelBtn addTarget:customView action:@selector(datePickerCancelBtnPressed:) forControlEvents:UIControlEventTouchUpInside]; + [cancelBtn setTitle:NSLocalizedString(@"取消", nil) forState:UIControlStateNormal]; + [cancelBtn setTitle:NSLocalizedString(@"取消", nil) forState:UIControlStateSelected]; + cancelBtn.titleLabel.font = [UIFont systemFontOfSize:15]; + [cancelBtn setTitleColor:[UIColor colorWithRed:21.0/255 green:126.0/255 blue:251.0/255 alpha:1] forState:UIControlStateNormal]; + [cancelBtn setTitleColor:[UIColor colorWithRed:21.0/255 green:126.0/255 blue:251.0/255 alpha:1] forState:UIControlStateSelected]; + [buttonView addSubview:cancelBtn]; + + UIButton *commitBtn = [[UIButton alloc] initWithFrame:CGRectMake(customView.frame.size.width-60, 0, 60, 40)]; + [commitBtn addTarget:customView action:@selector(datePickerCommitBtnPressed:) forControlEvents:UIControlEventTouchUpInside]; + [commitBtn setTitle:NSLocalizedString(@"确定", nil) forState:UIControlStateNormal]; + [commitBtn setTitle:NSLocalizedString(@"确定", nil) forState:UIControlStateSelected]; + commitBtn.titleLabel.font = [UIFont systemFontOfSize:15]; + [commitBtn setTitleColor:[UIColor colorWithRed:21.0/255 green:126.0/255 blue:251.0/255 alpha:1] forState:UIControlStateNormal]; + [commitBtn setTitleColor:[UIColor colorWithRed:21.0/255 green:126.0/255 blue:251.0/255 alpha:1] forState:UIControlStateSelected]; + [buttonView addSubview:commitBtn]; + + [customView showDatePickerInView:view]; + } + return customView; +} + +- (instancetype)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + /*init code*/ + } + return self; +} + +-(void)datePickerCancelBtnPressed:(UIButton*)btn{ + [UIView animateWithDuration:0.2 animations:^{ + self.datePicker.frame = CGRectMake(0, self.frame.size.height+40, self.frame.size.width, 216); + self.buttonView.frame = CGRectMake(0, self.frame.size.height, self.frame.size.width, 40); + }completion:^(BOOL finished) { + if (self.cancelBlock) { + self.cancelBlock(); + } + [self removeFromSuperview]; + }]; +} + +-(void)datePickerCommitBtnPressed:(UIButton*)btn { + [UIView animateWithDuration:0.2 animations:^{ + self.datePicker.frame = CGRectMake(0, self.frame.size.height+40, self.frame.size.width, 216); + self.buttonView.frame = CGRectMake(0, self.frame.size.height, self.frame.size.width, 40); + }completion:^(BOOL finished) { + self.dateChanged(); + [self removeFromSuperview]; + }]; +} + +-(void)showDatePickerInView:(UIView*)view{ + [view addSubview:self]; + [UIView animateWithDuration:0.2 animations:^{ + self.datePicker.frame = CGRectMake(0, self.frame.size.height-216, self.frame.size.width, 216); + self.buttonView.frame = CGRectMake(0, self.frame.size.height-216-40, self.frame.size.width, 40); + }]; +} + +-(void)datePickerChanged:(id)sender{ + self.dateChanged(); +} +@end From 52c13cc4166345e6913090b4d7f1e72418f4e458 Mon Sep 17 00:00:00 2001 From: kai60 Date: Sun, 18 Oct 2020 16:55:30 +0800 Subject: [PATCH 10/13] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=BD=95=E5=88=B6?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .DS_Store | Bin 10244 -> 10244 bytes Ifish.xcodeproj/project.pbxproj | 22 +++- .../xcshareddata/WorkspaceSettings.xcsettings | 2 + .../pushSetControllrs/AboutUsViewController.m | 2 +- .../IfishP2PPlayBackListViewController.m | 25 +--- .../IfishP2PPlayBackListViewController.xib | 36 ++++- .../IfishP2PPlayBack/IfishPlaybackViewCell.m | 4 +- .../IfishPlaybackViewCell.xib | 6 +- .../IfishP2PPlayBack/PlayBackViewController.h | 21 +++ .../IfishP2PPlayBack/PlayBackViewController.m | 123 ++++++++++++++++++ .../PlayBackViewController.xib | 64 +++++++++ .../CameraRecordViewController.m | 103 ++++++++++++--- .../images/equipment_iocn_videoback.png | Bin 0 -> 10146 bytes .../images/equipment_iocn_videoback@2x.png | Bin 0 -> 15734 bytes .../images/equipment_iocn_videoback@3x.png | Bin 0 -> 34441 bytes .../images/equipment_iocn_videorecord.png | Bin 0 -> 7809 bytes .../images/equipment_iocn_videorecord@2x.png | Bin 0 -> 10219 bytes ...cord => equipment_iocn_videorecord@3x.png} | Bin .../images/playBackIcon.png | Bin 0 -> 7328 bytes .../images/playBackIcon@2x.png | Bin 0 -> 9524 bytes .../images/playBackIcon@3x.png | Bin 0 -> 11699 bytes 21 files changed, 355 insertions(+), 53 deletions(-) create mode 100644 Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PPlayBack/PlayBackViewController.h create mode 100644 Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PPlayBack/PlayBackViewController.m create mode 100644 Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PPlayBack/PlayBackViewController.xib create mode 100644 Ifish/controllers/IfishYooseeFile/IfishYooseeSource/IFISHYooseeImg.bundle/images/equipment_iocn_videoback.png create mode 100644 Ifish/controllers/IfishYooseeFile/IfishYooseeSource/IFISHYooseeImg.bundle/images/equipment_iocn_videoback@2x.png create mode 100644 Ifish/controllers/IfishYooseeFile/IfishYooseeSource/IFISHYooseeImg.bundle/images/equipment_iocn_videoback@3x.png create mode 100644 Ifish/controllers/IfishYooseeFile/IfishYooseeSource/IFISHYooseeImg.bundle/images/equipment_iocn_videorecord.png create mode 100644 Ifish/controllers/IfishYooseeFile/IfishYooseeSource/IFISHYooseeImg.bundle/images/equipment_iocn_videorecord@2x.png rename Ifish/controllers/IfishYooseeFile/IfishYooseeSource/IFISHYooseeImg.bundle/images/{equipment_iocn_videorecord => equipment_iocn_videorecord@3x.png} (100%) create mode 100644 Ifish/controllers/IfishYooseeFile/IfishYooseeSource/IFISHYooseeImg.bundle/images/playBackIcon.png create mode 100644 Ifish/controllers/IfishYooseeFile/IfishYooseeSource/IFISHYooseeImg.bundle/images/playBackIcon@2x.png create mode 100644 Ifish/controllers/IfishYooseeFile/IfishYooseeSource/IFISHYooseeImg.bundle/images/playBackIcon@3x.png diff --git a/.DS_Store b/.DS_Store index 343b7a6ad7bf8fca885df27f1cf94b2cb1866edd..8aeb8d7ee2e1ff906aa724e17bcc25d92a0c8ef4 100644 GIT binary patch delta 47 ncmZn(XbIRLB+9J0W65N9QKiY6LcB~`6E?evp5ez7+s6a|Y3L4@ delta 47 ncmZn(XbIRLB+9J8-8|V{RB5uN5HFL)gUxQDXZSJ2_AvnfMw|_m diff --git a/Ifish.xcodeproj/project.pbxproj b/Ifish.xcodeproj/project.pbxproj index 6d0ace8..9380e56 100644 --- a/Ifish.xcodeproj/project.pbxproj +++ b/Ifish.xcodeproj/project.pbxproj @@ -2248,6 +2248,9 @@ C072196A253AE2290065CF17 /* IfishP2PPlayBackListViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = C0721969253AE2290065CF17 /* IfishP2PPlayBackListViewController.xib */; }; C072196D253B1F4F0065CF17 /* DatePickerCustomView.h in Headers */ = {isa = PBXBuildFile; fileRef = C072196B253B1F4F0065CF17 /* DatePickerCustomView.h */; }; C072196E253B1F4F0065CF17 /* DatePickerCustomView.m in Sources */ = {isa = PBXBuildFile; fileRef = C072196C253B1F4F0065CF17 /* DatePickerCustomView.m */; }; + C0721972253C054D0065CF17 /* PlayBackViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = C072196F253C054D0065CF17 /* PlayBackViewController.h */; }; + C0721973253C054D0065CF17 /* PlayBackViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C0721970253C054D0065CF17 /* PlayBackViewController.m */; }; + C0721974253C054D0065CF17 /* PlayBackViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = C0721971253C054D0065CF17 /* PlayBackViewController.xib */; }; C0837A57244FF5510034FEC5 /* EGOCache.m in Sources */ = {isa = PBXBuildFile; fileRef = C0837A55244FF5500034FEC5 /* EGOCache.m */; }; C0837A58244FF5510034FEC5 /* EGOCache.h in Headers */ = {isa = PBXBuildFile; fileRef = C0837A56244FF5500034FEC5 /* EGOCache.h */; }; C0873EE12491060000D47D34 /* ESPUDPSocketClient.h in Headers */ = {isa = PBXBuildFile; fileRef = C0873EBE249105FF00D47D34 /* ESPUDPSocketClient.h */; }; @@ -5710,6 +5713,9 @@ C0721969253AE2290065CF17 /* IfishP2PPlayBackListViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = IfishP2PPlayBackListViewController.xib; sourceTree = ""; }; C072196B253B1F4F0065CF17 /* DatePickerCustomView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DatePickerCustomView.h; sourceTree = ""; }; C072196C253B1F4F0065CF17 /* DatePickerCustomView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DatePickerCustomView.m; sourceTree = ""; }; + C072196F253C054D0065CF17 /* PlayBackViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PlayBackViewController.h; sourceTree = ""; }; + C0721970253C054D0065CF17 /* PlayBackViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PlayBackViewController.m; sourceTree = ""; }; + C0721971253C054D0065CF17 /* PlayBackViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = PlayBackViewController.xib; sourceTree = ""; }; C0837A55244FF5500034FEC5 /* EGOCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EGOCache.m; sourceTree = ""; }; C0837A56244FF5500034FEC5 /* EGOCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EGOCache.h; sourceTree = ""; }; C0873EBE249105FF00D47D34 /* ESPUDPSocketClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ESPUDPSocketClient.h; sourceTree = ""; }; @@ -6603,6 +6609,7 @@ 3D1C4FEB221A9EDD0096AE43 /* CameraNoParyBackVideoView.m */, 3D1C4FF4221A9EDD0096AE43 /* IfishP2PPlayBackListViewController.h */, 3D1C4FEC221A9EDD0096AE43 /* IfishP2PPlayBackListViewController.m */, + C0721969253AE2290065CF17 /* IfishP2PPlayBackListViewController.xib */, 3D1C4FF0221A9EDD0096AE43 /* IfishPlaybackViewCell.h */, 3D1C4FF7221A9EDD0096AE43 /* IfishPlaybackViewCell.m */, 3D1C4FF2221A9EDD0096AE43 /* IfishPlaybackViewCell.xib */, @@ -6612,7 +6619,9 @@ 3D1C4FF3221A9EDD0096AE43 /* P2PPlayingbackVC.m */, 3D1C4FEF221A9EDD0096AE43 /* PlayBaseViewController.h */, 3D1C4FF5221A9EDD0096AE43 /* PlayBaseViewController.m */, - C0721969253AE2290065CF17 /* IfishP2PPlayBackListViewController.xib */, + C072196F253C054D0065CF17 /* PlayBackViewController.h */, + C0721970253C054D0065CF17 /* PlayBackViewController.m */, + C0721971253C054D0065CF17 /* PlayBackViewController.xib */, ); path = IfishP2PPlayBack; sourceTree = ""; @@ -13117,6 +13126,7 @@ 3D1C50D3221A9EE00096AE43 /* UIScrollView+SVInfiniteScrolling.h in Headers */, CBA61655228F9A6C00ED380D /* YYModel.h in Headers */, CB484DFE22B8C8C80075F050 /* cpu.h in Headers */, + C0721972253C054D0065CF17 /* PlayBackViewController.h in Headers */, C0EA8A2F23AF74F4003DC53B /* UIImage+MultiFormat.h in Headers */, CB4820882334E99700A50C92 /* IQKeyboardManagerConstants.h in Headers */, 3D1C5089221A9EDF0096AE43 /* KTPhotoView.h in Headers */, @@ -14252,6 +14262,7 @@ 883E788C1D48A5E50030E075 /* infoSureBtnCell.xib in Resources */, 882956881DBDA3A200E9DDD7 /* ifish_hold_headerImg@2x.png in Resources */, 882956EF1DBDA3A300E9DDD7 /* bubble@1x.png in Resources */, + C0721974253C054D0065CF17 /* PlayBackViewController.xib in Resources */, 882957601DBDA3A300E9DDD7 /* icon2.png in Resources */, 8829570E1DBDA3A300E9DDD7 /* ifish_shareblog.png in Resources */, 886D15871E6066D20085F7D6 /* introlImage_1.png in Resources */, @@ -15539,6 +15550,7 @@ 8876A5881BB83447007A4B54 /* main.m in Sources */, 889133071ECE999A00F52EBC /* LXCompressionVideo.m in Sources */, 886E3A0B1EEA44B5007C0B04 /* UserExtendataArchaver.m in Sources */, + C0721973253C054D0065CF17 /* PlayBackViewController.m in Sources */, 881F0F4F1D73DF4E0091507E /* BaoGaoViewFirstCell.m in Sources */, E51D7D5B208CF4E7001FF053 /* RuiMeiInputViewController.m in Sources */, 881672241EA5DE2B00BEBF23 /* UMComSelectTopicCell.m in Sources */, @@ -15765,7 +15777,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 3; + CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = WFX8GD5HFX; ENABLE_BITCODE = NO; ENABLE_TESTABILITY = YES; @@ -15840,7 +15852,7 @@ "$(PROJECT_DIR)/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/libAVCtrlIOS/libAVCtrl", "$(PROJECT_DIR)/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/libAVCtrl", ); - MARKETING_VERSION = 5.1.6; + MARKETING_VERSION = 5.1.7; ONLY_ACTIVE_ARCH = YES; OTHER_LDFLAGS = ( "-ObjC", @@ -15883,7 +15895,7 @@ CODE_SIGN_IDENTITY = "iPhone Distribution"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 3; + CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = WFX8GD5HFX; ENABLE_BITCODE = NO; ENABLE_TESTABILITY = YES; @@ -15958,7 +15970,7 @@ "$(PROJECT_DIR)/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/libAVCtrlIOS/libAVCtrl", "$(PROJECT_DIR)/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/libAVCtrl", ); - MARKETING_VERSION = 5.1.6; + MARKETING_VERSION = 5.1.7; ONLY_ACTIVE_ARCH = NO; OTHER_LDFLAGS = ( "-ObjC", diff --git a/Ifish.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/Ifish.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings index 949b678..6b30c74 100644 --- a/Ifish.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ b/Ifish.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -4,5 +4,7 @@ BuildSystemType Original + PreviewsEnabled + diff --git a/Ifish/controllers/IfishTabControllers/我的/mineControllers/pushSetControllrs/AboutUsViewController.m b/Ifish/controllers/IfishTabControllers/我的/mineControllers/pushSetControllrs/AboutUsViewController.m index 546f3ad..aeacbc0 100644 --- a/Ifish/controllers/IfishTabControllers/我的/mineControllers/pushSetControllrs/AboutUsViewController.m +++ b/Ifish/controllers/IfishTabControllers/我的/mineControllers/pushSetControllrs/AboutUsViewController.m @@ -25,7 +25,7 @@ // CFShow((__bridge CFTypeRef)(infoDic)); NSString *app_Version=[infoDic objectForKey:@"CFBundleShortVersionString"]; NSLog(@"app_Version%@",app_Version); - app_Version=@"4.7.6"; + app_Version=@"4.7.7"; NSString *versionStr = [NSString stringWithFormat:@"v%@",app_Version]; NSString *buildVersion = [infoDic objectForKey:@"CFBundleVersion"]; if (buildVersion.length > 0) { diff --git a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PPlayBack/IfishP2PPlayBackListViewController.m b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PPlayBack/IfishP2PPlayBackListViewController.m index 5ce3061..6e884c2 100644 --- a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PPlayBack/IfishP2PPlayBackListViewController.m +++ b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PPlayBack/IfishP2PPlayBackListViewController.m @@ -12,6 +12,7 @@ #import "IfishPlaybackViewCell.h" #import #import "DatePickerCustomView.h" +#import "PlayBackViewController.h" #define BACKVIEW_ROWH 60 #define ANIM_VIEW_WIDTH_AND_HEIGHT 80 @@ -282,25 +283,13 @@ - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ - [self.movieView setHidden:NO]; - self.movieView.alpha = 0.3; + GWPlaybackFileModel*model=[self.playbackFiles objectAtIndex:indexPath.row]; + PlayBackViewController*play=[[PlayBackViewController alloc]init]; + play.camera=self.camera; + play.model=model; - [UIView transitionWithView:self.movieView duration:0.3 options:UIViewAnimationOptionCurveEaseOut - animations:^{ - self.movieView.alpha = 1.0; - } - - completion:^(BOOL finished){ - - } - ]; - if (indexPath.section ==0) { - - [[P2PClient sharedClient] p2pPlaybackCallWithId:self.camera.cameraId password:self.camera.cameraPass index:indexPath.row]; - - }else{ - [[P2PClient sharedClient] p2pPlaybackCallWithId:self.camera.cameraId password:self.camera.cameraPass index:indexPath.row + self.playbackFiles.count]; - } + + [self.navigationController pushViewController:play animated:YES]; } diff --git a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PPlayBack/IfishP2PPlayBackListViewController.xib b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PPlayBack/IfishP2PPlayBackListViewController.xib index 594f1a4..985a991 100644 --- a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PPlayBack/IfishP2PPlayBackListViewController.xib +++ b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PPlayBack/IfishP2PPlayBackListViewController.xib @@ -29,6 +29,20 @@ + + + + + + + + + + + + + + + + + + + + - - - @@ -89,6 +106,13 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishcameraBottomHView/CameraRecordViewController.m b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishcameraBottomHView/CameraRecordViewController.m index 97ff62e..880a228 100644 --- a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishcameraBottomHView/CameraRecordViewController.m +++ b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishcameraBottomHView/CameraRecordViewController.m @@ -36,6 +36,7 @@ static const CGFloat ToastFade = 0.2; @property(assign) unsigned int remoteRecordState; //本app 需求模式 非摄像头模式 @property(nonatomic,strong) NSMutableArray*array; +@property(nonatomic,strong) NSString*recordType; @property (nonatomic, strong)MydatePickerView *mydatepicView; @end @@ -46,8 +47,11 @@ static const CGFloat ToastFade = 0.2; [super viewDidLoad]; // Do any additional setup after loading the view. [self addTitleViewWithTitle:@"录制视频"]; - - + self.recordType=[[DataCenter defaultDtacenter].cache stringForKey:@"recordType"]; + if (self.recordType.length) + { + self.recordType=@"0"; + } [self creatUI]; // self.view.backgroundColor = RGB(242, 242, 242); @@ -80,11 +84,20 @@ static const CGFloat ToastFade = 0.2; BOOL connectDevice = [[GWP2PClient sharedClient] connectWithAccount:userIDName codeStr1:model.P2PVerifyCode1 codeStr2:model.P2PVerifyCode2 sessionID1:model.sessionID sessionID2:model.sessionID2 customerIDs:nil]; if (connectDevice) { - + [[GWP2PClient sharedClient] setDeviceRecordDefinition:GWP2PRecordDefinitionStandardDefinition withDeviceID:self.camera.cameraId devicePassword:self.camera.cameraPass completionBlock:^(GWP2PClient *client, BOOL success, NSDictionary *dataDictionary) { + + }]; }else{ - NSLog(@"p2pConnect failure.失败,不能操作设备"); + + [self.view makeToast:@"p2pConnect failure.失败,不能操作设备,请重试"]; } } + else + { + [[GWP2PClient sharedClient] setDeviceRecordDefinition:GWP2PRecordDefinitionStandardDefinition withDeviceID:self.camera.cameraId devicePassword:self.camera.cameraPass completionBlock:^(GWP2PClient *client, BOOL success, NSDictionary *dataDictionary) { + + }]; + } } @@ -132,7 +145,7 @@ static const CGFloat ToastFade = 0.2; TemperatureSetModel*model=[[TemperatureSetModel alloc]init]; model.title=@"即时录制"; model.temperatureLabel=@""; - model.status=[[DataCenter defaultDtacenter].cache stringForKey:@"NowRecord"]; + model.status=self.recordType;; cell.titleLabel.text=model.title; cell.temperaturelabel.text=model.temperatureLabel; @@ -140,7 +153,7 @@ static const CGFloat ToastFade = 0.2; [cell.temPSwitch setBackgroundImage:[UIImage imageNamed:@"greenbtn_big"] forState:UIControlStateSelected]; [cell.temPSwitch setBackgroundImage:[UIImage imageNamed:@"graybtn_big"] forState:UIControlStateNormal]; - cell.selected=[model.status isEqualToString:@"1"]; + cell.temPSwitch.selected=[model.status isEqualToString:@"1"]; @@ -152,7 +165,7 @@ static const CGFloat ToastFade = 0.2; TemperatureSetModel*model=[[TemperatureSetModel alloc]init]; model.title=@"定时录制"; model.temperatureLabel=[[DataCenter defaultDtacenter].cache stringForKey:@"schduleRecordTime"].length?[[DataCenter defaultDtacenter].cache stringForKey:@"schduleRecordTime"]:@"09:00-16:00"; - model.status=[[DataCenter defaultDtacenter].cache stringForKey:@"schduleRecord"]; + model.status=self.recordType;; cell.titleLabel.text=model.title; cell.temperaturelabel.text=model.temperatureLabel; @@ -161,7 +174,7 @@ static const CGFloat ToastFade = 0.2; [cell.temPSwitch setBackgroundImage:[UIImage imageNamed:@"greenbtn_big"] forState:UIControlStateSelected]; [cell.temPSwitch setBackgroundImage:[UIImage imageNamed:@"graybtn_big"] forState:UIControlStateNormal]; - cell.selected=[model.status isEqualToString:@"1"]; + cell.temPSwitch.selected=[model.status isEqualToString:@"2"]; @@ -257,20 +270,40 @@ static const CGFloat ToastFade = 0.2; -(void)nowRecordBtnAction:(UIButton*)btn{ btn.selected=!btn.selected; - [[DataCenter defaultDtacenter].cache setString:[NSString stringWithFormat:@"%ld",btn.selected] forKey:@"NowRecord"]; + ; if (btn.selected) { - + self.recordType=@"1"; + [[DataCenter defaultDtacenter].cache setString:self.recordType forKey:@"recordType"]; + [[GWP2PClient sharedClient] setDeviceRecordType:GWP2PRecordTypeManual withDeviceID:self.camera.cameraId devicePassword:self.camera.cameraPass completionBlock:^(GWP2PClient *client, BOOL success, NSDictionary *dataDictionary) { + + if (success) + { + [self.view makeToast:@"设置成功"]; + } + else + { + [self.view makeToast:@"设置失败"]; + } + }]; }else { - - - - + self.recordType=@"0"; + [[DataCenter defaultDtacenter].cache setString:self.recordType forKey:@"recordType"]; + + [[GWP2PClient sharedClient] setDeviceRecordType:GWP2PRecordTypeAlarm withDeviceID:self.camera.cameraId devicePassword:self.camera.cameraPass completionBlock:^(GWP2PClient *client, BOOL success, NSDictionary *dataDictionary) { + NSLog(@"data=%@",dataDictionary); + }]; + [[GWP2PClient sharedClient] setDevicePrerecordState:YES withDeviceID:self.camera.cameraId devicePassword:self.camera.cameraPass completionBlock:^(GWP2PClient *client, BOOL success, NSDictionary *dataDictionary) { + + }]; + [[GWP2PClient sharedClient] setDeviceAlarmRecordTime:3 withDeviceID:self.camera.cameraId devicePassword:self.camera.cameraPass completionBlock:^(GWP2PClient *client, BOOL success, NSDictionary *dataDictionary) { + + }]; } - + [self.tab reloadData]; } @@ -281,19 +314,53 @@ static const CGFloat ToastFade = 0.2; btn.selected=!btn.selected; - [[DataCenter defaultDtacenter].cache setString:[NSString stringWithFormat:@"%ld",btn.selected] forKey:@"schduleRecord"]; + if (btn.selected) { + self.recordType=@"2"; + [[DataCenter defaultDtacenter].cache setString:self.recordType forKey:@"recordType"]; [[GWP2PClient sharedClient] setDeviceRecordType:GWP2PRecordTypeSchedule withDeviceID:self.camera.cameraId devicePassword:self.camera.cameraPass completionBlock:^(GWP2PClient *client, BOOL success, NSDictionary *dataDictionary) { NSLog(@"data=%@",dataDictionary); }]; + NSString*time=[[DataCenter defaultDtacenter].cache stringForKey:@"schduleRecordTime"].length?[[DataCenter defaultDtacenter].cache stringForKey:@"schduleRecordTime"]:@"09:00-16:00"; + NSString*start=[[time componentsSeparatedByString:@"-"] firstObject]; + NSString*end=[[time componentsSeparatedByString:@"-"] lastObject]; + NSString*startHour=[[start componentsSeparatedByString:@":"] firstObject]; + NSString*startMin=[[start componentsSeparatedByString:@":"] lastObject]; + + NSString*endHour=[[end componentsSeparatedByString:@":"] firstObject]; + + NSString*endMin=[[end componentsSeparatedByString:@":"] lastObject]; + [[GWP2PClient sharedClient] setDevicePlanedRecordTimeWithFromHour:startHour.integerValue fromMinute:startMin.integerValue toHour:endHour.integerValue toMinute:endMin.integerValue deviceID:self.camera.cameraId devicePassword:self.camera.cameraPass completionBlock:^(GWP2PClient *client, BOOL success, NSDictionary *dataDictionary) { + + if (success) + { + [self.view makeToast:@"设置成功"]; + } + else + { + [self.view makeToast:@"设置失败"]; + } + }]; + + }else{ - + self.recordType=@"0"; + [[DataCenter defaultDtacenter].cache setString:self.recordType forKey:@"recordType"]; - + [[GWP2PClient sharedClient] setDeviceRecordType:GWP2PRecordTypeAlarm withDeviceID:self.camera.cameraId devicePassword:self.camera.cameraPass completionBlock:^(GWP2PClient *client, BOOL success, NSDictionary *dataDictionary) { + NSLog(@"data=%@",dataDictionary); + }]; + [[GWP2PClient sharedClient] setDevicePrerecordState:YES withDeviceID:self.camera.cameraId devicePassword:self.camera.cameraPass completionBlock:^(GWP2PClient *client, BOOL success, NSDictionary *dataDictionary) { + + }]; + [[GWP2PClient sharedClient] setDeviceAlarmRecordTime:3 withDeviceID:self.camera.cameraId devicePassword:self.camera.cameraPass completionBlock:^(GWP2PClient *client, BOOL success, NSDictionary *dataDictionary) { + + }]; } + [self.tab reloadData]; } diff --git a/Ifish/controllers/IfishYooseeFile/IfishYooseeSource/IFISHYooseeImg.bundle/images/equipment_iocn_videoback.png b/Ifish/controllers/IfishYooseeFile/IfishYooseeSource/IFISHYooseeImg.bundle/images/equipment_iocn_videoback.png new file mode 100644 index 0000000000000000000000000000000000000000..2e765fef029de39c67f3d7482bf1dd4f8af30174 GIT binary patch literal 10146 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 literal 0 HcmV?d00001 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYooseeSource/IFISHYooseeImg.bundle/images/equipment_iocn_videoback@2x.png b/Ifish/controllers/IfishYooseeFile/IfishYooseeSource/IFISHYooseeImg.bundle/images/equipment_iocn_videoback@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..3a1e31132f1e885c7e49430987e71120d44985b6 GIT binary patch literal 15734 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 literal 0 HcmV?d00001 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYooseeSource/IFISHYooseeImg.bundle/images/equipment_iocn_videoback@3x.png b/Ifish/controllers/IfishYooseeFile/IfishYooseeSource/IFISHYooseeImg.bundle/images/equipment_iocn_videoback@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..3c8ef5c83a23632c61ed0d9090d0cd1e052a6e5c GIT binary patch literal 34441 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 F{{SWyYDEA5 literal 0 HcmV?d00001 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYooseeSource/IFISHYooseeImg.bundle/images/playBackIcon@3x.png b/Ifish/controllers/IfishYooseeFile/IfishYooseeSource/IFISHYooseeImg.bundle/images/playBackIcon@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..bad89231ba95a401927fcfa5e0747d529a6b4747 GIT binary patch literal 11699 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 literal 0 HcmV?d00001 From 0611c6147bbe33a1bc7edfc9f3c9b1354226b137 Mon Sep 17 00:00:00 2001 From: kai60 Date: Mon, 19 Oct 2020 22:17:35 +0800 Subject: [PATCH 11/13] =?UTF-8?q?=E8=A7=86=E9=A2=91=E5=BD=95=E5=88=B6bug?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .DS_Store | Bin 10244 -> 10244 bytes Ifish.xcodeproj/project.pbxproj | 4 +- Ifish/Common/CommonUtils.m | 2 +- Ifish/Utinitys/Define.h | 4 ++ Ifish/Utinitys/EGOCache/EGOCache.h | 1 + Ifish/Utinitys/EGOCache/EGOCache.m | 7 ++++ .../IfishP2PMonitorController.m | 4 +- .../CameraNoParyBackVideoView.m | 10 ++--- .../IfishP2PPlayBackListViewController.m | 12 +++++- .../IfishP2PPlayBackListViewController.xib | 36 ++++++++++++------ .../PlayBackViewController.xib | 6 +-- .../CameraRecordViewController.m | 33 ++++++++++++---- 12 files changed, 85 insertions(+), 34 deletions(-) diff --git a/.DS_Store b/.DS_Store index 8aeb8d7ee2e1ff906aa724e17bcc25d92a0c8ef4..df46f5a3f1059b573a6367ae52b27f0ebc5b849d 100644 GIT binary patch delta 106 zcmZn(XbG6$jIU^hRb_GTUdc2=g{m6P2?l|*v$U0jlK@{<@C7&!hsNqi(V?~o%% XVzQ= 812.0f; + return ([[UIApplication sharedApplication] statusBarFrame].size.height> 20); }else{ return NO; } diff --git a/Ifish/Utinitys/Define.h b/Ifish/Utinitys/Define.h index 3a532ab..484e7c1 100644 --- a/Ifish/Utinitys/Define.h +++ b/Ifish/Utinitys/Define.h @@ -81,6 +81,10 @@ alpha:1.0] #define MAINSCREEN_SCALE [[UIScreen mainScreen] scale] #define KWidth_Scale [UIScreen mainScreen].bounds.size.width/375.0f +#define IS_iPhoneX [CommonUtils isIphoneX] +#define TabbarHeight (IS_iPhoneX?83:49) +#define MyNavBarHeight (IS_iPhoneX?88:64) +#define StatusBarHeight (IS_iPhoneX?[[UIApplication sharedApplication] statusBarFrame].size.height:20) #import "MyControl.h" #import "DataCenter.h" #import "UserModel.h" diff --git a/Ifish/Utinitys/EGOCache/EGOCache.h b/Ifish/Utinitys/EGOCache/EGOCache.h index ab84607..6490587 100755 --- a/Ifish/Utinitys/EGOCache/EGOCache.h +++ b/Ifish/Utinitys/EGOCache/EGOCache.h @@ -66,6 +66,7 @@ FOUNDATION_EXPORT const unsigned char EGOCacheVersionString[]; - (NSString* __nullable)stringForKey:(NSString* __nonnull)key; - (void)setString:(NSString* __nonnull)aString forKey:(NSString* __nonnull)key; +- (void)setSynString:(NSString*)aString forKey:(NSString*)key; - (void)setString:(NSString* __nonnull)aString forKey:(NSString* __nonnull)key withTimeoutInterval:(NSTimeInterval)timeoutInterval; - (NSDate* __nullable)dateForKey:(NSString* __nonnull)key; diff --git a/Ifish/Utinitys/EGOCache/EGOCache.m b/Ifish/Utinitys/EGOCache/EGOCache.m index de8abda..262d966 100755 --- a/Ifish/Utinitys/EGOCache/EGOCache.m +++ b/Ifish/Utinitys/EGOCache/EGOCache.m @@ -274,6 +274,13 @@ static inline NSString* cachePathForKey(NSString* directory, NSString* key) { - (void)setString:(NSString*)aString forKey:(NSString*)key { [self setString:aString forKey:key withTimeoutInterval:self.defaultTimeoutInterval]; } +- (void)setSynString:(NSString*)aString forKey:(NSString*)key { + CHECK_FOR_EGOCACHE_PLIST(); + NSString* cachePath = cachePathForKey(_directory, key); + [[aString dataUsingEncoding:NSUTF8StringEncoding] writeToFile:cachePath atomically:YES]; + [self setCacheTimeoutInterval:self.defaultTimeoutInterval forKey:key]; +} + - (void)setString:(NSString*)aString forKey:(NSString*)key withTimeoutInterval:(NSTimeInterval)timeoutInterval { [self setData:[aString dataUsingEncoding:NSUTF8StringEncoding] forKey:key withTimeoutInterval:timeoutInterval]; diff --git a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PMonitorController.m b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PMonitorController.m index 19c6aad..66cbcf1 100644 --- a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PMonitorController.m +++ b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PMonitorController.m @@ -632,7 +632,7 @@ Strong UIImage *screenShotImage;//截图 //布防撤防、对讲、截图工具栏 ****** 云台 - CameraBottomHView *bottomToolHView = [[CameraBottomHView alloc] initWithFrame:CGRectMake(0.0, CGRectGetMaxY(self.segControl.frame) + 10, width, height-CGRectGetMaxY(self.segControl.frame))]; + 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]; @@ -640,7 +640,7 @@ Strong UIImage *screenShotImage;//截图 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)]; + 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; diff --git a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PPlayBack/CameraNoParyBackVideoView.m b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PPlayBack/CameraNoParyBackVideoView.m index b7b647d..9be5d95 100644 --- a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PPlayBack/CameraNoParyBackVideoView.m +++ b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PPlayBack/CameraNoParyBackVideoView.m @@ -22,7 +22,7 @@ if (self) { CGFloat viewH =200; - UIView *holdView = [[UIView alloc] initWithFrame:CGRectMake(0,frame.size.height/2 -viewH, kScreenSize.width, viewH)]; + UIView *holdView = [[UIView alloc] initWithFrame:self.bounds]; self.backgroundColor = TABLE_BACKGROUD_COLOR; holdView.backgroundColor = TABLE_BACKGROUD_COLOR; //self.backgroundColor = [UIColor redColor]; @@ -55,15 +55,15 @@ if (self.dataType == noDataViewTypeNOSDCard) { - CGFloat imgX = self.frame.size.width/2 - 110*KWidth_Scale/2; - self.backImg.frame =CGRectMake(imgX ,kScreenSize.height/4,110*KWidth_Scale, 110*KWidth_Scale*0.82); + CGFloat imgX = self.frame.size.width/2 - 110/2; + self.backImg.frame =CGRectMake(imgX,(self.frame.size.height-110*0.82)/2, 110, 110*0.82); self.title.frame =CGRectMake(0, CGRectGetMaxY(self.backImg.frame) + 20 , self.frame.size.width,20); self.subTitle.frame = CGRectMake(0, CGRectGetMaxY(self.title.frame) + 10, self.frame.size.width,20); }else{ - CGFloat imgX = self.frame.size.width/2 - 90*KWidth_Scale/2; - self.backImg.frame =CGRectMake(imgX ,kScreenSize.height/4,90*KWidth_Scale, 90*KWidth_Scale*0.86); + CGFloat imgX = self.frame.size.width/2 - 110/2; + self.backImg.frame =CGRectMake(imgX,(self.frame.size.height-110*0.82)/2, 110, 110*0.82); self.title.frame =CGRectMake(0, CGRectGetMaxY(self.backImg.frame) + 23 , self.frame.size.width,20); //self.backgroundColor = [UIColor blueColor]; } diff --git a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PPlayBack/IfishP2PPlayBackListViewController.m b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PPlayBack/IfishP2PPlayBackListViewController.m index 6e884c2..07ac4e4 100644 --- a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PPlayBack/IfishP2PPlayBackListViewController.m +++ b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PPlayBack/IfishP2PPlayBackListViewController.m @@ -73,6 +73,7 @@ if (success) { self.hasSDCard=YES; + [self initNoSDDataViewHidden:YES]; } else { @@ -164,8 +165,8 @@ NSString *string = [formatter stringFromDate:nowDate]; // [self.startBtn setTitle:[formatter stringFromDate:[nowDate dateByAddingTimeInterval:-60*60]] forState:UIControlStateNormal]; [self.endBtn setTitle:string forState:UIControlStateNormal]; - self.startDate=nowDate; - self.startDate=[nowDate dateByAddingTimeInterval:-60*60*2]; + self.startDate=[nowDate dateByAddingTimeInterval:-60*60]; + self.endDate=nowDate; } - (IBAction)startTimeClick:(UIButton *)sender { @@ -215,6 +216,10 @@ } - (IBAction)searchClick:(UIButton *)sender { + if ([self.startDate compare:self.endDate]==NSOrderedDescending) { + [self.view makeToast:@"开始时间必须小于结束时间"]; + return;; + } [MBProgressHUD showHUDAddedTo:self.view animated:YES]; [[GWP2PClient sharedClient] getDevicePlaybackFilesWithDeviceID:self.camera.cameraId devicePassword:self.camera.cameraPass startDate:self.startDate endDate:self.endDate completionBlock:^(GWP2PClient *client, BOOL success, NSDictionary *dataDictionary) { [MBProgressHUD hideHUDForView:self.view animated:YES]; @@ -226,6 +231,7 @@ NSArray*files=dataDictionary[@"files"]; if ([files isKindOfClass:[NSArray class]]&&files.count) { + [self initNoVideoDataViewHidden:YES]; [self.playbackFiles addObjectsFromArray:files]; [self.tableView reloadData]; @@ -238,6 +244,7 @@ else { [self initNoVideoDataViewHidden:NO]; + [self connectDevice]; } }]; } @@ -290,6 +297,7 @@ [self.navigationController pushViewController:play animated:YES]; + [tableView deselectRowAtIndexPath:indexPath animated:YES]; } diff --git a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PPlayBack/IfishP2PPlayBackListViewController.xib b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PPlayBack/IfishP2PPlayBackListViewController.xib index 985a991..d522aaa 100644 --- a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PPlayBack/IfishP2PPlayBackListViewController.xib +++ b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/IfishP2PPlayBack/IfishP2PPlayBackListViewController.xib @@ -48,15 +48,15 @@ - +