diff --git a/.DS_Store b/.DS_Store index 3444832..2075381 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/Ifish.xcodeproj/project.pbxproj b/Ifish.xcodeproj/project.pbxproj index da08204..23e952e 100644 --- a/Ifish.xcodeproj/project.pbxproj +++ b/Ifish.xcodeproj/project.pbxproj @@ -10,14 +10,360 @@ 3D13F835212FE2C200D725F7 /* IFishWaterChangeView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D13F834212FE2C200D725F7 /* IFishWaterChangeView.m */; }; 3D13F837212FE2D100D725F7 /* IFishWaterChangeView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3D13F836212FE2D100D725F7 /* IFishWaterChangeView.xib */; }; 3D13F83B212FE48000D725F7 /* UIView+GetView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D13F839212FE47F00D725F7 /* UIView+GetView.m */; }; + 3D1C17452171BB0700A159A8 /* PNPieChartDataItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C17222171BB0600A159A8 /* PNPieChartDataItem.m */; }; + 3D1C17462171BB0700A159A8 /* PNChartLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C17272171BB0600A159A8 /* PNChartLabel.m */; }; + 3D1C17472171BB0700A159A8 /* PNScatterChartDataItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C17292171BB0600A159A8 /* PNScatterChartDataItem.m */; }; + 3D1C17482171BB0700A159A8 /* PNRadarChartDataItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C172B2171BB0600A159A8 /* PNRadarChartDataItem.m */; }; + 3D1C17492171BB0700A159A8 /* PNGenericChart.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C172D2171BB0600A159A8 /* PNGenericChart.m */; }; + 3D1C174A2171BB0700A159A8 /* PNBarChart.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C172E2171BB0600A159A8 /* PNBarChart.m */; }; + 3D1C174B2171BB0700A159A8 /* PNLineChart.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C172F2171BB0600A159A8 /* PNLineChart.m */; }; + 3D1C174C2171BB0700A159A8 /* PNCircleChart.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C17302171BB0600A159A8 /* PNCircleChart.m */; }; + 3D1C174D2171BB0700A159A8 /* PNLineChartData.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C17312171BB0600A159A8 /* PNLineChartData.m */; }; + 3D1C174E2171BB0700A159A8 /* PNLineChartDataItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C17322171BB0600A159A8 /* PNLineChartDataItem.m */; }; + 3D1C174F2171BB0700A159A8 /* PNPieChart.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C17342171BB0600A159A8 /* PNPieChart.m */; }; + 3D1C17502171BB0700A159A8 /* PNRadarChart.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C17352171BB0600A159A8 /* PNRadarChart.m */; }; + 3D1C17512171BB0700A159A8 /* PNColor.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C17372171BB0700A159A8 /* PNColor.m */; }; + 3D1C17522171BB0700A159A8 /* PNScatterChartData.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C17382171BB0700A159A8 /* PNScatterChartData.m */; }; + 3D1C17532171BB0700A159A8 /* PNBar.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C17392171BB0700A159A8 /* PNBar.m */; }; + 3D1C17542171BB0700A159A8 /* UICountingLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C173B2171BB0700A159A8 /* UICountingLabel.m */; }; + 3D1C17552171BB0700A159A8 /* PNScatterChart.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C173E2171BB0700A159A8 /* PNScatterChart.m */; }; + 3D1C5037221A9EDE0096AE43 /* elian.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F04221A9EDD0096AE43 /* elian.h */; }; + 3D1C5038221A9EDE0096AE43 /* MD5Manager.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F06221A9EDD0096AE43 /* MD5Manager.h */; }; + 3D1C5039221A9EDE0096AE43 /* libMD5Manager.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3D1C4F07221A9EDD0096AE43 /* libMD5Manager.a */; }; + 3D1C503A221A9EDE0096AE43 /* Rtsp_instance.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F09221A9EDD0096AE43 /* Rtsp_instance.h */; }; + 3D1C503B221A9EDE0096AE43 /* time.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F0C221A9EDD0096AE43 /* time.h */; }; + 3D1C503C221A9EDE0096AE43 /* intfloat.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F0D221A9EDD0096AE43 /* intfloat.h */; }; + 3D1C503D221A9EDE0096AE43 /* error.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F0E221A9EDD0096AE43 /* error.h */; }; + 3D1C503E221A9EDE0096AE43 /* fifo.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F0F221A9EDD0096AE43 /* fifo.h */; }; + 3D1C503F221A9EDE0096AE43 /* blowfish.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F10221A9EDD0096AE43 /* blowfish.h */; }; + 3D1C5040221A9EDE0096AE43 /* version.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F11221A9EDD0096AE43 /* version.h */; }; + 3D1C5041221A9EDE0096AE43 /* samplefmt.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F12221A9EDD0096AE43 /* samplefmt.h */; }; + 3D1C5042221A9EDE0096AE43 /* pixdesc.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F13221A9EDD0096AE43 /* pixdesc.h */; }; + 3D1C5043221A9EDE0096AE43 /* base64.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F14221A9EDD0096AE43 /* base64.h */; }; + 3D1C5044221A9EDE0096AE43 /* rational.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F15221A9EDD0096AE43 /* rational.h */; }; + 3D1C5045221A9EDE0096AE43 /* sha.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F16221A9EDD0096AE43 /* sha.h */; }; + 3D1C5046221A9EDE0096AE43 /* avconfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F17221A9EDD0096AE43 /* avconfig.h */; }; + 3D1C5047221A9EDE0096AE43 /* lfg.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F18221A9EDD0096AE43 /* lfg.h */; }; + 3D1C5048221A9EDE0096AE43 /* avutil.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F19221A9EDD0096AE43 /* avutil.h */; }; + 3D1C5049221A9EDE0096AE43 /* intfloat_readwrite.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F1A221A9EDD0096AE43 /* intfloat_readwrite.h */; }; + 3D1C504A221A9EDE0096AE43 /* xtea.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F1B221A9EDD0096AE43 /* xtea.h */; }; + 3D1C504B221A9EDF0096AE43 /* crc.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F1C221A9EDD0096AE43 /* crc.h */; }; + 3D1C504C221A9EDF0096AE43 /* file.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F1D221A9EDD0096AE43 /* file.h */; }; + 3D1C504D221A9EDF0096AE43 /* md5.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F1E221A9EDD0096AE43 /* md5.h */; }; + 3D1C504E221A9EDF0096AE43 /* audio_fifo.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F1F221A9EDD0096AE43 /* audio_fifo.h */; }; + 3D1C504F221A9EDF0096AE43 /* attributes.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F20221A9EDD0096AE43 /* attributes.h */; }; + 3D1C5050221A9EDF0096AE43 /* adler32.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F21221A9EDD0096AE43 /* adler32.h */; }; + 3D1C5051221A9EDF0096AE43 /* timecode.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F22221A9EDD0096AE43 /* timecode.h */; }; + 3D1C5052221A9EDF0096AE43 /* common.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F23221A9EDD0096AE43 /* common.h */; }; + 3D1C5053221A9EDF0096AE43 /* hmac.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F24221A9EDD0096AE43 /* hmac.h */; }; + 3D1C5054221A9EDF0096AE43 /* eval.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F25221A9EDD0096AE43 /* eval.h */; }; + 3D1C5055221A9EDF0096AE43 /* dict.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F26221A9EDD0096AE43 /* dict.h */; }; + 3D1C5056221A9EDF0096AE43 /* random_seed.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F27221A9EDD0096AE43 /* random_seed.h */; }; + 3D1C5057221A9EDF0096AE43 /* opt.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F28221A9EDD0096AE43 /* opt.h */; }; + 3D1C5058221A9EDF0096AE43 /* log.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F29221A9EDD0096AE43 /* log.h */; }; + 3D1C5059221A9EDF0096AE43 /* aes.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F2A221A9EDD0096AE43 /* aes.h */; }; + 3D1C505A221A9EDF0096AE43 /* bswap.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F2B221A9EDD0096AE43 /* bswap.h */; }; + 3D1C505B221A9EDF0096AE43 /* old_pix_fmts.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F2C221A9EDD0096AE43 /* old_pix_fmts.h */; }; + 3D1C505C221A9EDF0096AE43 /* cpu.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F2D221A9EDD0096AE43 /* cpu.h */; }; + 3D1C505D221A9EDF0096AE43 /* audioconvert.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F2E221A9EDD0096AE43 /* audioconvert.h */; }; + 3D1C505E221A9EDF0096AE43 /* channel_layout.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F2F221A9EDD0096AE43 /* channel_layout.h */; }; + 3D1C505F221A9EDF0096AE43 /* imgutils.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F30221A9EDD0096AE43 /* imgutils.h */; }; + 3D1C5060221A9EDF0096AE43 /* mem.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F31221A9EDD0096AE43 /* mem.h */; }; + 3D1C5061221A9EDF0096AE43 /* parseutils.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F32221A9EDD0096AE43 /* parseutils.h */; }; + 3D1C5062221A9EDF0096AE43 /* bprint.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F33221A9EDD0096AE43 /* bprint.h */; }; + 3D1C5063221A9EDF0096AE43 /* pixfmt.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F34221A9EDD0096AE43 /* pixfmt.h */; }; + 3D1C5064221A9EDF0096AE43 /* timestamp.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F35221A9EDD0096AE43 /* timestamp.h */; }; + 3D1C5065221A9EDF0096AE43 /* avassert.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F36221A9EDD0096AE43 /* avassert.h */; }; + 3D1C5066221A9EDF0096AE43 /* mathematics.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F37221A9EDD0096AE43 /* mathematics.h */; }; + 3D1C5067215CB6E300A2E5D6 /* IfishHotBarHeader.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3D1C5066215CB6E300A2E5D6 /* IfishHotBarHeader.xib */; }; + 3D1C5067221A9EDF0096AE43 /* intreadwrite.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F38221A9EDD0096AE43 /* intreadwrite.h */; }; + 3D1C5068221A9EDF0096AE43 /* avstring.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F39221A9EDD0096AE43 /* avstring.h */; }; + 3D1C5069221A9EDF0096AE43 /* version.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F3B221A9EDD0096AE43 /* version.h */; }; + 3D1C506A215CB6F600A2E5D6 /* IfishHotBarHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C5069215CB6F600A2E5D6 /* IfishHotBarHeader.m */; }; + 3D1C506A221A9EDF0096AE43 /* avio.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F3C221A9EDD0096AE43 /* avio.h */; }; + 3D1C506B221A9EDF0096AE43 /* avformat.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F3D221A9EDD0096AE43 /* avformat.h */; }; + 3D1C506C221A9EDF0096AE43 /* version.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F3F221A9EDD0096AE43 /* version.h */; }; + 3D1C506D221A9EDF0096AE43 /* swscale.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F40221A9EDD0096AE43 /* swscale.h */; }; + 3D1C506E221A9EDF0096AE43 /* avcodec.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F42221A9EDD0096AE43 /* avcodec.h */; }; + 3D1C506F221A9EDF0096AE43 /* version.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F43221A9EDD0096AE43 /* version.h */; }; + 3D1C5070221A9EDF0096AE43 /* vdpau.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F44221A9EDD0096AE43 /* vdpau.h */; }; + 3D1C5071221A9EDF0096AE43 /* vaapi.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F45221A9EDD0096AE43 /* vaapi.h */; }; + 3D1C5072221A9EDF0096AE43 /* xvmc.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F46221A9EDD0096AE43 /* xvmc.h */; }; + 3D1C5073221A9EDF0096AE43 /* avfft.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F47221A9EDD0096AE43 /* avfft.h */; }; + 3D1C5074221A9EDF0096AE43 /* vda.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F48221A9EDD0096AE43 /* vda.h */; }; + 3D1C5075221A9EDF0096AE43 /* dxva2.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F49221A9EDD0096AE43 /* dxva2.h */; }; + 3D1C5076221A9EDF0096AE43 /* old_codec_ids.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F4A221A9EDD0096AE43 /* old_codec_ids.h */; }; + 3D1C5077221A9EDF0096AE43 /* FfmpegInterface.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F4B221A9EDD0096AE43 /* FfmpegInterface.h */; }; + 3D1C5078221A9EDF0096AE43 /* RtspInterface.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4F4C221A9EDD0096AE43 /* RtspInterface.mm */; }; + 3D1C5079221A9EDF0096AE43 /* RtspInterface.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F4D221A9EDD0096AE43 /* RtspInterface.h */; }; + 3D1C507A221A9EDF0096AE43 /* libRTSP.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3D1C4F4E221A9EDD0096AE43 /* libRTSP.a */; }; + 3D1C507B221A9EDF0096AE43 /* FfmpegInterface.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4F4F221A9EDD0096AE43 /* FfmpegInterface.m */; }; + 3D1C507C221A9EDF0096AE43 /* P2PCInterface.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F51221A9EDD0096AE43 /* P2PCInterface.h */; }; + 3D1C507D221A9EDF0096AE43 /* libAVCtrl.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3D1C4F52221A9EDD0096AE43 /* libAVCtrl.a */; }; + 3D1C507E221A9EDF0096AE43 /* KTPhotoBrowserGlobal.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4F55221A9EDD0096AE43 /* KTPhotoBrowserGlobal.m */; }; + 3D1C507F221A9EDF0096AE43 /* KTPhotoBrowserDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F56221A9EDD0096AE43 /* KTPhotoBrowserDataSource.h */; }; + 3D1C5080221A9EDF0096AE43 /* KTThumbsView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4F57221A9EDD0096AE43 /* KTThumbsView.m */; }; + 3D1C5081221A9EDF0096AE43 /* KTThumbView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4F58221A9EDD0096AE43 /* KTThumbView.m */; }; + 3D1C5082221A9EDF0096AE43 /* KTPhotoScrollViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4F59221A9EDD0096AE43 /* KTPhotoScrollViewController.m */; }; + 3D1C5083221A9EDF0096AE43 /* KTThumbsViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F5A221A9EDD0096AE43 /* KTThumbsViewController.h */; }; + 3D1C5084221A9EDF0096AE43 /* KTPhotoView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4F5B221A9EDD0096AE43 /* KTPhotoView.m */; }; + 3D1C5085221A9EDF0096AE43 /* KTPhotoBrowserGlobal.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F5C221A9EDD0096AE43 /* KTPhotoBrowserGlobal.h */; }; + 3D1C5086221A9EDF0096AE43 /* KTThumbView.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F5D221A9EDD0096AE43 /* KTThumbView.h */; }; + 3D1C5087221A9EDF0096AE43 /* KTPhotoBrowser.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 3D1C4F5E221A9EDD0096AE43 /* KTPhotoBrowser.bundle */; }; + 3D1C5088221A9EDF0096AE43 /* KTThumbsView.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F5F221A9EDD0096AE43 /* KTThumbsView.h */; }; + 3D1C5089221A9EDF0096AE43 /* KTPhotoView.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F60221A9EDD0096AE43 /* KTPhotoView.h */; }; + 3D1C508A221A9EDF0096AE43 /* KTThumbsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4F61221A9EDD0096AE43 /* KTThumbsViewController.m */; }; + 3D1C508B221A9EDF0096AE43 /* KTPhotoScrollViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F62221A9EDD0096AE43 /* KTPhotoScrollViewController.h */; }; + 3D1C508C221A9EDF0096AE43 /* Utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F63221A9EDD0096AE43 /* Utils.h */; }; + 3D1C508D221A9EDF0096AE43 /* CustomBorderButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F64221A9EDD0096AE43 /* CustomBorderButton.h */; }; + 3D1C508E221A9EDF0096AE43 /* Contact.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4F65221A9EDD0096AE43 /* Contact.m */; }; + 3D1C508F221A9EDF0096AE43 /* LoginResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4F66221A9EDD0096AE43 /* LoginResult.m */; }; + 3D1C5090221A9EDF0096AE43 /* AccountResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F67221A9EDD0096AE43 /* AccountResult.h */; }; + 3D1C5091221A9EDF0096AE43 /* RegisterResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4F68221A9EDD0096AE43 /* RegisterResult.m */; }; + 3D1C5092221A9EDF0096AE43 /* P2PClient.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4F69221A9EDD0096AE43 /* P2PClient.m */; }; + 3D1C5093221A9EDF0096AE43 /* NetManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4F6A221A9EDD0096AE43 /* NetManager.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 3D1C5094221A9EDF0096AE43 /* ContactDAO.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4F6B221A9EDD0096AE43 /* ContactDAO.m */; }; + 3D1C5095221A9EDF0096AE43 /* Alarm.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F6C221A9EDD0096AE43 /* Alarm.h */; }; + 3D1C5096221A9EDF0096AE43 /* LocalDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4F6D221A9EDD0096AE43 /* LocalDevice.m */; }; + 3D1C5097221A9EDF0096AE43 /* TabView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4F6E221A9EDD0096AE43 /* TabView.m */; }; + 3D1C5098221A9EDF0096AE43 /* UDManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4F6F221A9EDD0096AE43 /* UDManager.m */; }; + 3D1C5099221A9EDF0096AE43 /* GetAlarmRecordResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4F70221A9EDD0096AE43 /* GetAlarmRecordResult.m */; }; + 3D1C509A221A9EDF0096AE43 /* ConnectFailurePromptView.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F71221A9EDD0096AE43 /* ConnectFailurePromptView.h */; }; + 3D1C509B221A9EDF0096AE43 /* CustomTopBar.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4F72221A9EDD0096AE43 /* CustomTopBar.m */; }; + 3D1C509C221A9EDF0096AE43 /* ModifyLoginPasswordResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F73221A9EDD0096AE43 /* ModifyLoginPasswordResult.h */; }; + 3D1C509D221A9EDF0096AE43 /* GetContactMessageResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F74221A9EDD0096AE43 /* GetContactMessageResult.h */; }; + 3D1C509E221A9EDF0096AE43 /* Toast+UIView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4F75221A9EDD0096AE43 /* Toast+UIView.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 3D1C509F221A9EDF0096AE43 /* YProgressView.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F76221A9EDD0096AE43 /* YProgressView.h */; }; + 3D1C50A0221A9EDF0096AE43 /* TouchButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F77221A9EDD0096AE43 /* TouchButton.h */; }; + 3D1C50A1221A9EDF0096AE43 /* UIViewExt.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4F79221A9EDD0096AE43 /* UIViewExt.m */; }; + 3D1C50A2221A9EDF0096AE43 /* UIViewExt.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F7A221A9EDD0096AE43 /* UIViewExt.h */; }; + 3D1C50A3221A9EDF0096AE43 /* WaitingPageView.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F7B221A9EDD0096AE43 /* WaitingPageView.h */; }; + 3D1C50A4221A9EDF0096AE43 /* ProgressImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4F7C221A9EDD0096AE43 /* ProgressImageView.m */; }; + 3D1C50A5221A9EDF0096AE43 /* CyclePickerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4F7E221A9EDD0096AE43 /* CyclePickerView.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 3D1C50A6221A9EDF0096AE43 /* MXSCycleScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4F7F221A9EDD0096AE43 /* MXSCycleScrollView.m */; }; + 3D1C50A7221A9EDF0096AE43 /* MXSCycleScrollView3.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F80221A9EDD0096AE43 /* MXSCycleScrollView3.h */; }; + 3D1C50A8221A9EDF0096AE43 /* MXSCycleScrollView3.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4F81221A9EDD0096AE43 /* MXSCycleScrollView3.m */; }; + 3D1C50A9221A9EDF0096AE43 /* MXSCycleScrollView.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F82221A9EDD0096AE43 /* MXSCycleScrollView.h */; }; + 3D1C50AA221A9EDF0096AE43 /* CyclePickerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F83221A9EDD0096AE43 /* CyclePickerView.h */; }; + 3D1C50AB221A9EDF0096AE43 /* CheckAlarmMessageResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4F84221A9EDD0096AE43 /* CheckAlarmMessageResult.m */; }; + 3D1C50AC221A9EDF0096AE43 /* CustomView.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F85221A9EDD0096AE43 /* CustomView.h */; }; + 3D1C50AD221A9EDF0096AE43 /* FXBlurView.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F86221A9EDD0096AE43 /* FXBlurView.h */; }; + 3D1C50AE221A9EDF0096AE43 /* YFonc.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3D1C4F89221A9EDD0096AE43 /* YFonc.a */; }; + 3D1C50AF221A9EDF0096AE43 /* YFonc.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F8A221A9EDD0096AE43 /* YFonc.h */; }; + 3D1C50B0221A9EDF0096AE43 /* YMsgBox.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3D1C4F8C221A9EDD0096AE43 /* YMsgBox.a */; }; + 3D1C50B1221A9EDF0096AE43 /* YMsgBox.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F8D221A9EDD0096AE43 /* YMsgBox.h */; }; + 3D1C50B2221A9EDF0096AE43 /* FounderButton.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F8F221A9EDD0096AE43 /* FounderButton.h */; }; + 3D1C50B3221A9EDF0096AE43 /* YTheNaviBar.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3D1C4F90221A9EDD0096AE43 /* YTheNaviBar.a */; }; + 3D1C50B4221A9EDF0096AE43 /* YTheNaviBar.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F91221A9EDD0096AE43 /* YTheNaviBar.h */; }; + 3D1C50B5221A9EDF0096AE43 /* YSlider.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3D1C4F93221A9EDD0096AE43 /* YSlider.a */; }; + 3D1C50B6221A9EDF0096AE43 /* YSlider.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F94221A9EDD0096AE43 /* YSlider.h */; }; + 3D1C50B7221A9EDF0096AE43 /* YTargetAndAction.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F96221A9EDD0096AE43 /* YTargetAndAction.h */; }; + 3D1C50B8221A9EDF0096AE43 /* YTargetAndAction.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3D1C4F97221A9EDD0096AE43 /* YTargetAndAction.a */; }; + 3D1C50B9221A9EDF0096AE43 /* CheckNewMessageResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F98221A9EDD0096AE43 /* CheckNewMessageResult.h */; }; + 3D1C50BA221A9EE00096AE43 /* NetManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F99221A9EDD0096AE43 /* NetManager.h */; }; + 3D1C50BB221A9EE00096AE43 /* RegisterResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F9A221A9EDD0096AE43 /* RegisterResult.h */; }; + 3D1C50BC221A9EE00096AE43 /* P2PClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F9B221A9EDD0096AE43 /* P2PClient.h */; }; + 3D1C50BD221A9EE00096AE43 /* LoginResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F9C221A9EDD0096AE43 /* LoginResult.h */; }; + 3D1C50BE221A9EE00096AE43 /* Constants.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F9D221A9EDD0096AE43 /* Constants.h */; }; + 3D1C50BF221A9EE00096AE43 /* AccountResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4F9E221A9EDD0096AE43 /* AccountResult.m */; }; + 3D1C50C0221A9EE00096AE43 /* Contact.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4F9F221A9EDD0096AE43 /* Contact.h */; }; + 3D1C50C1221A9EE00096AE43 /* Utils.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4FA0221A9EDD0096AE43 /* Utils.m */; }; + 3D1C50C2221A9EE00096AE43 /* CustomBorderButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4FA1221A9EDD0096AE43 /* CustomBorderButton.m */; }; + 3D1C50C3221A9EE00096AE43 /* OBGradientView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4FA3221A9EDD0096AE43 /* OBGradientView.m */; }; + 3D1C50C4221A9EE00096AE43 /* OBGradientView.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4FA4221A9EDD0096AE43 /* OBGradientView.h */; }; + 3D1C50C5221A9EE00096AE43 /* UDManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4FA5221A9EDD0096AE43 /* UDManager.h */; }; + 3D1C50C6221A9EE00096AE43 /* TabView.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4FA6221A9EDD0096AE43 /* TabView.h */; }; + 3D1C50C7221A9EE00096AE43 /* LocalDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4FA7221A9EDD0096AE43 /* LocalDevice.h */; }; + 3D1C50C8221A9EE00096AE43 /* Alarm.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4FA8221A9EDD0096AE43 /* Alarm.m */; }; + 3D1C50C9221A9EE00096AE43 /* ContactDAO.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4FA9221A9EDD0096AE43 /* ContactDAO.h */; }; + 3D1C50CA221A9EE00096AE43 /* GetContactMessageResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4FAA221A9EDD0096AE43 /* GetContactMessageResult.m */; }; + 3D1C50CB221A9EE00096AE43 /* ModifyLoginPasswordResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4FAB221A9EDD0096AE43 /* ModifyLoginPasswordResult.m */; }; + 3D1C50CC221A9EE00096AE43 /* MPNotificationView.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4FAD221A9EDD0096AE43 /* MPNotificationView.h */; }; + 3D1C50CD221A9EE00096AE43 /* MPNotificationView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4FAE221A9EDD0096AE43 /* MPNotificationView.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 3D1C50CE221A9EE00096AE43 /* CustomTopBar.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4FAF221A9EDD0096AE43 /* CustomTopBar.h */; }; + 3D1C50CF221A9EE00096AE43 /* ConnectFailurePromptView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4FB0221A9EDD0096AE43 /* ConnectFailurePromptView.m */; }; + 3D1C50D0221A9EE00096AE43 /* GetAlarmRecordResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4FB1221A9EDD0096AE43 /* GetAlarmRecordResult.h */; }; + 3D1C50D1221A9EE00096AE43 /* SVPullToRefresh.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4FB3221A9EDD0096AE43 /* SVPullToRefresh.h */; }; + 3D1C50D2221A9EE00096AE43 /* UIScrollView+SVInfiniteScrolling.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4FB4221A9EDD0096AE43 /* UIScrollView+SVInfiniteScrolling.m */; }; + 3D1C50D3221A9EE00096AE43 /* UIScrollView+SVInfiniteScrolling.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4FB5221A9EDD0096AE43 /* UIScrollView+SVInfiniteScrolling.h */; }; + 3D1C50D4221A9EE00096AE43 /* SVPullToRefresh.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4FB6221A9EDD0096AE43 /* SVPullToRefresh.m */; }; + 3D1C50D5221A9EE00096AE43 /* SVPullToRefresh.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 3D1C4FB7221A9EDD0096AE43 /* SVPullToRefresh.bundle */; }; + 3D1C50D6221A9EE00096AE43 /* CheckNewMessageResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4FB8221A9EDD0096AE43 /* CheckNewMessageResult.m */; }; + 3D1C50D7221A9EE00096AE43 /* CustomView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4FB9221A9EDD0096AE43 /* CustomView.m */; }; + 3D1C50D8221A9EE00096AE43 /* FXBlurView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4FBA221A9EDD0096AE43 /* FXBlurView.m */; }; + 3D1C50D9221A9EE00096AE43 /* CheckAlarmMessageResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4FBB221A9EDD0096AE43 /* CheckAlarmMessageResult.h */; }; + 3D1C50DA221A9EE00096AE43 /* RecommendInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4FBD221A9EDD0096AE43 /* RecommendInfo.m */; }; + 3D1C50DB221A9EE00096AE43 /* YAudioStreamPlayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4FBE221A9EDD0096AE43 /* YAudioStreamPlayer.h */; }; + 3D1C50DC221A9EE00096AE43 /* PAIOUnit.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4FBF221A9EDD0096AE43 /* PAIOUnit.h */; }; + 3D1C50DD221A9EE00096AE43 /* RecommendInfoDAO.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4FC0221A9EDD0096AE43 /* RecommendInfoDAO.h */; }; + 3D1C50DE221A9EE00096AE43 /* ShapeRenderNotifyMsg.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4FC1221A9EDD0096AE43 /* ShapeRenderNotifyMsg.mm */; }; + 3D1C50DF221A9EE00096AE43 /* MessageDAO.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4FC2221A9EDD0096AE43 /* MessageDAO.m */; }; + 3D1C50E0221A9EE00096AE43 /* ShapeRenderNotifyMsg.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4FC3221A9EDD0096AE43 /* ShapeRenderNotifyMsg.h */; }; + 3D1C50E1221A9EE00096AE43 /* FListManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4FC4221A9EDD0096AE43 /* FListManager.h */; }; + 3D1C50E2221A9EE00096AE43 /* UDPManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4FC5221A9EDD0096AE43 /* UDPManager.h */; }; + 3D1C50E3221A9EE00096AE43 /* OpenGLView.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4FC6221A9EDD0096AE43 /* OpenGLView.h */; }; + 3D1C50E4221A9EE00096AE43 /* config.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4FC7221A9EDD0096AE43 /* config.h */; }; + 3D1C50E5221A9EE00096AE43 /* ShakeManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4FC8221A9EDD0096AE43 /* ShakeManager.h */; }; + 3D1C50E6221A9EE00096AE43 /* ParamDao.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4FC9221A9EDD0096AE43 /* ParamDao.h */; }; + 3D1C50E7221A9EE00096AE43 /* CameraManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4FCA221A9EDD0096AE43 /* CameraManager.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 3D1C50E8221A9EE00096AE43 /* Message.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4FCB221A9EDD0096AE43 /* Message.h */; }; + 3D1C50E9221A9EE00096AE43 /* AlarmDAO.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4FCC221A9EDD0096AE43 /* AlarmDAO.h */; }; + 3D1C50EA221A9EE00096AE43 /* des2.c in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4FCD221A9EDD0096AE43 /* des2.c */; }; + 3D1C50EB221A9EE00096AE43 /* FListManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4FCE221A9EDD0096AE43 /* FListManager.m */; }; + 3D1C50EC221A9EE00096AE43 /* MessageDAO.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4FCF221A9EDD0096AE43 /* MessageDAO.h */; }; + 3D1C50ED221A9EE00096AE43 /* RecommendInfoDAO.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4FD0221A9EDD0096AE43 /* RecommendInfoDAO.m */; }; + 3D1C50EE221A9EE00096AE43 /* PAIOUnit.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4FD1221A9EDD0096AE43 /* PAIOUnit.m */; }; + 3D1C50EF221A9EE00096AE43 /* YAudioStreamPlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4FD2221A9EDD0096AE43 /* YAudioStreamPlayer.m */; }; + 3D1C50F0221A9EE00096AE43 /* RecommendInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4FD3221A9EDD0096AE43 /* RecommendInfo.h */; }; + 3D1C50F1221A9EE00096AE43 /* ShakeManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4FD4221A9EDD0096AE43 /* ShakeManager.m */; }; + 3D1C50F2221A9EE00096AE43 /* mesg.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4FD5221A9EDD0096AE43 /* mesg.h */; }; + 3D1C50F3221A9EE00096AE43 /* OpenGLView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4FD6221A9EDD0096AE43 /* OpenGLView.mm */; }; + 3D1C50F4221A9EE00096AE43 /* UDPManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4FD7221A9EDD0096AE43 /* UDPManager.m */; }; + 3D1C50F5221A9EE00096AE43 /* CameraManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4FD8221A9EDD0096AE43 /* CameraManager.h */; }; + 3D1C50F6221A9EE00096AE43 /* ParamDao.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4FD9221A9EDD0096AE43 /* ParamDao.m */; }; + 3D1C50F7221A9EE00096AE43 /* AlarmDAO.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4FDA221A9EDD0096AE43 /* AlarmDAO.m */; }; + 3D1C50F8221A9EE00096AE43 /* des2.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4FDB221A9EDD0096AE43 /* des2.h */; }; + 3D1C50F9221A9EE00096AE43 /* Message.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4FDC221A9EDD0096AE43 /* Message.m */; }; + 3D1C50FA221A9EE00096AE43 /* WaitingPageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4FDD221A9EDD0096AE43 /* WaitingPageView.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 3D1C50FB221A9EE00096AE43 /* ProgressImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4FDE221A9EDD0096AE43 /* ProgressImageView.h */; }; + 3D1C50FC221A9EE00096AE43 /* TouchButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4FDF221A9EDD0096AE43 /* TouchButton.m */; }; + 3D1C50FD221A9EE00096AE43 /* YProgressView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4FE0221A9EDD0096AE43 /* YProgressView.m */; }; + 3D1C50FE221A9EE00096AE43 /* Toast+UIView.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4FE1221A9EDD0096AE43 /* Toast+UIView.h */; }; + 3D1C50FF221A9EE00096AE43 /* YooseeCenterViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4FE3221A9EDD0096AE43 /* YooseeCenterViewCell.h */; }; + 3D1C5100221A9EE00096AE43 /* IfishCameraModel.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4FE4221A9EDD0096AE43 /* IfishCameraModel.h */; }; + 3D1C5101221A9EE00096AE43 /* IfishP2PMonitorController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4FE5221A9EDD0096AE43 /* IfishP2PMonitorController.h */; }; + 3D1C5102221A9EE00096AE43 /* YooseeCenterViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3D1C4FE6221A9EDD0096AE43 /* YooseeCenterViewCell.xib */; }; + 3D1C5103221A9EE00096AE43 /* YooseeNextConnectViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4FE7221A9EDD0096AE43 /* YooseeNextConnectViewController.mm */; }; + 3D1C5104221A9EE00096AE43 /* YooseConnectFirstViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4FE8221A9EDD0096AE43 /* YooseConnectFirstViewController.h */; }; + 3D1C5105221A9EE00096AE43 /* YooseeCenterViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4FE9221A9EDD0096AE43 /* YooseeCenterViewController.h */; }; + 3D1C5106221A9EE00096AE43 /* CameraNoParyBackVideoView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4FEB221A9EDD0096AE43 /* CameraNoParyBackVideoView.m */; }; + 3D1C5107221A9EE00096AE43 /* IfishP2PPlayBackListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4FEC221A9EDD0096AE43 /* IfishP2PPlayBackListViewController.m */; }; + 3D1C5108221A9EE00096AE43 /* P2PPlayingbackVC.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4FED221A9EDD0096AE43 /* P2PPlayingbackVC.h */; }; + 3D1C5109221A9EE00096AE43 /* P2PPlaybackController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4FEE221A9EDD0096AE43 /* P2PPlaybackController.h */; }; + 3D1C510A221A9EE00096AE43 /* PlayBaseViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4FEF221A9EDD0096AE43 /* PlayBaseViewController.h */; }; + 3D1C510B221A9EE00096AE43 /* IfishPlaybackViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4FF0221A9EDD0096AE43 /* IfishPlaybackViewCell.h */; }; + 3D1C510C221A9EE00096AE43 /* CameraNoParyBackVideoView.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4FF1221A9EDD0096AE43 /* CameraNoParyBackVideoView.h */; }; + 3D1C510D221A9EE00096AE43 /* IfishPlaybackViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3D1C4FF2221A9EDD0096AE43 /* IfishPlaybackViewCell.xib */; }; + 3D1C510E221A9EE00096AE43 /* P2PPlayingbackVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4FF3221A9EDD0096AE43 /* P2PPlayingbackVC.m */; }; + 3D1C510F221A9EE00096AE43 /* IfishP2PPlayBackListViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4FF4221A9EDD0096AE43 /* IfishP2PPlayBackListViewController.h */; }; + 3D1C5110221A9EE00096AE43 /* PlayBaseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4FF5221A9EDD0096AE43 /* PlayBaseViewController.m */; }; + 3D1C5111221A9EE00096AE43 /* P2PPlaybackController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4FF6221A9EDD0096AE43 /* P2PPlaybackController.m */; }; + 3D1C5112221A9EE00096AE43 /* IfishPlaybackViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4FF7221A9EDD0096AE43 /* IfishPlaybackViewCell.m */; }; + 3D1C5113221A9EE00096AE43 /* IfishP2PMonitorController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4FF8221A9EDD0096AE43 /* IfishP2PMonitorController.m */; }; + 3D1C5114221A9EE00096AE43 /* KTThumbView+SDWebImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4FFA221A9EDD0096AE43 /* KTThumbView+SDWebImage.m */; }; + 3D1C5115221A9EE00096AE43 /* ShotScreenImgViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4FFB221A9EDD0096AE43 /* ShotScreenImgViewController.h */; }; + 3D1C5116221A9EE00096AE43 /* KTPhotoView+SDWebImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4FFC221A9EDD0096AE43 /* KTPhotoView+SDWebImage.h */; }; + 3D1C5117221A9EE00096AE43 /* ShootImgDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4FFD221A9EDD0096AE43 /* ShootImgDataSource.m */; }; + 3D1C5118221A9EE00096AE43 /* KTThumbView+SDWebImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C4FFE221A9EDD0096AE43 /* KTThumbView+SDWebImage.h */; }; + 3D1C5119221A9EE00096AE43 /* KTPhotoView+SDWebImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C4FFF221A9EDD0096AE43 /* KTPhotoView+SDWebImage.m */; }; + 3D1C511A221A9EE00096AE43 /* ShotScreenImgViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C5000221A9EDD0096AE43 /* ShotScreenImgViewController.m */; }; + 3D1C511B221A9EE00096AE43 /* ShootImgDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C5001221A9EDD0096AE43 /* ShootImgDataSource.h */; }; + 3D1C511C221A9EE00096AE43 /* IfishCameraModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C5002221A9EDD0096AE43 /* IfishCameraModel.m */; }; + 3D1C511D221A9EE00096AE43 /* IfishCameraRecordfirstCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C5004221A9EDD0096AE43 /* IfishCameraRecordfirstCell.m */; }; + 3D1C511E221A9EE00096AE43 /* CameraBottomCollectionViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3D1C5005221A9EDD0096AE43 /* CameraBottomCollectionViewCell.xib */; }; + 3D1C511F221A9EE00096AE43 /* IfishRecVideoViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3D1C5006221A9EDD0096AE43 /* IfishRecVideoViewCell.xib */; }; + 3D1C5120221A9EE00096AE43 /* CameraBottomHView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C5007221A9EDD0096AE43 /* CameraBottomHView.m */; }; + 3D1C5121221A9EE00096AE43 /* CameraBottomCollectionViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C5008221A9EDD0096AE43 /* CameraBottomCollectionViewCell.h */; }; + 3D1C5122221A9EE00096AE43 /* IfishRecVideoViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C5009221A9EDD0096AE43 /* IfishRecVideoViewCell.h */; }; + 3D1C5123221A9EE00096AE43 /* CameraRecordViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C500A221A9EDD0096AE43 /* CameraRecordViewController.m */; }; + 3D1C5124221A9EE00096AE43 /* IfishCameraRecordThirdCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C500B221A9EDD0096AE43 /* IfishCameraRecordThirdCell.h */; }; + 3D1C5125221A9EE00096AE43 /* IfishCameraRecordFourCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C500C221A9EDD0096AE43 /* IfishCameraRecordFourCell.h */; }; + 3D1C5126221A9EE00096AE43 /* IfishCameraRecordfirstCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3D1C500D221A9EDD0096AE43 /* IfishCameraRecordfirstCell.xib */; }; + 3D1C5127221A9EE00096AE43 /* IfishCameraRecordSecondCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C500E221A9EDD0096AE43 /* IfishCameraRecordSecondCell.h */; }; + 3D1C5128221A9EE10096AE43 /* IfishCameraRecordThirdCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3D1C500F221A9EDD0096AE43 /* IfishCameraRecordThirdCell.xib */; }; + 3D1C5129221A9EE10096AE43 /* IfishCameraRecordFourCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3D1C5010221A9EDD0096AE43 /* IfishCameraRecordFourCell.xib */; }; + 3D1C512A221A9EE10096AE43 /* IfishCameraRecordSecondCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3D1C5011221A9EDD0096AE43 /* IfishCameraRecordSecondCell.xib */; }; + 3D1C512B221A9EE10096AE43 /* IfishCameraRecordfirstCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C5012221A9EDD0096AE43 /* IfishCameraRecordfirstCell.h */; }; + 3D1C512C221A9EE10096AE43 /* IfishRecVideoViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C5013221A9EDD0096AE43 /* IfishRecVideoViewCell.m */; }; + 3D1C512D221A9EE10096AE43 /* CameraBottomCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C5014221A9EDD0096AE43 /* CameraBottomCollectionViewCell.m */; }; + 3D1C512E221A9EE10096AE43 /* CameraBottomHView.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C5015221A9EDD0096AE43 /* CameraBottomHView.h */; }; + 3D1C512F221A9EE10096AE43 /* IfishCameraRecordSecondCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C5016221A9EDD0096AE43 /* IfishCameraRecordSecondCell.m */; }; + 3D1C5130221A9EE10096AE43 /* IfishCameraRecordFourCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C5017221A9EDD0096AE43 /* IfishCameraRecordFourCell.m */; }; + 3D1C5131221A9EE10096AE43 /* IfishCameraRecordThirdCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C5018221A9EDD0096AE43 /* IfishCameraRecordThirdCell.m */; }; + 3D1C5132221A9EE10096AE43 /* CameraRecordViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C5019221A9EDD0096AE43 /* CameraRecordViewController.h */; }; + 3D1C5133221A9EE10096AE43 /* YooseeCenterViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C501A221A9EDD0096AE43 /* YooseeCenterViewCell.m */; }; + 3D1C5134221A9EE10096AE43 /* YooseeNextConnectViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C501B221A9EDD0096AE43 /* YooseeNextConnectViewController.h */; }; + 3D1C5135221A9EE10096AE43 /* YooseConnectFirstViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C501C221A9EDD0096AE43 /* YooseConnectFirstViewController.m */; }; + 3D1C5136221A9EE10096AE43 /* YooseeCenterViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C501D221A9EDD0096AE43 /* YooseeCenterViewController.m */; }; + 3D1C5137221A9EE10096AE43 /* ifishdeviceListCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C501F221A9EDD0096AE43 /* ifishdeviceListCell.h */; }; + 3D1C5138221A9EE10096AE43 /* FishControlFourthCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C5021221A9EDD0096AE43 /* FishControlFourthCell.m */; }; + 3D1C5139221A9EE10096AE43 /* FishControlSecondCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C5022221A9EDD0096AE43 /* FishControlSecondCell.h */; }; + 3D1C513A221A9EE10096AE43 /* FishControlFirstCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C5023221A9EDD0096AE43 /* FishControlFirstCell.h */; }; + 3D1C513B221A9EE10096AE43 /* FishControlThreedViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C5024221A9EDD0096AE43 /* FishControlThreedViewCell.m */; }; + 3D1C513C221A9EE10096AE43 /* FishControlFourthCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C5025221A9EDD0096AE43 /* FishControlFourthCell.h */; }; + 3D1C513D221A9EE10096AE43 /* FishControlFirstCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C5026221A9EDD0096AE43 /* FishControlFirstCell.m */; }; + 3D1C513E221A9EE10096AE43 /* FishControlSecondCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C5027221A9EDD0096AE43 /* FishControlSecondCell.m */; }; + 3D1C513F221A9EE10096AE43 /* FishControlThreedViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C5028221A9EDD0096AE43 /* FishControlThreedViewCell.h */; }; + 3D1C5140221A9EE10096AE43 /* BootomViewSoketBackMasgConreol.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C5029221A9EDD0096AE43 /* BootomViewSoketBackMasgConreol.m */; }; + 3D1C5141221A9EE10096AE43 /* MonitorBootmView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C502A221A9EDD0096AE43 /* MonitorBootmView.m */; }; + 3D1C5142221A9EE10096AE43 /* FishTankBootmDataHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C502B221A9EDD0096AE43 /* FishTankBootmDataHelper.m */; }; + 3D1C5143221A9EE10096AE43 /* ifishdeviceListCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D1C502C221A9EDD0096AE43 /* ifishdeviceListCell.m */; }; + 3D1C5144221A9EE10096AE43 /* MonitorBootmView.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C502D221A9EDD0096AE43 /* MonitorBootmView.h */; }; + 3D1C5145221A9EE10096AE43 /* BootomViewSoketBackMasgConreol.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C502E221A9EDD0096AE43 /* BootomViewSoketBackMasgConreol.h */; }; + 3D1C5146221A9EE10096AE43 /* FishTankBootmDataHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1C502F221A9EDD0096AE43 /* FishTankBootmDataHelper.h */; }; + 3D1C5147221A9EE10096AE43 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 3D1C5031221A9EDD0096AE43 /* Localizable.strings */; }; + 3D1C5148221A9EE10096AE43 /* IFISHYooseeImg.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 3D1C5034221A9EDD0096AE43 /* IFISHYooseeImg.bundle */; }; + 3D1C5149221A9EE10096AE43 /* Common-Configuration.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3D1C5035221A9EDD0096AE43 /* Common-Configuration.plist */; }; + 3D1C514D221AA2A90096AE43 /* libelian.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3D1C514C221AA2A80096AE43 /* libelian.a */; }; 3D34479A212CF71C00CF3941 /* IfishHotBarVc.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D344798212CF71C00CF3941 /* IfishHotBarVc.m */; }; 3D34479B212CF71C00CF3941 /* IfishHotBarVc.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3D344799212CF71C00CF3941 /* IfishHotBarVc.xib */; }; 3D3447A0212D113D00CF3941 /* IFishHotBarCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D34479E212D113D00CF3941 /* IFishHotBarCell.m */; }; 3D3447A1212D113D00CF3941 /* IFishHotBarCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3D34479F212D113D00CF3941 /* IFishHotBarCell.xib */; }; 3D3447A5212D1C3800CF3941 /* IfishHotBarVo.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D3447A4212D1C3800CF3941 /* IfishHotBarVo.m */; }; + 3D3512DB2159C172009DDB0F /* IfishHotBarModifyNameVc.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D3512D92159C172009DDB0F /* IfishHotBarModifyNameVc.m */; }; + 3D3512DC2159C172009DDB0F /* IfishHotBarModifyNameVc.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3D3512DA2159C172009DDB0F /* IfishHotBarModifyNameVc.xib */; }; + 3D39D31C21F34946001C50B6 /* libbz2.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 3D39D31B21F34945001C50B6 /* libbz2.tbd */; }; + 3D4AFF5F21F34E1C0053BAA0 /* libstdc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 3D4AFF5D21F34E1C0053BAA0 /* libstdc++.tbd */; }; + 3D4AFF6021F34E1C0053BAA0 /* libstdc++.6.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 3D4AFF5E21F34E1C0053BAA0 /* libstdc++.6.tbd */; }; + 3D4AFF6221F350820053BAA0 /* libstdc++.6.0.9.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 3D4AFF6121F350820053BAA0 /* libstdc++.6.0.9.tbd */; }; 3D5C436E21339E9D00E15B66 /* IfishHistoryView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D5C436D21339E9D00E15B66 /* IfishHistoryView.m */; }; 3D5C437021339EAB00E15B66 /* IfishHistoryView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3D5C436F21339EAB00E15B66 /* IfishHistoryView.xib */; }; 3D5C437321339F8F00E15B66 /* IfishChatView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D5C437221339F8F00E15B66 /* IfishChatView.m */; }; + 3D8F649721568AE500F04BD3 /* ConnectHotspotTipViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E52B400321042ED2003BBA3E /* ConnectHotspotTipViewController.m */; }; + 3D8F649A21571D7C00F04BD3 /* HitbarWifeVc.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D8F649921571D7C00F04BD3 /* HitbarWifeVc.m */; }; + 3D8F64B22157522100F04BD3 /* MJPropertyType.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D8F64A02157522100F04BD3 /* MJPropertyType.m */; }; + 3D8F64B32157522100F04BD3 /* NSObject+MJKeyValue.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D8F64A32157522100F04BD3 /* NSObject+MJKeyValue.m */; }; + 3D8F64B42157522100F04BD3 /* MJProperty.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D8F64A42157522100F04BD3 /* MJProperty.m */; }; + 3D8F64B52157522100F04BD3 /* NSObject+MJCoding.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D8F64A62157522100F04BD3 /* NSObject+MJCoding.m */; }; + 3D8F64B62157522100F04BD3 /* MJExtensionConst.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D8F64A82157522100F04BD3 /* MJExtensionConst.m */; }; + 3D8F64B72157522100F04BD3 /* NSObject+MJProperty.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D8F64A92157522100F04BD3 /* NSObject+MJProperty.m */; }; + 3D8F64B82157522200F04BD3 /* NSObject+MJClass.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D8F64AB2157522100F04BD3 /* NSObject+MJClass.m */; }; + 3D8F64B92157522200F04BD3 /* NSString+MJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D8F64AC2157522100F04BD3 /* NSString+MJExtension.m */; }; + 3D8F64BA2157522200F04BD3 /* MJPropertyKey.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D8F64AD2157522100F04BD3 /* MJPropertyKey.m */; }; + 3D8F64BB2157522200F04BD3 /* MJFoundation.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D8F64B12157522100F04BD3 /* MJFoundation.m */; }; + 3D8F64BE215752AF00F04BD3 /* IfishHeaterVo.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D8F64BD215752AF00F04BD3 /* IfishHeaterVo.m */; }; + 3D8F64C12157530000F04BD3 /* IfishHistroyVo.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D8F64C02157530000F04BD3 /* IfishHistroyVo.m */; }; + 3D8F64C42157791D00F04BD3 /* IfishBaseVc.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D8F64C32157791D00F04BD3 /* IfishBaseVc.m */; }; + 3D8F64C72157820700F04BD3 /* IfishHotBarPackegeVo.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D8F64C62157820700F04BD3 /* IfishHotBarPackegeVo.m */; }; + 3D8F64CA2157842200F04BD3 /* IfishPackageHeaderVo.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D8F64C92157842200F04BD3 /* IfishPackageHeaderVo.m */; }; + 3D8F64EE215797E700F04BD3 /* IQTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D8F64CD215797E600F04BD3 /* IQTextView.m */; }; + 3D8F64EF215797E700F04BD3 /* IQToolbar.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D8F64D1215797E600F04BD3 /* IQToolbar.m */; }; + 3D8F64F0215797E700F04BD3 /* IQTitleBarButtonItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D8F64D3215797E600F04BD3 /* IQTitleBarButtonItem.m */; }; + 3D8F64F1215797E700F04BD3 /* IQBarButtonItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D8F64D4215797E600F04BD3 /* IQBarButtonItem.m */; }; + 3D8F64F2215797E700F04BD3 /* IQUIView+IQKeyboardToolbar.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D8F64D5215797E600F04BD3 /* IQUIView+IQKeyboardToolbar.m */; }; + 3D8F64F3215797E700F04BD3 /* IQPreviousNextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D8F64D6215797E600F04BD3 /* IQPreviousNextView.m */; }; + 3D8F64F4215797E700F04BD3 /* IQKeyboardManager.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 3D8F64DE215797E600F04BD3 /* IQKeyboardManager.bundle */; }; + 3D8F64F5215797E700F04BD3 /* IQKeyboardManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D8F64E1215797E600F04BD3 /* IQKeyboardManager.m */; }; + 3D8F64F6215797E700F04BD3 /* IQNSArray+Sort.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D8F64E3215797E600F04BD3 /* IQNSArray+Sort.m */; }; + 3D8F64F7215797E700F04BD3 /* IQUITextFieldView+Additions.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D8F64E5215797E600F04BD3 /* IQUITextFieldView+Additions.m */; }; + 3D8F64F8215797E700F04BD3 /* IQUIScrollView+Additions.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D8F64E6215797E600F04BD3 /* IQUIScrollView+Additions.m */; }; + 3D8F64F9215797E700F04BD3 /* IQUIView+Hierarchy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D8F64E7215797E600F04BD3 /* IQUIView+Hierarchy.m */; }; + 3D8F64FA215797E700F04BD3 /* IQUIViewController+Additions.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D8F64EB215797E600F04BD3 /* IQUIViewController+Additions.m */; }; + 3D8F64FB215797E700F04BD3 /* IQKeyboardReturnKeyHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D8F64ED215797E600F04BD3 /* IQKeyboardReturnKeyHandler.m */; }; + 3D8F64FE2158874000F04BD3 /* IfishConfigVo.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D8F64FD2158874000F04BD3 /* IfishConfigVo.m */; }; + 3DD7AB4B21E2F2FB0064856A /* libzbar.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DD7AB2221E2F2FB0064856A /* libzbar.a */; }; + 3DD7AB4C21E2F2FB0064856A /* bitstream.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DD7AB3D21E2F2FB0064856A /* bitstream.c */; }; + 3DD7AB4D21E2F2FB0064856A /* qrencode.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DD7AB3E21E2F2FB0064856A /* qrencode.c */; }; + 3DD7AB4E21E2F2FB0064856A /* split.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DD7AB4021E2F2FB0064856A /* split.c */; }; + 3DD7AB4F21E2F2FB0064856A /* QRCodeGenerator.m in Sources */ = {isa = PBXBuildFile; fileRef = 3DD7AB4221E2F2FB0064856A /* QRCodeGenerator.m */; }; + 3DD7AB5021E2F2FB0064856A /* qrinput.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DD7AB4321E2F2FB0064856A /* qrinput.c */; }; + 3DD7AB5121E2F2FB0064856A /* mask.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DD7AB4521E2F2FB0064856A /* mask.c */; }; + 3DD7AB5221E2F2FB0064856A /* qrspec.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DD7AB4621E2F2FB0064856A /* qrspec.c */; }; + 3DD7AB5321E2F2FB0064856A /* rscode.c in Sources */ = {isa = PBXBuildFile; fileRef = 3DD7AB4A21E2F2FB0064856A /* rscode.c */; }; + 3DD7AB9921E474940064856A /* AsyncUdpSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = 3DD7AB9021E474930064856A /* AsyncUdpSocket.m */; }; + 3DD7AB9A21E474940064856A /* AsyncSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = 3DD7AB9221E474930064856A /* AsyncSocket.m */; }; + 3DD7AB9B21E474940064856A /* GCDAsyncUdpSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = 3DD7AB9521E474930064856A /* GCDAsyncUdpSocket.m */; }; + 3DD7AB9C21E474940064856A /* GCDAsyncSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = 3DD7AB9621E474930064856A /* GCDAsyncSocket.m */; }; 880707451DDD3EF50076F65A /* P2PShareView1Cell.m in Sources */ = {isa = PBXBuildFile; fileRef = 880707431DDD3EF50076F65A /* P2PShareView1Cell.m */; }; 880707461DDD3EF50076F65A /* P2PShareView1Cell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 880707441DDD3EF50076F65A /* P2PShareView1Cell.xib */; }; 8807074A1DDD40B40076F65A /* P2PShareViewsec2Cell.m in Sources */ = {isa = PBXBuildFile; fileRef = 880707481DDD40B40076F65A /* P2PShareViewsec2Cell.m */; }; @@ -95,22 +441,8 @@ 8814784B1E724FEE00BFB79C /* task_uploadHeadImg@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 881478481E724FEE00BFB79C /* task_uploadHeadImg@3x.png */; }; 8814784F1E7262F500BFB79C /* IifishGetGoldTaskHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 8814784E1E7262F500BFB79C /* IifishGetGoldTaskHelper.m */; }; 881478521E72732600BFB79C /* IifshGetExpHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 881478511E72732600BFB79C /* IifshGetExpHelper.m */; }; - 8815D11A1DF6908800BEA2DA /* IfishRecVideoViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 8815D1181DF6908800BEA2DA /* IfishRecVideoViewCell.m */; }; - 8815D11B1DF6908800BEA2DA /* IfishRecVideoViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8815D1191DF6908800BEA2DA /* IfishRecVideoViewCell.xib */; }; 8815D11E1DF7A0E300BEA2DA /* NSTimer+Convenience.m in Sources */ = {isa = PBXBuildFile; fileRef = 8815D11D1DF7A0E300BEA2DA /* NSTimer+Convenience.m */; }; 8815D1211DF8083700BEA2DA /* IfishHelperUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 8815D1201DF8083700BEA2DA /* IfishHelperUtils.m */; }; - 8815D1241DFA8A6500BEA2DA /* CameraRecordViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8815D1231DFA8A6500BEA2DA /* CameraRecordViewController.m */; }; - 8815D1281DFAACED00BEA2DA /* IfishCameraRecordfirstCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 8815D1261DFAACED00BEA2DA /* IfishCameraRecordfirstCell.m */; }; - 8815D1291DFAACED00BEA2DA /* IfishCameraRecordfirstCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8815D1271DFAACED00BEA2DA /* IfishCameraRecordfirstCell.xib */; }; - 8815D12D1DFAADA800BEA2DA /* IfishCameraRecordSecondCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 8815D12B1DFAADA800BEA2DA /* IfishCameraRecordSecondCell.m */; }; - 8815D12E1DFAADA800BEA2DA /* IfishCameraRecordSecondCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8815D12C1DFAADA800BEA2DA /* IfishCameraRecordSecondCell.xib */; }; - 8815D1321DFAADC300BEA2DA /* IfishCameraRecordThirdCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 8815D1301DFAADC300BEA2DA /* IfishCameraRecordThirdCell.m */; }; - 8815D1331DFAADC300BEA2DA /* IfishCameraRecordThirdCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8815D1311DFAADC300BEA2DA /* IfishCameraRecordThirdCell.xib */; }; - 8815D13C1DFF892A00BEA2DA /* CameraNoParyBackVideoView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8815D13B1DFF892A00BEA2DA /* CameraNoParyBackVideoView.m */; }; - 8815D1401DFFC1EA00BEA2DA /* IfishPlaybackViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 8815D13E1DFFC1EA00BEA2DA /* IfishPlaybackViewCell.m */; }; - 8815D1411DFFC1EA00BEA2DA /* IfishPlaybackViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8815D13F1DFFC1EA00BEA2DA /* IfishPlaybackViewCell.xib */; }; - 8815D14B1E0144AA00BEA2DA /* IfishCameraRecordFourCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 8815D1491E0144AA00BEA2DA /* IfishCameraRecordFourCell.m */; }; - 8815D14C1E0144AA00BEA2DA /* IfishCameraRecordFourCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8815D14A1E0144AA00BEA2DA /* IfishCameraRecordFourCell.xib */; }; 8815D1DC1E02662500BEA2DA /* FullPlay_Back.png in Resources */ = {isa = PBXBuildFile; fileRef = 8815D1C91E02662500BEA2DA /* FullPlay_Back.png */; }; 8815D1DD1E02662500BEA2DA /* FullPlay_Back_down.png in Resources */ = {isa = PBXBuildFile; fileRef = 8815D1CA1E02662500BEA2DA /* FullPlay_Back_down.png */; }; 8815D1DE1E02662500BEA2DA /* FullPlay_Gradient_black_alpha_0.png in Resources */ = {isa = PBXBuildFile; fileRef = 8815D1CB1E02662500BEA2DA /* FullPlay_Gradient_black_alpha_0.png */; }; @@ -130,12 +462,6 @@ 8815D1EC1E02662600BEA2DA /* FullPlay_Slider_down.png in Resources */ = {isa = PBXBuildFile; fileRef = 8815D1D91E02662500BEA2DA /* FullPlay_Slider_down.png */; }; 8815D1ED1E02662600BEA2DA /* FullPlay_Speed.png in Resources */ = {isa = PBXBuildFile; fileRef = 8815D1DA1E02662500BEA2DA /* FullPlay_Speed.png */; }; 8815D1EE1E02662600BEA2DA /* FullPlay_Speed_down.png in Resources */ = {isa = PBXBuildFile; fileRef = 8815D1DB1E02662500BEA2DA /* FullPlay_Speed_down.png */; }; - 8815D1F81E026B8B00BEA2DA /* UIViewExt.m in Sources */ = {isa = PBXBuildFile; fileRef = 8815D1F41E026B8B00BEA2DA /* UIViewExt.m */; }; - 8815D2051E037AFD00BEA2DA /* P2PPlayingbackVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 8815D2041E037AFD00BEA2DA /* P2PPlayingbackVC.m */; }; - 8815D2081E037B7700BEA2DA /* PlayBaseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8815D2071E037B7700BEA2DA /* PlayBaseViewController.m */; }; - 8815D20B1E03B64A00BEA2DA /* ShapeRenderNotifyMsg.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8815D20A1E03B64A00BEA2DA /* ShapeRenderNotifyMsg.mm */; }; - 8815D20E1E03CC6300BEA2DA /* OpenGLView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8815D20D1E03CC6300BEA2DA /* OpenGLView.mm */; }; - 8816719C1EA5DE2B00BEBF23 /* README.txt in Resources */ = {isa = PBXBuildFile; fileRef = 8816701B1EA5DE2A00BEBF23 /* README.txt */; }; 8816719D1EA5DE2B00BEBF23 /* UMComCommentDataController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8816701F1EA5DE2A00BEBF23 /* UMComCommentDataController.m */; }; 8816719E1EA5DE2B00BEBF23 /* UMComCommentListDataController.m in Sources */ = {isa = PBXBuildFile; fileRef = 881670211EA5DE2A00BEBF23 /* UMComCommentListDataController.m */; }; 8816719F1EA5DE2B00BEBF23 /* UMComFeedEditDataController.m in Sources */ = {isa = PBXBuildFile; fileRef = 881670241EA5DE2A00BEBF23 /* UMComFeedEditDataController.m */; }; @@ -165,7 +491,6 @@ 881671B71EA5DE2B00BEBF23 /* UMComSimpleLoginHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 8816705F1EA5DE2A00BEBF23 /* UMComSimpleLoginHandler.m */; }; 881671B81EA5DE2B00BEBF23 /* UMComMessageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 881670631EA5DE2A00BEBF23 /* UMComMessageManager.m */; }; 881671B91EA5DE2B00BEBF23 /* UMComShareManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 881670671EA5DE2A00BEBF23 /* UMComShareManager.m */; }; - 881671BA1EA5DE2B00BEBF23 /* README.txt in Resources */ = {isa = PBXBuildFile; fileRef = 881670691EA5DE2A00BEBF23 /* README.txt */; }; 881671BB1EA5DE2B00BEBF23 /* UMComDataStorage.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8816706A1EA5DE2A00BEBF23 /* UMComDataStorage.framework */; }; 881671BC1EA5DE2B00BEBF23 /* UMComFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8816706B1EA5DE2A00BEBF23 /* UMComFoundation.framework */; }; 881671BD1EA5DE2B00BEBF23 /* UMCommunitySDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8816706C1EA5DE2A00BEBF23 /* UMCommunitySDK.framework */; }; @@ -574,7 +899,6 @@ 882956F61DBDA3A300E9DDD7 /* Co2_on.png in Resources */ = {isa = PBXBuildFile; fileRef = 882955181DBDA3A100E9DDD7 /* Co2_on.png */; }; 882956F71DBDA3A300E9DDD7 /* DanBai_off.png in Resources */ = {isa = PBXBuildFile; fileRef = 882955191DBDA3A100E9DDD7 /* DanBai_off.png */; }; 882956F81DBDA3A300E9DDD7 /* DanBai_on.png in Resources */ = {isa = PBXBuildFile; fileRef = 8829551A1DBDA3A100E9DDD7 /* DanBai_on.png */; }; - 882956F91DBDA3A300E9DDD7 /* graybtn_big.png in Resources */ = {isa = PBXBuildFile; fileRef = 8829551B1DBDA3A100E9DDD7 /* graybtn_big.png */; }; 882956FA1DBDA3A300E9DDD7 /* guidengCell_back.png in Resources */ = {isa = PBXBuildFile; fileRef = 8829551C1DBDA3A100E9DDD7 /* guidengCell_back.png */; }; 882956FB1DBDA3A300E9DDD7 /* JiaReBang_off.png in Resources */ = {isa = PBXBuildFile; fileRef = 8829551D1DBDA3A100E9DDD7 /* JiaReBang_off.png */; }; 882956FC1DBDA3A300E9DDD7 /* JiaReBang_on.png in Resources */ = {isa = PBXBuildFile; fileRef = 8829551E1DBDA3A100E9DDD7 /* JiaReBang_on.png */; }; @@ -675,7 +999,6 @@ 8829575B1DBDA3A300E9DDD7 /* swimmingfish0074.png in Resources */ = {isa = PBXBuildFile; fileRef = 8829557F1DBDA3A100E9DDD7 /* swimmingfish0074.png */; }; 8829575C1DBDA3A300E9DDD7 /* swimmingfish0075.png in Resources */ = {isa = PBXBuildFile; fileRef = 882955801DBDA3A100E9DDD7 /* swimmingfish0075.png */; }; 8829575D1DBDA3A300E9DDD7 /* swimmingfish0076.png in Resources */ = {isa = PBXBuildFile; fileRef = 882955811DBDA3A100E9DDD7 /* swimmingfish0076.png */; }; - 8829575E1DBDA3A300E9DDD7 /* greenbtn_big.png in Resources */ = {isa = PBXBuildFile; fileRef = 882955831DBDA3A100E9DDD7 /* greenbtn_big.png */; }; 8829575F1DBDA3A300E9DDD7 /* icon1.png in Resources */ = {isa = PBXBuildFile; fileRef = 882955841DBDA3A100E9DDD7 /* icon1.png */; }; 882957601DBDA3A300E9DDD7 /* icon2.png in Resources */ = {isa = PBXBuildFile; fileRef = 882955851DBDA3A100E9DDD7 /* icon2.png */; }; 882957611DBDA3A300E9DDD7 /* icon3.png in Resources */ = {isa = PBXBuildFile; fileRef = 882955861DBDA3A100E9DDD7 /* icon3.png */; }; @@ -799,7 +1122,6 @@ 882A760D1EBB27BE00AD1D15 /* ShopCerPart1InfoViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 882A760B1EBB27BE00AD1D15 /* ShopCerPart1InfoViewCell.xib */; }; 882A76111EBB2A6A00AD1D15 /* ShopCerPart1TableCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 882A760F1EBB2A6A00AD1D15 /* ShopCerPart1TableCell.m */; }; 882A76121EBB2A6A00AD1D15 /* ShopCerPart1TableCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 882A76101EBB2A6A00AD1D15 /* ShopCerPart1TableCell.xib */; }; - 882BF4E01EA72578006D0D79 /* YTheNaviBar.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 882BF4DE1EA72578006D0D79 /* YTheNaviBar.a */; }; 882C85A61EB03759001CC414 /* GoldConvertDetailViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 882C85A41EB03759001CC414 /* GoldConvertDetailViewCell.m */; }; 882C85A71EB03759001CC414 /* GoldConvertDetailViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 882C85A51EB03759001CC414 /* GoldConvertDetailViewCell.xib */; }; 882C85AB1EB038D4001CC414 /* particulars_backgroud_ten.png in Resources */ = {isa = PBXBuildFile; fileRef = 882C85A81EB038D4001CC414 /* particulars_backgroud_ten.png */; }; @@ -1041,73 +1363,6 @@ 883E78971D48A5E50030E075 /* IfishMessageViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E77161D48A5E50030E075 /* IfishMessageViewController.m */; }; 883E78981D48A5E50030E075 /* PushmassageModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E77191D48A5E50030E075 /* PushmassageModel.m */; }; 883E78991D48A5E50030E075 /* IfishDeviceViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E771C1D48A5E50030E075 /* IfishDeviceViewController.m */; }; - 883E789A1D48A5E50030E075 /* IfishCameraModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E77201D48A5E50030E075 /* IfishCameraModel.m */; }; - 883E789B1D48A5E50030E075 /* IfishP2PMonitorController.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E77221D48A5E50030E075 /* IfishP2PMonitorController.m */; }; - 883E789D1D48A5E50030E075 /* KTPhotoView+SDWebImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E77271D48A5E50030E075 /* KTPhotoView+SDWebImage.m */; }; - 883E789E1D48A5E50030E075 /* KTThumbView+SDWebImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E77291D48A5E50030E075 /* KTThumbView+SDWebImage.m */; }; - 883E789F1D48A5E50030E075 /* ShootImgDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E772B1D48A5E50030E075 /* ShootImgDataSource.m */; }; - 883E78A01D48A5E50030E075 /* ShotScreenImgViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E772D1D48A5E50030E075 /* ShotScreenImgViewController.m */; }; - 883E78A11D48A5E50030E075 /* YooseConnectFirstViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E772F1D48A5E50030E075 /* YooseConnectFirstViewController.m */; }; - 883E78A21D48A5E50030E075 /* YooseeCenterViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E77311D48A5E50030E075 /* YooseeCenterViewCell.m */; }; - 883E78A31D48A5E50030E075 /* YooseeCenterViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 883E77321D48A5E50030E075 /* YooseeCenterViewCell.xib */; }; - 883E78A41D48A5E50030E075 /* YooseeCenterViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E77341D48A5E50030E075 /* YooseeCenterViewController.m */; }; - 883E78A51D48A5E50030E075 /* YooseeNextConnectViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 883E77361D48A5E50030E075 /* YooseeNextConnectViewController.mm */; }; - 883E78A61D48A5E50030E075 /* BootomViewSoketBackMasgConreol.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E77391D48A5E50030E075 /* BootomViewSoketBackMasgConreol.m */; }; - 883E78A71D48A5E50030E075 /* ifishdeviceListCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E773B1D48A5E50030E075 /* ifishdeviceListCell.m */; }; - 883E78A81D48A5E50030E075 /* MonitorBootmView.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E773D1D48A5E50030E075 /* MonitorBootmView.m */; }; - 883E78A91D48A5E50030E075 /* FishControlFirstCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E77401D48A5E50030E075 /* FishControlFirstCell.m */; }; - 883E78AA1D48A5E50030E075 /* FishControlFourthCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E77421D48A5E50030E075 /* FishControlFourthCell.m */; }; - 883E78AB1D48A5E50030E075 /* FishControlSecondCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E77441D48A5E50030E075 /* FishControlSecondCell.m */; }; - 883E78AC1D48A5E50030E075 /* FishControlThreedViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E77461D48A5E50030E075 /* FishControlThreedViewCell.m */; }; - 883E78AD1D48A5E50030E075 /* AccountResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E77491D48A5E50030E075 /* AccountResult.m */; }; - 883E78AE1D48A5E50030E075 /* Alarm.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E774B1D48A5E50030E075 /* Alarm.m */; }; - 883E78AF1D48A5E50030E075 /* CheckAlarmMessageResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E774D1D48A5E50030E075 /* CheckAlarmMessageResult.m */; }; - 883E78B01D48A5E50030E075 /* CheckNewMessageResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E774F1D48A5E50030E075 /* CheckNewMessageResult.m */; }; - 883E78B11D48A5E50030E075 /* ConnectFailurePromptView.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E77511D48A5E50030E075 /* ConnectFailurePromptView.m */; }; - 883E78B21D48A5E50030E075 /* Contact.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E77541D48A5E50030E075 /* Contact.m */; }; - 883E78B31D48A5E50030E075 /* ContactDAO.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E77561D48A5E50030E075 /* ContactDAO.m */; }; - 883E78B41D48A5E50030E075 /* CustomBorderButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E77581D48A5E50030E075 /* CustomBorderButton.m */; }; - 883E78B51D48A5E50030E075 /* CustomTopBar.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E775A1D48A5E50030E075 /* CustomTopBar.m */; }; - 883E78B61D48A5E50030E075 /* CustomView.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E775C1D48A5E50030E075 /* CustomView.m */; }; - 883E78B71D48A5E50030E075 /* GetAlarmRecordResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E775E1D48A5E50030E075 /* GetAlarmRecordResult.m */; }; - 883E78B81D48A5E50030E075 /* GetContactMessageResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E77601D48A5E50030E075 /* GetContactMessageResult.m */; }; - 883E78B91D48A5E50030E075 /* AlarmDAO.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E77631D48A5E50030E075 /* AlarmDAO.m */; }; - 883E78BA1D48A5E50030E075 /* CameraManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E77651D48A5E50030E075 /* CameraManager.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 883E78BB1D48A5E50030E075 /* des2.c in Sources */ = {isa = PBXBuildFile; fileRef = 883E77671D48A5E50030E075 /* des2.c */; }; - 883E78BC1D48A5E50030E075 /* FListManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E776A1D48A5E50030E075 /* FListManager.m */; }; - 883E78BD1D48A5E50030E075 /* Message.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E776D1D48A5E50030E075 /* Message.m */; }; - 883E78BE1D48A5E50030E075 /* MessageDAO.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E776F1D48A5E50030E075 /* MessageDAO.m */; }; - 883E78C01D48A5E50030E075 /* PAIOUnit.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E77741D48A5E50030E075 /* PAIOUnit.m */; }; - 883E78C11D48A5E50030E075 /* ParamDao.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E77761D48A5E50030E075 /* ParamDao.m */; }; - 883E78C21D48A5E50030E075 /* RecommendInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E77781D48A5E50030E075 /* RecommendInfo.m */; }; - 883E78C31D48A5E50030E075 /* RecommendInfoDAO.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E777A1D48A5E50030E075 /* RecommendInfoDAO.m */; }; - 883E78C41D48A5E50030E075 /* ShakeManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E777C1D48A5E50030E075 /* ShakeManager.m */; }; - 883E78C51D48A5E50030E075 /* UDPManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E777E1D48A5E50030E075 /* UDPManager.m */; }; - 883E78C61D48A5E50030E075 /* YAudioStreamPlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E77801D48A5E50030E075 /* YAudioStreamPlayer.m */; }; - 883E78C71D48A5E50030E075 /* KTPhotoBrowser.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 883E77821D48A5E50030E075 /* KTPhotoBrowser.bundle */; }; - 883E78C81D48A5E50030E075 /* KTPhotoBrowserGlobal.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E77851D48A5E50030E075 /* KTPhotoBrowserGlobal.m */; }; - 883E78C91D48A5E50030E075 /* KTPhotoScrollViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E77871D48A5E50030E075 /* KTPhotoScrollViewController.m */; }; - 883E78CA1D48A5E50030E075 /* KTPhotoView.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E77891D48A5E50030E075 /* KTPhotoView.m */; }; - 883E78CB1D48A5E50030E075 /* KTThumbsView.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E778B1D48A5E50030E075 /* KTThumbsView.m */; }; - 883E78CC1D48A5E50030E075 /* KTThumbsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E778D1D48A5E50030E075 /* KTThumbsViewController.m */; }; - 883E78CD1D48A5E50030E075 /* KTThumbView.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E778F1D48A5E50030E075 /* KTThumbView.m */; }; - 883E78CE1D48A5E50030E075 /* LocalDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E77911D48A5E50030E075 /* LocalDevice.m */; }; - 883E78CF1D48A5E50030E075 /* LoginResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E77931D48A5E50030E075 /* LoginResult.m */; }; - 883E78D01D48A5E50030E075 /* ModifyLoginPasswordResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E77951D48A5E50030E075 /* ModifyLoginPasswordResult.m */; }; - 883E78D11D48A5E50030E075 /* MPNotificationView.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E77981D48A5E50030E075 /* MPNotificationView.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 883E78D21D48A5E50030E075 /* NetManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E779A1D48A5E50030E075 /* NetManager.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 883E78D31D48A5E50030E075 /* OBGradientView.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E779D1D48A5E50030E075 /* OBGradientView.m */; }; - 883E78D41D48A5E50030E075 /* ProgressImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E779F1D48A5E50030E075 /* ProgressImageView.m */; }; - 883E78D51D48A5E50030E075 /* RegisterResult.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E77A11D48A5E50030E075 /* RegisterResult.m */; }; - 883E78D61D48A5E50030E075 /* TabView.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E77A31D48A5E50030E075 /* TabView.m */; }; - 883E78D71D48A5E50030E075 /* Toast+UIView.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E77A51D48A5E50030E075 /* Toast+UIView.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 883E78D81D48A5E50030E075 /* TouchButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E77A71D48A5E50030E075 /* TouchButton.m */; }; - 883E78D91D48A5E50030E075 /* UDManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E77A91D48A5E50030E075 /* UDManager.m */; }; - 883E78DA1D48A5E50030E075 /* Utils.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E77AB1D48A5E50030E075 /* Utils.m */; }; - 883E78DB1D48A5E50030E075 /* WaitingPageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E77AD1D48A5E50030E075 /* WaitingPageView.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 883E78DC1D48A5E50030E075 /* YProgressView.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E77AF1D48A5E50030E075 /* YProgressView.m */; }; - 883E78DD1D48A5E50030E075 /* Common-Configuration.plist in Resources */ = {isa = PBXBuildFile; fileRef = 883E77B11D48A5E50030E075 /* Common-Configuration.plist */; }; - 883E78DE1D48A5E50030E075 /* IFISHYooseeImg.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 883E77B21D48A5E50030E075 /* IFISHYooseeImg.bundle */; }; 883E78EA1D48A5E50030E075 /* BookViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E780C1D48A5E50030E075 /* BookViewController.m */; }; 883E78EB1D48A5E50030E075 /* ConnectErrorViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E780E1D48A5E50030E075 /* ConnectErrorViewController.m */; }; 883E78EC1D48A5E50030E075 /* ConnectWifiViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E78101D48A5E50030E075 /* ConnectWifiViewController.m */; }; @@ -1189,7 +1444,6 @@ 883E79C91D48B0280030E075 /* SetTimeCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 883E799B1D48B0280030E075 /* SetTimeCell.xib */; }; 883E79CA1D48B0280030E075 /* TemperatureSetCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 883E799D1D48B0280030E075 /* TemperatureSetCell.m */; }; 883E79CB1D48B0280030E075 /* TemperatureSetCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 883E799E1D48B0280030E075 /* TemperatureSetCell.xib */; }; - 883E79CC1D48B7120030E075 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 883E79CE1D48B7120030E075 /* Localizable.strings */; }; 883E7BCC1EA5FA1A00ED5D89 /* MOBFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 883E7BC91EA5FA1A00ED5D89 /* MOBFoundation.framework */; }; 883E7BCD1EA5FA1A00ED5D89 /* MOBFoundationEx.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 883E7BCA1EA5FA1A00ED5D89 /* MOBFoundationEx.framework */; }; 883E7BCE1EA5FA1A00ED5D89 /* SMS_SDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 883E7BCB1EA5FA1A00ED5D89 /* SMS_SDK.framework */; }; @@ -1248,11 +1502,7 @@ 8856B0E81DEC15F5009D384A /* home_popup_cancel@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8856B0DF1DEC15F5009D384A /* home_popup_cancel@2x.png */; }; 8856B0E91DEC15F5009D384A /* home_popup_cancel@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8856B0E01DEC15F5009D384A /* home_popup_cancel@3x.png */; }; 8856B0EC1DED4AE0009D384A /* IfishUserDefaultHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 8856B0EB1DED4AE0009D384A /* IfishUserDefaultHelper.m */; }; - 8856B0F01DED7EB9009D384A /* CameraBottomHView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8856B0EF1DED7EB9009D384A /* CameraBottomHView.m */; }; - 8856B0F41DEE9FC7009D384A /* CameraBottomCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 8856B0F21DEE9FC7009D384A /* CameraBottomCollectionViewCell.m */; }; - 8856B0F51DEE9FC7009D384A /* CameraBottomCollectionViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8856B0F31DEE9FC7009D384A /* CameraBottomCollectionViewCell.xib */; }; 8857E43C1ECBE53A004A3D75 /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 8857E43B1ECBE53A004A3D75 /* libc++.tbd */; }; - 8857E43E1ECBE554004A3D75 /* libstdc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 8857E43D1ECBE554004A3D75 /* libstdc++.tbd */; }; 88591EE31D655B9E00A1316E /* AreaModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 88591ED91D655B9E00A1316E /* AreaModel.m */; }; 88591EE41D655B9E00A1316E /* china_citys_name.db in Resources */ = {isa = PBXBuildFile; fileRef = 88591EDA1D655B9E00A1316E /* china_citys_name.db */; }; 88591EE51D655B9E00A1316E /* ChinaArea.m in Sources */ = {isa = PBXBuildFile; fileRef = 88591EDC1D655B9E00A1316E /* ChinaArea.m */; }; @@ -1765,7 +2015,6 @@ 88653CA21E7671F900FF973E /* MineHeaderNewItemsCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 88653CA01E7671F900FF973E /* MineHeaderNewItemsCell.m */; }; 88653CA31E7671F900FF973E /* MineHeaderNewItemsCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 88653CA11E7671F900FF973E /* MineHeaderNewItemsCell.xib */; }; 88673AFC1E1E57CB001D5F49 /* RuSunGuiDeng.m in Sources */ = {isa = PBXBuildFile; fileRef = 88673AFB1E1E57CB001D5F49 /* RuSunGuiDeng.m */; }; - 88673B011E1F3DA9001D5F49 /* FishTankBootmDataHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 88673B001E1F3DA9001D5F49 /* FishTankBootmDataHelper.m */; }; 88673B041E1F6A4F001D5F49 /* SongNuoBDProtocol.m in Sources */ = {isa = PBXBuildFile; fileRef = 88673B031E1F6A4F001D5F49 /* SongNuoBDProtocol.m */; }; 88673B071E1F71DC001D5F49 /* SongNuoDBCenterViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 88673B061E1F71DC001D5F49 /* SongNuoDBCenterViewController.m */; }; 88673B0A1E1F75DF001D5F49 /* SongNuoDBSetViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 88673B091E1F75DF001D5F49 /* SongNuoDBSetViewController.m */; }; @@ -1899,7 +2148,6 @@ 886D94F91D6C3F3A00CF0B63 /* MineKanHuNormalViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 886D94F71D6C3F3A00CF0B63 /* MineKanHuNormalViewCell.xib */; }; 886D94FC1D6C54DC00CF0B63 /* XuanZekanHuShangJiaXinXi.m in Sources */ = {isa = PBXBuildFile; fileRef = 886D94FB1D6C54DC00CF0B63 /* XuanZekanHuShangJiaXinXi.m */; }; 886E3A0B1EEA44B5007C0B04 /* UserExtendataArchaver.m in Sources */ = {isa = PBXBuildFile; fileRef = 886E3A0A1EEA44B5007C0B04 /* UserExtendataArchaver.m */; }; - 886E54851DF64DDB0001D653 /* IfishP2PPlayBackListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 886E54841DF64DDB0001D653 /* IfishP2PPlayBackListViewController.m */; }; 886E6A551D893870009C7724 /* SVIndefiniteAnimatedView.m in Sources */ = {isa = PBXBuildFile; fileRef = 886E6A511D893870009C7724 /* SVIndefiniteAnimatedView.m */; }; 886E6A561D893870009C7724 /* SVProgressHUD.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 886E6A521D893870009C7724 /* SVProgressHUD.bundle */; }; 886E6A571D893870009C7724 /* SVProgressHUD.m in Sources */ = {isa = PBXBuildFile; fileRef = 886E6A541D893870009C7724 /* SVProgressHUD.m */; }; @@ -2035,15 +2283,6 @@ 8871FB211EBC822B0038E99A /* select_waiting.png in Resources */ = {isa = PBXBuildFile; fileRef = 8871FB181EBC822B0038E99A /* select_waiting.png */; }; 8871FB221EBC822B0038E99A /* select_waiting@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8871FB191EBC822B0038E99A /* select_waiting@2x.png */; }; 8871FB231EBC822B0038E99A /* select_waiting@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8871FB1A1EBC822B0038E99A /* select_waiting@3x.png */; }; - 88721D771E07EFEE0047B7B1 /* P2PClient.m in Sources */ = {isa = PBXBuildFile; fileRef = 88721D761E07EFEE0047B7B1 /* P2PClient.m */; }; - 88721D7E1E0913530047B7B1 /* FXBlurView.m in Sources */ = {isa = PBXBuildFile; fileRef = 88721D7D1E0913530047B7B1 /* FXBlurView.m */; }; - 88721D891E0A1ACC0047B7B1 /* P2PPlaybackController.m in Sources */ = {isa = PBXBuildFile; fileRef = 88721D881E0A1ACC0047B7B1 /* P2PPlaybackController.m */; }; - 88721D911E0A1B670047B7B1 /* CyclePickerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 88721D8C1E0A1B670047B7B1 /* CyclePickerView.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 88721D921E0A1B670047B7B1 /* MXSCycleScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = 88721D8E1E0A1B670047B7B1 /* MXSCycleScrollView.m */; }; - 88721D931E0A1B670047B7B1 /* MXSCycleScrollView3.m in Sources */ = {isa = PBXBuildFile; fileRef = 88721D901E0A1B670047B7B1 /* MXSCycleScrollView3.m */; }; - 88721D9A1E0A1E680047B7B1 /* SVPullToRefresh.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 88721D951E0A1E680047B7B1 /* SVPullToRefresh.bundle */; }; - 88721D9B1E0A1E680047B7B1 /* SVPullToRefresh.m in Sources */ = {isa = PBXBuildFile; fileRef = 88721D971E0A1E680047B7B1 /* SVPullToRefresh.m */; }; - 88721D9C1E0A1E680047B7B1 /* UIScrollView+SVInfiniteScrolling.m in Sources */ = {isa = PBXBuildFile; fileRef = 88721D991E0A1E680047B7B1 /* UIScrollView+SVInfiniteScrolling.m */; }; 8872B6421D7E649A00D47C75 /* LXShareImageVIew.m in Sources */ = {isa = PBXBuildFile; fileRef = 8872B6411D7E649A00D47C75 /* LXShareImageVIew.m */; }; 8872FFCB1E9B300800406C1D /* AlibabaAuthExt.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8872FFB71E9B300800406C1D /* AlibabaAuthExt.framework */; }; 8872FFCC1E9B300800406C1D /* AlibabaAuthSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8872FFB81E9B300800406C1D /* AlibabaAuthSDK.framework */; }; @@ -2064,7 +2303,6 @@ 8872FFDB1E9B300800406C1D /* AlipaySDK.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 8872FFC81E9B300800406C1D /* AlipaySDK.bundle */; }; 8872FFDC1E9B300800406C1D /* ALPLinkPartnerSDK.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 8872FFC91E9B300800406C1D /* ALPLinkPartnerSDK.bundle */; }; 8872FFDD1E9B300800406C1D /* NBResource.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 8872FFCA1E9B300800406C1D /* NBResource.bundle */; }; - 887361421F0231FC00259A92 /* libAVCtrl.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 887361401F0231FC00259A92 /* libAVCtrl.a */; }; 88742AED1EF7C792006BF401 /* window_heating.png in Resources */ = {isa = PBXBuildFile; fileRef = 88742AE71EF7C792006BF401 /* window_heating.png */; }; 88742AEE1EF7C792006BF401 /* window_heating@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 88742AE81EF7C792006BF401 /* window_heating@2x.png */; }; 88742AEF1EF7C792006BF401 /* window_heating@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 88742AE91EF7C792006BF401 /* window_heating@3x.png */; }; @@ -2304,18 +2542,12 @@ 88C685F81EA603A8004CDFD9 /* WeiboSDK.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 88C685DD1EA603A8004CDFD9 /* WeiboSDK.bundle */; }; 88C685F91EA603A8004CDFD9 /* libSocialWeChat.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 88C685E21EA603A8004CDFD9 /* libSocialWeChat.a */; }; 88C685FA1EA603A8004CDFD9 /* libWeChatSDK.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 88C685E51EA603A8004CDFD9 /* libWeChatSDK.a */; }; - 88C685FB1EA603A8004CDFD9 /* README.txt in Resources */ = {isa = PBXBuildFile; fileRef = 88C685E61EA603A8004CDFD9 /* README.txt */; }; 88C685FC1EA603A8004CDFD9 /* UMSocialCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 88C685EB1EA603A8004CDFD9 /* UMSocialCore.framework */; }; 88C685FD1EA603A8004CDFD9 /* UMSocialNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 88C685EC1EA603A8004CDFD9 /* UMSocialNetwork.framework */; }; 88C685FE1EA603A8004CDFD9 /* UMSocialSDKPromptResources.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 88C685ED1EA603A8004CDFD9 /* UMSocialSDKPromptResources.bundle */; }; 88C685FF1EA603A8004CDFD9 /* libUMSocialLog.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 88C685EF1EA603A8004CDFD9 /* libUMSocialLog.a */; }; 88C686001EA603A8004CDFD9 /* UMSocialSDKResources.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 88C685F11EA603A8004CDFD9 /* UMSocialSDKResources.bundle */; }; 88C686011EA603A8004CDFD9 /* UShareUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 88C685F21EA603A8004CDFD9 /* UShareUI.framework */; }; - 88C686081EA60691004CDFD9 /* BaiduMapAPI_Base.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 88C686031EA60691004CDFD9 /* BaiduMapAPI_Base.framework */; }; - 88C686091EA60691004CDFD9 /* BaiduMapAPI_Location.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 88C686041EA60691004CDFD9 /* BaiduMapAPI_Location.framework */; }; - 88C6860A1EA60691004CDFD9 /* BaiduMapAPI_Map.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 88C686051EA60691004CDFD9 /* BaiduMapAPI_Map.framework */; }; - 88C6860B1EA60691004CDFD9 /* BaiduMapAPI_Search.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 88C686061EA60691004CDFD9 /* BaiduMapAPI_Search.framework */; }; - 88C6860C1EA60691004CDFD9 /* BaiduMapAPI_Utils.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 88C686071EA60691004CDFD9 /* BaiduMapAPI_Utils.framework */; }; 88C686111EA60A40004CDFD9 /* libTalkingData.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 88C6860E1EA60A40004CDFD9 /* libTalkingData.a */; }; 88C686141EA60EA9004CDFD9 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 88C686131EA60EA9004CDFD9 /* WebKit.framework */; }; 88C686161EA60EB3004CDFD9 /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 88C686151EA60EB3004CDFD9 /* CoreText.framework */; }; @@ -2353,17 +2585,7 @@ 88C6865C1EA612BD004CDFD9 /* libiconv.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 88C6865B1EA612BD004CDFD9 /* libiconv.tbd */; }; 88C6865E1EA612D0004CDFD9 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 88C6865D1EA612D0004CDFD9 /* libz.tbd */; }; 88C686601EA612DE004CDFD9 /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 88C6865F1EA612DE004CDFD9 /* Accelerate.framework */; }; - 88C686611EA61CB6004CDFD9 /* libstdc++.6.0.9.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 88C686271EA610A6004CDFD9 /* libstdc++.6.0.9.tbd */; settings = {ATTRIBUTES = (Required, ); }; }; - 88D0F2761EA646E100286022 /* libMD5Manager.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 88D0F2251EA646E100286022 /* libMD5Manager.a */; }; - 88D0F2771EA646E100286022 /* FfmpegInterface.m in Sources */ = {isa = PBXBuildFile; fileRef = 88D0F26A1EA646E100286022 /* FfmpegInterface.m */; }; - 88D0F2781EA646E100286022 /* libRTSP.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 88D0F26B1EA646E100286022 /* libRTSP.a */; }; - 88D0F2791EA646E100286022 /* RtspInterface.mm in Sources */ = {isa = PBXBuildFile; fileRef = 88D0F26E1EA646E100286022 /* RtspInterface.mm */; }; - 88D0F27A1EA646E100286022 /* libelian.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 88D0F2711EA646E100286022 /* libelian.a */; }; 88D0F27D1EA6F53E00286022 /* IfishSetViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 88D0F27C1EA6F53E00286022 /* IfishSetViewController.m */; }; - 88D0F2901EA7069B00286022 /* YFonc.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 88D0F2841EA7069B00286022 /* YFonc.a */; }; - 88D0F2911EA7069B00286022 /* YMsgBox.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 88D0F2871EA7069B00286022 /* YMsgBox.a */; }; - 88D0F2921EA7069B00286022 /* YSlider.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 88D0F28A1EA7069B00286022 /* YSlider.a */; }; - 88D0F2931EA7069B00286022 /* YTargetAndAction.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 88D0F28D1EA7069B00286022 /* YTargetAndAction.a */; }; 88D337281DC71EB5006C0ADB /* linkingdevice_botton.png in Resources */ = {isa = PBXBuildFile; fileRef = 88D337191DC71EB5006C0ADB /* linkingdevice_botton.png */; }; 88D337291DC71EB5006C0ADB /* linkingdevice_botton@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 88D3371A1DC71EB5006C0ADB /* linkingdevice_botton@2x.png */; }; 88D3372A1DC71EB5006C0ADB /* linkingdevice_botton@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 88D3371B1DC71EB5006C0ADB /* linkingdevice_botton@3x.png */; }; @@ -2378,7 +2600,6 @@ 88D337361DC71EB5006C0ADB /* linkingdevice_setting@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 88D337271DC71EB5006C0ADB /* linkingdevice_setting@3x.png */; }; 88D3373C1DC7440C006C0ADB /* IfishConnectingView.m in Sources */ = {isa = PBXBuildFile; fileRef = 88D3373B1DC7440C006C0ADB /* IfishConnectingView.m */; }; 88EE7AC31ECBF8BE00408C79 /* libc++.1.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 88EE7AC21ECBF8BE00408C79 /* libc++.1.tbd */; }; - 88EE7AC51ECBF8EC00408C79 /* libstdc++.6.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 88EE7AC41ECBF8EC00408C79 /* libstdc++.6.tbd */; }; 88F23F241EA9D18700E4D298 /* live_botton_exceptional.png in Resources */ = {isa = PBXBuildFile; fileRef = 88F23F181EA9D18700E4D298 /* live_botton_exceptional.png */; }; 88F23F251EA9D18700E4D298 /* live_botton_exceptional@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 88F23F191EA9D18700E4D298 /* live_botton_exceptional@2x.png */; }; 88F23F261EA9D18700E4D298 /* live_botton_exceptional@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 88F23F1A1EA9D18700E4D298 /* live_botton_exceptional@3x.png */; }; @@ -2421,10 +2642,6 @@ 88F5EFB71D48D08100CC7CAF /* UIProgressView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 88F5EF0B1D48D08000CC7CAF /* UIProgressView+AFNetworking.m */; }; 88F5EFB81D48D08100CC7CAF /* UIRefreshControl+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 88F5EF0D1D48D08000CC7CAF /* UIRefreshControl+AFNetworking.m */; }; 88F5EFB91D48D08100CC7CAF /* UIWebView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = 88F5EF0F1D48D08000CC7CAF /* UIWebView+AFNetworking.m */; }; - 88F5EFBA1D48D08100CC7CAF /* GCDAsyncSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = 88F5EF131D48D08000CC7CAF /* GCDAsyncSocket.m */; }; - 88F5EFBB1D48D08100CC7CAF /* GCDAsyncUdpSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = 88F5EF151D48D08000CC7CAF /* GCDAsyncUdpSocket.m */; }; - 88F5EFBC1D48D08100CC7CAF /* AsyncSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = 88F5EF181D48D08000CC7CAF /* AsyncSocket.m */; }; - 88F5EFBD1D48D08100CC7CAF /* AsyncUdpSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = 88F5EF1A1D48D08000CC7CAF /* AsyncUdpSocket.m */; }; 88F5EFBE1D48D08100CC7CAF /* FMDatabase.m in Sources */ = {isa = PBXBuildFile; fileRef = 88F5EF1D1D48D08000CC7CAF /* FMDatabase.m */; }; 88F5EFBF1D48D08100CC7CAF /* FMDatabaseAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 88F5EF1F1D48D08000CC7CAF /* FMDatabaseAdditions.m */; }; 88F5EFC01D48D08100CC7CAF /* FMDatabasePool.m in Sources */ = {isa = PBXBuildFile; fileRef = 88F5EF211D48D08000CC7CAF /* FMDatabasePool.m */; }; @@ -2454,15 +2671,6 @@ 88F5EFD81D48D08100CC7CAF /* MMVectorImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 88F5EF591D48D08100CC7CAF /* MMVectorImage.m */; }; 88F5EFD91D48D08100CC7CAF /* MyControl.m in Sources */ = {isa = PBXBuildFile; fileRef = 88F5EF5C1D48D08100CC7CAF /* MyControl.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; 88F5EFDA1D48D08100CC7CAF /* Reachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 88F5EF5F1D48D08100CC7CAF /* Reachability.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 88F5EFE91D48D08100CC7CAF /* bitstream.c in Sources */ = {isa = PBXBuildFile; fileRef = 88F5EF801D48D08100CC7CAF /* bitstream.c */; }; - 88F5EFEA1D48D08100CC7CAF /* mask.c in Sources */ = {isa = PBXBuildFile; fileRef = 88F5EF821D48D08100CC7CAF /* mask.c */; }; - 88F5EFEB1D48D08100CC7CAF /* QRCodeGenerator.m in Sources */ = {isa = PBXBuildFile; fileRef = 88F5EF851D48D08100CC7CAF /* QRCodeGenerator.m */; }; - 88F5EFEC1D48D08100CC7CAF /* qrencode.c in Sources */ = {isa = PBXBuildFile; fileRef = 88F5EF861D48D08100CC7CAF /* qrencode.c */; }; - 88F5EFED1D48D08100CC7CAF /* qrinput.c in Sources */ = {isa = PBXBuildFile; fileRef = 88F5EF881D48D08100CC7CAF /* qrinput.c */; }; - 88F5EFEE1D48D08100CC7CAF /* qrspec.c in Sources */ = {isa = PBXBuildFile; fileRef = 88F5EF8A1D48D08100CC7CAF /* qrspec.c */; }; - 88F5EFEF1D48D08100CC7CAF /* rscode.c in Sources */ = {isa = PBXBuildFile; fileRef = 88F5EF8C1D48D08100CC7CAF /* rscode.c */; }; - 88F5EFF01D48D08100CC7CAF /* split.c in Sources */ = {isa = PBXBuildFile; fileRef = 88F5EF8E1D48D08100CC7CAF /* split.c */; }; - 88F5EFF11D48D08100CC7CAF /* libzbar.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 88F5EFA81D48D08100CC7CAF /* libzbar.a */; }; 88F740C01ECC28E800876AED /* ShopAddGoodsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 88F740BF1ECC28E800876AED /* ShopAddGoodsViewController.m */; }; E51D7D4B208CD528001FF053 /* RuiMeiCHNameCustom.m in Sources */ = {isa = PBXBuildFile; fileRef = E51D7D4A208CD528001FF053 /* RuiMeiCHNameCustom.m */; }; E51D7D4E208CD5C8001FF053 /* RuiMeiCHControl.m in Sources */ = {isa = PBXBuildFile; fileRef = E51D7D4D208CD5C8001FF053 /* RuiMeiCHControl.m */; }; @@ -2473,7 +2681,6 @@ E521222C21075C0D00BA24C5 /* tip.png in Resources */ = {isa = PBXBuildFile; fileRef = E521222B21075C0C00BA24C5 /* tip.png */; }; E5212235210760A600BA24C5 /* SettingResetViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E5212233210760A600BA24C5 /* SettingResetViewController.m */; }; E5212236210760A700BA24C5 /* SettingResetViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = E5212234210760A600BA24C5 /* SettingResetViewController.xib */; }; - E52B400521042ED2003BBA3E /* ConnectHotspotTipViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E52B400321042ED2003BBA3E /* ConnectHotspotTipViewController.m */; }; E52B400621042ED2003BBA3E /* ConnectHotspotTipViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = E52B400421042ED2003BBA3E /* ConnectHotspotTipViewController.xib */; }; E5317A1321188F170014AFDD /* ResetDeviceModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E5317A1221188F170014AFDD /* ResetDeviceModel.m */; }; E5317A1621188F8A0014AFDD /* RestartDeviceModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E5317A1521188F8A0014AFDD /* RestartDeviceModel.m */; }; @@ -2522,6 +2729,322 @@ 3D13F836212FE2D100D725F7 /* IFishWaterChangeView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = IFishWaterChangeView.xib; sourceTree = ""; }; 3D13F839212FE47F00D725F7 /* UIView+GetView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+GetView.m"; sourceTree = ""; }; 3D13F83A212FE47F00D725F7 /* UIView+GetView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+GetView.h"; sourceTree = ""; }; + 3D1C17202171BB0600A159A8 /* PNChart.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PNChart.h; sourceTree = ""; }; + 3D1C17212171BB0600A159A8 /* PNPieChart.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PNPieChart.h; sourceTree = ""; }; + 3D1C17222171BB0600A159A8 /* PNPieChartDataItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PNPieChartDataItem.m; sourceTree = ""; }; + 3D1C17232171BB0600A159A8 /* PNLineChartDataItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PNLineChartDataItem.h; sourceTree = ""; }; + 3D1C17242171BB0600A159A8 /* PNBar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PNBar.h; sourceTree = ""; }; + 3D1C17252171BB0600A159A8 /* PNScatterChartData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PNScatterChartData.h; sourceTree = ""; }; + 3D1C17262171BB0600A159A8 /* PNColor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PNColor.h; sourceTree = ""; }; + 3D1C17272171BB0600A159A8 /* PNChartLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PNChartLabel.m; sourceTree = ""; }; + 3D1C17282171BB0600A159A8 /* PNRadarChart.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PNRadarChart.h; sourceTree = ""; }; + 3D1C17292171BB0600A159A8 /* PNScatterChartDataItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PNScatterChartDataItem.m; sourceTree = ""; }; + 3D1C172A2171BB0600A159A8 /* PNScatterChart.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PNScatterChart.h; sourceTree = ""; }; + 3D1C172B2171BB0600A159A8 /* PNRadarChartDataItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PNRadarChartDataItem.m; sourceTree = ""; }; + 3D1C172C2171BB0600A159A8 /* UICountingLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UICountingLabel.h; sourceTree = ""; }; + 3D1C172D2171BB0600A159A8 /* PNGenericChart.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PNGenericChart.m; sourceTree = ""; }; + 3D1C172E2171BB0600A159A8 /* PNBarChart.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PNBarChart.m; sourceTree = ""; }; + 3D1C172F2171BB0600A159A8 /* PNLineChart.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PNLineChart.m; sourceTree = ""; }; + 3D1C17302171BB0600A159A8 /* PNCircleChart.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PNCircleChart.m; sourceTree = ""; }; + 3D1C17312171BB0600A159A8 /* PNLineChartData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PNLineChartData.m; sourceTree = ""; }; + 3D1C17322171BB0600A159A8 /* PNLineChartDataItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PNLineChartDataItem.m; sourceTree = ""; }; + 3D1C17332171BB0600A159A8 /* PNPieChartDataItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PNPieChartDataItem.h; sourceTree = ""; }; + 3D1C17342171BB0600A159A8 /* PNPieChart.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PNPieChart.m; sourceTree = ""; }; + 3D1C17352171BB0600A159A8 /* PNRadarChart.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PNRadarChart.m; sourceTree = ""; }; + 3D1C17362171BB0600A159A8 /* PNChartLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PNChartLabel.h; sourceTree = ""; }; + 3D1C17372171BB0700A159A8 /* PNColor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PNColor.m; sourceTree = ""; }; + 3D1C17382171BB0700A159A8 /* PNScatterChartData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PNScatterChartData.m; sourceTree = ""; }; + 3D1C17392171BB0700A159A8 /* PNBar.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PNBar.m; sourceTree = ""; }; + 3D1C173A2171BB0700A159A8 /* PNBarChart.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PNBarChart.h; sourceTree = ""; }; + 3D1C173B2171BB0700A159A8 /* UICountingLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UICountingLabel.m; sourceTree = ""; }; + 3D1C173C2171BB0700A159A8 /* PNGenericChart.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PNGenericChart.h; sourceTree = ""; }; + 3D1C173D2171BB0700A159A8 /* PNRadarChartDataItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PNRadarChartDataItem.h; sourceTree = ""; }; + 3D1C173E2171BB0700A159A8 /* PNScatterChart.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PNScatterChart.m; sourceTree = ""; }; + 3D1C173F2171BB0700A159A8 /* PNChartDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PNChartDelegate.h; sourceTree = ""; }; + 3D1C17402171BB0700A159A8 /* PNScatterChartDataItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PNScatterChartDataItem.h; sourceTree = ""; }; + 3D1C17412171BB0700A159A8 /* PNLineChartData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PNLineChartData.h; sourceTree = ""; }; + 3D1C17422171BB0700A159A8 /* PNCircleChart.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PNCircleChart.h; sourceTree = ""; }; + 3D1C17432171BB0700A159A8 /* PNLineChart.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PNLineChart.h; sourceTree = ""; }; + 3D1C4F04221A9EDD0096AE43 /* elian.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = elian.h; sourceTree = ""; }; + 3D1C4F06221A9EDD0096AE43 /* MD5Manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MD5Manager.h; sourceTree = ""; }; + 3D1C4F07221A9EDD0096AE43 /* libMD5Manager.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libMD5Manager.a; sourceTree = ""; }; + 3D1C4F09221A9EDD0096AE43 /* Rtsp_instance.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Rtsp_instance.h; sourceTree = ""; }; + 3D1C4F0C221A9EDD0096AE43 /* time.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = time.h; sourceTree = ""; }; + 3D1C4F0D221A9EDD0096AE43 /* intfloat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = intfloat.h; sourceTree = ""; }; + 3D1C4F0E221A9EDD0096AE43 /* error.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = error.h; sourceTree = ""; }; + 3D1C4F0F221A9EDD0096AE43 /* fifo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fifo.h; sourceTree = ""; }; + 3D1C4F10221A9EDD0096AE43 /* blowfish.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blowfish.h; sourceTree = ""; }; + 3D1C4F11221A9EDD0096AE43 /* version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = version.h; sourceTree = ""; }; + 3D1C4F12221A9EDD0096AE43 /* samplefmt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = samplefmt.h; sourceTree = ""; }; + 3D1C4F13221A9EDD0096AE43 /* pixdesc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pixdesc.h; sourceTree = ""; }; + 3D1C4F14221A9EDD0096AE43 /* base64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = base64.h; sourceTree = ""; }; + 3D1C4F15221A9EDD0096AE43 /* rational.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rational.h; sourceTree = ""; }; + 3D1C4F16221A9EDD0096AE43 /* sha.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sha.h; sourceTree = ""; }; + 3D1C4F17221A9EDD0096AE43 /* avconfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = avconfig.h; sourceTree = ""; }; + 3D1C4F18221A9EDD0096AE43 /* lfg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lfg.h; sourceTree = ""; }; + 3D1C4F19221A9EDD0096AE43 /* avutil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = avutil.h; sourceTree = ""; }; + 3D1C4F1A221A9EDD0096AE43 /* intfloat_readwrite.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = intfloat_readwrite.h; sourceTree = ""; }; + 3D1C4F1B221A9EDD0096AE43 /* xtea.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = xtea.h; sourceTree = ""; }; + 3D1C4F1C221A9EDD0096AE43 /* crc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crc.h; sourceTree = ""; }; + 3D1C4F1D221A9EDD0096AE43 /* file.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = file.h; sourceTree = ""; }; + 3D1C4F1E221A9EDD0096AE43 /* md5.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = md5.h; sourceTree = ""; }; + 3D1C4F1F221A9EDD0096AE43 /* audio_fifo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audio_fifo.h; sourceTree = ""; }; + 3D1C4F20221A9EDD0096AE43 /* attributes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = attributes.h; sourceTree = ""; }; + 3D1C4F21221A9EDD0096AE43 /* adler32.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = adler32.h; sourceTree = ""; }; + 3D1C4F22221A9EDD0096AE43 /* timecode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = timecode.h; sourceTree = ""; }; + 3D1C4F23221A9EDD0096AE43 /* common.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = common.h; sourceTree = ""; }; + 3D1C4F24221A9EDD0096AE43 /* hmac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hmac.h; sourceTree = ""; }; + 3D1C4F25221A9EDD0096AE43 /* eval.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eval.h; sourceTree = ""; }; + 3D1C4F26221A9EDD0096AE43 /* dict.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dict.h; sourceTree = ""; }; + 3D1C4F27221A9EDD0096AE43 /* random_seed.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = random_seed.h; sourceTree = ""; }; + 3D1C4F28221A9EDD0096AE43 /* opt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = opt.h; sourceTree = ""; }; + 3D1C4F29221A9EDD0096AE43 /* log.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = log.h; sourceTree = ""; }; + 3D1C4F2A221A9EDD0096AE43 /* aes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aes.h; sourceTree = ""; }; + 3D1C4F2B221A9EDD0096AE43 /* bswap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bswap.h; sourceTree = ""; }; + 3D1C4F2C221A9EDD0096AE43 /* old_pix_fmts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = old_pix_fmts.h; sourceTree = ""; }; + 3D1C4F2D221A9EDD0096AE43 /* cpu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cpu.h; sourceTree = ""; }; + 3D1C4F2E221A9EDD0096AE43 /* audioconvert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audioconvert.h; sourceTree = ""; }; + 3D1C4F2F221A9EDD0096AE43 /* channel_layout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = channel_layout.h; sourceTree = ""; }; + 3D1C4F30221A9EDD0096AE43 /* imgutils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = imgutils.h; sourceTree = ""; }; + 3D1C4F31221A9EDD0096AE43 /* mem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mem.h; sourceTree = ""; }; + 3D1C4F32221A9EDD0096AE43 /* parseutils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = parseutils.h; sourceTree = ""; }; + 3D1C4F33221A9EDD0096AE43 /* bprint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bprint.h; sourceTree = ""; }; + 3D1C4F34221A9EDD0096AE43 /* pixfmt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pixfmt.h; sourceTree = ""; }; + 3D1C4F35221A9EDD0096AE43 /* timestamp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = timestamp.h; sourceTree = ""; }; + 3D1C4F36221A9EDD0096AE43 /* avassert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = avassert.h; sourceTree = ""; }; + 3D1C4F37221A9EDD0096AE43 /* mathematics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mathematics.h; sourceTree = ""; }; + 3D1C4F38221A9EDD0096AE43 /* intreadwrite.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = intreadwrite.h; sourceTree = ""; }; + 3D1C4F39221A9EDD0096AE43 /* avstring.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = avstring.h; sourceTree = ""; }; + 3D1C4F3B221A9EDD0096AE43 /* version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = version.h; sourceTree = ""; }; + 3D1C4F3C221A9EDD0096AE43 /* avio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = avio.h; sourceTree = ""; }; + 3D1C4F3D221A9EDD0096AE43 /* avformat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = avformat.h; sourceTree = ""; }; + 3D1C4F3F221A9EDD0096AE43 /* version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = version.h; sourceTree = ""; }; + 3D1C4F40221A9EDD0096AE43 /* swscale.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = swscale.h; sourceTree = ""; }; + 3D1C4F42221A9EDD0096AE43 /* avcodec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = avcodec.h; sourceTree = ""; }; + 3D1C4F43221A9EDD0096AE43 /* version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = version.h; sourceTree = ""; }; + 3D1C4F44221A9EDD0096AE43 /* vdpau.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vdpau.h; sourceTree = ""; }; + 3D1C4F45221A9EDD0096AE43 /* vaapi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vaapi.h; sourceTree = ""; }; + 3D1C4F46221A9EDD0096AE43 /* xvmc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = xvmc.h; sourceTree = ""; }; + 3D1C4F47221A9EDD0096AE43 /* avfft.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = avfft.h; sourceTree = ""; }; + 3D1C4F48221A9EDD0096AE43 /* vda.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vda.h; sourceTree = ""; }; + 3D1C4F49221A9EDD0096AE43 /* dxva2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dxva2.h; sourceTree = ""; }; + 3D1C4F4A221A9EDD0096AE43 /* old_codec_ids.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = old_codec_ids.h; sourceTree = ""; }; + 3D1C4F4B221A9EDD0096AE43 /* FfmpegInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FfmpegInterface.h; sourceTree = ""; }; + 3D1C4F4C221A9EDD0096AE43 /* RtspInterface.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = RtspInterface.mm; sourceTree = ""; }; + 3D1C4F4D221A9EDD0096AE43 /* RtspInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RtspInterface.h; sourceTree = ""; }; + 3D1C4F4E221A9EDD0096AE43 /* libRTSP.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libRTSP.a; sourceTree = ""; }; + 3D1C4F4F221A9EDD0096AE43 /* FfmpegInterface.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FfmpegInterface.m; sourceTree = ""; }; + 3D1C4F51221A9EDD0096AE43 /* P2PCInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = P2PCInterface.h; sourceTree = ""; }; + 3D1C4F52221A9EDD0096AE43 /* libAVCtrl.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libAVCtrl.a; sourceTree = ""; }; + 3D1C4F55221A9EDD0096AE43 /* KTPhotoBrowserGlobal.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KTPhotoBrowserGlobal.m; sourceTree = ""; }; + 3D1C4F56221A9EDD0096AE43 /* KTPhotoBrowserDataSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KTPhotoBrowserDataSource.h; sourceTree = ""; }; + 3D1C4F57221A9EDD0096AE43 /* KTThumbsView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KTThumbsView.m; sourceTree = ""; }; + 3D1C4F58221A9EDD0096AE43 /* KTThumbView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KTThumbView.m; sourceTree = ""; }; + 3D1C4F59221A9EDD0096AE43 /* KTPhotoScrollViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KTPhotoScrollViewController.m; sourceTree = ""; }; + 3D1C4F5A221A9EDD0096AE43 /* KTThumbsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KTThumbsViewController.h; sourceTree = ""; }; + 3D1C4F5B221A9EDD0096AE43 /* KTPhotoView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KTPhotoView.m; sourceTree = ""; }; + 3D1C4F5C221A9EDD0096AE43 /* KTPhotoBrowserGlobal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KTPhotoBrowserGlobal.h; sourceTree = ""; }; + 3D1C4F5D221A9EDD0096AE43 /* KTThumbView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KTThumbView.h; sourceTree = ""; }; + 3D1C4F5E221A9EDD0096AE43 /* KTPhotoBrowser.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = KTPhotoBrowser.bundle; sourceTree = ""; }; + 3D1C4F5F221A9EDD0096AE43 /* KTThumbsView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KTThumbsView.h; sourceTree = ""; }; + 3D1C4F60221A9EDD0096AE43 /* KTPhotoView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KTPhotoView.h; sourceTree = ""; }; + 3D1C4F61221A9EDD0096AE43 /* KTThumbsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KTThumbsViewController.m; sourceTree = ""; }; + 3D1C4F62221A9EDD0096AE43 /* KTPhotoScrollViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KTPhotoScrollViewController.h; sourceTree = ""; }; + 3D1C4F63221A9EDD0096AE43 /* Utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Utils.h; sourceTree = ""; }; + 3D1C4F64221A9EDD0096AE43 /* CustomBorderButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CustomBorderButton.h; sourceTree = ""; }; + 3D1C4F65221A9EDD0096AE43 /* Contact.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Contact.m; sourceTree = ""; }; + 3D1C4F66221A9EDD0096AE43 /* LoginResult.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LoginResult.m; sourceTree = ""; }; + 3D1C4F67221A9EDD0096AE43 /* AccountResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccountResult.h; sourceTree = ""; }; + 3D1C4F68221A9EDD0096AE43 /* RegisterResult.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RegisterResult.m; sourceTree = ""; }; + 3D1C4F69221A9EDD0096AE43 /* P2PClient.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = P2PClient.m; sourceTree = ""; }; + 3D1C4F6A221A9EDD0096AE43 /* NetManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NetManager.m; sourceTree = ""; }; + 3D1C4F6B221A9EDD0096AE43 /* ContactDAO.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ContactDAO.m; sourceTree = ""; }; + 3D1C4F6C221A9EDD0096AE43 /* Alarm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Alarm.h; sourceTree = ""; }; + 3D1C4F6D221A9EDD0096AE43 /* LocalDevice.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LocalDevice.m; sourceTree = ""; }; + 3D1C4F6E221A9EDD0096AE43 /* TabView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TabView.m; sourceTree = ""; }; + 3D1C4F6F221A9EDD0096AE43 /* UDManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UDManager.m; sourceTree = ""; }; + 3D1C4F70221A9EDD0096AE43 /* GetAlarmRecordResult.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GetAlarmRecordResult.m; sourceTree = ""; }; + 3D1C4F71221A9EDD0096AE43 /* ConnectFailurePromptView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConnectFailurePromptView.h; sourceTree = ""; }; + 3D1C4F72221A9EDD0096AE43 /* CustomTopBar.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CustomTopBar.m; sourceTree = ""; }; + 3D1C4F73221A9EDD0096AE43 /* ModifyLoginPasswordResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ModifyLoginPasswordResult.h; sourceTree = ""; }; + 3D1C4F74221A9EDD0096AE43 /* GetContactMessageResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GetContactMessageResult.h; sourceTree = ""; }; + 3D1C4F75221A9EDD0096AE43 /* Toast+UIView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "Toast+UIView.m"; sourceTree = ""; }; + 3D1C4F76221A9EDD0096AE43 /* YProgressView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YProgressView.h; sourceTree = ""; }; + 3D1C4F77221A9EDD0096AE43 /* TouchButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TouchButton.h; sourceTree = ""; }; + 3D1C4F79221A9EDD0096AE43 /* UIViewExt.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIViewExt.m; sourceTree = ""; }; + 3D1C4F7A221A9EDD0096AE43 /* UIViewExt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIViewExt.h; sourceTree = ""; }; + 3D1C4F7B221A9EDD0096AE43 /* WaitingPageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WaitingPageView.h; sourceTree = ""; }; + 3D1C4F7C221A9EDD0096AE43 /* ProgressImageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ProgressImageView.m; sourceTree = ""; }; + 3D1C4F7E221A9EDD0096AE43 /* CyclePickerView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CyclePickerView.m; sourceTree = ""; }; + 3D1C4F7F221A9EDD0096AE43 /* MXSCycleScrollView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MXSCycleScrollView.m; sourceTree = ""; }; + 3D1C4F80221A9EDD0096AE43 /* MXSCycleScrollView3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MXSCycleScrollView3.h; sourceTree = ""; }; + 3D1C4F81221A9EDD0096AE43 /* MXSCycleScrollView3.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MXSCycleScrollView3.m; sourceTree = ""; }; + 3D1C4F82221A9EDD0096AE43 /* MXSCycleScrollView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MXSCycleScrollView.h; sourceTree = ""; }; + 3D1C4F83221A9EDD0096AE43 /* CyclePickerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CyclePickerView.h; sourceTree = ""; }; + 3D1C4F84221A9EDD0096AE43 /* CheckAlarmMessageResult.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CheckAlarmMessageResult.m; sourceTree = ""; }; + 3D1C4F85221A9EDD0096AE43 /* CustomView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CustomView.h; sourceTree = ""; }; + 3D1C4F86221A9EDD0096AE43 /* FXBlurView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FXBlurView.h; sourceTree = ""; }; + 3D1C4F89221A9EDD0096AE43 /* YFonc.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = YFonc.a; sourceTree = ""; }; + 3D1C4F8A221A9EDD0096AE43 /* YFonc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YFonc.h; sourceTree = ""; }; + 3D1C4F8C221A9EDD0096AE43 /* YMsgBox.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = YMsgBox.a; sourceTree = ""; }; + 3D1C4F8D221A9EDD0096AE43 /* YMsgBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YMsgBox.h; sourceTree = ""; }; + 3D1C4F8F221A9EDD0096AE43 /* FounderButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FounderButton.h; sourceTree = ""; }; + 3D1C4F90221A9EDD0096AE43 /* YTheNaviBar.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = YTheNaviBar.a; sourceTree = ""; }; + 3D1C4F91221A9EDD0096AE43 /* YTheNaviBar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YTheNaviBar.h; sourceTree = ""; }; + 3D1C4F93221A9EDD0096AE43 /* YSlider.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = YSlider.a; sourceTree = ""; }; + 3D1C4F94221A9EDD0096AE43 /* YSlider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YSlider.h; sourceTree = ""; }; + 3D1C4F96221A9EDD0096AE43 /* YTargetAndAction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YTargetAndAction.h; sourceTree = ""; }; + 3D1C4F97221A9EDD0096AE43 /* YTargetAndAction.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = YTargetAndAction.a; sourceTree = ""; }; + 3D1C4F98221A9EDD0096AE43 /* CheckNewMessageResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CheckNewMessageResult.h; sourceTree = ""; }; + 3D1C4F99221A9EDD0096AE43 /* NetManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetManager.h; sourceTree = ""; }; + 3D1C4F9A221A9EDD0096AE43 /* RegisterResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RegisterResult.h; sourceTree = ""; }; + 3D1C4F9B221A9EDD0096AE43 /* P2PClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = P2PClient.h; sourceTree = ""; }; + 3D1C4F9C221A9EDD0096AE43 /* LoginResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LoginResult.h; sourceTree = ""; }; + 3D1C4F9D221A9EDD0096AE43 /* Constants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Constants.h; sourceTree = ""; }; + 3D1C4F9E221A9EDD0096AE43 /* AccountResult.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AccountResult.m; sourceTree = ""; }; + 3D1C4F9F221A9EDD0096AE43 /* Contact.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Contact.h; sourceTree = ""; }; + 3D1C4FA0221A9EDD0096AE43 /* Utils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Utils.m; sourceTree = ""; }; + 3D1C4FA1221A9EDD0096AE43 /* CustomBorderButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CustomBorderButton.m; sourceTree = ""; }; + 3D1C4FA3221A9EDD0096AE43 /* OBGradientView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OBGradientView.m; sourceTree = ""; }; + 3D1C4FA4221A9EDD0096AE43 /* OBGradientView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OBGradientView.h; sourceTree = ""; }; + 3D1C4FA5221A9EDD0096AE43 /* UDManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UDManager.h; sourceTree = ""; }; + 3D1C4FA6221A9EDD0096AE43 /* TabView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TabView.h; sourceTree = ""; }; + 3D1C4FA7221A9EDD0096AE43 /* LocalDevice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LocalDevice.h; sourceTree = ""; }; + 3D1C4FA8221A9EDD0096AE43 /* Alarm.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Alarm.m; sourceTree = ""; }; + 3D1C4FA9221A9EDD0096AE43 /* ContactDAO.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ContactDAO.h; sourceTree = ""; }; + 3D1C4FAA221A9EDD0096AE43 /* GetContactMessageResult.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GetContactMessageResult.m; sourceTree = ""; }; + 3D1C4FAB221A9EDD0096AE43 /* ModifyLoginPasswordResult.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ModifyLoginPasswordResult.m; sourceTree = ""; }; + 3D1C4FAD221A9EDD0096AE43 /* MPNotificationView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPNotificationView.h; sourceTree = ""; }; + 3D1C4FAE221A9EDD0096AE43 /* MPNotificationView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPNotificationView.m; sourceTree = ""; }; + 3D1C4FAF221A9EDD0096AE43 /* CustomTopBar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CustomTopBar.h; sourceTree = ""; }; + 3D1C4FB0221A9EDD0096AE43 /* ConnectFailurePromptView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ConnectFailurePromptView.m; sourceTree = ""; }; + 3D1C4FB1221A9EDD0096AE43 /* GetAlarmRecordResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GetAlarmRecordResult.h; sourceTree = ""; }; + 3D1C4FB3221A9EDD0096AE43 /* SVPullToRefresh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVPullToRefresh.h; sourceTree = ""; }; + 3D1C4FB4221A9EDD0096AE43 /* UIScrollView+SVInfiniteScrolling.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIScrollView+SVInfiniteScrolling.m"; sourceTree = ""; }; + 3D1C4FB5221A9EDD0096AE43 /* UIScrollView+SVInfiniteScrolling.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIScrollView+SVInfiniteScrolling.h"; sourceTree = ""; }; + 3D1C4FB6221A9EDD0096AE43 /* SVPullToRefresh.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SVPullToRefresh.m; sourceTree = ""; }; + 3D1C4FB7221A9EDD0096AE43 /* SVPullToRefresh.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = SVPullToRefresh.bundle; sourceTree = ""; }; + 3D1C4FB8221A9EDD0096AE43 /* CheckNewMessageResult.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CheckNewMessageResult.m; sourceTree = ""; }; + 3D1C4FB9221A9EDD0096AE43 /* CustomView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CustomView.m; sourceTree = ""; }; + 3D1C4FBA221A9EDD0096AE43 /* FXBlurView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FXBlurView.m; sourceTree = ""; }; + 3D1C4FBB221A9EDD0096AE43 /* CheckAlarmMessageResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CheckAlarmMessageResult.h; sourceTree = ""; }; + 3D1C4FBD221A9EDD0096AE43 /* RecommendInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RecommendInfo.m; sourceTree = ""; }; + 3D1C4FBE221A9EDD0096AE43 /* YAudioStreamPlayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YAudioStreamPlayer.h; sourceTree = ""; }; + 3D1C4FBF221A9EDD0096AE43 /* PAIOUnit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PAIOUnit.h; sourceTree = ""; }; + 3D1C4FC0221A9EDD0096AE43 /* RecommendInfoDAO.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RecommendInfoDAO.h; sourceTree = ""; }; + 3D1C4FC1221A9EDD0096AE43 /* ShapeRenderNotifyMsg.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ShapeRenderNotifyMsg.mm; sourceTree = ""; }; + 3D1C4FC2221A9EDD0096AE43 /* MessageDAO.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MessageDAO.m; sourceTree = ""; }; + 3D1C4FC3221A9EDD0096AE43 /* ShapeRenderNotifyMsg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ShapeRenderNotifyMsg.h; sourceTree = ""; }; + 3D1C4FC4221A9EDD0096AE43 /* FListManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FListManager.h; sourceTree = ""; }; + 3D1C4FC5221A9EDD0096AE43 /* UDPManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UDPManager.h; sourceTree = ""; }; + 3D1C4FC6221A9EDD0096AE43 /* OpenGLView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OpenGLView.h; sourceTree = ""; }; + 3D1C4FC7221A9EDD0096AE43 /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = ""; }; + 3D1C4FC8221A9EDD0096AE43 /* ShakeManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ShakeManager.h; sourceTree = ""; }; + 3D1C4FC9221A9EDD0096AE43 /* ParamDao.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ParamDao.h; sourceTree = ""; }; + 3D1C4FCA221A9EDD0096AE43 /* CameraManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CameraManager.m; sourceTree = ""; }; + 3D1C4FCB221A9EDD0096AE43 /* Message.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Message.h; sourceTree = ""; }; + 3D1C4FCC221A9EDD0096AE43 /* AlarmDAO.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AlarmDAO.h; sourceTree = ""; }; + 3D1C4FCD221A9EDD0096AE43 /* des2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = des2.c; sourceTree = ""; }; + 3D1C4FCE221A9EDD0096AE43 /* FListManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FListManager.m; sourceTree = ""; }; + 3D1C4FCF221A9EDD0096AE43 /* MessageDAO.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MessageDAO.h; sourceTree = ""; }; + 3D1C4FD0221A9EDD0096AE43 /* RecommendInfoDAO.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RecommendInfoDAO.m; sourceTree = ""; }; + 3D1C4FD1221A9EDD0096AE43 /* PAIOUnit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PAIOUnit.m; sourceTree = ""; }; + 3D1C4FD2221A9EDD0096AE43 /* YAudioStreamPlayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YAudioStreamPlayer.m; sourceTree = ""; }; + 3D1C4FD3221A9EDD0096AE43 /* RecommendInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RecommendInfo.h; sourceTree = ""; }; + 3D1C4FD4221A9EDD0096AE43 /* ShakeManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ShakeManager.m; sourceTree = ""; }; + 3D1C4FD5221A9EDD0096AE43 /* mesg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mesg.h; sourceTree = ""; }; + 3D1C4FD6221A9EDD0096AE43 /* OpenGLView.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = OpenGLView.mm; sourceTree = ""; }; + 3D1C4FD7221A9EDD0096AE43 /* UDPManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UDPManager.m; sourceTree = ""; }; + 3D1C4FD8221A9EDD0096AE43 /* CameraManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CameraManager.h; sourceTree = ""; }; + 3D1C4FD9221A9EDD0096AE43 /* ParamDao.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ParamDao.m; sourceTree = ""; }; + 3D1C4FDA221A9EDD0096AE43 /* AlarmDAO.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AlarmDAO.m; sourceTree = ""; }; + 3D1C4FDB221A9EDD0096AE43 /* des2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = des2.h; sourceTree = ""; }; + 3D1C4FDC221A9EDD0096AE43 /* Message.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Message.m; sourceTree = ""; }; + 3D1C4FDD221A9EDD0096AE43 /* WaitingPageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WaitingPageView.m; sourceTree = ""; }; + 3D1C4FDE221A9EDD0096AE43 /* ProgressImageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProgressImageView.h; sourceTree = ""; }; + 3D1C4FDF221A9EDD0096AE43 /* TouchButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TouchButton.m; sourceTree = ""; }; + 3D1C4FE0221A9EDD0096AE43 /* YProgressView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YProgressView.m; sourceTree = ""; }; + 3D1C4FE1221A9EDD0096AE43 /* Toast+UIView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Toast+UIView.h"; sourceTree = ""; }; + 3D1C4FE3221A9EDD0096AE43 /* YooseeCenterViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YooseeCenterViewCell.h; sourceTree = ""; }; + 3D1C4FE4221A9EDD0096AE43 /* IfishCameraModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IfishCameraModel.h; sourceTree = ""; }; + 3D1C4FE5221A9EDD0096AE43 /* IfishP2PMonitorController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IfishP2PMonitorController.h; sourceTree = ""; }; + 3D1C4FE6221A9EDD0096AE43 /* YooseeCenterViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = YooseeCenterViewCell.xib; sourceTree = ""; }; + 3D1C4FE7221A9EDD0096AE43 /* YooseeNextConnectViewController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = YooseeNextConnectViewController.mm; sourceTree = ""; }; + 3D1C4FE8221A9EDD0096AE43 /* YooseConnectFirstViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YooseConnectFirstViewController.h; sourceTree = ""; }; + 3D1C4FE9221A9EDD0096AE43 /* YooseeCenterViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YooseeCenterViewController.h; sourceTree = ""; }; + 3D1C4FEB221A9EDD0096AE43 /* CameraNoParyBackVideoView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CameraNoParyBackVideoView.m; sourceTree = ""; }; + 3D1C4FEC221A9EDD0096AE43 /* IfishP2PPlayBackListViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IfishP2PPlayBackListViewController.m; sourceTree = ""; }; + 3D1C4FED221A9EDD0096AE43 /* P2PPlayingbackVC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = P2PPlayingbackVC.h; sourceTree = ""; }; + 3D1C4FEE221A9EDD0096AE43 /* P2PPlaybackController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = P2PPlaybackController.h; sourceTree = ""; }; + 3D1C4FEF221A9EDD0096AE43 /* PlayBaseViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PlayBaseViewController.h; sourceTree = ""; }; + 3D1C4FF0221A9EDD0096AE43 /* IfishPlaybackViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IfishPlaybackViewCell.h; sourceTree = ""; }; + 3D1C4FF1221A9EDD0096AE43 /* CameraNoParyBackVideoView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CameraNoParyBackVideoView.h; sourceTree = ""; }; + 3D1C4FF2221A9EDD0096AE43 /* IfishPlaybackViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = IfishPlaybackViewCell.xib; sourceTree = ""; }; + 3D1C4FF3221A9EDD0096AE43 /* P2PPlayingbackVC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = P2PPlayingbackVC.m; sourceTree = ""; }; + 3D1C4FF4221A9EDD0096AE43 /* IfishP2PPlayBackListViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IfishP2PPlayBackListViewController.h; sourceTree = ""; }; + 3D1C4FF5221A9EDD0096AE43 /* PlayBaseViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PlayBaseViewController.m; sourceTree = ""; }; + 3D1C4FF6221A9EDD0096AE43 /* P2PPlaybackController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = P2PPlaybackController.m; sourceTree = ""; }; + 3D1C4FF7221A9EDD0096AE43 /* IfishPlaybackViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IfishPlaybackViewCell.m; sourceTree = ""; }; + 3D1C4FF8221A9EDD0096AE43 /* IfishP2PMonitorController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IfishP2PMonitorController.m; sourceTree = ""; }; + 3D1C4FFA221A9EDD0096AE43 /* KTThumbView+SDWebImage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "KTThumbView+SDWebImage.m"; sourceTree = ""; }; + 3D1C4FFB221A9EDD0096AE43 /* ShotScreenImgViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ShotScreenImgViewController.h; sourceTree = ""; }; + 3D1C4FFC221A9EDD0096AE43 /* KTPhotoView+SDWebImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "KTPhotoView+SDWebImage.h"; sourceTree = ""; }; + 3D1C4FFD221A9EDD0096AE43 /* ShootImgDataSource.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ShootImgDataSource.m; sourceTree = ""; }; + 3D1C4FFE221A9EDD0096AE43 /* KTThumbView+SDWebImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "KTThumbView+SDWebImage.h"; sourceTree = ""; }; + 3D1C4FFF221A9EDD0096AE43 /* KTPhotoView+SDWebImage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "KTPhotoView+SDWebImage.m"; sourceTree = ""; }; + 3D1C5000221A9EDD0096AE43 /* ShotScreenImgViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ShotScreenImgViewController.m; sourceTree = ""; }; + 3D1C5001221A9EDD0096AE43 /* ShootImgDataSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ShootImgDataSource.h; sourceTree = ""; }; + 3D1C5002221A9EDD0096AE43 /* IfishCameraModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IfishCameraModel.m; sourceTree = ""; }; + 3D1C5004221A9EDD0096AE43 /* IfishCameraRecordfirstCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IfishCameraRecordfirstCell.m; sourceTree = ""; }; + 3D1C5005221A9EDD0096AE43 /* CameraBottomCollectionViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CameraBottomCollectionViewCell.xib; sourceTree = ""; }; + 3D1C5006221A9EDD0096AE43 /* IfishRecVideoViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = IfishRecVideoViewCell.xib; sourceTree = ""; }; + 3D1C5007221A9EDD0096AE43 /* CameraBottomHView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CameraBottomHView.m; sourceTree = ""; }; + 3D1C5008221A9EDD0096AE43 /* CameraBottomCollectionViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CameraBottomCollectionViewCell.h; sourceTree = ""; }; + 3D1C5009221A9EDD0096AE43 /* IfishRecVideoViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IfishRecVideoViewCell.h; sourceTree = ""; }; + 3D1C500A221A9EDD0096AE43 /* CameraRecordViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CameraRecordViewController.m; sourceTree = ""; }; + 3D1C500B221A9EDD0096AE43 /* IfishCameraRecordThirdCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IfishCameraRecordThirdCell.h; sourceTree = ""; }; + 3D1C500C221A9EDD0096AE43 /* IfishCameraRecordFourCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IfishCameraRecordFourCell.h; sourceTree = ""; }; + 3D1C500D221A9EDD0096AE43 /* IfishCameraRecordfirstCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = IfishCameraRecordfirstCell.xib; sourceTree = ""; }; + 3D1C500E221A9EDD0096AE43 /* IfishCameraRecordSecondCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IfishCameraRecordSecondCell.h; sourceTree = ""; }; + 3D1C500F221A9EDD0096AE43 /* IfishCameraRecordThirdCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = IfishCameraRecordThirdCell.xib; sourceTree = ""; }; + 3D1C5010221A9EDD0096AE43 /* IfishCameraRecordFourCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = IfishCameraRecordFourCell.xib; sourceTree = ""; }; + 3D1C5011221A9EDD0096AE43 /* IfishCameraRecordSecondCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = IfishCameraRecordSecondCell.xib; sourceTree = ""; }; + 3D1C5012221A9EDD0096AE43 /* IfishCameraRecordfirstCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IfishCameraRecordfirstCell.h; sourceTree = ""; }; + 3D1C5013221A9EDD0096AE43 /* IfishRecVideoViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IfishRecVideoViewCell.m; sourceTree = ""; }; + 3D1C5014221A9EDD0096AE43 /* CameraBottomCollectionViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CameraBottomCollectionViewCell.m; sourceTree = ""; }; + 3D1C5015221A9EDD0096AE43 /* CameraBottomHView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CameraBottomHView.h; sourceTree = ""; }; + 3D1C5016221A9EDD0096AE43 /* IfishCameraRecordSecondCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IfishCameraRecordSecondCell.m; sourceTree = ""; }; + 3D1C5017221A9EDD0096AE43 /* IfishCameraRecordFourCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IfishCameraRecordFourCell.m; sourceTree = ""; }; + 3D1C5018221A9EDD0096AE43 /* IfishCameraRecordThirdCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IfishCameraRecordThirdCell.m; sourceTree = ""; }; + 3D1C5019221A9EDD0096AE43 /* CameraRecordViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CameraRecordViewController.h; sourceTree = ""; }; + 3D1C501A221A9EDD0096AE43 /* YooseeCenterViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YooseeCenterViewCell.m; sourceTree = ""; }; + 3D1C501B221A9EDD0096AE43 /* YooseeNextConnectViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YooseeNextConnectViewController.h; sourceTree = ""; }; + 3D1C501C221A9EDD0096AE43 /* YooseConnectFirstViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YooseConnectFirstViewController.m; sourceTree = ""; }; + 3D1C501D221A9EDD0096AE43 /* YooseeCenterViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YooseeCenterViewController.m; sourceTree = ""; }; + 3D1C501F221A9EDD0096AE43 /* ifishdeviceListCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ifishdeviceListCell.h; sourceTree = ""; }; + 3D1C5021221A9EDD0096AE43 /* FishControlFourthCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FishControlFourthCell.m; sourceTree = ""; }; + 3D1C5022221A9EDD0096AE43 /* FishControlSecondCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FishControlSecondCell.h; sourceTree = ""; }; + 3D1C5023221A9EDD0096AE43 /* FishControlFirstCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FishControlFirstCell.h; sourceTree = ""; }; + 3D1C5024221A9EDD0096AE43 /* FishControlThreedViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FishControlThreedViewCell.m; sourceTree = ""; }; + 3D1C5025221A9EDD0096AE43 /* FishControlFourthCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FishControlFourthCell.h; sourceTree = ""; }; + 3D1C5026221A9EDD0096AE43 /* FishControlFirstCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FishControlFirstCell.m; sourceTree = ""; }; + 3D1C5027221A9EDD0096AE43 /* FishControlSecondCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FishControlSecondCell.m; sourceTree = ""; }; + 3D1C5028221A9EDD0096AE43 /* FishControlThreedViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FishControlThreedViewCell.h; sourceTree = ""; }; + 3D1C5029221A9EDD0096AE43 /* BootomViewSoketBackMasgConreol.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BootomViewSoketBackMasgConreol.m; sourceTree = ""; }; + 3D1C502A221A9EDD0096AE43 /* MonitorBootmView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MonitorBootmView.m; sourceTree = ""; }; + 3D1C502B221A9EDD0096AE43 /* FishTankBootmDataHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FishTankBootmDataHelper.m; sourceTree = ""; }; + 3D1C502C221A9EDD0096AE43 /* ifishdeviceListCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ifishdeviceListCell.m; sourceTree = ""; }; + 3D1C502D221A9EDD0096AE43 /* MonitorBootmView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MonitorBootmView.h; sourceTree = ""; }; + 3D1C502E221A9EDD0096AE43 /* BootomViewSoketBackMasgConreol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BootomViewSoketBackMasgConreol.h; sourceTree = ""; }; + 3D1C502F221A9EDD0096AE43 /* FishTankBootmDataHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FishTankBootmDataHelper.h; sourceTree = ""; }; + 3D1C5032221A9EDD0096AE43 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = ""; }; + 3D1C5033221A9EDD0096AE43 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; + 3D1C5034221A9EDD0096AE43 /* IFISHYooseeImg.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = IFISHYooseeImg.bundle; sourceTree = ""; }; + 3D1C5035221A9EDD0096AE43 /* Common-Configuration.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "Common-Configuration.plist"; sourceTree = ""; }; + 3D1C5066215CB6E300A2E5D6 /* IfishHotBarHeader.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = IfishHotBarHeader.xib; sourceTree = ""; }; + 3D1C5068215CB6F600A2E5D6 /* IfishHotBarHeader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IfishHotBarHeader.h; sourceTree = ""; }; + 3D1C5069215CB6F600A2E5D6 /* IfishHotBarHeader.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = IfishHotBarHeader.m; sourceTree = ""; }; + 3D1C514C221AA2A80096AE43 /* libelian.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libelian.a; sourceTree = ""; }; 3D344797212CF71C00CF3941 /* IfishHotBarVc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IfishHotBarVc.h; sourceTree = ""; }; 3D344798212CF71C00CF3941 /* IfishHotBarVc.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = IfishHotBarVc.m; sourceTree = ""; }; 3D344799212CF71C00CF3941 /* IfishHotBarVc.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = IfishHotBarVc.xib; sourceTree = ""; }; @@ -2530,11 +3053,127 @@ 3D34479F212D113D00CF3941 /* IFishHotBarCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = IFishHotBarCell.xib; sourceTree = ""; }; 3D3447A3212D1C3800CF3941 /* IfishHotBarVo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IfishHotBarVo.h; sourceTree = ""; }; 3D3447A4212D1C3800CF3941 /* IfishHotBarVo.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = IfishHotBarVo.m; sourceTree = ""; }; + 3D3512D82159C172009DDB0F /* IfishHotBarModifyNameVc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IfishHotBarModifyNameVc.h; sourceTree = ""; }; + 3D3512D92159C172009DDB0F /* IfishHotBarModifyNameVc.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = IfishHotBarModifyNameVc.m; sourceTree = ""; }; + 3D3512DA2159C172009DDB0F /* IfishHotBarModifyNameVc.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = IfishHotBarModifyNameVc.xib; sourceTree = ""; }; + 3D39D31B21F34945001C50B6 /* libbz2.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libbz2.tbd; path = usr/lib/libbz2.tbd; sourceTree = SDKROOT; }; + 3D4AFF5D21F34E1C0053BAA0 /* libstdc++.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libstdc++.tbd"; path = "usr/lib/libstdc++.tbd"; sourceTree = SDKROOT; }; + 3D4AFF5E21F34E1C0053BAA0 /* libstdc++.6.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libstdc++.6.tbd"; path = "usr/lib/libstdc++.6.tbd"; sourceTree = SDKROOT; }; + 3D4AFF6121F350820053BAA0 /* libstdc++.6.0.9.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libstdc++.6.0.9.tbd"; path = "usr/lib/libstdc++.6.0.9.tbd"; sourceTree = SDKROOT; }; 3D5C436C21339E9D00E15B66 /* IfishHistoryView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IfishHistoryView.h; sourceTree = ""; }; 3D5C436D21339E9D00E15B66 /* IfishHistoryView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = IfishHistoryView.m; sourceTree = ""; }; 3D5C436F21339EAB00E15B66 /* IfishHistoryView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = IfishHistoryView.xib; sourceTree = ""; }; 3D5C437121339F8F00E15B66 /* IfishChatView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IfishChatView.h; sourceTree = ""; }; 3D5C437221339F8F00E15B66 /* IfishChatView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = IfishChatView.m; sourceTree = ""; }; + 3D8F649821571D7C00F04BD3 /* HitbarWifeVc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HitbarWifeVc.h; sourceTree = ""; }; + 3D8F649921571D7C00F04BD3 /* HitbarWifeVc.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HitbarWifeVc.m; sourceTree = ""; }; + 3D8F649D2157522100F04BD3 /* MJPropertyKey.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJPropertyKey.h; sourceTree = ""; }; + 3D8F649E2157522100F04BD3 /* NSObject+MJClass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+MJClass.h"; sourceTree = ""; }; + 3D8F649F2157522100F04BD3 /* NSString+MJExtension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+MJExtension.h"; sourceTree = ""; }; + 3D8F64A02157522100F04BD3 /* MJPropertyType.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJPropertyType.m; sourceTree = ""; }; + 3D8F64A12157522100F04BD3 /* NSObject+MJProperty.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+MJProperty.h"; sourceTree = ""; }; + 3D8F64A22157522100F04BD3 /* MJExtensionConst.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJExtensionConst.h; sourceTree = ""; }; + 3D8F64A32157522100F04BD3 /* NSObject+MJKeyValue.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+MJKeyValue.m"; sourceTree = ""; }; + 3D8F64A42157522100F04BD3 /* MJProperty.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJProperty.m; sourceTree = ""; }; + 3D8F64A52157522100F04BD3 /* MJFoundation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJFoundation.h; sourceTree = ""; }; + 3D8F64A62157522100F04BD3 /* NSObject+MJCoding.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+MJCoding.m"; sourceTree = ""; }; + 3D8F64A72157522100F04BD3 /* MJExtension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJExtension.h; sourceTree = ""; }; + 3D8F64A82157522100F04BD3 /* MJExtensionConst.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJExtensionConst.m; sourceTree = ""; }; + 3D8F64A92157522100F04BD3 /* NSObject+MJProperty.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+MJProperty.m"; sourceTree = ""; }; + 3D8F64AA2157522100F04BD3 /* MJPropertyType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJPropertyType.h; sourceTree = ""; }; + 3D8F64AB2157522100F04BD3 /* NSObject+MJClass.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+MJClass.m"; sourceTree = ""; }; + 3D8F64AC2157522100F04BD3 /* NSString+MJExtension.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+MJExtension.m"; sourceTree = ""; }; + 3D8F64AD2157522100F04BD3 /* MJPropertyKey.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJPropertyKey.m; sourceTree = ""; }; + 3D8F64AE2157522100F04BD3 /* MJProperty.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJProperty.h; sourceTree = ""; }; + 3D8F64AF2157522100F04BD3 /* NSObject+MJKeyValue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+MJKeyValue.h"; sourceTree = ""; }; + 3D8F64B02157522100F04BD3 /* NSObject+MJCoding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+MJCoding.h"; sourceTree = ""; }; + 3D8F64B12157522100F04BD3 /* MJFoundation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJFoundation.m; sourceTree = ""; }; + 3D8F64BC215752AF00F04BD3 /* IfishHeaterVo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IfishHeaterVo.h; sourceTree = ""; }; + 3D8F64BD215752AF00F04BD3 /* IfishHeaterVo.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = IfishHeaterVo.m; sourceTree = ""; }; + 3D8F64BF2157530000F04BD3 /* IfishHistroyVo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IfishHistroyVo.h; sourceTree = ""; }; + 3D8F64C02157530000F04BD3 /* IfishHistroyVo.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = IfishHistroyVo.m; sourceTree = ""; }; + 3D8F64C22157791D00F04BD3 /* IfishBaseVc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IfishBaseVc.h; sourceTree = ""; }; + 3D8F64C32157791D00F04BD3 /* IfishBaseVc.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = IfishBaseVc.m; sourceTree = ""; }; + 3D8F64C52157820700F04BD3 /* IfishHotBarPackegeVo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IfishHotBarPackegeVo.h; sourceTree = ""; }; + 3D8F64C62157820700F04BD3 /* IfishHotBarPackegeVo.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = IfishHotBarPackegeVo.m; sourceTree = ""; }; + 3D8F64C82157842200F04BD3 /* IfishPackageHeaderVo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IfishPackageHeaderVo.h; sourceTree = ""; }; + 3D8F64C92157842200F04BD3 /* IfishPackageHeaderVo.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = IfishPackageHeaderVo.m; sourceTree = ""; }; + 3D8F64CD215797E600F04BD3 /* IQTextView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IQTextView.m; sourceTree = ""; }; + 3D8F64CE215797E600F04BD3 /* IQTextView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IQTextView.h; sourceTree = ""; }; + 3D8F64D0215797E600F04BD3 /* IQUIView+IQKeyboardToolbar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "IQUIView+IQKeyboardToolbar.h"; sourceTree = ""; }; + 3D8F64D1215797E600F04BD3 /* IQToolbar.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IQToolbar.m; sourceTree = ""; }; + 3D8F64D2215797E600F04BD3 /* IQPreviousNextView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IQPreviousNextView.h; sourceTree = ""; }; + 3D8F64D3215797E600F04BD3 /* IQTitleBarButtonItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IQTitleBarButtonItem.m; sourceTree = ""; }; + 3D8F64D4215797E600F04BD3 /* IQBarButtonItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IQBarButtonItem.m; sourceTree = ""; }; + 3D8F64D5215797E600F04BD3 /* IQUIView+IQKeyboardToolbar.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "IQUIView+IQKeyboardToolbar.m"; sourceTree = ""; }; + 3D8F64D6215797E600F04BD3 /* IQPreviousNextView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IQPreviousNextView.m; sourceTree = ""; }; + 3D8F64D7215797E600F04BD3 /* IQToolbar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IQToolbar.h; sourceTree = ""; }; + 3D8F64D8215797E600F04BD3 /* IQBarButtonItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IQBarButtonItem.h; sourceTree = ""; }; + 3D8F64D9215797E600F04BD3 /* IQTitleBarButtonItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IQTitleBarButtonItem.h; sourceTree = ""; }; + 3D8F64DB215797E600F04BD3 /* IQKeyboardManagerConstantsInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IQKeyboardManagerConstantsInternal.h; sourceTree = ""; }; + 3D8F64DC215797E600F04BD3 /* IQKeyboardManagerConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IQKeyboardManagerConstants.h; sourceTree = ""; }; + 3D8F64DE215797E600F04BD3 /* IQKeyboardManager.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = IQKeyboardManager.bundle; sourceTree = ""; }; + 3D8F64DF215797E600F04BD3 /* IQKeyboardReturnKeyHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IQKeyboardReturnKeyHandler.h; sourceTree = ""; }; + 3D8F64E0215797E600F04BD3 /* IQKeyboardManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IQKeyboardManager.h; sourceTree = ""; }; + 3D8F64E1215797E600F04BD3 /* IQKeyboardManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IQKeyboardManager.m; sourceTree = ""; }; + 3D8F64E3215797E600F04BD3 /* IQNSArray+Sort.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "IQNSArray+Sort.m"; sourceTree = ""; }; + 3D8F64E4215797E600F04BD3 /* IQUIViewController+Additions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "IQUIViewController+Additions.h"; sourceTree = ""; }; + 3D8F64E5215797E600F04BD3 /* IQUITextFieldView+Additions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "IQUITextFieldView+Additions.m"; sourceTree = ""; }; + 3D8F64E6215797E600F04BD3 /* IQUIScrollView+Additions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "IQUIScrollView+Additions.m"; sourceTree = ""; }; + 3D8F64E7215797E600F04BD3 /* IQUIView+Hierarchy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "IQUIView+Hierarchy.m"; sourceTree = ""; }; + 3D8F64E8215797E600F04BD3 /* IQNSArray+Sort.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "IQNSArray+Sort.h"; sourceTree = ""; }; + 3D8F64E9215797E600F04BD3 /* IQUIScrollView+Additions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "IQUIScrollView+Additions.h"; sourceTree = ""; }; + 3D8F64EA215797E600F04BD3 /* IQUITextFieldView+Additions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "IQUITextFieldView+Additions.h"; sourceTree = ""; }; + 3D8F64EB215797E600F04BD3 /* IQUIViewController+Additions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "IQUIViewController+Additions.m"; sourceTree = ""; }; + 3D8F64EC215797E600F04BD3 /* IQUIView+Hierarchy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "IQUIView+Hierarchy.h"; sourceTree = ""; }; + 3D8F64ED215797E600F04BD3 /* IQKeyboardReturnKeyHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IQKeyboardReturnKeyHandler.m; sourceTree = ""; }; + 3D8F64FC2158874000F04BD3 /* IfishConfigVo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IfishConfigVo.h; sourceTree = ""; }; + 3D8F64FD2158874000F04BD3 /* IfishConfigVo.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = IfishConfigVo.m; sourceTree = ""; }; + 3DD7AB2221E2F2FB0064856A /* libzbar.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libzbar.a; sourceTree = ""; }; + 3DD7AB2521E2F2FB0064856A /* ZBarCaptureReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZBarCaptureReader.h; sourceTree = ""; }; + 3DD7AB2621E2F2FB0064856A /* ZBarImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZBarImage.h; sourceTree = ""; }; + 3DD7AB2821E2F2FB0064856A /* Processor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Processor.h; sourceTree = ""; }; + 3DD7AB2921E2F2FB0064856A /* Symbol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Symbol.h; sourceTree = ""; }; + 3DD7AB2A21E2F2FB0064856A /* Decoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Decoder.h; sourceTree = ""; }; + 3DD7AB2B21E2F2FB0064856A /* Window.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Window.h; sourceTree = ""; }; + 3DD7AB2C21E2F2FB0064856A /* ImageScanner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageScanner.h; sourceTree = ""; }; + 3DD7AB2D21E2F2FB0064856A /* Scanner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Scanner.h; sourceTree = ""; }; + 3DD7AB2E21E2F2FB0064856A /* Video.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Video.h; sourceTree = ""; }; + 3DD7AB2F21E2F2FB0064856A /* Exception.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Exception.h; sourceTree = ""; }; + 3DD7AB3021E2F2FB0064856A /* Image.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Image.h; sourceTree = ""; }; + 3DD7AB3121E2F2FB0064856A /* ZBarReaderController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZBarReaderController.h; sourceTree = ""; }; + 3DD7AB3221E2F2FB0064856A /* ZBarReaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZBarReaderView.h; sourceTree = ""; }; + 3DD7AB3321E2F2FB0064856A /* ZBarHelpController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZBarHelpController.h; sourceTree = ""; }; + 3DD7AB3421E2F2FB0064856A /* zbar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = zbar.h; sourceTree = ""; }; + 3DD7AB3521E2F2FB0064856A /* ZBarCameraSimulator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZBarCameraSimulator.h; sourceTree = ""; }; + 3DD7AB3621E2F2FB0064856A /* ZBarSymbol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZBarSymbol.h; sourceTree = ""; }; + 3DD7AB3721E2F2FB0064856A /* ZBarImageScanner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZBarImageScanner.h; sourceTree = ""; }; + 3DD7AB3821E2F2FB0064856A /* ZBarSDK.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZBarSDK.h; sourceTree = ""; }; + 3DD7AB3921E2F2FB0064856A /* ZBarReaderViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZBarReaderViewController.h; sourceTree = ""; }; + 3DD7AB3B21E2F2FB0064856A /* mask.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mask.h; sourceTree = ""; }; + 3DD7AB3C21E2F2FB0064856A /* qrinput.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = qrinput.h; sourceTree = ""; }; + 3DD7AB3D21E2F2FB0064856A /* bitstream.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bitstream.c; sourceTree = ""; }; + 3DD7AB3E21E2F2FB0064856A /* qrencode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = qrencode.c; sourceTree = ""; }; + 3DD7AB3F21E2F2FB0064856A /* qrspec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = qrspec.h; sourceTree = ""; }; + 3DD7AB4021E2F2FB0064856A /* split.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = split.c; sourceTree = ""; }; + 3DD7AB4121E2F2FB0064856A /* rscode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rscode.h; sourceTree = ""; }; + 3DD7AB4221E2F2FB0064856A /* QRCodeGenerator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QRCodeGenerator.m; sourceTree = ""; }; + 3DD7AB4321E2F2FB0064856A /* qrinput.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = qrinput.c; sourceTree = ""; }; + 3DD7AB4421E2F2FB0064856A /* bitstream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bitstream.h; sourceTree = ""; }; + 3DD7AB4521E2F2FB0064856A /* mask.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = mask.c; sourceTree = ""; }; + 3DD7AB4621E2F2FB0064856A /* qrspec.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = qrspec.c; sourceTree = ""; }; + 3DD7AB4721E2F2FB0064856A /* qrencode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = qrencode.h; sourceTree = ""; }; + 3DD7AB4821E2F2FB0064856A /* QRCodeGenerator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QRCodeGenerator.h; sourceTree = ""; }; + 3DD7AB4921E2F2FB0064856A /* split.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = split.h; sourceTree = ""; }; + 3DD7AB4A21E2F2FB0064856A /* rscode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rscode.c; sourceTree = ""; }; + 3DD7AB9021E474930064856A /* AsyncUdpSocket.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AsyncUdpSocket.m; sourceTree = ""; }; + 3DD7AB9121E474930064856A /* AsyncSocket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AsyncSocket.h; sourceTree = ""; }; + 3DD7AB9221E474930064856A /* AsyncSocket.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AsyncSocket.m; sourceTree = ""; }; + 3DD7AB9321E474930064856A /* AsyncUdpSocket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AsyncUdpSocket.h; sourceTree = ""; }; + 3DD7AB9521E474930064856A /* GCDAsyncUdpSocket.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GCDAsyncUdpSocket.m; sourceTree = ""; }; + 3DD7AB9621E474930064856A /* GCDAsyncSocket.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GCDAsyncSocket.m; sourceTree = ""; }; + 3DD7AB9721E474930064856A /* GCDAsyncUdpSocket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GCDAsyncUdpSocket.h; sourceTree = ""; }; + 3DD7AB9821E474930064856A /* GCDAsyncSocket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GCDAsyncSocket.h; sourceTree = ""; }; 880707421DDD3EF50076F65A /* P2PShareView1Cell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = P2PShareView1Cell.h; sourceTree = ""; }; 880707431DDD3EF50076F65A /* P2PShareView1Cell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = P2PShareView1Cell.m; sourceTree = ""; }; 880707441DDD3EF50076F65A /* P2PShareView1Cell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = P2PShareView1Cell.xib; sourceTree = ""; }; @@ -2635,32 +3274,10 @@ 8814784E1E7262F500BFB79C /* IifishGetGoldTaskHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IifishGetGoldTaskHelper.m; sourceTree = ""; }; 881478501E72732600BFB79C /* IifshGetExpHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IifshGetExpHelper.h; sourceTree = ""; }; 881478511E72732600BFB79C /* IifshGetExpHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IifshGetExpHelper.m; sourceTree = ""; }; - 8815D1171DF6908800BEA2DA /* IfishRecVideoViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IfishRecVideoViewCell.h; sourceTree = ""; }; - 8815D1181DF6908800BEA2DA /* IfishRecVideoViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IfishRecVideoViewCell.m; sourceTree = ""; }; - 8815D1191DF6908800BEA2DA /* IfishRecVideoViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = IfishRecVideoViewCell.xib; sourceTree = ""; }; 8815D11C1DF7A0E300BEA2DA /* NSTimer+Convenience.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSTimer+Convenience.h"; sourceTree = ""; }; 8815D11D1DF7A0E300BEA2DA /* NSTimer+Convenience.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSTimer+Convenience.m"; sourceTree = ""; }; 8815D11F1DF8083700BEA2DA /* IfishHelperUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IfishHelperUtils.h; sourceTree = ""; }; 8815D1201DF8083700BEA2DA /* IfishHelperUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IfishHelperUtils.m; sourceTree = ""; }; - 8815D1221DFA8A6500BEA2DA /* CameraRecordViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CameraRecordViewController.h; sourceTree = ""; }; - 8815D1231DFA8A6500BEA2DA /* CameraRecordViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CameraRecordViewController.m; sourceTree = ""; }; - 8815D1251DFAACED00BEA2DA /* IfishCameraRecordfirstCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IfishCameraRecordfirstCell.h; sourceTree = ""; }; - 8815D1261DFAACED00BEA2DA /* IfishCameraRecordfirstCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IfishCameraRecordfirstCell.m; sourceTree = ""; }; - 8815D1271DFAACED00BEA2DA /* IfishCameraRecordfirstCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = IfishCameraRecordfirstCell.xib; sourceTree = ""; }; - 8815D12A1DFAADA800BEA2DA /* IfishCameraRecordSecondCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IfishCameraRecordSecondCell.h; sourceTree = ""; }; - 8815D12B1DFAADA800BEA2DA /* IfishCameraRecordSecondCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IfishCameraRecordSecondCell.m; sourceTree = ""; }; - 8815D12C1DFAADA800BEA2DA /* IfishCameraRecordSecondCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = IfishCameraRecordSecondCell.xib; sourceTree = ""; }; - 8815D12F1DFAADC300BEA2DA /* IfishCameraRecordThirdCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IfishCameraRecordThirdCell.h; sourceTree = ""; }; - 8815D1301DFAADC300BEA2DA /* IfishCameraRecordThirdCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IfishCameraRecordThirdCell.m; sourceTree = ""; }; - 8815D1311DFAADC300BEA2DA /* IfishCameraRecordThirdCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = IfishCameraRecordThirdCell.xib; sourceTree = ""; }; - 8815D13A1DFF892A00BEA2DA /* CameraNoParyBackVideoView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CameraNoParyBackVideoView.h; sourceTree = ""; }; - 8815D13B1DFF892A00BEA2DA /* CameraNoParyBackVideoView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CameraNoParyBackVideoView.m; sourceTree = ""; }; - 8815D13D1DFFC1EA00BEA2DA /* IfishPlaybackViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IfishPlaybackViewCell.h; sourceTree = ""; }; - 8815D13E1DFFC1EA00BEA2DA /* IfishPlaybackViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IfishPlaybackViewCell.m; sourceTree = ""; }; - 8815D13F1DFFC1EA00BEA2DA /* IfishPlaybackViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = IfishPlaybackViewCell.xib; sourceTree = ""; }; - 8815D1481E0144AA00BEA2DA /* IfishCameraRecordFourCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IfishCameraRecordFourCell.h; sourceTree = ""; }; - 8815D1491E0144AA00BEA2DA /* IfishCameraRecordFourCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IfishCameraRecordFourCell.m; sourceTree = ""; }; - 8815D14A1E0144AA00BEA2DA /* IfishCameraRecordFourCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = IfishCameraRecordFourCell.xib; sourceTree = ""; }; 8815D1C91E02662500BEA2DA /* FullPlay_Back.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = FullPlay_Back.png; sourceTree = ""; }; 8815D1CA1E02662500BEA2DA /* FullPlay_Back_down.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = FullPlay_Back_down.png; sourceTree = ""; }; 8815D1CB1E02662500BEA2DA /* FullPlay_Gradient_black_alpha_0.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = FullPlay_Gradient_black_alpha_0.png; sourceTree = ""; }; @@ -2680,17 +3297,6 @@ 8815D1D91E02662500BEA2DA /* FullPlay_Slider_down.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = FullPlay_Slider_down.png; sourceTree = ""; }; 8815D1DA1E02662500BEA2DA /* FullPlay_Speed.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = FullPlay_Speed.png; sourceTree = ""; }; 8815D1DB1E02662500BEA2DA /* FullPlay_Speed_down.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = FullPlay_Speed_down.png; sourceTree = ""; }; - 8815D1F31E026B8B00BEA2DA /* UIViewExt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIViewExt.h; sourceTree = ""; }; - 8815D1F41E026B8B00BEA2DA /* UIViewExt.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIViewExt.m; sourceTree = ""; }; - 8815D2031E037AFD00BEA2DA /* P2PPlayingbackVC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = P2PPlayingbackVC.h; sourceTree = ""; }; - 8815D2041E037AFD00BEA2DA /* P2PPlayingbackVC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = P2PPlayingbackVC.m; sourceTree = ""; }; - 8815D2061E037B7700BEA2DA /* PlayBaseViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PlayBaseViewController.h; sourceTree = ""; }; - 8815D2071E037B7700BEA2DA /* PlayBaseViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PlayBaseViewController.m; sourceTree = ""; }; - 8815D2091E03B64A00BEA2DA /* ShapeRenderNotifyMsg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ShapeRenderNotifyMsg.h; sourceTree = ""; }; - 8815D20A1E03B64A00BEA2DA /* ShapeRenderNotifyMsg.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ShapeRenderNotifyMsg.mm; sourceTree = ""; }; - 8815D20C1E03CC6300BEA2DA /* OpenGLView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OpenGLView.h; sourceTree = ""; }; - 8815D20D1E03CC6300BEA2DA /* OpenGLView.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = OpenGLView.mm; sourceTree = ""; }; - 8816701B1EA5DE2A00BEBF23 /* README.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.txt; sourceTree = ""; }; 8816701E1EA5DE2A00BEBF23 /* UMComCommentDataController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UMComCommentDataController.h; sourceTree = ""; }; 8816701F1EA5DE2A00BEBF23 /* UMComCommentDataController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UMComCommentDataController.m; sourceTree = ""; }; 881670201EA5DE2A00BEBF23 /* UMComCommentListDataController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UMComCommentListDataController.h; sourceTree = ""; }; @@ -2751,7 +3357,6 @@ 881670651EA5DE2A00BEBF23 /* UMComShareDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UMComShareDelegate.h; sourceTree = ""; }; 881670661EA5DE2A00BEBF23 /* UMComShareManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UMComShareManager.h; sourceTree = ""; }; 881670671EA5DE2A00BEBF23 /* UMComShareManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UMComShareManager.m; sourceTree = ""; }; - 881670691EA5DE2A00BEBF23 /* README.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.txt; sourceTree = ""; }; 8816706A1EA5DE2A00BEBF23 /* UMComDataStorage.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = UMComDataStorage.framework; sourceTree = ""; }; 8816706B1EA5DE2A00BEBF23 /* UMComFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = UMComFoundation.framework; sourceTree = ""; }; 8816706C1EA5DE2A00BEBF23 /* UMCommunitySDK.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = UMCommunitySDK.framework; sourceTree = ""; }; @@ -3302,7 +3907,6 @@ 882955181DBDA3A100E9DDD7 /* Co2_on.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Co2_on.png; sourceTree = ""; }; 882955191DBDA3A100E9DDD7 /* DanBai_off.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = DanBai_off.png; sourceTree = ""; }; 8829551A1DBDA3A100E9DDD7 /* DanBai_on.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = DanBai_on.png; sourceTree = ""; }; - 8829551B1DBDA3A100E9DDD7 /* graybtn_big.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = graybtn_big.png; sourceTree = ""; }; 8829551C1DBDA3A100E9DDD7 /* guidengCell_back.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = guidengCell_back.png; sourceTree = ""; }; 8829551D1DBDA3A100E9DDD7 /* JiaReBang_off.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = JiaReBang_off.png; sourceTree = ""; }; 8829551E1DBDA3A100E9DDD7 /* JiaReBang_on.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = JiaReBang_on.png; sourceTree = ""; }; @@ -3403,7 +4007,6 @@ 8829557F1DBDA3A100E9DDD7 /* swimmingfish0074.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = swimmingfish0074.png; sourceTree = ""; }; 882955801DBDA3A100E9DDD7 /* swimmingfish0075.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = swimmingfish0075.png; sourceTree = ""; }; 882955811DBDA3A100E9DDD7 /* swimmingfish0076.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = swimmingfish0076.png; sourceTree = ""; }; - 882955831DBDA3A100E9DDD7 /* greenbtn_big.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = greenbtn_big.png; sourceTree = ""; }; 882955841DBDA3A100E9DDD7 /* icon1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = icon1.png; sourceTree = ""; }; 882955851DBDA3A100E9DDD7 /* icon2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = icon2.png; sourceTree = ""; }; 882955861DBDA3A100E9DDD7 /* icon3.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = icon3.png; sourceTree = ""; }; @@ -3534,9 +4137,6 @@ 882A760E1EBB2A6A00AD1D15 /* ShopCerPart1TableCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ShopCerPart1TableCell.h; sourceTree = ""; }; 882A760F1EBB2A6A00AD1D15 /* ShopCerPart1TableCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ShopCerPart1TableCell.m; sourceTree = ""; }; 882A76101EBB2A6A00AD1D15 /* ShopCerPart1TableCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ShopCerPart1TableCell.xib; sourceTree = ""; }; - 882BF4DD1EA72578006D0D79 /* FounderButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FounderButton.h; sourceTree = ""; }; - 882BF4DE1EA72578006D0D79 /* YTheNaviBar.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = YTheNaviBar.a; sourceTree = ""; }; - 882BF4DF1EA72578006D0D79 /* YTheNaviBar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YTheNaviBar.h; sourceTree = ""; }; 882C85A31EB03759001CC414 /* GoldConvertDetailViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GoldConvertDetailViewCell.h; sourceTree = ""; }; 882C85A41EB03759001CC414 /* GoldConvertDetailViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GoldConvertDetailViewCell.m; sourceTree = ""; }; 882C85A51EB03759001CC414 /* GoldConvertDetailViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = GoldConvertDetailViewCell.xib; sourceTree = ""; }; @@ -3910,138 +4510,6 @@ 883E77191D48A5E50030E075 /* PushmassageModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PushmassageModel.m; sourceTree = ""; }; 883E771B1D48A5E50030E075 /* IfishDeviceViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IfishDeviceViewController.h; sourceTree = ""; }; 883E771C1D48A5E50030E075 /* IfishDeviceViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IfishDeviceViewController.m; sourceTree = ""; }; - 883E771F1D48A5E50030E075 /* IfishCameraModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IfishCameraModel.h; sourceTree = ""; }; - 883E77201D48A5E50030E075 /* IfishCameraModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IfishCameraModel.m; sourceTree = ""; }; - 883E77211D48A5E50030E075 /* IfishP2PMonitorController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IfishP2PMonitorController.h; sourceTree = ""; }; - 883E77221D48A5E50030E075 /* IfishP2PMonitorController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IfishP2PMonitorController.m; sourceTree = ""; }; - 883E77261D48A5E50030E075 /* KTPhotoView+SDWebImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "KTPhotoView+SDWebImage.h"; sourceTree = ""; }; - 883E77271D48A5E50030E075 /* KTPhotoView+SDWebImage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "KTPhotoView+SDWebImage.m"; sourceTree = ""; }; - 883E77281D48A5E50030E075 /* KTThumbView+SDWebImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "KTThumbView+SDWebImage.h"; sourceTree = ""; }; - 883E77291D48A5E50030E075 /* KTThumbView+SDWebImage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "KTThumbView+SDWebImage.m"; sourceTree = ""; }; - 883E772A1D48A5E50030E075 /* ShootImgDataSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ShootImgDataSource.h; sourceTree = ""; }; - 883E772B1D48A5E50030E075 /* ShootImgDataSource.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ShootImgDataSource.m; sourceTree = ""; }; - 883E772C1D48A5E50030E075 /* ShotScreenImgViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ShotScreenImgViewController.h; sourceTree = ""; }; - 883E772D1D48A5E50030E075 /* ShotScreenImgViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ShotScreenImgViewController.m; sourceTree = ""; }; - 883E772E1D48A5E50030E075 /* YooseConnectFirstViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YooseConnectFirstViewController.h; sourceTree = ""; }; - 883E772F1D48A5E50030E075 /* YooseConnectFirstViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YooseConnectFirstViewController.m; sourceTree = ""; }; - 883E77301D48A5E50030E075 /* YooseeCenterViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YooseeCenterViewCell.h; sourceTree = ""; }; - 883E77311D48A5E50030E075 /* YooseeCenterViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YooseeCenterViewCell.m; sourceTree = ""; }; - 883E77321D48A5E50030E075 /* YooseeCenterViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = YooseeCenterViewCell.xib; sourceTree = ""; }; - 883E77331D48A5E50030E075 /* YooseeCenterViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YooseeCenterViewController.h; sourceTree = ""; }; - 883E77341D48A5E50030E075 /* YooseeCenterViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YooseeCenterViewController.m; sourceTree = ""; }; - 883E77351D48A5E50030E075 /* YooseeNextConnectViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YooseeNextConnectViewController.h; sourceTree = ""; }; - 883E77361D48A5E50030E075 /* YooseeNextConnectViewController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = YooseeNextConnectViewController.mm; sourceTree = ""; }; - 883E77381D48A5E50030E075 /* BootomViewSoketBackMasgConreol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BootomViewSoketBackMasgConreol.h; sourceTree = ""; }; - 883E77391D48A5E50030E075 /* BootomViewSoketBackMasgConreol.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BootomViewSoketBackMasgConreol.m; sourceTree = ""; }; - 883E773A1D48A5E50030E075 /* ifishdeviceListCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ifishdeviceListCell.h; sourceTree = ""; }; - 883E773B1D48A5E50030E075 /* ifishdeviceListCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ifishdeviceListCell.m; sourceTree = ""; }; - 883E773C1D48A5E50030E075 /* MonitorBootmView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MonitorBootmView.h; sourceTree = ""; }; - 883E773D1D48A5E50030E075 /* MonitorBootmView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MonitorBootmView.m; sourceTree = ""; }; - 883E773F1D48A5E50030E075 /* FishControlFirstCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FishControlFirstCell.h; sourceTree = ""; }; - 883E77401D48A5E50030E075 /* FishControlFirstCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FishControlFirstCell.m; sourceTree = ""; }; - 883E77411D48A5E50030E075 /* FishControlFourthCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FishControlFourthCell.h; sourceTree = ""; }; - 883E77421D48A5E50030E075 /* FishControlFourthCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FishControlFourthCell.m; sourceTree = ""; }; - 883E77431D48A5E50030E075 /* FishControlSecondCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FishControlSecondCell.h; sourceTree = ""; }; - 883E77441D48A5E50030E075 /* FishControlSecondCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FishControlSecondCell.m; sourceTree = ""; }; - 883E77451D48A5E50030E075 /* FishControlThreedViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FishControlThreedViewCell.h; sourceTree = ""; }; - 883E77461D48A5E50030E075 /* FishControlThreedViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FishControlThreedViewCell.m; sourceTree = ""; }; - 883E77481D48A5E50030E075 /* AccountResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccountResult.h; sourceTree = ""; }; - 883E77491D48A5E50030E075 /* AccountResult.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AccountResult.m; sourceTree = ""; }; - 883E774A1D48A5E50030E075 /* Alarm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Alarm.h; sourceTree = ""; }; - 883E774B1D48A5E50030E075 /* Alarm.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Alarm.m; sourceTree = ""; }; - 883E774C1D48A5E50030E075 /* CheckAlarmMessageResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CheckAlarmMessageResult.h; sourceTree = ""; }; - 883E774D1D48A5E50030E075 /* CheckAlarmMessageResult.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CheckAlarmMessageResult.m; sourceTree = ""; }; - 883E774E1D48A5E50030E075 /* CheckNewMessageResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CheckNewMessageResult.h; sourceTree = ""; }; - 883E774F1D48A5E50030E075 /* CheckNewMessageResult.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CheckNewMessageResult.m; sourceTree = ""; }; - 883E77501D48A5E50030E075 /* ConnectFailurePromptView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConnectFailurePromptView.h; sourceTree = ""; }; - 883E77511D48A5E50030E075 /* ConnectFailurePromptView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ConnectFailurePromptView.m; sourceTree = ""; }; - 883E77531D48A5E50030E075 /* Contact.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Contact.h; sourceTree = ""; }; - 883E77541D48A5E50030E075 /* Contact.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Contact.m; sourceTree = ""; }; - 883E77551D48A5E50030E075 /* ContactDAO.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ContactDAO.h; sourceTree = ""; }; - 883E77561D48A5E50030E075 /* ContactDAO.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ContactDAO.m; sourceTree = ""; }; - 883E77571D48A5E50030E075 /* CustomBorderButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CustomBorderButton.h; sourceTree = ""; }; - 883E77581D48A5E50030E075 /* CustomBorderButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CustomBorderButton.m; sourceTree = ""; }; - 883E77591D48A5E50030E075 /* CustomTopBar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CustomTopBar.h; sourceTree = ""; }; - 883E775A1D48A5E50030E075 /* CustomTopBar.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CustomTopBar.m; sourceTree = ""; }; - 883E775B1D48A5E50030E075 /* CustomView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CustomView.h; sourceTree = ""; }; - 883E775C1D48A5E50030E075 /* CustomView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CustomView.m; sourceTree = ""; }; - 883E775D1D48A5E50030E075 /* GetAlarmRecordResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GetAlarmRecordResult.h; sourceTree = ""; }; - 883E775E1D48A5E50030E075 /* GetAlarmRecordResult.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GetAlarmRecordResult.m; sourceTree = ""; }; - 883E775F1D48A5E50030E075 /* GetContactMessageResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GetContactMessageResult.h; sourceTree = ""; }; - 883E77601D48A5E50030E075 /* GetContactMessageResult.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GetContactMessageResult.m; sourceTree = ""; }; - 883E77621D48A5E50030E075 /* AlarmDAO.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AlarmDAO.h; sourceTree = ""; }; - 883E77631D48A5E50030E075 /* AlarmDAO.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AlarmDAO.m; sourceTree = ""; }; - 883E77641D48A5E50030E075 /* CameraManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CameraManager.h; sourceTree = ""; }; - 883E77651D48A5E50030E075 /* CameraManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CameraManager.m; sourceTree = ""; }; - 883E77661D48A5E50030E075 /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = ""; }; - 883E77671D48A5E50030E075 /* des2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = des2.c; sourceTree = ""; }; - 883E77681D48A5E50030E075 /* des2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = des2.h; sourceTree = ""; }; - 883E77691D48A5E50030E075 /* FListManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FListManager.h; sourceTree = ""; }; - 883E776A1D48A5E50030E075 /* FListManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FListManager.m; sourceTree = ""; }; - 883E776C1D48A5E50030E075 /* Message.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Message.h; sourceTree = ""; }; - 883E776D1D48A5E50030E075 /* Message.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Message.m; sourceTree = ""; }; - 883E776E1D48A5E50030E075 /* MessageDAO.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MessageDAO.h; sourceTree = ""; }; - 883E776F1D48A5E50030E075 /* MessageDAO.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MessageDAO.m; sourceTree = ""; }; - 883E77731D48A5E50030E075 /* PAIOUnit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PAIOUnit.h; sourceTree = ""; }; - 883E77741D48A5E50030E075 /* PAIOUnit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PAIOUnit.m; sourceTree = ""; }; - 883E77751D48A5E50030E075 /* ParamDao.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ParamDao.h; sourceTree = ""; }; - 883E77761D48A5E50030E075 /* ParamDao.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ParamDao.m; sourceTree = ""; }; - 883E77771D48A5E50030E075 /* RecommendInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RecommendInfo.h; sourceTree = ""; }; - 883E77781D48A5E50030E075 /* RecommendInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RecommendInfo.m; sourceTree = ""; }; - 883E77791D48A5E50030E075 /* RecommendInfoDAO.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RecommendInfoDAO.h; sourceTree = ""; }; - 883E777A1D48A5E50030E075 /* RecommendInfoDAO.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RecommendInfoDAO.m; sourceTree = ""; }; - 883E777B1D48A5E50030E075 /* ShakeManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ShakeManager.h; sourceTree = ""; }; - 883E777C1D48A5E50030E075 /* ShakeManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ShakeManager.m; sourceTree = ""; }; - 883E777D1D48A5E50030E075 /* UDPManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UDPManager.h; sourceTree = ""; }; - 883E777E1D48A5E50030E075 /* UDPManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UDPManager.m; sourceTree = ""; }; - 883E777F1D48A5E50030E075 /* YAudioStreamPlayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YAudioStreamPlayer.h; sourceTree = ""; }; - 883E77801D48A5E50030E075 /* YAudioStreamPlayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YAudioStreamPlayer.m; sourceTree = ""; }; - 883E77821D48A5E50030E075 /* KTPhotoBrowser.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = KTPhotoBrowser.bundle; sourceTree = ""; }; - 883E77831D48A5E50030E075 /* KTPhotoBrowserDataSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KTPhotoBrowserDataSource.h; sourceTree = ""; }; - 883E77841D48A5E50030E075 /* KTPhotoBrowserGlobal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KTPhotoBrowserGlobal.h; sourceTree = ""; }; - 883E77851D48A5E50030E075 /* KTPhotoBrowserGlobal.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KTPhotoBrowserGlobal.m; sourceTree = ""; }; - 883E77861D48A5E50030E075 /* KTPhotoScrollViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KTPhotoScrollViewController.h; sourceTree = ""; }; - 883E77871D48A5E50030E075 /* KTPhotoScrollViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KTPhotoScrollViewController.m; sourceTree = ""; }; - 883E77881D48A5E50030E075 /* KTPhotoView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KTPhotoView.h; sourceTree = ""; }; - 883E77891D48A5E50030E075 /* KTPhotoView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KTPhotoView.m; sourceTree = ""; }; - 883E778A1D48A5E50030E075 /* KTThumbsView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KTThumbsView.h; sourceTree = ""; }; - 883E778B1D48A5E50030E075 /* KTThumbsView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KTThumbsView.m; sourceTree = ""; }; - 883E778C1D48A5E50030E075 /* KTThumbsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KTThumbsViewController.h; sourceTree = ""; }; - 883E778D1D48A5E50030E075 /* KTThumbsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KTThumbsViewController.m; sourceTree = ""; }; - 883E778E1D48A5E50030E075 /* KTThumbView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KTThumbView.h; sourceTree = ""; }; - 883E778F1D48A5E50030E075 /* KTThumbView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KTThumbView.m; sourceTree = ""; }; - 883E77901D48A5E50030E075 /* LocalDevice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LocalDevice.h; sourceTree = ""; }; - 883E77911D48A5E50030E075 /* LocalDevice.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LocalDevice.m; sourceTree = ""; }; - 883E77921D48A5E50030E075 /* LoginResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LoginResult.h; sourceTree = ""; }; - 883E77931D48A5E50030E075 /* LoginResult.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LoginResult.m; sourceTree = ""; }; - 883E77941D48A5E50030E075 /* ModifyLoginPasswordResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ModifyLoginPasswordResult.h; sourceTree = ""; }; - 883E77951D48A5E50030E075 /* ModifyLoginPasswordResult.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ModifyLoginPasswordResult.m; sourceTree = ""; }; - 883E77971D48A5E50030E075 /* MPNotificationView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPNotificationView.h; sourceTree = ""; }; - 883E77981D48A5E50030E075 /* MPNotificationView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPNotificationView.m; sourceTree = ""; }; - 883E77991D48A5E50030E075 /* NetManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetManager.h; sourceTree = ""; }; - 883E779A1D48A5E50030E075 /* NetManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NetManager.m; sourceTree = ""; }; - 883E779C1D48A5E50030E075 /* OBGradientView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OBGradientView.h; sourceTree = ""; }; - 883E779D1D48A5E50030E075 /* OBGradientView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OBGradientView.m; sourceTree = ""; }; - 883E779E1D48A5E50030E075 /* ProgressImageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProgressImageView.h; sourceTree = ""; }; - 883E779F1D48A5E50030E075 /* ProgressImageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ProgressImageView.m; sourceTree = ""; }; - 883E77A01D48A5E50030E075 /* RegisterResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RegisterResult.h; sourceTree = ""; }; - 883E77A11D48A5E50030E075 /* RegisterResult.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RegisterResult.m; sourceTree = ""; }; - 883E77A21D48A5E50030E075 /* TabView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TabView.h; sourceTree = ""; }; - 883E77A31D48A5E50030E075 /* TabView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TabView.m; sourceTree = ""; }; - 883E77A41D48A5E50030E075 /* Toast+UIView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Toast+UIView.h"; sourceTree = ""; }; - 883E77A51D48A5E50030E075 /* Toast+UIView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "Toast+UIView.m"; sourceTree = ""; }; - 883E77A61D48A5E50030E075 /* TouchButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TouchButton.h; sourceTree = ""; }; - 883E77A71D48A5E50030E075 /* TouchButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TouchButton.m; sourceTree = ""; }; - 883E77A81D48A5E50030E075 /* UDManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UDManager.h; sourceTree = ""; }; - 883E77A91D48A5E50030E075 /* UDManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UDManager.m; sourceTree = ""; }; - 883E77AA1D48A5E50030E075 /* Utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Utils.h; sourceTree = ""; }; - 883E77AB1D48A5E50030E075 /* Utils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Utils.m; sourceTree = ""; }; - 883E77AC1D48A5E50030E075 /* WaitingPageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WaitingPageView.h; sourceTree = ""; }; - 883E77AD1D48A5E50030E075 /* WaitingPageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WaitingPageView.m; sourceTree = ""; }; - 883E77AE1D48A5E50030E075 /* YProgressView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YProgressView.h; sourceTree = ""; }; - 883E77AF1D48A5E50030E075 /* YProgressView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YProgressView.m; sourceTree = ""; }; - 883E77B11D48A5E50030E075 /* Common-Configuration.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "Common-Configuration.plist"; sourceTree = ""; }; - 883E77B21D48A5E50030E075 /* IFISHYooseeImg.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = IFISHYooseeImg.bundle; sourceTree = ""; }; 883E780B1D48A5E50030E075 /* BookViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BookViewController.h; sourceTree = ""; }; 883E780C1D48A5E50030E075 /* BookViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BookViewController.m; sourceTree = ""; }; 883E780D1D48A5E50030E075 /* ConnectErrorViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConnectErrorViewController.h; sourceTree = ""; }; @@ -4175,7 +4643,6 @@ 883E799C1D48B0280030E075 /* TemperatureSetCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TemperatureSetCell.h; sourceTree = ""; }; 883E799D1D48B0280030E075 /* TemperatureSetCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TemperatureSetCell.m; sourceTree = ""; }; 883E799E1D48B0280030E075 /* TemperatureSetCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = TemperatureSetCell.xib; sourceTree = ""; }; - 883E79CD1D48B7120030E075 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = ""; }; 883E7BC91EA5FA1A00ED5D89 /* MOBFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = MOBFoundation.framework; sourceTree = ""; }; 883E7BCA1EA5FA1A00ED5D89 /* MOBFoundationEx.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = MOBFoundationEx.framework; sourceTree = ""; }; 883E7BCB1EA5FA1A00ED5D89 /* SMS_SDK.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = SMS_SDK.framework; sourceTree = ""; }; @@ -4251,13 +4718,7 @@ 8856B0E01DEC15F5009D384A /* home_popup_cancel@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "home_popup_cancel@3x.png"; sourceTree = ""; }; 8856B0EA1DED4AE0009D384A /* IfishUserDefaultHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IfishUserDefaultHelper.h; sourceTree = ""; }; 8856B0EB1DED4AE0009D384A /* IfishUserDefaultHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IfishUserDefaultHelper.m; sourceTree = ""; }; - 8856B0EE1DED7EB9009D384A /* CameraBottomHView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CameraBottomHView.h; sourceTree = ""; }; - 8856B0EF1DED7EB9009D384A /* CameraBottomHView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CameraBottomHView.m; sourceTree = ""; }; - 8856B0F11DEE9FC7009D384A /* CameraBottomCollectionViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CameraBottomCollectionViewCell.h; sourceTree = ""; }; - 8856B0F21DEE9FC7009D384A /* CameraBottomCollectionViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CameraBottomCollectionViewCell.m; sourceTree = ""; }; - 8856B0F31DEE9FC7009D384A /* CameraBottomCollectionViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CameraBottomCollectionViewCell.xib; sourceTree = ""; }; 8857E43B1ECBE53A004A3D75 /* libc++.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libc++.tbd"; path = "usr/lib/libc++.tbd"; sourceTree = SDKROOT; }; - 8857E43D1ECBE554004A3D75 /* libstdc++.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libstdc++.tbd"; path = "usr/lib/libstdc++.tbd"; sourceTree = SDKROOT; }; 88591ED81D655B9E00A1316E /* AreaModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AreaModel.h; sourceTree = ""; }; 88591ED91D655B9E00A1316E /* AreaModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AreaModel.m; sourceTree = ""; }; 88591EDA1D655B9E00A1316E /* china_citys_name.db */ = {isa = PBXFileReference; lastKnownFileType = file; path = china_citys_name.db; sourceTree = ""; }; @@ -5186,8 +5647,6 @@ 88673AF91E1E1C20001D5F49 /* IfishDeviceInfo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IfishDeviceInfo.h; sourceTree = ""; }; 88673AFA1E1E57CB001D5F49 /* RuSunGuiDeng.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RuSunGuiDeng.h; sourceTree = ""; }; 88673AFB1E1E57CB001D5F49 /* RuSunGuiDeng.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RuSunGuiDeng.m; sourceTree = ""; }; - 88673AFF1E1F3DA8001D5F49 /* FishTankBootmDataHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FishTankBootmDataHelper.h; sourceTree = ""; }; - 88673B001E1F3DA9001D5F49 /* FishTankBootmDataHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FishTankBootmDataHelper.m; sourceTree = ""; }; 88673B021E1F6A4F001D5F49 /* SongNuoBDProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SongNuoBDProtocol.h; sourceTree = ""; }; 88673B031E1F6A4F001D5F49 /* SongNuoBDProtocol.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SongNuoBDProtocol.m; sourceTree = ""; }; 88673B051E1F71DC001D5F49 /* SongNuoDBCenterViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SongNuoDBCenterViewController.h; sourceTree = ""; }; @@ -5376,8 +5835,6 @@ 886D94FB1D6C54DC00CF0B63 /* XuanZekanHuShangJiaXinXi.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XuanZekanHuShangJiaXinXi.m; sourceTree = ""; }; 886E3A091EEA44B5007C0B04 /* UserExtendataArchaver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserExtendataArchaver.h; sourceTree = ""; }; 886E3A0A1EEA44B5007C0B04 /* UserExtendataArchaver.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UserExtendataArchaver.m; sourceTree = ""; }; - 886E54831DF64DDB0001D653 /* IfishP2PPlayBackListViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IfishP2PPlayBackListViewController.h; sourceTree = ""; }; - 886E54841DF64DDB0001D653 /* IfishP2PPlayBackListViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IfishP2PPlayBackListViewController.m; sourceTree = ""; }; 886E6A501D893870009C7724 /* SVIndefiniteAnimatedView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVIndefiniteAnimatedView.h; sourceTree = ""; }; 886E6A511D893870009C7724 /* SVIndefiniteAnimatedView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SVIndefiniteAnimatedView.m; sourceTree = ""; }; 886E6A521D893870009C7724 /* SVProgressHUD.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = SVProgressHUD.bundle; sourceTree = ""; }; @@ -5553,25 +6010,6 @@ 8871FB181EBC822B0038E99A /* select_waiting.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = select_waiting.png; sourceTree = ""; }; 8871FB191EBC822B0038E99A /* select_waiting@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "select_waiting@2x.png"; sourceTree = ""; }; 8871FB1A1EBC822B0038E99A /* select_waiting@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "select_waiting@3x.png"; sourceTree = ""; }; - 88721D721E07E8770047B7B1 /* mesg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mesg.h; sourceTree = ""; }; - 88721D741E07EB0E0047B7B1 /* Constants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Constants.h; sourceTree = ""; }; - 88721D751E07EFEE0047B7B1 /* P2PClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = P2PClient.h; sourceTree = ""; }; - 88721D761E07EFEE0047B7B1 /* P2PClient.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = P2PClient.m; sourceTree = ""; }; - 88721D7C1E0913530047B7B1 /* FXBlurView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FXBlurView.h; sourceTree = ""; }; - 88721D7D1E0913530047B7B1 /* FXBlurView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FXBlurView.m; sourceTree = ""; }; - 88721D871E0A1ACC0047B7B1 /* P2PPlaybackController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = P2PPlaybackController.h; sourceTree = ""; }; - 88721D881E0A1ACC0047B7B1 /* P2PPlaybackController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = P2PPlaybackController.m; sourceTree = ""; }; - 88721D8B1E0A1B670047B7B1 /* CyclePickerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CyclePickerView.h; sourceTree = ""; }; - 88721D8C1E0A1B670047B7B1 /* CyclePickerView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CyclePickerView.m; sourceTree = ""; }; - 88721D8D1E0A1B670047B7B1 /* MXSCycleScrollView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MXSCycleScrollView.h; sourceTree = ""; }; - 88721D8E1E0A1B670047B7B1 /* MXSCycleScrollView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MXSCycleScrollView.m; sourceTree = ""; }; - 88721D8F1E0A1B670047B7B1 /* MXSCycleScrollView3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MXSCycleScrollView3.h; sourceTree = ""; }; - 88721D901E0A1B670047B7B1 /* MXSCycleScrollView3.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MXSCycleScrollView3.m; sourceTree = ""; }; - 88721D951E0A1E680047B7B1 /* SVPullToRefresh.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = SVPullToRefresh.bundle; sourceTree = ""; }; - 88721D961E0A1E680047B7B1 /* SVPullToRefresh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVPullToRefresh.h; sourceTree = ""; }; - 88721D971E0A1E680047B7B1 /* SVPullToRefresh.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SVPullToRefresh.m; sourceTree = ""; }; - 88721D981E0A1E680047B7B1 /* UIScrollView+SVInfiniteScrolling.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIScrollView+SVInfiniteScrolling.h"; sourceTree = ""; }; - 88721D991E0A1E680047B7B1 /* UIScrollView+SVInfiniteScrolling.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIScrollView+SVInfiniteScrolling.m"; sourceTree = ""; }; 8872B6401D7E649A00D47C75 /* LXShareImageVIew.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LXShareImageVIew.h; sourceTree = ""; }; 8872B6411D7E649A00D47C75 /* LXShareImageVIew.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LXShareImageVIew.m; sourceTree = ""; }; 8872FFB71E9B300800406C1D /* AlibabaAuthExt.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = AlibabaAuthExt.framework; sourceTree = ""; }; @@ -5593,8 +6031,6 @@ 8872FFC81E9B300800406C1D /* AlipaySDK.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = AlipaySDK.bundle; sourceTree = ""; }; 8872FFC91E9B300800406C1D /* ALPLinkPartnerSDK.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = ALPLinkPartnerSDK.bundle; sourceTree = ""; }; 8872FFCA1E9B300800406C1D /* NBResource.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = NBResource.bundle; sourceTree = ""; }; - 887361401F0231FC00259A92 /* libAVCtrl.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libAVCtrl.a; sourceTree = ""; }; - 887361411F0231FC00259A92 /* P2PCInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = P2PCInterface.h; sourceTree = ""; }; 88742AE71EF7C792006BF401 /* window_heating.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = window_heating.png; sourceTree = ""; }; 88742AE81EF7C792006BF401 /* window_heating@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "window_heating@2x.png"; sourceTree = ""; }; 88742AE91EF7C792006BF401 /* window_heating@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "window_heating@3x.png"; sourceTree = ""; }; @@ -5936,7 +6372,6 @@ 88C685E21EA603A8004CDFD9 /* libSocialWeChat.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libSocialWeChat.a; sourceTree = ""; }; 88C685E31EA603A8004CDFD9 /* UMSocialWechatHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UMSocialWechatHandler.h; sourceTree = ""; }; 88C685E51EA603A8004CDFD9 /* libWeChatSDK.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libWeChatSDK.a; sourceTree = ""; }; - 88C685E61EA603A8004CDFD9 /* README.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.txt; sourceTree = ""; }; 88C685E71EA603A8004CDFD9 /* WechatAuthSDK.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WechatAuthSDK.h; sourceTree = ""; }; 88C685E81EA603A8004CDFD9 /* WXApi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WXApi.h; sourceTree = ""; }; 88C685E91EA603A8004CDFD9 /* WXApiObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WXApiObject.h; sourceTree = ""; }; @@ -5946,11 +6381,6 @@ 88C685EF1EA603A8004CDFD9 /* libUMSocialLog.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libUMSocialLog.a; sourceTree = ""; }; 88C685F11EA603A8004CDFD9 /* UMSocialSDKResources.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = UMSocialSDKResources.bundle; sourceTree = ""; }; 88C685F21EA603A8004CDFD9 /* UShareUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = UShareUI.framework; sourceTree = ""; }; - 88C686031EA60691004CDFD9 /* BaiduMapAPI_Base.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = BaiduMapAPI_Base.framework; sourceTree = ""; }; - 88C686041EA60691004CDFD9 /* BaiduMapAPI_Location.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = BaiduMapAPI_Location.framework; sourceTree = ""; }; - 88C686051EA60691004CDFD9 /* BaiduMapAPI_Map.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = BaiduMapAPI_Map.framework; sourceTree = ""; }; - 88C686061EA60691004CDFD9 /* BaiduMapAPI_Search.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = BaiduMapAPI_Search.framework; sourceTree = ""; }; - 88C686071EA60691004CDFD9 /* BaiduMapAPI_Utils.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = BaiduMapAPI_Utils.framework; sourceTree = ""; }; 88C6860E1EA60A40004CDFD9 /* libTalkingData.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libTalkingData.a; sourceTree = ""; }; 88C6860F1EA60A40004CDFD9 /* TalkingData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TalkingData.h; sourceTree = ""; }; 88C686101EA60A40004CDFD9 /* TalkingDataSMS.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TalkingDataSMS.h; sourceTree = ""; }; @@ -5964,7 +6394,6 @@ 88C686211EA6106E004CDFD9 /* MediaPlayer.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MediaPlayer.framework; path = System/Library/Frameworks/MediaPlayer.framework; sourceTree = SDKROOT; }; 88C686231EA61081004CDFD9 /* MediaToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MediaToolbox.framework; path = System/Library/Frameworks/MediaToolbox.framework; sourceTree = SDKROOT; }; 88C686251EA61091004CDFD9 /* OpenAL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenAL.framework; path = System/Library/Frameworks/OpenAL.framework; sourceTree = SDKROOT; }; - 88C686271EA610A6004CDFD9 /* libstdc++.6.0.9.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libstdc++.6.0.9.tbd"; path = "usr/lib/libstdc++.6.0.9.tbd"; sourceTree = SDKROOT; }; 88C686291EA610C0004CDFD9 /* CoreMotion.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMotion.framework; path = System/Library/Frameworks/CoreMotion.framework; sourceTree = SDKROOT; }; 88C6862B1EA610D2004CDFD9 /* AdSupport.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AdSupport.framework; path = System/Library/Frameworks/AdSupport.framework; sourceTree = SDKROOT; }; 88C6862D1EA610E5004CDFD9 /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; @@ -5993,87 +6422,8 @@ 88C6865F1EA612DE004CDFD9 /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; }; 88CDA4131BD4BBE3007238D6 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Main.strings"; sourceTree = ""; }; 88CDA4141BD4BBE3007238D6 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/LaunchScreen.strings"; sourceTree = ""; }; - 88CE1AE11D98FF0200C514BC /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; - 88D0F2251EA646E100286022 /* libMD5Manager.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libMD5Manager.a; sourceTree = ""; }; - 88D0F2261EA646E100286022 /* MD5Manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MD5Manager.h; sourceTree = ""; }; - 88D0F22A1EA646E100286022 /* avcodec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = avcodec.h; sourceTree = ""; }; - 88D0F22B1EA646E100286022 /* avfft.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = avfft.h; sourceTree = ""; }; - 88D0F22C1EA646E100286022 /* dxva2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dxva2.h; sourceTree = ""; }; - 88D0F22D1EA646E100286022 /* old_codec_ids.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = old_codec_ids.h; sourceTree = ""; }; - 88D0F22E1EA646E100286022 /* vaapi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vaapi.h; sourceTree = ""; }; - 88D0F22F1EA646E100286022 /* vda.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vda.h; sourceTree = ""; }; - 88D0F2301EA646E100286022 /* vdpau.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vdpau.h; sourceTree = ""; }; - 88D0F2311EA646E100286022 /* version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = version.h; sourceTree = ""; }; - 88D0F2321EA646E100286022 /* xvmc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = xvmc.h; sourceTree = ""; }; - 88D0F2341EA646E100286022 /* avformat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = avformat.h; sourceTree = ""; }; - 88D0F2351EA646E100286022 /* avio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = avio.h; sourceTree = ""; }; - 88D0F2361EA646E100286022 /* version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = version.h; sourceTree = ""; }; - 88D0F2381EA646E100286022 /* adler32.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = adler32.h; sourceTree = ""; }; - 88D0F2391EA646E100286022 /* aes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aes.h; sourceTree = ""; }; - 88D0F23A1EA646E100286022 /* attributes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = attributes.h; sourceTree = ""; }; - 88D0F23B1EA646E100286022 /* audio_fifo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audio_fifo.h; sourceTree = ""; }; - 88D0F23C1EA646E100286022 /* audioconvert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audioconvert.h; sourceTree = ""; }; - 88D0F23D1EA646E100286022 /* avassert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = avassert.h; sourceTree = ""; }; - 88D0F23E1EA646E100286022 /* avconfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = avconfig.h; sourceTree = ""; }; - 88D0F23F1EA646E100286022 /* avstring.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = avstring.h; sourceTree = ""; }; - 88D0F2401EA646E100286022 /* avutil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = avutil.h; sourceTree = ""; }; - 88D0F2411EA646E100286022 /* base64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = base64.h; sourceTree = ""; }; - 88D0F2421EA646E100286022 /* blowfish.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blowfish.h; sourceTree = ""; }; - 88D0F2431EA646E100286022 /* bprint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bprint.h; sourceTree = ""; }; - 88D0F2441EA646E100286022 /* bswap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bswap.h; sourceTree = ""; }; - 88D0F2451EA646E100286022 /* channel_layout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = channel_layout.h; sourceTree = ""; }; - 88D0F2461EA646E100286022 /* common.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = common.h; sourceTree = ""; }; - 88D0F2471EA646E100286022 /* cpu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cpu.h; sourceTree = ""; }; - 88D0F2481EA646E100286022 /* crc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crc.h; sourceTree = ""; }; - 88D0F2491EA646E100286022 /* dict.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dict.h; sourceTree = ""; }; - 88D0F24A1EA646E100286022 /* error.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = error.h; sourceTree = ""; }; - 88D0F24B1EA646E100286022 /* eval.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eval.h; sourceTree = ""; }; - 88D0F24C1EA646E100286022 /* fifo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fifo.h; sourceTree = ""; }; - 88D0F24D1EA646E100286022 /* file.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = file.h; sourceTree = ""; }; - 88D0F24E1EA646E100286022 /* hmac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hmac.h; sourceTree = ""; }; - 88D0F24F1EA646E100286022 /* imgutils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = imgutils.h; sourceTree = ""; }; - 88D0F2501EA646E100286022 /* intfloat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = intfloat.h; sourceTree = ""; }; - 88D0F2511EA646E100286022 /* intfloat_readwrite.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = intfloat_readwrite.h; sourceTree = ""; }; - 88D0F2521EA646E100286022 /* intreadwrite.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = intreadwrite.h; sourceTree = ""; }; - 88D0F2531EA646E100286022 /* lfg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lfg.h; sourceTree = ""; }; - 88D0F2541EA646E100286022 /* log.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = log.h; sourceTree = ""; }; - 88D0F2551EA646E100286022 /* mathematics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mathematics.h; sourceTree = ""; }; - 88D0F2561EA646E100286022 /* md5.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = md5.h; sourceTree = ""; }; - 88D0F2571EA646E100286022 /* mem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mem.h; sourceTree = ""; }; - 88D0F2581EA646E100286022 /* old_pix_fmts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = old_pix_fmts.h; sourceTree = ""; }; - 88D0F2591EA646E100286022 /* opt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = opt.h; sourceTree = ""; }; - 88D0F25A1EA646E100286022 /* parseutils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = parseutils.h; sourceTree = ""; }; - 88D0F25B1EA646E100286022 /* pixdesc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pixdesc.h; sourceTree = ""; }; - 88D0F25C1EA646E100286022 /* pixfmt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pixfmt.h; sourceTree = ""; }; - 88D0F25D1EA646E100286022 /* random_seed.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = random_seed.h; sourceTree = ""; }; - 88D0F25E1EA646E100286022 /* rational.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rational.h; sourceTree = ""; }; - 88D0F25F1EA646E100286022 /* samplefmt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = samplefmt.h; sourceTree = ""; }; - 88D0F2601EA646E100286022 /* sha.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sha.h; sourceTree = ""; }; - 88D0F2611EA646E100286022 /* time.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = time.h; sourceTree = ""; }; - 88D0F2621EA646E100286022 /* timecode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = timecode.h; sourceTree = ""; }; - 88D0F2631EA646E100286022 /* timestamp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = timestamp.h; sourceTree = ""; }; - 88D0F2641EA646E100286022 /* version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = version.h; sourceTree = ""; }; - 88D0F2651EA646E100286022 /* xtea.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = xtea.h; sourceTree = ""; }; - 88D0F2671EA646E100286022 /* swscale.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = swscale.h; sourceTree = ""; }; - 88D0F2681EA646E100286022 /* version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = version.h; sourceTree = ""; }; - 88D0F2691EA646E100286022 /* FfmpegInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FfmpegInterface.h; sourceTree = ""; }; - 88D0F26A1EA646E100286022 /* FfmpegInterface.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FfmpegInterface.m; sourceTree = ""; }; - 88D0F26B1EA646E100286022 /* libRTSP.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libRTSP.a; sourceTree = ""; }; - 88D0F26C1EA646E100286022 /* Rtsp_instance.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Rtsp_instance.h; sourceTree = ""; }; - 88D0F26D1EA646E100286022 /* RtspInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RtspInterface.h; sourceTree = ""; }; - 88D0F26E1EA646E100286022 /* RtspInterface.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = RtspInterface.mm; sourceTree = ""; }; - 88D0F2701EA646E100286022 /* elian.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = elian.h; sourceTree = ""; }; - 88D0F2711EA646E100286022 /* libelian.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libelian.a; sourceTree = ""; }; 88D0F27B1EA6F53E00286022 /* IfishSetViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IfishSetViewController.h; sourceTree = ""; }; 88D0F27C1EA6F53E00286022 /* IfishSetViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IfishSetViewController.m; sourceTree = ""; }; - 88D0F2841EA7069B00286022 /* YFonc.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = YFonc.a; sourceTree = ""; }; - 88D0F2851EA7069B00286022 /* YFonc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YFonc.h; sourceTree = ""; }; - 88D0F2871EA7069B00286022 /* YMsgBox.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = YMsgBox.a; sourceTree = ""; }; - 88D0F2881EA7069B00286022 /* YMsgBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YMsgBox.h; sourceTree = ""; }; - 88D0F28A1EA7069B00286022 /* YSlider.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = YSlider.a; sourceTree = ""; }; - 88D0F28B1EA7069B00286022 /* YSlider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YSlider.h; sourceTree = ""; }; - 88D0F28D1EA7069B00286022 /* YTargetAndAction.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = YTargetAndAction.a; sourceTree = ""; }; - 88D0F28E1EA7069B00286022 /* YTargetAndAction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YTargetAndAction.h; sourceTree = ""; }; 88D337191DC71EB5006C0ADB /* linkingdevice_botton.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = linkingdevice_botton.png; sourceTree = ""; }; 88D3371A1DC71EB5006C0ADB /* linkingdevice_botton@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "linkingdevice_botton@2x.png"; sourceTree = ""; }; 88D3371B1DC71EB5006C0ADB /* linkingdevice_botton@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "linkingdevice_botton@3x.png"; sourceTree = ""; }; @@ -6089,7 +6439,6 @@ 88D3373A1DC7440C006C0ADB /* IfishConnectingView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IfishConnectingView.h; sourceTree = ""; }; 88D3373B1DC7440C006C0ADB /* IfishConnectingView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IfishConnectingView.m; sourceTree = ""; }; 88EE7AC21ECBF8BE00408C79 /* libc++.1.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libc++.1.tbd"; path = "usr/lib/libc++.1.tbd"; sourceTree = SDKROOT; }; - 88EE7AC41ECBF8EC00408C79 /* libstdc++.6.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libstdc++.6.tbd"; path = "usr/lib/libstdc++.6.tbd"; sourceTree = SDKROOT; }; 88F23F181EA9D18700E4D298 /* live_botton_exceptional.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = live_botton_exceptional.png; sourceTree = ""; }; 88F23F191EA9D18700E4D298 /* live_botton_exceptional@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "live_botton_exceptional@2x.png"; sourceTree = ""; }; 88F23F1A1EA9D18700E4D298 /* live_botton_exceptional@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "live_botton_exceptional@3x.png"; sourceTree = ""; }; @@ -6165,14 +6514,6 @@ 88F5EF0D1D48D08000CC7CAF /* UIRefreshControl+AFNetworking.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIRefreshControl+AFNetworking.m"; sourceTree = ""; }; 88F5EF0E1D48D08000CC7CAF /* UIWebView+AFNetworking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIWebView+AFNetworking.h"; sourceTree = ""; }; 88F5EF0F1D48D08000CC7CAF /* UIWebView+AFNetworking.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIWebView+AFNetworking.m"; sourceTree = ""; }; - 88F5EF121D48D08000CC7CAF /* GCDAsyncSocket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GCDAsyncSocket.h; sourceTree = ""; }; - 88F5EF131D48D08000CC7CAF /* GCDAsyncSocket.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GCDAsyncSocket.m; sourceTree = ""; }; - 88F5EF141D48D08000CC7CAF /* GCDAsyncUdpSocket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GCDAsyncUdpSocket.h; sourceTree = ""; }; - 88F5EF151D48D08000CC7CAF /* GCDAsyncUdpSocket.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GCDAsyncUdpSocket.m; sourceTree = ""; }; - 88F5EF171D48D08000CC7CAF /* AsyncSocket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AsyncSocket.h; sourceTree = ""; }; - 88F5EF181D48D08000CC7CAF /* AsyncSocket.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AsyncSocket.m; sourceTree = ""; }; - 88F5EF191D48D08000CC7CAF /* AsyncUdpSocket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AsyncUdpSocket.h; sourceTree = ""; }; - 88F5EF1A1D48D08000CC7CAF /* AsyncUdpSocket.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AsyncUdpSocket.m; sourceTree = ""; }; 88F5EF1C1D48D08000CC7CAF /* FMDatabase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FMDatabase.h; sourceTree = ""; }; 88F5EF1D1D48D08000CC7CAF /* FMDatabase.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FMDatabase.m; sourceTree = ""; }; 88F5EF1E1D48D08000CC7CAF /* FMDatabaseAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FMDatabaseAdditions.h; sourceTree = ""; }; @@ -6235,43 +6576,6 @@ 88F5EF5C1D48D08100CC7CAF /* MyControl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MyControl.m; sourceTree = ""; }; 88F5EF5E1D48D08100CC7CAF /* Reachability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Reachability.h; sourceTree = ""; }; 88F5EF5F1D48D08100CC7CAF /* Reachability.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Reachability.m; sourceTree = ""; }; - 88F5EF801D48D08100CC7CAF /* bitstream.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bitstream.c; sourceTree = ""; }; - 88F5EF811D48D08100CC7CAF /* bitstream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bitstream.h; sourceTree = ""; }; - 88F5EF821D48D08100CC7CAF /* mask.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = mask.c; sourceTree = ""; }; - 88F5EF831D48D08100CC7CAF /* mask.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mask.h; sourceTree = ""; }; - 88F5EF841D48D08100CC7CAF /* QRCodeGenerator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QRCodeGenerator.h; sourceTree = ""; }; - 88F5EF851D48D08100CC7CAF /* QRCodeGenerator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QRCodeGenerator.m; sourceTree = ""; }; - 88F5EF861D48D08100CC7CAF /* qrencode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = qrencode.c; sourceTree = ""; }; - 88F5EF871D48D08100CC7CAF /* qrencode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = qrencode.h; sourceTree = ""; }; - 88F5EF881D48D08100CC7CAF /* qrinput.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = qrinput.c; sourceTree = ""; }; - 88F5EF891D48D08100CC7CAF /* qrinput.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = qrinput.h; sourceTree = ""; }; - 88F5EF8A1D48D08100CC7CAF /* qrspec.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = qrspec.c; sourceTree = ""; }; - 88F5EF8B1D48D08100CC7CAF /* qrspec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = qrspec.h; sourceTree = ""; }; - 88F5EF8C1D48D08100CC7CAF /* rscode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rscode.c; sourceTree = ""; }; - 88F5EF8D1D48D08100CC7CAF /* rscode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rscode.h; sourceTree = ""; }; - 88F5EF8E1D48D08100CC7CAF /* split.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = split.c; sourceTree = ""; }; - 88F5EF8F1D48D08100CC7CAF /* split.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = split.h; sourceTree = ""; }; - 88F5EF941D48D08100CC7CAF /* Decoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Decoder.h; sourceTree = ""; }; - 88F5EF951D48D08100CC7CAF /* Exception.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Exception.h; sourceTree = ""; }; - 88F5EF961D48D08100CC7CAF /* Image.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Image.h; sourceTree = ""; }; - 88F5EF971D48D08100CC7CAF /* ImageScanner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageScanner.h; sourceTree = ""; }; - 88F5EF981D48D08100CC7CAF /* Processor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Processor.h; sourceTree = ""; }; - 88F5EF991D48D08100CC7CAF /* Scanner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Scanner.h; sourceTree = ""; }; - 88F5EF9A1D48D08100CC7CAF /* Symbol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Symbol.h; sourceTree = ""; }; - 88F5EF9B1D48D08100CC7CAF /* Video.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Video.h; sourceTree = ""; }; - 88F5EF9C1D48D08100CC7CAF /* Window.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Window.h; sourceTree = ""; }; - 88F5EF9D1D48D08100CC7CAF /* zbar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = zbar.h; sourceTree = ""; }; - 88F5EF9E1D48D08100CC7CAF /* ZBarCameraSimulator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZBarCameraSimulator.h; sourceTree = ""; }; - 88F5EF9F1D48D08100CC7CAF /* ZBarCaptureReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZBarCaptureReader.h; sourceTree = ""; }; - 88F5EFA01D48D08100CC7CAF /* ZBarHelpController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZBarHelpController.h; sourceTree = ""; }; - 88F5EFA11D48D08100CC7CAF /* ZBarImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZBarImage.h; sourceTree = ""; }; - 88F5EFA21D48D08100CC7CAF /* ZBarImageScanner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZBarImageScanner.h; sourceTree = ""; }; - 88F5EFA31D48D08100CC7CAF /* ZBarReaderController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZBarReaderController.h; sourceTree = ""; }; - 88F5EFA41D48D08100CC7CAF /* ZBarReaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZBarReaderView.h; sourceTree = ""; }; - 88F5EFA51D48D08100CC7CAF /* ZBarReaderViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZBarReaderViewController.h; sourceTree = ""; }; - 88F5EFA61D48D08100CC7CAF /* ZBarSDK.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZBarSDK.h; sourceTree = ""; }; - 88F5EFA71D48D08100CC7CAF /* ZBarSymbol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZBarSymbol.h; sourceTree = ""; }; - 88F5EFA81D48D08100CC7CAF /* libzbar.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libzbar.a; sourceTree = ""; }; 88F740BE1ECC28E800876AED /* ShopAddGoodsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ShopAddGoodsViewController.h; sourceTree = ""; }; 88F740BF1ECC28E800876AED /* ShopAddGoodsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ShopAddGoodsViewController.m; sourceTree = ""; }; E51D7D49208CD528001FF053 /* RuiMeiCHNameCustom.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RuiMeiCHNameCustom.h; sourceTree = ""; }; @@ -6331,35 +6635,39 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 88EE7AC51ECBF8EC00408C79 /* libstdc++.6.tbd in Frameworks */, - 88EE7AC31ECBF8BE00408C79 /* libc++.1.tbd in Frameworks */, - 8857E43E1ECBE554004A3D75 /* libstdc++.tbd in Frameworks */, - 8857E43C1ECBE53A004A3D75 /* libc++.tbd in Frameworks */, - 88C686611EA61CB6004CDFD9 /* libstdc++.6.0.9.tbd in Frameworks */, - 88C686601EA612DE004CDFD9 /* Accelerate.framework in Frameworks */, + 3D4AFF6221F350820053BAA0 /* libstdc++.6.0.9.tbd in Frameworks */, + 3D4AFF5F21F34E1C0053BAA0 /* libstdc++.tbd in Frameworks */, + 3D1C50B8221A9EDF0096AE43 /* YTargetAndAction.a in Frameworks */, + 3D4AFF6021F34E1C0053BAA0 /* libstdc++.6.tbd in Frameworks */, + 3D39D31C21F34946001C50B6 /* libbz2.tbd in Frameworks */, 88C6865E1EA612D0004CDFD9 /* libz.tbd in Frameworks */, 88C6865C1EA612BD004CDFD9 /* libiconv.tbd in Frameworks */, - 88C6865A1EA612A6004CDFD9 /* AssetsLibrary.framework in Frameworks */, - 88D0F2901EA7069B00286022 /* YFonc.a in Frameworks */, + 88EE7AC31ECBF8BE00408C79 /* libc++.1.tbd in Frameworks */, + 8857E43C1ECBE53A004A3D75 /* libc++.tbd in Frameworks */, 88C686581EA61298004CDFD9 /* AudioToolbox.framework in Frameworks */, + 88C6865A1EA612A6004CDFD9 /* AssetsLibrary.framework in Frameworks */, + 88C686601EA612DE004CDFD9 /* Accelerate.framework in Frameworks */, 88C686561EA61285004CDFD9 /* AVFoundation.framework in Frameworks */, 88C686541EA61275004CDFD9 /* CFNetwork.framework in Frameworks */, 88C686521EA61267004CDFD9 /* CoreAudio.framework in Frameworks */, + 3D1C514D221AA2A90096AE43 /* libelian.a in Frameworks */, + 3D1C50B0221A9EDF0096AE43 /* YMsgBox.a in Frameworks */, 88C686501EA61259004CDFD9 /* CoreLocation.framework in Frameworks */, 88C6864E1EA6124B004CDFD9 /* CoreVideo.framework in Frameworks */, - 882BF4E01EA72578006D0D79 /* YTheNaviBar.a in Frameworks */, 88C6864C1EA6123B004CDFD9 /* CoreTelephony.framework in Frameworks */, 88C6864A1EA61228004CDFD9 /* CoreMedia.framework in Frameworks */, + 3D1C50AE221A9EDF0096AE43 /* YFonc.a in Frameworks */, 88C686481EA61217004CDFD9 /* CoreGraphics.framework in Frameworks */, 88C686461EA611F7004CDFD9 /* ImageIO.framework in Frameworks */, 88C686441EA611DC004CDFD9 /* libc++abi.tbd in Frameworks */, 88C686401EA611AE004CDFD9 /* libsqlite3.tbd in Frameworks */, + 3D1C50B3221A9EDF0096AE43 /* YTheNaviBar.a in Frameworks */, + 3D1C507D221A9EDF0096AE43 /* libAVCtrl.a in Frameworks */, 88C6863C1EA6116C004CDFD9 /* libxml2.tbd in Frameworks */, 88C6863A1EA61149004CDFD9 /* MapKit.framework in Frameworks */, 88C686381EA61138004CDFD9 /* OpenGLES.framework in Frameworks */, 88C686361EA61123004CDFD9 /* QuartzCore.framework in Frameworks */, 88C686341EA61114004CDFD9 /* SystemConfiguration.framework in Frameworks */, - 88D0F2911EA7069B00286022 /* YMsgBox.a in Frameworks */, 88C686321EA61105004CDFD9 /* CoreFoundation.framework in Frameworks */, 88C686301EA610F4004CDFD9 /* Security.framework in Frameworks */, 88C6862E1EA610E5004CDFD9 /* JavaScriptCore.framework in Frameworks */, @@ -6367,26 +6675,24 @@ 88C6862A1EA610C0004CDFD9 /* CoreMotion.framework in Frameworks */, 88C686261EA61091004CDFD9 /* OpenAL.framework in Frameworks */, 88C686241EA61081004CDFD9 /* MediaToolbox.framework in Frameworks */, - 88D0F2781EA646E100286022 /* libRTSP.a in Frameworks */, 88C686221EA6106E004CDFD9 /* MediaPlayer.framework in Frameworks */, 88C686201EA61057004CDFD9 /* libbz2.1.0.tbd in Frameworks */, 88C6861E1EA61041004CDFD9 /* libicucore.tbd in Frameworks */, 88C6861C1EA61000004CDFD9 /* libsqlite3.0.tbd in Frameworks */, 88C6861A1EA60FD6004CDFD9 /* VideoToolbox.framework in Frameworks */, - 88D0F2761EA646E100286022 /* libMD5Manager.a in Frameworks */, + 3D1C50B5221A9EDF0096AE43 /* YSlider.a in Frameworks */, 88C686181EA60EDA004CDFD9 /* MessageUI.framework in Frameworks */, 88C49B4B1EA6270B002BA5A8 /* Bugly.framework in Frameworks */, 88C686161EA60EB3004CDFD9 /* CoreText.framework in Frameworks */, 88C686141EA60EA9004CDFD9 /* WebKit.framework in Frameworks */, 88A7EF8E1EA5E7FC00D43E8C /* libcrypto.a in Frameworks */, - 88D0F2931EA7069B00286022 /* YTargetAndAction.a in Frameworks */, - 88C6860C1EA60691004CDFD9 /* BaiduMapAPI_Utils.framework in Frameworks */, 88C686011EA603A8004CDFD9 /* UShareUI.framework in Frameworks */, 88C685F91EA603A8004CDFD9 /* libSocialWeChat.a in Frameworks */, + 3DD7AB4B21E2F2FB0064856A /* libzbar.a in Frameworks */, 88C685F61EA603A8004CDFD9 /* libSocialSina.a in Frameworks */, - 887361421F0231FC00259A92 /* libAVCtrl.a in Frameworks */, 88A7EF8F1EA5E7FC00D43E8C /* libevent.a in Frameworks */, 88A7EF8C1EA5E7FC00D43E8C /* NIMAVChat.framework in Frameworks */, + 3D1C5039221A9EDE0096AE43 /* libMD5Manager.a in Frameworks */, 88A7EF881EA5E7FC00D43E8C /* libnts.a in Frameworks */, 8872FFCC1E9B300800406C1D /* AlibabaAuthSDK.framework in Frameworks */, 8872FFD11E9B300800406C1D /* AlipaySDK.framework in Frameworks */, @@ -6401,29 +6707,23 @@ 88A7EF891EA5E7FC00D43E8C /* libnvs.a in Frameworks */, 8872FFD41E9B300800406C1D /* SecurityGuardSDK.framework in Frameworks */, 88A7EF911EA5E7FC00D43E8C /* NIMSDK.framework in Frameworks */, - 88D0F27A1EA646E100286022 /* libelian.a in Frameworks */, 88C685F71EA603A8004CDFD9 /* libWeiboSDK.a in Frameworks */, 8872FFD91E9B300800406C1D /* UTMini.framework in Frameworks */, 881671BE1EA5DE2B00BEBF23 /* UMComNetwork.framework in Frameworks */, 88A7EF8A1EA5E7FC00D43E8C /* libopenh264.a in Frameworks */, 88C685F41EA603A8004CDFD9 /* TencentOpenAPI.framework in Frameworks */, - 88D0F2921EA7069B00286022 /* YSlider.a in Frameworks */, - 88C686081EA60691004CDFD9 /* BaiduMapAPI_Base.framework in Frameworks */, - 88F5EFF11D48D08100CC7CAF /* libzbar.a in Frameworks */, 88A7EF901EA5E7FC00D43E8C /* libssl.a in Frameworks */, 88A7EF8D1EA5E7FC00D43E8C /* libaacplus.a in Frameworks */, 8872FFD81E9B300800406C1D /* UTDID.framework in Frameworks */, 88A7EF871EA5E7FC00D43E8C /* libnio.a in Frameworks */, 88C685FC1EA603A8004CDFD9 /* UMSocialCore.framework in Frameworks */, - 88C686091EA60691004CDFD9 /* BaiduMapAPI_Location.framework in Frameworks */, + 3D1C507A221A9EDF0096AE43 /* libRTSP.a in Frameworks */, 8872FFD21E9B300800406C1D /* OpenMtopExt.framework in Frameworks */, 883E7BCD1EA5FA1A00ED5D89 /* MOBFoundationEx.framework in Frameworks */, 8872FFD61E9B300800406C1D /* SGNoCaptcha.framework in Frameworks */, 8872FFD01E9B300800406C1D /* AlibcTradeSDK.framework in Frameworks */, - 88C6860B1EA60691004CDFD9 /* BaiduMapAPI_Search.framework in Frameworks */, 8872FFD71E9B300800406C1D /* SGSecurityBody.framework in Frameworks */, 88A7EF8B1EA5E7FC00D43E8C /* libopus.a in Frameworks */, - 88C6860A1EA60691004CDFD9 /* BaiduMapAPI_Map.framework in Frameworks */, 8872FFCD1E9B300800406C1D /* AlibcLinkPartnerSDK.framework in Frameworks */, 88C686111EA60A40004CDFD9 /* libTalkingData.a in Frameworks */, 882DF00E1EA70EF2009FF5D0 /* libemTMF_Ofical_jw160727.a in Frameworks */, @@ -6462,15 +6762,597 @@ path = categry; sourceTree = ""; }; + 3D1C171F2171BB0600A159A8 /* PNChart */ = { + isa = PBXGroup; + children = ( + 3D1C17202171BB0600A159A8 /* PNChart.h */, + 3D1C17212171BB0600A159A8 /* PNPieChart.h */, + 3D1C17222171BB0600A159A8 /* PNPieChartDataItem.m */, + 3D1C17232171BB0600A159A8 /* PNLineChartDataItem.h */, + 3D1C17242171BB0600A159A8 /* PNBar.h */, + 3D1C17252171BB0600A159A8 /* PNScatterChartData.h */, + 3D1C17262171BB0600A159A8 /* PNColor.h */, + 3D1C17272171BB0600A159A8 /* PNChartLabel.m */, + 3D1C17282171BB0600A159A8 /* PNRadarChart.h */, + 3D1C17292171BB0600A159A8 /* PNScatterChartDataItem.m */, + 3D1C172A2171BB0600A159A8 /* PNScatterChart.h */, + 3D1C172B2171BB0600A159A8 /* PNRadarChartDataItem.m */, + 3D1C172C2171BB0600A159A8 /* UICountingLabel.h */, + 3D1C172D2171BB0600A159A8 /* PNGenericChart.m */, + 3D1C172E2171BB0600A159A8 /* PNBarChart.m */, + 3D1C172F2171BB0600A159A8 /* PNLineChart.m */, + 3D1C17302171BB0600A159A8 /* PNCircleChart.m */, + 3D1C17312171BB0600A159A8 /* PNLineChartData.m */, + 3D1C17322171BB0600A159A8 /* PNLineChartDataItem.m */, + 3D1C17332171BB0600A159A8 /* PNPieChartDataItem.h */, + 3D1C17342171BB0600A159A8 /* PNPieChart.m */, + 3D1C17352171BB0600A159A8 /* PNRadarChart.m */, + 3D1C17362171BB0600A159A8 /* PNChartLabel.h */, + 3D1C17372171BB0700A159A8 /* PNColor.m */, + 3D1C17382171BB0700A159A8 /* PNScatterChartData.m */, + 3D1C17392171BB0700A159A8 /* PNBar.m */, + 3D1C173A2171BB0700A159A8 /* PNBarChart.h */, + 3D1C173B2171BB0700A159A8 /* UICountingLabel.m */, + 3D1C173C2171BB0700A159A8 /* PNGenericChart.h */, + 3D1C173D2171BB0700A159A8 /* PNRadarChartDataItem.h */, + 3D1C173E2171BB0700A159A8 /* PNScatterChart.m */, + 3D1C173F2171BB0700A159A8 /* PNChartDelegate.h */, + 3D1C17402171BB0700A159A8 /* PNScatterChartDataItem.h */, + 3D1C17412171BB0700A159A8 /* PNLineChartData.h */, + 3D1C17422171BB0700A159A8 /* PNCircleChart.h */, + 3D1C17432171BB0700A159A8 /* PNLineChart.h */, + ); + path = PNChart; + sourceTree = ""; + }; + 3D1C4F00221A9EDD0096AE43 /* IfishYooseeFile */ = { + isa = PBXGroup; + children = ( + 3D1C4F01221A9EDD0096AE43 /* IfishYsooseeNewLib */, + 3D1C4F53221A9EDD0096AE43 /* IfishYooseeHelper */, + 3D1C4FE2221A9EDD0096AE43 /* IfishYooseeControlller */, + 3D1C5030221A9EDD0096AE43 /* IfishYooseeSource */, + ); + path = IfishYooseeFile; + sourceTree = ""; + }; + 3D1C4F01221A9EDD0096AE43 /* IfishYsooseeNewLib */ = { + isa = PBXGroup; + children = ( + 3D1C4F02221A9EDD0096AE43 /* wifi */, + 3D1C4F05221A9EDD0096AE43 /* md5 */, + 3D1C4F08221A9EDD0096AE43 /* rtsp */, + 3D1C4F50221A9EDD0096AE43 /* libAVCtrlIOS */, + ); + path = IfishYsooseeNewLib; + sourceTree = ""; + }; + 3D1C4F02221A9EDD0096AE43 /* wifi */ = { + isa = PBXGroup; + children = ( + 3D1C514C221AA2A80096AE43 /* libelian.a */, + 3D1C4F04221A9EDD0096AE43 /* elian.h */, + ); + path = wifi; + sourceTree = ""; + }; + 3D1C4F05221A9EDD0096AE43 /* md5 */ = { + isa = PBXGroup; + children = ( + 3D1C4F06221A9EDD0096AE43 /* MD5Manager.h */, + 3D1C4F07221A9EDD0096AE43 /* libMD5Manager.a */, + ); + path = md5; + sourceTree = ""; + }; + 3D1C4F08221A9EDD0096AE43 /* rtsp */ = { + isa = PBXGroup; + children = ( + 3D1C4F09221A9EDD0096AE43 /* Rtsp_instance.h */, + 3D1C4F0A221A9EDD0096AE43 /* ffmpeg */, + 3D1C4F4B221A9EDD0096AE43 /* FfmpegInterface.h */, + 3D1C4F4C221A9EDD0096AE43 /* RtspInterface.mm */, + 3D1C4F4D221A9EDD0096AE43 /* RtspInterface.h */, + 3D1C4F4E221A9EDD0096AE43 /* libRTSP.a */, + 3D1C4F4F221A9EDD0096AE43 /* FfmpegInterface.m */, + ); + path = rtsp; + sourceTree = ""; + }; + 3D1C4F0A221A9EDD0096AE43 /* ffmpeg */ = { + isa = PBXGroup; + children = ( + 3D1C4F0B221A9EDD0096AE43 /* libavutil */, + 3D1C4F3A221A9EDD0096AE43 /* libavformat */, + 3D1C4F3E221A9EDD0096AE43 /* libswscale */, + 3D1C4F41221A9EDD0096AE43 /* libavcodec */, + ); + path = ffmpeg; + sourceTree = ""; + }; + 3D1C4F0B221A9EDD0096AE43 /* libavutil */ = { + isa = PBXGroup; + children = ( + 3D1C4F0C221A9EDD0096AE43 /* time.h */, + 3D1C4F0D221A9EDD0096AE43 /* intfloat.h */, + 3D1C4F0E221A9EDD0096AE43 /* error.h */, + 3D1C4F0F221A9EDD0096AE43 /* fifo.h */, + 3D1C4F10221A9EDD0096AE43 /* blowfish.h */, + 3D1C4F11221A9EDD0096AE43 /* version.h */, + 3D1C4F12221A9EDD0096AE43 /* samplefmt.h */, + 3D1C4F13221A9EDD0096AE43 /* pixdesc.h */, + 3D1C4F14221A9EDD0096AE43 /* base64.h */, + 3D1C4F15221A9EDD0096AE43 /* rational.h */, + 3D1C4F16221A9EDD0096AE43 /* sha.h */, + 3D1C4F17221A9EDD0096AE43 /* avconfig.h */, + 3D1C4F18221A9EDD0096AE43 /* lfg.h */, + 3D1C4F19221A9EDD0096AE43 /* avutil.h */, + 3D1C4F1A221A9EDD0096AE43 /* intfloat_readwrite.h */, + 3D1C4F1B221A9EDD0096AE43 /* xtea.h */, + 3D1C4F1C221A9EDD0096AE43 /* crc.h */, + 3D1C4F1D221A9EDD0096AE43 /* file.h */, + 3D1C4F1E221A9EDD0096AE43 /* md5.h */, + 3D1C4F1F221A9EDD0096AE43 /* audio_fifo.h */, + 3D1C4F20221A9EDD0096AE43 /* attributes.h */, + 3D1C4F21221A9EDD0096AE43 /* adler32.h */, + 3D1C4F22221A9EDD0096AE43 /* timecode.h */, + 3D1C4F23221A9EDD0096AE43 /* common.h */, + 3D1C4F24221A9EDD0096AE43 /* hmac.h */, + 3D1C4F25221A9EDD0096AE43 /* eval.h */, + 3D1C4F26221A9EDD0096AE43 /* dict.h */, + 3D1C4F27221A9EDD0096AE43 /* random_seed.h */, + 3D1C4F28221A9EDD0096AE43 /* opt.h */, + 3D1C4F29221A9EDD0096AE43 /* log.h */, + 3D1C4F2A221A9EDD0096AE43 /* aes.h */, + 3D1C4F2B221A9EDD0096AE43 /* bswap.h */, + 3D1C4F2C221A9EDD0096AE43 /* old_pix_fmts.h */, + 3D1C4F2D221A9EDD0096AE43 /* cpu.h */, + 3D1C4F2E221A9EDD0096AE43 /* audioconvert.h */, + 3D1C4F2F221A9EDD0096AE43 /* channel_layout.h */, + 3D1C4F30221A9EDD0096AE43 /* imgutils.h */, + 3D1C4F31221A9EDD0096AE43 /* mem.h */, + 3D1C4F32221A9EDD0096AE43 /* parseutils.h */, + 3D1C4F33221A9EDD0096AE43 /* bprint.h */, + 3D1C4F34221A9EDD0096AE43 /* pixfmt.h */, + 3D1C4F35221A9EDD0096AE43 /* timestamp.h */, + 3D1C4F36221A9EDD0096AE43 /* avassert.h */, + 3D1C4F37221A9EDD0096AE43 /* mathematics.h */, + 3D1C4F38221A9EDD0096AE43 /* intreadwrite.h */, + 3D1C4F39221A9EDD0096AE43 /* avstring.h */, + ); + path = libavutil; + sourceTree = ""; + }; + 3D1C4F3A221A9EDD0096AE43 /* libavformat */ = { + isa = PBXGroup; + children = ( + 3D1C4F3B221A9EDD0096AE43 /* version.h */, + 3D1C4F3C221A9EDD0096AE43 /* avio.h */, + 3D1C4F3D221A9EDD0096AE43 /* avformat.h */, + ); + path = libavformat; + sourceTree = ""; + }; + 3D1C4F3E221A9EDD0096AE43 /* libswscale */ = { + isa = PBXGroup; + children = ( + 3D1C4F3F221A9EDD0096AE43 /* version.h */, + 3D1C4F40221A9EDD0096AE43 /* swscale.h */, + ); + path = libswscale; + sourceTree = ""; + }; + 3D1C4F41221A9EDD0096AE43 /* libavcodec */ = { + isa = PBXGroup; + children = ( + 3D1C4F42221A9EDD0096AE43 /* avcodec.h */, + 3D1C4F43221A9EDD0096AE43 /* version.h */, + 3D1C4F44221A9EDD0096AE43 /* vdpau.h */, + 3D1C4F45221A9EDD0096AE43 /* vaapi.h */, + 3D1C4F46221A9EDD0096AE43 /* xvmc.h */, + 3D1C4F47221A9EDD0096AE43 /* avfft.h */, + 3D1C4F48221A9EDD0096AE43 /* vda.h */, + 3D1C4F49221A9EDD0096AE43 /* dxva2.h */, + 3D1C4F4A221A9EDD0096AE43 /* old_codec_ids.h */, + ); + path = libavcodec; + sourceTree = ""; + }; + 3D1C4F50221A9EDD0096AE43 /* libAVCtrlIOS */ = { + isa = PBXGroup; + children = ( + 3D1C4F51221A9EDD0096AE43 /* P2PCInterface.h */, + 3D1C4F52221A9EDD0096AE43 /* libAVCtrl.a */, + ); + path = libAVCtrlIOS; + sourceTree = ""; + }; + 3D1C4F53221A9EDD0096AE43 /* IfishYooseeHelper */ = { + isa = PBXGroup; + children = ( + 3D1C4F54221A9EDD0096AE43 /* KTPhotoBrowser */, + 3D1C4F63221A9EDD0096AE43 /* Utils.h */, + 3D1C4F64221A9EDD0096AE43 /* CustomBorderButton.h */, + 3D1C4F65221A9EDD0096AE43 /* Contact.m */, + 3D1C4F66221A9EDD0096AE43 /* LoginResult.m */, + 3D1C4F67221A9EDD0096AE43 /* AccountResult.h */, + 3D1C4F68221A9EDD0096AE43 /* RegisterResult.m */, + 3D1C4F69221A9EDD0096AE43 /* P2PClient.m */, + 3D1C4F6A221A9EDD0096AE43 /* NetManager.m */, + 3D1C4F6B221A9EDD0096AE43 /* ContactDAO.m */, + 3D1C4F6C221A9EDD0096AE43 /* Alarm.h */, + 3D1C4F6D221A9EDD0096AE43 /* LocalDevice.m */, + 3D1C4F6E221A9EDD0096AE43 /* TabView.m */, + 3D1C4F6F221A9EDD0096AE43 /* UDManager.m */, + 3D1C4F70221A9EDD0096AE43 /* GetAlarmRecordResult.m */, + 3D1C4F71221A9EDD0096AE43 /* ConnectFailurePromptView.h */, + 3D1C4F72221A9EDD0096AE43 /* CustomTopBar.m */, + 3D1C4F73221A9EDD0096AE43 /* ModifyLoginPasswordResult.h */, + 3D1C4F74221A9EDD0096AE43 /* GetContactMessageResult.h */, + 3D1C4F75221A9EDD0096AE43 /* Toast+UIView.m */, + 3D1C4F76221A9EDD0096AE43 /* YProgressView.h */, + 3D1C4F77221A9EDD0096AE43 /* TouchButton.h */, + 3D1C4F78221A9EDD0096AE43 /* View_Frame */, + 3D1C4F7B221A9EDD0096AE43 /* WaitingPageView.h */, + 3D1C4F7C221A9EDD0096AE43 /* ProgressImageView.m */, + 3D1C4F7D221A9EDD0096AE43 /* P2pPalybackViewPicView */, + 3D1C4F84221A9EDD0096AE43 /* CheckAlarmMessageResult.m */, + 3D1C4F85221A9EDD0096AE43 /* CustomView.h */, + 3D1C4F86221A9EDD0096AE43 /* FXBlurView.h */, + 3D1C4F87221A9EDD0096AE43 /* YooseeExtureLibs */, + 3D1C4F98221A9EDD0096AE43 /* CheckNewMessageResult.h */, + 3D1C4F99221A9EDD0096AE43 /* NetManager.h */, + 3D1C4F9A221A9EDD0096AE43 /* RegisterResult.h */, + 3D1C4F9B221A9EDD0096AE43 /* P2PClient.h */, + 3D1C4F9C221A9EDD0096AE43 /* LoginResult.h */, + 3D1C4F9D221A9EDD0096AE43 /* Constants.h */, + 3D1C4F9E221A9EDD0096AE43 /* AccountResult.m */, + 3D1C4F9F221A9EDD0096AE43 /* Contact.h */, + 3D1C4FA0221A9EDD0096AE43 /* Utils.m */, + 3D1C4FA1221A9EDD0096AE43 /* CustomBorderButton.m */, + 3D1C4FA2221A9EDD0096AE43 /* OBGradientView */, + 3D1C4FA5221A9EDD0096AE43 /* UDManager.h */, + 3D1C4FA6221A9EDD0096AE43 /* TabView.h */, + 3D1C4FA7221A9EDD0096AE43 /* LocalDevice.h */, + 3D1C4FA8221A9EDD0096AE43 /* Alarm.m */, + 3D1C4FA9221A9EDD0096AE43 /* ContactDAO.h */, + 3D1C4FAA221A9EDD0096AE43 /* GetContactMessageResult.m */, + 3D1C4FAB221A9EDD0096AE43 /* ModifyLoginPasswordResult.m */, + 3D1C4FAC221A9EDD0096AE43 /* MPNotificationView */, + 3D1C4FAF221A9EDD0096AE43 /* CustomTopBar.h */, + 3D1C4FB0221A9EDD0096AE43 /* ConnectFailurePromptView.m */, + 3D1C4FB1221A9EDD0096AE43 /* GetAlarmRecordResult.h */, + 3D1C4FB2221A9EDD0096AE43 /* SVPullToRefresh */, + 3D1C4FB8221A9EDD0096AE43 /* CheckNewMessageResult.m */, + 3D1C4FB9221A9EDD0096AE43 /* CustomView.m */, + 3D1C4FBA221A9EDD0096AE43 /* FXBlurView.m */, + 3D1C4FBB221A9EDD0096AE43 /* CheckAlarmMessageResult.h */, + 3D1C4FBC221A9EDD0096AE43 /* IfishYooseeP2PCore */, + 3D1C4FDD221A9EDD0096AE43 /* WaitingPageView.m */, + 3D1C4FDE221A9EDD0096AE43 /* ProgressImageView.h */, + 3D1C4FDF221A9EDD0096AE43 /* TouchButton.m */, + 3D1C4FE0221A9EDD0096AE43 /* YProgressView.m */, + 3D1C4FE1221A9EDD0096AE43 /* Toast+UIView.h */, + ); + path = IfishYooseeHelper; + sourceTree = ""; + }; + 3D1C4F54221A9EDD0096AE43 /* KTPhotoBrowser */ = { + isa = PBXGroup; + children = ( + 3D1C4F55221A9EDD0096AE43 /* KTPhotoBrowserGlobal.m */, + 3D1C4F56221A9EDD0096AE43 /* KTPhotoBrowserDataSource.h */, + 3D1C4F57221A9EDD0096AE43 /* KTThumbsView.m */, + 3D1C4F58221A9EDD0096AE43 /* KTThumbView.m */, + 3D1C4F59221A9EDD0096AE43 /* KTPhotoScrollViewController.m */, + 3D1C4F5A221A9EDD0096AE43 /* KTThumbsViewController.h */, + 3D1C4F5B221A9EDD0096AE43 /* KTPhotoView.m */, + 3D1C4F5C221A9EDD0096AE43 /* KTPhotoBrowserGlobal.h */, + 3D1C4F5D221A9EDD0096AE43 /* KTThumbView.h */, + 3D1C4F5E221A9EDD0096AE43 /* KTPhotoBrowser.bundle */, + 3D1C4F5F221A9EDD0096AE43 /* KTThumbsView.h */, + 3D1C4F60221A9EDD0096AE43 /* KTPhotoView.h */, + 3D1C4F61221A9EDD0096AE43 /* KTThumbsViewController.m */, + 3D1C4F62221A9EDD0096AE43 /* KTPhotoScrollViewController.h */, + ); + path = KTPhotoBrowser; + sourceTree = ""; + }; + 3D1C4F78221A9EDD0096AE43 /* View_Frame */ = { + isa = PBXGroup; + children = ( + 3D1C4F79221A9EDD0096AE43 /* UIViewExt.m */, + 3D1C4F7A221A9EDD0096AE43 /* UIViewExt.h */, + ); + path = View_Frame; + sourceTree = ""; + }; + 3D1C4F7D221A9EDD0096AE43 /* P2pPalybackViewPicView */ = { + isa = PBXGroup; + children = ( + 3D1C4F7E221A9EDD0096AE43 /* CyclePickerView.m */, + 3D1C4F7F221A9EDD0096AE43 /* MXSCycleScrollView.m */, + 3D1C4F80221A9EDD0096AE43 /* MXSCycleScrollView3.h */, + 3D1C4F81221A9EDD0096AE43 /* MXSCycleScrollView3.m */, + 3D1C4F82221A9EDD0096AE43 /* MXSCycleScrollView.h */, + 3D1C4F83221A9EDD0096AE43 /* CyclePickerView.h */, + ); + path = P2pPalybackViewPicView; + sourceTree = ""; + }; + 3D1C4F87221A9EDD0096AE43 /* YooseeExtureLibs */ = { + isa = PBXGroup; + children = ( + 3D1C4F88221A9EDD0096AE43 /* YFonc */, + 3D1C4F8B221A9EDD0096AE43 /* YMsgBox */, + 3D1C4F8E221A9EDD0096AE43 /* FounderButton */, + 3D1C4F92221A9EDD0096AE43 /* YSlider */, + 3D1C4F95221A9EDD0096AE43 /* YTargetAndAction */, + ); + path = YooseeExtureLibs; + sourceTree = ""; + }; + 3D1C4F88221A9EDD0096AE43 /* YFonc */ = { + isa = PBXGroup; + children = ( + 3D1C4F89221A9EDD0096AE43 /* YFonc.a */, + 3D1C4F8A221A9EDD0096AE43 /* YFonc.h */, + ); + path = YFonc; + sourceTree = ""; + }; + 3D1C4F8B221A9EDD0096AE43 /* YMsgBox */ = { + isa = PBXGroup; + children = ( + 3D1C4F8C221A9EDD0096AE43 /* YMsgBox.a */, + 3D1C4F8D221A9EDD0096AE43 /* YMsgBox.h */, + ); + path = YMsgBox; + sourceTree = ""; + }; + 3D1C4F8E221A9EDD0096AE43 /* FounderButton */ = { + isa = PBXGroup; + children = ( + 3D1C4F8F221A9EDD0096AE43 /* FounderButton.h */, + 3D1C4F90221A9EDD0096AE43 /* YTheNaviBar.a */, + 3D1C4F91221A9EDD0096AE43 /* YTheNaviBar.h */, + ); + path = FounderButton; + sourceTree = ""; + }; + 3D1C4F92221A9EDD0096AE43 /* YSlider */ = { + isa = PBXGroup; + children = ( + 3D1C4F93221A9EDD0096AE43 /* YSlider.a */, + 3D1C4F94221A9EDD0096AE43 /* YSlider.h */, + ); + path = YSlider; + sourceTree = ""; + }; + 3D1C4F95221A9EDD0096AE43 /* YTargetAndAction */ = { + isa = PBXGroup; + children = ( + 3D1C4F96221A9EDD0096AE43 /* YTargetAndAction.h */, + 3D1C4F97221A9EDD0096AE43 /* YTargetAndAction.a */, + ); + path = YTargetAndAction; + sourceTree = ""; + }; + 3D1C4FA2221A9EDD0096AE43 /* OBGradientView */ = { + isa = PBXGroup; + children = ( + 3D1C4FA3221A9EDD0096AE43 /* OBGradientView.m */, + 3D1C4FA4221A9EDD0096AE43 /* OBGradientView.h */, + ); + path = OBGradientView; + sourceTree = ""; + }; + 3D1C4FAC221A9EDD0096AE43 /* MPNotificationView */ = { + isa = PBXGroup; + children = ( + 3D1C4FAD221A9EDD0096AE43 /* MPNotificationView.h */, + 3D1C4FAE221A9EDD0096AE43 /* MPNotificationView.m */, + ); + path = MPNotificationView; + sourceTree = ""; + }; + 3D1C4FB2221A9EDD0096AE43 /* SVPullToRefresh */ = { + isa = PBXGroup; + children = ( + 3D1C4FB3221A9EDD0096AE43 /* SVPullToRefresh.h */, + 3D1C4FB4221A9EDD0096AE43 /* UIScrollView+SVInfiniteScrolling.m */, + 3D1C4FB5221A9EDD0096AE43 /* UIScrollView+SVInfiniteScrolling.h */, + 3D1C4FB6221A9EDD0096AE43 /* SVPullToRefresh.m */, + 3D1C4FB7221A9EDD0096AE43 /* SVPullToRefresh.bundle */, + ); + path = SVPullToRefresh; + sourceTree = ""; + }; + 3D1C4FBC221A9EDD0096AE43 /* IfishYooseeP2PCore */ = { + isa = PBXGroup; + children = ( + 3D1C4FBD221A9EDD0096AE43 /* RecommendInfo.m */, + 3D1C4FBE221A9EDD0096AE43 /* YAudioStreamPlayer.h */, + 3D1C4FBF221A9EDD0096AE43 /* PAIOUnit.h */, + 3D1C4FC0221A9EDD0096AE43 /* RecommendInfoDAO.h */, + 3D1C4FC1221A9EDD0096AE43 /* ShapeRenderNotifyMsg.mm */, + 3D1C4FC2221A9EDD0096AE43 /* MessageDAO.m */, + 3D1C4FC3221A9EDD0096AE43 /* ShapeRenderNotifyMsg.h */, + 3D1C4FC4221A9EDD0096AE43 /* FListManager.h */, + 3D1C4FC5221A9EDD0096AE43 /* UDPManager.h */, + 3D1C4FC6221A9EDD0096AE43 /* OpenGLView.h */, + 3D1C4FC7221A9EDD0096AE43 /* config.h */, + 3D1C4FC8221A9EDD0096AE43 /* ShakeManager.h */, + 3D1C4FC9221A9EDD0096AE43 /* ParamDao.h */, + 3D1C4FCA221A9EDD0096AE43 /* CameraManager.m */, + 3D1C4FCB221A9EDD0096AE43 /* Message.h */, + 3D1C4FCC221A9EDD0096AE43 /* AlarmDAO.h */, + 3D1C4FCD221A9EDD0096AE43 /* des2.c */, + 3D1C4FCE221A9EDD0096AE43 /* FListManager.m */, + 3D1C4FCF221A9EDD0096AE43 /* MessageDAO.h */, + 3D1C4FD0221A9EDD0096AE43 /* RecommendInfoDAO.m */, + 3D1C4FD1221A9EDD0096AE43 /* PAIOUnit.m */, + 3D1C4FD2221A9EDD0096AE43 /* YAudioStreamPlayer.m */, + 3D1C4FD3221A9EDD0096AE43 /* RecommendInfo.h */, + 3D1C4FD4221A9EDD0096AE43 /* ShakeManager.m */, + 3D1C4FD5221A9EDD0096AE43 /* mesg.h */, + 3D1C4FD6221A9EDD0096AE43 /* OpenGLView.mm */, + 3D1C4FD7221A9EDD0096AE43 /* UDPManager.m */, + 3D1C4FD8221A9EDD0096AE43 /* CameraManager.h */, + 3D1C4FD9221A9EDD0096AE43 /* ParamDao.m */, + 3D1C4FDA221A9EDD0096AE43 /* AlarmDAO.m */, + 3D1C4FDB221A9EDD0096AE43 /* des2.h */, + 3D1C4FDC221A9EDD0096AE43 /* Message.m */, + ); + path = IfishYooseeP2PCore; + sourceTree = ""; + }; + 3D1C4FE2221A9EDD0096AE43 /* IfishYooseeControlller */ = { + isa = PBXGroup; + children = ( + 3D1C4FE3221A9EDD0096AE43 /* YooseeCenterViewCell.h */, + 3D1C4FE4221A9EDD0096AE43 /* IfishCameraModel.h */, + 3D1C4FE5221A9EDD0096AE43 /* IfishP2PMonitorController.h */, + 3D1C4FE6221A9EDD0096AE43 /* YooseeCenterViewCell.xib */, + 3D1C4FE7221A9EDD0096AE43 /* YooseeNextConnectViewController.mm */, + 3D1C4FE8221A9EDD0096AE43 /* YooseConnectFirstViewController.h */, + 3D1C4FE9221A9EDD0096AE43 /* YooseeCenterViewController.h */, + 3D1C4FEA221A9EDD0096AE43 /* IfishP2PPlayBack */, + 3D1C4FF8221A9EDD0096AE43 /* IfishP2PMonitorController.m */, + 3D1C4FF9221A9EDD0096AE43 /* ScreenShotView */, + 3D1C5002221A9EDD0096AE43 /* IfishCameraModel.m */, + 3D1C5003221A9EDD0096AE43 /* IfishcameraBottomHView */, + 3D1C501A221A9EDD0096AE43 /* YooseeCenterViewCell.m */, + 3D1C501B221A9EDD0096AE43 /* YooseeNextConnectViewController.h */, + 3D1C501C221A9EDD0096AE43 /* YooseConnectFirstViewController.m */, + 3D1C501D221A9EDD0096AE43 /* YooseeCenterViewController.m */, + 3D1C501E221A9EDD0096AE43 /* yooseFishTankView */, + ); + path = IfishYooseeControlller; + sourceTree = ""; + }; + 3D1C4FEA221A9EDD0096AE43 /* IfishP2PPlayBack */ = { + isa = PBXGroup; + children = ( + 3D1C4FEB221A9EDD0096AE43 /* CameraNoParyBackVideoView.m */, + 3D1C4FEC221A9EDD0096AE43 /* IfishP2PPlayBackListViewController.m */, + 3D1C4FED221A9EDD0096AE43 /* P2PPlayingbackVC.h */, + 3D1C4FEE221A9EDD0096AE43 /* P2PPlaybackController.h */, + 3D1C4FEF221A9EDD0096AE43 /* PlayBaseViewController.h */, + 3D1C4FF0221A9EDD0096AE43 /* IfishPlaybackViewCell.h */, + 3D1C4FF1221A9EDD0096AE43 /* CameraNoParyBackVideoView.h */, + 3D1C4FF2221A9EDD0096AE43 /* IfishPlaybackViewCell.xib */, + 3D1C4FF3221A9EDD0096AE43 /* P2PPlayingbackVC.m */, + 3D1C4FF4221A9EDD0096AE43 /* IfishP2PPlayBackListViewController.h */, + 3D1C4FF5221A9EDD0096AE43 /* PlayBaseViewController.m */, + 3D1C4FF6221A9EDD0096AE43 /* P2PPlaybackController.m */, + 3D1C4FF7221A9EDD0096AE43 /* IfishPlaybackViewCell.m */, + ); + path = IfishP2PPlayBack; + sourceTree = ""; + }; + 3D1C4FF9221A9EDD0096AE43 /* ScreenShotView */ = { + isa = PBXGroup; + children = ( + 3D1C4FFA221A9EDD0096AE43 /* KTThumbView+SDWebImage.m */, + 3D1C4FFB221A9EDD0096AE43 /* ShotScreenImgViewController.h */, + 3D1C4FFC221A9EDD0096AE43 /* KTPhotoView+SDWebImage.h */, + 3D1C4FFD221A9EDD0096AE43 /* ShootImgDataSource.m */, + 3D1C4FFE221A9EDD0096AE43 /* KTThumbView+SDWebImage.h */, + 3D1C4FFF221A9EDD0096AE43 /* KTPhotoView+SDWebImage.m */, + 3D1C5000221A9EDD0096AE43 /* ShotScreenImgViewController.m */, + 3D1C5001221A9EDD0096AE43 /* ShootImgDataSource.h */, + ); + path = ScreenShotView; + sourceTree = ""; + }; + 3D1C5003221A9EDD0096AE43 /* IfishcameraBottomHView */ = { + isa = PBXGroup; + children = ( + 3D1C5004221A9EDD0096AE43 /* IfishCameraRecordfirstCell.m */, + 3D1C5005221A9EDD0096AE43 /* CameraBottomCollectionViewCell.xib */, + 3D1C5006221A9EDD0096AE43 /* IfishRecVideoViewCell.xib */, + 3D1C5007221A9EDD0096AE43 /* CameraBottomHView.m */, + 3D1C5008221A9EDD0096AE43 /* CameraBottomCollectionViewCell.h */, + 3D1C5009221A9EDD0096AE43 /* IfishRecVideoViewCell.h */, + 3D1C500A221A9EDD0096AE43 /* CameraRecordViewController.m */, + 3D1C500B221A9EDD0096AE43 /* IfishCameraRecordThirdCell.h */, + 3D1C500C221A9EDD0096AE43 /* IfishCameraRecordFourCell.h */, + 3D1C500D221A9EDD0096AE43 /* IfishCameraRecordfirstCell.xib */, + 3D1C500E221A9EDD0096AE43 /* IfishCameraRecordSecondCell.h */, + 3D1C500F221A9EDD0096AE43 /* IfishCameraRecordThirdCell.xib */, + 3D1C5010221A9EDD0096AE43 /* IfishCameraRecordFourCell.xib */, + 3D1C5011221A9EDD0096AE43 /* IfishCameraRecordSecondCell.xib */, + 3D1C5012221A9EDD0096AE43 /* IfishCameraRecordfirstCell.h */, + 3D1C5013221A9EDD0096AE43 /* IfishRecVideoViewCell.m */, + 3D1C5014221A9EDD0096AE43 /* CameraBottomCollectionViewCell.m */, + 3D1C5015221A9EDD0096AE43 /* CameraBottomHView.h */, + 3D1C5016221A9EDD0096AE43 /* IfishCameraRecordSecondCell.m */, + 3D1C5017221A9EDD0096AE43 /* IfishCameraRecordFourCell.m */, + 3D1C5018221A9EDD0096AE43 /* IfishCameraRecordThirdCell.m */, + 3D1C5019221A9EDD0096AE43 /* CameraRecordViewController.h */, + ); + path = IfishcameraBottomHView; + sourceTree = ""; + }; + 3D1C501E221A9EDD0096AE43 /* yooseFishTankView */ = { + isa = PBXGroup; + children = ( + 3D1C501F221A9EDD0096AE43 /* ifishdeviceListCell.h */, + 3D1C5020221A9EDD0096AE43 /* YseeCollectionCell */, + 3D1C5029221A9EDD0096AE43 /* BootomViewSoketBackMasgConreol.m */, + 3D1C502A221A9EDD0096AE43 /* MonitorBootmView.m */, + 3D1C502B221A9EDD0096AE43 /* FishTankBootmDataHelper.m */, + 3D1C502C221A9EDD0096AE43 /* ifishdeviceListCell.m */, + 3D1C502D221A9EDD0096AE43 /* MonitorBootmView.h */, + 3D1C502E221A9EDD0096AE43 /* BootomViewSoketBackMasgConreol.h */, + 3D1C502F221A9EDD0096AE43 /* FishTankBootmDataHelper.h */, + ); + path = yooseFishTankView; + sourceTree = ""; + }; + 3D1C5020221A9EDD0096AE43 /* YseeCollectionCell */ = { + isa = PBXGroup; + children = ( + 3D1C5021221A9EDD0096AE43 /* FishControlFourthCell.m */, + 3D1C5022221A9EDD0096AE43 /* FishControlSecondCell.h */, + 3D1C5023221A9EDD0096AE43 /* FishControlFirstCell.h */, + 3D1C5024221A9EDD0096AE43 /* FishControlThreedViewCell.m */, + 3D1C5025221A9EDD0096AE43 /* FishControlFourthCell.h */, + 3D1C5026221A9EDD0096AE43 /* FishControlFirstCell.m */, + 3D1C5027221A9EDD0096AE43 /* FishControlSecondCell.m */, + 3D1C5028221A9EDD0096AE43 /* FishControlThreedViewCell.h */, + ); + path = YseeCollectionCell; + sourceTree = ""; + }; + 3D1C5030221A9EDD0096AE43 /* IfishYooseeSource */ = { + isa = PBXGroup; + children = ( + 3D1C5031221A9EDD0096AE43 /* Localizable.strings */, + 3D1C5034221A9EDD0096AE43 /* IFISHYooseeImg.bundle */, + 3D1C5035221A9EDD0096AE43 /* Common-Configuration.plist */, + ); + path = IfishYooseeSource; + sourceTree = ""; + }; 3D344796212CF49300CF3941 /* HotBar */ = { isa = PBXGroup; children = ( + 3D8F649B215751FF00F04BD3 /* Lib */, 3D13F838212FE46B00D725F7 /* categry */, 3D3447A2212D1C1700CF3941 /* models */, 3D34479C212D111900CF3941 /* Views */, 3D344797212CF71C00CF3941 /* IfishHotBarVc.h */, 3D344798212CF71C00CF3941 /* IfishHotBarVc.m */, 3D344799212CF71C00CF3941 /* IfishHotBarVc.xib */, + 3D8F649821571D7C00F04BD3 /* HitbarWifeVc.h */, + 3D8F649921571D7C00F04BD3 /* HitbarWifeVc.m */, + 3D8F64C22157791D00F04BD3 /* IfishBaseVc.h */, + 3D8F64C32157791D00F04BD3 /* IfishBaseVc.m */, + 3D3512D82159C172009DDB0F /* IfishHotBarModifyNameVc.h */, + 3D3512D92159C172009DDB0F /* IfishHotBarModifyNameVc.m */, + 3D3512DA2159C172009DDB0F /* IfishHotBarModifyNameVc.xib */, ); path = HotBar; sourceTree = ""; @@ -6489,6 +7371,9 @@ 3D5C436F21339EAB00E15B66 /* IfishHistoryView.xib */, 3D5C437121339F8F00E15B66 /* IfishChatView.h */, 3D5C437221339F8F00E15B66 /* IfishChatView.m */, + 3D1C5066215CB6E300A2E5D6 /* IfishHotBarHeader.xib */, + 3D1C5068215CB6F600A2E5D6 /* IfishHotBarHeader.h */, + 3D1C5069215CB6F600A2E5D6 /* IfishHotBarHeader.m */, ); path = Views; sourceTree = ""; @@ -6498,10 +7383,249 @@ children = ( 3D3447A3212D1C3800CF3941 /* IfishHotBarVo.h */, 3D3447A4212D1C3800CF3941 /* IfishHotBarVo.m */, + 3D8F64BC215752AF00F04BD3 /* IfishHeaterVo.h */, + 3D8F64BD215752AF00F04BD3 /* IfishHeaterVo.m */, + 3D8F64BF2157530000F04BD3 /* IfishHistroyVo.h */, + 3D8F64C02157530000F04BD3 /* IfishHistroyVo.m */, + 3D8F64C52157820700F04BD3 /* IfishHotBarPackegeVo.h */, + 3D8F64C62157820700F04BD3 /* IfishHotBarPackegeVo.m */, + 3D8F64C82157842200F04BD3 /* IfishPackageHeaderVo.h */, + 3D8F64C92157842200F04BD3 /* IfishPackageHeaderVo.m */, + 3D8F64FC2158874000F04BD3 /* IfishConfigVo.h */, + 3D8F64FD2158874000F04BD3 /* IfishConfigVo.m */, ); path = models; sourceTree = ""; }; + 3D8F649B215751FF00F04BD3 /* Lib */ = { + isa = PBXGroup; + children = ( + 3D1C171F2171BB0600A159A8 /* PNChart */, + 3D8F64CB215797E600F04BD3 /* IQKeyboardManager */, + 3D8F649C2157522100F04BD3 /* MJExtension */, + ); + path = Lib; + sourceTree = ""; + }; + 3D8F649C2157522100F04BD3 /* MJExtension */ = { + isa = PBXGroup; + children = ( + 3D8F649D2157522100F04BD3 /* MJPropertyKey.h */, + 3D8F649E2157522100F04BD3 /* NSObject+MJClass.h */, + 3D8F649F2157522100F04BD3 /* NSString+MJExtension.h */, + 3D8F64A02157522100F04BD3 /* MJPropertyType.m */, + 3D8F64A12157522100F04BD3 /* NSObject+MJProperty.h */, + 3D8F64A22157522100F04BD3 /* MJExtensionConst.h */, + 3D8F64A32157522100F04BD3 /* NSObject+MJKeyValue.m */, + 3D8F64A42157522100F04BD3 /* MJProperty.m */, + 3D8F64A52157522100F04BD3 /* MJFoundation.h */, + 3D8F64A62157522100F04BD3 /* NSObject+MJCoding.m */, + 3D8F64A72157522100F04BD3 /* MJExtension.h */, + 3D8F64A82157522100F04BD3 /* MJExtensionConst.m */, + 3D8F64A92157522100F04BD3 /* NSObject+MJProperty.m */, + 3D8F64AA2157522100F04BD3 /* MJPropertyType.h */, + 3D8F64AB2157522100F04BD3 /* NSObject+MJClass.m */, + 3D8F64AC2157522100F04BD3 /* NSString+MJExtension.m */, + 3D8F64AD2157522100F04BD3 /* MJPropertyKey.m */, + 3D8F64AE2157522100F04BD3 /* MJProperty.h */, + 3D8F64AF2157522100F04BD3 /* NSObject+MJKeyValue.h */, + 3D8F64B02157522100F04BD3 /* NSObject+MJCoding.h */, + 3D8F64B12157522100F04BD3 /* MJFoundation.m */, + ); + path = MJExtension; + sourceTree = ""; + }; + 3D8F64CB215797E600F04BD3 /* IQKeyboardManager */ = { + isa = PBXGroup; + children = ( + 3D8F64CC215797E600F04BD3 /* IQTextView */, + 3D8F64CF215797E600F04BD3 /* IQToolbar */, + 3D8F64DA215797E600F04BD3 /* Constants */, + 3D8F64DD215797E600F04BD3 /* Resources */, + 3D8F64DF215797E600F04BD3 /* IQKeyboardReturnKeyHandler.h */, + 3D8F64E0215797E600F04BD3 /* IQKeyboardManager.h */, + 3D8F64E1215797E600F04BD3 /* IQKeyboardManager.m */, + 3D8F64E2215797E600F04BD3 /* Categories */, + 3D8F64ED215797E600F04BD3 /* IQKeyboardReturnKeyHandler.m */, + ); + path = IQKeyboardManager; + sourceTree = ""; + }; + 3D8F64CC215797E600F04BD3 /* IQTextView */ = { + isa = PBXGroup; + children = ( + 3D8F64CD215797E600F04BD3 /* IQTextView.m */, + 3D8F64CE215797E600F04BD3 /* IQTextView.h */, + ); + path = IQTextView; + sourceTree = ""; + }; + 3D8F64CF215797E600F04BD3 /* IQToolbar */ = { + isa = PBXGroup; + children = ( + 3D8F64D0215797E600F04BD3 /* IQUIView+IQKeyboardToolbar.h */, + 3D8F64D1215797E600F04BD3 /* IQToolbar.m */, + 3D8F64D2215797E600F04BD3 /* IQPreviousNextView.h */, + 3D8F64D3215797E600F04BD3 /* IQTitleBarButtonItem.m */, + 3D8F64D4215797E600F04BD3 /* IQBarButtonItem.m */, + 3D8F64D5215797E600F04BD3 /* IQUIView+IQKeyboardToolbar.m */, + 3D8F64D6215797E600F04BD3 /* IQPreviousNextView.m */, + 3D8F64D7215797E600F04BD3 /* IQToolbar.h */, + 3D8F64D8215797E600F04BD3 /* IQBarButtonItem.h */, + 3D8F64D9215797E600F04BD3 /* IQTitleBarButtonItem.h */, + ); + path = IQToolbar; + sourceTree = ""; + }; + 3D8F64DA215797E600F04BD3 /* Constants */ = { + isa = PBXGroup; + children = ( + 3D8F64DB215797E600F04BD3 /* IQKeyboardManagerConstantsInternal.h */, + 3D8F64DC215797E600F04BD3 /* IQKeyboardManagerConstants.h */, + ); + path = Constants; + sourceTree = ""; + }; + 3D8F64DD215797E600F04BD3 /* Resources */ = { + isa = PBXGroup; + children = ( + 3D8F64DE215797E600F04BD3 /* IQKeyboardManager.bundle */, + ); + path = Resources; + sourceTree = ""; + }; + 3D8F64E2215797E600F04BD3 /* Categories */ = { + isa = PBXGroup; + children = ( + 3D8F64E3215797E600F04BD3 /* IQNSArray+Sort.m */, + 3D8F64E4215797E600F04BD3 /* IQUIViewController+Additions.h */, + 3D8F64E5215797E600F04BD3 /* IQUITextFieldView+Additions.m */, + 3D8F64E6215797E600F04BD3 /* IQUIScrollView+Additions.m */, + 3D8F64E7215797E600F04BD3 /* IQUIView+Hierarchy.m */, + 3D8F64E8215797E600F04BD3 /* IQNSArray+Sort.h */, + 3D8F64E9215797E600F04BD3 /* IQUIScrollView+Additions.h */, + 3D8F64EA215797E600F04BD3 /* IQUITextFieldView+Additions.h */, + 3D8F64EB215797E600F04BD3 /* IQUIViewController+Additions.m */, + 3D8F64EC215797E600F04BD3 /* IQUIView+Hierarchy.h */, + ); + path = Categories; + sourceTree = ""; + }; + 3DD7AB2021E2F2FB0064856A /* ZbarSDK */ = { + isa = PBXGroup; + children = ( + 3DD7AB2121E2F2FB0064856A /* ZBarSDK */, + 3DD7AB3A21E2F2FB0064856A /* libqrencode */, + ); + path = ZbarSDK; + sourceTree = ""; + }; + 3DD7AB2121E2F2FB0064856A /* ZBarSDK */ = { + isa = PBXGroup; + children = ( + 3DD7AB2221E2F2FB0064856A /* libzbar.a */, + 3DD7AB2321E2F2FB0064856A /* Headers */, + ); + path = ZBarSDK; + sourceTree = ""; + }; + 3DD7AB2321E2F2FB0064856A /* Headers */ = { + isa = PBXGroup; + children = ( + 3DD7AB2421E2F2FB0064856A /* ZBarSDK */, + ); + path = Headers; + sourceTree = ""; + }; + 3DD7AB2421E2F2FB0064856A /* ZBarSDK */ = { + isa = PBXGroup; + children = ( + 3DD7AB2521E2F2FB0064856A /* ZBarCaptureReader.h */, + 3DD7AB2621E2F2FB0064856A /* ZBarImage.h */, + 3DD7AB2721E2F2FB0064856A /* zbar */, + 3DD7AB3121E2F2FB0064856A /* ZBarReaderController.h */, + 3DD7AB3221E2F2FB0064856A /* ZBarReaderView.h */, + 3DD7AB3321E2F2FB0064856A /* ZBarHelpController.h */, + 3DD7AB3421E2F2FB0064856A /* zbar.h */, + 3DD7AB3521E2F2FB0064856A /* ZBarCameraSimulator.h */, + 3DD7AB3621E2F2FB0064856A /* ZBarSymbol.h */, + 3DD7AB3721E2F2FB0064856A /* ZBarImageScanner.h */, + 3DD7AB3821E2F2FB0064856A /* ZBarSDK.h */, + 3DD7AB3921E2F2FB0064856A /* ZBarReaderViewController.h */, + ); + path = ZBarSDK; + sourceTree = ""; + }; + 3DD7AB2721E2F2FB0064856A /* zbar */ = { + isa = PBXGroup; + children = ( + 3DD7AB2821E2F2FB0064856A /* Processor.h */, + 3DD7AB2921E2F2FB0064856A /* Symbol.h */, + 3DD7AB2A21E2F2FB0064856A /* Decoder.h */, + 3DD7AB2B21E2F2FB0064856A /* Window.h */, + 3DD7AB2C21E2F2FB0064856A /* ImageScanner.h */, + 3DD7AB2D21E2F2FB0064856A /* Scanner.h */, + 3DD7AB2E21E2F2FB0064856A /* Video.h */, + 3DD7AB2F21E2F2FB0064856A /* Exception.h */, + 3DD7AB3021E2F2FB0064856A /* Image.h */, + ); + path = zbar; + sourceTree = ""; + }; + 3DD7AB3A21E2F2FB0064856A /* libqrencode */ = { + isa = PBXGroup; + children = ( + 3DD7AB3B21E2F2FB0064856A /* mask.h */, + 3DD7AB3C21E2F2FB0064856A /* qrinput.h */, + 3DD7AB3D21E2F2FB0064856A /* bitstream.c */, + 3DD7AB3E21E2F2FB0064856A /* qrencode.c */, + 3DD7AB3F21E2F2FB0064856A /* qrspec.h */, + 3DD7AB4021E2F2FB0064856A /* split.c */, + 3DD7AB4121E2F2FB0064856A /* rscode.h */, + 3DD7AB4221E2F2FB0064856A /* QRCodeGenerator.m */, + 3DD7AB4321E2F2FB0064856A /* qrinput.c */, + 3DD7AB4421E2F2FB0064856A /* bitstream.h */, + 3DD7AB4521E2F2FB0064856A /* mask.c */, + 3DD7AB4621E2F2FB0064856A /* qrspec.c */, + 3DD7AB4721E2F2FB0064856A /* qrencode.h */, + 3DD7AB4821E2F2FB0064856A /* QRCodeGenerator.h */, + 3DD7AB4921E2F2FB0064856A /* split.h */, + 3DD7AB4A21E2F2FB0064856A /* rscode.c */, + ); + path = libqrencode; + sourceTree = ""; + }; + 3DD7AB8E21E474930064856A /* AsyncSocket */ = { + isa = PBXGroup; + children = ( + 3DD7AB8F21E474930064856A /* RunLoop */, + 3DD7AB9421E474930064856A /* GCD */, + ); + path = AsyncSocket; + sourceTree = ""; + }; + 3DD7AB8F21E474930064856A /* RunLoop */ = { + isa = PBXGroup; + children = ( + 3DD7AB9021E474930064856A /* AsyncUdpSocket.m */, + 3DD7AB9121E474930064856A /* AsyncSocket.h */, + 3DD7AB9221E474930064856A /* AsyncSocket.m */, + 3DD7AB9321E474930064856A /* AsyncUdpSocket.h */, + ); + path = RunLoop; + sourceTree = ""; + }; + 3DD7AB9421E474930064856A /* GCD */ = { + isa = PBXGroup; + children = ( + 3DD7AB9521E474930064856A /* GCDAsyncUdpSocket.m */, + 3DD7AB9621E474930064856A /* GCDAsyncSocket.m */, + 3DD7AB9721E474930064856A /* GCDAsyncUdpSocket.h */, + 3DD7AB9821E474930064856A /* GCDAsyncSocket.h */, + ); + path = GCD; + sourceTree = ""; + }; 880707411DDD3DAC0076F65A /* ifishP2PShareVIew */ = { isa = PBXGroup; children = ( @@ -6621,19 +7745,9 @@ path = P2PPalyingImgs; sourceTree = ""; }; - 8815D1F21E026B8B00BEA2DA /* View_Frame */ = { - isa = PBXGroup; - children = ( - 8815D1F31E026B8B00BEA2DA /* UIViewExt.h */, - 8815D1F41E026B8B00BEA2DA /* UIViewExt.m */, - ); - path = View_Frame; - sourceTree = ""; - }; 8816701A1EA5DE2A00BEBF23 /* UMCommunitySDK */ = { isa = PBXGroup; children = ( - 8816701B1EA5DE2A00BEBF23 /* README.txt */, 8816701C1EA5DE2A00BEBF23 /* UMComDataController */, 8816704E1EA5DE2A00BEBF23 /* UMComModules */, 881670681EA5DE2A00BEBF23 /* UMCommunitySDK */, @@ -6831,7 +7945,6 @@ 881670681EA5DE2A00BEBF23 /* UMCommunitySDK */ = { isa = PBXGroup; children = ( - 881670691EA5DE2A00BEBF23 /* README.txt */, 8816706A1EA5DE2A00BEBF23 /* UMComDataStorage.framework */, 8816706B1EA5DE2A00BEBF23 /* UMComFoundation.framework */, 8816706C1EA5DE2A00BEBF23 /* UMCommunitySDK.framework */, @@ -8324,7 +9437,6 @@ 882955181DBDA3A100E9DDD7 /* Co2_on.png */, 882955191DBDA3A100E9DDD7 /* DanBai_off.png */, 8829551A1DBDA3A100E9DDD7 /* DanBai_on.png */, - 8829551B1DBDA3A100E9DDD7 /* graybtn_big.png */, 8864843D1EE171D30046C3BD /* redact_line@2x.png */, 8829551C1DBDA3A100E9DDD7 /* guidengCell_back.png */, E548F39620A557B5004CF1BC /* JiaReBang.png */, @@ -8448,7 +9560,6 @@ 882955821DBDA3A100E9DDD7 /* switchButton */ = { isa = PBXGroup; children = ( - 882955831DBDA3A100E9DDD7 /* greenbtn_big.png */, 882955841DBDA3A100E9DDD7 /* icon1.png */, 882955851DBDA3A100E9DDD7 /* icon2.png */, 882955861DBDA3A100E9DDD7 /* icon3.png */, @@ -8615,16 +9726,6 @@ path = ViewControlller; sourceTree = ""; }; - 882BF4DC1EA72578006D0D79 /* FounderButton */ = { - isa = PBXGroup; - children = ( - 882BF4DD1EA72578006D0D79 /* FounderButton.h */, - 882BF4DE1EA72578006D0D79 /* YTheNaviBar.a */, - 882BF4DF1EA72578006D0D79 /* YTheNaviBar.h */, - ); - path = FounderButton; - sourceTree = ""; - }; 882DF00B1EA70EF2009FF5D0 /* LSemTMFSet */ = { isa = PBXGroup; children = ( @@ -8968,13 +10069,13 @@ 883E76461D48A5E50030E075 /* controllers */ = { isa = PBXGroup; children = ( + 3D1C4F00221A9EDD0096AE43 /* IfishYooseeFile */, 3D344796212CF49300CF3941 /* HotBar */, 883E79001D48A74F0030E075 /* erweima */, 883E76471D48A5E50030E075 /* BaseVIewContorller */, 883E764C1D48A5E50030E075 /* FishTinkController */, 883E76DA1D48A5E50030E075 /* ICSDrawerController */, 883E76DF1D48A5E50030E075 /* IfishTabControllers */, - 883E771D1D48A5E50030E075 /* IfishYooseeFile */, 883E780A1D48A5E50030E075 /* leftcontrollers */, 883E78211D48A5E50030E075 /* logAddRegistController */, ); @@ -9463,245 +10564,6 @@ path = "设备"; sourceTree = ""; }; - 883E771D1D48A5E50030E075 /* IfishYooseeFile */ = { - isa = PBXGroup; - children = ( - 88D0F21D1EA646E100286022 /* IfishYsooseeNewLib */, - 883E771E1D48A5E50030E075 /* IfishYooseeControlller */, - 883E77471D48A5E50030E075 /* IfishYooseeHelper */, - 883E77B01D48A5E50030E075 /* IfishYooseeSource */, - ); - path = IfishYooseeFile; - sourceTree = ""; - }; - 883E771E1D48A5E50030E075 /* IfishYooseeControlller */ = { - isa = PBXGroup; - children = ( - 886E54821DF5103B0001D653 /* IfishP2PPlayBack */, - 8856B0ED1DED7E84009D384A /* IfishcameraBottomHView */, - 883E771F1D48A5E50030E075 /* IfishCameraModel.h */, - 883E77201D48A5E50030E075 /* IfishCameraModel.m */, - 883E77211D48A5E50030E075 /* IfishP2PMonitorController.h */, - 883E77221D48A5E50030E075 /* IfishP2PMonitorController.m */, - 883E77251D48A5E50030E075 /* ScreenShotView */, - 883E772E1D48A5E50030E075 /* YooseConnectFirstViewController.h */, - 883E772F1D48A5E50030E075 /* YooseConnectFirstViewController.m */, - 883E77301D48A5E50030E075 /* YooseeCenterViewCell.h */, - 883E77311D48A5E50030E075 /* YooseeCenterViewCell.m */, - 883E77321D48A5E50030E075 /* YooseeCenterViewCell.xib */, - 883E77331D48A5E50030E075 /* YooseeCenterViewController.h */, - 883E77341D48A5E50030E075 /* YooseeCenterViewController.m */, - 883E77351D48A5E50030E075 /* YooseeNextConnectViewController.h */, - 883E77361D48A5E50030E075 /* YooseeNextConnectViewController.mm */, - 883E77371D48A5E50030E075 /* yooseFishTankView */, - ); - path = IfishYooseeControlller; - sourceTree = ""; - }; - 883E77251D48A5E50030E075 /* ScreenShotView */ = { - isa = PBXGroup; - children = ( - 883E77261D48A5E50030E075 /* KTPhotoView+SDWebImage.h */, - 883E77271D48A5E50030E075 /* KTPhotoView+SDWebImage.m */, - 883E77281D48A5E50030E075 /* KTThumbView+SDWebImage.h */, - 883E77291D48A5E50030E075 /* KTThumbView+SDWebImage.m */, - 883E772A1D48A5E50030E075 /* ShootImgDataSource.h */, - 883E772B1D48A5E50030E075 /* ShootImgDataSource.m */, - 883E772C1D48A5E50030E075 /* ShotScreenImgViewController.h */, - 883E772D1D48A5E50030E075 /* ShotScreenImgViewController.m */, - ); - path = ScreenShotView; - sourceTree = ""; - }; - 883E77371D48A5E50030E075 /* yooseFishTankView */ = { - isa = PBXGroup; - children = ( - 883E77381D48A5E50030E075 /* BootomViewSoketBackMasgConreol.h */, - 883E77391D48A5E50030E075 /* BootomViewSoketBackMasgConreol.m */, - 883E773A1D48A5E50030E075 /* ifishdeviceListCell.h */, - 883E773B1D48A5E50030E075 /* ifishdeviceListCell.m */, - 883E773C1D48A5E50030E075 /* MonitorBootmView.h */, - 883E773D1D48A5E50030E075 /* MonitorBootmView.m */, - 88673AFF1E1F3DA8001D5F49 /* FishTankBootmDataHelper.h */, - 88673B001E1F3DA9001D5F49 /* FishTankBootmDataHelper.m */, - 883E773E1D48A5E50030E075 /* YseeCollectionCell */, - ); - path = yooseFishTankView; - sourceTree = ""; - }; - 883E773E1D48A5E50030E075 /* YseeCollectionCell */ = { - isa = PBXGroup; - children = ( - 883E773F1D48A5E50030E075 /* FishControlFirstCell.h */, - 883E77401D48A5E50030E075 /* FishControlFirstCell.m */, - 883E77411D48A5E50030E075 /* FishControlFourthCell.h */, - 883E77421D48A5E50030E075 /* FishControlFourthCell.m */, - 883E77431D48A5E50030E075 /* FishControlSecondCell.h */, - 883E77441D48A5E50030E075 /* FishControlSecondCell.m */, - 883E77451D48A5E50030E075 /* FishControlThreedViewCell.h */, - 883E77461D48A5E50030E075 /* FishControlThreedViewCell.m */, - ); - path = YseeCollectionCell; - sourceTree = ""; - }; - 883E77471D48A5E50030E075 /* IfishYooseeHelper */ = { - isa = PBXGroup; - children = ( - 88D0F27E1EA7069B00286022 /* YooseeExtureLibs */, - 88721D941E0A1E680047B7B1 /* SVPullToRefresh */, - 88721D8A1E0A1B670047B7B1 /* P2pPalybackViewPicView */, - 88721D7C1E0913530047B7B1 /* FXBlurView.h */, - 88721D7D1E0913530047B7B1 /* FXBlurView.m */, - 88721D751E07EFEE0047B7B1 /* P2PClient.h */, - 88721D761E07EFEE0047B7B1 /* P2PClient.m */, - 88721D741E07EB0E0047B7B1 /* Constants.h */, - 8815D1F21E026B8B00BEA2DA /* View_Frame */, - 883E77481D48A5E50030E075 /* AccountResult.h */, - 883E77491D48A5E50030E075 /* AccountResult.m */, - 883E774A1D48A5E50030E075 /* Alarm.h */, - 883E774B1D48A5E50030E075 /* Alarm.m */, - 883E774C1D48A5E50030E075 /* CheckAlarmMessageResult.h */, - 883E774D1D48A5E50030E075 /* CheckAlarmMessageResult.m */, - 883E774E1D48A5E50030E075 /* CheckNewMessageResult.h */, - 883E774F1D48A5E50030E075 /* CheckNewMessageResult.m */, - 883E77501D48A5E50030E075 /* ConnectFailurePromptView.h */, - 883E77511D48A5E50030E075 /* ConnectFailurePromptView.m */, - 883E77531D48A5E50030E075 /* Contact.h */, - 883E77541D48A5E50030E075 /* Contact.m */, - 883E77551D48A5E50030E075 /* ContactDAO.h */, - 883E77561D48A5E50030E075 /* ContactDAO.m */, - 883E77571D48A5E50030E075 /* CustomBorderButton.h */, - 883E77581D48A5E50030E075 /* CustomBorderButton.m */, - 883E77591D48A5E50030E075 /* CustomTopBar.h */, - 883E775A1D48A5E50030E075 /* CustomTopBar.m */, - 883E775B1D48A5E50030E075 /* CustomView.h */, - 883E775C1D48A5E50030E075 /* CustomView.m */, - 883E775D1D48A5E50030E075 /* GetAlarmRecordResult.h */, - 883E775E1D48A5E50030E075 /* GetAlarmRecordResult.m */, - 883E775F1D48A5E50030E075 /* GetContactMessageResult.h */, - 883E77601D48A5E50030E075 /* GetContactMessageResult.m */, - 883E77611D48A5E50030E075 /* IfishYooseeP2PCore */, - 883E77811D48A5E50030E075 /* KTPhotoBrowser */, - 883E77901D48A5E50030E075 /* LocalDevice.h */, - 883E77911D48A5E50030E075 /* LocalDevice.m */, - 883E77921D48A5E50030E075 /* LoginResult.h */, - 883E77931D48A5E50030E075 /* LoginResult.m */, - 883E77941D48A5E50030E075 /* ModifyLoginPasswordResult.h */, - 883E77951D48A5E50030E075 /* ModifyLoginPasswordResult.m */, - 883E77961D48A5E50030E075 /* MPNotificationView */, - 883E77991D48A5E50030E075 /* NetManager.h */, - 883E779A1D48A5E50030E075 /* NetManager.m */, - 883E779B1D48A5E50030E075 /* OBGradientView */, - 883E779E1D48A5E50030E075 /* ProgressImageView.h */, - 883E779F1D48A5E50030E075 /* ProgressImageView.m */, - 883E77A01D48A5E50030E075 /* RegisterResult.h */, - 883E77A11D48A5E50030E075 /* RegisterResult.m */, - 883E77A21D48A5E50030E075 /* TabView.h */, - 883E77A31D48A5E50030E075 /* TabView.m */, - 883E77A41D48A5E50030E075 /* Toast+UIView.h */, - 883E77A51D48A5E50030E075 /* Toast+UIView.m */, - 883E77A61D48A5E50030E075 /* TouchButton.h */, - 883E77A71D48A5E50030E075 /* TouchButton.m */, - 883E77A81D48A5E50030E075 /* UDManager.h */, - 883E77A91D48A5E50030E075 /* UDManager.m */, - 883E77AA1D48A5E50030E075 /* Utils.h */, - 883E77AB1D48A5E50030E075 /* Utils.m */, - 883E77AC1D48A5E50030E075 /* WaitingPageView.h */, - 883E77AD1D48A5E50030E075 /* WaitingPageView.m */, - 883E77AE1D48A5E50030E075 /* YProgressView.h */, - 883E77AF1D48A5E50030E075 /* YProgressView.m */, - ); - path = IfishYooseeHelper; - sourceTree = ""; - }; - 883E77611D48A5E50030E075 /* IfishYooseeP2PCore */ = { - isa = PBXGroup; - children = ( - 88721D721E07E8770047B7B1 /* mesg.h */, - 8815D20C1E03CC6300BEA2DA /* OpenGLView.h */, - 8815D20D1E03CC6300BEA2DA /* OpenGLView.mm */, - 8815D2091E03B64A00BEA2DA /* ShapeRenderNotifyMsg.h */, - 8815D20A1E03B64A00BEA2DA /* ShapeRenderNotifyMsg.mm */, - 883E77621D48A5E50030E075 /* AlarmDAO.h */, - 883E77631D48A5E50030E075 /* AlarmDAO.m */, - 883E77641D48A5E50030E075 /* CameraManager.h */, - 883E77651D48A5E50030E075 /* CameraManager.m */, - 883E77661D48A5E50030E075 /* config.h */, - 883E77671D48A5E50030E075 /* des2.c */, - 883E77681D48A5E50030E075 /* des2.h */, - 883E77691D48A5E50030E075 /* FListManager.h */, - 883E776A1D48A5E50030E075 /* FListManager.m */, - 883E776C1D48A5E50030E075 /* Message.h */, - 883E776D1D48A5E50030E075 /* Message.m */, - 883E776E1D48A5E50030E075 /* MessageDAO.h */, - 883E776F1D48A5E50030E075 /* MessageDAO.m */, - 883E77731D48A5E50030E075 /* PAIOUnit.h */, - 883E77741D48A5E50030E075 /* PAIOUnit.m */, - 883E77751D48A5E50030E075 /* ParamDao.h */, - 883E77761D48A5E50030E075 /* ParamDao.m */, - 883E77771D48A5E50030E075 /* RecommendInfo.h */, - 883E77781D48A5E50030E075 /* RecommendInfo.m */, - 883E77791D48A5E50030E075 /* RecommendInfoDAO.h */, - 883E777A1D48A5E50030E075 /* RecommendInfoDAO.m */, - 883E777B1D48A5E50030E075 /* ShakeManager.h */, - 883E777C1D48A5E50030E075 /* ShakeManager.m */, - 883E777D1D48A5E50030E075 /* UDPManager.h */, - 883E777E1D48A5E50030E075 /* UDPManager.m */, - 883E777F1D48A5E50030E075 /* YAudioStreamPlayer.h */, - 883E77801D48A5E50030E075 /* YAudioStreamPlayer.m */, - ); - path = IfishYooseeP2PCore; - sourceTree = ""; - }; - 883E77811D48A5E50030E075 /* KTPhotoBrowser */ = { - isa = PBXGroup; - children = ( - 883E77821D48A5E50030E075 /* KTPhotoBrowser.bundle */, - 883E77831D48A5E50030E075 /* KTPhotoBrowserDataSource.h */, - 883E77841D48A5E50030E075 /* KTPhotoBrowserGlobal.h */, - 883E77851D48A5E50030E075 /* KTPhotoBrowserGlobal.m */, - 883E77861D48A5E50030E075 /* KTPhotoScrollViewController.h */, - 883E77871D48A5E50030E075 /* KTPhotoScrollViewController.m */, - 883E77881D48A5E50030E075 /* KTPhotoView.h */, - 883E77891D48A5E50030E075 /* KTPhotoView.m */, - 883E778A1D48A5E50030E075 /* KTThumbsView.h */, - 883E778B1D48A5E50030E075 /* KTThumbsView.m */, - 883E778C1D48A5E50030E075 /* KTThumbsViewController.h */, - 883E778D1D48A5E50030E075 /* KTThumbsViewController.m */, - 883E778E1D48A5E50030E075 /* KTThumbView.h */, - 883E778F1D48A5E50030E075 /* KTThumbView.m */, - ); - path = KTPhotoBrowser; - sourceTree = ""; - }; - 883E77961D48A5E50030E075 /* MPNotificationView */ = { - isa = PBXGroup; - children = ( - 883E77971D48A5E50030E075 /* MPNotificationView.h */, - 883E77981D48A5E50030E075 /* MPNotificationView.m */, - ); - path = MPNotificationView; - sourceTree = ""; - }; - 883E779B1D48A5E50030E075 /* OBGradientView */ = { - isa = PBXGroup; - children = ( - 883E779C1D48A5E50030E075 /* OBGradientView.h */, - 883E779D1D48A5E50030E075 /* OBGradientView.m */, - ); - path = OBGradientView; - sourceTree = ""; - }; - 883E77B01D48A5E50030E075 /* IfishYooseeSource */ = { - isa = PBXGroup; - children = ( - 883E77B11D48A5E50030E075 /* Common-Configuration.plist */, - 883E77B21D48A5E50030E075 /* IFISHYooseeImg.bundle */, - 883E79CE1D48B7120030E075 /* Localizable.strings */, - ); - path = IfishYooseeSource; - sourceTree = ""; - }; 883E780A1D48A5E50030E075 /* leftcontrollers */ = { isa = PBXGroup; children = ( @@ -10116,35 +10978,6 @@ path = IfishHomeAdVIew; sourceTree = ""; }; - 8856B0ED1DED7E84009D384A /* IfishcameraBottomHView */ = { - isa = PBXGroup; - children = ( - 8856B0EE1DED7EB9009D384A /* CameraBottomHView.h */, - 8856B0EF1DED7EB9009D384A /* CameraBottomHView.m */, - 8856B0F11DEE9FC7009D384A /* CameraBottomCollectionViewCell.h */, - 8856B0F21DEE9FC7009D384A /* CameraBottomCollectionViewCell.m */, - 8856B0F31DEE9FC7009D384A /* CameraBottomCollectionViewCell.xib */, - 8815D1171DF6908800BEA2DA /* IfishRecVideoViewCell.h */, - 8815D1181DF6908800BEA2DA /* IfishRecVideoViewCell.m */, - 8815D1191DF6908800BEA2DA /* IfishRecVideoViewCell.xib */, - 8815D1221DFA8A6500BEA2DA /* CameraRecordViewController.h */, - 8815D1231DFA8A6500BEA2DA /* CameraRecordViewController.m */, - 8815D1251DFAACED00BEA2DA /* IfishCameraRecordfirstCell.h */, - 8815D1261DFAACED00BEA2DA /* IfishCameraRecordfirstCell.m */, - 8815D1271DFAACED00BEA2DA /* IfishCameraRecordfirstCell.xib */, - 8815D12A1DFAADA800BEA2DA /* IfishCameraRecordSecondCell.h */, - 8815D12B1DFAADA800BEA2DA /* IfishCameraRecordSecondCell.m */, - 8815D12C1DFAADA800BEA2DA /* IfishCameraRecordSecondCell.xib */, - 8815D12F1DFAADC300BEA2DA /* IfishCameraRecordThirdCell.h */, - 8815D1301DFAADC300BEA2DA /* IfishCameraRecordThirdCell.m */, - 8815D1311DFAADC300BEA2DA /* IfishCameraRecordThirdCell.xib */, - 8815D1481E0144AA00BEA2DA /* IfishCameraRecordFourCell.h */, - 8815D1491E0144AA00BEA2DA /* IfishCameraRecordFourCell.m */, - 8815D14A1E0144AA00BEA2DA /* IfishCameraRecordFourCell.xib */, - ); - path = IfishcameraBottomHView; - sourceTree = ""; - }; 88591ED71D655B9E00A1316E /* ChinaPlckerView */ = { isa = PBXGroup; children = ( @@ -12111,26 +12944,6 @@ path = shopCertification; sourceTree = ""; }; - 886E54821DF5103B0001D653 /* IfishP2PPlayBack */ = { - isa = PBXGroup; - children = ( - 88721D871E0A1ACC0047B7B1 /* P2PPlaybackController.h */, - 88721D881E0A1ACC0047B7B1 /* P2PPlaybackController.m */, - 8815D2031E037AFD00BEA2DA /* P2PPlayingbackVC.h */, - 8815D2041E037AFD00BEA2DA /* P2PPlayingbackVC.m */, - 886E54831DF64DDB0001D653 /* IfishP2PPlayBackListViewController.h */, - 886E54841DF64DDB0001D653 /* IfishP2PPlayBackListViewController.m */, - 8815D13A1DFF892A00BEA2DA /* CameraNoParyBackVideoView.h */, - 8815D13B1DFF892A00BEA2DA /* CameraNoParyBackVideoView.m */, - 8815D13D1DFFC1EA00BEA2DA /* IfishPlaybackViewCell.h */, - 8815D13E1DFFC1EA00BEA2DA /* IfishPlaybackViewCell.m */, - 8815D13F1DFFC1EA00BEA2DA /* IfishPlaybackViewCell.xib */, - 8815D2061E037B7700BEA2DA /* PlayBaseViewController.h */, - 8815D2071E037B7700BEA2DA /* PlayBaseViewController.m */, - ); - path = IfishP2PPlayBack; - sourceTree = ""; - }; 886E6A4F1D893870009C7724 /* SVProgressHUD */ = { isa = PBXGroup; children = ( @@ -12424,31 +13237,6 @@ path = IfishDeviceSelectList; sourceTree = ""; }; - 88721D8A1E0A1B670047B7B1 /* P2pPalybackViewPicView */ = { - isa = PBXGroup; - children = ( - 88721D8B1E0A1B670047B7B1 /* CyclePickerView.h */, - 88721D8C1E0A1B670047B7B1 /* CyclePickerView.m */, - 88721D8D1E0A1B670047B7B1 /* MXSCycleScrollView.h */, - 88721D8E1E0A1B670047B7B1 /* MXSCycleScrollView.m */, - 88721D8F1E0A1B670047B7B1 /* MXSCycleScrollView3.h */, - 88721D901E0A1B670047B7B1 /* MXSCycleScrollView3.m */, - ); - path = P2pPalybackViewPicView; - sourceTree = ""; - }; - 88721D941E0A1E680047B7B1 /* SVPullToRefresh */ = { - isa = PBXGroup; - children = ( - 88721D951E0A1E680047B7B1 /* SVPullToRefresh.bundle */, - 88721D961E0A1E680047B7B1 /* SVPullToRefresh.h */, - 88721D971E0A1E680047B7B1 /* SVPullToRefresh.m */, - 88721D981E0A1E680047B7B1 /* UIScrollView+SVInfiniteScrolling.h */, - 88721D991E0A1E680047B7B1 /* UIScrollView+SVInfiniteScrolling.m */, - ); - path = SVPullToRefresh; - sourceTree = ""; - }; 8872B63F1D7E649A00D47C75 /* LXShareView */ = { isa = PBXGroup; children = ( @@ -12567,15 +13355,6 @@ path = View; sourceTree = ""; }; - 8873613F1F0231FC00259A92 /* libAVCtrlIOS */ = { - isa = PBXGroup; - children = ( - 887361401F0231FC00259A92 /* libAVCtrl.a */, - 887361411F0231FC00259A92 /* P2PCInterface.h */, - ); - path = libAVCtrlIOS; - sourceTree = ""; - }; 887491C61E77CF0D00CDA284 /* IfishMineGold */ = { isa = PBXGroup; children = ( @@ -13225,7 +14004,6 @@ isa = PBXGroup; children = ( 88C685E51EA603A8004CDFD9 /* libWeChatSDK.a */, - 88C685E61EA603A8004CDFD9 /* README.txt */, 88C685E71EA603A8004CDFD9 /* WechatAuthSDK.h */, 88C685E81EA603A8004CDFD9 /* WXApi.h */, 88C685E91EA603A8004CDFD9 /* WXApiObject.h */, @@ -13260,18 +14038,6 @@ path = UMSocialUI; sourceTree = ""; }; - 88C686021EA60691004CDFD9 /* BMKMap3.3.0 */ = { - isa = PBXGroup; - children = ( - 88C686031EA60691004CDFD9 /* BaiduMapAPI_Base.framework */, - 88C686041EA60691004CDFD9 /* BaiduMapAPI_Location.framework */, - 88C686051EA60691004CDFD9 /* BaiduMapAPI_Map.framework */, - 88C686061EA60691004CDFD9 /* BaiduMapAPI_Search.framework */, - 88C686071EA60691004CDFD9 /* BaiduMapAPI_Utils.framework */, - ); - path = BMKMap3.3.0; - sourceTree = ""; - }; 88C6860D1EA60A40004CDFD9 /* TalkingDataV2.2.88 */ = { isa = PBXGroup; children = ( @@ -13285,9 +14051,11 @@ 88C686121EA60EA9004CDFD9 /* Frameworks */ = { isa = PBXGroup; children = ( - 88EE7AC41ECBF8EC00408C79 /* libstdc++.6.tbd */, + 3D4AFF6121F350820053BAA0 /* libstdc++.6.0.9.tbd */, + 3D4AFF5E21F34E1C0053BAA0 /* libstdc++.6.tbd */, + 3D4AFF5D21F34E1C0053BAA0 /* libstdc++.tbd */, + 3D39D31B21F34945001C50B6 /* libbz2.tbd */, 88EE7AC21ECBF8BE00408C79 /* libc++.1.tbd */, - 8857E43D1ECBE554004A3D75 /* libstdc++.tbd */, 8857E43B1ECBE53A004A3D75 /* libc++.tbd */, 88C6865F1EA612DE004CDFD9 /* Accelerate.framework */, 88C6865D1EA612D0004CDFD9 /* libz.tbd */, @@ -13315,7 +14083,6 @@ 88C6862D1EA610E5004CDFD9 /* JavaScriptCore.framework */, 88C6862B1EA610D2004CDFD9 /* AdSupport.framework */, 88C686291EA610C0004CDFD9 /* CoreMotion.framework */, - 88C686271EA610A6004CDFD9 /* libstdc++.6.0.9.tbd */, 88C686251EA61091004CDFD9 /* OpenAL.framework */, 88C686231EA61081004CDFD9 /* MediaToolbox.framework */, 88C686211EA6106E004CDFD9 /* MediaPlayer.framework */, @@ -13330,202 +14097,11 @@ name = Frameworks; sourceTree = ""; }; - 88D0F21D1EA646E100286022 /* IfishYsooseeNewLib */ = { - isa = PBXGroup; - children = ( - 8873613F1F0231FC00259A92 /* libAVCtrlIOS */, - 88D0F2241EA646E100286022 /* md5 */, - 88D0F2271EA646E100286022 /* rtsp */, - 88D0F26F1EA646E100286022 /* wifi */, - ); - path = IfishYsooseeNewLib; - sourceTree = ""; - }; - 88D0F2241EA646E100286022 /* md5 */ = { - isa = PBXGroup; - children = ( - 88D0F2251EA646E100286022 /* libMD5Manager.a */, - 88D0F2261EA646E100286022 /* MD5Manager.h */, - ); - path = md5; - sourceTree = ""; - }; - 88D0F2271EA646E100286022 /* rtsp */ = { - isa = PBXGroup; - children = ( - 88D0F2281EA646E100286022 /* ffmpeg */, - 88D0F2691EA646E100286022 /* FfmpegInterface.h */, - 88D0F26A1EA646E100286022 /* FfmpegInterface.m */, - 88D0F26B1EA646E100286022 /* libRTSP.a */, - 88D0F26C1EA646E100286022 /* Rtsp_instance.h */, - 88D0F26D1EA646E100286022 /* RtspInterface.h */, - 88D0F26E1EA646E100286022 /* RtspInterface.mm */, - ); - path = rtsp; - sourceTree = ""; - }; - 88D0F2281EA646E100286022 /* ffmpeg */ = { - isa = PBXGroup; - children = ( - 88D0F2291EA646E100286022 /* libavcodec */, - 88D0F2331EA646E100286022 /* libavformat */, - 88D0F2371EA646E100286022 /* libavutil */, - 88D0F2661EA646E100286022 /* libswscale */, - ); - path = ffmpeg; - sourceTree = ""; - }; - 88D0F2291EA646E100286022 /* libavcodec */ = { - isa = PBXGroup; - children = ( - 88D0F22A1EA646E100286022 /* avcodec.h */, - 88D0F22B1EA646E100286022 /* avfft.h */, - 88D0F22C1EA646E100286022 /* dxva2.h */, - 88D0F22D1EA646E100286022 /* old_codec_ids.h */, - 88D0F22E1EA646E100286022 /* vaapi.h */, - 88D0F22F1EA646E100286022 /* vda.h */, - 88D0F2301EA646E100286022 /* vdpau.h */, - 88D0F2311EA646E100286022 /* version.h */, - 88D0F2321EA646E100286022 /* xvmc.h */, - ); - path = libavcodec; - sourceTree = ""; - }; - 88D0F2331EA646E100286022 /* libavformat */ = { - isa = PBXGroup; - children = ( - 88D0F2341EA646E100286022 /* avformat.h */, - 88D0F2351EA646E100286022 /* avio.h */, - 88D0F2361EA646E100286022 /* version.h */, - ); - path = libavformat; - sourceTree = ""; - }; - 88D0F2371EA646E100286022 /* libavutil */ = { - isa = PBXGroup; - children = ( - 88D0F2381EA646E100286022 /* adler32.h */, - 88D0F2391EA646E100286022 /* aes.h */, - 88D0F23A1EA646E100286022 /* attributes.h */, - 88D0F23B1EA646E100286022 /* audio_fifo.h */, - 88D0F23C1EA646E100286022 /* audioconvert.h */, - 88D0F23D1EA646E100286022 /* avassert.h */, - 88D0F23E1EA646E100286022 /* avconfig.h */, - 88D0F23F1EA646E100286022 /* avstring.h */, - 88D0F2401EA646E100286022 /* avutil.h */, - 88D0F2411EA646E100286022 /* base64.h */, - 88D0F2421EA646E100286022 /* blowfish.h */, - 88D0F2431EA646E100286022 /* bprint.h */, - 88D0F2441EA646E100286022 /* bswap.h */, - 88D0F2451EA646E100286022 /* channel_layout.h */, - 88D0F2461EA646E100286022 /* common.h */, - 88D0F2471EA646E100286022 /* cpu.h */, - 88D0F2481EA646E100286022 /* crc.h */, - 88D0F2491EA646E100286022 /* dict.h */, - 88D0F24A1EA646E100286022 /* error.h */, - 88D0F24B1EA646E100286022 /* eval.h */, - 88D0F24C1EA646E100286022 /* fifo.h */, - 88D0F24D1EA646E100286022 /* file.h */, - 88D0F24E1EA646E100286022 /* hmac.h */, - 88D0F24F1EA646E100286022 /* imgutils.h */, - 88D0F2501EA646E100286022 /* intfloat.h */, - 88D0F2511EA646E100286022 /* intfloat_readwrite.h */, - 88D0F2521EA646E100286022 /* intreadwrite.h */, - 88D0F2531EA646E100286022 /* lfg.h */, - 88D0F2541EA646E100286022 /* log.h */, - 88D0F2551EA646E100286022 /* mathematics.h */, - 88D0F2561EA646E100286022 /* md5.h */, - 88D0F2571EA646E100286022 /* mem.h */, - 88D0F2581EA646E100286022 /* old_pix_fmts.h */, - 88D0F2591EA646E100286022 /* opt.h */, - 88D0F25A1EA646E100286022 /* parseutils.h */, - 88D0F25B1EA646E100286022 /* pixdesc.h */, - 88D0F25C1EA646E100286022 /* pixfmt.h */, - 88D0F25D1EA646E100286022 /* random_seed.h */, - 88D0F25E1EA646E100286022 /* rational.h */, - 88D0F25F1EA646E100286022 /* samplefmt.h */, - 88D0F2601EA646E100286022 /* sha.h */, - 88D0F2611EA646E100286022 /* time.h */, - 88D0F2621EA646E100286022 /* timecode.h */, - 88D0F2631EA646E100286022 /* timestamp.h */, - 88D0F2641EA646E100286022 /* version.h */, - 88D0F2651EA646E100286022 /* xtea.h */, - ); - path = libavutil; - sourceTree = ""; - }; - 88D0F2661EA646E100286022 /* libswscale */ = { - isa = PBXGroup; - children = ( - 88D0F2671EA646E100286022 /* swscale.h */, - 88D0F2681EA646E100286022 /* version.h */, - ); - path = libswscale; - sourceTree = ""; - }; - 88D0F26F1EA646E100286022 /* wifi */ = { - isa = PBXGroup; - children = ( - 88D0F2701EA646E100286022 /* elian.h */, - 88D0F2711EA646E100286022 /* libelian.a */, - ); - path = wifi; - sourceTree = ""; - }; - 88D0F27E1EA7069B00286022 /* YooseeExtureLibs */ = { - isa = PBXGroup; - children = ( - 882BF4DC1EA72578006D0D79 /* FounderButton */, - 88D0F2831EA7069B00286022 /* YFonc */, - 88D0F2861EA7069B00286022 /* YMsgBox */, - 88D0F2891EA7069B00286022 /* YSlider */, - 88D0F28C1EA7069B00286022 /* YTargetAndAction */, - ); - path = YooseeExtureLibs; - sourceTree = ""; - }; - 88D0F2831EA7069B00286022 /* YFonc */ = { - isa = PBXGroup; - children = ( - 88D0F2841EA7069B00286022 /* YFonc.a */, - 88D0F2851EA7069B00286022 /* YFonc.h */, - ); - path = YFonc; - sourceTree = ""; - }; - 88D0F2861EA7069B00286022 /* YMsgBox */ = { - isa = PBXGroup; - children = ( - 88D0F2871EA7069B00286022 /* YMsgBox.a */, - 88D0F2881EA7069B00286022 /* YMsgBox.h */, - ); - path = YMsgBox; - sourceTree = ""; - }; - 88D0F2891EA7069B00286022 /* YSlider */ = { - isa = PBXGroup; - children = ( - 88D0F28A1EA7069B00286022 /* YSlider.a */, - 88D0F28B1EA7069B00286022 /* YSlider.h */, - ); - path = YSlider; - sourceTree = ""; - }; - 88D0F28C1EA7069B00286022 /* YTargetAndAction */ = { - isa = PBXGroup; - children = ( - 88D0F28D1EA7069B00286022 /* YTargetAndAction.a */, - 88D0F28E1EA7069B00286022 /* YTargetAndAction.h */, - ); - path = YTargetAndAction; - sourceTree = ""; - }; 88F5ECA41D48C9C400CC7CAF /* ThirdPartUnity */ = { isa = PBXGroup; children = ( 88C49B491EA6270B002BA5A8 /* Bugly-v2.4.7 */, 88C6860D1EA60A40004CDFD9 /* TalkingDataV2.2.88 */, - 88C686021EA60691004CDFD9 /* BMKMap3.3.0 */, 88C685C81EA603A8004CDFD9 /* UMSocial */, 883E7BC81EA5FA1A00ED5D89 /* SMS_SDK */, 8872FFB51E9B300800406C1D /* AlibcTradeSDK-3.1.1.96+AlibcTradeBiz-3.1.1.96+AlibcTradeCommon-3.1.1.93+AlibcLinkPartnerSDK-1.1.0.9-FullPackage */, @@ -13614,17 +14190,17 @@ 88F5EEE81D48D04100CC7CAF /* libs */ = { isa = PBXGroup; children = ( + 3DD7AB8E21E474930064856A /* AsyncSocket */, + 3DD7AB2021E2F2FB0064856A /* ZbarSDK */, 88602D8D1E10D97E00F3DB5D /* SDWebImage3.8.2 */, 886E6A4F1D893870009C7724 /* SVProgressHUD */, 88F5EEE91D48D08000CC7CAF /* AFNet */, - 88F5EF101D48D08000CC7CAF /* AsyncSocket */, 88F5EF1B1D48D08000CC7CAF /* fmdb */, 88F5EF271D48D08000CC7CAF /* JHRefresh */, 88F5EF411D48D08100CC7CAF /* MBProgressHUD */, 88F5EF441D48D08100CC7CAF /* MMProgressHUD */, 88F5EF5A1D48D08100CC7CAF /* MyHelper */, 88F5EF5D1D48D08100CC7CAF /* Reachability */, - 88F5EF7E1D48D08100CC7CAF /* ZbarSDK */, ); name = libs; sourceTree = ""; @@ -13688,37 +14264,6 @@ path = "UIKit+AFNetworking"; sourceTree = ""; }; - 88F5EF101D48D08000CC7CAF /* AsyncSocket */ = { - isa = PBXGroup; - children = ( - 88F5EF111D48D08000CC7CAF /* GCD */, - 88F5EF161D48D08000CC7CAF /* RunLoop */, - ); - path = AsyncSocket; - sourceTree = ""; - }; - 88F5EF111D48D08000CC7CAF /* GCD */ = { - isa = PBXGroup; - children = ( - 88F5EF121D48D08000CC7CAF /* GCDAsyncSocket.h */, - 88F5EF131D48D08000CC7CAF /* GCDAsyncSocket.m */, - 88F5EF141D48D08000CC7CAF /* GCDAsyncUdpSocket.h */, - 88F5EF151D48D08000CC7CAF /* GCDAsyncUdpSocket.m */, - ); - path = GCD; - sourceTree = ""; - }; - 88F5EF161D48D08000CC7CAF /* RunLoop */ = { - isa = PBXGroup; - children = ( - 88F5EF171D48D08000CC7CAF /* AsyncSocket.h */, - 88F5EF181D48D08000CC7CAF /* AsyncSocket.m */, - 88F5EF191D48D08000CC7CAF /* AsyncUdpSocket.h */, - 88F5EF1A1D48D08000CC7CAF /* AsyncUdpSocket.m */, - ); - path = RunLoop; - sourceTree = ""; - }; 88F5EF1B1D48D08000CC7CAF /* fmdb */ = { isa = PBXGroup; children = ( @@ -13831,90 +14376,6 @@ path = Reachability; sourceTree = ""; }; - 88F5EF7E1D48D08100CC7CAF /* ZbarSDK */ = { - isa = PBXGroup; - children = ( - 88F5EF7F1D48D08100CC7CAF /* libqrencode */, - 88F5EF901D48D08100CC7CAF /* ZBarSDK */, - ); - path = ZbarSDK; - sourceTree = ""; - }; - 88F5EF7F1D48D08100CC7CAF /* libqrencode */ = { - isa = PBXGroup; - children = ( - 88F5EF801D48D08100CC7CAF /* bitstream.c */, - 88F5EF811D48D08100CC7CAF /* bitstream.h */, - 88F5EF821D48D08100CC7CAF /* mask.c */, - 88F5EF831D48D08100CC7CAF /* mask.h */, - 88F5EF841D48D08100CC7CAF /* QRCodeGenerator.h */, - 88F5EF851D48D08100CC7CAF /* QRCodeGenerator.m */, - 88F5EF861D48D08100CC7CAF /* qrencode.c */, - 88F5EF871D48D08100CC7CAF /* qrencode.h */, - 88F5EF881D48D08100CC7CAF /* qrinput.c */, - 88F5EF891D48D08100CC7CAF /* qrinput.h */, - 88F5EF8A1D48D08100CC7CAF /* qrspec.c */, - 88F5EF8B1D48D08100CC7CAF /* qrspec.h */, - 88F5EF8C1D48D08100CC7CAF /* rscode.c */, - 88F5EF8D1D48D08100CC7CAF /* rscode.h */, - 88F5EF8E1D48D08100CC7CAF /* split.c */, - 88F5EF8F1D48D08100CC7CAF /* split.h */, - ); - path = libqrencode; - sourceTree = ""; - }; - 88F5EF901D48D08100CC7CAF /* ZBarSDK */ = { - isa = PBXGroup; - children = ( - 88F5EF911D48D08100CC7CAF /* Headers */, - 88F5EFA81D48D08100CC7CAF /* libzbar.a */, - ); - path = ZBarSDK; - sourceTree = ""; - }; - 88F5EF911D48D08100CC7CAF /* Headers */ = { - isa = PBXGroup; - children = ( - 88F5EF921D48D08100CC7CAF /* ZBarSDK */, - ); - path = Headers; - sourceTree = ""; - }; - 88F5EF921D48D08100CC7CAF /* ZBarSDK */ = { - isa = PBXGroup; - children = ( - 88F5EF931D48D08100CC7CAF /* zbar */, - 88F5EF9D1D48D08100CC7CAF /* zbar.h */, - 88F5EF9E1D48D08100CC7CAF /* ZBarCameraSimulator.h */, - 88F5EF9F1D48D08100CC7CAF /* ZBarCaptureReader.h */, - 88F5EFA01D48D08100CC7CAF /* ZBarHelpController.h */, - 88F5EFA11D48D08100CC7CAF /* ZBarImage.h */, - 88F5EFA21D48D08100CC7CAF /* ZBarImageScanner.h */, - 88F5EFA31D48D08100CC7CAF /* ZBarReaderController.h */, - 88F5EFA41D48D08100CC7CAF /* ZBarReaderView.h */, - 88F5EFA51D48D08100CC7CAF /* ZBarReaderViewController.h */, - 88F5EFA61D48D08100CC7CAF /* ZBarSDK.h */, - 88F5EFA71D48D08100CC7CAF /* ZBarSymbol.h */, - ); - path = ZBarSDK; - sourceTree = ""; - }; - 88F5EF931D48D08100CC7CAF /* zbar */ = { - isa = PBXGroup; - children = ( - 88F5EF941D48D08100CC7CAF /* Decoder.h */, - 88F5EF951D48D08100CC7CAF /* Exception.h */, - 88F5EF961D48D08100CC7CAF /* Image.h */, - 88F5EF971D48D08100CC7CAF /* ImageScanner.h */, - 88F5EF981D48D08100CC7CAF /* Processor.h */, - 88F5EF991D48D08100CC7CAF /* Scanner.h */, - 88F5EF9A1D48D08100CC7CAF /* Symbol.h */, - 88F5EF9B1D48D08100CC7CAF /* Video.h */, - 88F5EF9C1D48D08100CC7CAF /* Window.h */, - ); - path = zbar; - sourceTree = ""; - }; E58C9981208195350004C42B /* RuiMei */ = { isa = PBXGroup; children = ( @@ -13946,11 +14407,186 @@ }; /* End PBXGroup section */ +/* Begin PBXHeadersBuildPhase section */ + 3D1C4C692216F2BF0096AE43 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 3D1C50F8221A9EE00096AE43 /* des2.h in Headers */, + 3D1C5058221A9EDF0096AE43 /* log.h in Headers */, + 3D1C5037221A9EDE0096AE43 /* elian.h in Headers */, + 3D1C508C221A9EDF0096AE43 /* Utils.h in Headers */, + 3D1C510C221A9EE00096AE43 /* CameraNoParyBackVideoView.h in Headers */, + 3D1C50BE221A9EE00096AE43 /* Constants.h in Headers */, + 3D1C5046221A9EDE0096AE43 /* avconfig.h in Headers */, + 3D1C50C5221A9EE00096AE43 /* UDManager.h in Headers */, + 3D1C510F221A9EE00096AE43 /* IfishP2PPlayBackListViewController.h in Headers */, + 3D1C507C221A9EDF0096AE43 /* P2PCInterface.h in Headers */, + 3D1C5116221A9EE00096AE43 /* KTPhotoView+SDWebImage.h in Headers */, + 3D1C5070221A9EDF0096AE43 /* vdpau.h in Headers */, + 3D1C50BB221A9EE00096AE43 /* RegisterResult.h in Headers */, + 3D1C5122221A9EE00096AE43 /* IfishRecVideoViewCell.h in Headers */, + 3D1C5137221A9EE10096AE43 /* ifishdeviceListCell.h in Headers */, + 3D1C5038221A9EDE0096AE43 /* MD5Manager.h in Headers */, + 3D1C5079221A9EDF0096AE43 /* RtspInterface.h in Headers */, + 3D1C5085221A9EDF0096AE43 /* KTPhotoBrowserGlobal.h in Headers */, + 3D1C50B6221A9EDF0096AE43 /* YSlider.h in Headers */, + 3D1C50CC221A9EE00096AE43 /* MPNotificationView.h in Headers */, + 3D1C50FF221A9EE00096AE43 /* YooseeCenterViewCell.h in Headers */, + 3D1C5041221A9EDE0096AE43 /* samplefmt.h in Headers */, + 3D1C50DC221A9EE00096AE43 /* PAIOUnit.h in Headers */, + 3D1C5050221A9EDF0096AE43 /* adler32.h in Headers */, + 3D1C506C221A9EDF0096AE43 /* version.h in Headers */, + 3D1C50E6221A9EE00096AE43 /* ParamDao.h in Headers */, + 3D1C5134221A9EE10096AE43 /* YooseeNextConnectViewController.h in Headers */, + 3D1C50BA221A9EE00096AE43 /* NetManager.h in Headers */, + 3D1C513A221A9EE10096AE43 /* FishControlFirstCell.h in Headers */, + 3D1C5060221A9EDF0096AE43 /* mem.h in Headers */, + 3D1C50EC221A9EE00096AE43 /* MessageDAO.h in Headers */, + 3D1C50E2221A9EE00096AE43 /* UDPManager.h in Headers */, + 3D1C509A221A9EDF0096AE43 /* ConnectFailurePromptView.h in Headers */, + 3D1C505F221A9EDF0096AE43 /* imgutils.h in Headers */, + 3D1C50B7221A9EDF0096AE43 /* YTargetAndAction.h in Headers */, + 3D1C505E221A9EDF0096AE43 /* channel_layout.h in Headers */, + 3D1C5047221A9EDE0096AE43 /* lfg.h in Headers */, + 3D1C510A221A9EE00096AE43 /* PlayBaseViewController.h in Headers */, + 3D1C50AA221A9EDF0096AE43 /* CyclePickerView.h in Headers */, + 3D1C50B1221A9EDF0096AE43 /* YMsgBox.h in Headers */, + 3D1C50BD221A9EE00096AE43 /* LoginResult.h in Headers */, + 3D1C504E221A9EDF0096AE43 /* audio_fifo.h in Headers */, + 3D1C5077221A9EDF0096AE43 /* FfmpegInterface.h in Headers */, + 3D1C5118221A9EE00096AE43 /* KTThumbView+SDWebImage.h in Headers */, + 3D1C50D0221A9EE00096AE43 /* GetAlarmRecordResult.h in Headers */, + 3D1C5044221A9EDE0096AE43 /* rational.h in Headers */, + 3D1C5064221A9EDF0096AE43 /* timestamp.h in Headers */, + 3D1C510B221A9EE00096AE43 /* IfishPlaybackViewCell.h in Headers */, + 3D1C50E1221A9EE00096AE43 /* FListManager.h in Headers */, + 3D1C5048221A9EDE0096AE43 /* avutil.h in Headers */, + 3D1C5072221A9EDF0096AE43 /* xvmc.h in Headers */, + 3D1C503A221A9EDE0096AE43 /* Rtsp_instance.h in Headers */, + 3D1C50CE221A9EE00096AE43 /* CustomTopBar.h in Headers */, + 3D1C5063221A9EDF0096AE43 /* pixfmt.h in Headers */, + 3D1C50DD221A9EE00096AE43 /* RecommendInfoDAO.h in Headers */, + 3D1C5055221A9EDF0096AE43 /* dict.h in Headers */, + 3D1C5090221A9EDF0096AE43 /* AccountResult.h in Headers */, + 3D1C50C9221A9EE00096AE43 /* ContactDAO.h in Headers */, + 3D1C503D221A9EDE0096AE43 /* error.h in Headers */, + 3D1C506D221A9EDF0096AE43 /* swscale.h in Headers */, + 3D1C50C0221A9EE00096AE43 /* Contact.h in Headers */, + 3D1C5100221A9EE00096AE43 /* IfishCameraModel.h in Headers */, + 3D1C505D221A9EDF0096AE43 /* audioconvert.h in Headers */, + 3D1C508D221A9EDF0096AE43 /* CustomBorderButton.h in Headers */, + 3D1C50AC221A9EDF0096AE43 /* CustomView.h in Headers */, + 3D1C50B4221A9EDF0096AE43 /* YTheNaviBar.h in Headers */, + 3D1C5121221A9EE00096AE43 /* CameraBottomCollectionViewCell.h in Headers */, + 3D1C50BC221A9EE00096AE43 /* P2PClient.h in Headers */, + 3D1C5115221A9EE00096AE43 /* ShotScreenImgViewController.h in Headers */, + 3D1C506F221A9EDF0096AE43 /* version.h in Headers */, + 3D1C5083221A9EDF0096AE43 /* KTThumbsViewController.h in Headers */, + 3D1C5040221A9EDE0096AE43 /* version.h in Headers */, + 3D1C50AF221A9EDF0096AE43 /* YFonc.h in Headers */, + 3D1C512B221A9EE10096AE43 /* IfishCameraRecordfirstCell.h in Headers */, + 3D1C5124221A9EE00096AE43 /* IfishCameraRecordThirdCell.h in Headers */, + 3D1C5045221A9EDE0096AE43 /* sha.h in Headers */, + 3D1C5057221A9EDF0096AE43 /* opt.h in Headers */, + 3D1C50D1221A9EE00096AE43 /* SVPullToRefresh.h in Headers */, + 3D1C5071221A9EDF0096AE43 /* vaapi.h in Headers */, + 3D1C504D221A9EDF0096AE43 /* md5.h in Headers */, + 3D1C513C221A9EE10096AE43 /* FishControlFourthCell.h in Headers */, + 3D1C506A221A9EDF0096AE43 /* avio.h in Headers */, + 3D1C5086221A9EDF0096AE43 /* KTThumbView.h in Headers */, + 3D1C50E5221A9EE00096AE43 /* ShakeManager.h in Headers */, + 3D1C5088221A9EDF0096AE43 /* KTThumbsView.h in Headers */, + 3D1C513F221A9EE10096AE43 /* FishControlThreedViewCell.h in Headers */, + 3D1C5062221A9EDF0096AE43 /* bprint.h in Headers */, + 3D1C505C221A9EDF0096AE43 /* cpu.h in Headers */, + 3D1C5051221A9EDF0096AE43 /* timecode.h in Headers */, + 3D1C50C7221A9EE00096AE43 /* LocalDevice.h in Headers */, + 3D1C50A0221A9EDF0096AE43 /* TouchButton.h in Headers */, + 3D1C50F2221A9EE00096AE43 /* mesg.h in Headers */, + 3D1C5049221A9EDE0096AE43 /* intfloat_readwrite.h in Headers */, + 3D1C507F221A9EDF0096AE43 /* KTPhotoBrowserDataSource.h in Headers */, + 3D1C50E9221A9EE00096AE43 /* AlarmDAO.h in Headers */, + 3D1C504C221A9EDF0096AE43 /* file.h in Headers */, + 3D1C50C4221A9EE00096AE43 /* OBGradientView.h in Headers */, + 3D1C509D221A9EDF0096AE43 /* GetContactMessageResult.h in Headers */, + 3D1C504A221A9EDE0096AE43 /* xtea.h in Headers */, + 3D1C5109221A9EE00096AE43 /* P2PPlaybackController.h in Headers */, + 3D1C50B9221A9EDF0096AE43 /* CheckNewMessageResult.h in Headers */, + 3D1C503B221A9EDE0096AE43 /* time.h in Headers */, + 3D1C5052221A9EDF0096AE43 /* common.h in Headers */, + 3D1C5095221A9EDF0096AE43 /* Alarm.h in Headers */, + 3D1C506E221A9EDF0096AE43 /* avcodec.h in Headers */, + 3D1C5145221A9EE10096AE43 /* BootomViewSoketBackMasgConreol.h in Headers */, + 3D1C5146221A9EE10096AE43 /* FishTankBootmDataHelper.h in Headers */, + 3D1C506B221A9EDF0096AE43 /* avformat.h in Headers */, + 3D1C50A2221A9EDF0096AE43 /* UIViewExt.h in Headers */, + 3D1C50E8221A9EE00096AE43 /* Message.h in Headers */, + 3D1C5101221A9EE00096AE43 /* IfishP2PMonitorController.h in Headers */, + 3D1C50F5221A9EE00096AE43 /* CameraManager.h in Headers */, + 3D1C5061221A9EDF0096AE43 /* parseutils.h in Headers */, + 3D1C5056221A9EDF0096AE43 /* random_seed.h in Headers */, + 3D1C50A3221A9EDF0096AE43 /* WaitingPageView.h in Headers */, + 3D1C505B221A9EDF0096AE43 /* old_pix_fmts.h in Headers */, + 3D1C505A221A9EDF0096AE43 /* bswap.h in Headers */, + 3D1C5069221A9EDF0096AE43 /* version.h in Headers */, + 3D1C504F221A9EDF0096AE43 /* attributes.h in Headers */, + 3D1C503C221A9EDE0096AE43 /* intfloat.h in Headers */, + 3D1C5042221A9EDE0096AE43 /* pixdesc.h in Headers */, + 3D1C50C6221A9EE00096AE43 /* TabView.h in Headers */, + 3D1C5073221A9EDF0096AE43 /* avfft.h in Headers */, + 3D1C50A7221A9EDF0096AE43 /* MXSCycleScrollView3.h in Headers */, + 3D1C5067221A9EDF0096AE43 /* intreadwrite.h in Headers */, + 3D1C50F0221A9EE00096AE43 /* RecommendInfo.h in Headers */, + 3D1C509C221A9EDF0096AE43 /* ModifyLoginPasswordResult.h in Headers */, + 3D1C512E221A9EE10096AE43 /* CameraBottomHView.h in Headers */, + 3D1C50E4221A9EE00096AE43 /* config.h in Headers */, + 3D1C5104221A9EE00096AE43 /* YooseConnectFirstViewController.h in Headers */, + 3D1C503F221A9EDE0096AE43 /* blowfish.h in Headers */, + 3D1C5127221A9EE00096AE43 /* IfishCameraRecordSecondCell.h in Headers */, + 3D1C50D9221A9EE00096AE43 /* CheckAlarmMessageResult.h in Headers */, + 3D1C50E0221A9EE00096AE43 /* ShapeRenderNotifyMsg.h in Headers */, + 3D1C5125221A9EE00096AE43 /* IfishCameraRecordFourCell.h in Headers */, + 3D1C503E221A9EDE0096AE43 /* fifo.h in Headers */, + 3D1C5075221A9EDF0096AE43 /* dxva2.h in Headers */, + 3D1C5139221A9EE10096AE43 /* FishControlSecondCell.h in Headers */, + 3D1C50B2221A9EDF0096AE43 /* FounderButton.h in Headers */, + 3D1C509F221A9EDF0096AE43 /* YProgressView.h in Headers */, + 3D1C5076221A9EDF0096AE43 /* old_codec_ids.h in Headers */, + 3D1C5068221A9EDF0096AE43 /* avstring.h in Headers */, + 3D1C5144221A9EE10096AE43 /* MonitorBootmView.h in Headers */, + 3D1C50D3221A9EE00096AE43 /* UIScrollView+SVInfiniteScrolling.h in Headers */, + 3D1C5089221A9EDF0096AE43 /* KTPhotoView.h in Headers */, + 3D1C5074221A9EDF0096AE43 /* vda.h in Headers */, + 3D1C5066221A9EDF0096AE43 /* mathematics.h in Headers */, + 3D1C511B221A9EE00096AE43 /* ShootImgDataSource.h in Headers */, + 3D1C50FE221A9EE00096AE43 /* Toast+UIView.h in Headers */, + 3D1C5132221A9EE10096AE43 /* CameraRecordViewController.h in Headers */, + 3D1C50A9221A9EDF0096AE43 /* MXSCycleScrollView.h in Headers */, + 3D1C50FB221A9EE00096AE43 /* ProgressImageView.h in Headers */, + 3D1C5054221A9EDF0096AE43 /* eval.h in Headers */, + 3D1C508B221A9EDF0096AE43 /* KTPhotoScrollViewController.h in Headers */, + 3D1C5059221A9EDF0096AE43 /* aes.h in Headers */, + 3D1C50DB221A9EE00096AE43 /* YAudioStreamPlayer.h in Headers */, + 3D1C50E3221A9EE00096AE43 /* OpenGLView.h in Headers */, + 3D1C5105221A9EE00096AE43 /* YooseeCenterViewController.h in Headers */, + 3D1C5108221A9EE00096AE43 /* P2PPlayingbackVC.h in Headers */, + 3D1C5053221A9EDF0096AE43 /* hmac.h in Headers */, + 3D1C50AD221A9EDF0096AE43 /* FXBlurView.h in Headers */, + 3D1C5043221A9EDE0096AE43 /* base64.h in Headers */, + 3D1C504B221A9EDF0096AE43 /* crc.h in Headers */, + 3D1C5065221A9EDF0096AE43 /* avassert.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + /* Begin PBXNativeTarget section */ 8876A5821BB83447007A4B54 /* Ifish */ = { isa = PBXNativeTarget; buildConfigurationList = 8876A5B01BB83448007A4B54 /* Build configuration list for PBXNativeTarget "Ifish" */; buildPhases = ( + 3D1C4C692216F2BF0096AE43 /* Headers */, 8876A57F1BB83447007A4B54 /* Sources */, 8876A5801BB83447007A4B54 /* Frameworks */, 8876A5811BB83447007A4B54 /* Resources */, @@ -14007,13 +14643,12 @@ 8876A57B1BB83447007A4B54 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0700; + LastUpgradeCheck = 1010; ORGANIZATIONNAME = lianlian; TargetAttributes = { 8876A5821BB83447007A4B54 = { CreatedOnToolsVersion = 7.0; - DevelopmentTeam = WFX8GD5HFX; - ProvisioningStyle = Automatic; + ProvisioningStyle = Manual; SystemCapabilities = { com.apple.BackgroundModes = { enabled = 1; @@ -14112,7 +14747,6 @@ 88C1B1EF1DC9AF3700C2C99A /* home_iocnmydevice@3x.png in Resources */, 8829560A1DBDA3A100E9DDD7 /* neves0013.png in Resources */, 8891332F1ECE99B900F52EBC /* retake_iocn_start@2x.png in Resources */, - 88721D9A1E0A1E680047B7B1 /* SVPullToRefresh.bundle in Resources */, 881477CA1E6F9D8500BFB79C /* signin_popup_obtain_button.png in Resources */, 88C1B2131DCC5A1400C2C99A /* personal_iocn_about@3x.png in Resources */, 88C1B21F1DCC5A1400C2C99A /* personal_iocn_scan@3x.png in Resources */, @@ -14133,6 +14767,8 @@ 8815D1EE1E02662600BEA2DA /* FullPlay_Speed_down.png in Resources */, 885FBDC71E4C0CB400E0D7D1 /* explore_iocn_care.png in Resources */, 8839BAE61EC5496000CA62CF /* IFishUserActivityListCell.xib in Resources */, + 3D1C5149221A9EE10096AE43 /* Common-Configuration.plist in Resources */, + 3D1C5128221A9EE10096AE43 /* IfishCameraRecordThirdCell.xib in Resources */, 882956EB1DBDA3A300E9DDD7 /* ifish_yoosee_logo.png in Resources */, 882956CB1DBDA3A300E9DDD7 /* ifishdropview_add_device.png in Resources */, 8829578A1DBDA3A400E9DDD7 /* xutobgm@3x.png in Resources */, @@ -14190,7 +14826,6 @@ 881477D21E6FAE0200BFB79C /* signin_prompt@2x.png in Resources */, 883E79CB1D48B0280030E075 /* TemperatureSetCell.xib in Resources */, 889133211ECE99B900F52EBC /* record_iocn_start@3x.png in Resources */, - 8856B0F51DEE9FC7009D384A /* CameraBottomCollectionViewCell.xib in Resources */, 88C1B2201DCC5A1400C2C99A /* personal_iocn_switch.png in Resources */, 882956691DBDA3A200E9DDD7 /* minelook_buy.png in Resources */, E5212236210760A700BA24C5 /* SettingResetViewController.xib in Resources */, @@ -14277,6 +14912,7 @@ 88C1B2141DCC5A1400C2C99A /* personal_iocn_feedback.png in Resources */, 8871C4AA1E6D507B000AA49F /* signin_strategy@3x.png in Resources */, 882957A41DBDA3A400E9DDD7 /* xutobtn5_off@2x.png in Resources */, + 3D1C5067215CB6E300A2E5D6 /* IfishHotBarHeader.xib in Resources */, 882957C21DBDF3C700E9DDD7 /* registered_icon_tick_selected@2x.png in Resources */, 8874923A1E7A90D000CDA284 /* fishdoctor_iocn_default_twentygold@3x.png in Resources */, 883283791EAF362600A47157 /* exploregold_coast.png in Resources */, @@ -14293,6 +14929,7 @@ 883E79C91D48B0280030E075 /* SetTimeCell.xib in Resources */, 882956411DBDA3A200E9DDD7 /* device_upbanner@2x.png in Resources */, 889C14F51EA7397B00470F50 /* personal_iocn_set@3x.png in Resources */, + 3D1C5087221A9EDF0096AE43 /* KTPhotoBrowser.bundle in Resources */, 882956FA1DBDA3A300E9DDD7 /* guidengCell_back.png in Resources */, 88742AED1EF7C792006BF401 /* window_heating.png in Resources */, 883517F61E6664D200FCBE56 /* fishrank_dragonking@2x.png in Resources */, @@ -14341,6 +14978,7 @@ 88F23F2D1EA9D18700E4D298 /* live_label_v.png in Resources */, 8815D1ED1E02662600BEA2DA /* FullPlay_Speed.png in Resources */, 8829572A1DBDA3A300E9DDD7 /* swimmingfish0025.png in Resources */, + 3D1C5147221A9EE10096AE43 /* Localizable.strings in Resources */, 88C1B1F51DC9E2C600C2C99A /* device_downbanner@3x.png in Resources */, 8816721D1EA5DE2B00BEBF23 /* UMComSimplicityFindTableViewCell.xib in Resources */, 882957AA1DBDA3A400E9DDD7 /* xutobtn6_off@2x.png in Resources */, @@ -14388,6 +15026,7 @@ 880707461DDD3EF50076F65A /* P2PShareView1Cell.xib in Resources */, 882957071DBDA3A300E9DDD7 /* PFPump_on.png in Resources */, 881478301E712A2700BFB79C /* task_shareLookReport@3x.png in Resources */, + 3D1C5102221A9EE00096AE43 /* YooseeCenterViewCell.xib in Resources */, 882956AB1DBDA3A200E9DDD7 /* left@2x.png in Resources */, 882956FF1DBDA3A300E9DDD7 /* NewPiFu_beiyongon.png in Resources */, 88C1B21A1DCC5A1400C2C99A /* personal_iocn_replace.png in Resources */, @@ -14431,19 +15070,16 @@ 882957621DBDA3A300E9DDD7 /* ifisharrow_r@1x.png in Resources */, 886B80791D63114500E1B9B3 /* CertificationViewThirdCell.xib in Resources */, 886484461EE171D30046C3BD /* redact_line_pointgray@2x.png in Resources */, - 883E78C71D48A5E50030E075 /* KTPhotoBrowser.bundle in Resources */, 882957161DBDA3A300E9DDD7 /* swimmingfish0005.png in Resources */, 8869B3B31E696A280010F099 /* levelUp_fish@3x.png in Resources */, 881672311EA5DE2B00BEBF23 /* UMComFeedDetailTableViewCell.xib in Resources */, 88602F281E12002500F3DB5D /* NTESSearchTeamViewController.xib in Resources */, 882956EC1DBDA3A300E9DDD7 /* leftBlack.png in Resources */, - 883E78DD1D48A5E50030E075 /* Common-Configuration.plist in Resources */, 882956361DBDA3A200E9DDD7 /* neves0057.png in Resources */, 8872FFDD1E9B300800406C1D /* NBResource.bundle in Resources */, 8867F5D21E656F9100AF021C /* rank_iocn_explain.png in Resources */, 8876A5931BB83447007A4B54 /* Assets.xcassets in Resources */, 882957B41DBDD6AC00E9DDD7 /* password.png in Resources */, - 8815D1411DFFC1EA00BEA2DA /* IfishPlaybackViewCell.xib in Resources */, 88742C391D63FA060074F1F8 /* CertifyListThridCell.xib in Resources */, 883517F11E6664D200FCBE56 /* fishrank_crab@3x.png in Resources */, 8829574D1DBDA3A300E9DDD7 /* swimmingfish0060.png in Resources */, @@ -14576,7 +15212,6 @@ 8829562E1DBDA3A200E9DDD7 /* neves0049.png in Resources */, 8829561E1DBDA3A100E9DDD7 /* neves0033.png in Resources */, 8891333A1ECEB97D00F52EBC /* VideoEditeNameViewCell.xib in Resources */, - 8816719C1EA5DE2B00BEBF23 /* README.txt in Resources */, 8868FE5C1E66C8D7002F7F33 /* DengJiShuoMingViewBootomCell.xib in Resources */, 885E6FBE1E2F112200D4CE13 /* businesslistings_comments.png in Resources */, 8849EFB91EB883840096CAD7 /* enter_logo.png in Resources */, @@ -14600,6 +15235,7 @@ 882956A11DBDA3A200E9DDD7 /* backpress@2x.png in Resources */, 88C1B21D1DCC5A1400C2C99A /* personal_iocn_scan.png in Resources */, 8815D1E31E02662500BEA2DA /* FullPlay_Pause.png in Resources */, + 3D1C5126221A9EE00096AE43 /* IfishCameraRecordfirstCell.xib in Resources */, 88613F731E5C1E86008D2C69 /* P2pShareLiveCommitCell.xib in Resources */, 882957461DBDA3A300E9DDD7 /* swimmingfish0053.png in Resources */, 882956A01DBDA3A200E9DDD7 /* authorize_qr.png in Resources */, @@ -14613,7 +15249,6 @@ 8829560D1DBDA3A100E9DDD7 /* neves0016.png in Resources */, 883283411EAEE60500A47157 /* ifish_facility_off@3x.png in Resources */, 886FB1B11E5AA02400256332 /* FIshDocsection1TableView2Cell.xib in Resources */, - 88C685FB1EA603A8004CDFD9 /* README.txt in Resources */, 886B806F1D6310F000E1B9B3 /* certificationViewFirstCell.xib in Resources */, 882957A81DBDA3A400E9DDD7 /* xutobtn5_on@3x.png in Resources */, 886B807E1D63116E00E1B9B3 /* CertificationViewFourthCell.xib in Resources */, @@ -14688,6 +15323,7 @@ 8814784B1E724FEE00BFB79C /* task_uploadHeadImg@3x.png in Resources */, 8815D1E71E02662500BEA2DA /* FullPlay_Previous.png in Resources */, 882C85AB1EB038D4001CC414 /* particulars_backgroud_ten.png in Resources */, + 3D1C511E221A9EE00096AE43 /* CameraBottomCollectionViewCell.xib in Resources */, 882957AC1DBDA3A400E9DDD7 /* xutobtn6_on@1x.png in Resources */, 885FBDD01E4C0CB400E0D7D1 /* explore_iocn_look.png in Resources */, 883E79C71D48B0280030E075 /* SetCell.xib in Resources */, @@ -14695,13 +15331,11 @@ 88602F251E12002500F3DB5D /* NTESJionTeamViewController.xib in Resources */, 887DA78D1D547A49001DB880 /* IfishTanSuoViewCell.xib in Resources */, 8829572D1DBDA3A300E9DDD7 /* swimmingfish0028.png in Resources */, - 8815D12E1DFAADA800BEA2DA /* IfishCameraRecordSecondCell.xib in Resources */, 8829576A1DBDA3A400E9DDD7 /* ifishmenu@3x.png in Resources */, 8829569F1DBDA3A200E9DDD7 /* account@2x.png in Resources */, 885FBE181E4D66C000E0D7D1 /* merchant_iocn_a_commodity@3x.png in Resources */, 8856B0E51DEC15F5009D384A /* home_popup_button@2x.png in Resources */, 887C16AD1ECAC10500515278 /* ShopGoodsListViewCell.xib in Resources */, - 8815D1331DFAADC300BEA2DA /* IfishCameraRecordThirdCell.xib in Resources */, 8860D79A1D6D89F2001E544C /* KanHuWorkHeaderViewCell.xib in Resources */, 882956B01DBDA3A200E9DDD7 /* refer_book.png in Resources */, 882956E61DBDA3A300E9DDD7 /* device_03.png in Resources */, @@ -14738,7 +15372,6 @@ 883517F01E6664D200FCBE56 /* fishrank_crab@2x.png in Resources */, 882956E31DBDA3A300E9DDD7 /* device_00.png in Resources */, 88D3372D1DC71EB5006C0ADB /* linkingdevice_line@3x.png in Resources */, - 8829575E1DBDA3A300E9DDD7 /* greenbtn_big.png in Resources */, 889133241ECE99B900F52EBC /* recording_backdrop@3x.png in Resources */, 88C1B2171DCC5A1400C2C99A /* personal_iocn_instructions.png in Resources */, 88591EE41D655B9E00A1316E /* china_citys_name.db in Resources */, @@ -14749,7 +15382,6 @@ 883517F81E6664D200FCBE56 /* fishrank_flyFish.png in Resources */, 88C1B2C91DD19F7800C2C99A /* Img_kankanuser.png in Resources */, 88C1B1E11DC9AF3700C2C99A /* home_iocn_add.png in Resources */, - 883E78DE1D48A5E50030E075 /* IFISHYooseeImg.bundle in Resources */, 8829562D1DBDA3A200E9DDD7 /* neves0048.png in Resources */, 883283A21EAF4C7300A47157 /* record_label_default@3x.png in Resources */, 882956401DBDA3A200E9DDD7 /* device_upbanner@1x.png in Resources */, @@ -14779,7 +15411,6 @@ 882C85B31EB03994001CC414 /* particulars_teb_ten@3x.png in Resources */, 886B805E1D62E13900E1B9B3 /* tanSuoPlist.plist in Resources */, 882956CA1DBDA3A300E9DDD7 /* Ifish_share_device.png in Resources */, - 883E79CC1D48B7120030E075 /* Localizable.strings in Resources */, 882956A71DBDA3A200E9DDD7 /* community_left@3x.png in Resources */, 886537481E24B70400E3C87F /* explore_new_label@3x.png in Resources */, 8871C4471E6D2819000AA49F /* QianDaoWayTitleViewCell.xib in Resources */, @@ -14832,7 +15463,6 @@ 882956CE1DBDA3A300E9DDD7 /* ifishnav_dropview_list.png in Resources */, 882956101DBDA3A100E9DDD7 /* neves0019.png in Resources */, 887492391E7A90D000CDA284 /* fishdoctor_iocn_default_twentygold@2x.png in Resources */, - 883E78A31D48A5E50030E075 /* YooseeCenterViewCell.xib in Resources */, 882957291DBDA3A300E9DDD7 /* swimmingfish0024.png in Resources */, 88742C2F1D63F9AB0074F1F8 /* CertifyListViewFirstCell.xib in Resources */, 883E783C1D48A5E50030E075 /* StoreViewController.xib in Resources */, @@ -14840,6 +15470,7 @@ E51D7D58208CE121001FF053 /* CustomModeSetCell.xib in Resources */, 882956A61DBDA3A200E9DDD7 /* community_left@2x.png in Resources */, 883E79181D48A74F0030E075 /* scanscanBg.png in Resources */, + 3D1C50D5221A9EE00096AE43 /* SVPullToRefresh.bundle in Resources */, 8871C4981E6D507B000AA49F /* signin_condition_await@3x.png in Resources */, 883283481EAEE60500A47157 /* ifish_look_on.png in Resources */, 883E79161D48A74F0030E075 /* scanLine@2x.png in Resources */, @@ -14866,9 +15497,9 @@ 886E6A561D893870009C7724 /* SVProgressHUD.bundle in Resources */, 881A1D201DD2C31500BA1AF4 /* kankaneditor_icon_photo.png in Resources */, 882957A21DBDA3A400E9DDD7 /* xutobtn4_on@3x.png in Resources */, + 3D3512DC2159C172009DDB0F /* IfishHotBarModifyNameVc.xib in Resources */, 8829577D1DBDA3A400E9DDD7 /* set_co2_off.png in Resources */, 883283AB1EAF4E8200A47157 /* goldconvert_recordline@3x.png in Resources */, - 881671BA1EA5DE2B00BEBF23 /* README.txt in Resources */, 8829581B1DC04ED200E9DDD7 /* equipment_point@2x.png in Resources */, 8867F5D71E656F9100AF021C /* rank_iocn_mark@3x.png in Resources */, 8832834A1EAEE60500A47157 /* ifish_look_on@3x.png in Resources */, @@ -14880,6 +15511,7 @@ 881671B21EA5DE2B00BEBF23 /* UMComLoginViewController.xib in Resources */, 882956F01DBDA3A300E9DDD7 /* bubble@2x.png in Resources */, 882955FA1DBDA3A100E9DDD7 /* set_.png in Resources */, + 3D1C511F221A9EE00096AE43 /* IfishRecVideoViewCell.xib in Resources */, 8829565C1DBDA3A200E9DDD7 /* certy_logo.png in Resources */, 883E78711D48A5E50030E075 /* pushmassage List.plist in Resources */, 88D337331DC71EB5006C0ADB /* linkingdevice_point@3x.png in Resources */, @@ -14941,6 +15573,7 @@ 8814782B1E712A2700BFB79C /* task_shareCameraPicture.png in Resources */, 8871C49E1E6D507B000AA49F /* signin_condition_gift@3x.png in Resources */, 882957671DBDA3A300E9DDD7 /* ifisharrow_rl@3x.png in Resources */, + 3D1C510D221A9EE00096AE43 /* IfishPlaybackViewCell.xib in Resources */, 8829576E1DBDA3A400E9DDD7 /* connect_cancle@2x.png in Resources */, 8829578B1DBDA3A400E9DDD7 /* xutobtn1_off@1x.png in Resources */, 882956011DBDA3A100E9DDD7 /* neves0004.png in Resources */, @@ -15072,8 +15705,6 @@ 88678C7E1E8CD8F40043DA55 /* livein_icon_comment@3x.png in Resources */, 8829563B1DBDA3A200E9DDD7 /* neves0062.png in Resources */, 882956DE1DBDA3A300E9DDD7 /* ifishdropview_delect_device@3x.png in Resources */, - 8815D11B1DF6908800BEA2DA /* IfishRecVideoViewCell.xib in Resources */, - 8815D1291DFAACED00BEA2DA /* IfishCameraRecordfirstCell.xib in Resources */, 8829565E1DBDA3A200E9DDD7 /* kanHu_telgray.png in Resources */, 88C1B1C21DC988FF00C2C99A /* home_message@3x.png in Resources */, 88696FF71E9CBC2E005D4AFB /* home_iocn_hotsell@2x.png in Resources */, @@ -15172,6 +15803,7 @@ 885FBDD21E4C0CB400E0D7D1 /* explore_iocn_look@3x.png in Resources */, 880708021DE812040076F65A /* live_sharechat_iocn.png in Resources */, 88613F751E5C1E86008D2C69 /* P2PShareViewFeedMessageCell.xib in Resources */, + 3D1C512A221A9EE10096AE43 /* IfishCameraRecordSecondCell.xib in Resources */, 8829574E1DBDA3A300E9DDD7 /* swimmingfish0061.png in Resources */, 882957531DBDA3A300E9DDD7 /* swimmingfish0066.png in Resources */, E56A746320FCDBFC000129C9 /* ConnectHotpotViewController.xib in Resources */, @@ -15197,6 +15829,7 @@ 882957381DBDA3A300E9DDD7 /* swimmingfish0039.png in Resources */, 885FBE031E4D5CD200E0D7D1 /* blackbar.png in Resources */, 8871FB031EBC63D30038E99A /* attestation_license.png in Resources */, + 3D8F64F4215797E700F04BD3 /* IQKeyboardManager.bundle in Resources */, 8871C4A61E6D507B000AA49F /* signin_condition_succeed@2x.png in Resources */, 88742C471D645CE70074F1F8 /* shopCertification.html in Resources */, 886D157A1E5FDBAC0085F7D6 /* logo200.png in Resources */, @@ -15221,7 +15854,7 @@ 883517FE1E6664D200FCBE56 /* fishrank_tortoise.png in Resources */, 885FBE2F1E4DAB4500E0D7D1 /* merchant_iocn_shop@2x.png in Resources */, 881672391EA5DE2B00BEBF23 /* UMComSimpleAssociatedFeedTableViewCell.xib in Resources */, - 882956F91DBDA3A300E9DDD7 /* graybtn_big.png in Resources */, + 3D1C5129221A9EE10096AE43 /* IfishCameraRecordFourCell.xib in Resources */, 88D337321DC71EB5006C0ADB /* linkingdevice_point@2x.png in Resources */, 882956C81DBDA3A300E9DDD7 /* ifish_jieBang_device.png in Resources */, 882957411DBDA3A300E9DDD7 /* swimmingfish0048.png in Resources */, @@ -15233,6 +15866,7 @@ 88C1B21B1DCC5A1400C2C99A /* personal_iocn_replace@2x.png in Resources */, 88602F541E12002600F3DB5D /* NTESContactViewController.xib in Resources */, 881478381E712E3A00BFB79C /* TaskKindViewCell.xib in Resources */, + 3D1C5148221A9EE10096AE43 /* IFISHYooseeImg.bundle in Resources */, 8871FB201EBC822B0038E99A /* select_camera@3x.png in Resources */, 885FBDCD1E4C0CB400E0D7D1 /* explore_iocn_convert.png in Resources */, 8815D1EB1E02662600BEA2DA /* FullPlay_Slider.png in Resources */, @@ -15276,7 +15910,6 @@ 8856B0E41DEC15F5009D384A /* home_popup_button.png in Resources */, 883E79141D48A74F0030E075 /* noticeMusic.wav in Resources */, 882957131DBDA3A300E9DDD7 /* swimmingfish0002.png in Resources */, - 8815D14C1E0144AA00BEA2DA /* IfishCameraRecordFourCell.xib in Resources */, 8829579B1DBDA3A400E9DDD7 /* xutobtn3_on@2x.png in Resources */, 8849EFBA1EB883840096CAD7 /* enter_logo@2x.png in Resources */, 882956D71DBDA3A300E9DDD7 /* ifishnav_dropview_list@2x.png in Resources */, @@ -15387,7 +16020,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "#!/bin/sh\n#\n# Copyright 2016 Bugly, Tencent. All rights reserved.\n#\n# V1.4.0\n#\n# 2016.08.03\n#\n#\n#\n######################################################\n# 1. 脚本集成到Xcode工程的Target\n######################################################\n#\n# --- Copy the SCRIPT to the Run Script of Build Phases in the Xcode project ---\n#\n# #\nBUGLY_APP_ID=\"16d2b238e3\"\n# #\nBUGLY_APP_KEY=\"2e8aa58d-e362-4aea-aaf9-d91b2732c63d\"\n# #\nBUNDLE_IDENTIFIER=\"com.shyuying.Ifish8\"\n# #\nUPLOAD_DSYM_ONLY=1\n#\n# # 脚本默认配置的版本格式为CFBundleShortVersionString(CFBundleVersion), 如果你修改默认的版本格式, 请设置此变量, 如果不想修改, 请忽略此设置\n# CUSTOMIZED_APP_VERSION=\"\"\n#\n# # Debug模式编译是否上传,1=上传 0=不上传,默认不上传\n# UPLOAD_DEBUG_SYMBOLS=0\n#\n# # 模拟器编译是否上传,1=上传 0=不上传,默认不上传\n# UPLOAD_SIMULATOR_SYMBOLS=0\n#\n# #只有Archive操作时上传, 1=支持Archive上传 0=所有Release模式编译都上传\n# UPLOAD_ARCHIVE_ONLY=0\n#\n# #\n# source dSYMUpload.sh\n#\n# --- END OF SCRIPT ---\n#\n#\n#\n#\n#######################################################\n# 2. 脚本根据输入参数处理\n#######################################################\n#\n# #命令行下输入应用基本信息, .dSYM文件的父目录路径, 输出文件目录即可\n#\n# sh dSYMUpload.sh \n#\n# #\n#\n# #注意:\n# # 1. dSYMUpload.sh会调用buglySymboliOS.jar进行.dSYM解析,所以依赖Java运行时环境\n# # 2. dSYMUpload.sh和buglySymboliOS.jar的文件路径需一致\n#\n#\n\n#\n# --- CONTENT OF SCRIPT ---\n#\n\n# Bugly服务域名\nBUGLY_DSYM_UPLOAD_DOMAIN=\"api.bugly.qq.com\"\n\n# 注意jar工具的路径跟dSYMUpload.sh脚本路径一致, 请务必保证jar路径的正确性\nBUGLY_SYMBOL_JAR_PATH=\"dsymtool/buglySymboliOS.jar\"\n# 查找添加到系统目录的jar工具\nif [ ! -f \"${BUGLY_SYMBOL_JAR_PATH}\" ]; then\nBUGLY_SYMBOL_JAR_PATH=\"$HOME/bin/buglySymboliOS.jar\"\nfi\n\n# 打印错误信息\nfunction exitWithMessage(){\n echo \"--------------------------------\"\n echo \"${1}\"\n echo \"--------------------------------\"\n exit ${2}\n}\n\n# 上传bSYMBOL文件\nfunction dSYMUpload() {\n P_APP_ID=\"$1\"\n P_APP_KEY=\"$2\"\n P_APP_BUNDLE_ID=\"$3\"\n P_APP_VERSION=\"$4\"\n P_BSYMBOL_ZIP_FILE=\"$5\"\n \n #\n P_BSYMBOL_ZIP_FILE_NAME=${P_BSYMBOL_ZIP_FILE##*/}\n P_BSYMBOL_ZIP_FILE_NAME=${P_BSYMBOL_ZIP_FILE_NAME//&/_}\n P_BSYMBOL_ZIP_FILE_NAME=\"${P_BSYMBOL_ZIP_FILE_NAME// /_}\"\n \n DSYM_UPLOAD_URL=\"https://${BUGLY_DSYM_UPLOAD_DOMAIN}/openapi/file/upload/symbol?app_id=${P_APP_ID}&app_key=${P_APP_KEY}\"\n echo \"dSYM upload url: ${DSYM_UPLOAD_URL}\"\n \n echo \"-----------------------------\"\n STATUS=$(/usr/bin/curl -k \"${DSYM_UPLOAD_URL}\" --form \"api_version=1\" --form \"app_id=${P_APP_ID}\" --form \"app_key=${P_APP_KEY}\" --form \"symbolType=2\" --form \"bundleId=${BUNDLE_IDENTIFIER}\" --form \"productVersion=${BUGLY_APP_VERSION}\" --form \"fileName=${P_BSYMBOL_ZIP_FILE_NAME}\" --form \"file=@${P_BSYMBOL_ZIP_FILE}\" --verbose)\n echo \"-----------------------------\"\n \n UPLOAD_RESULT=\"FAILTURE\"\n echo \"Bugly server response: ${STATUS}\"\n if [ ! \"${STATUS}\" ]; then\n echo \"Error: Failed to upload the zip archive file.\"\n elif [[ \"${STATUS}\" == *\"{\\\"reponseCode\\\":\\\"0\\\"}\"* ]]; then\n echo \"Success to upload the dSYM for the app [${BUNDLE_IDENTIFIER} ${BUGLY_APP_VERSION}]\"\n UPLOAD_RESULT=\"SUCCESS\"\n else\n echo \"Error: Failed to upload the zip archive file to Bugly.\"\n fi\n \n #Remove temp dSYM archive\n #echo \"Remove temporary zip archive: ${DSYM_ZIP_FPATH}\"\n #/bin/rm -f \"${DSYM_ZIP_FPATH}\"\n \n if [ \"$?\" -ne 0 ]; then\n exitWithMessage \"Error: Failed to remove temporary zip archive.\" 0\n fi\n \n echo \"--------------------------------\"\n echo \"${UPLOAD_RESULT} - dSYM upload complete.\"\n \n if [[ \"${UPLOAD_RESULT}\" == \"FAILTURE\" ]]; then\n echo \"--------------------------------\"\n echo \"Failed to upload the dSYM\"\n echo \"Please check the script and try it again.\"\n fi\n }\n \n # .dSYM解析为bSYMBOL文件\n function dSYMParse() {\n DSYM_FILE=\"$1\"\n DSYM_SYMBOL_FILE=\"$2\"\n \n echo \"--------------------------------\"\n echo \"Extract symbol info from .dSYM file. to ${DSYM_SYMBOL_FILE}\"\n (/usr/bin/java -Xms512m -Xmx1024m -Dfile.encoding=UTF8 -jar \"${BUGLY_SYMBOL_JAR_PATH}\" -i \"${DSYM_FILE}\" -o \"${DSYM_SYMBOL_FILE}\" ) || exitWithMessage \"Error: Failed to extract symbols.\" 1\n echo \"--------------------------------\"\n \n }\n \n # 执行\n function run() {\n \n CONFIG_BUGLY_APP_ID=\"$1\"\n CONFIG_BUGLY_APP_KEY=\"$2\"\n \n CONFIG_BUGLY_APP_BUNDLE_IDENTIFIER=\"$3\"\n CONFIG_BUGLY_APP_VERSION=\"$4\"\n CONFIG_DSYM_SOURCE_DIR=\"$5\"\n CONFIG_DSYM_DEST_DIR=\"$6\"\n CONFIG_UPLOAD_DSYM_ONLY=\"$7\"\n \n # 检查必须参数是否设置\n if [ ! \"${CONFIG_BUGLY_APP_ID}\" ]; then\n exitWithMessage \"Error: Bugly App ID not defined. Please set 'BUGLY_APP_ID' \" 0\n fi\n \n if [[ \"${CONFIG_BUGLY_APP_ID}\" == *\"App ID\"* ]]; then\n exitWithMessage \"Error: Bugly App ID not defined.\" 0\n fi\n \n if [ ! \"${CONFIG_BUGLY_APP_KEY}\" ]; then\n exitWithMessage \"Error: Bugly App Key not defined.\" 0\n fi\n \n if [ ! \"${CONFIG_BUGLY_APP_BUNDLE_IDENTIFIER}\" ]; then\n exitWithMessage \"Error: Bundle Identifier not defined.\" 0\n fi\n \n if [ ! \"${CONFIG_BUGLY_APP_VERSION}\" ]; then\n exitWithMessage \"Error: App Version not defined.\" 0\n fi\n \n if [ ! -e \"${CONFIG_DSYM_SOURCE_DIR}\" ]; then\n exitWithMessage \"Error: Invalid dir ${CONFIG_DSYM_SOURCE_DIR}\" 0\n fi\n \n if [ ! \"${CONFIG_DSYM_DEST_DIR}\" ]; then\n exitWithMessage \"Error: Invalid dir ${CONFIG_DSYM_DEST_DIR}\" 0\n fi\n \n if [ ! -e \"${CONFIG_DSYM_DEST_DIR}\" ]; then\n mkdir ${CONFIG_DSYM_DEST_DIR}\n fi\n \n DSYM_FOLDER=\"${CONFIG_DSYM_SOURCE_DIR}\"\n IFS=$'\\n'\n \n echo \"Scaning dSYM FOLDER: ${DSYM_FOLDER} ...\"\n RET=\"F\"\n \n #\n for dsymFile in $(find \"$DSYM_FOLDER\" -name '*.dSYM'); do\n RET=\"T\"\n echo \"Found dSYM file: $dsymFile\"\n \n DSYM_FILE_NAME=${dsymFile##*/}\n DSYM_SYMBOL_ZIP_FILE_NAME=\"${DSYM_FILE_NAME}.zip\"\n DSYM_SYMBOL_ZIP_FILE_NAME=\"${DSYM_SYMBOL_ZIP_FILE_NAME// /_}\"\n DSYM_SYMBOL_ZIP_FILE=${CONFIG_DSYM_DEST_DIR}/${DSYM_SYMBOL_ZIP_FILE_NAME}\n \n if [ $CONFIG_UPLOAD_DSYM_ONLY -eq 1 ]; then\n if [ -e $DSYM_SYMBOL_ZIP_FILE ]; then\n rm -f $DSYM_SYMBOL_ZIP_FILE\n fi\n # 如果只上传dSYM,直接压缩dSYM目录\n zip -r -j $DSYM_SYMBOL_ZIP_FILE $dsymFile -x *.plist\n else\n # 使用符号表工具来生成Symbol文件\n dSYMParse $dsymFile $DSYM_SYMBOL_ZIP_FILE\n fi\n \n # 上传\n dSYMUpload $CONFIG_BUGLY_APP_ID $CONFIG_BUGLY_APP_KEY $CONFIG_BUGLY_APP_BUNDLE_IDENTIFIER $CONFIG_BUGLY_APP_VERSION $DSYM_SYMBOL_ZIP_FILE\n done\n \n if [ $RET = \"F\" ]; then\n exitWithMessage \"No .dSYM found in ${DSYM_FOLDER}\" 0\n fi\n }\n \n # 在Xcode工程中执行\n function runInXcode(){\n echo \"Uploading dSYM to Bugly in Xcode ...\"\n \n echo \"Info.Plist : ${INFOPLIST_FILE}\"\n \n BUNDLE_VERSION=$(/usr/libexec/PlistBuddy -c 'Print CFBundleVersion' \"${INFOPLIST_FILE}\")\n BUNDLE_SHORT_VERSION=$(/usr/libexec/PlistBuddy -c 'Print CFBundleShortVersionString' \"${INFOPLIST_FILE}\")\n \n # 组装Bugly默认识别的版本信息(格式为CFBundleShortVersionString(CFBundleVersion), 例如: 1.0(1))\n if [ ! \"${CUSTOMIZED_APP_VERSION}\" ]; then\n BUGLY_APP_VERSION=\"${BUNDLE_SHORT_VERSION}(${BUNDLE_VERSION})\"\n else\n BUGLY_APP_VERSION=\"${CUSTOMIZED_APP_VERSION}\"\n fi\n \n echo \"--------------------------------\"\n echo \"Prepare application information.\"\n echo \"--------------------------------\"\n \n echo \"Product Name: ${PRODUCT_NAME}\"\n echo \"Bundle Identifier: ${BUNDLE_IDENTIFIER}\"\n echo \"Version: ${BUNDLE_SHORT_VERSION}\"\n echo \"Build: ${BUNDLE_VERSION}\"\n \n echo \"Bugly App ID: ${BUGLY_APP_ID}\"\n echo \"Bugly App key: ${BUGLY_APP_KEY}\"\n echo \"Bugly App Version: ${BUGLY_APP_VERSION}\"\n \n echo \"--------------------------------\"\n echo \"Check the arguments ...\"\n \n ##检查模拟器编译是否允许上传符号\n if [ \"$EFFECTIVE_PLATFORM_NAME\" == \"-iphonesimulator\" ]; then\n if [ $UPLOAD_SIMULATOR_SYMBOLS -eq 0 ]; then\n exitWithMessage \"Warning: Build for simulator and skipping to upload. \\nYou can modify 'UPLOAD_SIMULATOR_SYMBOLS' to 1 in the script.\" 0\n fi\n fi\n \n ##检查是否是Release模式编译\n if [ \"${CONFIGURATION=}\" == \"Debug\" ]; then\n if [ $UPLOAD_DEBUG_SYMBOLS -eq 0 ]; then\n exitWithMessage \"Warning: Build for debug mode and skipping to upload. \\nYou can modify 'UPLOAD_DEBUG_SYMBOLS' to 1 in the script.\" 0\n fi\n fi\n \n ##检查是否Archive操作\n if [ $UPLOAD_ARCHIVE_ONLY -eq 1 ]; then\n if [[ \"$TARGET_BUILD_DIR\" == *\"/Archive\"* ]]; then\n echo \"Archive the package\"\n else\n exitWithMessage \"Warning: Build for NOT Archive mode and skipping to upload. \\nYou can modify 'UPLOAD_ARCHIVE_ONLY' to 0 in the script.\" 0\n fi\n fi\n \n #\n run ${BUGLY_APP_ID} ${BUGLY_APP_KEY} ${BUNDLE_IDENTIFIER} ${BUGLY_APP_VERSION} ${DWARF_DSYM_FOLDER_PATH} ${BUILD_DIR}/BuglySymbolTemp ${UPLOAD_DSYM_ONLY}\n }\n \n # 根据Xcode的环境变量判断是否处于Xcode环境\n INFO_PLIST_FILE=\"${INFOPLIST_FILE}\"\n \n BuildInXcode=\"F\"\n if [ -f \"${INFO_PLIST_FILE}\" ]; then\n BuildInXcode=\"T\"\n fi\n \n if [ $BuildInXcode = \"T\" ]; then\n runInXcode\n else\n echo \"\\nUsage: dSYMUpload.sh [upload_dsym_only]\\n\"\n # 你可以在此处直接设置BuglyAppID和BuglyAppKey,排除不常变参数的输入\n BUGLY_APP_ID=\"$1\"\n BUGLY_APP_KEY=\"$2\"\n BUNDLE_IDENTIFIER=\"$3\"\n BUGLY_APP_VERSION=\"$4\"\n DWARF_DSYM_FOLDER_PATH=\"$5\"\n SYMBOL_OUTPUT_PATH=\"$6\"\n UPLOAD_DSYM_ONLY=$7\n run ${BUGLY_APP_ID} ${BUGLY_APP_KEY} ${BUNDLE_IDENTIFIER} ${BUGLY_APP_VERSION} ${DWARF_DSYM_FOLDER_PATH} ${SYMBOL_OUTPUT_PATH} ${UPLOAD_DSYM_ONLY}\n fi"; + shellScript = "#!/bin/sh\n#\n# Copyright 2016 Bugly, Tencent. All rights reserved.\n#\n# V1.4.0\n#\n# 2016.08.03\n#\n#\n#\n######################################################\n# 1. 脚本集成到Xcode工程的Target\n######################################################\n#\n# --- Copy the SCRIPT to the Run Script of Build Phases in the Xcode project ---\n#\n# #\nBUGLY_APP_ID=\"16d2b238e3\"\n# #\nBUGLY_APP_KEY=\"2e8aa58d-e362-4aea-aaf9-d91b2732c63d\"\n# #\nBUNDLE_IDENTIFIER=\"com.shyuying.Ifish8\"\n# #\nUPLOAD_DSYM_ONLY=1\n#\n# # 脚本默认配置的版本格式为CFBundleShortVersionString(CFBundleVersion), 如果你修改默认的版本格式, 请设置此变量, 如果不想修改, 请忽略此设置\n# CUSTOMIZED_APP_VERSION=\"\"\n#\n# # Debug模式编译是否上传,1=上传 0=不上传,默认不上传\n# UPLOAD_DEBUG_SYMBOLS=0\n#\n# # 模拟器编译是否上传,1=上传 0=不上传,默认不上传\n# UPLOAD_SIMULATOR_SYMBOLS=0\n#\n# #只有Archive操作时上传, 1=支持Archive上传 0=所有Release模式编译都上传\n# UPLOAD_ARCHIVE_ONLY=0\n#\n# #\n# source dSYMUpload.sh\n#\n# --- END OF SCRIPT ---\n#\n#\n#\n#\n#######################################################\n# 2. 脚本根据输入参数处理\n#######################################################\n#\n# #命令行下输入应用基本信息, .dSYM文件的父目录路径, 输出文件目录即可\n#\n# sh dSYMUpload.sh \n#\n# #\n#\n# #注意:\n# # 1. dSYMUpload.sh会调用buglySymboliOS.jar进行.dSYM解析,所以依赖Java运行时环境\n# # 2. dSYMUpload.sh和buglySymboliOS.jar的文件路径需一致\n#\n#\n\n#\n# --- CONTENT OF SCRIPT ---\n#\n\n# Bugly服务域名\nBUGLY_DSYM_UPLOAD_DOMAIN=\"api.bugly.qq.com\"\n\n# 注意jar工具的路径跟dSYMUpload.sh脚本路径一致, 请务必保证jar路径的正确性\nBUGLY_SYMBOL_JAR_PATH=\"dsymtool/buglySymboliOS.jar\"\n# 查找添加到系统目录的jar工具\nif [ ! -f \"${BUGLY_SYMBOL_JAR_PATH}\" ]; then\nBUGLY_SYMBOL_JAR_PATH=\"$HOME/bin/buglySymboliOS.jar\"\nfi\n\n# 打印错误信息\nfunction exitWithMessage(){\n echo \"--------------------------------\"\n echo \"${1}\"\n echo \"--------------------------------\"\n exit ${2}\n}\n\n# 上传bSYMBOL文件\nfunction dSYMUpload() {\n P_APP_ID=\"$1\"\n P_APP_KEY=\"$2\"\n P_APP_BUNDLE_ID=\"$3\"\n P_APP_VERSION=\"$4\"\n P_BSYMBOL_ZIP_FILE=\"$5\"\n \n #\n P_BSYMBOL_ZIP_FILE_NAME=${P_BSYMBOL_ZIP_FILE##*/}\n P_BSYMBOL_ZIP_FILE_NAME=${P_BSYMBOL_ZIP_FILE_NAME//&/_}\n P_BSYMBOL_ZIP_FILE_NAME=\"${P_BSYMBOL_ZIP_FILE_NAME// /_}\"\n \n DSYM_UPLOAD_URL=\"https://${BUGLY_DSYM_UPLOAD_DOMAIN}/openapi/file/upload/symbol?app_id=${P_APP_ID}&app_key=${P_APP_KEY}\"\n echo \"dSYM upload url: ${DSYM_UPLOAD_URL}\"\n \n echo \"-----------------------------\"\n STATUS=$(/usr/bin/curl -k \"${DSYM_UPLOAD_URL}\" --form \"api_version=1\" --form \"app_id=${P_APP_ID}\" --form \"app_key=${P_APP_KEY}\" --form \"symbolType=2\" --form \"bundleId=${BUNDLE_IDENTIFIER}\" --form \"productVersion=${BUGLY_APP_VERSION}\" --form \"fileName=${P_BSYMBOL_ZIP_FILE_NAME}\" --form \"file=@${P_BSYMBOL_ZIP_FILE}\" --verbose)\n echo \"-----------------------------\"\n \n UPLOAD_RESULT=\"FAILTURE\"\n echo \"Bugly server response: ${STATUS}\"\n if [ ! \"${STATUS}\" ]; then\n echo \"Error: Failed to upload the zip archive file.\"\n elif [[ \"${STATUS}\" == *\"{\\\"reponseCode\\\":\\\"0\\\"}\"* ]]; then\n echo \"Success to upload the dSYM for the app [${BUNDLE_IDENTIFIER} ${BUGLY_APP_VERSION}]\"\n UPLOAD_RESULT=\"SUCCESS\"\n else\n echo \"Error: Failed to upload the zip archive file to Bugly.\"\n fi\n \n #Remove temp dSYM archive\n #echo \"Remove temporary zip archive: ${DSYM_ZIP_FPATH}\"\n #/bin/rm -f \"${DSYM_ZIP_FPATH}\"\n \n if [ \"$?\" -ne 0 ]; then\n exitWithMessage \"Error: Failed to remove temporary zip archive.\" 0\n fi\n \n echo \"--------------------------------\"\n echo \"${UPLOAD_RESULT} - dSYM upload complete.\"\n \n if [[ \"${UPLOAD_RESULT}\" == \"FAILTURE\" ]]; then\n echo \"--------------------------------\"\n echo \"Failed to upload the dSYM\"\n echo \"Please check the script and try it again.\"\n fi\n }\n \n # .dSYM解析为bSYMBOL文件\n function dSYMParse() {\n DSYM_FILE=\"$1\"\n DSYM_SYMBOL_FILE=\"$2\"\n \n echo \"--------------------------------\"\n echo \"Extract symbol info from .dSYM file. to ${DSYM_SYMBOL_FILE}\"\n (/usr/bin/java -Xms512m -Xmx1024m -Dfile.encoding=UTF8 -jar \"${BUGLY_SYMBOL_JAR_PATH}\" -i \"${DSYM_FILE}\" -o \"${DSYM_SYMBOL_FILE}\" ) || exitWithMessage \"Error: Failed to extract symbols.\" 1\n echo \"--------------------------------\"\n \n }\n \n # 执行\n function run() {\n \n CONFIG_BUGLY_APP_ID=\"$1\"\n CONFIG_BUGLY_APP_KEY=\"$2\"\n \n CONFIG_BUGLY_APP_BUNDLE_IDENTIFIER=\"$3\"\n CONFIG_BUGLY_APP_VERSION=\"$4\"\n CONFIG_DSYM_SOURCE_DIR=\"$5\"\n CONFIG_DSYM_DEST_DIR=\"$6\"\n CONFIG_UPLOAD_DSYM_ONLY=\"$7\"\n \n # 检查必须参数是否设置\n if [ ! \"${CONFIG_BUGLY_APP_ID}\" ]; then\n exitWithMessage \"Error: Bugly App ID not defined. Please set 'BUGLY_APP_ID' \" 0\n fi\n \n if [[ \"${CONFIG_BUGLY_APP_ID}\" == *\"App ID\"* ]]; then\n exitWithMessage \"Error: Bugly App ID not defined.\" 0\n fi\n \n if [ ! \"${CONFIG_BUGLY_APP_KEY}\" ]; then\n exitWithMessage \"Error: Bugly App Key not defined.\" 0\n fi\n \n if [ ! \"${CONFIG_BUGLY_APP_BUNDLE_IDENTIFIER}\" ]; then\n exitWithMessage \"Error: Bundle Identifier not defined.\" 0\n fi\n \n if [ ! \"${CONFIG_BUGLY_APP_VERSION}\" ]; then\n exitWithMessage \"Error: App Version not defined.\" 0\n fi\n \n if [ ! -e \"${CONFIG_DSYM_SOURCE_DIR}\" ]; then\n exitWithMessage \"Error: Invalid dir ${CONFIG_DSYM_SOURCE_DIR}\" 0\n fi\n \n if [ ! \"${CONFIG_DSYM_DEST_DIR}\" ]; then\n exitWithMessage \"Error: Invalid dir ${CONFIG_DSYM_DEST_DIR}\" 0\n fi\n \n if [ ! -e \"${CONFIG_DSYM_DEST_DIR}\" ]; then\n mkdir ${CONFIG_DSYM_DEST_DIR}\n fi\n \n DSYM_FOLDER=\"${CONFIG_DSYM_SOURCE_DIR}\"\n IFS=$'\\n'\n \n echo \"Scaning dSYM FOLDER: ${DSYM_FOLDER} ...\"\n RET=\"F\"\n \n #\n for dsymFile in $(find \"$DSYM_FOLDER\" -name '*.dSYM'); do\n RET=\"T\"\n echo \"Found dSYM file: $dsymFile\"\n \n DSYM_FILE_NAME=${dsymFile##*/}\n DSYM_SYMBOL_ZIP_FILE_NAME=\"${DSYM_FILE_NAME}.zip\"\n DSYM_SYMBOL_ZIP_FILE_NAME=\"${DSYM_SYMBOL_ZIP_FILE_NAME// /_}\"\n DSYM_SYMBOL_ZIP_FILE=${CONFIG_DSYM_DEST_DIR}/${DSYM_SYMBOL_ZIP_FILE_NAME}\n \n if [ $CONFIG_UPLOAD_DSYM_ONLY -eq 1 ]; then\n if [ -e $DSYM_SYMBOL_ZIP_FILE ]; then\n rm -f $DSYM_SYMBOL_ZIP_FILE\n fi\n # 如果只上传dSYM,直接压缩dSYM目录\n zip -r -j $DSYM_SYMBOL_ZIP_FILE $dsymFile -x *.plist\n else\n # 使用符号表工具来生成Symbol文件\n dSYMParse $dsymFile $DSYM_SYMBOL_ZIP_FILE\n fi\n \n # 上传\n dSYMUpload $CONFIG_BUGLY_APP_ID $CONFIG_BUGLY_APP_KEY $CONFIG_BUGLY_APP_BUNDLE_IDENTIFIER $CONFIG_BUGLY_APP_VERSION $DSYM_SYMBOL_ZIP_FILE\n done\n \n if [ $RET = \"F\" ]; then\n exitWithMessage \"No .dSYM found in ${DSYM_FOLDER}\" 0\n fi\n }\n \n # 在Xcode工程中执行\n function runInXcode(){\n echo \"Uploading dSYM to Bugly in Xcode ...\"\n \n echo \"Info.Plist : ${INFOPLIST_FILE}\"\n \n BUNDLE_VERSION=$(/usr/libexec/PlistBuddy -c 'Print CFBundleVersion' \"${INFOPLIST_FILE}\")\n BUNDLE_SHORT_VERSION=$(/usr/libexec/PlistBuddy -c 'Print CFBundleShortVersionString' \"${INFOPLIST_FILE}\")\n \n # 组装Bugly默认识别的版本信息(格式为CFBundleShortVersionString(CFBundleVersion), 例如: 1.0(1))\n if [ ! \"${CUSTOMIZED_APP_VERSION}\" ]; then\n BUGLY_APP_VERSION=\"${BUNDLE_SHORT_VERSION}(${BUNDLE_VERSION})\"\n else\n BUGLY_APP_VERSION=\"${CUSTOMIZED_APP_VERSION}\"\n fi\n \n echo \"--------------------------------\"\n echo \"Prepare application information.\"\n echo \"--------------------------------\"\n \n echo \"Product Name: ${PRODUCT_NAME}\"\n echo \"Bundle Identifier: ${BUNDLE_IDENTIFIER}\"\n echo \"Version: ${BUNDLE_SHORT_VERSION}\"\n echo \"Build: ${BUNDLE_VERSION}\"\n \n echo \"Bugly App ID: ${BUGLY_APP_ID}\"\n echo \"Bugly App key: ${BUGLY_APP_KEY}\"\n echo \"Bugly App Version: ${BUGLY_APP_VERSION}\"\n \n echo \"--------------------------------\"\n echo \"Check the arguments ...\"\n \n ##检查模拟器编译是否允许上传符号\n if [ \"$EFFECTIVE_PLATFORM_NAME\" == \"-iphonesimulator\" ]; then\n if [ $UPLOAD_SIMULATOR_SYMBOLS -eq 0 ]; then\n exitWithMessage \"Warning: Build for simulator and skipping to upload. \\nYou can modify 'UPLOAD_SIMULATOR_SYMBOLS' to 1 in the script.\" 0\n fi\n fi\n \n ##检查是否是Release模式编译\n if [ \"${CONFIGURATION=}\" == \"Debug\" ]; then\n if [ $UPLOAD_DEBUG_SYMBOLS -eq 0 ]; then\n exitWithMessage \"Warning: Build for debug mode and skipping to upload. \\nYou can modify 'UPLOAD_DEBUG_SYMBOLS' to 1 in the script.\" 0\n fi\n fi\n \n ##检查是否Archive操作\n if [ $UPLOAD_ARCHIVE_ONLY -eq 1 ]; then\n if [[ \"$TARGET_BUILD_DIR\" == *\"/Archive\"* ]]; then\n echo \"Archive the package\"\n else\n exitWithMessage \"Warning: Build for NOT Archive mode and skipping to upload. \\nYou can modify 'UPLOAD_ARCHIVE_ONLY' to 0 in the script.\" 0\n fi\n fi\n \n #\n run ${BUGLY_APP_ID} ${BUGLY_APP_KEY} ${BUNDLE_IDENTIFIER} ${BUGLY_APP_VERSION} ${DWARF_DSYM_FOLDER_PATH} ${BUILD_DIR}/BuglySymbolTemp ${UPLOAD_DSYM_ONLY}\n }\n \n # 根据Xcode的环境变量判断是否处于Xcode环境\n INFO_PLIST_FILE=\"${INFOPLIST_FILE}\"\n \n BuildInXcode=\"F\"\n if [ -f \"${INFO_PLIST_FILE}\" ]; then\n BuildInXcode=\"T\"\n fi\n \n if [ $BuildInXcode = \"T\" ]; then\n runInXcode\n else\n echo \"\\nUsage: dSYMUpload.sh [upload_dsym_only]\\n\"\n # 你可以在此处直接设置BuglyAppID和BuglyAppKey,排除不常变参数的输入\n BUGLY_APP_ID=\"$1\"\n BUGLY_APP_KEY=\"$2\"\n BUNDLE_IDENTIFIER=\"$3\"\n BUGLY_APP_VERSION=\"$4\"\n DWARF_DSYM_FOLDER_PATH=\"$5\"\n SYMBOL_OUTPUT_PATH=\"$6\"\n UPLOAD_DSYM_ONLY=$7\n run ${BUGLY_APP_ID} ${BUGLY_APP_KEY} ${BUNDLE_IDENTIFIER} ${BUGLY_APP_VERSION} ${DWARF_DSYM_FOLDER_PATH} ${SYMBOL_OUTPUT_PATH} ${UPLOAD_DSYM_ONLY}\n fi\n"; }; /* End PBXShellScriptBuildPhase section */ @@ -15396,6 +16029,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 3D8F649721568AE500F04BD3 /* ConnectHotspotTipViewController.m in Sources */, 88F5EFAE1D48D08100CC7CAF /* AFURLConnectionOperation.m in Sources */, 88602A231E10BC3500F3DB5D /* NIMInputAudioRecordIndicatorView.m in Sources */, 88602F351E12002500F3DB5D /* UIScrollView+NTESPullToRefresh.m in Sources */, @@ -15404,17 +16038,18 @@ 88602F4B1E12002600F3DB5D /* NTESGroupedContacts.m in Sources */, 881B12401E1CCB8A004C074B /* RusunHaveHeateSetViewController.m in Sources */, 88140AAC1D86C10D00FE34E5 /* IfishUDPBroadCastHelper.m in Sources */, + 3D1C5130221A9EE10096AE43 /* IfishCameraRecordFourCell.m in Sources */, 883E78661D48A5E50030E075 /* ConnectInfoCollectionModel.m in Sources */, 8860D78F1D6D7BE8001E544C /* KanHuWorkViewFirstCell.m in Sources */, - 883E78B01D48A5E50030E075 /* CheckNewMessageResult.m in Sources */, 88F5EFD91D48D08100CC7CAF /* MyControl.m in Sources */, + 3DD7AB4C21E2F2FB0064856A /* bitstream.c in Sources */, 88602A431E10BC3500F3DB5D /* NIMSessionLayoutImpl.m in Sources */, 883E784B1D48A5E50030E075 /* SongNuoBackMsgDataUnity.m in Sources */, 886028821E10BB1100F3DB5D /* CTAssetsGridViewController.m in Sources */, + 3D1C50EF221A9EE00096AE43 /* YAudioStreamPlayer.m in Sources */, 889133081ECE999A00F52EBC /* NSString+Hash.m in Sources */, - 883E78CD1D48A5E50030E075 /* KTThumbView.m in Sources */, - 88721D891E0A1ACC0047B7B1 /* P2PPlaybackController.m in Sources */, 883E762D1D4897570030E075 /* SetTimeModel.m in Sources */, + 3D1C5084221A9EDF0096AE43 /* KTPhotoView.m in Sources */, 886FB1801E5A89A800256332 /* CusomeCameraViewController.m in Sources */, 886F4DEB1D751B22001EDA34 /* LookReportViewCell.m in Sources */, 88602DBF1E10D97E00F3DB5D /* UIView+WebCacheOperation.m in Sources */, @@ -15424,19 +16059,20 @@ 886FB1A11E5A9D0A00256332 /* FishDocSection0ViewImgCell.m in Sources */, 881672381EA5DE2B00BEBF23 /* UMComSimpleAssociatedFeedTableViewCell.m in Sources */, 883E76431D4897570030E075 /* TwoControlBackmsgmodel.m in Sources */, + 3D3512DB2159C172009DDB0F /* IfishHotBarModifyNameVc.m in Sources */, + 3D1C50A6221A9EDF0096AE43 /* MXSCycleScrollView.m in Sources */, 88602F5D1E12002600F3DB5D /* NTESNavigationAnimator.m in Sources */, 88602F631E12002600F3DB5D /* NTESLocationPoint.m in Sources */, + 3D1C5078221A9EDF0096AE43 /* RtspInterface.mm in Sources */, 886FB1A61E5A9DA700256332 /* FishDocSection0ViewlablCell.m in Sources */, - 88D0F2791EA646E100286022 /* RtspInterface.mm in Sources */, + 3D1C17472171BB0700A159A8 /* PNScatterChartDataItem.m in Sources */, 88602A201E10BC3500F3DB5D /* NIMContactSelectConfig.m in Sources */, 886028721E10BB1100F3DB5D /* PHAsset+CTAssetsPickerController.m in Sources */, - 883E78B71D48A5E50030E075 /* GetAlarmRecordResult.m in Sources */, 883E78721D48A5E50030E075 /* rightDeviceCollectionViewCell.m in Sources */, 88602A2A1E10BC3500F3DB5D /* NIMInputTextView.m in Sources */, 88602F7F1E12002600F3DB5D /* NTESDemoConfig.m in Sources */, 8867C8791D49B8BD0029F1FA /* TabbarDeiceSecdCell.m in Sources */, 883E783D1D48A5E50030E075 /* FourControlbackMassge.m in Sources */, - 883E78A61D48A5E50030E075 /* BootomViewSoketBackMasgConreol.m in Sources */, 8816719E1EA5DE2B00BEBF23 /* UMComCommentListDataController.m in Sources */, 88602F4F1E12002600F3DB5D /* NTESContactUtilItem.m in Sources */, 88591EE61D655B9E00A1316E /* ChinaPlckerView.m in Sources */, @@ -15444,7 +16080,6 @@ 88602A211E10BC3500F3DB5D /* NIMContactSelectTabView.m in Sources */, 886028791E10BB1100F3DB5D /* CTAssetCollectionViewController.m in Sources */, 88F5EE551D48CA2800CC7CAF /* ESPDataCode.m in Sources */, - 883E78AF1D48A5E50030E075 /* CheckAlarmMessageResult.m in Sources */, 886F4E011D76BFF8001EDA34 /* KanHuBaoGaoModel.m in Sources */, 88602F4C1E12002600F3DB5D /* NTESGroupedDataCollection.m in Sources */, 883E79C21D48B0280030E075 /* InfoCell.m in Sources */, @@ -15456,17 +16091,19 @@ 88602A4B1E10BC3500F3DB5D /* NIMSessionLocationContentView.m in Sources */, 88602A611E10BC3500F3DB5D /* NIMTeamMemberListViewController.m in Sources */, 88602A191E10BC3400F3DB5D /* NIMMemberGroupView.m in Sources */, + 3D8F64F0215797E700F04BD3 /* IQTitleBarButtonItem.m in Sources */, 883A3D181EC44EF300DA84FF /* IfishUsersActivityListController.m in Sources */, 883E78EB1D48A5E50030E075 /* ConnectErrorViewController.m in Sources */, 88602A6A1E10BC3500F3DB5D /* NIMKitTimerHolder.m in Sources */, 8860288A1E10BB1100F3DB5D /* CTAssetsPickerNoAssetsView.m in Sources */, 88602F441E12002600F3DB5D /* NTESChatroomSegmentedControl.m in Sources */, 883E793F1D48ACFF0030E075 /* IfishDataUnity.m in Sources */, - 88F5EFF01D48D08100CC7CAF /* split.c in Sources */, 883E79A31D48B0280030E075 /* shopNameCell.m in Sources */, 88F5EFB61D48D08100CC7CAF /* UIImageView+AFNetworking.m in Sources */, 88602F9D1E12002600F3DB5D /* NTESWhiteboardDrawView.m in Sources */, 88F5EFD71D48D08100CC7CAF /* MMRadialProgressView.m in Sources */, + 3D8F64F2215797E700F04BD3 /* IQUIView+IQKeyboardToolbar.m in Sources */, + 3D8F64B92157522200F04BD3 /* NSString+MJExtension.m in Sources */, 885C43B81E89F79D00685A2E /* WMMenuItem.m in Sources */, 881671DE1EA5DE2B00BEBF23 /* UMComUserProfileDetailView.m in Sources */, 883E79C81D48B0280030E075 /* SetTimeCell.m in Sources */, @@ -15480,20 +16117,25 @@ 8843E20D1EEFD23900176C65 /* IfishDeviceControlNameBaseController.m in Sources */, 88A7EFA51EA5EF0C00D43E8C /* NetCallChatInfo.m in Sources */, 883E78591D48A5E50030E075 /* XuToCenterViewController.m in Sources */, + 3D1C174E2171BB0700A159A8 /* PNLineChartDataItem.m in Sources */, 8871C4411E6D223F000AA49F /* QianDaoBannerViewCell.m in Sources */, 883E79391D48ACFF0030E075 /* DataCenter.m in Sources */, 88597ABA1E56BAF1003D0E5C /* UIView+EXTENSION.m in Sources */, 3D13F83B212FE48000D725F7 /* UIView+GetView.m in Sources */, 88A7EFAD1EA5EF0D00D43E8C /* NTESVideoChatNetStatusView.m in Sources */, - 883E78D01D48A5E50030E075 /* ModifyLoginPasswordResult.m in Sources */, 88602A261E10BC3500F3DB5D /* NIMInputEmoticonManager.m in Sources */, 881A1D401DD4057100BA1AF4 /* MineKanEditSec0ViewCell.m in Sources */, + 3D1C5138221A9EE10096AE43 /* FishControlFourthCell.m in Sources */, 88602F7C1E12002600F3DB5D /* NTESCADisplayLinkHolder.m in Sources */, 88602A541E10BC3500F3DB5D /* NIMSessionListDefaultConfig.m in Sources */, + 3D1C5094221A9EDF0096AE43 /* ContactDAO.m in Sources */, 883E799F1D48B0280030E075 /* BrandCell.m in Sources */, 883E78471D48A5E50030E075 /* KeLiAiSetViewController.m in Sources */, + 3D8F64F8215797E700F04BD3 /* IQUIScrollView+Additions.m in Sources */, 883E76321D4897570030E075 /* baseModel.m in Sources */, + 3D8F64BA2157522200F04BD3 /* MJPropertyKey.m in Sources */, 883E786C1D48A5E50030E075 /* emptyInfoCollectionViewCell.m in Sources */, + 3D1C50C2221A9EE00096AE43 /* CustomBorderButton.m in Sources */, 8868E23D1D7D8BEE00DEABEA /* UIView+ZYDraggable.m in Sources */, 88602A4E1E10BC3500F3DB5D /* NIMSessionNotificationContentView.m in Sources */, 88602A2F1E10BC3500F3DB5D /* NIMMediaItem.m in Sources */, @@ -15504,15 +16146,16 @@ 883E78831D48A5E50030E075 /* ChangeModelDoneController.m in Sources */, 88602F3C1E12002600F3DB5D /* NTESChatroomMaker.m in Sources */, 881672041EA5DE2B00BEBF23 /* UMComSearchBar.m in Sources */, + 3D1C50F9221A9EE00096AE43 /* Message.m in Sources */, 8807074A1DDD40B40076F65A /* P2PShareViewsec2Cell.m in Sources */, 88C1B2BB1DD1745500C2C99A /* NSTimer+Addition.m in Sources */, 885C43B41E89F79D00685A2E /* IfishLiveListViewController.m in Sources */, 88602A851E10BE9100F3DB5D /* IfishPushmassgaeContentView.m in Sources */, 88673B071E1F71DC001D5F49 /* SongNuoDBCenterViewController.m in Sources */, + 3D8F64F3215797E700F04BD3 /* IQPreviousNextView.m in Sources */, 883E78421D48A5E50030E075 /* FourControlSetViewController.m in Sources */, 881B123D1E1CCB1A004C074B /* RuSunLightOrder.m in Sources */, 883E787A1D48A5E50030E075 /* ICSDropShadowView.m in Sources */, - 8856B0F41DEE9FC7009D384A /* CameraBottomCollectionViewCell.m in Sources */, 88602A0D1E10BC3400F3DB5D /* NIMCommonTableDelegate.m in Sources */, 881671A31EA5DE2B00BEBF23 /* UMComPrivateLetterListDataController.m in Sources */, 88602F221E12002500F3DB5D /* NTESCardPortraitCell.m in Sources */, @@ -15520,40 +16163,39 @@ 8816723D1EA5DE2B00BEBF23 /* UMComSimpleNotificationCell.m in Sources */, 880707541DDD43D50076F65A /* P2PShareViewFour4Cell.m in Sources */, 883E783E1D48A5E50030E075 /* FourControlCanChangeImgController.m in Sources */, - 883E78AA1D48A5E50030E075 /* FishControlFourthCell.m in Sources */, 88602A1A1E10BC3400F3DB5D /* NIMPageView.m in Sources */, 886EAC731E2DFDDC00A4DF27 /* ShopDetailThredViewCell.m in Sources */, 883E78FE1D48A5E50030E075 /* ResetViewController.m in Sources */, 883E763F1D4897570030E075 /* SetSelectorTime.m in Sources */, - 883E78AB1D48A5E50030E075 /* FishControlSecondCell.m in Sources */, 881671D71EA5DE2B00BEBF23 /* UMComSysCommonTableViewCell.m in Sources */, 889C25E61E1B7D2D004F745D /* RuSunProtocol.m in Sources */, + 3D1C50AB221A9EDF0096AE43 /* CheckAlarmMessageResult.m in Sources */, 88602F2A1E12002500F3DB5D /* NTESTeamListViewController.m in Sources */, 881671E31EA5DE2B00BEBF23 /* UMComResouceDefines.m in Sources */, 88696FF11E9CAD06005D4AFB /* ShopErWeiMaViewController.m in Sources */, 88602A411E10BC3500F3DB5D /* NIMSessionDataSourceImpl.m in Sources */, 885FBDF91E4D4E3C00E0D7D1 /* ShopServiceListData.m in Sources */, 886D94DF1D6C1DDC00CF0B63 /* MineKanHuNotBindSecondViewCell.m in Sources */, - 883E78C21D48A5E50030E075 /* RecommendInfo.m in Sources */, 88602F511E12002600F3DB5D /* NTESBlackListViewController.m in Sources */, 883E79AA1D48B0280030E075 /* CCMPlayNDropView.m in Sources */, 883E78521D48A5E50030E075 /* TwoControlCenterController.m in Sources */, 88602F6C1E12002600F3DB5D /* NTESSessionCustomLayoutConfig.m in Sources */, 88602FB01E124AF900F3DB5D /* NTESChatroomTextContentConfig.m in Sources */, 8860287D1E10BB1100F3DB5D /* CTAssetSelectionButton.m in Sources */, - 88721D931E0A1B670047B7B1 /* MXSCycleScrollView3.m in Sources */, + 3D8F64CA2157842200F04BD3 /* IfishPackageHeaderVo.m in Sources */, 88591EE71D655B9E00A1316E /* CityModel.m in Sources */, 881477CD1E6FAAEB00BFB79C /* RenQuYinDaoVIew.m in Sources */, 8871C4791E6D4F50000AA49F /* QianDaoTimeLineView.m in Sources */, 88602F671E12002600F3DB5D /* NTESWhiteboardAttachment.m in Sources */, 8839BAEE1EC581BE00CA62CF /* FishActivityData.m in Sources */, + 3D1C17522171BB0700A159A8 /* PNScatterChartData.m in Sources */, 88602A621E10BC3500F3DB5D /* NIMAdvancedTeamMemberCell.m in Sources */, + 3D8F64C42157791D00F04BD3 /* IfishBaseVc.m in Sources */, 88A7EFA81EA5EF0C00D43E8C /* NTESNetChatViewController.m in Sources */, 88F5EFAA1D48D08100CC7CAF /* AFHTTPRequestOperationManager.m in Sources */, 88523E671D5C5E3B008C3948 /* PushMasssageWebViewController.m in Sources */, 881671B71EA5DE2B00BEBF23 /* UMComSimpleLoginHandler.m in Sources */, 8816723F1EA5DE2B00BEBF23 /* UMComSimpleSubCommentViewController.m in Sources */, - 883E78B41D48A5E50030E075 /* CustomBorderButton.m in Sources */, 88602A401E10BC3500F3DB5D /* NIMSessionConfigurator.m in Sources */, 8816720B1EA5DE2B00BEBF23 /* UIView+UMComAddition.m in Sources */, 885EC4C91DB4C73D008134DA /* LXADViewTool.m in Sources */, @@ -15562,12 +16204,14 @@ 881672371EA5DE2B00BEBF23 /* UMComSimpleHomeViewController.m in Sources */, 881671DD1EA5DE2B00BEBF23 /* UMComUserNearbyViewController.m in Sources */, 88F740C01ECC28E800876AED /* ShopAddGoodsViewController.m in Sources */, + 3D1C5112221A9EE00096AE43 /* IfishPlaybackViewCell.m in Sources */, 88742C2E1D63F9AB0074F1F8 /* CertifyListViewFirstCell.m in Sources */, 883E78871D48A5E50030E075 /* DownLoadViewController.m in Sources */, 881671A91EA5DE2B00BEBF23 /* UMComTopicListDataController.m in Sources */, 88602F6F1E12002600F3DB5D /* NTESSearchMessageEntraceCell.m in Sources */, 883E784D1D48A5E50030E075 /* SongNuoSetViewController.m in Sources */, 88602F431E12002600F3DB5D /* NTESChatroomMemberCell.m in Sources */, + 3D1C5117221A9EE00096AE43 /* ShootImgDataSource.m in Sources */, 883E79191D48A74F0030E075 /* ScanViewController.m in Sources */, 88602F361E12002500F3DB5D /* UIView+NTES.m in Sources */, 8860288D1E10BB1100F3DB5D /* CTAssetThumbnailStacks.m in Sources */, @@ -15576,18 +16220,20 @@ 88597AC01E56BAF1003D0E5C /* WFPhotoAlbum.m in Sources */, 88696FE31E9C8E5E005D4AFB /* MemberEditeCommitBtnViewCell.m in Sources */, 881671F21EA5DE2B00BEBF23 /* UMComHorizonCollectionView.m in Sources */, + 3D8F64BE215752AF00F04BD3 /* IfishHeaterVo.m in Sources */, 881672101EA5DE2B00BEBF23 /* UMComAvatarImageView.m in Sources */, 88883B221EF0FFB600CAC0AE /* SongNuo128Name.m in Sources */, - 8815D1321DFAADC300BEA2DA /* IfishCameraRecordThirdCell.m in Sources */, 887001CF1D794D7B00668C8C /* KanHuViewLastCell.m in Sources */, E56A746220FCDBFC000129C9 /* ConnectHotpotViewController.m in Sources */, 886D15831E605EEF0085F7D6 /* CustomeLabel.m in Sources */, E51D7D55208CE08D001FF053 /* CustomModeSetCell.m in Sources */, 8860286E1E10BB1100F3DB5D /* NSBundle+CTAssetsPickerController.m in Sources */, 883E78531D48A5E50030E075 /* TwoControlNinetyninebiteViewController.m in Sources */, + 3D1C513B221A9EE10096AE43 /* FishControlThreedViewCell.m in Sources */, + 3D1C50CD221A9EE00096AE43 /* MPNotificationView.m in Sources */, 88F5EFDA1D48D08100CC7CAF /* Reachability.m in Sources */, - 883E78D71D48A5E50030E075 /* Toast+UIView.m in Sources */, 88F5EFC51D48D08100CC7CAF /* JHRefreshCommonAniView.m in Sources */, + 3D1C50CA221A9EE00096AE43 /* GetContactMessageResult.m in Sources */, 887491F91E795E9400CDA284 /* IfishTaskRuletype.m in Sources */, 881672061EA5DE2B00BEBF23 /* UMComShareCollectionView.m in Sources */, 883E76281D4897570030E075 /* FishTankModel.m in Sources */, @@ -15595,13 +16241,16 @@ 8860D7A61D6D9463001E544C /* shopEditViewImgCell.m in Sources */, 881672271EA5DE2B00BEBF23 /* UMComFeedImageCollectionView.m in Sources */, 883E78EC1D48A5E50030E075 /* ConnectWifiViewController.m in Sources */, + 3D1C512F221A9EE10096AE43 /* IfishCameraRecordSecondCell.m in Sources */, 88F5EFC41D48D08100CC7CAF /* JHRefreshAniBaseView.m in Sources */, 886028931E10BB1100F3DB5D /* NSArray+PureLayout.m in Sources */, 88F5EFCE1D48D08100CC7CAF /* MBProgressHUD.m in Sources */, + 3D8F64F9215797E700F04BD3 /* IQUIView+Hierarchy.m in Sources */, 88602A681E10BC3500F3DB5D /* NIMKitDevice.m in Sources */, + 3D1C174D2171BB0700A159A8 /* PNLineChartData.m in Sources */, 88602F331E12002500F3DB5D /* UIResponder+NTESFirstResponder.m in Sources */, + 3D1C50CB221A9EE00096AE43 /* ModifyLoginPasswordResult.m in Sources */, 88696FD91E9C8C55005D4AFB /* MemberDetailMarkViewCell.m in Sources */, - 883E78A81D48A5E50030E075 /* MonitorBootmView.m in Sources */, 88F5EFBF1D48D08100CC7CAF /* FMDatabaseAdditions.m in Sources */, 881672031EA5DE2B00BEBF23 /* UMComRefreshView.m in Sources */, 3D34479A212CF71C00CF3941 /* IfishHotBarVc.m in Sources */, @@ -15609,8 +16258,10 @@ 88602F4A1E12002600F3DB5D /* NTESContactDataMember.m in Sources */, 881A1D4F1DD41AB000BA1AF4 /* MineKanEditSec1ThredCell.m in Sources */, 885C43BC1E89F79D00685A2E /* WMPageController.m in Sources */, + 3D1C50FA221A9EE00096AE43 /* WaitingPageView.m in Sources */, 881671F31EA5DE2B00BEBF23 /* UMComHorizonMenuView.m in Sources */, 88602A671E10BC3500F3DB5D /* NIMTimePickerView.m in Sources */, + 3DD7AB4F21E2F2FB0064856A /* QRCodeGenerator.m in Sources */, 881F0F5D1D741B9E0091507E /* BaoGaoDownView.m in Sources */, 881671AB1EA5DE2B00BEBF23 /* UMComListDataController.m in Sources */, 889133051ECE999A00F52EBC /* ASPopUpView.m in Sources */, @@ -15618,8 +16269,8 @@ 883E79401D48ACFF0030E075 /* IFISHHttpTool.m in Sources */, 8839BAE51EC5496000CA62CF /* IFishUserActivityListCell.m in Sources */, 88602F871E12002600F3DB5D /* NTESUserUtil.m in Sources */, - 88F5EFBB1D48D08100CC7CAF /* GCDAsyncUdpSocket.m in Sources */, 8843E2101EEFD7BF00176C65 /* RuSunInpdViewController.m in Sources */, + 3D1C5135221A9EE10096AE43 /* YooseConnectFirstViewController.m in Sources */, 882A76031EBB1EF800AD1D15 /* FishShopCer.m in Sources */, 88602A491E10BC3500F3DB5D /* NIMSessionFileTransContentView.m in Sources */, 88602F621E12002600F3DB5D /* NTESJanKenPonAttachment.m in Sources */, @@ -15641,11 +16292,12 @@ 88F5EFCD1D48D08100CC7CAF /* UIView+JHExtension.m in Sources */, 88613F741E5C1E86008D2C69 /* P2PShareViewFeedMessageCell.m in Sources */, 886185C71EF228E100459AD1 /* FourControlName.m in Sources */, - 88721D921E0A1B670047B7B1 /* MXSCycleScrollView.m in Sources */, 881672251EA5DE2B00BEBF23 /* UMComSelectTopicViewController.m in Sources */, + 3D1C5140221A9EE10096AE43 /* BootomViewSoketBackMasgConreol.m in Sources */, 8860287B1E10BB1100F3DB5D /* CTAssetPlayButton.m in Sources */, 883E78601D48A5E50030E075 /* LeftViewController.m in Sources */, 88602A181E10BC3400F3DB5D /* NIMLoadProgressView.m in Sources */, + 3D1C511A221A9EE00096AE43 /* ShotScreenImgViewController.m in Sources */, 883E78FA1D48A5E50030E075 /* LogInViewController.m in Sources */, 883E79A11D48B0280030E075 /* MyFishTankCell.m in Sources */, 881672071EA5DE2B00BEBF23 /* UMComGridTableViewCell.m in Sources */, @@ -15655,8 +16307,6 @@ 886028701E10BB1100F3DB5D /* NSIndexSet+CTAssetsPickerController.m in Sources */, 8860288C1E10BB1100F3DB5D /* CTAssetThumbnailOverlay.m in Sources */, 883E79BA1D48B0280030E075 /* LYPhoto.m in Sources */, - 883E78CF1D48A5E50030E075 /* LoginResult.m in Sources */, - 883E78B81D48A5E50030E075 /* GetContactMessageResult.m in Sources */, 88C598A41EA0A2C200BDC812 /* IfishDocAliGoodsListTitleViewCell.m in Sources */, 881672021EA5DE2B00BEBF23 /* UMImagePickerThumbnailView.m in Sources */, 88602F971E12002600F3DB5D /* NTESLocationViewController.m in Sources */, @@ -15668,21 +16318,23 @@ 886028A11E10BB4800F3DB5D /* M80AttributedLabelURL.m in Sources */, 88602A121E10BC3400F3DB5D /* NIMKit.m in Sources */, 8815D11E1DF7A0E300BEA2DA /* NSTimer+Convenience.m in Sources */, + 3D1C50A4221A9EDF0096AE43 /* ProgressImageView.m in Sources */, 88602A0B1E10BC3400F3DB5D /* UIView+NIM.m in Sources */, 883E793E1D48ACFF0030E075 /* AFHttpTool.m in Sources */, + 3DD7AB5121E2F2FB0064856A /* mask.c in Sources */, 88602F651E12002600F3DB5D /* NTESSessionMsgConverter.m in Sources */, 883E787C1D48A5E50030E075 /* IfishMeViewController.m in Sources */, - 883E78B31D48A5E50030E075 /* ContactDAO.m in Sources */, 885A37641E6E5582007AD930 /* IfishUserAsset.m in Sources */, 888EEB301DC2F37C003C5C5B /* LXWaveProgressView.m in Sources */, + 3D1C5141221A9EE10096AE43 /* MonitorBootmView.m in Sources */, 88602A101E10BC3400F3DB5D /* NIMKitSwitcherCell.m in Sources */, - 88D0F2771EA646E100286022 /* FfmpegInterface.m in Sources */, 88602A421E10BC3500F3DB5D /* NIMSessionInteractorImpl.m in Sources */, 88602A3A1E10BC3500F3DB5D /* NIMUnsupportContentConfig.m in Sources */, + 3D1C17492171BB0700A159A8 /* PNGenericChart.m in Sources */, 88602F8F1E12002600F3DB5D /* NTESAudio2TextViewController.m in Sources */, + 3D1C50FD221A9EE00096AE43 /* YProgressView.m in Sources */, 8871C4331E6CFE98000AA49F /* QianDaoTimeViewCell.m in Sources */, 88742C4A1D645D390074F1F8 /* ShopCertificationHtmlController.m in Sources */, - 883E78D51D48A5E50030E075 /* RegisterResult.m in Sources */, 881671E21EA5DE2B00BEBF23 /* UMComWebViewController.m in Sources */, 881672361EA5DE2B00BEBF23 /* UMComSimpleFeedDetailViewController.m in Sources */, 88597A301E559808003D0E5C /* KanHuGuanLiPictureViewCell.m in Sources */, @@ -15698,29 +16350,30 @@ 885353051D669E43009B828B /* ShopCertifySucssesViewController.m in Sources */, 88883B251EF1091800CAC0AE /* TwoControlNameViewController.m in Sources */, 88602A871E10BE9100F3DB5D /* SessionConfig.m in Sources */, + 3D1C50F3221A9EE00096AE43 /* OpenGLView.mm in Sources */, 883E78351D48A5E50030E075 /* DisconnectNetController.m in Sources */, - 8815D1401DFFC1EA00BEA2DA /* IfishPlaybackViewCell.m in Sources */, + 3D1C5119221A9EE00096AE43 /* KTPhotoView+SDWebImage.m in Sources */, + 3D1C50D6221A9EE00096AE43 /* CheckNewMessageResult.m in Sources */, 887AD4751E7F95B100009BF2 /* WodeUserAssetCell.m in Sources */, + 3D1C5111221A9EE00096AE43 /* P2PPlaybackController.m in Sources */, 88602A381E10BC3500F3DB5D /* NIMTextContentConfig.m in Sources */, 88F5EFB71D48D08100CC7CAF /* UIProgressView+AFNetworking.m in Sources */, + 3D1C174C2171BB0700A159A8 /* PNCircleChart.m in Sources */, 886D94DA1D6C1DA700CF0B63 /* MineKanHuNotBindFirstViewCell.m in Sources */, 88602A3E1E10BC3500F3DB5D /* NIMMessageCellFactory.m in Sources */, 88602F811E12002600F3DB5D /* NTESFileLocationHelper.m in Sources */, 8869B3761E6939FE0010F099 /* NJKWebViewProgressView.m in Sources */, 88602F471E12002600F3DB5D /* NTESLiveMasterInfoView.m in Sources */, 883E79CA1D48B0280030E075 /* TemperatureSetCell.m in Sources */, + 3DD7AB5321E2F2FB0064856A /* rscode.c in Sources */, 885A376E1E6EBB67007AD930 /* QianDaoGiftView.m in Sources */, 88F5EE4E1D48CA2800CC7CAF /* ESP_NetUtil.m in Sources */, - 88F5EFBD1D48D08100CC7CAF /* AsyncUdpSocket.m in Sources */, 883E763E1D4897570030E075 /* ServerBackDeviceLogInModel.m in Sources */, 88F5EE511D48CA2800CC7CAF /* ESPTouchTask.m in Sources */, - 88F5EFEE1D48D08100CC7CAF /* qrspec.c in Sources */, - 8815D2081E037B7700BEA2DA /* PlayBaseViewController.m in Sources */, 88602A141E10BC3400F3DB5D /* NIMBadgeView.m in Sources */, + 3D1C5098221A9EDF0096AE43 /* UDManager.m in Sources */, + 3D1C50EA221A9EE00096AE43 /* des2.c in Sources */, 88613A211E80F04C00C67359 /* ShouYeAdViewCell.m in Sources */, - 883E78B91D48A5E50030E075 /* AlarmDAO.m in Sources */, - 883E78DC1D48A5E50030E075 /* YProgressView.m in Sources */, - 883E78D91D48A5E50030E075 /* UDManager.m in Sources */, 886970081E9E0EA0005D4AFB /* IfishAlibcWebViewController.m in Sources */, 883E78EE1D48A5E50030E075 /* FirstConnectWifiController.m in Sources */, 8868FE5B1E66C8D7002F7F33 /* DengJiShuoMingViewBootomCell.m in Sources */, @@ -15730,8 +16383,8 @@ 888EEB4A1DC328D0003C5C5B /* GYChangeTextView.m in Sources */, 88602A341E10BC3500F3DB5D /* NIMFileContentConfig.m in Sources */, 88602F771E12002600F3DB5D /* NTESMutiClientsHeaderView.m in Sources */, - 883E78A51D48A5E50030E075 /* YooseeNextConnectViewController.mm in Sources */, 886D94D21D6BFFFD00CF0B63 /* LookafterPhoneNumberCell.m in Sources */, + 3D1C5080221A9EDF0096AE43 /* KTThumbsView.m in Sources */, 883E76381D4897570030E075 /* DeviceOnlineModel.m in Sources */, 882C85B61EB08295001CC414 /* DiscountCoupon.m in Sources */, 881477D61E6FE9D300BFB79C /* IfishGoldAndExpTostView.m in Sources */, @@ -15739,34 +16392,37 @@ 88602A0A1E10BC3400F3DB5D /* UITableView+NIMScrollToBottom.m in Sources */, 885928CA1E67EC0400E0011E /* JingYanValuelist.m in Sources */, 886F4E041D76CCDC001EDA34 /* PingfenModel.m in Sources */, - 8815D2051E037AFD00BEA2DA /* P2PPlayingbackVC.m in Sources */, + 3DD7AB9921E474940064856A /* AsyncUdpSocket.m in Sources */, + 3D1C506A215CB6F600A2E5D6 /* IfishHotBarHeader.m in Sources */, E5317A19211896080014AFDD /* IFishUDPHelperBackMsgModel.m in Sources */, - 8815D1241DFA8A6500BEA2DA /* CameraRecordViewController.m in Sources */, - 883E78D21D48A5E50030E075 /* NetManager.m in Sources */, 881672231EA5DE2B00BEBF23 /* UMComChangeBorderBtn.m in Sources */, 881671D41EA5DE2B00BEBF23 /* UMComReplyEditViewController.m in Sources */, 88602A581E10BC3500F3DB5D /* NIMTeamCardOperationItem.m in Sources */, 887495571DAE1C7000F8F4E2 /* NSString+JSON.m in Sources */, - 883E78C81D48A5E50030E075 /* KTPhotoBrowserGlobal.m in Sources */, 8839BAE91EC550D100CA62CF /* IFishActivityCateView.m in Sources */, 886B80611D62EC3400E1B9B3 /* TanSuoViewModel.m in Sources */, + 3DD7AB4D21E2F2FB0064856A /* qrencode.c in Sources */, 88673B0A1E1F75DF001D5F49 /* SongNuoDBSetViewController.m in Sources */, 886028861E10BB1100F3DB5D /* CTAssetsPageView.m in Sources */, 883E79B71D48B0280030E075 /* MyPickerView.m in Sources */, 883E783F1D48A5E50030E075 /* FourControlViewController.m in Sources */, 883E79B61D48B0280030E075 /* MydatePickerView.m in Sources */, + 3D1C50A1221A9EDF0096AE43 /* UIViewExt.m in Sources */, + 3D1C513D221A9EE10096AE43 /* FishControlFirstCell.m in Sources */, 886185D61EF26F6C00459AD1 /* HaveHotCoolWenDuPicview.m in Sources */, 88673AFC1E1E57CB001D5F49 /* RuSunGuiDeng.m in Sources */, 883E788B1D48A5E50030E075 /* infoSureBtnCell.m in Sources */, 88602A471E10BC3500F3DB5D /* NIMSessionTimestampCell.m in Sources */, - 883E78D41D48A5E50030E075 /* ProgressImageView.m in Sources */, 883E78F51D48A5E50030E075 /* SelectDeviceViewController.m in Sources */, 88C1B1FB1DCB6E8700C2C99A /* IfishNewsModel.m in Sources */, 882957FE1DC0443700E9DDD7 /* IfishSelectCardViewController.m in Sources */, 88673B041E1F6A4F001D5F49 /* SongNuoBDProtocol.m in Sources */, + 3D1C5114221A9EE00096AE43 /* KTThumbView+SDWebImage.m in Sources */, 88645B1B1E83B81E00234DB4 /* IfishInfoDetailPingLunCell.m in Sources */, 881671B31EA5DE2B00BEBF23 /* UMComRegisterViewController.m in Sources */, + 3DD7AB5021E2F2FB0064856A /* qrinput.c in Sources */, 88602F461E12002600F3DB5D /* NTESLiveBroadcastView.m in Sources */, + 3D1C174F2171BB0700A159A8 /* PNPieChart.m in Sources */, 88F5EFCB1D48D08100CC7CAF /* UIScrollView+JHExtension.m in Sources */, 88C1B1CB1DC99B0500C2C99A /* TabMineDeivceListViewCell.m in Sources */, 88602F851E12002600F3DB5D /* NTESSessionUtil.m in Sources */, @@ -15774,6 +16430,7 @@ 88602A831E10BE9100F3DB5D /* CellLayoutConfig.m in Sources */, 8853531C1D672695009B828B /* ShopCertifyStausModel.m in Sources */, 883E79C41D48B0280030E075 /* SecondSetTimeCell.m in Sources */, + 3D1C5081221A9EDF0096AE43 /* KTThumbView.m in Sources */, 8868FE6A1E66D5A8002F7F33 /* JingYanvalueTopViewCell.m in Sources */, 88602F301E12002500F3DB5D /* UIAlertView+NTESBlock.m in Sources */, 883E76291D4897570030E075 /* InfoModel.m in Sources */, @@ -15787,14 +16444,16 @@ E51D7D4B208CD528001FF053 /* RuiMeiCHNameCustom.m in Sources */, 88602F711E12002600F3DB5D /* NTESSessionJankenponContentView.m in Sources */, 88602F821E12002600F3DB5D /* NTESNotificationCenter.m in Sources */, + 3D1C50F7221A9EE00096AE43 /* AlarmDAO.m in Sources */, 882A760C1EBB27BE00AD1D15 /* ShopCerPart1InfoViewCell.m in Sources */, - 883E78C31D48A5E50030E075 /* RecommendInfoDAO.m in Sources */, 883E79B01D48B0280030E075 /* UIImage+ImageEffects.m in Sources */, + 3D1C5123221A9EE00096AE43 /* CameraRecordViewController.m in Sources */, 88602F491E12002600F3DB5D /* NTESCustomSysNotificationSender.m in Sources */, 88602A301E10BC3500F3DB5D /* NIMMessageModel.m in Sources */, 88602A511E10BC3500F3DB5D /* NIMSessionVideoContentView.m in Sources */, 881671C91EA5DE2B00BEBF23 /* UMComUserInfoBar.m in Sources */, 881F0F611D741DB80091507E /* BaoGaoDownViewCell.m in Sources */, + 3D1C50A8221A9EDF0096AE43 /* MXSCycleScrollView3.m in Sources */, 881672081EA5DE2B00BEBF23 /* UMComGridTableViewCellOne.m in Sources */, 886185D01EF2561700459AD1 /* XuToControlName.m in Sources */, 88602A461E10BC3500F3DB5D /* NIMMessageCell.m in Sources */, @@ -15803,13 +16462,11 @@ 883E78371D48A5E50030E075 /* MoreBrandController.m in Sources */, 88602F891E12002600F3DB5D /* NTESSpellingCenter.m in Sources */, 88602F401E12002600F3DB5D /* NTESLiveInfoViewController.m in Sources */, - 883E78D61D48A5E50030E075 /* TabView.m in Sources */, 885C43BA1E89F79D00685A2E /* WMProgressView.m in Sources */, 881671FF1EA5DE2B00BEBF23 /* UMAssetsCollectionOverlayView.m in Sources */, 88613F701E5C1E86008D2C69 /* IfishFeedCellHeaghtCalculator.m in Sources */, 8816722E1EA5DE2B00BEBF23 /* UMComFeedDetailCommentCell.m in Sources */, 883E78951D48A5E50030E075 /* IfishMassageViewCell.m in Sources */, - 883E78B11D48A5E50030E075 /* ConnectFailurePromptView.m in Sources */, 887DA78C1D547A49001DB880 /* IfishTanSuoViewCell.m in Sources */, 8816720D1EA5DE2B00BEBF23 /* UMComEmojiPageView.m in Sources */, 881672441EA5DE2B00BEBF23 /* UMCommunityUI.m in Sources */, @@ -15817,7 +16474,6 @@ 883E787F1D48A5E50030E075 /* AboutUsViewController.m in Sources */, 88602A641E10BC3500F3DB5D /* NIMTeamCardHeaderCell.m in Sources */, 88602A241E10BC3500F3DB5D /* NIMInputEmoticonButton.m in Sources */, - 883E78C91D48A5E50030E075 /* KTPhotoScrollViewController.m in Sources */, 8816720F1EA5DE2B00BEBF23 /* UMComWebView.m in Sources */, 88597ABB1E56BAF1003D0E5C /* DrawView.m in Sources */, 88602A161E10BC3400F3DB5D /* NIMKitMediaFetcher.m in Sources */, @@ -15829,25 +16485,28 @@ 881671E61EA5DE2B00BEBF23 /* UMComActionPickerAddView.m in Sources */, 88602F291E12002500F3DB5D /* NTESSessionCardViewController.m in Sources */, 883E78631D48A5E50030E075 /* CameraViewCell.m in Sources */, - 883E78AE1D48A5E50030E075 /* Alarm.m in Sources */, + 3D1C512D221A9EE10096AE43 /* CameraBottomCollectionViewCell.m in Sources */, 3D5C437321339F8F00E15B66 /* IfishChatView.m in Sources */, 881671FB1EA5DE2B00BEBF23 /* UMAssetsCollectionCell.m in Sources */, 88678C771E8C9E7F0043DA55 /* ifishLiveListAdViewCell.m in Sources */, 88F5EE571D48CA2800CC7CAF /* ESPGuideCode.m in Sources */, 88602F2C1E12002500F3DB5D /* NSData+NTES.m in Sources */, - 88F5EFEA1D48D08100CC7CAF /* mask.c in Sources */, 883E76371D4897570030E075 /* deviceLoginModel.m in Sources */, + 3D1C50C1221A9EE00096AE43 /* Utils.m in Sources */, 88F5EFCC1D48D08100CC7CAF /* UIScrollView+JHRefresh.m in Sources */, 88591EE31D655B9E00A1316E /* AreaModel.m in Sources */, 881671DA1EA5DE2B00BEBF23 /* UMComProfileSettingController.m in Sources */, 883283681EAF235300A47157 /* GolaCoastListViewCell.m in Sources */, 88591EE51D655B9E00A1316E /* ChinaArea.m in Sources */, 88597ABC1E56BAF1003D0E5C /* PopView.m in Sources */, + 3D8F64C12157530000F04BD3 /* IfishHistroyVo.m in Sources */, 880707F91DE3DF540076F65A /* MineKanKanRoomInfo.m in Sources */, 88602F6D1E12002600F3DB5D /* NTESSessionTipConfig.m in Sources */, 88602A3F1E10BC3500F3DB5D /* NIMMessageMaker.m in Sources */, + 3D1C509E221A9EDF0096AE43 /* Toast+UIView.m in Sources */, 88602A4D1E10BC3500F3DB5D /* NIMSessionNetChatNotifyContentView.m in Sources */, 881672221EA5DE2B00BEBF23 /* UMComBriefEditViewController.m in Sources */, + 3D1C511C221A9EE00096AE43 /* IfishCameraModel.m in Sources */, 881672341EA5DE2B00BEBF23 /* UMComLikeButtonTableViewCell.m in Sources */, 88F5EFD31D48D08100CC7CAF /* MMProgressHUD.m in Sources */, 88779EB21E28BE7D00209ABA /* IfishShopDetailViewController.m in Sources */, @@ -15855,6 +16514,7 @@ 886028881E10BB1100F3DB5D /* CTAssetsPickerAccessDeniedView.m in Sources */, 88602F911E12002600F3DB5D /* NTESFilePreViewController.m in Sources */, 886028741E10BB1100F3DB5D /* PHImageManager+CTAssetsPickerController.m in Sources */, + 3D8F64F1215797E700F04BD3 /* IQBarButtonItem.m in Sources */, 88602F561E12002600F3DB5D /* NTESCustomNotificationObject.m in Sources */, 8853D99A1E24EED700776BF4 /* ShuoMingShuCell.m in Sources */, 8816721A1EA5DE2B00BEBF23 /* UMComCustomMenuViewController.m in Sources */, @@ -15870,15 +16530,13 @@ 881671A41EA5DE2B00BEBF23 /* UMComPrivateMessageListDataController.m in Sources */, 881671F41EA5DE2B00BEBF23 /* UMComLabel.m in Sources */, 8816723A1EA5DE2B00BEBF23 /* UMComSimpleCommentViewController.m in Sources */, - 8815D11A1DF6908800BEA2DA /* IfishRecVideoViewCell.m in Sources */, + 3D1C17482171BB0700A159A8 /* PNRadarChartDataItem.m in Sources */, 8871C44B1E6D2A93000AA49F /* QianDaoGongLueViewCell.m in Sources */, 8871FAA41EBC0CE30038E99A /* ShopCerProgressHeaderView.m in Sources */, 881A1D661DD561DD00BA1AF4 /* IfishP2PVideoPlayView.m in Sources */, 88602DBC1E10D97E00F3DB5D /* UIImage+WebP.m in Sources */, - 8815D20E1E03CC6300BEA2DA /* OpenGLView.mm in Sources */, 88F5EFD81D48D08100CC7CAF /* MMVectorImage.m in Sources */, 883E79B81D48B0280030E075 /* remindCyclePic.m in Sources */, - 883E78C61D48A5E50030E075 /* YAudioStreamPlayer.m in Sources */, 88696FCF1E9C8872005D4AFB /* MemeberEditeViewCustomCell.m in Sources */, 881671AA1EA5DE2B00BEBF23 /* UMComDataOperationErrorHandler.m in Sources */, 881671D21EA5DE2B00BEBF23 /* UMComPostReplyEditView.m in Sources */, @@ -15888,15 +16546,14 @@ 88597AC21E56BAF1003D0E5C /* WFTailoringViewController.m in Sources */, 882957FD1DC0443600E9DDD7 /* IfishCardScrollView.m in Sources */, E51D7D4E208CD5C8001FF053 /* RuiMeiCHControl.m in Sources */, - 883E78A01D48A5E50030E075 /* ShotScreenImgViewController.m in Sources */, 88602DB81E10D97E00F3DB5D /* SDWebImagePrefetcher.m in Sources */, 88602F5B1E12002600F3DB5D /* NTESSystemNotificationViewController.m in Sources */, 885979EF1E541C28003D0E5C /* IfishShopEditeNewViewController.m in Sources */, 883E784F1D48A5E50030E075 /* SetTimeController.m in Sources */, - 8815D1F81E026B8B00BEA2DA /* UIViewExt.m in Sources */, 881671A01EA5DE2B00BEBF23 /* UMComFeedListDataController.m in Sources */, 883E78731D48A5E50030E075 /* SetNameTextViewController.m in Sources */, 88F5EFD51D48D08100CC7CAF /* MMProgressHUDViewController.m in Sources */, + 3D1C507E221A9EDF0096AE43 /* KTPhotoBrowserGlobal.m in Sources */, 88F5EE561D48CA2800CC7CAF /* ESPDatumCode.m in Sources */, 88602F761E12002600F3DB5D /* NTESListHeader.m in Sources */, 883E78931D48A5E50030E075 /* IfishDiscoverViewController.m in Sources */, @@ -15910,18 +16567,17 @@ 88F5EE501D48CA2800CC7CAF /* ESPTouchResult.m in Sources */, 88742C3D1D63FA270074F1F8 /* CertifyListFourthCell.m in Sources */, 8871FAAF1EBC2CE60038E99A /* ShopCerPatr1DetailLocationCell.m in Sources */, - 88721D911E0A1B670047B7B1 /* CyclePickerView.m in Sources */, 88597A2B1E5597C8003D0E5C /* KanHuGuanLi1ViewCell.m in Sources */, 88883B1F1EF0FF6000CAC0AE /* SonNuo128NameViewController.m in Sources */, 8867F5B01E65421900AF021C /* IifshMineDJViewController.m in Sources */, 881671D81EA5DE2B00BEBF23 /* UMComSysLikeTableViewCell.m in Sources */, 887069531D4EE8A600BCF675 /* PopCell.m in Sources */, 887491F31E7921E400CDA284 /* IfishInformationListViewCell.m in Sources */, + 3D8F64B22157522100F04BD3 /* MJPropertyType.m in Sources */, 88602A281E10BC3500F3DB5D /* NIMInputEmoticonTabView.m in Sources */, - 883E78D31D48A5E50030E075 /* OBGradientView.m in Sources */, 88613F781E5C31E6008D2C69 /* XuanYanCellHCaculator.m in Sources */, - 8815D20B1E03B64A00BEA2DA /* ShapeRenderNotifyMsg.mm in Sources */, 886FB18B1E5A977700256332 /* FishDoctorViewController.m in Sources */, + 3D8F64B32157522100F04BD3 /* NSObject+MJKeyValue.m in Sources */, 88602A441E10BC3500F3DB5D /* NIMSessionMsgDatasource.m in Sources */, 886028761E10BB1100F3DB5D /* UIImage+CTAssetsPickerController.m in Sources */, 887491EF1E79082300CDA284 /* MineGoldModel.m in Sources */, @@ -15932,32 +16588,35 @@ 88602F3A1E12002600F3DB5D /* NTESChatroomManager.m in Sources */, 883E78811D48A5E50030E075 /* ChangeMobleController.m in Sources */, 883A3D1E1EC45C4900DA84FF /* IFishUserActivityData.m in Sources */, + 3D1C50EB221A9EE00096AE43 /* FListManager.m in Sources */, + 3D1C5107221A9EE00096AE43 /* IfishP2PPlayBackListViewController.m in Sources */, + 3D8F64F6215797E700F04BD3 /* IQNSArray+Sort.m in Sources */, 885FBDEE1E4C3E4F00E0D7D1 /* ShopServiceListCell.m in Sources */, + 3D1C5142221A9EE10096AE43 /* FishTankBootmDataHelper.m in Sources */, 889C14F81EA73CF200470F50 /* IfishLoadingWebViewController.m in Sources */, 8874610B1D50530A00713863 /* CollectionheaderView.m in Sources */, - 883E789B1D48A5E50030E075 /* IfishP2PMonitorController.m in Sources */, 88674A691E4AEABF00C647BB /* UINavigationBar+Background.m in Sources */, 88883B191EF0DA8100CAC0AE /* SongNuo86NameViewController.m in Sources */, 885C43B61E89F79D00685A2E /* IfishLivePopularListViewController.m in Sources */, 88F5EE581D48CA2800CC7CAF /* ESPTouchGenerator.m in Sources */, - 8815D14B1E0144AA00BEA2DA /* IfishCameraRecordFourCell.m in Sources */, 883E79A91D48B0280030E075 /* CCMBorderView.m in Sources */, - 883E789A1D48A5E50030E075 /* IfishCameraModel.m in Sources */, 885FBDE01E4C21FD00E0D7D1 /* WoShiShangJiaViewController.m in Sources */, 8871FAAA1EBC2CAF0038E99A /* shopCerpart1LoactionCell.m in Sources */, 883E78891D48A5E50030E075 /* InfoQianMingCell.m in Sources */, - 883E789D1D48A5E50030E075 /* KTPhotoView+SDWebImage.m in Sources */, 88602F881E12002600F3DB5D /* NTESPinyinConverter.m in Sources */, 883E78F11D48A5E50030E075 /* SaySomethingViewController.m in Sources */, - 883E78AC1D48A5E50030E075 /* FishControlThreedViewCell.m in Sources */, 881671B91EA5DE2B00BEBF23 /* UMComShareManager.m in Sources */, + 3D1C5113221A9EE00096AE43 /* IfishP2PMonitorController.m in Sources */, 88602A1C1E10BC3400F3DB5D /* NIMGroupedDataCollection.m in Sources */, + 3D1C50F4221A9EE00096AE43 /* UDPManager.m in Sources */, 883E78881D48A5E50030E075 /* LeftCellmodel.m in Sources */, 883E78651D48A5E50030E075 /* CollectionReusableView.m in Sources */, 88F5EFB01D48D08100CC7CAF /* AFURLResponseSerialization.m in Sources */, 886FB1B51E5AA04100256332 /* FIshDocSectionTableView3Cell.m in Sources */, + 3D1C17452171BB0700A159A8 /* PNPieChartDataItem.m in Sources */, 883E79B41D48B0280030E075 /* MyHud.m in Sources */, 88602F6A1E12002600F3DB5D /* NTESDemoService.m in Sources */, + 3DD7AB9A21E474940064856A /* AsyncSocket.m in Sources */, 886B80641D62F57000E1B9B3 /* SOngNuoGuiDeng.m in Sources */, 881F0F591D73DFFF0091507E /* BaoGaoViewThirdCell.m in Sources */, 88653C9B1E76691E00FF973E /* IfishInformationViewController.m in Sources */, @@ -15966,11 +16625,13 @@ 88D3373C1DC7440C006C0ADB /* IfishConnectingView.m in Sources */, 8856B0EC1DED4AE0009D384A /* IfishUserDefaultHelper.m in Sources */, 881671C41EA5DE2B00BEBF23 /* UMComTableViewCell.m in Sources */, + 3D1C50DA221A9EE00096AE43 /* RecommendInfo.m in Sources */, 88602F951E12002600F3DB5D /* NTESGalleryViewController.m in Sources */, 883E79B21D48B0280030E075 /* MerchantCell.m in Sources */, 883E76421D4897570030E075 /* TimerSateModel.m in Sources */, 88602F601E12002600F3DB5D /* NTESChartletAttachment.m in Sources */, 881869341D6FDD3B00CE9DFF /* ShopKanHuP2PViewController.m in Sources */, + 3D8F64B52157522100F04BD3 /* NSObject+MJCoding.m in Sources */, 886028A21E10BB4800F3DB5D /* NSMutableAttributedString+M80.m in Sources */, 88602DB91E10D97E00F3DB5D /* UIButton+WebCache.m in Sources */, 883E762F1D4897570030E075 /* TemperatureSetModel.m in Sources */, @@ -15983,6 +16644,7 @@ 88602A5B1E10BC3500F3DB5D /* NIMUsrInfoData.m in Sources */, 88602F6E1E12002600F3DB5D /* NTESSearchMessageContentCell.m in Sources */, 883E78911D48A5E50030E075 /* leftCell.m in Sources */, + 3D1C50DF221A9EE00096AE43 /* MessageDAO.m in Sources */, 88605F1C1D8256600037F1AA /* ShareReportCell.m in Sources */, 881672051EA5DE2B00BEBF23 /* UMComSegmentedControl.m in Sources */, 88F5EFC91D48D08100CC7CAF /* JHRefreshFooterView.m in Sources */, @@ -15994,10 +16656,10 @@ 88602A291E10BC3500F3DB5D /* NIMInputMoreContainerView.m in Sources */, 881671C71EA5DE2B00BEBF23 /* UMComFindTableViewCell.m in Sources */, 887492541E7BDA1100CDA284 /* UITabBar+addRedPointBadge.m in Sources */, + 3D1C5136221A9EE10096AE43 /* YooseeCenterViewController.m in Sources */, 8869B3751E6939FE0010F099 /* NJKWebViewProgress.m in Sources */, 881B123A1E1CCA65004C074B /* RuSunHaveHeateViewController.m in Sources */, 886EAC621E2DE91300A4DF27 /* KanHuFirstSectionViewCell.m in Sources */, - 88721D7E1E0913530047B7B1 /* FXBlurView.m in Sources */, 88602F231E12002500F3DB5D /* NTESColorButtonCell.m in Sources */, 881671D61EA5DE2B00BEBF23 /* UMComSysCommentCell.m in Sources */, 885C43B31E89F79D00685A2E /* IfishLiveListViewCell.m in Sources */, @@ -16005,6 +16667,7 @@ 883E76241D4897570030E075 /* DropViewModel.m in Sources */, 8891330A1ECE999A00F52EBC /* IfishShopGoodsVideoRecordViewController.m in Sources */, 88380DA91EB1A14900FC7C0D /* IfishGoodsManageViewController.m in Sources */, + 3D8F64BB2157522200F04BD3 /* MJFoundation.m in Sources */, 8860D79D1D6D91A2001E544C /* ShopEditViewController.m in Sources */, 88602A451E10BC3500F3DB5D /* NIMSessionTableAdapter.m in Sources */, 886B80731D63112000E1B9B3 /* CertificationViewSecondCell.m in Sources */, @@ -16019,6 +16682,7 @@ 88696FCA1E9C8788005D4AFB /* EditeMemberTitleViewCell.m in Sources */, 881671E51EA5DE2B00BEBF23 /* UMComActionDeleteView.m in Sources */, 886D94D61D6C1BB100CF0B63 /* MineKanHuViewController.m in Sources */, + 3D1C50D2221A9EE00096AE43 /* UIScrollView+SVInfiniteScrolling.m in Sources */, 88602A061E10BC3400F3DB5D /* M80AttributedLabel+NIMKit.m in Sources */, 881671E11EA5DE2B00BEBF23 /* UMComUserTableViewController.m in Sources */, 885FBDE91E4C3E1000E0D7D1 /* ShopAlreadyCertifyViewCell.m in Sources */, @@ -16026,19 +16690,19 @@ 88F5EE4D1D48CA2800CC7CAF /* ESP_CRC8.m in Sources */, 886028A01E10BB4800F3DB5D /* M80AttributedLabelAttachment.m in Sources */, 88602A351E10BC3500F3DB5D /* NIMImageContentConfig.m in Sources */, - 883E789F1D48A5E50030E075 /* ShootImgDataSource.m in Sources */, - 88F5EFEB1D48D08100CC7CAF /* QRCodeGenerator.m in Sources */, 8869B3B61E696E770010F099 /* IfishUserObsever.m in Sources */, 881671EA1EA5DE2B00BEBF23 /* UMComButton.m in Sources */, 88602A5C1E10BC3500F3DB5D /* NIMAdvancedTeamCardViewController.m in Sources */, 881671EF1EA5DE2B00BEBF23 /* UMComGridViewerController.m in Sources */, 883E79411D48ACFF0030E075 /* MyMD5.m in Sources */, 885C43BB1E89F79D00685A2E /* WMScrollView.m in Sources */, + 3D1C508A221A9EDF0096AE43 /* KTThumbsViewController.m in Sources */, 886484131EE135660046C3BD /* RunSun84biteCenterViewController.m in Sources */, 8816722D1EA5DE2B00BEBF23 /* UMComSimpleTopicFeedTableViewController.m in Sources */, 883E78851D48A5E50030E075 /* ChangeSecretCodeController.m in Sources */, 889133061ECE999A00F52EBC /* ASProgressPopUpView.m in Sources */, 885692AC1E822F0B00C51617 /* IfishZiXunAdViewCell.m in Sources */, + 3D1C509B221A9EDF0096AE43 /* CustomTopBar.m in Sources */, 88602A321E10BC3500F3DB5D /* NIMAudioContentConfig.m in Sources */, 883E78461D48A5E50030E075 /* KeLiAiLightModel.m in Sources */, 88F5EFB41D48D08100CC7CAF /* UIAlertView+AFNetworking.m in Sources */, @@ -16048,15 +16712,13 @@ 881A1D591DD41C0700BA1AF4 /* MineKanEditSec2SecCell.m in Sources */, 888EEB5F1DC346D3003C5C5B /* FBShimmeringView.m in Sources */, 8860288B1E10BB1100F3DB5D /* CTAssetsViewControllerTransition.m in Sources */, + 3D1C174B2171BB0700A159A8 /* PNLineChart.m in Sources */, + 3D1C50E7221A9EE00096AE43 /* CameraManager.m in Sources */, 8816719F1EA5DE2B00BEBF23 /* UMComFeedEditDataController.m in Sources */, - 883E78A91D48A5E50030E075 /* FishControlFirstCell.m in Sources */, - 883E78B21D48A5E50030E075 /* Contact.m in Sources */, 883BCD741ED58B810046283B /* ShopDetailViewGoodsViewCell.m in Sources */, - 883E78A11D48A5E50030E075 /* YooseConnectFirstViewController.m in Sources */, 883E790F1D48A74F0030E075 /* CreatErWeiMaController.m in Sources */, 881A1D6D1DD571C100BA1AF4 /* IfishP2PLivePlayViewController.m in Sources */, 8871C42F1E6CF9E0000AA49F /* QianDaoViewController.m in Sources */, - 883E78B61D48A5E50030E075 /* CustomView.m in Sources */, 88602DB11E10D97E00F3DB5D /* NSData+ImageContentType.m in Sources */, 8871FABE1EBC544A0038E99A /* ShopCerPart3DoneViewCell.m in Sources */, 88591EE81D655B9E00A1316E /* ProvinceModel.m in Sources */, @@ -16064,8 +16726,8 @@ 88883B1C1EF0DAA500CAC0AE /* SongNuo86Name.m in Sources */, 88602F9E1E12002600F3DB5D /* NTESVideoViewController.m in Sources */, 88696FC51E9C81F2005D4AFB /* ShopMemberDetailViewInfoCell.m in Sources */, - 883E78AD1D48A5E50030E075 /* AccountResult.m in Sources */, - 883E78C41D48A5E50030E075 /* ShakeManager.m in Sources */, + 3DD7AB9C21E474940064856A /* GCDAsyncSocket.m in Sources */, + 3D1C50D8221A9EE00096AE43 /* FXBlurView.m in Sources */, 883E76211D4897570030E075 /* BrandModel.m in Sources */, 88602F451E12002600F3DB5D /* NTESLiveActionView.m in Sources */, 88602A881E10BE9200F3DB5D /* IfishSessionViewController.m in Sources */, @@ -16077,16 +16739,17 @@ 88F5EFD41D48D08100CC7CAF /* MMProgressHUDOverlayView.m in Sources */, 883E76401D4897570030E075 /* setWaringTpModel.m in Sources */, 8816720C1EA5DE2B00BEBF23 /* UMComEmojiKeyBoardView.m in Sources */, - 883E78A71D48A5E50030E075 /* ifishdeviceListCell.m in Sources */, 881A1D5E1DD41C2200BA1AF4 /* MineKanEditSec2ThredCell.m in Sources */, 88768EAE1ED6C6D800545E23 /* ShopGoodsCollectionCell.m in Sources */, 88602A5F1E10BC3500F3DB5D /* NIMTeamAnnouncementListViewController.m in Sources */, + 3D1C50D4221A9EE00096AE43 /* SVPullToRefresh.m in Sources */, 881671CC1EA5DE2B00BEBF23 /* UMComLocationListController.m in Sources */, 886FB1AB1E5A9FFB00256332 /* FishDocSection1View1Cell.m in Sources */, 88602A4C1E10BC3500F3DB5D /* NIMSessionMessageContentView.m in Sources */, 8874920C1E7A8E2D00CDA284 /* IfishDoctorTiJiaoViewCell.m in Sources */, 880707FE1DE6C18A0076F65A /* KanKanListDataHelper.m in Sources */, 88F5EFA91D48D08100CC7CAF /* AFHTTPRequestOperation.m in Sources */, + 3D1C50CF221A9EE00096AE43 /* ConnectFailurePromptView.m in Sources */, 883E78441D48A5E50030E075 /* KeLiAiBackmassageDataUnity.m in Sources */, 88602F831E12002600F3DB5D /* NTESSDKConfig.m in Sources */, 881671AF1EA5DE2B00BEBF23 /* UMComUserAlbumDataController.m in Sources */, @@ -16101,20 +16764,20 @@ 88602F241E12002500F3DB5D /* NTESJionTeamViewController.m in Sources */, 883E783B1D48A5E50030E075 /* StoreViewController.m in Sources */, 8867C8761D49B6BC0029F1FA /* TabBarDeviceShouYeCell.m in Sources */, - 8815D1281DFAACED00BEA2DA /* IfishCameraRecordfirstCell.m in Sources */, 885979E21E52E38E003D0E5C /* MinekanHuNotSelectShopController.m in Sources */, E58C998A2081A6930004C42B /* RuiMeiBackMsgUtils.m in Sources */, + 3D8F64FA215797E700F04BD3 /* IQUIViewController+Additions.m in Sources */, 88602DB41E10D97E00F3DB5D /* SDWebImageDecoder.m in Sources */, - 8815D13C1DFF892A00BEA2DA /* CameraNoParyBackVideoView.m in Sources */, 889133391ECEB97D00F52EBC /* VideoEditeNameViewCell.m in Sources */, 883E76351D4897570030E075 /* BackmassegeModel.m in Sources */, - 883E78BD1D48A5E50030E075 /* Message.m in Sources */, 88602A861E10BE9100F3DB5D /* RemoteExtMassageModel.m in Sources */, 881A1D541DD41BEE00BA1AF4 /* MineKanEditSec2FirstCell.m in Sources */, 883E78321D48A5E50030E075 /* BrandDetailViewController.m in Sources */, + 3D1C50DE221A9EE00096AE43 /* ShapeRenderNotifyMsg.mm in Sources */, 881671A11EA5DE2B00BEBF23 /* UMComFeedDetailDataController.m in Sources */, 886028921E10BB1100F3DB5D /* ALView+PureLayout.m in Sources */, 883E793B1D48ACFF0030E075 /* IfishDatabaseManager.m in Sources */, + 3D1C17512171BB0700A159A8 /* PNColor.m in Sources */, 883E787B1D48A5E50030E075 /* IfishMianTabViewController.m in Sources */, 885FBE241E4D8C7F00E0D7D1 /* WhiteNavBaseViewController.m in Sources */, 88597AB91E56BAF1003D0E5C /* UIButton+BBTButton.m in Sources */, @@ -16122,16 +16785,17 @@ 8864841F1EE166A40046C3BD /* RuSunChangeNameTextViewCell.m in Sources */, 88602F2E1E12002500F3DB5D /* NSString+NTES.m in Sources */, 88602A311E10BC3500F3DB5D /* NIMTimestampModel.m in Sources */, + 3D8F64FB215797E700F04BD3 /* IQKeyboardReturnKeyHandler.m in Sources */, 88779EAB1E28999600209ABA /* JuNengCCSetViewController.m in Sources */, 88602FAF1E124AF900F3DB5D /* NTESCellLayoutConfig.m in Sources */, 883E762A1D4897570030E075 /* merchantModel.m in Sources */, 883E78451D48A5E50030E075 /* KeLiAiCenterViewController.m in Sources */, 883E76231D4897570030E075 /* MyChatRoomModel.m in Sources */, 883E78551D48A5E50030E075 /* TwoControlSetTimeViewController.m in Sources */, + 3D1C17532171BB0700A159A8 /* PNBar.m in Sources */, 886F4DFB1D753C53001EDA34 /* Reprt4ViewCell.m in Sources */, 8868FE6F1E66D5C9002F7F33 /* JingYanValueBootomViewCell.m in Sources */, 8860287E1E10BB1100F3DB5D /* CTAssetSelectionLabel.m in Sources */, - 886E54851DF64DDB0001D653 /* IfishP2PPlayBackListViewController.m in Sources */, 887491CC1E77D03400CDA284 /* ClearNavBaseViewController.m in Sources */, 883E78941D48A5E50030E075 /* IfishMassageModel.m in Sources */, 883E788D1D48A5E50030E075 /* InfoViewNiChengCell.m in Sources */, @@ -16143,15 +16807,16 @@ 88F5EFCF1D48D08100CC7CAF /* MMHud.m in Sources */, 88F5EE521D48CA2800CC7CAF /* ESPTouchTaskParameter.m in Sources */, 88602A6D1E10BC3500F3DB5D /* NIMSpellingCenter.m in Sources */, - 883E78DB1D48A5E50030E075 /* WaitingPageView.m in Sources */, 8871FB0C1EBC7EC90038E99A /* IfishBindDeviceSelectViewController.m in Sources */, 8876A58E1BB83447007A4B54 /* ViewController.m in Sources */, + 3D1C5092221A9EDF0096AE43 /* P2PClient.m in Sources */, 8891330B1ECE999A00F52EBC /* IfishVideoModel.m in Sources */, 880707581DDD76480076F65A /* P2PShareViewBootomView.m in Sources */, 88602A5E1E10BC3500F3DB5D /* NIMNormalTeamCardViewController.m in Sources */, 8835180C1E66916400FCBE56 /* UIControl+YT.m in Sources */, 88602F5E1E12002600F3DB5D /* NTESNavigationHandler.m in Sources */, 8816721B1EA5DE2B00BEBF23 /* UMComSimplicityDiscoverViewController.m in Sources */, + 3D1C50ED221A9EE00096AE43 /* RecommendInfoDAO.m in Sources */, 88C5989D1EA0965B00BDC812 /* LBLaunchImageAdView.m in Sources */, 88602A551E10BC3500F3DB5D /* NIMSessionListViewController.m in Sources */, E58C9984208195640004C42B /* RuiMeiViewController.m in Sources */, @@ -16161,7 +16826,10 @@ 88602A2D1E10BC3500F3DB5D /* NIMKitEvent.m in Sources */, 881671CD1EA5DE2B00BEBF23 /* UMComLocationTableViewCell.m in Sources */, 88742C331D63F9E80074F1F8 /* CertifyListSecondCell.m in Sources */, + 3D8F64F5215797E700F04BD3 /* IQKeyboardManager.m in Sources */, 88602A0E1E10BC3400F3DB5D /* NIMKitColorButtonCell.m in Sources */, + 3D1C5096221A9EDF0096AE43 /* LocalDevice.m in Sources */, + 3D1C5110221A9EE00096AE43 /* PlayBaseViewController.m in Sources */, 88602A601E10BC3500F3DB5D /* NIMTeamMemberCardViewController.m in Sources */, 88602A3D1E10BC3500F3DB5D /* NIMKitLocationPoint.m in Sources */, 88D0F27D1EA6F53E00286022 /* IfishSetViewController.m in Sources */, @@ -16184,6 +16852,7 @@ 88602F4E1E12002600F3DB5D /* NTESContactUtilCell.m in Sources */, 88F5EFC81D48D08100CC7CAF /* JHRefreshConfig.m in Sources */, 880707F61DE302630076F65A /* LXColorTools.m in Sources */, + 3D1C50EE221A9EE00096AE43 /* PAIOUnit.m in Sources */, 88602DBD1E10D97E00F3DB5D /* UIImageView+HighlightedWebCache.m in Sources */, 883E78411D48A5E50030E075 /* FourControlNormalCenterController.m in Sources */, 88678C6B1E8BBA7C0043DA55 /* LoveFishLiveListBaseViewController.m in Sources */, @@ -16198,6 +16867,7 @@ 88F5EFAB1D48D08100CC7CAF /* AFHTTPSessionManager.m in Sources */, 886EAC581E2DC5BE00A4DF27 /* IFishShopsViewCell.m in Sources */, 88F5EFD21D48D08100CC7CAF /* MMProgressHUD+Class.m in Sources */, + 3D1C510E221A9EE00096AE43 /* P2PPlayingbackVC.m in Sources */, 88F5EFB51D48D08100CC7CAF /* UIButton+AFNetworking.m in Sources */, 883E78611D48A5E50030E075 /* PuasiphysicalSkinViewController.m in Sources */, 8807074F1DDD42E60076F65A /* P2PShareViewTh3Cell.m in Sources */, @@ -16217,6 +16887,7 @@ 88C1B2BE1DD1749F00C2C99A /* IfishKanKanListViewController.m in Sources */, 8868FE511E66BDB4002F7F33 /* DengJiShuoMingViewCell.m in Sources */, 88602F741E12002600F3DB5D /* NTESMutiClientsCell.m in Sources */, + 3D1C511D221A9EE00096AE43 /* IfishCameraRecordfirstCell.m in Sources */, 885C43B91E89F79D00685A2E /* WMMenuView.m in Sources */, 883E793A1D48ACFF0030E075 /* dataContorl.m in Sources */, 88597AC11E56BAF1003D0E5C /* WFPhotosViewController.m in Sources */, @@ -16226,27 +16897,26 @@ 8856B0D71DEC15C7009D384A /* IfishStartAdView.m in Sources */, 885979F81E542371003D0E5C /* IfishShopEdite2ViewCell.m in Sources */, 886185C41EF222AC00459AD1 /* ThreeControlName.m in Sources */, + 3D8F64FE2158874000F04BD3 /* IfishConfigVo.m in Sources */, 88602DBA1E10D97E00F3DB5D /* UIImage+GIF.m in Sources */, - 88673B011E1F3DA9001D5F49 /* FishTankBootmDataHelper.m in Sources */, - 88F5EFED1D48D08100CC7CAF /* qrinput.c in Sources */, 883E784A1D48A5E50030E075 /* SongNuoBackMassage.m in Sources */, 883E78EA1D48A5E50030E075 /* BookViewController.m in Sources */, + 3D1C17552171BB0700A159A8 /* PNScatterChart.m in Sources */, 883E79AB1D48B0280030E075 /* UIViewController+MaryPopin.m in Sources */, 881671B81EA5DE2B00BEBF23 /* UMComMessageManager.m in Sources */, + 3D1C5091221A9EDF0096AE43 /* RegisterResult.m in Sources */, 88602A111E10BC3400F3DB5D /* NIMKitUIConfig.m in Sources */, 88597A101E543395003D0E5C /* IfishSHopEdite6ViewCell.m in Sources */, 883E79C01D48B0280030E075 /* GuiDengViewCell.m in Sources */, 88602F341E12002500F3DB5D /* UIScrollView+NTESDirection.m in Sources */, 883E785C1D48A5E50030E075 /* XuToSoketBackMsgDataUnity.m in Sources */, 8814783C1E71305100BFB79C /* TaskHeadViewCell.m in Sources */, - 883E78C11D48A5E50030E075 /* ParamDao.m in Sources */, 883E78FC1D48A5E50030E075 /* RegistViewController.mm in Sources */, 887491EB1E7907F500CDA284 /* MineGoldCustomViewCell.m in Sources */, 88602F3E1E12002600F3DB5D /* NTESChatroomMessageDataProvider.m in Sources */, 88602A6B1E10BC3500F3DB5D /* NIMKitUtil.m in Sources */, 881671DC1EA5DE2B00BEBF23 /* UMComCommonTopicTableViewCell.m in Sources */, 88602A361E10BC3500F3DB5D /* NIMLocationContentConfig.m in Sources */, - 8815D12D1DFAADA800BEA2DA /* IfishCameraRecordSecondCell.m in Sources */, 8868FE601E66D3C3002F7F33 /* JingYanValueViewCell.m in Sources */, 88F5EFB11D48D08100CC7CAF /* AFURLSessionManager.m in Sources */, 88602F781E12002600F3DB5D /* NTESTextHeaderView.m in Sources */, @@ -16255,15 +16925,18 @@ 883E78501D48A5E50030E075 /* ThreeControlCenterViewController.m in Sources */, 88602A371E10BC3500F3DB5D /* NIMNotificationContentConfig.m in Sources */, 8814784F1E7262F500BFB79C /* IifishGetGoldTaskHelper.m in Sources */, + 3D1C17462171BB0700A159A8 /* PNChartLabel.m in Sources */, 88597A061E5428A5003D0E5C /* IfishSHopEdite4ViewCell.m in Sources */, 88883B281EF1096900CAC0AE /* TwoControlName.m in Sources */, - 883E78CE1D48A5E50030E075 /* LocalDevice.m in Sources */, 887C16AC1ECAC10500515278 /* ShopGoodsListViewCell.m in Sources */, 88602A0F1E10BC3400F3DB5D /* NIMKitDataProviderImpl.m in Sources */, 886028771E10BB1100F3DB5D /* CTAssetCheckmark.m in Sources */, 881672301EA5DE2B00BEBF23 /* UMComFeedDetailTableViewCell.m in Sources */, 883E78541D48A5E50030E075 /* TwoControlnoneTimerViewController.m in Sources */, + 3D1C50C3221A9EE00096AE43 /* OBGradientView.m in Sources */, + 3D1C50F6221A9EE00096AE43 /* ParamDao.m in Sources */, 8876A58B1BB83447007A4B54 /* AppDelegate.m in Sources */, + 3DD7AB4E21E2F2FB0064856A /* split.c in Sources */, 883E79431D48ACFF0030E075 /* Socketsingleton.m in Sources */, 883E78571D48A5E50030E075 /* JiaReWenDuModel.m in Sources */, 883E76341D4897570030E075 /* backAppLoginModel.m in Sources */, @@ -16274,7 +16947,6 @@ 881672191EA5DE2B00BEBF23 /* UMComSimpleHorizonMenuView.m in Sources */, 88696FFB1E9CC07F005D4AFB /* IfishAiLiShopGoodsViewCell.m in Sources */, 8860D78B1D6D7A94001E544C /* WorkbechViewController.m in Sources */, - 883E78D11D48A5E50030E075 /* MPNotificationView.m in Sources */, 883E784E1D48A5E50030E075 /* SonNuoCenterViewController.m in Sources */, 88A7EFAB1EA5EF0D00D43E8C /* NTESGLView.m in Sources */, 883E76261D4897570030E075 /* DeviceCameraModel.m in Sources */, @@ -16283,15 +16955,16 @@ E58C99872081A3BA0004C42B /* RuiMeiProtocolModel.m in Sources */, 881671C31EA5DE2B00BEBF23 /* UMComViewController.m in Sources */, E567026D21187E7C00E61993 /* ConnectHotspotModel.m in Sources */, + 3D8F64B72157522100F04BD3 /* NSObject+MJProperty.m in Sources */, 883E785D1D48A5E50030E075 /* XuToWenDuPicview.m in Sources */, 880707F51DE302630076F65A /* LXActionView.m in Sources */, 88602A6C1E10BC3500F3DB5D /* NIMPinyinConverter.m in Sources */, - 883E78DA1D48A5E50030E075 /* Utils.m in Sources */, 88696FB91E9C69E0005D4AFB /* MemberManageListViewCell.m in Sources */, 883E783A1D48A5E50030E075 /* SongBaoViewController.m in Sources */, 886028871E10BB1100F3DB5D /* CTAssetsPageViewController.m in Sources */, 88591EF01D65BB4500A1316E /* CertificationShopModel.m in Sources */, 881671FE1EA5DE2B00BEBF23 /* UMAssetsCollectionGrid.m in Sources */, + 3D1C50F1221A9EE00096AE43 /* ShakeManager.m in Sources */, 88696FFF1E9CC178005D4AFB /* IfishBCShopItemCell.m in Sources */, 881671E41EA5DE2B00BEBF23 /* UMComResourceManager.m in Sources */, 88602F791E12002600F3DB5D /* NTESClientsTableViewController.m in Sources */, @@ -16303,6 +16976,7 @@ 886028851E10BB1100F3DB5D /* CTAssetsNavigationController.m in Sources */, 8867F5C51E656D0300AF021C /* IfishDengjiProgress.m in Sources */, 88602F8D1E12002600F3DB5D /* NTESMarginButton.m in Sources */, + 3D1C17502171BB0700A159A8 /* PNRadarChart.m in Sources */, 8870694A1D4EE89200BCF675 /* DXPopover.m in Sources */, 886970051E9DFA12005D4AFB /* IfishGoodsData.m in Sources */, 88140AA91D86B84300FE34E5 /* LxGetCurrentIp.m in Sources */, @@ -16310,10 +16984,10 @@ 886F4DF11D753858001EDA34 /* Report2ViewCell.m in Sources */, 881671EB1EA5DE2B00BEBF23 /* UMComCommentEditView.m in Sources */, 886F4DE71D75166C001EDA34 /* LookAfterReportViewController.m in Sources */, - 883E78C51D48A5E50030E075 /* UDPManager.m in Sources */, + 3DD7AB9B21E474940064856A /* GCDAsyncUdpSocket.m in Sources */, + 3D8F64C72157820700F04BD3 /* IfishHotBarPackegeVo.m in Sources */, 885622471EE4F88C00B55C70 /* RunSunCHControl.m in Sources */, 881671B51EA5DE2B00BEBF23 /* UMComLoginHandler.m in Sources */, - 883E78BE1D48A5E50030E075 /* MessageDAO.m in Sources */, 883E79AC1D48B0280030E075 /* PlayNDropViewController.m in Sources */, 881671E91EA5DE2B00BEBF23 /* UMComBarButtonItem.m in Sources */, 8861CAF41D59CD520092E5A5 /* IfishNomassageView.m in Sources */, @@ -16322,16 +16996,16 @@ 881671F11EA5DE2B00BEBF23 /* UMImageProgressView.m in Sources */, 88602A631E10BC3500F3DB5D /* NIMTeamAnnouncementListCell.m in Sources */, 8860D7991D6D89F2001E544C /* KanHuWorkHeaderViewCell.m in Sources */, - 883E78CA1D48A5E50030E075 /* KTPhotoView.m in Sources */, 88602F421E12002600F3DB5D /* NTESChatroomListCell.m in Sources */, 88742C451D6451ED0074F1F8 /* IfishCertifyImgFile.m in Sources */, + 3D1C5093221A9EDF0096AE43 /* NetManager.m in Sources */, 881671F91EA5DE2B00BEBF23 /* UMComMutiTextRun.m in Sources */, 88A7EFA61EA5EF0C00D43E8C /* NTESAudioChatViewController.m in Sources */, - 883E78C01D48A5E50030E075 /* PAIOUnit.m in Sources */, 88602F9A1E12002600F3DB5D /* NTESSessionRemoteHistoryViewController.m in Sources */, 88C1B1F81DCB021300C2C99A /* FormatTankAddCamera.m in Sources */, 88602F5F1E12002600F3DB5D /* NTESLoginManager.m in Sources */, 8815D1211DF8083700BEA2DA /* IfishHelperUtils.m in Sources */, + 3D8F64B62157522100F04BD3 /* MJExtensionConst.m in Sources */, 883E79BC1D48B0280030E075 /* BrightnessCell.m in Sources */, 88602F2D1E12002500F3DB5D /* NSDictionary+NTESJson.m in Sources */, 88602A571E10BC3500F3DB5D /* NIMCardMemberItem.m in Sources */, @@ -16342,15 +17016,12 @@ 3D3447A0212D113D00CF3941 /* IFishHotBarCell.m in Sources */, 88602F8E1E12002600F3DB5D /* NTESPageView.m in Sources */, 88602F7B1E12002600F3DB5D /* NTESBundleSetting.m in Sources */, - 88F5EFBA1D48D08100CC7CAF /* GCDAsyncSocket.m in Sources */, - 883E78BB1D48A5E50030E075 /* des2.c in Sources */, 8871FB101EBC80850038E99A /* FishSelectDeviceListViewCell.m in Sources */, 88602F321E12002500F3DB5D /* UIImage+NTESColor.m in Sources */, - 88F5EFEF1D48D08100CC7CAF /* rscode.c in Sources */, 881672421EA5DE2B00BEBF23 /* UMComSimplicityUserCenterViewController.m in Sources */, 8860286F1E10BB1100F3DB5D /* NSDateFormatter+CTAssetsPickerController.m in Sources */, 88602F7A1E12002600F3DB5D /* NTESSessionListViewController.m in Sources */, - 883E78B51D48A5E50030E075 /* CustomTopBar.m in Sources */, + 3D8F649A21571D7C00F04BD3 /* HitbarWifeVc.m in Sources */, 88602F311E12002500F3DB5D /* UIImage+NTES.m in Sources */, 8861258F1E2731CC004A6097 /* JuNengSoketBackUtls.m in Sources */, 88F5EFD11D48D08100CC7CAF /* MMProgressHUD+Animations.m in Sources */, @@ -16360,10 +17031,12 @@ 887C16A81ECAC0E000515278 /* ShopGoodsListData.m in Sources */, 88602A521E10BC3500F3DB5D /* NIMLocationViewController.m in Sources */, 88602F261E12002500F3DB5D /* NTESPersonalCardViewController.m in Sources */, + 3D8F64EE215797E700F04BD3 /* IQTextView.m in Sources */, 8871FAB91EBC539C0038E99A /* ShopCerSelectImgViewCell.m in Sources */, 8860D7941D6D7C00001E544C /* KanHuWorkViewSecondCell.m in Sources */, 881672321EA5DE2B00BEBF23 /* UMComLargeImageTableViewCell.m in Sources */, 888EEB311DC2F37C003C5C5B /* YYWeakProxy.m in Sources */, + 3D1C50FC221A9EE00096AE43 /* TouchButton.m in Sources */, 883283921EAF478F00A47157 /* GoldConvertRecordViewCell.m in Sources */, 886028841E10BB1100F3DB5D /* CTAssetsGridViewLayout.m in Sources */, 881869301D6EECDA00CE9DFF /* shopNoCumtomerViewCell.m in Sources */, @@ -16371,25 +17044,28 @@ 881672401EA5DE2B00BEBF23 /* UMComSimpleProfileSettingController.m in Sources */, 883E793D1D48ACFF0030E075 /* DeviceCommunicateDataUnity.m in Sources */, 883E79B91D48B0280030E075 /* LYHelper.m in Sources */, - 88721D9C1E0A1E680047B7B1 /* UIScrollView+SVInfiniteScrolling.m in Sources */, 886185CA1EF2290000459AD1 /* FourControlNameViewController.m in Sources */, 881F0F541D73DF680091507E /* BaoGaoViewSecondCell.m in Sources */, + 3D8F64F7215797E700F04BD3 /* IQUITextFieldView+Additions.m in Sources */, 88602A081E10BC3400F3DB5D /* NSString+NIM.m in Sources */, - 88F5EFE91D48D08100CC7CAF /* bitstream.c in Sources */, 88602A501E10BC3500F3DB5D /* NIMSessionUnknowContentView.m in Sources */, 88602A5D1E10BC3500F3DB5D /* NIMCreateTeamAnnouncement.m in Sources */, 883E78491D48A5E50030E075 /* NoneControlNonetimerViewController.m in Sources */, 880707451DDD3EF50076F65A /* P2PShareView1Cell.m in Sources */, + 3D1C50D7221A9EE00096AE43 /* CustomView.m in Sources */, 886512001E972FDD00BABDF1 /* IfishUserDataUnity.m in Sources */, + 3D1C508F221A9EDF0096AE43 /* LoginResult.m in Sources */, + 3D8F64B42157522100F04BD3 /* MJProperty.m in Sources */, 882A75FD1EBAF2DB00AD1D15 /* IfishShopCerNewViewController.m in Sources */, 8816721E1EA5DE2B00BEBF23 /* UMComSimplicityUserInfoBar.m in Sources */, - 88F5EFEC1D48D08100CC7CAF /* qrencode.c in Sources */, 88A7EFA91EA5EF0D00D43E8C /* NTESVideoChatViewController.m in Sources */, 883E76251D4897570030E075 /* ChatroomModel.m in Sources */, + 3D1C5082221A9EDF0096AE43 /* KTPhotoScrollViewController.m in Sources */, 88602A331E10BC3500F3DB5D /* NIMBaseSessionContentConfig.m in Sources */, 881671FA1EA5DE2B00BEBF23 /* UMComPageControlView.m in Sources */, 88602F841E12002600F3DB5D /* NTESService.m in Sources */, 8860287C1E10BB1100F3DB5D /* CTAssetScrollView.m in Sources */, + 3D1C174A2171BB0700A159A8 /* PNBarChart.m in Sources */, 883E78511D48A5E50030E075 /* TwoControlBackMsgDataUtil.m in Sources */, 886D94FC1D6C54DC00CF0B63 /* XuanZekanHuShangJiaXinXi.m in Sources */, 88F5EFBE1D48D08100CC7CAF /* FMDatabase.m in Sources */, @@ -16401,11 +17077,11 @@ 883E79B11D48B0280030E075 /* MyIntroductionViewController.m in Sources */, 889133091ECE999A00F52EBC /* RAFileManager.m in Sources */, 88597A271E55901B003D0E5C /* IfishKanHuGuanLiViewController.m in Sources */, - 883E78BA1D48A5E50030E075 /* CameraManager.m in Sources */, 883E787D1D48A5E50030E075 /* InfoViewController.m in Sources */, 883E78301D48A5E50030E075 /* BaseVIewContorller.m in Sources */, 881671A71EA5DE2B00BEBF23 /* UMComTopicDataController.m in Sources */, 881671F81EA5DE2B00BEBF23 /* UMComMutiText.m in Sources */, + 3D1C50A5221A9EDF0096AE43 /* CyclePickerView.m in Sources */, 883E762B1D4897570030E075 /* setModel.m in Sources */, 881672151EA5DE2B00BEBF23 /* UMComSimpleCommentEditView.m in Sources */, 8868FE561E66C8BC002F7F33 /* DengJiShuoMingViewTopCell.m in Sources */, @@ -16416,25 +17092,33 @@ 883E785E1D48A5E50030E075 /* CenterViewController.m in Sources */, 883283641EAF224700A47157 /* IfishGoldCoastDetailViewController.m in Sources */, 88602A2E1E10BC3500F3DB5D /* NIMKitInfo.m in Sources */, + 3D1C5131221A9EE10096AE43 /* IfishCameraRecordThirdCell.m in Sources */, 881671E81EA5DE2B00BEBF23 /* UMComAddedImageView.m in Sources */, 886FB1B01E5AA02400256332 /* FIshDocsection1TableView2Cell.m in Sources */, + 3D1C5103221A9EE00096AE43 /* YooseeNextConnectViewController.mm in Sources */, 88602A3C1E10BC3500F3DB5D /* NIMCellLayoutConfig.m in Sources */, 882C85A61EB03759001CC414 /* GoldConvertDetailViewCell.m in Sources */, 881477EA1E711B4D00BFB79C /* IfishTaskViewCell.m in Sources */, E5317A1621188F8A0014AFDD /* RestartDeviceModel.m in Sources */, 88602A591E10BC3500F3DB5D /* NIMTeamCardRowItem.m in Sources */, + 3D1C5120221A9EE00096AE43 /* CameraBottomHView.m in Sources */, 886EAC5C1E2DC87E00A4DF27 /* IfishShopInfo.m in Sources */, + 3D1C50C8221A9EE00096AE43 /* Alarm.m in Sources */, 886028711E10BB1100F3DB5D /* NSNumberFormatter+CTAssetsPickerController.m in Sources */, 881671A61EA5DE2B00BEBF23 /* UMComLocationListDataController.m in Sources */, + 3D1C5106221A9EE00096AE43 /* CameraNoParyBackVideoView.m in Sources */, 881671AD1EA5DE2B00BEBF23 /* UMComUserListDataController.m in Sources */, 88653CA21E7671F900FF973E /* MineHeaderNewItemsCell.m in Sources */, + 3D1C513E221A9EE10096AE43 /* FishControlSecondCell.m in Sources */, 88597ABF1E56BAF1003D0E5C /* WFCollectionViewCell.m in Sources */, 881671ED1EA5DE2B00BEBF23 /* UMComEditTextView.m in Sources */, 88779EAF1E28BD4200209ABA /* KanHuFuWuViewController.m in Sources */, 88602F661E12002600F3DB5D /* NTESSnapchatAttachment.m in Sources */, + 3D1C17542171BB0700A159A8 /* UICountingLabel.m in Sources */, 88742C2A1D63F4EA0074F1F8 /* ShopCertificationViewController.m in Sources */, E5F1B03F21184F9400A879A1 /* IFishHotpotUDPHelper.m in Sources */, 88602DBB1E10D97E00F3DB5D /* UIImage+MultiFormat.m in Sources */, + 3D1C5143221A9EE10096AE43 /* ifishdeviceListCell.m in Sources */, 881671DF1EA5DE2B00BEBF23 /* UMComUserTableViewCell.m in Sources */, 881671EE1EA5DE2B00BEBF23 /* UMComGridView.m in Sources */, 88602A5A1E10BC3500F3DB5D /* NIMTeamInfoData.m in Sources */, @@ -16444,72 +17128,71 @@ 8843E2131EEFEBDA00176C65 /* RuSunTempNameViewController.m in Sources */, 883E763C1D4897570030E075 /* manulswitchMSModel.m in Sources */, 88602F7E1E12002600F3DB5D /* NTESDataManager.m in Sources */, - 883E78A41D48A5E50030E075 /* YooseeCenterViewController.m in Sources */, 8860287A1E10BB1100F3DB5D /* CTAssetItemViewController.m in Sources */, - 88721D9B1E0A1E680047B7B1 /* SVPullToRefresh.m in Sources */, 883E762E1D4897570030E075 /* ShopNameCellModel.m in Sources */, 881671C01EA5DE2B00BEBF23 /* UIViewController+UMComAddition.m in Sources */, + 3D1C512C221A9EE10096AE43 /* IfishRecVideoViewCell.m in Sources */, 881671FD1EA5DE2B00BEBF23 /* UMAssetsCollectionController.m in Sources */, - 883E78D81D48A5E50030E075 /* TouchButton.m in Sources */, 88F5EFD61D48D08100CC7CAF /* MMProgressHUDWindow.m in Sources */, - 883E78CB1D48A5E50030E075 /* KTThumbsView.m in Sources */, 881671F61EA5DE2B00BEBF23 /* UMComMenuControlView.m in Sources */, 883E78F61D48A5E50030E075 /* SetViewController.m in Sources */, 8876A5881BB83447007A4B54 /* main.m in Sources */, 88602DB21E10D97E00F3DB5D /* SDImageCache.m in Sources */, 88602A0C1E10BC3400F3DB5D /* NIMCommonTableData.m in Sources */, 88602A651E10BC3500F3DB5D /* NIMTeamMemberCardHeaderCell.m in Sources */, + 3D1C507B221A9EDF0096AE43 /* FfmpegInterface.m in Sources */, 889133071ECE999A00F52EBC /* LXCompressionVideo.m in Sources */, 88602A1D1E10BC3400F3DB5D /* NIMGroupedUsrInfo.m in Sources */, - 883E78CC1D48A5E50030E075 /* KTThumbsViewController.m in Sources */, 88602F861E12002600F3DB5D /* NTESTimerHolder.m in Sources */, 886E3A0B1EEA44B5007C0B04 /* UserExtendataArchaver.m in Sources */, - 883E789E1D48A5E50030E075 /* KTThumbView+SDWebImage.m in Sources */, 88602FB11E124AF900F3DB5D /* NTESSessionCustomContentConfig.m in Sources */, 881F0F4F1D73DF4E0091507E /* BaoGaoViewFirstCell.m in Sources */, - 88F5EFBC1D48D08100CC7CAF /* AsyncSocket.m in Sources */, E51D7D5B208CF4E7001FF053 /* RuiMeiInputViewController.m in Sources */, 881672241EA5DE2B00BEBF23 /* UMComSelectTopicCell.m in Sources */, - 883E78BC1D48A5E50030E075 /* FListManager.m in Sources */, 88602A1B1E10BC3400F3DB5D /* NIMContactDataCell.m in Sources */, + 3D1C5097221A9EDF0096AE43 /* TabView.m in Sources */, 88696FBD1E9C7215005D4AFB /* MemberDetailViewController.m in Sources */, 8816722C1EA5DE2B00BEBF23 /* UMComSimpleFeedTableViewController.m in Sources */, E51D7D51208CDB5B001FF053 /* RuiMeiSetViewController.m in Sources */, 88602F8B1E12002600F3DB5D /* NTESBadgeView.m in Sources */, 885692B41E82413200C51617 /* IfishBannerData.m in Sources */, 881672091EA5DE2B00BEBF23 /* UMComiToast.m in Sources */, + 3D1C50BF221A9EE00096AE43 /* AccountResult.m in Sources */, 8816722A1EA5DE2B00BEBF23 /* UMComSimpleFeedTableViewCell.m in Sources */, 8818692C1D6EE4FB00CE9DFF /* KanHuListModel.m in Sources */, - 8856B0F01DED7EB9009D384A /* CameraBottomHView.m in Sources */, + 3D1C5099221A9EDF0096AE43 /* GetAlarmRecordResult.m in Sources */, 881671F71EA5DE2B00BEBF23 /* UMComMutiStyleTextView.m in Sources */, 88602DB31E10D97E00F3DB5D /* SDWebImageCompat.m in Sources */, 88602A2B1E10BC3500F3DB5D /* NIMInputToolBar.m in Sources */, 88C1B2C51DD19CE000C2C99A /* KankanListCollectionViewCell.m in Sources */, 881A1D701DD5C46A00BA1AF4 /* KanKanListTableCell.m in Sources */, + 3D8F64B82157522200F04BD3 /* NSObject+MJClass.m in Sources */, 881671D91EA5DE2B00BEBF23 /* UMComSysPrivateLetterCell.m in Sources */, 88602F9B1E12002600F3DB5D /* NTESWhiteboardViewController.m in Sources */, 88602A481E10BC3500F3DB5D /* NIMSessionAudioContentView.m in Sources */, 883283611EAF21B500A47157 /* IfishGoldCoastViewController.m in Sources */, 88602F3D1E12002600F3DB5D /* NTESChatroomMemberListViewController.m in Sources */, 88696FB51E9C69B1005D4AFB /* MemberNanageListData.m in Sources */, - 883E78A21D48A5E50030E075 /* YooseeCenterViewCell.m in Sources */, - 88721D771E07EFEE0047B7B1 /* P2PClient.m in Sources */, 88F5EFC01D48D08100CC7CAF /* FMDatabasePool.m in Sources */, 883E78641D48A5E50030E075 /* CellModel.m in Sources */, 88602A391E10BC3500F3DB5D /* NIMTipContentConfig.m in Sources */, 886028781E10BB1100F3DB5D /* CTAssetCollectionViewCell.m in Sources */, + 3D8F64EF215797E700F04BD3 /* IQToolbar.m in Sources */, 88602A3B1E10BC3500F3DB5D /* NIMVideoContentConfig.m in Sources */, 888EEB5E1DC346D3003C5C5B /* FBShimmeringLayer.m in Sources */, 883E78F81D48A5E50030E075 /* ForgetViewController.m in Sources */, 88602A251E10BC3500F3DB5D /* NIMInputEmoticonContainerView.m in Sources */, 88F5EE4F1D48CA2800CC7CAF /* IPAddress.c in Sources */, 885979F31E5422B8003D0E5C /* IfishShopEdite1Cell.m in Sources */, + 3D1C5133221A9EE10096AE43 /* YooseeCenterViewCell.m in Sources */, 88597A011E5427FB003D0E5C /* IfishSHopEdite3ViewCell.m in Sources */, 88602F8C1E12002600F3DB5D /* NTESFPSLabel.m in Sources */, + 3DD7AB5221E2F2FB0064856A /* qrspec.c in Sources */, 883283811EAF423300A47157 /* CoastRecordViewController.m in Sources */, 8816723B1EA5DE2B00BEBF23 /* UMComSimpleLikeMyFeedViewController.m in Sources */, 882A76111EBB2A6A00AD1D15 /* ShopCerPart1TableCell.m in Sources */, 881A1D451DD41A1A00BA1AF4 /* MineKanEditSec1firstCell.m in Sources */, + 3D1C508E221A9EDF0096AE43 /* Contact.m in Sources */, 88F5EFB31D48D08100CC7CAF /* UIActivityIndicatorView+AFNetworking.m in Sources */, 883E78481D48A5E50030E075 /* NoneControlCenterViewController.m in Sources */, ); @@ -16547,11 +17230,11 @@ /* End PBXTargetDependency section */ /* Begin PBXVariantGroup section */ - 883E79CE1D48B7120030E075 /* Localizable.strings */ = { + 3D1C5031221A9EDD0096AE43 /* Localizable.strings */ = { isa = PBXVariantGroup; children = ( - 883E79CD1D48B7120030E075 /* zh-Hans */, - 88CE1AE11D98FF0200C514BC /* en */, + 3D1C5032221A9EDD0096AE43 /* zh-Hans */, + 3D1C5033221A9EDD0096AE43 /* en */, ); name = Localizable.strings; sourceTree = ""; @@ -16612,17 +17295,28 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; + CLANG_CXX_LIBRARY = "compiler-default"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "iPhone Developer"; @@ -16631,7 +17325,7 @@ DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_BITCODE = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = NO; + ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; @@ -16646,11 +17340,12 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; + VALID_ARCHS = "arm64 arm64e armv7 armv7s"; }; name = Debug; }; @@ -16658,17 +17353,28 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; + CLANG_CXX_LIBRARY = "compiler-default"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "iPhone Developer"; @@ -16687,11 +17393,12 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; + VALID_ARCHS = "arm64 arm64e armv7 armv7s"; }; name = Release; }; @@ -16700,12 +17407,12 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-1"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libstdc++"; + CLANG_CXX_LIBRARY = "compiler-default"; CODE_SIGN_ENTITLEMENTS = Ifish/Ifish.entitlements; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer: guowu ouyang (Q5YLXZSN4A)"; CODE_SIGN_STYLE = Manual; - DEVELOPMENT_TEAM = WFX8GD5HFX; + DEVELOPMENT_TEAM = ""; ENABLE_BITCODE = NO; ENABLE_TESTABILITY = YES; FRAMEWORK_SEARCH_PATHS = ( @@ -16733,10 +17440,14 @@ "$(PROJECT_DIR)/Ifish/controllers/IfishYooseeFile/IfishYooseeHelper/YooseeExtureLibs/YSlider", "$(PROJECT_DIR)/Ifish/controllers/IfishYooseeFile/IfishYooseeHelper/YooseeExtureLibs/YTargetAndAction", "$(PROJECT_DIR)/Ifish/controllers/IfishYooseeFile/IfishYooseeHelper/YooseeExtureLibs/FounderButton", + "$(PROJECT_DIR)/Ifish/BaiduMap_IOSSDK_v4.2.1_Frameworks", + "$(PROJECT_DIR)/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/SDK", + "$(PROJECT_DIR)/Ifish/ifishYooseeSdk/SDK", ); GCC_PREFIX_HEADER = "Ifish/Ifish-Prefix.pch"; + HEADER_SEARCH_PATHS = ""; INFOPLIST_FILE = Ifish/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; LIBRARY_SEARCH_PATHS = ( "$(inherited)", @@ -16778,6 +17489,16 @@ "$(PROJECT_DIR)/Ifish/controllers/IfishYooseeFile/IfishYooseeHelper/YooseeExtureLibs/FounderButton", "$(PROJECT_DIR)/Ifish/BaiLingSoundSdk/LSemTMFSet", "$(PROJECT_DIR)/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/libAVCtrlIOS", + "$(PROJECT_DIR)/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/libAVCtrlIOS/libAVCtrl", + "$(PROJECT_DIR)/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/libAVCtrl", + "$(PROJECT_DIR)/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/SDK/lib/FFmpeg2.7.7/lib", + "$(PROJECT_DIR)/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/SDK/lib/FFmpeg2.7.7", + "$(PROJECT_DIR)/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/SDK/lib/AVLib", + "$(PROJECT_DIR)/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/SDK/lib/DeviceLink", + "$(PROJECT_DIR)/Ifish/ifishYooseeSdk/SDK/lib/FFmpeg2.7.7/lib", + "$(PROJECT_DIR)/Ifish/ifishYooseeSdk/SDK/lib/FFmpeg2.7.7", + "$(PROJECT_DIR)/Ifish/ifishYooseeSdk/SDK/lib/AVLib", + "$(PROJECT_DIR)/Ifish/ifishYooseeSdk/SDK/lib/DeviceLink", ); ONLY_ACTIVE_ARCH = YES; OTHER_LDFLAGS = ( @@ -16786,8 +17507,8 @@ ); PRODUCT_BUNDLE_IDENTIFIER = com.shyuying.Ifish8; PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE = "021476df-adac-4be4-96b1-0f75baa00008"; - PROVISIONING_PROFILE_SPECIFIER = isfishAppstoreDevelopment; + PROVISIONING_PROFILE = "fde698f5-2eb6-468d-9f69-0dee117d218e"; + PROVISIONING_PROFILE_SPECIFIER = ""; TARGETED_DEVICE_FAMILY = 1; USER_HEADER_SEARCH_PATHS = ""; VERSIONING_SYSTEM = "apple-generic"; @@ -16799,12 +17520,12 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon-1"; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libstdc++"; + CLANG_CXX_LIBRARY = "compiler-default"; CODE_SIGN_ENTITLEMENTS = Ifish/Ifish.entitlements; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: Shanghai Yu Ying Technology Co., Ltd. (WFX8GD5HFX)"; CODE_SIGN_STYLE = Manual; - DEVELOPMENT_TEAM = WFX8GD5HFX; + DEVELOPMENT_TEAM = ""; ENABLE_BITCODE = NO; ENABLE_TESTABILITY = YES; FRAMEWORK_SEARCH_PATHS = ( @@ -16832,10 +17553,14 @@ "$(PROJECT_DIR)/Ifish/controllers/IfishYooseeFile/IfishYooseeHelper/YooseeExtureLibs/YSlider", "$(PROJECT_DIR)/Ifish/controllers/IfishYooseeFile/IfishYooseeHelper/YooseeExtureLibs/YTargetAndAction", "$(PROJECT_DIR)/Ifish/controllers/IfishYooseeFile/IfishYooseeHelper/YooseeExtureLibs/FounderButton", + "$(PROJECT_DIR)/Ifish/BaiduMap_IOSSDK_v4.2.1_Frameworks", + "$(PROJECT_DIR)/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/SDK", + "$(PROJECT_DIR)/Ifish/ifishYooseeSdk/SDK", ); GCC_PREFIX_HEADER = "Ifish/Ifish-Prefix.pch"; + HEADER_SEARCH_PATHS = ""; INFOPLIST_FILE = Ifish/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; LIBRARY_SEARCH_PATHS = ( "$(inherited)", @@ -16877,6 +17602,16 @@ "$(PROJECT_DIR)/Ifish/controllers/IfishYooseeFile/IfishYooseeHelper/YooseeExtureLibs/FounderButton", "$(PROJECT_DIR)/Ifish/BaiLingSoundSdk/LSemTMFSet", "$(PROJECT_DIR)/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/libAVCtrlIOS", + "$(PROJECT_DIR)/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/libAVCtrlIOS/libAVCtrl", + "$(PROJECT_DIR)/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/libAVCtrl", + "$(PROJECT_DIR)/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/SDK/lib/FFmpeg2.7.7/lib", + "$(PROJECT_DIR)/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/SDK/lib/FFmpeg2.7.7", + "$(PROJECT_DIR)/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/SDK/lib/AVLib", + "$(PROJECT_DIR)/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/SDK/lib/DeviceLink", + "$(PROJECT_DIR)/Ifish/ifishYooseeSdk/SDK/lib/FFmpeg2.7.7/lib", + "$(PROJECT_DIR)/Ifish/ifishYooseeSdk/SDK/lib/FFmpeg2.7.7", + "$(PROJECT_DIR)/Ifish/ifishYooseeSdk/SDK/lib/AVLib", + "$(PROJECT_DIR)/Ifish/ifishYooseeSdk/SDK/lib/DeviceLink", ); ONLY_ACTIVE_ARCH = NO; OTHER_LDFLAGS = ( @@ -16885,8 +17620,8 @@ ); PRODUCT_BUNDLE_IDENTIFIER = com.shyuying.Ifish8; PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE = "2d8401d7-0890-4ce2-bcc4-95d1e0ad2f53"; - PROVISIONING_PROFILE_SPECIFIER = isfishAppstoreDistribution; + PROVISIONING_PROFILE = "eeefa590-8286-4301-b6e5-f1eeee0de64f"; + PROVISIONING_PROFILE_SPECIFIER = ""; TARGETED_DEVICE_FAMILY = 1; USER_HEADER_SEARCH_PATHS = ""; VERSIONING_SYSTEM = "apple-generic"; diff --git a/Ifish/.DS_Store b/Ifish/.DS_Store index 8ac159c..2db60cb 100644 Binary files a/Ifish/.DS_Store and b/Ifish/.DS_Store differ diff --git a/Ifish/AppDelegate.h b/Ifish/AppDelegate.h index c686f2f..fc8a441 100644 --- a/Ifish/AppDelegate.h +++ b/Ifish/AppDelegate.h @@ -8,8 +8,8 @@ #import //#import - #import "Contact.h"//重新调整监控画面 +//#import #define ap_address "192.168.1.1" #define NET_WORK_CHANGE @"NET_WORK_CHANGE" #import "Reachability.h" diff --git a/Ifish/AppDelegate.m b/Ifish/AppDelegate.m index 78705ae..31b65ff 100644 --- a/Ifish/AppDelegate.m +++ b/Ifish/AppDelegate.m @@ -41,7 +41,7 @@ #import "TalkingData.h" #define TalkingDataAPPID @"351E6F7956CEF7FB6AABAEB64EF9BF18" #define BMKMAP_APPKEY @"wYcF3YXqeepKfzruExLPn0eS" -#import +//#import #import "Socketsingleton.h" #import "CenterViewController.h" #import @@ -90,7 +90,7 @@ NSString *NTESNotificationLogout = @"NTESNotificationLogout"; //阿里百川 #import #import "IfishADTimerViewController.h" -@interface AppDelegate () +@interface AppDelegate () @property(nonatomic,strong)ICSDrawerController*ics; @property(nonatomic)NSString*downloadAddress; @@ -238,13 +238,13 @@ NSString *NTESNotificationLogout = @"NTESNotificationLogout"; /** * 启动百度地图 */ - BMKMapManager*mapManager=[[BMKMapManager alloc]init]; - BOOL ret=[mapManager start:BMKMAP_APPKEY generalDelegate:self]; - if (!ret) { - NSLog(@"manager start failed!"); - } - - +// BMKMapManager*mapManager=[[BMKMapManager alloc]init]; +// BOOL ret=[mapManager start:BMKMAP_APPKEY generalDelegate:self]; +// if (!ret) { +// NSLog(@"manager start failed!"); +// } +// +// /** * 极光推送 推送消息已去 用云信 */ diff --git a/Ifish/Assets.xcassets/AppIcon-1.appiconset/Contents.json b/Ifish/Assets.xcassets/AppIcon-1.appiconset/Contents.json index 124bd98..b0fc7c4 100644 --- a/Ifish/Assets.xcassets/AppIcon-1.appiconset/Contents.json +++ b/Ifish/Assets.xcassets/AppIcon-1.appiconset/Contents.json @@ -65,8 +65,9 @@ "scale" : "3x" }, { - "idiom" : "ios-marketing", "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "1231520920961_.pic_hd.jpg", "scale" : "1x" } ], diff --git a/Ifish/Assets.xcassets/HotBar/graybtn_big.imageset/Contents.json b/Ifish/Assets.xcassets/HotBar/graybtn_big.imageset/Contents.json new file mode 100644 index 0000000..cd8e487 --- /dev/null +++ b/Ifish/Assets.xcassets/HotBar/graybtn_big.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "graybtn_big.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Ifish/Assets.xcassets/HotBar/graybtn_big.imageset/graybtn_big.png b/Ifish/Assets.xcassets/HotBar/graybtn_big.imageset/graybtn_big.png new file mode 100644 index 0000000..b61227e Binary files /dev/null and b/Ifish/Assets.xcassets/HotBar/graybtn_big.imageset/graybtn_big.png differ diff --git a/Ifish/Assets.xcassets/HotBar/greenbtn_big.imageset/Contents.json b/Ifish/Assets.xcassets/HotBar/greenbtn_big.imageset/Contents.json new file mode 100644 index 0000000..65eb127 --- /dev/null +++ b/Ifish/Assets.xcassets/HotBar/greenbtn_big.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "greenbtn_big.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Ifish/Assets.xcassets/HotBar/greenbtn_big.imageset/greenbtn_big.png b/Ifish/Assets.xcassets/HotBar/greenbtn_big.imageset/greenbtn_big.png new file mode 100644 index 0000000..deaa16c Binary files /dev/null and b/Ifish/Assets.xcassets/HotBar/greenbtn_big.imageset/greenbtn_big.png differ diff --git a/Ifish/Assets.xcassets/HotBar/走势图背景.imageset/Contents.json b/Ifish/Assets.xcassets/HotBar/走势图背景.imageset/Contents.json new file mode 100644 index 0000000..e8ac509 --- /dev/null +++ b/Ifish/Assets.xcassets/HotBar/走势图背景.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "走势图背景.jpg", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Ifish/Assets.xcassets/HotBar/走势图背景.imageset/走势图背景.jpg b/Ifish/Assets.xcassets/HotBar/走势图背景.imageset/走势图背景.jpg new file mode 100644 index 0000000..4bc24df Binary files /dev/null and b/Ifish/Assets.xcassets/HotBar/走势图背景.imageset/走势图背景.jpg differ diff --git a/Ifish/Assets.xcassets/走势图.imageset/Contents.json b/Ifish/Assets.xcassets/走势图.imageset/Contents.json new file mode 100644 index 0000000..b190f72 --- /dev/null +++ b/Ifish/Assets.xcassets/走势图.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "走势图.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Ifish/Assets.xcassets/走势图.imageset/走势图.png b/Ifish/Assets.xcassets/走势图.imageset/走势图.png new file mode 100644 index 0000000..47e9a49 Binary files /dev/null and b/Ifish/Assets.xcassets/走势图.imageset/走势图.png differ diff --git a/Ifish/AsyncSocket/.DS_Store b/Ifish/AsyncSocket/.DS_Store index 2614e76..cd23ffd 100644 Binary files a/Ifish/AsyncSocket/.DS_Store and b/Ifish/AsyncSocket/.DS_Store differ diff --git a/Ifish/BMKMap3.3.0/.DS_Store b/Ifish/BMKMap3.3.0/.DS_Store deleted file mode 100644 index 5864f18..0000000 Binary files a/Ifish/BMKMap3.3.0/.DS_Store and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Base.framework/BaiduMapAPI_Base b/Ifish/BMKMap3.3.0/BaiduMapAPI_Base.framework/BaiduMapAPI_Base deleted file mode 100644 index a886af7..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Base.framework/BaiduMapAPI_Base and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Base.framework/Headers/BMKBaseComponent.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Base.framework/Headers/BMKBaseComponent.h deleted file mode 100644 index 25abeef..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Base.framework/Headers/BMKBaseComponent.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// BaseComponent.h -// BaseComponent -// -// Created by baidu on 14-3-17. -// Copyright (c) 2014年 baidu. All rights reserved. -// - -#import "BMKGeneralDelegate.h" -#import "BMKMapManager.h" -#import "BMKTypes.h" -#import "BMKUserLocation.h" -#import "BMKVersion.h" diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Base.framework/Headers/BMKGeneralDelegate.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Base.framework/Headers/BMKGeneralDelegate.h deleted file mode 100644 index b56dde1..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Base.framework/Headers/BMKGeneralDelegate.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// BMKGeneralDelegate.h -// BMapKit -// -// Copyright 2011 Baidu Inc. All rights reserved. -// - -#import - -///通知Delegate -@protocol BMKGeneralDelegate -@optional -/** - *返回网络错误 - *@param iError 错误号 - */ -- (void)onGetNetworkState:(int)iError; - -/** - *返回授权验证错误 - *@param iError 错误号 : 为0时验证通过,具体参加BMKPermissionCheckResultCode - */ -- (void)onGetPermissionState:(int)iError; -@end diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Base.framework/Headers/BMKMapManager.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Base.framework/Headers/BMKMapManager.h deleted file mode 100644 index 3cb4514..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Base.framework/Headers/BMKMapManager.h +++ /dev/null @@ -1,76 +0,0 @@ -/* - * BMKMapManager.h - * BMapKit - * - * Copyright 2011 Baidu Inc. All rights reserved. - * - */ - -#import "BMKGeneralDelegate.h" -#import -#import "BMKTypes.h" - -enum EN_PERMISSION_STATUS -{ - E_PERMISSION_OK = 0, // 授权验证通过 - E_PERMISSION_SERVER_ERROR = -200, //服务端数据错误,无法解析服务端返回数据 - E_PERMISSION_NETWORK_ERROR = -300, //无法建立与服务端的连接 - -}; - -//地图模块枚举 -typedef enum { - BMKMapModuleTile = 0, //瓦片图模块 -}BMKMapModule; - -///主引擎类 -@interface BMKMapManager : NSObject - -/** - *百度地图SDK所有接口均支持百度坐标(BD09LL)和国测局坐标(GCJ02),用此方法设置您使用的坐标类型. - *默认是BD09LL(BMK_COORDTYPE_BD09LL)坐标. - *如果需要使用GCJ02坐标,需要设置CoordinateType为:BMK_COORDTYPE_COMMON. - */ -+ (BOOL)setCoordinateTypeUsedInBaiduMapSDK:(BMK_COORD_TYPE) coorType; - -/** - *获取百度地图SDK当前使用的经纬度类型 - *@return 经纬度类型 - */ -+ (BMK_COORD_TYPE)getCoordinateTypeUsedInBaiduMapSDK; - -/** - *是否开启打印某模块的log,默认不打印log - *debug时,建议打开,有利于调试程序;release时建议关闭 - *@param enable 是否开启 - *@param mapModule 地图模块 - */ -+ (void)logEnable:(BOOL) enable module:(BMKMapModule) mapModule; - -/** -*启动引擎 -*@param key 申请的有效key -*@param delegate -*/ --(BOOL)start:(NSString*)key generalDelegate:(id)delegate; - -/** - *获取所有在线服务消耗的发送流量,单位:字节 - */ --(int)getTotalSendFlaxLength; - -/** - *获取所有在线服务消耗的接收流量,单位:字节 - */ --(int)getTotalRecvFlaxLength; - -/** -*停止引擎 -*/ --(BOOL)stop; - - - -@end - - diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Base.framework/Headers/BMKTypes.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Base.framework/Headers/BMKTypes.h deleted file mode 100644 index 6a57583..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Base.framework/Headers/BMKTypes.h +++ /dev/null @@ -1,184 +0,0 @@ -// -// BMKType.h -// MapPlatform -// -// Created by BaiduMapAPI on 13-3-26. -// Copyright (c) 2013年 baidu. All rights reserved. -// - -#import -#import - -#import -typedef enum -{ - BMK_COORDTYPE_GPS = 0, ///GPS设备采集的原始GPS坐标(WGS-84) - BMK_COORDTYPE_COMMON, ///GCJ坐标,google地图、soso地图、aliyun地图、mapabc地图和amap地图所用坐标 - BMK_COORDTYPE_BD09LL, ///bd09ll 百度经纬度坐标 -} BMK_COORD_TYPE; -enum { - BMKMapTypeNone = 0, ///< 空白地图 - BMKMapTypeStandard = 1, ///< 标准地图 - BMKMapTypeSatellite = 2, ///< 卫星地图 -}; -typedef NSUInteger BMKMapType; - -typedef enum { - BMKErrorOk = 0, ///< 正确,无错误 - BMKErrorConnect = 2, ///< 网络连接错误 - BMKErrorData = 3, ///< 数据错误 - BMKErrorRouteAddr = 4, ///<起点或终点选择(有歧义) - BMKErrorResultNotFound = 100, ///< 搜索结果未找到 - BMKErrorLocationFailed = 200, ///< 定位失败 - BMKErrorPermissionCheckFailure = 300, ///< 百度地图API授权Key验证失败 - BMKErrorParse = 310 ///< 数据解析失败 -}BMKErrorCode; -//鉴权结果状态码 -typedef enum { - E_PERMISSIONCHECK_CONNECT_ERROR = -300,//链接服务器错误 - E_PERMISSIONCHECK_DATA_ERROR = -200,//服务返回数据异常 - E_PERMISSIONCHECK_OK = 0, // 授权验证通过 - E_PERMISSIONCHECK_KEY_ERROR = 101, //ak不存在 - E_PERMISSIONCHECK_MCODE_ERROR = 102, //mcode签名值不正确 - E_PERMISSIONCHECK_UID_KEY_ERROR = 200, // APP不存在,AK有误请检查再重试 - E_PERMISSIONCHECK_KEY_FORBIDEN= 201, // APP被用户自己禁用,请在控制台解禁 - /* - *更多鉴权状态码请参考: - *http://developer.baidu.com/map/index.php?title=lbscloud/api/appendix - */ -}BMKPermissionCheckResultCode; -//检索结果状态码 -typedef enum{ - BMK_SEARCH_NO_ERROR = 0,///<检索结果正常返回 - BMK_SEARCH_AMBIGUOUS_KEYWORD,///<检索词有岐义 - BMK_SEARCH_AMBIGUOUS_ROURE_ADDR,///<检索地址有岐义 - BMK_SEARCH_NOT_SUPPORT_BUS,///<该城市不支持公交搜索 - BMK_SEARCH_NOT_SUPPORT_BUS_2CITY,///<不支持跨城市公交 - BMK_SEARCH_RESULT_NOT_FOUND,///<没有找到检索结果 - BMK_SEARCH_ST_EN_TOO_NEAR,///<起终点太近 - BMK_SEARCH_KEY_ERROR,/// -#import -#import "BMKBaseComponent.h" -@class CLLocation; -@class CLHeading; -@interface BMKUserLocation : NSObject - -/// 位置更新状态,如果正在更新位置信息,则该值为YES -@property (readonly, nonatomic, getter=isUpdating) BOOL updating; - -/// 位置信息,尚未定位成功,则该值为nil -@property (readonly, nonatomic,strong) CLLocation *location; - -/// heading信息,尚未定位成功,则该值为nil -@property (readonly, nonatomic, strong) CLHeading *heading; - -/// 定位标注点要显示的标题信息 -@property (strong, nonatomic) NSString *title; - -/// 定位标注点要显示的子标题信息. -@property (strong, nonatomic) NSString *subtitle; - -@end diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Base.framework/Headers/BMKVersion.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Base.framework/Headers/BMKVersion.h deleted file mode 100644 index da89b44..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Base.framework/Headers/BMKVersion.h +++ /dev/null @@ -1,1017 +0,0 @@ -// -// BMKVersion.h -// BMapKit -// -// Copyright 2011 Baidu Inc. All rights reserved. -// - -#import - - -/*****更新日志:***** - V0.1.0: 测试版 - 支持地图浏览,基础操作 - 支持POI搜索 - 支持路线搜索 - 支持地理编码功能 - -------------------- - V1.0.0:正式发布版 - 地图浏览,操作,多点触摸,动画 - 标注,覆盖物 - POI、路线搜索 - 地理编码、反地理编码 - 定位图层 - -------------------- - V1.1.0: - 离线地图支持 - -------------------- - V1.1.1: - 增加suggestionSearch接口 - 可以动态更改annotation title - fix小内存泄露问题 - -------------------- - V1.2.1: - 增加busLineSearch接口 - 修复定位圈范围内不能拖动地图的bug - - -------------------- - V2.0.0 - - 新增: - 全新的3D矢量地图渲染 - BMKMapView设定地图旋转俯视角度:rotation、overlooking - BMKMapView设定指南针显示位置:compassPosition - BMKMapView控制生命周期:viewWillAppear、viewWillDisappear - 地图标注可点,BMKMapViewDelegate新增接口回调接口onClickedMapPoi - BMKAnnotationView设置annotation是否启用3D模式:enabled3D - overlay绘制方式改变,采用opengl绘制: - BMKOverlayView使用opengl渲染接口:glRender子类重载此函数实现gl绘制 - 基本opengl线绘制:renderLinesWithPoints - 基本opengl面绘制:renderRegionWithPointsl - 全新的矢量离线地图数据: - BMKOfflineMap下载离线地图:start - BMKOfflineMap更新离线地图:update - BMKOfflineMap暂停下载或更新:pasue - 获得热点城市列表:getHotCityList - 获得支持离线数据的城市:getOfflineCityList - 根据城市名查询城市信息:searchCity - 更新: - BMKMapView的缩放级别zoomLevel更新为float型,实现无级缩放 - 更新地图类型枚举: - enum { BMKMapTypeStandard = 1, ///< 标准地图 - BMKMapTypeTrafficOn = 2, ///< 实时路况 - BMKMapTypeSatellite = 4, ///< 卫星地图 - BMKMapTypeTrafficAndSatellite = 8, ///< 同时打开实时路况和卫星地图 - }; - - - -------------------- - v2.0.1 - 新增: - § MapView增加事件监听 - BMKMapviewDelegate中- mapView: onClickedMapBlank:方法监听地图单击事件 - BMKMapviewDelegate中- mapView: onDoubleClick:方法监听地图双击事件 - BMKMapviewDelegate中- mapView: onLongClick:方法监听地图长按事件 - § 地图截图功能 - BMKmapview中 -(UIImage*) takeSnapshot; - § 路径规划增加途经点 - BMKSearch中- (BOOL)drivingSearch: startNode: endCity: endNode: throughWayPoints: - § suggestion搜索支持按城市搜索 - 优化: - § 全面支持iPad - § 优化添加海量annotation逻辑 - § BMKOfflineMap中: - - (BOOL)pasue:(int)cityID; - 改为 - - (BOOL)pause:(int)cityID - § BMKMapview中: - @property (nonatomic) CGPoint compassPositon; - 改为 - @property (nonatomic) CGPoint compassPosition; - § BMKRouteAddrResult结构添加属性: - @synthesize wayPointPoiList; - @synthesize wayPointCityList; - § BMKPlanNode中添加属性: - @synthesize cityName; 添加城市属性 - § BMKSuggestionresult结构添加属性: - @synthesize districtList; 返回区域列表 - 修复: - § 修复与第三方类库冲突的问题 - 修复与gzip、Reachability、png、jpeg、json、xml、sqlite等第三方类库冲突问题 - - - -------------------- - v2.0.2 - 新增: - 1.全新的key验证体系 - - 2.增加短串分享接口 - 1)在BMKType中新增数据结构:BMK_SHARE_URL_TYPE(分享串数据类型) - 2)在BMKSearch中新增接口-(BOOL)poiDetailShareUrl:(NSString*) uid; 发起poi短串搜索 - 3)在BMKSearch中新增接口-(BOOL)reverseGeoShareUrl:(CLLocationCoordinate2D)coor - poiName:(NSString*)name - poiAddress:(NSString*)address; 发起反geo短串搜索 - 4)在BMKSearchDelegate中新增接口-(void)onGetShareUrl:(NSString*) url - withType:(BMK_SHARE_URL_TYPE) urlType - errorCode:(int)error; 返回短串分享url - 3.比例尺控件 - 1)在BMKMapview中新增属性@property (nonatomic) BOOL showMapScaleBar;比例尺是否显示 - 2)在BMKMapview中新增属性@property (nonatomic) CGPoint mapScaleBarPosition;比例尺显示位置 - - 4.定位罗盘效果 - 1)在BMKMapview中新增数据结构:BMKUserTrackingMode(定位模式) - 2)在BMKMapview中新增属性@property (nonattomic) BMKUserTrackingMode userTrackingMode; 设定定位模式 - - 5.驾车避让拥堵策略 - 1)在BMKSearch中新增驾车检索策略常量BMKCarTrafficFIRST = 60,///<驾车检索策略常量:躲避拥堵 - - 6.路径查询增加时间、打车费用结果 - 1)在BMKSearch中新增类:BMKTime(此类代表一个时间段,每个属性都是一个时间段。) - 2)在BMKTransitRoutePlan中新增属性@property (nonatomic) float price; 白天打车估价,单位(元) - 3)在BMKTransitRoutePlan中新增属性@property (nonatomic, retain) BMKTime* time; 方案所用时间 - 4)在BMKRoutePlan中新增属性@property (nonatomic, retain) BMKTime* time; 方案预计的行驶时间 - - 优化: - 1)对在BMKMapview中的接口- (void)removeAnnotations:(NSArray *)annotations;(移除一组标注)进行了优化 - - 修复: - 1)修复离线地图――支持离线包的城市列表中省份下无子城市的问题 - 2)修复前台数据请求后退至后台opengl继续渲染,应用Crash的问题 - - -------------------- - v2.1.0 - 新增: - 1.全面接入LBS.云V2.0,全面开放LBS.云检索能力 - 1)在BMKCloudSearchInfo中新增类BMKBaseCloudSearchInfo,BMKCloudSearchInfo,BMKCloudLocalSearchInfo,BMKCloudNearbySearchInfo,BMKCloudBoundSearchInfo,BMKCloudDetailSearchInfo来存储云检索参数 - 2)在BMKCloudPOIList中新增类BMKCloudPOIList来存储云检索结果 - 3)在BMKCloudSearch中新增数据结构:BMKCloudSearchType(云检索类型) - 4)在BMKCloudSearch中新增接口- (BOOL)localSearchWithSearchInfo:;发起本地云检索 - 5)在BMKCloudSearch中新增接口- (BOOL) nearbySearchWithSearchInfo:;发起周边云检索 - 6)在BMKCloudSearch中新增接口- (BOOL) boundSearchWithSearchInfo:;发起矩形云检索 - 7)在BMKCloudSearch中新增接口- (BOOL) detailSearchWithSearchInfo:;发起详情云检索 - 8)在BMKCloudSearch中新增接口- (void)onGetCloudPoiResult: searchType: errorCode:;返回云检索列表结果 - 9)在BMKCloudSearch中新增接口- (void) onGetCloudPoiDetailResult: searchType: errorCode:;返回云检索详情结果 - 2.增加图片图层BMKGroundOverlay、BMKGroundOverlayView - 1)在BMKGroundOverlay中新增属性@property (nonatomic,assign) CLLocationCoordinate2D pt;两种绘制GroundOverlay的方式之一:绘制的位置地理坐标,与anchor配对使用 - 2)在BMKGroundOverlay中新增属性@property (nonatomic,assign) CGPoint anchor;用位置绘制时图片的锚点,图片左上角为(0.0f,0.0f),向右向下为正 - 3)在BMKGroundOverlay中新增属性@property (nonatomic,assign) BMKCoordinateBounds bound;两种绘制GroundOverlay的方式之二:绘制的地理区域范围,图片在此区域内合理缩放 - 4)在BMKGroundOverlay中新增属性@property(nonatomic, strong) UIImage *icon;绘制图片 - 5)在BMKGroundOverlay中新增接口+(BMKGroundOverlay*)groundOverlayWithPosition:zoomLevel:anchor:icon:;根据指定经纬度坐标生成一个groundOverlay - 6)在BMKGroundOverlay中新增接口+(BMKGroundOverlay*) groundOverlayWithBounds:icon:;根据指定区域生成一个groundOverlay - 3.增加自定义泡泡 - 1)在BMKActionPaopaoView中新增接口- (id)initWithCustomView:(UIView*)customView;泡泡显示View自定义 - 4.增加地图中心点映射屏幕点 - 1)在BMKMapView中新增接口- (void)setMapCenterToScreenPt:;设置地图中心点在地图中的屏幕坐标位置 - 5.增加以手势触摸点中心为基准旋转缩放底图功能和控制开关 - 1)在BMKMapView中新增属性@property(nonatomic, getter=isChangeWithTouchPointCenterEnabled) BOOL ChangeWithTouchPointCenterEnabled;设定地图View能否支持以手势中心点为轴进行旋转和缩放(默认以屏幕中心点为旋转和缩放中心) - 6.增加同时改变地图俯角,旋转角度,缩放比例,中心点接口 - 1)新增类BMKMapStatus来表示地图状态参数 - 2)在BMKMapView中新增接口- (void)setMapStatus:;设置地图状态 - 3)在BMKMapView中新增接口- (void)setMapStatus: withAnimation:;设置地图状态(指定是否需要动画效果) - 4)在BMKMapView中新增接口- (void)setMapStatus: withAnimation: withAnimationTime:;设置地图状态(指定是否需要动画效果+指定动画时间) - 5)在BMKMapView中新增接口- (BMKMapStatus*)getMapStatus;获取地图状态 - 7.增加地图状态改变实时通知 - 1)在BMKMapView中新增接口- (void)mapStatusDidChanged:;地图状态改变完成后会调用此接口 - - 优化: - 1.点击Annotation置顶 - 1)在BMKMapView中新增属性@property (nonatomic, assign) BOOL isSelectedAnnotationViewFront;设定是否总让选中的annotaion置于最前面 - 2.定位脱离MapView - 1)在BMKUserLocation中新增接口-(void)startUserLocationService;打开定位服务 - 2)在BMKUserLocation中新增接口-(void)stopUserLocationService;关闭定位服务 - 3)在BMKUserLocation中新增接口- (void)viewDidGetLocatingUser:;开启定位后,会自动调用此接口返回当前位置的经纬度 - 3.定位图层样式自定义灵活性优化 - 1)新增类BMKLocationViewDisplayParam来存储定位图层自定义参数 - 2)在BMKMapView中新增接口- (void)updateLocationViewWithParam:;动态定制定位图层样式 - - 修复: - 1)修复点击annotation回调长按监听接口- (void)mapview: onLongClick:的问题 - 2)修复TransitRoutePlan中Content属性为空的问题 - 3)修复缩放底图,接口- (void)mapView: regionDidChangeAnimated:不回调的问题 - 4)修复从其他页面返回原页面泡泡被压盖的问题 - 5)解决WiFi无网络信号时首次加载卡屏的问题 - - -------------------- - v2.1.1 - 新增: - 1.新增调启百度地图导航的接口(百度地图导航和Web端导航) - 在BMKNavigation中新增类枚举类型的数据结构BMK_NAVI_TYPE来定义调起导航的两种类型:BMK_NAVI_TYPE_NATIVE(调起客户端导航)和BMK_NAVI_TYPE_WEB(调起web导航) - 在BMKNavigation中新增类NaviPara来管理调起导航时传入的参数 - 在类NaviPara中新增属性@property (nonatomic, retain) BMKPlanNode* startPoint;定义导航的起点 - 在类NaviPara中新增属性@property (nonatomic, retain) BMKPlanNode* endPoint;定义导航的终点 - 在类NaviPara中新增属性@property (nonatomic, assign) BMK_NAVI_TYPE naviType;定义导航的类型 - 在类NaviPara中新增属性@property (nonatomic, retain) NSString* appScheme;定义应用返回scheme - 在类NaviPara中新增属性@property (nonatomic, retain) NSString* appName;定义应用名称 - 在BMKNavigation中新增接口+ (void)openBaiduMapNavigation:;根据传入的参数调启导航 - - 2.几何图形绘制中,增加弧线绘制方法 - 在BMKArcline中新增接口+ (BMKArcline *)arclineWithPoints:;根据指定坐标点生成一段圆弧 - 在BMKArcline中新增接口+ (BMKArcline *)arclineWithCoordinates:;根据指定经纬度生成一段圆弧 - 在类BMKArclineView中新增属性@property (nonatomic, readonly) BMKArcline *arcline;来定义该View对应的圆弧数据对象 - 在BMKArclineView中新增接口- (id)initWithArcline:;根据指定的弧线生成一个圆弧View - - 3.几何图形绘制中,扩增凹多边形绘制能力 - - 4.新增Key验证返回值 - 在BMKMapManager中新增枚举数据类型EN_PERMISSION_STATUS类来定义key验证错误码 - 服务端具体返回的错误码请参见http://developer.baidu.com/map/lbs-appendix.htm#.appendix2 - - 5.新增公交换乘查询中的结果字段 - 在类BMKLine中新增属性@property (nonatomic) int zonePrice;定义路段价格 - 在类BMKLine中新增属性@property (nonatomic) int totalPrice;定义线路总价格 - 在类BMKLine中新增属性@property (nonatomic) int time;定义线路耗时,单位:秒 - 在类BMKRoute中新增属性@property (nonatomic) int time;定义此路段的消耗时间,单位:秒 - - 优化: - 优化Key鉴权认证策略 - 优化几何图形绘制中,折线段绘制末端圆滑 - 提升添加、删除几何图形覆盖物的效率 - 修复: - 修复iOS7系统下,定位图层拖图时卡顿的bug - 修复POI检索结果中,结果页索引始终为0的bug - 修复驾车线路规划中,最后一个节点提示信息有误的bug - -------------------- - v2.2.0 - 新增: - 1. 新增地图多实例能力,开发者可在同一个页面上构建多张相互独立的地图,各地图上的覆盖物互不干扰; - 2. 新增检索多实例能力,开发者可并行发起多个检索来满足自己实际的业务需求 - 由于新增检索多实例能力,因此需要在BMKSearchDelegate的回调中增加searcher参数来表明是哪个检索对象发起的检 索。所以应用检索多实例时需要将检索结果和searcher来进行一一对应。示例如下: - - (void)onGetPoiResult:(BMKSearch*)searcher result:(NSArray*)poiResultListsearchType:(int)type errorCode:(int)error{ - if(searcher==_search){ - NSLog(@"这是_search 对应的POI搜索结果"); - }else if(searcher==_search2){ - NSLog(@"这是_search2对应的POI搜索结果"); - } - } - 3. 新增地图最大、最小缩放等级的控制方法 - 在类BMKMapView中新增属性@property (nonatomic) float minZoomLevel;来设定地图的自定义最小比例尺级别 - 在类BMKMapView中新增属性@property (nonatomic) float maxZoomLevel;来设定地图的自定义最大比例尺级别 - 4. 新增地图操作的手势控制开关 - 在类BMKMapView中新增属性@property(nonatomic, getter=isZoomEnabledWithTap) BOOL zoomEnabledWithTap;来设定地图View能否支持用户单指双击放大地图,双指单击缩小地图 - 在类BMKMapView中新增属性@property(nonatomic, getter=isOverlookEnabled) BOOL overlookEnabled;来设定地图View能否支持俯仰角 - 在类BMKMapView中新增属性@property(nonatomic, getter=isRotateEnabled) BOOL rotateEnabled;来设定地图View能否支持旋转 - - - 修复: - 1. 修复遗留zip库冲突问题 - 2. 解决Documents下的非用户数据上传iCloud的问题 - 3. 修复BMKMapViewDelegate中regionDidChangeAnimated / regionWillChangeAnimated图区变化问题 - -------------------- - v2.2.1 - 修复: - 1. 修复v2.2.0版本覆盖安装后,地图无法正常显示的问题 - 2. 修复地图高级别下,道路名称不显示的问题 - 3. 修复BMKMapManage的stop方法不可用的问题 - 4. 修复setMapStatus中设置地图等级异常的问题 - 5. 修复地图中心点偏移时,拖动地图覆盖物异常的问题 - 6. 修复BMKMapView中手势控制相关的enable属性获取不正确的问题 - 7. 修复与XML库冲突的问题 - -------------------- - v2.3.0 - 新增: - 可根据开发者的实际需求,下载满足需求的定制功能开发包 - 1. 基础地图:包括基本矢量地图、卫星图、实时路况图、离线地图及各种地图覆盖物,此外还包括各种与地图相关的操作和事件监听 - 2. 检索功能:包括POI检索、公交信息查询、路线规划、正向/反向地理编码、在线建议查询、短串分享等功能 - 针对检索业务设计了全新更易用、学习成本更低的程序功能接口 - 3. LBS云检索:提供周边、区域、城市内、详情多种方式检索用户存储在LBS云内的自有数据 - 4. 定位功能:提供便捷的接口,帮助用户快捷获取当前位置信息 - 实现全面升级优化,定位功能可脱离地图单独使用 - 5. 计算工具:包括测距(两点之间地理距离)、坐标转换、调起百度地图导航等功能 - -------------------- - v2.4.0 - 新增: - 基础地图 - 1. 开放热力图绘制能力,帮助用户绘制自有数据热力图; - 在文件BMKHeatMap.h中新增类BMKHeatMapNode来表示热力图数据的单个数据节点 - 在类BMKHeatMapNode中新增属性@property (nonatomic) CLLocationCoordinate2D pt;定义点的位置坐标 - 在类BMKHeatMapNode中新增属性@property (nonatomic) double intensity;定义点的强度权值 - 在BMKHeatMap中新增类BMKHeatMap来存储热力图的绘制数据和自定义热力图的显示样式 - 在类BMKHeatMap中新增属性@property (nonatomic, assign) int mRadius; 设置热力图的柔化半径 - 在类BMKHeatMap中新增属性@property (nonatomic, retain) BMKGradient* mGradient; 设置热力图的渐变色 - 在类BMKHeatMap中新增属性@property (nonatomic, assign) double mOpacity; 设置热力图的透明度 - 在类BMKHeatMap中新增属性@property (nonatomic, retain) NSMutableArray* mData; 设置热力图数据 - 在类BMKMapView中新增方法- (void)addHeatMap:;来添加热力图 - 在类BMKMapView中新增方法- (void)removeHeatMap;来删除热力图 - - 检索功能 - 1. 开放POI的Place详情信息检索能力; - 在BMKPoiSearchOption.h文件中新增poi详情检索信息类BMKPoiDetailSearchOption - 在类 BMKPoiDetailSearchOption中新增属性@property (nonatomic, retain) NSString* poiUid; poi的uid - 在BMKPoiSearchType.h文件中新增poi详情检索结果类BMKPoiDetailResult - 在类BMKPoiSearch中新增方法- (BOOL)poiDetailSearch:;来根据poi uid 发起poi详情检索 - 在BMKPoiSearchDelegate中新增回调- (void)onGetPoiDetailResult: result: errorCode:;来返回POI详情搜索结果 - - 定位功能 - 1. 新增定位多实例,满足开发者在多个页面分别使用定位的需求; - 优化: - 1. 高级别地图下做平移操作时,标注覆盖物移动流畅性优化; - 修复: - 1. 修复相邻地形图图层拼接时,接缝过大的问题; - 2. 修复检索内存泄露的问题; - 3. 修复定位图层内存泄露的问题; - -------------------- - v2.4.1 - 优化: - 1. 优化底图相关的内存使用问题; - - -------------------- - v2.5.0 - 使用Xcode6创建工程时注意事项如下: - 在info.plist中添加:Bundle display name (Xcode6新建的项目没有此配置,若没有会造成manager start failed) - 【 新 增 】 - 1. 新增对arm64 CPU架构的适配; - 基础地图 - 1. 新增对iPhone6、iPhone6 plus的屏幕适配; - 定位功能 - 1. 新增对iOS8定位的适配; - 在使用SDK为您提供的定位功能时,注意事项如下: - 需要在info.plist里添加(以下二选一,两个都添加默认使用NSLocationWhenInUseUsageDescription): - NSLocationWhenInUseUsageDescription ,允许在前台使用时获取GPS的描述 - NSLocationAlwaysUsageDescription ,允许永久使用GPS的描述 - 【 修 复 】 - 修复Tabber控制器中使用定位弹出框异常的问题; - 修复scrollenable=no,仍可以移动地图的问题; - 修复多边形在特定坐标下显示异常问题; - 修复定位时间戳错误的问题; - 修复autolayout时,BMKMapView横屏时无法自动扩展的问题; - 修复从B页返回到A页后,在A页的viewWillAppear方法中setCenterCoordinate无效的问题; - - -------------------- - v2.6.0 - 注意:新版本开发包头文件中部分接口和枚举类型有变更,请确保使用最新版本的头文件。 - 【 变 更 】 - 定位功能 - 1、修改BMKLocationServiceDelegate: - - (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation; //修改用户位置更新后的回调 - - 【 新 增 】 - 基础地图 - 1. 地图类型修改为:enum { - BMKMapTypeStandard = 1, ///<标准地图 - BMKMapTypeSatellite = 2, ///<卫星地图 - }; - typedefNSUIntegerBMKMapType; - 2. 在类BMKMapView中新增: - 属性:baiduHeatMapEnabled,设定地图是否打开百度城市热力图图层(百度自有数据) - 接口:- isSurpportBaiduHeatMap,判断当前图区是否支持百度热力图 - 属性:buildingsEnabled ,设定地图是否现实3D楼块效果 - 属性:trafficEnabled, 设定地图是否打开路况图层 - 接口:- (void)showAnnotations: animated:,设置地图使显示区域显示所有annotations - 接口:+(void)willBackGround,当应用即将后台时调用,停止一切调用opengl相关的操作 - 接口:+(void)didForeGround,当应用恢复前台状态时调用 - 3. 在类BMKMapViewDelegate中新增接口: - - (void)mapViewDidFinishLoading: 地图初始化完毕时会调用 - - (void)mapView: onDrawMapFrame: 地图渲染每一帧画面过程中(地图更新)会调用 - 4. 在BMKGroundOverlay.h中新增透明度设置属性: alpha - 5. 新增虚线绘制样式polyline/polygon的边框/circle的边框均可设定为虚线样式并指定颜色,自定义overlay也可在glrender中实现。 - 新增资源: - 在mapapi.bundle的images文件夹中增加lineDashTexture.png,用于生成虚线纹理 - 新增属性: - 在BMKOverlayGLBaseView.h中,@propertyBOOLlineDash;// 是否为虚线样式 - 在BMKOverlayView.h中新增方法: - -(void)renderLinesWithPoints:(BMKMapPoint *)points pointCount:(NSUInteger)pointCount - strokeColor:(UIColor *)strokeColor - lineWidth:(CGFloat)lineWidth - looped:(BOOL)looped - lineDash:(BOOL)lineDash; - 注:该方法再BMKPolylineView/BMKPolygonView/BMKCircleView绘制中会自动调用,用户自定义view也可以调用这个方法实线虚线样式。 - 6. 新增自定义纹理绘制线:polyline/polygon的边框/circle的边框均可设定指定纹理,自定义overlay也可在glrender中实现。 - 在BMKOverlayView.h中新增属性: - @property (nonatomic, readonly) GLuintstrokeTextureID;//关联的纹理对象ID - 在BMKOverlayView.h中新增方法: - -(GLuint)loadStrokeTextureImage:(UIImage *)textureImage; - - 定位功能 - 1、在BMKLocationService新增接口: - +setLocationDistanceFilter: //设置定位的最小更新距离(米) - +getCurrentLocationDistanceFilter //获取定位的最小更新距离(米) - +setLocationDesiredAccuracy: //设置定位精准度 - +getCurrentLocationDesiredAccuracy //获取定位精准度 - - 【 优 化 】 - 1. SDK配置使用ARC; - 2. 更新鉴权错误码; - - 【 修 复 】 - 1. 修复定位服务中,开启定位和停止定位没有成对使用造成的问题; - 2. 修复使用circleWithCenterCoordinate:radius:画圆时半径误差偏大的问题; - 3. 修复在6plus上标注显示过小的问题; - 4. 修复annotation拖拽结束后向下偏移的问题; - - - -------------------- - v2.7.0 - 自当前版本起,百度地图iOS SDK推出 .framework形式的开发包。此种类型的开发包配置简单、使用方便,欢迎开发者选用! - 【 新 增 】 -  基础地图 - 1. 增加地图缩放等级到20级(10米); - 2. 新增地理坐标与OpenGL坐标转换接口: - BMKMapView新增接口: - - (CGPoint)glPointForMapPoint:(BMKMapPoint)mapPoint;//将BMKMapPoint转换为opengles可 以直接使用的坐标 - - (CGPoint *)glPointsForMapPoints:(BMKMapPoint *)mapPoints count:(NSUInteger)count;// 批量将BMKMapPoint转换为opengles可以直接使用的坐标 - 3. 开放区域截图能力: - BMKMapView新增接口: - - (UIImage*)takeSnapshot:(CGRect)rect;// 获得地图区域区域截图 - -  检索功能 - 1. 开放驾车线路规划,返回多条线路的能力; - BMKDrivingRouteResult中,routes数组有多条数据,支持检索结果为多条线路 - 2. 驾车线路规划结果中,新增路况信息字段: - BMKDrivingRoutePlanOption新增属性: - ///驾车检索获取路线每一个step的路况,默认使用BMK_DRIVING_REQUEST_TRAFFICE_TYPE_NONE - @property (nonatomic) BMKDrivingRequestTrafficType drivingRequestTrafficType; - BMKDrivingStep新增属性: - ///路段是否有路况信息 - @property (nonatomic) BOOL hasTrafficsInfo; - ///路段的路况信息,成员为NSNumber。0:无数据;1:畅通;2:缓慢;3:拥堵 - @property (nonatomic, strong) NSArray* traffics; - 3.废弃接口: - 2.7.0开始,BMKDrivingRouteLine中,废弃属性:isSupportTraffic - -  计算工具 - 1. 新增点与圆、多边形位置关系判断方法: - 工具类(BMKGeometry.h)中新增接口: - //判断点是否在圆内 - UIKIT_EXTERN BOOL BMKCircleContainsPoint(BMKMapPoint point, BMKMapPoint center, double radius); - UIKIT_EXTERN BOOL BMKCircleContainsCoordinate(CLLocationCoordinate2D point, CLLocationCoordinate2D center, double radius); - //判断点是否在多边形内 - UIKIT_EXTERN BOOL BMKPolygonContainsPoint(BMKMapPoint point, BMKMapPoint *polygon, NSUInteger count); - UIKIT_EXTERN BOOL BMKPolygonContainsCoordinate(CLLocationCoordinate2D point, CLLocationCoordinate2D *polygon, NSUInteger count); - 2. 新增获取折线外某点到这线上距离最近的点: - 工具类(BMKGeometry.h)中新增接口: - UIKIT_EXTERN BMKMapPoint BMKGetNearestMapPointFromPolyline(BMKMapPoint point, BMKMapPoint* polyline, NSUInteger count); - 3、新增计算地理矩形区域的面积 - 工具类(BMKGeometry.h)中新增接口: - UIKIT_EXTERN double BMKAreaBetweenCoordinates(CLLocationCoordinate2D leftTop, CLLocationCoordinate2D rightBottom); - - 【 优 化 】 - 1. 减少首次启动SDK时的数据流量; - 2. 减少协议优化升级; - 3. 优化Annotation拖拽方法(长按后开始拖拽); - - 【 修 复 】 - 1. 修复在线地图和离线地图穿插使用时,地图内存不释放的bug; - 2. 修复云检索过程中偶现崩溃的bug; - 3. 修复地图在autolayout布局下无效的bug; - 4. 修复BMKAnnotationView重叠的bug; - - - -------------------- - v2.8.0 - - 注:百度地图iOS SDK向广大开发者提供了配置更简单的 .framework形式的开发包,请开发者选择此种类型的开发包使用。 - - 【 新 增 】 -  周边雷达 - 利用周边雷达功能,开发者可在App内低成本、快速实现查找周边使用相同App的用户位置的功能。 - 新增周边雷达管理类:BMKRadarManager - 新增周边雷达protocol:BMKRadarManagerDelegate - 1.提供单次位置信息上传功能; - - (BOOL)uploadInfoRequest:(BMKRadarUploadInfo*) info; - 2.提供位置信息连续自动上传功能; - - (void)startAutoUpload:(NSTimeInterval) interval;//启动自动上传用户位置信息 - - (void)stopAutoUpload;//停止自动上传用户位置信息 - 3.提供周边位置信息检索功能; - - (BOOL)getRadarNearbySearchRequest:(BMKRadarNearbySearchOption*) option; - 4.提供清除我的位置信息功能 - - (BOOL)clearMyInfoRequest; - -  基础地图 - 1.新增折线多段颜色绘制能力; - 1)BMKPolyline中新增接口: - ///纹理索引数组 - @property (nonatomic, strong) NSArray *textureIndex; - //分段纹理绘制,根据指定坐标点生成一段折线 - + (BMKPolyline *)polylineWithPoints:(BMKMapPoint *)points count:(NSUInteger)count textureIndex:(NSArray*) textureIndex; - //根据指定坐标点生成一段折线 - + (BMKPolyline *)polylineWithCoordinates:(CLLocationCoordinate2D *)coords count:(NSUInteger)count textureIndex:(NSArray*) textureIndex; - 2)BMKPolylineView新增接口 - /// 是否分段纹理绘制(突出显示) - @property (nonatomic, assign) BOOL isFocus; - 2.可以修改BMKPolyline、BMKPolygon、BMKCircle、BMKArcline的端点数据了 - 3.新增地图强制刷新功能: - BMKMapView新增接口: - - (void)mapForceRefresh;//强制刷新mapview - -  检索功能 - 1.在线建议检索结果开放POI经纬度及UID信息; - BMKSuggestionResult新增接口: - ///poiId列表,成员是NSString - @property (nonatomic, strong) NSArray* poiIdList; - ///pt列表,成员是:封装成NSValue的CLLocationCoordinate2D - @property (nonatomic, strong) NSArray* ptList; - 2.更新检索状态码 - BMKSearchErrorCode中新增: - BMK_SEARCH_NETWOKR_ERROR,///网络连接错误 - BMK_SEARCH_NETWOKR_TIMEOUT,///网络连接超时 - BMK_SEARCH_PERMISSION_UNFINISHED,///还未完成鉴权,请在鉴权通过后重试 - -  计算工具 - 1.新增调启百度地图客户端功能; - 1)调起百度地图客户端 – poi调起 - 新增调起百度地图poi管理类:BMKOpenPoi - //调起百度地图poi详情页面 - + (BMKOpenErrorCode)openBaiduMapPoiDetailPage:(BMKOpenPoiDetailOption *) option; - //调起百度地图poi周边检索页面 - + (BMKOpenErrorCode)openBaiduMapPoiNearbySearch:(BMKOpenPoiNearbyOption *) option; - 2)调起百度地图客户端 – 路线调起 - 新增调起百度地图路线管理类类:BMKOpenRoute - //调起百度地图步行路线页面 - + (BMKOpenErrorCode)openBaiduMapWalkingRoute:(BMKOpenWalkingRouteOption *) option; - //调起百度地图公交路线页面 - + (BMKOpenErrorCode)openBaiduMapTransitRoute:(BMKOpenTransitRouteOption *) option; - //调起百度地图驾车路线检索页面 - + (BMKOpenErrorCode)openBaiduMapDrivingRoute:(BMKOpenDrivingRouteOption *) option; - 2.新增本地收藏夹功能; - 新增收藏点信息类:BMKFavPoiInfo - 新增收藏点管理类:BMKFavPoiManager - 新增接口: - //添加一个poi点 - - (NSInteger)addFavPoi:(BMKFavPoiInfo*) favPoiInfo; - //获取一个收藏点信息 - - (BMKFavPoiInfo*)getFavPoi:(NSString*) favId; - //获取所有收藏点信息 - - (NSArray*)getAllFavPois; - //更新一个收藏点 - - (BOOL)updateFavPoi:(NSString*) favIdfavPoiInfo:(BMKFavPoiInfo*) favPoiInfo; - //删除一个收藏点 - - (BOOL)deleteFavPoi:(NSString*) favId; - //清空所有收藏点 - - (BOOL)clearAllFavPois; - - 【 修 复 】 - 1、修复setMinLevel、setMaxLevel生效的是整型的问题; - 2、修复setRegion精准度不高的问题; - 3、修复POI检索结果,pageNum不正确的问题; - 4、修复定位结果海拔始终为0的问题; - 5、修复反地理编码检索在特定情况下,收不到回调的问题; - - - -------------------- - v2.8.1 - - 注:百度地图iOS SDK向广大开发者提供了配置更简单的 .framework形式的开发包,请开发者选择此种类型的开发包使用。自V2.8.1后,百度地图iOS SDK将不再提供 .a形式的开发包。 - - 【 修 复 】 - 修复了升级IOS 9 beta 3系统后闪退的问题 - - 【 提 示 】 - 1、由于iOS9改用更安全的https,为了能够在iOS9中正常使用地图SDK,请在"Info.plist"中进行如下配置,否则影响SDK的使用。 - NSAppTransportSecurity - - NSAllowsArbitraryLoads - - - 2、如果在iOS9中使用了调起百度地图客户端功能,必须在"Info.plist"中进行如下配置,否则不能调起百度地图客户端。 - LSApplicationQueriesSchemes - - baidumap - - - - -------------------- - v2.9.0 - - 注:百度地图iOS SDK向广大开发者提供了配置更简单的 .framework形式的开发包,请开发者选择此种类型的开发包使用。自v2.9.0起,百度地图iOS SDK将不再提供 .a形式的开发包。 - 自v2.9.0起,采用分包的形式提供 .framework包,请广大开发者使用时确保各分包的版本保持一致。其中BaiduMapAPI_Base.framework为基础包,使用SDK任何功能都需导入,其他分包可按需导入。 - - 【 新版提示 】 - 1.自v2.9.0起,将启用新的地图资源服务,旧地图离线包在新版上不可使用;同时官方不再支持地图离线包下载,所以v2.9.0起,去掉“手动离线导入接口”,SDK离线下载接口维持不变。 - 2.自v2.9.0起,iOS SDK采用分包形式,旧包无法与新包同时混用,请将之前所有旧包(包含bundle资源)并全部替换为新包。 - 3.自v2.9.0起,iOS SDK使用新的矢量地图样式,地图显示更加清新,和百度地图客户端保持一致 - - 【 新 增 / 废 弃 】 -  基础地图 - 1.适配iOS 9和 iPhone 6s - 2.新增点聚合功能开源 - 增加点聚合功能,并在demo中开放源代码,具体请参考demo - 3.支持线绘制功能扩展:支持纹理图片平铺绘制,缩放,分段颜色设置 - BMKOverlayGLBasicView新增属性: - /// 是否纹理图片平铺绘制,默认NO - @property (assign, nonatomic) BOOL tileTexture; - /// 纹理图片是否缩放(tileTexture为YES时生效),默认NO - @property (assign, nonatomic) BOOL keepScale; - BMKOverlayView新增属性: - /// 使用分段颜色绘制时,必须设置(内容必须为UIColor) - @property (nonatomic, strong) NSArray *colors; - 4.支持底图标注控制 - BMKMapView 新增属性: - ///设定地图是否显示底图poi标注,默认YES - @property(nonatomic, assign) BOOL showMapPoi; - 5.新增TileOverlay图层,分为离线、在线tileOverlay绘制(使用方法请参考demo)。 - 新增类: BMKTileLayer、BMKURLTileLayer、BMKSyncTileLayer、BMKTileLayerView - 6.BMKMapStatus新增只读属性:visibleMapRect - 7.BMKOfflineMap废弃扫描导入离线包接口,不再支持离线包导入 - 废弃接口: - - (BOOL)scan:(BOOL)deleteFailedr __deprecated_msg("废弃方法(空实现),自2.9.0起废弃,不支持扫描导入离线包"); - 8.更新离线城市BMKOLUpdateElement status状态 - -  检索功能 - 反geo检索结果新增商圈 - BMKReverseGeoCodeResult新增属性: - ///商圈名称 - @property (nonatomic, strong) NSString* businessCircle; - -  定位功能 - 废弃接口(空实现): - + (void)setLocationDistanceFilter:(CLLocationDistance) distanceFilter __deprecated_msg("废弃方法 (空实现),使用distanceFilter属性替换"); - + (CLLocationDistance)getCurrentLocationDistanceFilter __deprecated_msg("废弃方法(空实现),使用distanceFilter属性替换"); - + (void)setLocationDesiredAccuracy:(CLLocationAccuracy) desiredAccuracy __deprecated_msg("废弃方法(空实现),使用desiredAccuracy属性替换"); - + (CLLocationAccuracy)getCurrentLocationDesiredAccuracy __deprecated_msg("废弃方法(空实现),使用desiredAccuracy属性替换"); - 新增属性: - /// 设定定位的最小更新距离。默认为kCLDistanceFilterNone - @property(nonatomic, assign) CLLocationDistance distanceFilter; - /// 设定定位精度。默认为kCLLocationAccuracyBest。 - @property(nonatomic, assign) CLLocationAccuracy desiredAccuracy; - /// 设定最小更新角度。默认为1度,设定为kCLHeadingFilterNone会提示任何角度改变。 - @property(nonatomic, assign) CLLocationDegrees headingFilter; - /// 指定定位是否会被系统自动暂停。默认为YES。只在iOS 6.0之后起作用。 - @property(nonatomic, assign) BOOL pausesLocationUpdatesAutomatically; - ///指定定位:是否允许后台定位更新。默认为NO。只在iOS 9.0之后起作用。设为YES时,Info.plist中 UIBackgroundModes 必须包含 "location" - @property(nonatomic, assign) BOOL allowsBackgroundLocationUpdates; - - 【 修 复 】 - 1、修复不加载@3x图片的问题; - 2、修复公交路线规划,换乘方案内容缺失的问题; - 3、修复iOS 8.2系统版本以前,AnnotationView 中加入约束会卡住的问题; - 4、修复使用xcode 7编译时SDK产生的编译警告; - 5、修复BMKMapView在特定的使用条件下crash的问题 - - - -------------------- - v2.9.1 - - 注:百度地图iOS SDK向广大开发者提供了配置更简单的 .framework形式的开发包,请开发者选择此种类型的开发包使用。自v2.9.0起,百度地图iOS SDK将不再提供 .a形式的开发包。 - 自v2.9.0起,采用分包的形式提供 .framework包,请广大开发者使用时确保各分包的版本保持一致。其中BaiduMapAPI_Base.framework为基础包,使用SDK任何功能都需导入,其他分包可按需导入。 - - 【新版提示】 - 1.自V2.9.0起,将启用新的地图资源服务,旧地图离线包在新版上不可使用;同时官方不再支持地图离线包下载,所以V2.9.0起,去掉“手动离线导入接口”,SDK离线下载接口维持不变。 - 2.自V2.9.0起,iOS SDK采用分包形式,旧包无法与新包同时混用,请将之前所有旧包(包含bundle资源)并全部替换为新包。 - 3.自V2.9.0起,iOS SDK使用新的矢量地图样式,地图显示更加清新,和百度地图客户端保持一致 - - - 【 新 增 】 -  检索功能 - 1、新增类:BMKPoiAddressInfo(POI门址信息类) - 2、BMKPoiResult新增接口: - ///是否返回的有门址信息列表 - @property (nonatomic, assign) BOOL isHavePoiAddressInfoList; - ///门址信息列表,成员是BMKPoiAddrsInfo(当进行的是poi城市检索,且检索关键字是具体的门址信息(如在北京搜"上地十街10号")时,会返回此信息) - @property (nonatomic, strong) NSArray* poiAddressInfoList; - - 【 修 复 】 - 1、修复iOS9后台定位问题; - 2、修复sug检索特殊case引起的crash的问题; - 3、修复自定义AnnotationView,启用3D效果后(enabled3D=YES)点击标注没有响应的问题; - 4、修复获取离线地图包大小信息时,包大小错误的问题。 - - - -------------------- - v2.10.0 - - 注:百度地图iOS SDK向广大开发者提供了配置更简单的 .framework形式的开发包,请开发者选择此种类型的开发包使用。自v2.9.0起,百度地图iOS SDK将不再提供 .a形式的开发包。 - 自v2.9.0起,采用分包的形式提供 .framework包,请广大开发者使用时确保各分包的版本保持一致。其中BaiduMapAPI_Base.framework为基础包,使用SDK任何功能都需导入,其他分包可按需导入。 - - 【 新版提示 】 - 1.自v2.9.0起,将启用新的地图资源服务,旧地图离线包在新版上不可使用;同时官方不再支持地图离线包下载,所以v2.9.0起,去掉“手动离线导入接口”,SDK离线下载接口维持不变。 - 2.自v2.9.0起,iOS SDK采用分包形式,旧包无法与新包同时混用,请将之前所有旧包(包含bundle资源)并全部替换为新包。 - 3.自v2.9.0起,iOS SDK使用新的矢量地图样式,地图显示更加清新,和百度地图客户端保持一致 - - 【 新 增 / 废 弃 】 -  基础地图 - 1、新增3D-Touch的回调 - BMKMapView 新增属性: - /// 设定地图是否回调force touch事件,默认为NO,仅适用于支持3D Touch的情况,开启后会回调 - mapview:onForceTouch:force:maximumPossibleForce: - @property(nonatomic) BOOL forceTouchEnabled; - BMKMapViewDelegate 新增: - - (void)mapview:(BMKMapView *)mapView onForceTouch:(CLLocationCoordinate2D)coordinate force:(CGFloat)force maximumPossibleForce:(CGFloat)maximumPossibleForce; - 2、新增个性化地图模板,支持黑夜模式、清新蓝等风格地图 - BMKMapView 新增方法: - + (void)customMapStyle:(NSString*) customMapStyleJsonFilePath; - 3、新增设置地图边界区域的方法: - BMKMapView 新增属性: - ///地图预留边界,默认:UIEdgeInsetsZero。设置后,会根据mapPadding调整logo、比例尺、指南针的位置,以及targetScreenPt(BMKMapStatus.targetScreenPt) - @property (nonatomic) UIEdgeInsets mapPadding; - 4、开放显示21级地图,但不支持卫星图、热力图、交通路况图层的21级地图。 - 5、BMKMapType新增BMKMapTypeNone类型:不加载百度地图瓦片,显示为空白地图。和瓦片图功能配合使用,减少加载数据 - 6、新增限制地图的显示范围的方法 - BMKMapView 新增属性: - @property (nonatomic) BMKCoordinateRegion limitMapRegion; - 7、支持自定义百度logo位置,共支持6个位置,使用枚举类型控制显示的位置 - BMKMapView 新增属性: - @property (nonatomic) BMKLogoPosition logoPosition; - 8、新增禁用所有手势功能 - BMKMapView 新增属性: - @property(nonatomic) BOOL gesturesEnabled; - 9、新增获取指南针大小的方法,并支持更换指南针图片 - BMKMapView 新增属性、方法: - @property (nonatomic, readonly) CGSize compassSize; - - (void)setCompassImage:(UIImage *)image; - 10、新增获取比例尺大小的方法 - BMKMapView 新增属性: - /// 比例尺的宽高 - @property (nonatomic, readonly) CGSize mapScaleBarSize; - 11、增加自定义定位精度圈的填充颜色和边框 - BMKLocationViewDisplayParam 新增属性: - ///精度圈 填充颜色 - @property (nonatomic, strong) UIColor *accuracyCircleFillColor; - ///精度圈 边框颜色 - @property (nonatomic, strong) UIColor *accuracyCircleStrokeColor; - 12、新增获取矩形范围内所有marker点的方法 - BMKMapView 新增方法: - - (NSArray *)annotationsInCoordinateBounds:(BMKCoordinateBounds) bounds; - 13、BMKMapView废弃接口: - +(void)willBackGround;//逻辑由地图SDK控制 - +(void)didForeGround;//逻辑由地图SDK控制 - -  检索功能 - 1、新增骑行规划检索 - BMKRouteSearch 新增骑行路线检索方法: - - (BOOL)ridingSearch:(BMKRidingRoutePlanOption*) ridingRoutePlanOption; - BMKRouteSearchDelegate 新增返回骑行检索结果回调: - - (void)onGetRidingRouteResult:(BMKRouteSearch*)searcher result:(BMKRidingRouteResult*)result errorCode:(BMKSearchErrorCode)error; - 新增类: - BMKRidingRoutePlanOption 骑行查询基础信息类 - BMKRidingRouteResult 骑行路线结果类 - 2、新增行政区边界数据检索 - 新增类: - BMKDistrictSearch 行政区域搜索服务类 - BMKDistrictSearchDelegate 行政区域搜索结果Delegate - BMKDistrictSearchOption 行政区域检索信息类 - BMKDistrictResult 行政区域检索结果类 - 3、新增驾车、公交、骑行、步行路径规划短串分享检索 - BMKShareURLSearch 新增获取路线规划短串分享方法: - - (BOOL)requestRoutePlanShareURL:(BMKRoutePlanShareURLOption *)routePlanShareUrlSearchOption; - BMKShareURLSearchDelegate 新增返回路线规划分享url结果回调: - - (void)onGetRoutePlanShareURLResult:(BMKShareURLSearch *)searcher result:(BMKShareURLResult *)result errorCode:(BMKSearchErrorCode)error; - -  计算工具 - 支持调起百度地图客户端骑行、步行导航功能(百度地图App 8.8 以上版本支持) - BMKNavigation 新增方法: - //调起百度地图客户端骑行导航页面 - + (BMKOpenErrorCode)openBaiduMapRideNavigation:(BMKNaviPara*)para; - //调起百度地图客户端步行导航页面 - + (BMKOpenErrorCode)openBaiduMapWalkNavigation:(BMKNaviPara*)para; - - 【 修 复 】 - 1、修复只使用检索时,首次鉴权失败(网络问题),再次发起鉴权无效的问题 - 2、修复使用地图前使用离线地图,首次安装应用地图白屏的问题 - 3、修复拖拽地图时,点击到标注,会触发didSelectAnnotationView:的回调,不回调regionDidChangeAnimated的问题 - 4、修复BMKTransitStep 里的stepType中地铁和公交未做区分的问题 - - - -------------------- - -------------------- - v2.10.2 - - 注:百度地图iOS SDK向广大开发者提供了配置更简单的 .framework形式的开发包,请开发者选择此种类型的开发包使用。自v2.9.0起,百度地图iOS SDK将不再提供 .a形式的开发包。 - 自v2.9.0起,采用分包的形式提供 .framework包,请广大开发者使用时确保各分包的版本保持一致。其中BaiduMapAPI_Base.framework为基础包,使用SDK任何功能都需导入,其他分包可按需导入。 - - 【 新版提示 】 - 1.自v2.9.0起,将启用新的地图资源服务,旧地图离线包在新版上不可使用;同时官方不再支持地图离线包下载,所以v2.9.0起,去掉“手动离线导入接口”,SDK离线下载接口维持不变。 - 2.自v2.9.0起,iOS SDK采用分包形式,旧包无法与新包同时混用,请将之前所有旧包(包含bundle资源)并全部替换为新包。 - 3.自v2.9.0起,iOS SDK使用新的矢量地图样式,地图显示更加清新,和百度地图客户端保持一致 - - 【 新 增 】 -  基础地图 - 1、新增个性化地图道路文字颜色设置(包括高速及国道、城市主路、普通道路) - - 【 变 更 】 -  检索功能 - 1、行政区边界数据检索:为兼容不连续的行政区,行政区边界数据检索结果(BMKDistrictResult),行政区边界坐标点变更为: - /// 行政区边界直角地理坐标点数据(NSString数组,字符串数据格式为: @"x,y;x,y") - @property (nonatomic, strong) NSArray *paths; - 原接口作废 - - 【 优 化 】 - 1、优化瓦片图性能:支持同时下载多张瓦片图、优化下载中断的重加载机制 - - 【 修 复 】 - 1、修复sug检索某些特殊case,city、district为空的情况 - 2、修复同步瓦片图内存问题 - 3、修复在iOS6运行crash的问题 - 4、修复 CVHttpResponse::ReadData 极其偶现的crash - 5、修复某些case下,点击polyline不会回调的问题 - 6、修复调起客户端驾车导航后,关闭导航后,不会弹出“是否返回原应用”提示的问题 - - -------------------- - v3.0.0 - - 注:百度地图iOS SDK向广大开发者提供了配置更简单的 .framework形式的开发包,请开发者选择此种类型的开发包使用。自v2.9.0起,百度地图iOS SDK将不再提供 .a形式的开发包。 - 自v2.9.0起,采用分包的形式提供 .framework包,请广大开发者使用时确保各分包的版本保持一致。其中BaiduMapAPI_Base.framework为基础包,使用SDK任何功能都需导入,其他分包可按需导入。 - - 【 新版提示 】 - 1.自v3.0.0起,iOS SDK全面支持ipv6网络 - - 【 新 增 】 -  基础地图 - 1、新增室内地图功能 - 新增室内地图信息类:BMKBaseIndoorMapInfo - BMKMapView新增接口: - /// 设定地图是否显示室内图(包含室内图标注),默认不显示 - @property (nonatomic, assign) BOOL baseIndoorMapEnabled; - /// 设定室内图标注是否显示,默认YES,仅当显示室内图(baseIndoorMapEnabled为YES)时生效 - @property (nonatomic, assign) BOOL showIndoorMapPoi; - // 设置室内图楼层 - - (BMKSwitchIndoorFloorError)switchBaseIndoorMapFloor:(NSString*)strFloor withID:(NSString*)strID; - // 获取当前聚焦的室内图信息 - - (BMKBaseIndoorMapInfo*)getFocusedBaseIndoorMapInfo; - BMKMapViewDelegate新增接口: - //地图进入/移出室内图会调用此接口 - - (void)mapview:(BMKMapView *)mapView baseIndoorMapWithIn:(BOOL)flag baseIndoorMapInfo:(BMKBaseIndoorMapInfo *)info; - 2、普通地图与个性化地图切换可以自由切换,BMKMapView新增接口: - + (void)enableCustomMapStyle:(BOOL) enable; - 3、个性化地图配置json文件出错时,打印log提示 - 4、设置mapPadding时可控制地图中心是否跟着移动,BMKMapView新增接口: - @property (nonatomic) BOOL updateTargetScreenPtWhenMapPaddingChanged; - 5、BMKMapPoi中新增属性: - ///点标注的uid,可能为空 - @property (nonatomic,strong) NSString* uid; - -  检索功能 - 1、新增室内POI检索 - 新增室内POI检索参数信息类:BMKPoiIndoorSearchOption - 新增室内POI搜索结果类:BMKPoiIndoorResult - 新增室内POI信息类:BMKPoiIndoorInfo - BMKPoiSearch新增接口: - //poi室内检索 - - (BOOL)poiIndoorSearch:(BMKPoiIndoorSearchOption*)option; - BMKPoiSearchDelegate新增接口: - //返回POI室内搜索结果 -- (void)onGetPoiIndoorResult:(BMKPoiSearch*)searcher result:(BMKPoiIndoorResult*)poiIndoorResult errorCode:(BMKSearchErrorCode)errorCode; - 2、驾车路线规划结果新增3个属性:打车费用信息、拥堵米数、红路灯个数,BMKDrivingRouteLine新增接口: - ///路线红绿灯个数 - @property (nonatomic, assign) NSInteger lightNum; - ///路线拥堵米数,发起请求时需设置参数 drivingRequestTrafficType = BMK_DRIVING_REQUEST_TRAFFICE_TYPE_PATH_AND_TRAFFICE 才有值 - @property (nonatomic, assign) NSInteger congestionMetres; - ///路线预估打车费(元),负数表示无打车费信息 - @property (nonatomic, assign) NSInteger taxiFares; - 3、busline检索新增参考票价和上下线行信息,BMKBusLineResult新增接口: - ///公交线路方向 - @property (nonatomic, strong) NSString* busLineDirection; - ///起步票价 - @property (nonatomic, assign) CGFloat basicPrice; - ///全程票价 - @property (nonatomic, assign) CGFloat totalPrice; - 4、poi检索结果新增是否有全景信息,BMKPoiInfo新增接口: - @property (nonatomic, assign) BOOL panoFlag; - -  计算工具 - 新增调起百度地图客户端全景功能 - 新增调起百度地图全景类:BMKOpenPanorama - 新增调起百度地图全景参数类:BMKOpenPanoramaOption - 新增调起百度地图全景delegate:BMKOpenPanoramaDelegate - - - 【 修 复 】 - 1、修复反复添加移除离线瓦片图时偶现的crash问题 - 2、修复上传AppStore时提示访问私有api:-setOverlayGeometryDelegate:的问题 - 3、修复地图网络解析时偶现的crash问题 - - - -------------------- -v3.1.0 - - 注:百度地图iOS SDK向广大开发者提供了配置更简单的 .framework形式的开发包,请开发者选择此种类型的开发包使用。自v2.9.0起,百度地图iOS SDK将不再提供 .a形式的开发包。 - 自v2.9.0起,采用分包的形式提供 .framework包,请广大开发者使用时确保各分包的版本保持一致。其中BaiduMapAPI_Base.framework为基础包,使用SDK任何功能都需导入,其他分包可按需导入。 - - 【 新 增 】 -  基础地图 - 1、开放高清4K地图显示(无需设置) - 2、瓦片图新增异步加载方法: - 新增异步加载类:BMKAsyncTileLayer - 3、新增地图渲染完成回调方法: - - (void)mapViewDidFinishRendering:(BMKMapView *)mapView; - 4、新增定位显示类型:BMKUserTrackingModeHeading(在普通定位模式的基础上显示方向) - -  检索功能 - 1、新增室内路径规划 - BMKRouteSearch新增发起室内路径规划接口: - - (BOOL)indoorRoutePlanSearch:(BMKIndoorRoutePlanOption*) indoorRoutePlanOption; - BMKRouteSearchDelegate新增室内路径规划结果回调: - - (void)onGetIndoorRouteResult:(BMKRouteSearch*)searcher result:(BMKIndoorRouteResult*)result errorCode:(BMKSearchErrorCode)error; - 新增室内路径规划检索参数类:BMKIndoorRoutePlanOption - 新增室内路径规划检索结果类:BMKIndoorRouteResult - 2、增加新的公共交通线路规划(支持同城和跨城) - BMKRouteSearch增加新的公共交通线路规划接口: - - (BOOL)massTransitSearch:(BMKMassTransitRoutePlanOption*)routePlanOption; - BMKRouteSearchDelegate增加新的公共交通线路规划结果回调: - - (void)onGetMassTransitRouteResult:(BMKRouteSearch*)searcher result:(BMKMassTransitRouteResult*)result errorCode:(BMKSearchErrorCode)error; - 增加新的公共交通线路规划检索参数类:BMKMassTransitRoutePlanOption - 增加新的公共交通线路规划检索结果类:BMKMassTransitRouteResult - -  LBS云检索 - 1、新增云RGC检索功能 - BMKCloudSearch新增发起云RGC检索接口: - - (BOOL)cloudReverseGeoCodeSearch:(BMKCloudReverseGeoCodeSearchInfo*)searchInfo; - BMKCloudSearchDelegate新增云RGC检索结果回调: - - (void)onGetCloudReverseGeoCodeResult:(BMKCloudReverseGeoCodeResult*)cloudRGCResult searchType:(BMKCloudSearchType) type errorCode:(NSInteger) errorCode; - 新增云RGC检索参数类:BMKCloudReverseGeoCodeSearchInfo - 新增云RGC检索结果类:BMKCloudReverseGeoCodeResult - - 【 优 化 】 - 1、优化Marker加载性能:添加Marker和加载大量Marker时,性能大幅提高。 - 2、优化地图内存 - - 【 修 复 】 - 1、长按地图某区域,OnLongClick会被不停调用的问题 - 2、绘制弧线,特殊case提示画弧失败的问题 - 3、一次点击事件,点击地图空白处回调和点击覆盖物回调都会调用的问题 - - - -------------------- - v3.2.0 - - 注:自v3.2.0起,百度地图iOS SDK全面支持HTTPS,需要广大开发者导入第三方openssl静态库:libssl.a和libcrypto.a(存放于thirdlib目录下)。 - - 【 新版提示 】 - 1、自v3.2.0起,全面支持HTTPS - 2、自v3.2.0起,地图引擎全面升级,主要升级特征有: - 渲染架构技术升级,OpenGL ES从1.0升级到2.0 - 地图数据加载升级,加载性能大幅提升 - - 【 新 增 】 -  检索功能 - 1、建议检索支持港澳台;建议检索可控制只返回指定城市的检索结果 - BMKSuggestionSearchOption新增属性: - ///是否只返回指定城市检索结果(默认:NO)(提示:海外区域暂不支持设置cityLimit) - @property (nonatomic, assign) BOOL cityLimit; - 2、反地址编码结果BMKReverseGeoCodeResult新增属性: - ///结合当前位置POI的语义化结果描述 - @property (nonatomic, strong) NSString* sematicDescription; - - 【 优 化 】 - 1、建议检索和反地址编码检索服务升级,提供更加优质的服务 - - 【 修 复 】 - 1、修复国外定位偏移的问题 - 2、修复特殊情况下,移除BMKGroundOverlay时的问题 - - - -------------------- - v3.2.1 - - 注:自v3.2.0起,百度地图iOS SDK全面支持HTTPS,需要广大开发者导入第三方openssl静态库:libssl.a和libcrypto.a(存放于thirdlib目录下)。 - - 【 新版提示 】 - 1、自v3.2.0起,全面支持HTTPS - 2、自v3.2.0起,地图引擎全面升级,主要升级特征有: - 渲染架构技术升级,OpenGL ES从1.0升级到2.0 - 地图数据加载升级,加载性能大幅提升 - - 【 修 复 】 - 修复下载离线地图时,delegate方法返回state错误问题 - - - -------------------- - v3.3.0 - - -注:自v3.2.0起,百度地图iOS SDK全面支持HTTPS,需要广大开发者导入第三方openssl静态库:libssl.a和libcrypto.a(存放于thirdlib目录下)。 - - 新 版 提 示 】 - 【 注 意 】 - 1、自v3.2.0起,百度地图iOS SDK全面支持HTTPS,需要广大开发者导入第三方openssl静态库:libssl.a和libcrypto.a(存放于thirdlib目录下) - 添加方法:在 TARGETS->Build Phases-> Link Binary With Libaries中点击“+”按钮,在弹出的窗口中点击“Add Other”按钮,选择libssl.a和libcrypto.a添加到工程中 。 - - 2、支持CocoaPods导入 - pod setup //更新CocoPods的本地库 - pod search BaiduMapKit //下载最新地图SDK - - 【 新 增 】 - [ 基 础 地 图 ] - 3D地图下,增加显示天空效果,无需设置 - - [ 工 具 ] - 1.全面支持GCJ02坐标输入/输出,全局设置方法如下: - [BMKMapManager setCoordinateTypeUsedInBaiduMapSDK:BMK_COORDTYPE_COMMON];//默认为BD09LL坐标,且此方法仅在国内生效,国外均为WGS84坐标 - - 2. 新增调启步行AR导航接口:openBaiduMapwalkARNavigation - - [ LBS云] - 云检索中,keywords 改为非必填项 - - 【 优 化 】 - 优化个性化地图元素分类 - - 【 修 复 】 - 少部分地铁线及室内图无法显示问题(v3.2.0引入的问题)。 - 未下载全国离线基础包时,离线状态下全国(球)地图显示异常。 - - *********************/ -/** - *获取当前地图API的版本号 - *return 返回当前API的版本号 - */ -UIKIT_STATIC_INLINE NSString* BMKGetMapApiVersion() -{ - return @"3.3.0"; -} - -/** - *获取当前地图API base组件 的版本号 - *当前base组件版本 : 3.3.0 - *return 返回当前API base组件 的版本号 - */ -UIKIT_EXTERN NSString* BMKGetMapApiBaseComponentVersion(); - diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Base.framework/readme.txt b/Ifish/BMKMap3.3.0/BaiduMapAPI_Base.framework/readme.txt deleted file mode 100644 index 7a4db5f..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Base.framework/readme.txt +++ /dev/null @@ -1,66 +0,0 @@ - - - - --------------------------------------------------------------------------------------- - -iOS 地图 SDK v3.3.0是适用于iOS系统移动设备的矢量地图开发包 - --------------------------------------------------------------------------------------- - -地图SDK功能介绍(全功能开发包): - -地图:提供地图展示和地图操作功能; - -POI检索:支持周边检索、区域检索和城市内兴趣点检索; - -地理编码:提供经纬度和地址信息相互转化的功能接口; - -线路规划:支持公交、驾车、步行三种方式的线路规划; - -覆盖物图层:支持在地图上添加覆盖物(标注、几何图形、热力图、地形图图层等),展示更丰富的LBS信息; - -定位:获取当前位置信息,并在地图上展示(支持普通、跟随、罗盘三种模式); - -离线地图:使用离线地图可节省用户流量,提供更好的地图展示效果; - -调启百度地图:利用SDK接口,直接在本地打开百度地图客户端或WebApp,实现地图功能; - -周边雷达:利用周边雷达功能,开发者可在App内低成本、快速实现查找周边使用相同App的用户位置的功能; - -LBS云检索:支持查询存储在LBS云内的自有数据; - -特色功能:提供短串分享、Place详情检索、热力图等特色功能,帮助开发者搭建功能更加强大的应用; - - --------------------------------------------------------------------------------------- - - 注:自v3.2.0起,百度地图iOS SDK全面支持HTTPS,需要广大开发者导入第三方openssl静态库:libssl.a和libcrypto.a(存放于thirdlib目录下)。 - - 新 版 提 示 】 -【 注 意 】 -1、自v3.2.0起,百度地图iOS SDK全面支持HTTPS,需要广大开发者导入第三方openssl静态库:libssl.a和libcrypto.a(存放于thirdlib目录下) -添加方法:在 TARGETS->Build Phases-> Link Binary With Libaries中点击“+”按钮,在弹出的窗口中点击“Add Other”按钮,选择libssl.a和libcrypto.a添加到工程中 。 - -2、支持CocoaPods导入 -pod setup //更新CocoPods的本地库 -pod search BaiduMapKit //下载最新地图SDK - -【 新 增 】 -[ 基 础 地 图 ] -3D地图下,增加显示天空效果,无需设置 - -[ 工 具 ] -1.全面支持GCJ02坐标输入/输出,全局设置方法如下: -[BMKMapManager setCoordinateTypeUsedInBaiduMapSDK:BMK_COORDTYPE_COMMON];//默认为BD09LL坐标,且此方法仅在国内生效,国外均为WGS84坐标 - -2. 新增调启步行AR导航接口:openBaiduMapwalkARNavigation - -[ LBS云] -云检索中,keywords 改为非必填项 - -【 优 化 】 -优化个性化地图元素分类 - -【 修 复 】 -少部分地铁线及室内图无法显示问题(v3.2.0引入的问题)。 未下载全国离线基础包时,离线状态下全国(球)地图显示异常。 \ No newline at end of file diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Location.framework/BaiduMapAPI_Location b/Ifish/BMKMap3.3.0/BaiduMapAPI_Location.framework/BaiduMapAPI_Location deleted file mode 100644 index b842064..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Location.framework/BaiduMapAPI_Location and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Location.framework/Headers/BMKLocationComponent.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Location.framework/Headers/BMKLocationComponent.h deleted file mode 100644 index ad5f1de..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Location.framework/Headers/BMKLocationComponent.h +++ /dev/null @@ -1,10 +0,0 @@ -// -// BMKLocationComponent.h -// LocationComponent -// -// Created by Baidu on 3/31/14. -// Copyright (c) 2014 baidu. All rights reserved. -// - -#import "BMKLocationService.h" -#import "BMKLocationVersion.h" diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Location.framework/Headers/BMKLocationService.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Location.framework/Headers/BMKLocationService.h deleted file mode 100644 index 899acd0..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Location.framework/Headers/BMKLocationService.h +++ /dev/null @@ -1,110 +0,0 @@ -// -// BMKLocationService.h -// LocationComponent -// -// Created by Baidu on 3/28/14. -// Copyright (c) 2014 baidu. All rights reserved. -// - -#import -#import -@class CLLocation; -/// 定位服务Delegate,调用startUserLocationService定位成功后,用此Delegate来获取定位数据 -@protocol BMKLocationServiceDelegate -@optional -/** - *在将要启动定位时,会调用此函数 - */ -- (void)willStartLocatingUser; - -/** - *在停止定位后,会调用此函数 - */ -- (void)didStopLocatingUser; - -/** - *用户方向更新后,会调用此函数 - *@param userLocation 新的用户位置 - */ -- (void)didUpdateUserHeading:(BMKUserLocation *)userLocation; - -/** - *用户位置更新后,会调用此函数 - *@param userLocation 新的用户位置 - */ -- (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation; - -/** - *定位失败后,会调用此函数 - *@param error 错误号 - */ -- (void)didFailToLocateUserWithError:(NSError *)error; -@end - -@interface BMKLocationService : NSObject - -/// 当前用户位置,返回坐标类型为当前设置的坐标类型 -@property (nonatomic, readonly) BMKUserLocation *userLocation; - -/// 定位服务Delegate,调用startUserLocationService定位成功后,用此Delegate来获取定位数据 -@property (nonatomic, weak) id delegate; - -/** - *打开定位服务 - *需要在info.plist文件中添加(以下二选一,两个都添加默认使用NSLocationWhenInUseUsageDescription): - *NSLocationWhenInUseUsageDescription 允许在前台使用时获取GPS的描述 - *NSLocationAlwaysUsageDescription 允许永远可获取GPS的描述 - */ --(void)startUserLocationService; -/** - *关闭定位服务 - */ --(void)stopUserLocationService; - -#pragma mark - 定位参数,具体含义可参考CLLocationManager相关属性的注释 - -/// 设定定位的最小更新距离。默认为kCLDistanceFilterNone -@property(nonatomic, assign) CLLocationDistance distanceFilter; - -/// 设定定位精度。默认为kCLLocationAccuracyBest。 -@property(nonatomic, assign) CLLocationAccuracy desiredAccuracy; - -/// 设定最小更新角度。默认为1度,设定为kCLHeadingFilterNone会提示任何角度改变。 -@property(nonatomic, assign) CLLocationDegrees headingFilter; - -/// 指定定位是否会被系统自动暂停。默认为YES。只在iOS 6.0之后起作用。 -@property(nonatomic, assign) BOOL pausesLocationUpdatesAutomatically; - -///指定定位:是否允许后台定位更新。默认为NO。只在iOS 9.0之后起作用。设为YES时,Info.plist中 UIBackgroundModes 必须包含 "location" -@property(nonatomic, assign) BOOL allowsBackgroundLocationUpdates; - - -#pragma mark - 废弃接口 -/** - * 2.9.0起废弃(使用distanceFilter属性替换),空实现 - * - *在打开定位服务前设置 - *指定定位的最小更新距离(米),默认:kCLDistanceFilterNone - */ -+ (void)setLocationDistanceFilter:(CLLocationDistance) distanceFilter __deprecated_msg("废弃方法(空实现),使用distanceFilter属性替换"); -/** - * 2.9.0起废弃(使用distanceFilter属性替换),空实现 - * - *获取当前 定位的最小更新距离(米) - */ -+ (CLLocationDistance)getCurrentLocationDistanceFilter __deprecated_msg("废弃方法(空实现),使用distanceFilter属性替换"); -/** - * 2.9.0起废弃(使用desiredAccuracy属性替换),空实现 - * - *在打开定位服务前设置 - *设置定位精确度,默认:kCLLocationAccuracyBest - */ -+ (void)setLocationDesiredAccuracy:(CLLocationAccuracy) desiredAccuracy __deprecated_msg("废弃方法(空实现),使用desiredAccuracy属性替换"); -/** - * 2.9.0起废弃(使用desiredAccuracy属性替换),空实现 - * - *获取当前 定位精确度 - */ -+ (CLLocationAccuracy)getCurrentLocationDesiredAccuracy __deprecated_msg("废弃方法(空实现),使用desiredAccuracy属性替换"); - -@end diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Location.framework/Headers/BMKLocationVersion.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Location.framework/Headers/BMKLocationVersion.h deleted file mode 100644 index 64babd9..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Location.framework/Headers/BMKLocationVersion.h +++ /dev/null @@ -1,32 +0,0 @@ -// -// BMKLocationVersion.h -// LocationComponent -// -// Created by wzy on 15/9/9. -// Copyright © 2015年 baidu. All rights reserved. -// - -#ifndef BMKLocationVersion_h -#define BMKLocationVersion_h - -#import - -/** - *重要: - *location组件的版本和base组件的版本必须一致,否则不能正常使用 - */ - -/** - *获取当前地图API location组件 的版本号 - *当前location组件版本 : 3.3.0 - *return 返回当前API location组件 的版本号 - */ -UIKIT_EXTERN NSString* BMKGetMapApiLocationComponentVersion(); - -/** - *检查location组件的版本号是否和base组件的版本号一致 - *return 版本号一致返回YES - */ -UIKIT_EXTERN BOOL BMKCheckLocationComponentIsLegal(); - -#endif /* BMKLocationVersion_h */ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Location.framework/readme.txt b/Ifish/BMKMap3.3.0/BaiduMapAPI_Location.framework/readme.txt deleted file mode 100644 index aafd737..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Location.framework/readme.txt +++ /dev/null @@ -1,67 +0,0 @@ -定位功能:获取当前位置信息; - - - - --------------------------------------------------------------------------------------- - -iOS 地图 SDK v3.3.0是适用于iOS系统移动设备的矢量地图开发包 - --------------------------------------------------------------------------------------- - -地图SDK功能介绍(全功能开发包): - -地图:提供地图展示和地图操作功能; - -POI检索:支持周边检索、区域检索和城市内兴趣点检索; - -地理编码:提供经纬度和地址信息相互转化的功能接口; - -线路规划:支持公交、驾车、步行三种方式的线路规划; - -覆盖物图层:支持在地图上添加覆盖物(标注、几何图形、热力图、地形图图层等),展示更丰富的LBS信息; - -定位:获取当前位置信息,并在地图上展示(支持普通、跟随、罗盘三种模式); - -离线地图:使用离线地图可节省用户流量,提供更好的地图展示效果; - -调启百度地图:利用SDK接口,直接在本地打开百度地图客户端或WebApp,实现地图功能; - -周边雷达:利用周边雷达功能,开发者可在App内低成本、快速实现查找周边使用相同App的用户位置的功能; - -LBS云检索:支持查询存储在LBS云内的自有数据; - -特色功能:提供短串分享、Place详情检索、热力图等特色功能,帮助开发者搭建功能更加强大的应用; - - --------------------------------------------------------------------------------------- - - 注:自v3.2.0起,百度地图iOS SDK全面支持HTTPS,需要广大开发者导入第三方openssl静态库:libssl.a和libcrypto.a(存放于thirdlib目录下)。 - - 新 版 提 示 】 -【 注 意 】 -1、自v3.2.0起,百度地图iOS SDK全面支持HTTPS,需要广大开发者导入第三方openssl静态库:libssl.a和libcrypto.a(存放于thirdlib目录下) -添加方法:在 TARGETS->Build Phases-> Link Binary With Libaries中点击“+”按钮,在弹出的窗口中点击“Add Other”按钮,选择libssl.a和libcrypto.a添加到工程中 。 - -2、支持CocoaPods导入 -pod setup //更新CocoPods的本地库 -pod search BaiduMapKit //下载最新地图SDK - -【 新 增 】 -[ 基 础 地 图 ] -3D地图下,增加显示天空效果,无需设置 - -[ 工 具 ] -1.全面支持GCJ02坐标输入/输出,全局设置方法如下: -[BMKMapManager setCoordinateTypeUsedInBaiduMapSDK:BMK_COORDTYPE_COMMON];//默认为BD09LL坐标,且此方法仅在国内生效,国外均为WGS84坐标 - -2. 新增调启步行AR导航接口:openBaiduMapwalkARNavigation - -[ LBS云] -云检索中,keywords 改为非必填项 - -【 优 化 】 -优化个性化地图元素分类 - -【 修 复 】 -少部分地铁线及室内图无法显示问题(v3.2.0引入的问题)。 未下载全国离线基础包时,离线状态下全国(球)地图显示异常。 \ No newline at end of file diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/BaiduMapAPI_Map b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/BaiduMapAPI_Map deleted file mode 100644 index 3b20b61..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/BaiduMapAPI_Map and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKActionPaopaoView.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKActionPaopaoView.h deleted file mode 100644 index 0bb27f7..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKActionPaopaoView.h +++ /dev/null @@ -1,21 +0,0 @@ -/* - * BMKActionPaopaoView.h - * BMapKit - * - * Copyright 2011 Baidu Inc. All rights reserved. - * - */ - -#import -/// 该类用于定义一个PaopaoView -@interface BMKActionPaopaoView : UIView - -/** - *初始化并返回一个BMKActionPaopaoView - *@param customView 自定义View,customView=nil时返回默认的PaopaoView - *@return 初始化成功则返回BMKActionPaopaoView,否则返回nil - */ -- (id)initWithCustomView:(UIView*)customView; - -@end - diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKAnnotation.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKAnnotation.h deleted file mode 100644 index 4106f5b..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKAnnotation.h +++ /dev/null @@ -1,38 +0,0 @@ -// -// BMKAnnotation.h -// BMapKit -// -// Copyright 2011 Baidu Inc. All rights reserved. -// - -#import -#import -#import - -/// 该类为标注点的protocol,提供了标注类的基本信息函数 -@protocol BMKAnnotation - -///标注view中心坐标. -@property (nonatomic, readonly) CLLocationCoordinate2D coordinate; - -@optional - -/** - *获取annotation标题 - *@return 返回annotation的标题信息 - */ -- (NSString *)title; - -/** - *获取annotation副标题 - *@return 返回annotation的副标题信息 - */ -- (NSString *)subtitle; - -/** - *设置标注的坐标,在拖拽时会被调用. - *@param newCoordinate 新的坐标值 - */ -- (void)setCoordinate:(CLLocationCoordinate2D)newCoordinate; - -@end diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKAnnotationView.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKAnnotationView.h deleted file mode 100644 index 1c169c0..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKAnnotationView.h +++ /dev/null @@ -1,110 +0,0 @@ -/* - * BMKAnnotationView.h - * BMapKit - * - * Copyright 2011 Baidu Inc. All rights reserved. - * - */ - -#import -#import "BMKActionPaopaoView.h" - -#if __IPHONE_3_2 <= __IPHONE_OS_VERSION_MAX_ALLOWED - -enum { - BMKAnnotationViewDragStateNone = 0, ///< 静止状态. - BMKAnnotationViewDragStateStarting, ///< 开始拖动 - BMKAnnotationViewDragStateDragging, ///< 拖动中 - BMKAnnotationViewDragStateCanceling, ///< 取消拖动 - BMKAnnotationViewDragStateEnding ///< 拖动结束 -}; - -typedef NSUInteger BMKAnnotationViewDragState; - -#endif - - - -@class BMKAnnotationViewInternal; -@protocol BMKAnnotation; -@class BMKMapView; -@class BMKMapViewInternal; -///标注view -@interface BMKAnnotationView : UIView -{ -@private - BMKAnnotationViewInternal *_internal; - BOOL _enabled3D; - CGPoint _originPt; - CGPoint startPoint; -} - -/** - *初始化并返回一个annotation view - *@param annotation 关联的annotation对象 - *@param reuseIdentifier 如果要重用view,传入一个字符串,否则设为nil,建议重用view - *@return 初始化成功则返回annotation view,否则返回nil - */ -- (id)initWithAnnotation:(id )annotation reuseIdentifier:(NSString *)reuseIdentifier; - - -///复用标志 -@property (nonatomic, readonly) NSString *reuseIdentifier; -///paopaoView -@property (nonatomic, strong)BMKActionPaopaoView* paopaoView; - -/** - *当view从reuse队列里取出时被调用 - *默认不做任何事 - */ -- (void)prepareForReuse; - -///关联的annotation -@property (nonatomic, strong) id annotation; - -///annotation view显示的图像 -@property (nonatomic, strong) UIImage *image; - -///默认情况下, annotation view的中心位于annotation的坐标位置,可以设置centerOffset改变view的位置,正的偏移使view朝右下方移动,负的朝左上方,单位是像素 -@property (nonatomic) CGPoint centerOffset; - -///默认情况下, 弹出的气泡位于view正中上方,可以设置calloutOffset改变view的位置,正的偏移使view朝右下方移动,负的朝左上方,单位是像素 -@property (nonatomic) CGPoint calloutOffset; - -///默认情况下,标注没有3D效果,可以设置enabled3D改变使用3D效果,使得标注在地图旋转和俯视时跟随旋转、俯视 -@property (nonatomic) BOOL enabled3D; - -///默认为YES,当为NO时view忽略触摸事件 -@property (nonatomic, getter=isEnabled) BOOL enabled; - -///默认为NO,当view被点中时被设为YES,用户不要直接设置这个属性.若设置,需要在设置后调用BMKMapView的- (void)mapForceRefresh; 方法刷新地图 -@property (nonatomic, getter=isSelected) BOOL selected; - -/** - *设定view的选中状态 - *该方法被BMKMapView调用 - *@param selected 如果view需要显示为选中状态,该值为YES - *@param animated 如果需要动画效果,该值为YES,暂不支持 - */ -- (void)setSelected:(BOOL)selected animated:(BOOL)animated; - -///当为YES时,view被选中时会弹出气泡,annotation必须实现了title这个方法 -@property (nonatomic) BOOL canShowCallout; - -///显示在气泡左侧的view(使用默认气泡时,view的width最大值为32,height最大值为41,大于则使用最大值) -@property (strong, nonatomic) UIView *leftCalloutAccessoryView; - -///显示在气泡右侧的view(使用默认气泡时,view的width最大值为32,height最大值为41,大于则使用最大值) -@property (strong, nonatomic) UIView *rightCalloutAccessoryView; - -///当设为YES并实现了setCoordinate:方法时,支持将view在地图上拖动, ios 3.2以后支持 -@property (nonatomic, getter=isDraggable) BOOL draggable __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_2); - -///当前view的拖动状态, ios 3.2以后支持 -@property (nonatomic) BMKAnnotationViewDragState dragState __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_2); - - -@end - - - diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKArcline.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKArcline.h deleted file mode 100644 index f247f48..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKArcline.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * BMKArcline.h - * BMapKit - * - * Copyright 2011 Baidu Inc. All rights reserved. - * - */ - -#import "BMKMultiPoint.h" -#import "BMKOverlay.h" - -/// 此类用于定义一段圆弧 -@interface BMKArcline : BMKMultiPoint -{ - BMKMapRect _boundingMapRect; - bool isYouArc; -} - -/** - *根据指定坐标点生成一段圆弧 - *@param points 指定的直角坐标点数组(需传入3个点) - *@return 新生成的圆弧对象 - */ -+ (BMKArcline *)arclineWithPoints:(BMKMapPoint *)points; - -/** - *根据指定经纬度生成一段圆弧 - *@param coords 指定的经纬度坐标点数组(需传入3个点) - *@return 新生成的圆弧对象 - */ -+ (BMKArcline *)arclineWithCoordinates:(CLLocationCoordinate2D *)coords; - -/** - *重新设置圆弧坐标 - *@param points 指定的直角坐标点数组(需传入3个点) - *@return 是否设置成功 - */ -- (BOOL)setArclineWithPoints:(BMKMapPoint *)points; - -/** - *重新设置圆弧坐标 - *@param coords 指定的经纬度坐标点数组(需传入3个点) - *@param count 坐标点的个数 - *@return 是否设置成功 - */ -- (BOOL)setArclineWithCoordinates:(CLLocationCoordinate2D *)coords; - -@end diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKArclineView.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKArclineView.h deleted file mode 100644 index 980bac1..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKArclineView.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * BMKArclineView.h - * BMapKit - * - * Copyright 2011 Baidu Inc. All rights reserved. - * - */ - -#import - -#import "BMKArcline.h" -#import "BMKOverlayGLBasicView.h" - -/// 此类用于定义一个圆弧View -@interface BMKArclineView : BMKOverlayGLBasicView - -/** - *根据指定的弧线生成一个圆弧View - *@param arcline 指定的弧线数据对象 - *@return 新生成的弧线View - */ -- (id)initWithArcline:(BMKArcline *)arcline; - -/// 该View对应的圆弧数据对象 -@property (nonatomic, readonly) BMKArcline *arcline; - -@end diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKBaseIndoorMapInfo.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKBaseIndoorMapInfo.h deleted file mode 100644 index a7f11c2..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKBaseIndoorMapInfo.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// BMKBaseIndoorMapInfo.h -// MapComponent -// -// Created by wzy on 16/4/2. -// Copyright © 2016年 baidu. All rights reserved. -// - -#ifndef BMKBaseIndoorMapInfo_h -#define BMKBaseIndoorMapInfo_h - -#import -#import -#import - -///此类表示室内图基础信息 -@interface BMKBaseIndoorMapInfo : NSObject - -/// 室内ID -@property (nonatomic, strong) NSString* strID; -/// 当前楼层 -@property (nonatomic, strong) NSString* strFloor; -/// 所有楼层信息 -@property (nonatomic, strong) NSMutableArray* arrStrFloors; - -@end - -#endif /* BMKBaseIndoorMapInfo_h */ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKCircle.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKCircle.h deleted file mode 100644 index 4371db9..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKCircle.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * BMKCircle.h - * BMapKit - * - * Copyright 2011 Baidu Inc. All rights reserved. - * - */ - -#import "BMKShape.h" -#import "BMKMultiPoint.h" -#import "BMKOverlay.h" - -/// 该类用于定义一个圆 -@interface BMKCircle : BMKMultiPoint { -@package - BOOL _invalidate; - CLLocationCoordinate2D _coordinate; - CLLocationDistance _radius; - BMKMapRect _boundingMapRect; -} - -/** - *根据中心点和半径生成圆 - *@param coord 中心点的经纬度坐标 - *@param radius 半径,单位:米 - *@return 新生成的圆 - */ -+ (BMKCircle *)circleWithCenterCoordinate:(CLLocationCoordinate2D)coord - radius:(CLLocationDistance)radius; - -/** - *根据指定的直角坐标矩形生成圆,半径由较长的那条边决定,radius = MAX(width, height)/2 - *@param mapRect 指定的直角坐标矩形 - *@return 新生成的圆 - */ -+ (BMKCircle *)circleWithMapRect:(BMKMapRect)mapRect; - -/// 中心点坐标 -@property (nonatomic, assign) CLLocationCoordinate2D coordinate; - -/// 半径,单位:米 -@property (nonatomic, assign) CLLocationDistance radius; - -/// 该圆的外接矩形 -@property (nonatomic, readonly) BMKMapRect boundingMapRect; - -/** - *设置圆的中心点和半径 - *@param coord 中心点的经纬度坐标 - *@param radius 半径,单位:米 - *@return 是否设置成功 - */ -- (BOOL)setCircleWithCenterCoordinate:(CLLocationCoordinate2D)coord radius:(CLLocationDistance)radius; -/** - *根据指定的直角坐标矩形设置圆,半径由较长的那条边决定,radius = MAX(width, height)/2 - *@param mapRect 指定的直角坐标矩形 - *@return 是否设置成功 - */ -- (BOOL)setCircleWithMapRect:(BMKMapRect)mapRect; - -@end diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKCircleView.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKCircleView.h deleted file mode 100644 index 0fdcd2e..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKCircleView.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * BMKCircleView.h - * BMapKit - * - * Copyright 2011 Baidu Inc. All rights reserved. - * - */ - -#import - -#import "BMKCircle.h" -#import "BMKOverlayGLBasicView.h" - -/// 该类用于定义圆对应的View -@interface BMKCircleView : BMKOverlayGLBasicView - -/** - *根据指定圆生成对应的View - *@param circle 指定的圆 - *@return 生成的View - */ -- (id)initWithCircle:(BMKCircle *)circle; - -/// 该View对应的圆 -@property (nonatomic, readonly) BMKCircle *circle; - -@end diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKGradient.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKGradient.h deleted file mode 100644 index 0a04382..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKGradient.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * BMKGradient.h - * BMapKit - * - * Copyright 2013 Baidu Inc. All rights reserved. - * - */ -#import -#import -///此类表示热力图渐变色 -@interface BMKGradient : NSObject{ - -} -///渐变色用到的所有颜色数组,数组成员类型为UIColor -@property (nonatomic,strong) NSArray* mColors; -///每一个颜色的起始点数组,,数组成员类型为 [0,1]的double值, given as a percentage of the maximum intensity,个数和mColors的个数必须相同,数组内元素必须时递增的 -@property (nonatomic,strong) NSArray* mStartPoints; - -//渐变色的初始化方法,使用默认colorMapSize1000进行初始化 -- (id)initWithColors:(NSArray*)colors startPoints:(NSArray*)startPoints; -@end - - - - - diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKGroundOverlay.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKGroundOverlay.h deleted file mode 100644 index bc6e058..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKGroundOverlay.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - * BMKGroundOverlay.h - * BMapKit - * - * Copyright 2011 Baidu Inc. All rights reserved. - * - */ -#import "BMKMultiPoint.h" -#import "BMKOverlay.h" -/// 该类用于定义一个图片图层 -@interface BMKGroundOverlay : BMKMultiPoint -{ - @public - float zoomLevel; - CLLocationCoordinate2D _pt; - BMKCoordinateBounds _bound; - CGPoint _anchor; - UIImage* _icon; - int iconID; - BOOL isCenterPt; - int left; - int bottom; - int width; - int height; -} -/// 两种绘制GroundOverlay的方式之一:绘制的位置地理坐标,与anchor配对使用 -@property (nonatomic,assign) CLLocationCoordinate2D pt; - -/// 用位置绘制时图片的锚点,图片左上角为(0.0f,0.0f),向右向下为正 -/// 使用groundOverlayWithPosition初始化时生效 -@property (nonatomic,assign) CGPoint anchor; - -/// 两种绘制GroundOverlay的方式之二:绘制的地理区域范围,图片在此区域内合理缩放 -@property (nonatomic,assign) BMKCoordinateBounds bound; - -/// 绘制图片 -@property(nonatomic, strong) UIImage *icon; - -///图片纹理透明度,最终透明度 = 纹理透明度 * alpha,取值范围为[0.0f, 1.0f],默认为1.0f -@property(nonatomic) GLfloat alpha; - -/** - *根据指定经纬度坐标生成一个groundOverlay - *@param position 指定的经纬度坐标 - *@param zoomLevel 不损失精度绘制原始图片的地图等级 - *@param anchor 绘制图片的锚点 - *@param icon 绘制使用的图片 - *@return 新生成的groundOverlay对象 - */ -+ (BMKGroundOverlay *)groundOverlayWithPosition:(CLLocationCoordinate2D)position - zoomLevel:(CGFloat)zoomLevel - anchor:(CGPoint)anchor - icon:(UIImage*)icon; - -/** - *根据指定区域生成一个groundOverlay - *@param bounds 指定的经纬度区域 - *@param icon 绘制使用的图片 - *@return 新生成的groundOverlay对象 - */ -+ (BMKGroundOverlay *)groundOverlayWithBounds:(BMKCoordinateBounds)bounds - icon:(UIImage*)icon; - - -@end \ No newline at end of file diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKGroundOverlayView.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKGroundOverlayView.h deleted file mode 100644 index ef9ba97..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKGroundOverlayView.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - * BMKGroundOverlayView.h - * BMapKit - * - * Copyright 2013 Baidu Inc. All rights reserved. - * - */ - -#import - -#import "BMKGroundOverlay.h" -#import "BMKOverlayPathView.h" - -/// 该类用于定义一个BMKGroundOverlayView -@interface BMKGroundOverlayView : BMKOverlayView - -/** - *根据指定的groundOverlay生成一个View - *@param groundOverlay 指定的groundOverlay数据对象 - *@return 新生成的View - */ -- (id)initWithGroundOverlay:(BMKGroundOverlay *)groundOverlay; - -/// 该View对应的ground数据对象 -@property (nonatomic, readonly) BMKGroundOverlay *groundOverlay; - -@end - diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKHeatMap.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKHeatMap.h deleted file mode 100644 index 8c434ef..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKHeatMap.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * BMKHeatMap.h - * BMapKit - * - * Copyright 2013 Baidu Inc. All rights reserved. - * - */ -#import -#import -#import -#import "BMKGradient.h" -///热力图节点信息 -@interface BMKHeatMapNode : NSObject{ - double _intensity; - CLLocationCoordinate2D _pt; -} - -///点的强度权值 -@property (nonatomic) double intensity; -///点的位置坐标 -@property (nonatomic) CLLocationCoordinate2D pt; - -@end - - - -///热力图的绘制数据和显示样式类 -@interface BMKHeatMap : NSObject -{ - int _mRadius; //Heatmap point radius - BMKGradient* _mGradient;//Gradient of the color map - double _mOpacity;//Opacity of the overall heatmap overlay [0...1] - NSMutableArray* _mData; - -} -///设置热力图点半径,默认为12ps -@property (nonatomic, assign) int mRadius; -///设置热力图渐变,有默认值 DEFAULT_GRADIENT -@property (nonatomic, strong) BMKGradient* mGradient; -///设置热力图层透明度,默认 0.6 -@property (nonatomic, assign) double mOpacity; -///用户传入的热力图数据,数组,成员类型为BMKHeatMapNode -@property (nonatomic, strong) NSMutableArray* mData; - -@end - - - diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKLocationViewDisplayParam.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKLocationViewDisplayParam.h deleted file mode 100644 index 5902a91..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKLocationViewDisplayParam.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * BMKLocationViewDisplayParam.h - * BMapKit - * - * Copyright 2013 Baidu Inc. All rights reserved. - * - */ -#import -#import - - -///此类表示定位图层自定义样式参数 -@interface BMKLocationViewDisplayParam : NSObject - -///定位图标X轴偏移量(屏幕坐标) -@property (nonatomic, assign) CGFloat locationViewOffsetX; -///定位图标Y轴偏移量(屏幕坐标) -@property (nonatomic, assign) CGFloat locationViewOffsetY; -///精度圈是否显示,默认YES -@property (nonatomic, assign) BOOL isAccuracyCircleShow; -///精度圈 填充颜色 -@property (nonatomic, strong) UIColor *accuracyCircleFillColor; -///精度圈 边框颜色 -@property (nonatomic, strong) UIColor *accuracyCircleStrokeColor; -///跟随态旋转角度是否生效,默认YES -@property (nonatomic, assign) BOOL isRotateAngleValid; -///定位图标名称,需要将该图片放到 mapapi.bundle/images 目录下 -@property (nonatomic, strong) NSString* locationViewImgName; - -@end - - - diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKMapComponent.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKMapComponent.h deleted file mode 100644 index 5d2b2dc..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKMapComponent.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * BMKMapComponent.h - * BMKMapComponent - * - * Copyright 2011 Baidu Inc. All rights reserved. - * - */ -#import "BMKMapVersion.h" - -#import "BMKAnnotation.h" -#import "BMKAnnotationView.h" - -#import "BMKMapView.h" -#import "BMKBaseIndoorMapInfo.h" -#import "BMKOfflineMap.h" -#import "BMKOfflineMapType.h" - -#import "BMKOverlay.h" -#import "BMKShape.h" -#import "BMKPointAnnotation.h" -#import "BMKPinAnnotationView.h" -#import "BMKMultiPoint.h" -#import "BMKArcline.h" -#import "BMKPolyline.h" -#import "BMKPolygon.h" -#import "BMKCircle.h" -#import "BMKOverlayView.h" -#import "BMKOverlayPathView.h" -#import "BMKOverlayGLBasicView.h" -#import "BMKPolygonView.h" -#import "BMKPolylineView.h" -#import "BMKCircleView.h" -#import "BMKArclineView.h" -#import "BMKGroundOverlay.h" -#import "BMKGroundOverlayView.h" -#import "BMKGradient.h" -#import "BMKTileLayer.h" -#import "BMKTileLayerView.h" - diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKMapStatus.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKMapStatus.h deleted file mode 100644 index 16338b0..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKMapStatus.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * BMKMapStatus.h - * BMapKit - * - * Copyright 2011 Baidu Inc. All rights reserved. - * - */ - -#import -#import -#import -//#import - -///此类表示地图状态信息 -@interface BMKMapStatus : NSObject -{ - float _fLevel; // 缩放比例,3-19级 - float _fRotation; // 旋转角度 - float _fOverlooking; // 俯视角度 - - CGPoint _targetScreenPt;//屏幕坐标(中心点) - CLLocationCoordinate2D _targetGeoPt;//地理坐标(中心点) -} -///缩放级别:[3~19] -@property (nonatomic, assign) float fLevel; -///旋转角度 -@property (nonatomic, assign) float fRotation; -///俯视角度:[-45~0] -@property (nonatomic, assign) float fOverlooking; -///屏幕中心点坐标:在屏幕内,超过无效 -@property (nonatomic) CGPoint targetScreenPt; -///地理中心点坐标:经纬度 -@property (nonatomic) CLLocationCoordinate2D targetGeoPt; -///当前地图范围,采用直角坐标系表示,向右向下增长 -@property (nonatomic, assign, readonly) BMKMapRect visibleMapRect; - -@end - - - diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKMapVersion.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKMapVersion.h deleted file mode 100644 index 4309288..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKMapVersion.h +++ /dev/null @@ -1,32 +0,0 @@ -// -// BMKMapVersion.h -// MapComponent -// -// Created by wzy on 15/9/9. -// Copyright © 2015年 baidu. All rights reserved. -// - -#ifndef BMKMapVersion_h -#define BMKMapVersion_h - -#import - -/** - *重要: - *map组件的版本和base组件的版本必须一致,否则不能正常使用 - */ - -/** - *获取当前地图API map组件 的版本号 - *当前map组件版本 : 3.3.0 - *return 返回当前API map组件 的版本号 - */ -UIKIT_EXTERN NSString* BMKGetMapApiMapComponentVersion(); - -/** - *检查map组件的版本号是否和base组件的版本号一致 - *return 版本号一致返回YES - */ -UIKIT_EXTERN BOOL BMKCheckMapComponentIsLegal(); - -#endif /* BMKMapVersion_h */ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKMapView.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKMapView.h deleted file mode 100644 index d23a64d..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKMapView.h +++ /dev/null @@ -1,726 +0,0 @@ -/* - * BMKMapView.h - * BMapKit - * - * Copyright 2011 Baidu Inc. All rights reserved. - * - */ -#import -#import "BMKAnnotation.h" -#import "BMKAnnotationView.h" -#import "BMKOverlayView.h" -#import "UIKit/UIKit.h" -#import "BMKMapStatus.h" -#import "BMKLocationViewDisplayParam.h" -#import "BMKHeatMap.h" -#import "BMKBaseIndoorMapInfo.h" - -@protocol BMKMapViewDelegate; - -///点击地图标注返回数据结构 -@interface BMKMapPoi : NSObject -///点标注的名称 -@property (nonatomic,strong) NSString* text; -///点标注的经纬度坐标 -@property (nonatomic,assign) CLLocationCoordinate2D pt; -///点标注的uid,可能为空 -@property (nonatomic,strong) NSString* uid; -@end - -typedef enum { - BMKUserTrackingModeNone = 0, /// 普通定位模式 - BMKUserTrackingModeHeading, /// 定位方向模式 - BMKUserTrackingModeFollow, /// 定位跟随模式 - BMKUserTrackingModeFollowWithHeading, /// 定位罗盘模式 -} BMKUserTrackingMode; - -///枚举:logo位置 -typedef enum { - BMKLogoPositionLeftBottom = 0, /// 地图左下方 - BMKLogoPositionLeftTop, /// 地图左上方 - BMKLogoPositionCenterBottom, /// 地图中下方 - BMKLogoPositionCenterTop, /// 地图中上方 - BMKLogoPositionRightBottom, /// 地图右下方 - BMKLogoPositionRightTop, /// 地图右上方 -} BMKLogoPosition; - -///枚举:室内图切换楼层结果 -typedef enum { - BMKSwitchIndoorFloorSuccess = 0, /// 切换楼层成功 - BMKSwitchIndoorFloorFailed, /// 切换楼层失败 - BMKSwitchIndoorFloorNotFocused, /// 地图还未聚焦到传入的室内图 - BMKSwitchIndoorFloorNotExist, /// 当前室内图不存在该楼层 -} BMKSwitchIndoorFloorError; - -///地图View类,使用此View可以显示地图窗口,并且对地图进行相关的操作 -@interface BMKMapView : UIView - -/// 地图View的Delegate,此处记得不用的时候需要置nil,否则影响内存的释放 -@property (nonatomic, weak) id delegate; - -/// 当前地图类型,可设定为标准地图、卫星地图 -@property (nonatomic) BMKMapType mapType; - -/// 当前地图的经纬度范围,设定的该范围可能会被调整为适合地图窗口显示的范围 -@property (nonatomic) BMKCoordinateRegion region; - -/// 限制地图的显示范围(地图状态改变时,该范围不会在地图显示范围外。设置成功后,会调整地图显示该范围) -@property (nonatomic) BMKCoordinateRegion limitMapRegion; - -/// 指南针的位置,设定坐标以BMKMapView左上角为原点,向右向下增长 -@property (nonatomic) CGPoint compassPosition; -/// 指南针的宽高 -@property (nonatomic, readonly) CGSize compassSize; - -/// 当前地图的中心点,改变该值时,地图的比例尺级别不会发生变化 -@property (nonatomic) CLLocationCoordinate2D centerCoordinate; - -/// 地图比例尺级别,在手机上当前可使用的级别为3-21级 -@property (nonatomic) float zoomLevel; -/// 地图的自定义最小比例尺级别 -@property (nonatomic) float minZoomLevel; -/// 地图的自定义最大比例尺级别 -@property (nonatomic) float maxZoomLevel; - -/// 地图旋转角度,在手机上当前可使用的范围为-180~180度 -@property (nonatomic) int rotation; - -/// 地图俯视角度,在手机上当前可使用的范围为-45~0度 -@property (nonatomic) int overlooking; -///设定地图是否现显示3D楼块效果 -@property(nonatomic, getter=isBuildingsEnabled) BOOL buildingsEnabled; -///设定地图是否显示底图poi标注(不包含室内图标注),默认YES -@property(nonatomic, assign) BOOL showMapPoi; -///设定地图是否打开路况图层 -@property(nonatomic, getter=isTrafficEnabled) BOOL trafficEnabled; -///设定地图是否打开百度城市热力图图层(百度自有数据),注:地图层级大于11时,可显示热力图 -@property(nonatomic, getter=isBaiduHeatMapEnabled) BOOL baiduHeatMapEnabled; - -///设定地图View能否支持所有手势操作 -@property(nonatomic) BOOL gesturesEnabled; -///设定地图View能否支持用户多点缩放(双指) -@property(nonatomic, getter=isZoomEnabled) BOOL zoomEnabled; -///设定地图View能否支持用户缩放(双击或双指单击) -@property(nonatomic, getter=isZoomEnabledWithTap) BOOL zoomEnabledWithTap; -///设定地图View能否支持用户移动地图 -@property(nonatomic, getter=isScrollEnabled) BOOL scrollEnabled; -///设定地图View能否支持俯仰角 -@property(nonatomic, getter=isOverlookEnabled) BOOL overlookEnabled; -///设定地图View能否支持旋转 -@property(nonatomic, getter=isRotateEnabled) BOOL rotateEnabled; - -/// 设定地图是否回调force touch事件,默认为NO,仅适用于支持3D Touch的情况,开启后会回调 - mapview:onForceTouch:force:maximumPossibleForce: -@property(nonatomic) BOOL forceTouchEnabled; - -/// 设定是否显式比例尺 -@property (nonatomic) BOOL showMapScaleBar; - -/// 比例尺的位置,设定坐标以BMKMapView左上角为原点,向右向下增长 -@property (nonatomic) CGPoint mapScaleBarPosition; - -/// 比例尺的宽高 -@property (nonatomic, readonly) CGSize mapScaleBarSize; - -/// logo位置,默认BMKLogoPositionLeftBottom -@property (nonatomic) BMKLogoPosition logoPosition; - -///当前地图范围,采用直角坐标系表示,向右向下增长 -@property (nonatomic) BMKMapRect visibleMapRect; - -/** - *地图预留边界,默认:UIEdgeInsetsZero。 - *注:设置后,会根据mapPadding调整logo、比例尺、指南针的位置。 - * 当updateTargetScreenPtWhenMapPaddingChanged==YES时,地图中心(屏幕坐标:BMKMapStatus.targetScreenPt)跟着改变 - */ -@property (nonatomic) UIEdgeInsets mapPadding; -///设置mapPadding时,地图中心(屏幕坐标:BMKMapStatus.targetScreenPt)是否跟着改变,默认YES -@property (nonatomic) BOOL updateTargetScreenPtWhenMapPaddingChanged; - -///设定地图View能否支持以手势中心点为轴进行旋转和缩放 -@property(nonatomic, getter=isChangeWithTouchPointCenterEnabled) BOOL ChangeWithTouchPointCenterEnabled; - -/** - *设置自定义地图样式 - *注:必须在BMKMapView对象初始化之前调用 - *@param customMapStyleJsonFilePath 自定义样式文件所在路径,包含文件名 - */ -+ (void)customMapStyle:(NSString*) customMapStyleJsonFilePath; -/** - * 自定义地图样式开关,影响所有BMKMapView对象 - *@param enable 自定义地图样式是否生效 - */ -+ (void)enableCustomMapStyle:(BOOL) enable; - -/** - * 2.10.0起废弃,空实现,逻辑由地图SDK控制 - * - *当应用即将后台时调用,停止一切调用opengl相关的操作。 - */ -+(void)willBackGround __deprecated_msg("废弃方法(空实现),逻辑由地图SDK控制"); -/** - * 2.10.0起废弃,空实现,逻辑由地图SDK控制 - * - *当应用恢复前台状态时调用。 - */ -+(void)didForeGround __deprecated_msg("废弃方法(空实现),逻辑由地图SDK控制"); -/** - *当mapview即将被显式的时候调用,恢复之前存储的mapview状态。 - */ --(void)viewWillAppear; - -/** - *当mapview即将被隐藏的时候调用,存储当前mapview的状态。 - */ --(void)viewWillDisappear; - -/** - *强制刷新mapview - */ -- (void)mapForceRefresh; - -/** - *放大一级比例尺 - *@return 是否成功 - */ -- (BOOL)zoomIn; - -/** - *缩小一级比例尺 - *@return 是否成功 - */ -- (BOOL)zoomOut; - -/** - *根据当前地图View的窗口大小调整传入的region,返回适合当前地图窗口显示的region,调整过程会保证中心点不改变 - *@param region 待调整的经纬度范围 - *@return 调整后适合当前地图窗口显示的经纬度范围 - */ -- (BMKCoordinateRegion)regionThatFits:(BMKCoordinateRegion)region; - -/** - *设定当前地图的显示范围 - *@param region 要设定的地图范围,用经纬度的方式表示 - *@param animated 是否采用动画效果 - */ -- (void)setRegion:(BMKCoordinateRegion)region animated:(BOOL)animated; - -/** - *设定地图中心点坐标 - *@param coordinate 要设定的地图中心点坐标,用经纬度表示 - *@param animated 是否采用动画效果 - */ -- (void)setCenterCoordinate:(CLLocationCoordinate2D)coordinate animated:(BOOL)animated; - -/** - *获得地图当前可视区域截图 - *@return 返回view范围内的截取的UIImage - */ --(UIImage*) takeSnapshot; - -/** - *获得地图区域区域截图 - *@return 返回指定区域的截取的UIImage - */ --(UIImage*) takeSnapshot:(CGRect)rect; - -/** - *设置罗盘的图片 - *@param image 设置的图片 -*/ -- (void)setCompassImage:(UIImage *)image; - -/** - *设定当前地图的显示范围,采用直角坐标系表示 - *@param mapRect 要设定的地图范围,用直角坐标系表示 - *@param animate 是否采用动画效果 - */ -- (void)setVisibleMapRect:(BMKMapRect)mapRect animated:(BOOL)animate; - -/** - *根据当前地图View的窗口大小调整传入的mapRect,返回适合当前地图窗口显示的mapRect,调整过程会保证中心点不改变 - *@param mapRect 待调整的地理范围,采用直角坐标系表示 - *@return 调整后适合当前地图窗口显示的地理范围,采用直角坐标系 - */ -- (BMKMapRect)mapRectThatFits:(BMKMapRect)mapRect; - -/** - *设定地图的显示范围,并使mapRect四周保留insets指定的边界区域 - *@param mapRect 要设定的地图范围,用直角坐标系表示 - *@param insets 指定的四周边界大小 - *@param animate 是否采用动画效果 - */ -- (void)setVisibleMapRect:(BMKMapRect)mapRect edgePadding:(UIEdgeInsets)insets animated:(BOOL)animate; - -/** - *根据当前地图View的窗口大小调整传入的mapRect,返回适合当前地图窗口显示的mapRect,并且在该mapRect四周保留insets指定的边界区域 - *@param mapRect 待调整的地理范围,采用直角坐标系表示 - ×@param insets mapRect四周要预留的边界大小 - *@return 调整后适合当前地图窗口显示的地理范围,采用直角坐标系 - */ -- (BMKMapRect)mapRectThatFits:(BMKMapRect)mapRect edgePadding:(UIEdgeInsets)insets; - -/** - *将经纬度坐标转换为View坐标 - *@param coordinate 待转换的经纬度坐标 - *@param view 指定相对的View - *@return 转换后的View坐标 - */ -- (CGPoint)convertCoordinate:(CLLocationCoordinate2D)coordinate toPointToView:(UIView *)view; - -/** - *将View坐标转换成经纬度坐标 - *@param point 待转换的View坐标 - *@param view point坐标所在的view - *@return 转换后的经纬度坐标 - */ -- (CLLocationCoordinate2D)convertPoint:(CGPoint)point toCoordinateFromView:(UIView *)view; - -/** - *将经纬度矩形区域转换为View矩形区域 - *@param region 待转换的经纬度矩形 - *@param view 指定相对的View - *@return 转换后的View矩形区域 - */ -- (CGRect)convertRegion:(BMKCoordinateRegion)region toRectToView:(UIView *)view; - -/** - *将View矩形区域转换成经纬度矩形区域 - *@param rect 待转换的View矩形区域 - *@param view rect坐标所在的view - *@return 转换后的经纬度矩形区域 - */ -- (BMKCoordinateRegion)convertRect:(CGRect)rect toRegionFromView:(UIView *)view; - -/** - *将直角地理坐标矩形区域转换为View矩形区域 - *@param mapRect 待转换的直角地理坐标矩形 - *@param view 指定相对的View - *@return 转换后的View矩形区域 - */ -- (CGRect)convertMapRect:(BMKMapRect)mapRect toRectToView:(UIView *)view; - -/** - *将View矩形区域转换成直角地理坐标矩形区域 - *@param rect 待转换的View矩形区域 - *@param view rect坐标所在的view - *@return 转换后的直角地理坐标矩形区域 - */ -- (BMKMapRect)convertRect:(CGRect)rect toMapRectFromView:(UIView *)view; - -/** - *将BMKMapPoint转换为opengles可以直接使用的坐标 - @param mapPoint BMKMapPoint坐标 - @return opengles 直接支持的坐标 - */ -- (CGPoint)glPointForMapPoint:(BMKMapPoint)mapPoint; - -/** - *批量将BMKMapPoint转换为opengles可以直接使用的坐标 - @param mapPoints BMKMapPoint坐标数据指针 - @param count 个数,count不能大于数组长度 - @return opengles 直接支持的坐标数据指针(需要调用者手动释放) - */ -- (CGPoint *)glPointsForMapPoints:(BMKMapPoint *)mapPoints count:(NSUInteger)count; - -/** - * 设置地图中心点在地图中的屏幕坐标位置 - * @param ptInScreen 要设定的地图中心点位置,为屏幕坐标,设置的中心点不能超过屏幕范围,否则无效 - */ -- (void)setMapCenterToScreenPt:(CGPoint)ptInScreen; - -/** - * 获取地图状态 - *@return 返回地图状态信息 - */ -- (BMKMapStatus*)getMapStatus; - -/** - * 设置地图状态 - * @param [in] mapStatus 地图状态信息 - */ -- (void)setMapStatus:(BMKMapStatus*)mapStatus; - -/** - * 设置地图状态 - * @param [in] mapStatus 地图状态信息 - * @param [in] bAnimation 是否需要动画效果,true:需要做动画 - */ -- (void)setMapStatus:(BMKMapStatus*)mapStatus withAnimation:(BOOL)bAnimation; - -/** - * 设置地图状态 - * @param [in] mapStatus 地图状态信息 - * @param [in] bAnimation 是否需要动画效果,true:需要做动画 - * @param [in] ulDuration 指定动画时间,单位:ms - */ -- (void)setMapStatus:(BMKMapStatus*)mapStatus withAnimation:(BOOL)bAnimation withAnimationTime:(int)ulDuration; - -/** - * 判断当前图区是否支持百度热力图(百度自有数据) - * @return 支持返回YES,否则返回NO - */ -- (BOOL)isSurpportBaiduHeatMap; - -@end - -@interface BMKMapView (IndoorMapAPI) - -/// 设定地图是否显示室内图(包含室内图标注),默认不显示 -@property (nonatomic, assign) BOOL baseIndoorMapEnabled; - -/// 设定室内图标注是否显示,默认YES,仅当显示室内图(baseIndoorMapEnabled为YES)时生效 -@property (nonatomic, assign) BOOL showIndoorMapPoi; - -/** - * 设置室内图楼层 - * @param strFloor 楼层 - * @param strID 室内图ID - * @return 切换结果 - */ -- (BMKSwitchIndoorFloorError)switchBaseIndoorMapFloor:(NSString*)strFloor withID:(NSString*)strID; - -/** - * 获取当前聚焦的室内图信息 - * @return 当前聚焦的室内图信息。没有聚焦的室内图,返回nil - */ -- (BMKBaseIndoorMapInfo*)getFocusedBaseIndoorMapInfo; - -@end - -@interface BMKMapView (LocationViewAPI) - -/// 设定是否显示定位图层 -@property (nonatomic) BOOL showsUserLocation; - -/// 设定定位模式,取值为:BMKUserTrackingMode -@property (nonatomic) BMKUserTrackingMode userTrackingMode; - -/// 返回定位坐标点是否在当前地图可视区域内 -@property (nonatomic, readonly, getter=isUserLocationVisible) BOOL userLocationVisible; - -/** - *动态定制我的位置样式 - * @param [in] locationViewDisplayParam 样式参数 - */ -- (void)updateLocationViewWithParam:(BMKLocationViewDisplayParam*)locationViewDisplayParam; - -/** - *动态更新我的位置数据 - * @param [in] userLocation 定位数据 - */ --(void)updateLocationData:(BMKUserLocation*)userLocation; -@end - -@interface BMKMapView (AnnotationAPI) - -/// 当前地图View的已经添加的标注数组 -@property (nonatomic, readonly) NSArray *annotations; - -//设定是否总让选中的annotaion置于最前面 -@property (nonatomic, assign) BOOL isSelectedAnnotationViewFront; - -/** - *向地图窗口添加标注,需要实现BMKMapViewDelegate的-mapView:viewForAnnotation:函数来生成标注对应的View - *@param annotation 要添加的标注 - */ -- (void)addAnnotation:(id )annotation; - -/** - *向地图窗口添加一组标注,需要实现BMKMapViewDelegate的-mapView:viewForAnnotation:函数来生成标注对应的View - *@param annotations 要添加的标注数组 - */ -- (void)addAnnotations:(NSArray *)annotations; - -/** - *移除标注 - *@param annotation 要移除的标注 - */ -- (void)removeAnnotation:(id )annotation; - -/** - *移除一组标注 - *@param annotation 要移除的标注数组 - */ -- (void)removeAnnotations:(NSArray *)annotations; - -/** - *查找指定标注对应的View,如果该标注尚未显示,返回nil - *@param annotation 指定的标注 - *@return 指定标注对应的View - */ -- (BMKAnnotationView *)viewForAnnotation:(id )annotation; - -/** - *根据指定标识查找一个可被复用的标注View,一般在delegate中使用,用此函数来代替新申请一个View - *@param identifier 指定标识 - *@return 返回可被复用的标注View - */ -- (BMKAnnotationView *)dequeueReusableAnnotationViewWithIdentifier:(NSString *)identifier; - -/** - *选中指定的标注,本版暂不支持animate效果 - *@param annotation 指定的标注 - *@param animated 本版暂不支持 - */ -- (void)selectAnnotation:(id )annotation animated:(BOOL)animated; - -/** - *取消指定的标注的选中状态,本版暂不支持animate效果 - *@param annotation 指定的标注 - *@param animated 本版暂不支持 - */ -- (void)deselectAnnotation:(id )annotation animated:(BOOL)animated; - -/** - *设置地图使显示区域显示所有annotations,如果数组中只有一个则直接设置地图中心为annotation的位置 - *@param annotations 指定的标注 - *@param animated 是否启动动画 - */ -- (void)showAnnotations:(NSArray *)annotations animated:(BOOL)animated; - -/** - *获取矩形区域内的所有annotations - *@param bounds 矩形区域(经纬度) - *@return 该矩形区域内的所有annotations - */ -- (NSArray *)annotationsInCoordinateBounds:(BMKCoordinateBounds) bounds; - -@end -///地图View类(和Overlay操作相关的接口) -@interface BMKMapView (OverlaysAPI) - -/** - *向地图窗口添加Overlay,需要实现BMKMapViewDelegate的-mapView:viewForOverlay:函数来生成标注对应的View - *@param overlay 要添加的overlay - */ -- (void)addOverlay:(id )overlay; - -/** - *向地图窗口添加一组Overlay,需要实现BMKMapViewDelegate的-mapView:viewForOverlay:函数来生成标注对应的View - *@param overlays 要添加的overlay数组 - */ -- (void)addOverlays:(NSArray *)overlays; - -/** - *移除Overlay - *@param overlay 要移除的overlay - */ -- (void)removeOverlay:(id )overlay; - -/** - *移除一组Overlay - *@param overlays 要移除的overlay数组 - */ -- (void)removeOverlays:(NSArray *)overlays; - -/** - *在指定的索引处添加一个Overlay - *@param overlay 要添加的overlay - *@param index 指定的索引 - */ -- (void)insertOverlay:(id )overlay atIndex:(NSUInteger)index; - -/** - *在交换指定索引处的Overlay - *@param index1 索引1 - *@param index2 索引2 - */ -- (void)exchangeOverlayAtIndex:(NSUInteger)index1 withOverlayAtIndex:(NSUInteger)index2; - -/** - *在指定的Overlay之上插入一个overlay - *@param overlay 带添加的Overlay - *@param sibling 用于指定相对位置的Overlay - */ -- (void)insertOverlay:(id )overlay aboveOverlay:(id )sibling; - -/** - *在指定的Overlay之下插入一个overlay - *@param overlay 带添加的Overlay - *@param sibling 用于指定相对位置的Overlay - */ -- (void)insertOverlay:(id )overlay belowOverlay:(id )sibling; - -/// 当前mapView中已经添加的Overlay数组 -@property (nonatomic, readonly) NSArray *overlays; - -/** - *查找指定overlay对应的View,如果该View尚未创建,返回nil - *@param overlay 指定的overlay - *@return 指定overlay对应的View - */ -- (BMKOverlayView *)viewForOverlay:(id )overlay; - -@end -@interface BMKMapView (HeatMapAPI) - -/** - *添加热力图 - * @param [BMKHeatMap*] heatMap 热力图绘制和显示数据 - */ -- (void)addHeatMap:(BMKHeatMap*)heatMap; - -/** - *移除热力图 - */ -- (void)removeHeatMap; - -@end - -/// MapView的Delegate,mapView通过此类来通知用户对应的事件 -@protocol BMKMapViewDelegate -@optional - -/** - *地图初始化完毕时会调用此接口 - *@param mapview 地图View - */ -- (void)mapViewDidFinishLoading:(BMKMapView *)mapView; - -/** - *地图渲染完毕后会调用此接口 - *@param mapview 地图View - */ -- (void)mapViewDidFinishRendering:(BMKMapView *)mapView; - -/** - *地图渲染每一帧画面过程中,以及每次需要重绘地图时(例如添加覆盖物)都会调用此接口 - *@param mapview 地图View - *@param status 此时地图的状态 - */ -- (void)mapView:(BMKMapView *)mapView onDrawMapFrame:(BMKMapStatus*)status; - -/** - *地图区域即将改变时会调用此接口 - *@param mapview 地图View - *@param animated 是否动画 - */ -- (void)mapView:(BMKMapView *)mapView regionWillChangeAnimated:(BOOL)animated; - -/** - *地图区域改变完成后会调用此接口 - *@param mapview 地图View - *@param animated 是否动画 - */ -- (void)mapView:(BMKMapView *)mapView regionDidChangeAnimated:(BOOL)animated; - -/** - *根据anntation生成对应的View - *@param mapView 地图View - *@param annotation 指定的标注 - *@return 生成的标注View - */ -- (BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id )annotation; - -/** - *当mapView新添加annotation views时,调用此接口 - *@param mapView 地图View - *@param views 新添加的annotation views - */ -- (void)mapView:(BMKMapView *)mapView didAddAnnotationViews:(NSArray *)views; - -/** - *当选中一个annotation views时,调用此接口 - *@param mapView 地图View - *@param views 选中的annotation views - */ -- (void)mapView:(BMKMapView *)mapView didSelectAnnotationView:(BMKAnnotationView *)view; - -/** - *当取消选中一个annotation views时,调用此接口 - *@param mapView 地图View - *@param views 取消选中的annotation views - */ -- (void)mapView:(BMKMapView *)mapView didDeselectAnnotationView:(BMKAnnotationView *)view; - -/** - *拖动annotation view时,若view的状态发生变化,会调用此函数。ios3.2以后支持 - *@param mapView 地图View - *@param view annotation view - *@param newState 新状态 - *@param oldState 旧状态 - */ -- (void)mapView:(BMKMapView *)mapView annotationView:(BMKAnnotationView *)view didChangeDragState:(BMKAnnotationViewDragState)newState - fromOldState:(BMKAnnotationViewDragState)oldState; - -/** - *当点击annotation view弹出的泡泡时,调用此接口 - *@param mapView 地图View - *@param view 泡泡所属的annotation view - */ -- (void)mapView:(BMKMapView *)mapView annotationViewForBubble:(BMKAnnotationView *)view; - -/** - *根据overlay生成对应的View - *@param mapView 地图View - *@param overlay 指定的overlay - *@return 生成的覆盖物View - */ -- (BMKOverlayView *)mapView:(BMKMapView *)mapView viewForOverlay:(id )overlay; - -/** - *当mapView新添加overlay views时,调用此接口 - *@param mapView 地图View - *@param overlayViews 新添加的overlay views - */ -- (void)mapView:(BMKMapView *)mapView didAddOverlayViews:(NSArray *)overlayViews; - -/** - *点中覆盖物后会回调此接口,目前只支持点中BMKPolylineView时回调 - *@param mapview 地图View - *@param overlayView 覆盖物view信息 - */ -- (void)mapView:(BMKMapView *)mapView onClickedBMKOverlayView:(BMKOverlayView *)overlayView; - -/** - *点中底图标注后会回调此接口 - *@param mapview 地图View - *@param mapPoi 标注点信息 - */ -- (void)mapView:(BMKMapView *)mapView onClickedMapPoi:(BMKMapPoi*)mapPoi; - -/** - *点中底图空白处会回调此接口 - *@param mapview 地图View - *@param coordinate 空白处坐标点的经纬度 - */ -- (void)mapView:(BMKMapView *)mapView onClickedMapBlank:(CLLocationCoordinate2D)coordinate; - -/** - *双击地图时会回调此接口 - *@param mapview 地图View - *@param coordinate 返回双击处坐标点的经纬度 - */ -- (void)mapview:(BMKMapView *)mapView onDoubleClick:(CLLocationCoordinate2D)coordinate; - -/** - *长按地图时会回调此接口 - *@param mapview 地图View - *@param coordinate 返回长按事件坐标点的经纬度 - */ -- (void)mapview:(BMKMapView *)mapView onLongClick:(CLLocationCoordinate2D)coordinate; - -/** - *3DTouch 按地图时会回调此接口(仅在支持3D Touch,且fouchTouchEnabled属性为YES时,会回调此接口) - *@param mapview 地图View - *@param coordinate 触摸点的经纬度 - *@param force 触摸该点的力度(参考UITouch的force属性) - *@param maximumPossibleForce 当前输入机制下的最大可能力度(参考UITouch的maximumPossibleForce属性) - */ -- (void)mapview:(BMKMapView *)mapView onForceTouch:(CLLocationCoordinate2D)coordinate force:(CGFloat)force maximumPossibleForce:(CGFloat)maximumPossibleForce; - -/** - *地图状态改变完成后会调用此接口 - *@param mapview 地图View - */ -- (void)mapStatusDidChanged:(BMKMapView *)mapView; - -/** - *地图进入/移出室内图会调用此接口 - *@param mapview 地图View - *@param flag YES:进入室内图; NO:移出室内图 - *@param info 室内图信息 - */ -- (void)mapview:(BMKMapView *)mapView baseIndoorMapWithIn:(BOOL)flag baseIndoorMapInfo:(BMKBaseIndoorMapInfo *)info; - -@end \ No newline at end of file diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKMultiPoint.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKMultiPoint.h deleted file mode 100644 index ec27735..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKMultiPoint.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * BMKMultiPoint.h - * BMapKit - * - * Copyright 2011 Baidu Inc. All rights reserved. - * - */ - -#import -#import -#import "BMKShape.h" - -/// 该类定义多个点,是个由多个点组成的虚基类, 不能直接实例化对象, 要使用其子类BMKPolyline,BMKPolygon来实例化 -@interface BMKMultiPoint : BMKShape { -@package - BMKMapPoint *_points; - NSUInteger _pointCount; - - BMKMapRect _boundingRect; -} - -/// 坐标点数组 -@property (nonatomic, readonly) BMKMapPoint *points; - -/// 坐标点的个数 -@property (nonatomic, readonly) NSUInteger pointCount; - -/** - *将内部的直角坐标数据转换为经纬度坐标点数据,并拷贝到指定的数组中 - *@param coords 经纬度坐标数组,转换后的坐标将存储到该数组中,该数组长度必须大于等于要拷贝的坐标点的个数(range.length) - *@param range 指定要拷贝的数据段 - */ -- (void)getCoordinates:(CLLocationCoordinate2D *)coords range:(NSRange)range; - -@end diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKOfflineMap.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKOfflineMap.h deleted file mode 100644 index ba89c93..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKOfflineMap.h +++ /dev/null @@ -1,114 +0,0 @@ -/* - * BMKOfflineMap.h - * BMapKit - * - * Copyright 2011 Baidu Inc. All rights reserved. - * - */ - -#import -#import "BMKOfflineMapType.h" - - -@protocol BMKOfflineMapDelegate; - -///离线地图事件类型 -enum { - TYPE_OFFLINE_UPDATE = 0, ///<下载或更新 - TYPE_OFFLINE_ZIPCNT = 1, ///<检测到的压缩包个数 - TYPE_OFFLINE_UNZIP = 2, ///<当前解压的离线包 - TYPE_OFFLINE_ERRZIP = 3, ///<错误的离线包 - TYPE_OFFLINE_NEWVER = 4, ///<有新版本 - TYPE_OFFLINE_UNZIPFINISH = 5, ///<扫描完毕 - TYPE_OFFLINE_ADD = 6 ///<新增离线包 -}; - -///离线地图服务 -@interface BMKOfflineMap : NSObject - -@property (nonatomic, weak) id delegate; - - - -/** - *自2.9.0起废弃,不支持扫描导入离线包 - *扫描离线地图压缩包,异步函数 - *@return 成功返回YES,否则返回NO - */ -- (BOOL)scan:(BOOL)deleteFailedr __deprecated_msg("废弃方法(空实现),自2.9.0起废弃,不支持扫描导入离线包"); - -/** - *启动下载指定城市id的离线地图 - *@param cityID 指定的城市id - *@return 成功返回YES,否则返回NO - */ -- (BOOL)start:(int)cityID; - -/** - *启动更新指定城市id的离线地图 - *@param cityID 指定的城市id - *@return 成功返回YES,否则返回NO - */ -- (BOOL)update:(int)cityID; - -/** - *暂停下载指定城市id的离线地图 - *@param cityID 指定的城市id - *@return 成功返回YES,否则返回NO - */ -- (BOOL)pause:(int)cityID; - -/** - *删除下载指定城市id的离线地图 - *@param cityID 指定的城市id - *@return 成功返回YES,否则返回NO - */ -- (BOOL)remove:(int)cityID; - -/** - *返回热门城市列表 - *@return 热门城市列表,用户需要显示释放该数组,数组元素为BMKOLSearchRecord - */ -- (NSArray*)getHotCityList; - -/** - *返回所有支持离线地图的城市列表 - *@return 支持离线地图的城市列表,用户需要显示释放该数组,数组元素为BMKOLSearchRecord - */ -- (NSArray*)getOfflineCityList; - -/** - *根据城市名搜索该城市离线地图记录 - *@param cityName 城市名 - *@return 该城市离线地图记录,用户需要显示释放该数组,数组元素为BMKOLSearchRecord - */ -- (NSArray*)searchCity:(NSString*)cityName; - -/** - *返回各城市离线地图更新信息 - *@return 各城市离线地图更新信息,用户需要显示释放该数组,数组元素为BMKOLUpdateElement - */ -- (NSArray*)getAllUpdateInfo; - -/** - *返回指定城市id离线地图更新信息 - *@param cityID 指定的城市id - *@return 指定城市id离线地图更新信息 - */ -- (BMKOLUpdateElement*)getUpdateInfo:(int)cityID; - -@end - - -///离线地图delegate,用于获取通知 -@protocol BMKOfflineMapDelegate -/** - *返回通知结果 - *@param type 事件类型: TYPE_OFFLINE_UPDATE,TYPE_OFFLINE_ZIPCNT,TYPE_OFFLINE_UNZIP, TYPE_OFFLINE_ERRZIP, TYPE_VER_UPDATE, TYPE_OFFLINE_UNZIPFINISH, TYPE_OFFLINE_ADD - *@param state 事件状态,当type为TYPE_OFFLINE_UPDATE时,表示正在下载或更新城市id为state的离线包,当type为TYPE_OFFLINE_ZIPCNT时,表示检测到state个离线压缩包,当type为TYPE_OFFLINE_ADD时,表示新安装的离线地图数目,当type为TYPE_OFFLINE_UNZIP时,表示正在解压第state个离线包,当type为TYPE_OFFLINE_ERRZIP时,表示有state个错误包,当type为TYPE_VER_UPDATE时,表示id为state的城市离线包有更新,当type为TYPE_OFFLINE_UNZIPFINISH时,表示扫瞄完成,成功导入state个离线包 - */ -- (void)onGetOfflineMapState:(int)type withState:(int)state; - -@end - - diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKOfflineMapType.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKOfflineMapType.h deleted file mode 100644 index 2ce1b0c..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKOfflineMapType.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * BMKOffineMapType.h - * BMapKit - * - * Copyright 2011 Baidu Inc. All rights reserved. - * - */ - -#import -#import - -///离线地图搜索城市记录结构 -@interface BMKOLSearchRecord : NSObject -{ - NSString* _cityName; - int _size; - int _cityID; - int _cityType; - NSArray* _childCities; -} -///城市名称 -@property (nonatomic, strong) NSString* cityName; -///数据包总大小 -@property (nonatomic) int size; -///城市ID -@property (nonatomic) int cityID; -///城市类型 0:全国;1:省份;2:城市;如果是省份,可以通过childCities得到子城市列表 -@property (nonatomic) int cityType; -///子城市列表 -@property (nonatomic, strong) NSArray* childCities; - - -@end - - -///离线地图更新信息 -@interface BMKOLUpdateElement : NSObject -{ - NSString* _cityName; - int _cityID; - int _size; - int _serversize; - BOOL _update; - int _ratio; - int _status; - CLLocationCoordinate2D _pt; -} -///城市名称 -@property (nonatomic, strong) NSString* cityName; -///城市ID -@property (nonatomic) int cityID; -///已下载数据大小,单位:字节 -@property (nonatomic) int size; -///服务端数据大小,当update为YES时有效,单位:字节 -@property (nonatomic) int serversize; -///下载比率,100为下载完成,下载完成后会自动导入,status为4时离线包导入完成 -@property (nonatomic) int ratio; -///下载状态, -1:未定义 1:正在下载 2:等待下载 3:已暂停 4:完成 5:校验失败 6:网络异常 7:读写异常 8:Wifi网络异常 9:离线包数据格式异常,需重新下载离线包 10:离线包导入中 -@property (nonatomic) int status; -///更新状态,离线包是否有更新(有更新需重新下载) -@property (nonatomic) BOOL update; -///城市中心点 -@property (nonatomic) CLLocationCoordinate2D pt; - -@end - diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKOverlay.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKOverlay.h deleted file mode 100644 index 588b9b0..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKOverlay.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * BMKOverlay.h - * BMapKit - * - * Copyright 2011 Baidu Inc. All rights reserved. - * - */ - -#import "BMKAnnotation.h" -#import - -/// 该类是地图覆盖物的基类,所有地图的覆盖物需要继承自此类 -@protocol BMKOverlay -@required - -/// 返回区域中心坐标. -@property (nonatomic, readonly) CLLocationCoordinate2D coordinate; - -/// 返回区域外接矩形 -@property (nonatomic, readonly) BMKMapRect boundingMapRect; - -@optional -/** - *判断指定的矩形是否与本Overlay相交,用于更精确的控制overlay view的显示. - *默认使用BMKMapRectIntersectsRect([overlay boundingRect], mapRect)代替. - *@param mapRect 指定的BMKMapRect - *@return 如果相交返回YES,否则返回NO - */ -- (BOOL)intersectsMapRect:(BMKMapRect)mapRect; - -@end - diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKOverlayGLBasicView.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKOverlayGLBasicView.h deleted file mode 100644 index 359aec2..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKOverlayGLBasicView.h +++ /dev/null @@ -1,34 +0,0 @@ -/* -* BMKOverlayGLBasicView.h -* BMapKit -* -* Copyright 2011 Baidu Inc. All rights reserved. -* -*/ - -#import -#import "BMKOverlayView.h" - -/// 该类定义了一个用opengl绘制的OverlayView的基类,如果需要用gdi进行绘制请继承于BMKOverlayPathView类 -@interface BMKOverlayGLBasicView : BMKOverlayView { - -} - -/// 填充颜色 -/// 注:请使用 - (UIColor *)initWithRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha; 初始化UIColor,使用[UIColor ***Color]初始化时,个别case转换成RGB后会有问题 -@property (strong, nonatomic) UIColor *fillColor; -/// 画笔颜色 -/// 注:请使用 - (UIColor *)initWithRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha; 初始化UIColor,使用[UIColor ***Color]初始化时,个别case转换成RGB后会有问题 -@property (strong, nonatomic) UIColor *strokeColor; -/// 画笔宽度,默认为0 -@property (nonatomic) CGFloat lineWidth; -/// path对象 -@property CGPathRef path; -/// 是否为虚线样式,默认NO -@property (nonatomic) BOOL lineDash; -/// 是否纹理图片平铺绘制,默认NO -@property (assign, nonatomic) BOOL tileTexture; -/// 纹理图片是否缩放(tileTexture为YES时生效),默认NO -@property (assign, nonatomic) BOOL keepScale; - -@end diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKOverlayPathView.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKOverlayPathView.h deleted file mode 100644 index 3a6cf07..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKOverlayPathView.h +++ /dev/null @@ -1,88 +0,0 @@ -/* -* BMKOverlayPathView.h -* BMapKit -* -* Copyright 2011 Baidu Inc. All rights reserved. -* -*/ - -#import -#import "BMKOverlayView.h" - -/// 该类定义了一个基本的OverlayView -@interface BMKOverlayPathView : BMKOverlayView { -@package - UIColor *_fillColor; - UIColor *_strokeColor; - - CGFloat _lineWidth; - CGLineJoin _lineJoin; - CGLineCap _lineCap; - CGFloat _miterLimit; - CGFloat _lineDashPhase; - NSArray *_lineDashPattern; - - CGPathRef _path; -} - -/// 填充颜色 -@property (strong) UIColor *fillColor; -/// 画笔颜色 -@property (strong) UIColor *strokeColor; - -/// 画笔宽度,默认为0 -@property CGFloat lineWidth; -/// LineJoin,默认为kCGLineJoinRound -@property CGLineJoin lineJoin; -/// LineCap,默认为kCGLineCapRound -@property CGLineCap lineCap; -/// miterLimit,在样式为kCGLineJoinMiter时有效,默认为10 -@property CGFloat miterLimit; -/// lineDashPhase, 默认为0 -@property CGFloat lineDashPhase; -/// lineDashPattern,一个NSNumbers的数组,默认为nil -@property (copy) NSArray *lineDashPattern; - -/** - *生成要绘制的path,子类需要重写此函数,并且对path属性赋值:self.path = newPath; - */ -- (void)createPath; -/// path对象 -@property CGPathRef path; - -/** - *刷新path,调用该函数将会使已经缓存的path失效,将会重新调用createPath来生成新的path对象 - */ -- (void)invalidatePath; - - -/** - *应用画笔属性 - *@param context CGContext对象 - *@param zoomScale 当前的zoomScale - */ -- (void)applyStrokePropertiesToContext:(CGContextRef)context - atZoomScale:(BMKZoomScale)zoomScale; - -/** - *应用画刷属性 - *@param context CGContext对象 - *@param zoomScale 当前的zoomScale - */ -- (void)applyFillPropertiesToContext:(CGContextRef)context - atZoomScale:(BMKZoomScale)zoomScale; -/** - *绘制path - *@param path 要绘制的CGPath - *@param context CGContext对象 - */ -- (void)strokePath:(CGPathRef)path inContext:(CGContextRef)context; - -/** - *填充path - *@param path 要绘制的CGPath - *@param context CGContext对象 - */ -- (void)fillPath:(CGPathRef)path inContext:(CGContextRef)context; - -@end diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKOverlayView.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKOverlayView.h deleted file mode 100644 index c0c71d5..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKOverlayView.h +++ /dev/null @@ -1,207 +0,0 @@ -/* - * BMKOverlayView.h - * BMapKit - * - * Copyright 2011 Baidu Inc. All rights reserved. - * - */ -#import -#import "BMKOverlay.h" - -/// 该类是地图覆盖物View的基类,提供绘制overlay的接口但本身并无实现,所有地图覆盖物View需要继承自此类 -@interface BMKOverlayView : UIView -{ -@package - - - id _overlay; - BMKMapRect _boundingMapRect; - CGAffineTransform _mapTransform; - id _geometryDelegate; - id _canDrawCache; - BOOL keepScale; - CFTimeInterval _lastTile; - CFRunLoopTimerRef _scheduledScaleTimer; - - struct { - unsigned int keepAlive:1; - unsigned int levelCrossFade:1; - unsigned int drawingDisabled:1; - unsigned int usesTiledLayer:1; - } _flags; -//@private -// int geometrylayerID; -} -/// 设置该overlay的GeometryDelegate -- (void)setOverlayGeometryDelegate:(id)delegate; - -/** - *初始化并返回一个overlay view - *@param overlay 关联的overlay对象 - *@return 初始化成功则返回overlay view,否则返回nil - */ -- (id)initWithOverlay:(id )overlay; - -///关联的overlay对象 -@property (nonatomic, readonly) id overlay; - -/** - *将直角坐标转为overlay view坐标 - *@param mapPoint 直角坐标 - *@return 对应的view坐标 - */ -- (CGPoint)pointForMapPoint:(BMKMapPoint)mapPoint; - -/** - *将overlay view坐标转为直角坐标 - *@param point view坐标 - *@return 对应的直角坐标 - */ -- (BMKMapPoint)mapPointForPoint:(CGPoint)point; - -/** - *将二维地图投影矩形转为overlay view矩形 - *@param mapRect 二维地图投影矩形 - *@return 对应的view矩形 - */ -- (CGRect)rectForMapRect:(BMKMapRect)mapRect; - -/** - *将overlay view区域转为二维地图投影区域 - *@param rect 指定的view矩形 - *@return 对应的二维地图投影矩形 - */ -- (BMKMapRect)mapRectForRect:(CGRect)rect; - -/** - *判断ovlerlay view是否准备绘制内容 - *默认返回YES,如果用户设为NO,当需要绘制内容时要显示调用setNeedsDisplayInMapRect:zoomScale:方法 - *@param mapRect 需要更新的地图矩形区域 - *@param zoomScale 当前的缩放因子 - *@return 如果view准备好绘制内容,返回YES,否则返回NO - */ -- (BOOL)canDrawMapRect:(BMKMapRect)mapRect zoomScale:(BMKZoomScale)zoomScale; - -/** - *绘制overlay view内容 - *该方法默认不做任何事,子类需要重载该方法来绘制view的内容 - *@param mapRect 需要更新的地图矩形区域 - *@param zoomScale 当前的缩放因子 - *@param context 使用的graphics context - */ -- (void)drawMapRect:(BMKMapRect)mapRect zoomScale:(BMKZoomScale)zoomScale inContext:(CGContextRef)context; - -/** - *使view在给定矩形的区域无效,系统将重绘该区域 - *@param mapRect 需要更新的区域 - */ -- (void)setNeedsDisplayInMapRect:(BMKMapRect)mapRect; - -/** - *使用OpenGLES 绘制线 - @param points 直角坐标点 - @param pointCount 点个数 - @param strokeColor 线颜色 - @param lineWidth OpenGLES支持线宽尺寸 - @param looped 是否闭合, 如polyline会设置NO, polygon会设置YES. - */ -- (void)renderLinesWithPoints:(BMKMapPoint *)points pointCount:(NSUInteger)pointCount strokeColor:(UIColor *)strokeColor lineWidth:(CGFloat)lineWidth looped:(BOOL)looped; -/** - *使用OpenGLES 绘制线 - @param points 直角坐标点 - @param pointCount 点个数 - @param strokeColor 线颜色 - @param lineWidth OpenGLES支持线宽尺寸 - @param looped 是否闭合, 如polyline会设置NO, polygon会设置YES. - @param lineDash 是否虚线样式 - */ -- (void)renderLinesWithPoints:(BMKMapPoint *)points pointCount:(NSUInteger)pointCount strokeColor:(UIColor *)strokeColor lineWidth:(CGFloat)lineWidth looped:(BOOL)looped lineDash:(BOOL)lineDash; - -/** - *使用OpenGLES 按指定纹理绘制线 - @param points 直角坐标点 - @param pointCount 点个数 - @param lineWidth OpenGLES支持线宽尺寸 - @param textureID 纹理ID,使用- (void)loadStrokeTextureImage:(UIImage *)textureImage;加载 - @param looped 是否闭合, 如polyline会设置NO, polygon会设置YES. - */ -- (void)renderTexturedLinesWithPoints:(BMKMapPoint *)points pointCount:(NSUInteger)pointCount lineWidth:(CGFloat)lineWidth textureID:(GLuint)textureID looped:(BOOL)looped; - -/** - *使用OpenGLES 按指定纹理绘制线 - @param points 直角坐标点 - @param pointCount 点个数 - @param lineWidth OpenGLES支持线宽尺寸 - @param textureID 纹理ID,使用- (void)loadStrokeTextureImage:(UIImage *)textureImage;加载 - @param looped 是否闭合, 如polyline会设置NO, polygon会设置YES. - @param tileTexture 是否纹理图片平铺绘制 - @param keepScale 纹理图片是否缩放(tileTexture为YES时生效) - */ -- (void)renderTexturedLinesWithPoints:(BMKMapPoint *)points pointCount:(NSUInteger)pointCount lineWidth:(CGFloat)lineWidth textureID:(GLuint)textureID strokeColor:(UIColor *)strokeColor looped:(BOOL)looped tileTexture:(BOOL) tileTexture keepScale:(BOOL) keepScale; - -/** - *使用OpenGLES 分段纹理绘制线 - @param partPt 分段直角坐标点 - @param lineWidth OpenGLES支持线宽尺寸 - @param textureIndexs 分段纹理索引,使用- (void)loadStrokeTextureImage:(UIImage *)textureImage;加载 - @param isFoucs 是否使用分段纹理绘制 - */ --(void)renderTexturedLinesWithPartPoints:(NSArray*)partPt lineWidth:(CGFloat)lineWidth textureIndexs:(NSArray*)textureIndexs isFocus:(BOOL) isFoucs; - -/** - *使用OpenGLES 分段纹理绘制线/分段颜色绘制线 - @param partPt 分段直角坐标点 - @param lineWidth OpenGLES支持线宽尺寸 - @param textureIndexs 分段纹理索引,使用- (BOOL)loadStrokeTextureImages:(UIImage *)textureImage;加载 - @param isFoucs 是否使用分段纹理绘制 - @param tileTexture 是否纹理图片平铺绘制 - @param keepScale 纹理图片是否缩放(tileTexture为YES时生效) - */ --(void)renderTexturedLinesWithPartPoints:(NSArray*)partPt lineWidth:(CGFloat)lineWidth textureIndexs:(NSArray*)textureIndexs isFocus:(BOOL) isFoucs tileTexture:(BOOL) tileTexture keepScale:(BOOL) keepScale; - -/** - *使用OpenGLES 绘制区域 - @param points 直角坐标点 - @param pointCount 点个数 - @param fillColor 填充颜色 - @param usingTriangleFan YES对应GL_TRIANGLE_FAN, NO对应GL_TRIANGLES - */ -- (void)renderRegionWithPoints:(BMKMapPoint *)points pointCount:(NSUInteger)pointCount fillColor:(UIColor *)fillColor usingTriangleFan:(BOOL)usingTriangleFan; -/** - *使用OpenGLES 绘制区域(支持凹多边形) - @param points 直角坐标点 - @param pointCount 点个数 - @param fillColor 填充颜色 - @param usingTriangleFan YES对应GL_TRIANGLE_FAN, NO对应GL_TRIANGLES - */ -- (void)renderATRegionWithPoint:(BMKMapPoint *)points pointCount:(NSUInteger)pointCount fillColor:(UIColor *)fillColor usingTriangleFan:(BOOL)usingTriangleFan; - -/** - *绘制函数(子类需要重载来实现) - */ -- (void)glRender; - -///关联的纹理对象ID -@property (nonatomic, readonly) GLuint strokeTextureID; - -/** - *加载纹理图片 - @param textureImage 图片对象,opengl要求图片宽高必须是2的n次幂,如果图片对象为nil,则清空原有纹理 - @return openGL纹理ID, 若纹理加载失败返回0 - */ -- (GLuint)loadStrokeTextureImage:(UIImage *)textureImage; - -/** - *加载分段纹理绘制 所需的纹理图片 - @param textureImages 必须UIImage数组,opengl要求图片宽高必须是2的n次幂,否则,返回NO,无法分段纹理绘制 - @return 是否成功 - */ -- (BOOL)loadStrokeTextureImages:(NSArray *)textureImages; - -/// 使用分段颜色绘制时,必须设置(内容必须为UIColor) -/// 注:请使用 - (UIColor *)initWithRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha; 初始化UIColor。使用[UIColor ***Color]初始化时,个别case转换成RGB后会有问题 -@property (nonatomic, strong) NSArray *colors; - -@end - - diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKPinAnnotationView.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKPinAnnotationView.h deleted file mode 100644 index 153190c..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKPinAnnotationView.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - * BMKPinAnnotationView.h - * BMapKit - * - * Copyright 2011 Baidu Inc. All rights reserved. - * - */ - -#import "BMKAnnotationView.h" -enum { - BMKPinAnnotationColorRed = 0, - BMKPinAnnotationColorGreen, - BMKPinAnnotationColorPurple -}; -typedef NSUInteger BMKPinAnnotationColor; - -///提供类似大头针效果的annotation view -@interface BMKPinAnnotationView : BMKAnnotationView -{ -@private - BMKPinAnnotationColor _pinColor; - BOOL _animatesDrop; -} -///大头针的颜色,有BMKPinAnnotationColorRed, BMKPinAnnotationColorGreen, BMKPinAnnotationColorPurple三种 -@property (nonatomic) BMKPinAnnotationColor pinColor; -///动画效果 -@property (nonatomic) BOOL animatesDrop; - - -@end - diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKPointAnnotation.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKPointAnnotation.h deleted file mode 100644 index 7804709..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKPointAnnotation.h +++ /dev/null @@ -1,22 +0,0 @@ -/* - * BMKPointAnnotation.h - * BMapKit - * - * Copyright 2011 Baidu Inc. All rights reserved. - * - */ - - -#import -#import "BMKShape.h" -#import - -///表示一个点的annotation -@interface BMKPointAnnotation : BMKShape { - @package - CLLocationCoordinate2D _coordinate; -} -///该点的坐标 -@property (nonatomic, assign) CLLocationCoordinate2D coordinate; - -@end diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKPolygon.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKPolygon.h deleted file mode 100644 index 93d840b..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKPolygon.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * BMKPolygon.h - * BMapKit - * - * Copyright 2011 Baidu Inc. All rights reserved. - * - */ -#import - -#import "BMKMultiPoint.h" -#import "BMKOverlay.h" - -/// 此类用于定义一个多边形区域 -@interface BMKPolygon : BMKMultiPoint -/** - *根据多个点生成多边形 - *@param points 直角坐标点数组,这些点将被拷贝到生成的多边形对象中 - *@param count 点的个数 - *@return 新生成的多边形对象 - */ -+ (BMKPolygon *)polygonWithPoints:(BMKMapPoint *)points count:(NSUInteger)count; - -/** - *根据多个点生成多边形 - *@param coords 经纬度坐标点数组,这些点将被拷贝到生成的多边形对象中 - *@param count 点的个数 - *@return 新生成的多边形对象 - */ -+ (BMKPolygon *)polygonWithCoordinates:(CLLocationCoordinate2D *)coords count:(NSUInteger)count; - -/** - *重新设置多边形顶点 - *@param points 指定的直角坐标点数组 - *@param count 坐标点的个数 - *@return 是否设置成功 - */ -- (BOOL)setPolygonWithPoints:(BMKMapPoint *)points count:(NSInteger) count; - -/** - *重新设置多边形顶点 - *@param coords 指定的经纬度坐标点数组 - *@param count 坐标点的个数 - *@return 是否设置成功 - */ -- (BOOL)setPolygonWithCoordinates:(CLLocationCoordinate2D *)coords count:(NSInteger) count; - - -@end diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKPolygonView.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKPolygonView.h deleted file mode 100644 index 0151d91..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKPolygonView.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * BMKPolygonView.h - * BMapKit - * - * Copyright 2011 Baidu Inc. All rights reserved. - * - */ - -#import - -#import "BMKPolygon.h" -#import "BMKOverlayGLBasicView.h" - -/// 此类用于定义一个多边形View -@interface BMKPolygonView : BMKOverlayGLBasicView - -/** - *根据指定的多边形生成一个多边形View - *@param polygon 指定的多边形数据对象 - *@return 新生成的多边形View - */ -- (id)initWithPolygon:(BMKPolygon *)polygon; - -/// 该View对应的多边形数据 -@property (nonatomic, readonly) BMKPolygon *polygon; - -@end diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKPolyline.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKPolyline.h deleted file mode 100644 index 1c57e55..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKPolyline.h +++ /dev/null @@ -1,97 +0,0 @@ -/* - * BMKPolyline.h - * BMapKit - * - * Copyright 2011 Baidu Inc. All rights reserved. - * - */ - -#import "BMKMultiPoint.h" -#import "BMKOverlay.h" - -/// 此类用于定义一段折线 -@interface BMKPolyline : BMKMultiPoint - -/** - *根据指定坐标点生成一段折线 - *@param points 指定的直角坐标点数组 - *@param count 坐标点的个数 - *@return 新生成的折线对象 - */ -+ (BMKPolyline *)polylineWithPoints:(BMKMapPoint *)points count:(NSUInteger)count; - -/** - *根据指定坐标点生成一段折线 - *@param coords 指定的经纬度坐标点数组 - *@param count 坐标点的个数 - *@return 新生成的折线对象 - */ -+ (BMKPolyline *)polylineWithCoordinates:(CLLocationCoordinate2D *)coords count:(NSUInteger)count; - -/** - *重新设置折线坐标点 - *@param points 指定的直角坐标点数组 - *@param count 坐标点的个数 - *@return 是否设置成功 - */ -- (BOOL)setPolylineWithPoints:(BMKMapPoint *)points count:(NSInteger) count; - -/** - *重新设置折线坐标点 - *@param coords 指定的经纬度坐标点数组 - *@param count 坐标点的个数 - *@return 是否设置成功 - */ -- (BOOL)setPolylineWithCoordinates:(CLLocationCoordinate2D *)coords count:(NSInteger) count; - - -#pragma mark - 以下方法和属性只适用于分段纹理绘制和分段颜色绘制 - -///纹理索引数组(颜色索引数组) -@property (nonatomic, strong) NSArray *textureIndex; - -/** - *分段纹理绘制/分段颜色绘制,根据指定坐标点生成一段折线 - * - *分段纹理绘制:其对应的BMKPolylineView必须使用 - (BOOL)loadStrokeTextureImages:(NSArray *)textureImages; 加载纹理图片;否则使用默认的灰色纹理绘制 - *分段颜色绘制:其对应的BMKPolylineView必须设置colors属性 - * - *@param points 指定的直角坐标点数组 - *@param count 坐标点的个数 - *@param textureIndex 纹理索引数组(颜色索引数组),成员为NSNumber,且为非负数,负数按0处理 - *@return 新生成的折线对象 - */ -+ (BMKPolyline *)polylineWithPoints:(BMKMapPoint *)points count:(NSUInteger)count textureIndex:(NSArray*) textureIndex; - -/** - *根据指定坐标点生成一段折线 - * - *分段纹理绘制:其对应的BMKPolylineView必须使用 - (BOOL)loadStrokeTextureImages:(NSArray *)textureImages; 加载纹理图片;否则使用默认的灰色纹理绘制 - *分段颜色绘制:其对应的BMKPolylineView必须设置colors属性 - * - *@param coords 指定的经纬度坐标点数组 - *@param count 坐标点的个数 - *@param textureIndex 纹理索引数组(颜色索引数组),成员为NSNumber,且为非负数,负数按0处理 - *@return 新生成的折线对象 - */ -+ (BMKPolyline *)polylineWithCoordinates:(CLLocationCoordinate2D *)coords count:(NSUInteger)count textureIndex:(NSArray*) textureIndex; - -/** - *重新设置折线坐标点 和 纹理索引 - *@param points 指定的直角坐标点数组 - *@param count 坐标点的个数 - *@param textureIndex 纹理索引数组(颜色索引数组),成员为NSNumber,且为非负数,负数按0处理 - *@return 是否设置成功 - */ -- (BOOL)setPolylineWithPoints:(BMKMapPoint *)points count:(NSInteger) count textureIndex:(NSArray*) textureIndex; - -/** - *重新设置折线坐标点 - *@param coords 指定的经纬度坐标点数组 - *@param count 坐标点的个数 - *@param textureIndex 纹理索引数组(颜色索引数组),成员为NSNumber,且为非负数,负数按0处理 - *@return 是否设置成功 - */ -- (BOOL)setPolylineWithCoordinates:(CLLocationCoordinate2D *)coords count:(NSInteger) count textureIndex:(NSArray*) textureIndex; - -@end diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKPolylineView.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKPolylineView.h deleted file mode 100644 index cc898fb..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKPolylineView.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * BMKPolylineView.h - * BMapKit - * - * Copyright 2011 Baidu Inc. All rights reserved. - * - */ - -#import - -#import "BMKPolyline.h" -#import "BMKOverlayGLBasicView.h" - -/// 此类用于定义一个折线View -@interface BMKPolylineView : BMKOverlayGLBasicView - -/** - *根据指定的折线生成一个折线View - *@param polyline 指定的折线数据对象 - *@return 新生成的折线View - */ -- (id)initWithPolyline:(BMKPolyline *)polyline; - -/// 该View对应的折线数据对象 -@property (nonatomic, readonly) BMKPolyline *polyline; - - -#pragma mark - 以下方法和属性只适用于分段纹理绘制/分段颜色绘制 - -/// 是否分段纹理/分段颜色绘制(突出显示),默认YES,YES:使用分段纹理绘制 NO:使用默认的灰色纹理绘制 -@property (nonatomic, assign) BOOL isFocus; - -@end diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKShape.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKShape.h deleted file mode 100644 index 81d1be3..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKShape.h +++ /dev/null @@ -1,21 +0,0 @@ -/* - * BMKShape.h - * BMapKit - * - * Copyright 2011 Baidu Inc. All rights reserved. - * - */ - -#import -#import"BMKAnnotation.h" - -/// 该类为一个抽象类,定义了基于BMKAnnotation的BMKShape类的基本属性和行为,不能直接使用,必须子类化之后才能使用 -@interface BMKShape : NSObject { -} - -/// 要显示的标题 -@property (copy) NSString *title; -/// 要显示的副标题 -@property (copy) NSString *subtitle; - -@end diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKTileLayer.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKTileLayer.h deleted file mode 100644 index 0b13476..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKTileLayer.h +++ /dev/null @@ -1,84 +0,0 @@ -// -// BMKTileLayer.h -// MapComponent -// -// Created by wzy on 15/8/7. -// Copyright © 2015年 baidu. All rights reserved. -// - -#ifndef BMKTileLayer_h -#define BMKTileLayer_h -#import "BMKOverlay.h" - -/** - @brief 该类是覆盖在球面墨卡托投影上的图片tiles的数据源,是抽象类,不能直接使用该类添加瓦片图,需要使用其子类(BMKURLTileLayer或BMKSyncTileLayer) - *瓦片图片是jpeg或者png格式,size为256x256 - */ -@interface BMKTileLayer : NSObject - -/// tileLayer的可见最小Zoom值,默认3 -@property (nonatomic, assign) NSInteger minZoom; - -/// tileLayer的可见最大Zoom值,默认21,且不能小于minZoom -@property (nonatomic, assign) NSInteger maxZoom; - -/// tileOverlay的可渲染区域,默认世界范围 -@property (nonatomic) BMKMapRect visibleMapRect; - -@end - -/** - @brief 通过提供url模板的方法,提供数据源。不应该继承该类,且必须通过 initWithURLTemplate: 来初始化 - *瓦片图片是jpeg或者png格式,size为256x256 - */ -@interface BMKURLTileLayer : BMKTileLayer - -/// 同initWithURLTemplate:中的URLTemplate -@property (readonly) NSString *URLTemplate; - -/*! - @brief 根据指定的URLTemplate生成tileOverlay - @param URLTemplate是一个包含"{x}","{y}","{z}"的字符串,"{x}","{y}"表示tile的坐标,"{z}"表示当tile显示的级别。"{x}","{y}","{z}"会被tile的坐标值所替换,并生成用来加载tile图片数据的URL 。例如: http://server/path?x={x}&y={y}&z={z}。 - @return 以指定的URLTemplate字符串生成tileOverlay - */ -- (id)initWithURLTemplate:(NSString *)URLTemplate; - -/** - @brief 清除当前瓦片图层缓存图片 - */ -- (BOOL)cleanTileDataCache; - -@end - -/** - @brief 通过同步方法获取瓦片数据,是一个抽象类,需要通过继承该类,并重载 tileForX:y:zoom: 方法 - *瓦片图片是jpeg或者png格式,size为256x256 - */ -@interface BMKSyncTileLayer : BMKTileLayer - -/** - @brief 通过同步方法获取瓦片数据,子类必须实现该方法 - 这个方法会在多个线程中调用,需要考虑线程安全 - @param (x, y, zoom)瓦片坐标 - @return (x, y, zoom)所对应瓦片的UIImage对象 -*/ -- (UIImage *)tileForX:(NSInteger)x y:(NSInteger)y zoom:(NSInteger)zoom; - -@end - -/** - @brief 通过异步方法获取瓦片数据,是一个抽象类,需要通过继承该类,并重载 loadTileForX:y:zoom:result: 方法 - *瓦片图片是jpeg或者png格式,size为256x256 - */ -@interface BMKAsyncTileLayer : BMKTileLayer - -/** - @brief 通过异步方法获取瓦片数据,子类必须实现该方法 - @param (x, y, zoom)瓦片坐标 - @return result 用来传入瓦片数据或加载瓦片失败的error访问的回调block - */ -- (void)loadTileForX:(NSInteger)x y:(NSInteger)y zoom:(NSInteger)zoom result:(void (^)(UIImage *tileImage, NSError *error))result; - -@end - -#endif /* BMKTileLayer_h */ \ No newline at end of file diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKTileLayerView.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKTileLayerView.h deleted file mode 100644 index b4a8992..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Headers/BMKTileLayerView.h +++ /dev/null @@ -1,30 +0,0 @@ -// -// BMKTileLayerView.h -// MapComponent -// -// Created by wzy on 15/8/7. -// Copyright © 2015年 baidu. All rights reserved. -// - -#ifndef BMKTileLayerView_h -#define BMKTileLayerView_h - -#import "BMKOverlayView.h" -#import "BMKTileLayer.h" - -/// 该类用于定义一个BMKTileLayerView -@interface BMKTileLayerView : BMKOverlayView - -/** - *@brief 根据指定的tileLayer生成将tiles显示在地图上的View - *@param tileLayer 制定了覆盖图片,以及图片的覆盖区域 - *@return 以tileLayer新生成View - */ -- (id)initWithTileLayer:(BMKTileLayer*) tileLayer; - -/// 该View对应的tileLayer数据对象 -@property (nonatomic, readonly) BMKTileLayer *tileLayer; - -@end - -#endif /* BMKTileLayerView_h */ \ No newline at end of file diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/CustomIndex b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/CustomIndex deleted file mode 100644 index d3840ba..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/CustomIndex +++ /dev/null @@ -1 +0,0 @@ -{"land":[8,72,73,74,75,76,77,78,79,2000,2001,2003,2004,2005,2006,2763,20434,20435,20436,20437,61194],"green":[1536,1537,1538,1539,1540,1541,1542,1543,1544,1545,1546,1547,1548,1569,1550,1551,1552,1553,1554,1555,1556,2529,2530,2531,2532,2533,2534,2535,2536,2537,2538,2539,2540,2541,2542,2543,2544,2545,2546,2547,2548,2549,2550,2551,2552,2553,2554,2555,2556,2557,2558,20119,20120,20121,20122,20123,20124,20586,20587,20588,20589,20902,60006,60007,60290,61844,61845,61846,61847,61848,61849,61850,61851,61875,61876,61877,61878,61879,61880,61881,61882,61883,61884,61885,61886,61887,61888,61889,61890,61891,61892,61893,61894,61942,61943,61944,61945,61946,61947,61948,61949,61950,61951,61971,61972,61973,61974],"water":[1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,1515,1516,1517,1518,1519,1520,1521,1522,1523,1524,1525,1526,1527,1528,1529,1530,1531,1532,1533,1535,2395,2403,2509,2510,2511,2512,2513,2514,2515,2516,2517,2518,2519,2520,2521,2522,2523,2524,2525,2526,2527,2528,20582,20583,20584,20585,20752,20754,20756,20758,20760,20900,20901,21196,21197,21198,21199,21200,21208,21209,60001,60002,60003,60004,60005,60050,60051,60212],"building":[1605,1606,1607,1608,1609,2420,2765,2766,2767,2825,20590,20660,20763,20764,61735,61736,61737,61738,61739,61740,61838,61839,61840,61841,61842,61843,61895,61896,61897,61898,61899,61900,61901,61902,61903,61904,61905,61906,61907,61908,61909,61910,61911,61912,61913,61914,61915,61916,61917,61918,61965,61966,61967,61968,61969,61970],"manmade":[1557,1558,1559,1560,1561,1562,1563,1564,1565,1566,1567,1568,1549,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,1595,1596,1597,1598,1599,1600,1601,1602,1603,1604,2388,2389,2390,2391,2392,2929,2930,2931,2932,2933,2934,2935,2936,2937,2938,2939,2940,2941,2942,2943,20591,20592,20593,20594,20595,20596,20597,20598,20653,20753,20755,20757,20759,20761,20765,20891,20892,20893,20894,20903,20904,20905,20906,20907,20908,20909,60052,60053,60054,60055,60056,60057,60058,60059,60060,60061,60062,60063,60064,60065,60066,60067,60068,60069,60070,60071,60072,60073,60074,60075,60076,60077,60078,60079,60080,60081,60082,60083,60084,60085,60086,60087,60088,60089,60090,60091,60092,60093,60094,60095,60096,60097,60098,60099,60100,60101,60102,60103,60104,60105,60106,60107,60108,60109,60110,60111,60112,60113,60114,60115,60116,60117,60118,60119,60120,60121,60122,60123,60124,60125,60126,60127,60128,60129,60130,60131,60132,60133,60134,60135,60136,60137,60138,60139,60140,60145,60146,60147,60148,60149,60150,60151,60152,60153,60154,60155,60161,60172,60173,60174,60175,60176,60177,60178,60179,60180,60181,60182,60183,60184,60185,60186,60216,60237,60295,60297,60420,60863,60938,60948,60954,60956,60958,60960,60962,60964,60966,60968,60970,60972,60974,60976,60978,60980,60982,60984,60986,60988,60990,60992,60994,60996,60998,61000,61002,61004,61006,61008,61010,61012,61014,61016,61018,61020,61022,61024,61026,61028,61030,61032,61034,61036,61038,61040,61042,61044,61046,61048,61050,61052,61054,61056,61058,61060,61062,61064,61066,61068,61070,61072,61074,61076,61078,61080,61082,61084,61086,61088,61090,61092,61094,61096,61098,61100,61102,61104,61106,61174,61176,61178,61196,61266,61267,61268,61269,61270,61283,61822,61953,62023,62025,62027,62146,62147,62148,62149,62150,62151,62205,62439,62443,69986,69996,69999,70029,70031,70033,70035,70037,70039,70041,70043,70045,70047,70049,70051,70053,70055,70057,70059,70061,70103,70105,70107,70109,70111,70113,70115,70117,70119,70121,70123,70125,70127,70129,70131,70133,70135,70137,70139,70141,70143,70145,70147,70149,70151,70153,70155,70157,70159,70161,70163,70165,70167,70169,70171,70173,70175,70177,70179,70181,70183,70185,70187,70189,70191,70193,70195,70197,70199,70201,70203,70205,70207,70209,70211,70213,70215,70218,70220,70222,70224,70226,70228,70230,70232,70234,70236,70238,70240,70242,70244,70246,70248,70250,70252,70254,70257,70258,70260,70262,70264,70266,70268,70306,70308,70310,70312,70314,70316,70318,70320,70322,70324,70326,70328,70330,70332,70334,70336,70338,70340,70342,70344,70346,70348,70350,70352,70354,70356,70358,70360,70362,70364,70366,70368,70370,70372,70374,70376,70378,70380,70382,70384,70386,70388,70390,70392,70394,70396,70398,70400,70402,70404,70406,70408,70410,70412,70414,70416,70418,70420,70422,70424,70426,70428,70430,70432,70434,70436,70438,70440,70442,70444,70446,70448,70450,70452,70454,70456,70458,70460,70462,70464,70466,70468,70470,70472,70474,70533,70604,70606,70698,70700,70702,70704,70706,70708,70710,70712,70714,70716,70718,70720,70722,70724,70726,70728,70730,70732,70734,70736,70738,70740,70742,70744,70927,70930,70934,70937,70945,70949,70952,500001],"boundary":[6,56,57,58,59,60,61,62,64,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020,2021,2022,2393,2394,20417,20418,20419,20420,20421,20422,20423,20424,20425,20426,20427,20428,20429,20430,60287,60288,60289],"highway":[60559,60560,60561,60562,60563,60574,60575,60576,60577,60578,60584,60585,60586,60587,60588,60589,60590,60591,60592,60593,60594,60595,60596,60597,60598,60604,60605,60606,60607,60608,60609,60610,60611,60612,60613,60679,60680,60681,60682,60683,60694,60695,60696,60697,60698,60704,60705,60706,60707,60708,60709,60710,60711,60712,60713,60714,60715,60716,60717,60718,60724,60725,60726,60727,60728,60729,60730,60731,60732,60733,60799,60800,60801,60802,60803,60814,60815,60816,60817,60818,60824,60825,60826,60827,60828,60829,60830,60831,60832,60833,60834,60835,60836,60837,60838,60844,60845,60846,60847,60848,60849,60850,60851,60852,60853,60875,60876,60877,60878,60879,60880,60882,60883,60886,60887,60902,60903,60904,60905,60906,60907,60909,60910,60913,60914,61198,61201,61204,61207,61723,61725,61745,62202,62433,62434,62435],"arterial":[60524,60525,60526,60527,60528,60534,60535,60536,60537,60538,60544,60545,60546,60547,60548,60564,60565,60566,60567,60568,60579,60580,60581,60582,60583,60644,60645,60646,60647,60648,60654,60655,60656,60657,60658,60664,60665,60666,60667,60668,60684,60685,60686,60687,60688,60699,60700,60701,60702,60703,60764,60765,60766,60767,60768,60774,60775,60776,60777,60778,60784,60785,60786,60787,60788,60804,60805,60806,60807,60808,60819,60820,60821,60822,60823,60881,60884,60885,60891,60892,60908,60911,60912,60918,60919,61197,61199,61200,61202,61203,61205,61206,61248,62436],"local":[60499,60500,60501,60502,60503,60504,60505,60506,60507,60508,60509,60510,60511,60512,60513,60529,60530,60531,60532,60533,60539,60540,60541,60542,60543,60549,60550,60551,60552,60553,60619,60620,60621,60622,60623,60624,60625,60626,60627,60628,60629,60630,60631,60632,60633,60649,60650,60651,60652,60653,60659,60660,60661,60662,60663,60669,60670,60671,60672,60673,60739,60740,60741,60742,60743,60744,60745,60746,60747,60748,60749,60750,60751,60752,60753,60769,60770,60771,60772,60773,60779,60780,60781,60782,60783,60789,60790,60791,60792,60793,60889,60890,60894,60895,60896,60916,60917,60921,60922,60923,61229,61231,61726,61727,61728,61729,61730,61731,61732,61733,61734,61746,61747,61748,61749,61750,61751,61752,61753,61754,62437],"railway":[1801,1802,1803,1804,1805,1811,1812,1813,1814,1815,1817,1818,1819,1820,1821,1822,1823,1824,1825,20400,20402,20403,20404,20405,20406,70216,70517,70518,70519,70520],"subway":[1808,20002,20003,20004,20005,20006,20007,20008,20009,20010,20011,20012,20013,20014,20015,20016,20017,20018,20019,20020,20021,20022,20023,20024,20025,20026,20027,20028,20029,20030,20031,20032,20033,20034,20035,20036,20037,20038,20039,20040,20041,20042,20043,20044,20045,20046,20047,20048,20049,20050,20051,20052,20053,20054,20055,20056,20057,20058,20059,20060,20061,20062,20063,20064,20065,20066,20067,20068,20069,20070,20071,20072,20073,20074,20075,20076,20077,20078,20079,20080,20081,20082,20083,20084,20087,20088,20089,20090,20091,20092,20097,20098,20099,20101,20102,20103,20104,20105,20154,20157,20159,20283,20284,20285,20286,20287,20290,20304,20305,20306,20311,20312,20313,20537,20911,21205,21206,21207,21210,60156,60157,60158,60159,60160,60162,60163,60164,60165,60166,60167,60168,60169,60170,60171,60187,60188,60189,60190,60191,60192,60193,60194,60195,60196,60197,60236,60294,60296,60419,60862,60937,60947,60953,60955,60957,60959,60961,60963,60965,60967,60969,60971,60973,60975,60977,60979,60981,60983,60985,60987,60989,60991,60993,60995,60997,60999,61001,61003,61005,61007,61009,61011,61013,61015,61017,61019,61021,61023,61025,61027,61029,61031,61033,61035,61037,61039,61041,61043,61045,61047,61049,61051,61053,61055,61057,61059,61061,61063,61065,61067,61069,61071,61073,61075,61077,61079,61081,61083,61085,61087,61089,61091,61093,61095,61097,61099,61101,61103,61105,61173,61175,61177,61952,62024,62026,62028,62204,62438,69985,69997,69998,70028,70030,70032,70034,70036,70038,70040,70042,70044,70046,70048,70050,70052,70054,70056,70058,70060,70102,70104,70106,70108,70110,70112,70114,70116,70118,70120,70122,70124,70126,70128,70130,70132,70134,70136,70138,70140,70142,70144,70146,70148,70150,70152,70154,70156,70158,70160,70162,70164,70166,70168,70170,70172,70174,70176,70178,70180,70182,70184,70186,70188,70190,70192,70194,70196,70198,70200,70202,70204,70206,70208,70210,70212,70214,70217,70219,70221,70223,70225,70227,70229,70231,70233,70235,70237,70239,70241,70243,70245,70247,70249,70251,70253,70255,70256,70259,70261,70263,70265,70267,70269,70270,70271,70272,70273,70274,70305,70307,70309,70311,70313,70315,70317,70319,70321,70323,70325,70327,70329,70331,70333,70335,70337,70339,70341,70343,70345,70347,70349,70351,70353,70355,70357,70359,70361,70363,70365,70367,70369,70371,70373,70375,70377,70379,70381,70383,70385,70387,70389,70391,70393,70395,70397,70399,70401,70403,70405,70407,70409,70411,70413,70415,70417,70419,70421,70423,70425,70427,70429,70431,70433,70435,70437,70439,70441,70443,70445,70447,70449,70451,70453,70455,70457,70459,70461,70463,70465,70467,70469,70471,70473,70532,70603,70605,70697,70699,70701,70703,70705,70707,70709,70711,70713,70715,70717,70719,70721,70723,70725,70727,70729,70731,70733,70735,70737,70739,70741,70743,70749,70750,70751,70752,70753,70754,70755,70756,70757,70758,70759,70760,70761,70762,70763,70764,70765,70766,70767,70768,70769,70770,70771,70772,70773,70774,70775,70776,70777,70778,70779,70780,70781,70782,70783,70784,70785,70786,70787,70788,70789,70790,70791,70792,70793,70794,70795,70796,70797,70798,70799,70800,70801,70802,70803,70804,70805,70806,70807,70808,70809,70810,70811,70812,70813,70814,70815,70816,70817,70818,70819,70820,70821,70822,70823,70824,70825,70826,70827,70828,70829,70830,70831,70832,70833,70834,70835,70836,70837,70838,70839,70840,70841,70842,70843,70844,70845,70846,70847,70848,70849,70850,70851,70852,70853,70854,70855,70856,70857,70858,70859,70860,70861,70862,70863,70864,70865,70866,70867,70868,70869,70870,70871,70926,70928,70929,70931,70933,70935,70936,70938,70944,70946,70948,70950,70951,70953,500000],"districtlabel":[29,30,31,32,33,34,35,1602,2396,2397,2398,2399,2400,2401,2402,2404,2405],"roadlabel":[2596,2597,2598,2599,2600],"highwaylabel":[60814,60815,60816,60817,60818,60834,60835,60836,60837,60838,60844,60845,60846,60847,60848,60849,60850,60851,60852,60853],"arteriallabel":[60764,60766,60768,60774,60776,60778,60784,60786,60799,60800,60801,60802,60803,60804,60806,60819,60820,60821,60822,60823],"locallabel":[60629,60739,60741,60744,60746,60749,60751,60769,60771,60779,60781,60783],"poilabel":[0]} \ No newline at end of file diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/DVDirectory.cfg b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/DVDirectory.cfg deleted file mode 100644 index de8385c..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/DVDirectory.cfg +++ /dev/null @@ -1 +0,0 @@ -{"cities":[{"bb":-16777216,"bl":-16777216,"br":16777216,"bt":16777216,"c":[],"cl":0,"dom":1,"frc":1,"h":"qqgl","i":1,"its":1,"l":4,"n":"ȫ","p":"quanqiugailue","s":106979658,"v":434,"x":12128434,"y":4040943},{"4k":1,"bb":4757504,"bl":12849152,"br":13082624,"bt":4994048,"c":[],"cl":2,"dom":1,"frc":1,"h":"bj","i":131,"its":1,"l":12,"n":"","p":"beijing_131","s":69152442,"v":443,"x":12959247,"y":4825323},{"4k":1,"bb":3568640,"bl":13454336,"br":13582336,"bt":3724288,"c":[],"cl":2,"dom":1,"frc":1,"h":"sh","i":289,"its":1,"l":12,"n":"Ϻ","p":"shanghai_289","s":61844271,"v":443,"x":13523376,"y":3641154},{"4k":1,"bb":4631552,"bl":12992512,"br":13145088,"bt":4876288,"c":[],"cl":2,"dom":1,"frc":1,"h":"tj","i":332,"its":1,"l":12,"n":"","p":"tianjin_332","s":35781861,"v":443,"x":13049152,"y":4712625},{"4k":1,"bb":3249152,"bl":11720704,"br":12268544,"bt":3768320,"c":[],"cl":2,"dom":1,"frc":1,"h":"cq","i":132,"its":1,"l":12,"n":"","p":"chongqing_132","s":90845589,"v":443,"x":11862153,"y":3426984},{"bb":5217424,"bl":13988219,"br":14251713,"bt":5536780,"c":[{"4k":1,"bb":3676160,"bl":12990464,"br":13124608,"bt":3812352,"c":[],"cl":2,"dom":1,"frc":1,"h":"hf","i":127,"its":1,"l":12,"n":"Ϸ","p":"hefei_127","s":13158816,"v":443,"x":13050653,"y":3717732},{"4k":0,"bb":3453952,"bl":12887040,"br":13108224,"bt":3646464,"c":[],"cl":2,"dom":1,"frc":1,"h":"aq","i":130,"its":0,"l":13,"n":"","p":"anqing_130","s":8900222,"v":443,"x":13031629,"y":3550022},{"4k":0,"bb":3833856,"bl":12995584,"br":13145088,"bt":3939328,"c":[],"cl":2,"dom":1,"frc":1,"h":"bb","i":126,"its":0,"l":13,"n":"","p":"bengbu_126","s":3688754,"v":443,"x":13068586,"y":3861452},{"4k":0,"bb":3602432,"bl":13028352,"br":13193216,"bt":3748864,"c":[],"cl":2,"dom":1,"frc":1,"h":"ch","i":251,"its":0,"l":13,"n":"","p":"chaohu_251","s":7246694,"v":443,"x":13124245,"y":3692063},{"4k":0,"bb":3426304,"bl":12985344,"br":13151232,"bt":3592192,"c":[],"cl":2,"dom":1,"frc":1,"h":"cz","i":299,"its":0,"l":14,"n":"","p":"chizhou_299","s":3873964,"v":443,"x":13079942,"y":3568097},{"4k":0,"bb":3721216,"bl":13042688,"br":13274112,"bt":3901440,"c":[],"cl":2,"dom":1,"frc":1,"h":"cz","i":189,"its":0,"l":13,"n":"","p":"chuzhou_189","s":9299643,"v":443,"x":13171827,"y":3780782},{"4k":0,"bb":3793920,"bl":12788736,"br":12985344,"bt":3950592,"c":[],"cl":2,"dom":1,"frc":1,"h":"fy","i":128,"its":0,"l":13,"n":"","p":"fuyang_128","s":6606294,"v":443,"x":12893223,"y":3858087},{"4k":0,"bb":3853312,"bl":12862464,"br":13006848,"bt":4015104,"c":[],"cl":2,"dom":1,"frc":1,"h":"bz","i":188,"its":0,"l":13,"n":"","p":"bozhou_188","s":5090638,"v":443,"x":12889289,"y":3984735},{"4k":0,"bb":3908608,"bl":12957696,"br":13032448,"bt":4039680,"c":[],"cl":2,"dom":0,"frc":1,"h":"hb","i":253,"its":0,"l":13,"n":"","p":"huaibei_253","s":2242736,"v":443,"x":13002800,"y":3999428},{"4k":0,"bb":3790848,"bl":12953600,"br":13049856,"bt":3873792,"c":[],"cl":2,"dom":1,"frc":1,"h":"hn","i":250,"its":0,"l":13,"n":"","p":"huainan_250","s":2422626,"v":443,"x":13025208,"y":3823291},{"4k":0,"bb":3404800,"bl":13046784,"br":13237248,"bt":3549184,"c":[],"cl":2,"dom":1,"frc":1,"h":"hs","i":252,"its":0,"l":13,"n":"ɽ","p":"huangshan_252","s":4042449,"v":443,"x":13174304,"y":3446430},{"4k":0,"bb":3611648,"bl":12843008,"br":13053952,"bt":3828736,"c":[],"cl":2,"dom":1,"frc":1,"h":"la","i":298,"its":0,"l":13,"n":"","p":"luan_298","s":8997595,"v":443,"x":12972123,"y":3706631},{"4k":0,"bb":3648512,"bl":13177856,"br":13236224,"bt":3713024,"c":[],"cl":2,"dom":1,"frc":1,"h":"mas","i":358,"its":0,"l":13,"n":"ɽ","p":"maanshan_358","s":2399374,"v":443,"x":13192978,"y":3698259},{"4k":0,"bb":3908608,"bl":12931072,"br":13158400,"bt":4092928,"c":[],"cl":2,"dom":1,"frc":1,"h":"sz","i":370,"its":0,"l":13,"n":"","p":"suzhou_370","s":5650665,"v":443,"x":13021233,"y":3958277},{"4k":0,"bb":3534848,"bl":13052928,"br":13155328,"bt":3629056,"c":[],"cl":2,"dom":1,"frc":1,"h":"tl","i":337,"its":0,"l":14,"n":"ͭ","p":"tongling_337","s":1387299,"v":443,"x":13115671,"y":3604196},{"4k":0,"bb":3564544,"bl":13132800,"br":13218816,"bt":3680256,"c":[],"cl":2,"dom":1,"frc":1,"h":"wh","i":129,"its":0,"l":12,"n":"ߺ","p":"wuhu_129","s":5284372,"v":443,"x":13179438,"y":3655140},{"4k":0,"bb":3475456,"bl":13132800,"br":13320192,"bt":3651584,"c":[],"cl":2,"dom":1,"frc":1,"h":"xc","i":190,"its":0,"l":13,"n":"","p":"xuancheng_190","s":5867479,"v":443,"x":13221024,"y":3603637}],"cl":1,"dom":1,"frc":1,"h":"","i":5,"its":0,"l":12,"n":"ʡ","p":"","s":102400,"v":443,"x":14116241,"y":5386659},{"bb":5217424,"bl":13988219,"br":14251713,"bt":5536780,"c":[{"4k":1,"bb":2883584,"bl":13178880,"br":13419520,"bt":3060736,"c":[],"cl":2,"dom":1,"frc":1,"h":"fz","i":300,"its":1,"l":12,"n":"","p":"fuzhou_300","s":16951855,"v":443,"x":13280899,"y":2990069},{"4k":0,"bb":2781184,"bl":12897280,"br":13109248,"bt":2985984,"c":[],"cl":2,"dom":1,"frc":1,"h":"ly","i":193,"its":0,"l":13,"n":"","p":"longyan_193","s":6415326,"v":443,"x":13027156,"y":2867451},{"4k":0,"bb":3011584,"bl":13025280,"br":13279232,"bt":3269632,"c":[],"cl":2,"dom":1,"frc":1,"h":"np","i":133,"its":0,"l":13,"n":"ƽ","p":"nanping_133","s":6679632,"v":443,"x":13156359,"y":3060182},{"4k":0,"bb":3016704,"bl":13197312,"br":13443072,"bt":3189760,"c":[],"cl":2,"dom":1,"frc":1,"h":"nd","i":192,"its":0,"l":14,"n":"","p":"ningde_192","s":6782258,"v":443,"x":13306479,"y":3063299},{"4k":0,"bb":2850816,"bl":13186048,"br":13328384,"bt":2951168,"c":[],"cl":2,"dom":1,"frc":1,"h":"pt","i":195,"its":1,"l":13,"n":"","p":"putian_195","s":3563357,"v":443,"x":13248747,"y":2913812},{"4k":1,"bb":2772992,"bl":13088768,"br":13255680,"bt":2972672,"c":[],"cl":2,"dom":1,"frc":1,"h":"qz","i":134,"its":1,"l":12,"n":"Ȫ","p":"quanzhou_134","s":17531748,"v":443,"x":13201907,"y":2846933},{"4k":0,"bb":2916352,"bl":12955648,"br":13211648,"bt":3121152,"c":[],"cl":2,"dom":1,"frc":1,"h":"sm","i":254,"its":1,"l":14,"n":"","p":"sanming_254","s":6541815,"v":443,"x":13096406,"y":3013437},{"4k":1,"bb":2782208,"bl":13123584,"br":13188096,"bt":2847744,"c":[],"cl":2,"dom":1,"frc":1,"h":"xm","i":194,"its":1,"l":12,"n":"","p":"xiamen_194","s":7743635,"v":443,"x":13146519,"y":2794850},{"4k":0,"bb":2681856,"bl":13014016,"br":13164544,"bt":2882560,"c":[],"cl":2,"dom":1,"frc":1,"h":"zz","i":255,"its":0,"l":12,"n":"","p":"zhangzhou_255","s":7126977,"v":443,"x":13097306,"y":2798911}],"cl":1,"dom":1,"frc":1,"h":"","i":6,"its":0,"l":12,"n":"ʡ","p":"","s":102400,"v":443,"x":14116241,"y":5386659},{"bb":5217424,"bl":13988219,"br":14251713,"bt":5536780,"c":[{"4k":1,"bb":4216832,"bl":11421696,"br":11642880,"bt":4419584,"c":[],"cl":2,"dom":1,"frc":1,"h":"lz","i":36,"its":0,"l":12,"n":"","p":"lanzhou_36","s":8163542,"v":443,"x":11559619,"y":4284497},{"4k":0,"bb":4195328,"bl":11528192,"br":11748352,"bt":4503552,"c":[],"cl":2,"dom":1,"frc":1,"h":"by","i":35,"its":0,"l":13,"n":"","p":"baiyin_35","s":3546058,"v":443,"x":11593403,"y":4350997},{"4k":0,"bb":4021248,"bl":11517952,"br":11761664,"bt":4282368,"c":[],"cl":2,"dom":1,"frc":1,"h":"dx","i":136,"its":0,"l":13,"n":"","p":"dingxi_136","s":5311622,"v":443,"x":11647780,"y":4218809},{"4k":0,"bb":3886080,"bl":11216896,"br":11663360,"bt":4220928,"c":[],"cl":2,"dom":1,"frc":1,"h":"gnzzzz","i":247,"its":0,"l":14,"n":"ϲ","p":"gannanzangzuzizhi_247","s":4183732,"v":443,"x":11456859,"y":4137657},{"4k":0,"bb":4785152,"bl":10891264,"br":10969088,"bt":4836352,"c":[],"cl":2,"dom":1,"frc":1,"h":"jyg","i":33,"its":0,"l":13,"n":"","p":"jiayuguan_33","s":617584,"v":443,"x":10942391,"y":4806167},{"4k":0,"bb":4556800,"bl":11290624,"br":11438080,"bt":4696064,"c":[],"cl":2,"dom":1,"frc":1,"h":"jc","i":34,"its":0,"l":13,"n":"","p":"jinchang_34","s":1089403,"v":443,"x":11376391,"y":4627122},{"4k":0,"bb":4568064,"bl":10277888,"br":11155456,"bt":5253120,"c":[],"cl":2,"dom":1,"frc":1,"h":"jq","i":37,"its":0,"l":13,"n":"Ȫ","p":"jiuquan_37","s":5792715,"v":443,"x":10965137,"y":4800459},{"4k":0,"bb":4131840,"bl":11430912,"br":11563008,"bt":4305920,"c":[],"cl":2,"dom":1,"frc":1,"h":"lxhzzz","i":182,"its":0,"l":13,"n":"Ļ","p":"linxiahuizuzizhi_182","s":2589848,"v":443,"x":11490222,"y":4221634},{"4k":0,"bb":3818496,"bl":11580416,"br":11866112,"bt":4077568,"c":[],"cl":2,"dom":1,"frc":1,"h":"ln","i":256,"its":0,"l":14,"n":"¤","p":"longnan_256","s":5702272,"v":443,"x":11680713,"y":3925616},{"4k":0,"bb":4123648,"bl":11726848,"br":12008448,"bt":4242432,"c":[],"cl":2,"dom":1,"frc":1,"h":"pl","i":359,"its":0,"l":13,"n":"ƽ","p":"pingliang_359","s":4340120,"v":443,"x":11874773,"y":4213703},{"4k":0,"bb":4171776,"bl":11840512,"br":12103680,"bt":4436992,"c":[],"cl":2,"dom":1,"frc":1,"h":"qy","i":135,"its":0,"l":13,"n":"","p":"qingyang_135","s":6487911,"v":443,"x":11982430,"y":4240415},{"4k":0,"bb":4015104,"bl":11641856,"br":11880448,"bt":4164608,"c":[],"cl":2,"dom":1,"frc":1,"h":"ts","i":196,"its":0,"l":13,"n":"ˮ","p":"tianshui_196","s":4663281,"v":443,"x":11770086,"y":4083435},{"4k":0,"bb":4379648,"bl":11335680,"br":11601920,"bt":4761600,"c":[],"cl":2,"dom":1,"frc":1,"h":"ww","i":118,"its":0,"l":13,"n":"","p":"wuwei_118","s":3659392,"v":443,"x":11426460,"y":4543603},{"4k":0,"bb":4498432,"bl":10841088,"br":11379712,"bt":4823040,"c":[],"cl":2,"dom":1,"frc":1,"h":"zy","i":117,"its":0,"l":13,"n":"Ҵ","p":"zhangye_117","s":3804120,"v":443,"x":11182856,"y":4684860}],"cl":1,"dom":1,"frc":1,"h":"","i":7,"its":0,"l":12,"n":"ʡ","p":"","s":102400,"v":443,"x":14116241,"y":5386659},{"bb":5217424,"bl":13988219,"br":14251713,"bt":5536780,"c":[{"4k":1,"bb":2556928,"bl":12574720,"br":12698624,"bt":2728960,"c":[],"cl":2,"dom":1,"frc":1,"h":"gz","i":257,"its":1,"l":12,"n":"","p":"guangzhou_257","s":42496967,"v":443,"x":12609501,"y":2631394},{"4k":0,"bb":2666496,"bl":12954624,"br":13048832,"bt":2765824,"c":[],"cl":2,"dom":1,"frc":1,"h":"cz","i":201,"its":0,"l":13,"n":"","p":"chaozhou_201","s":2802636,"v":443,"x":12983270,"y":2695083},{"4k":1,"bb":2574336,"bl":12637184,"br":12721152,"bt":2633728,"c":[],"cl":2,"dom":1,"frc":1,"h":"dg","i":119,"its":1,"l":12,"n":"ݸ","p":"dongguan_119","s":29873868,"v":443,"x":12663623,"y":2618335},{"4k":0,"bb":2302976,"bl":12954624,"br":13057024,"bt":2381824,"c":[],"cl":2,"dom":0,"frc":1,"h":"dsq","i":120,"its":0,"l":13,"n":"ɳȺ","p":"dongshaqun_120","s":432139,"v":427,"x":12991306,"y":2333156},{"4k":1,"bb":2572288,"bl":12511232,"br":12623872,"bt":2684928,"c":[],"cl":2,"dom":1,"frc":1,"h":"fs","i":138,"its":1,"l":13,"n":"ɽ","p":"foshan_138","s":30580754,"v":443,"x":12593536,"y":2618504},{"4k":0,"bb":2634752,"bl":12718080,"br":12869632,"bt":2832384,"c":[],"cl":2,"dom":1,"frc":1,"h":"hy","i":200,"its":0,"l":12,"n":"Դ","p":"heyuan_200","s":6186912,"v":443,"x":12769274,"y":2705589},{"4k":1,"bb":2540544,"bl":12669952,"br":12850176,"bt":2732032,"c":[],"cl":2,"dom":1,"frc":1,"h":"hz","i":301,"its":0,"l":12,"n":"","p":"huizhou_301","s":14242236,"v":443,"x":12737682,"y":2629201},{"4k":0,"bb":2428928,"bl":12468224,"br":12609536,"bt":2598912,"c":[],"cl":2,"dom":1,"frc":1,"h":"jm","i":302,"its":0,"l":13,"n":"","p":"jiangmen_302","s":8332351,"v":443,"x":12589095,"y":2565316},{"4k":0,"bb":2596864,"bl":12870656,"br":12985344,"bt":2709504,"c":[],"cl":2,"dom":1,"frc":1,"h":"jy","i":259,"its":0,"l":13,"n":"","p":"jieyang_259","s":4497481,"v":443,"x":12955416,"y":2682139},{"4k":0,"bb":2416640,"bl":12281856,"br":12434432,"bt":2580480,"c":[],"cl":2,"dom":1,"frc":1,"h":"mm","i":139,"its":0,"l":13,"n":"ï","p":"maoming_139","s":6766607,"v":443,"x":12349003,"y":2455917},{"4k":0,"bb":2660352,"bl":12836864,"br":13019136,"bt":2850816,"c":[],"cl":2,"dom":1,"frc":1,"h":"mz","i":141,"its":0,"l":13,"n":"÷","p":"meizhou_141","s":7155681,"v":443,"x":12927581,"y":2771573},{"4k":0,"bb":2670592,"bl":12460032,"br":12682240,"bt":2883584,"c":[],"cl":2,"dom":1,"frc":1,"h":"qy","i":197,"its":0,"l":13,"n":"Զ","p":"qingyuan_197","s":7349626,"v":443,"x":12586210,"y":2698142},{"4k":0,"bb":2620416,"bl":12941312,"br":13066240,"bt":2694144,"c":[],"cl":2,"dom":1,"frc":1,"h":"st","i":303,"its":0,"l":13,"n":"ͷ","p":"shantou_303","s":4200545,"v":443,"x":12989872,"y":2658431},{"4k":0,"bb":2569216,"bl":12792832,"br":12940288,"bt":2673664,"c":[],"cl":2,"dom":1,"frc":1,"h":"sw","i":339,"its":0,"l":14,"n":"β","p":"shanwei_339","s":3078503,"v":443,"x":12844383,"y":2590120},{"4k":0,"bb":2722816,"bl":12563456,"br":12774400,"bt":2922496,"c":[],"cl":2,"dom":1,"frc":1,"h":"sg","i":137,"its":0,"l":13,"n":"ع","p":"shaoguan_137","s":7220623,"v":443,"x":12646452,"y":2835071},{"4k":1,"bb":2523136,"bl":12654592,"br":12764160,"bt":2598912,"c":[],"cl":2,"dom":1,"frc":1,"h":"sz","i":340,"its":1,"l":12,"n":"","p":"shenzhen_340","s":37223433,"v":443,"x":12697742,"y":2560988},{"4k":0,"bb":2432000,"bl":12388352,"br":12510208,"bt":2577408,"c":[],"cl":2,"dom":1,"frc":1,"h":"yj","i":199,"its":0,"l":14,"n":"","p":"yangjiang_199","s":4422830,"v":443,"x":12466699,"y":2479199},{"4k":0,"bb":2540544,"bl":12362752,"br":12527616,"bt":2655232,"c":[],"cl":2,"dom":1,"frc":1,"h":"yf","i":258,"its":0,"l":13,"n":"Ƹ","p":"yunfu_258","s":3734120,"v":443,"x":12473614,"y":2605661},{"4k":0,"bb":2265088,"bl":12204032,"br":12366848,"bt":2487296,"c":[],"cl":2,"dom":1,"frc":1,"h":"zj","i":198,"its":0,"l":13,"n":"տ","p":"zhanjiang_198","s":8080537,"v":443,"x":12286021,"y":2409271},{"4k":0,"bb":2587648,"bl":12397568,"br":12567552,"bt":2785280,"c":[],"cl":2,"dom":1,"frc":1,"h":"zq","i":338,"its":0,"l":13,"n":"","p":"zhaoqing_338","s":6292984,"v":443,"x":12520436,"y":2621545},{"4k":1,"bb":2516992,"bl":12597248,"br":12657664,"bt":2589696,"c":[],"cl":2,"dom":1,"frc":1,"h":"zs","i":187,"its":1,"l":12,"n":"ɽ","p":"zhongshan_187","s":12591955,"v":443,"x":12623659,"y":2557831},{"4k":1,"bb":2468864,"bl":12585984,"br":12737536,"bt":2550784,"c":[],"cl":2,"dom":1,"frc":1,"h":"zh","i":140,"its":1,"l":13,"n":"麣","p":"zhuhai_140","s":8300237,"v":443,"x":12644164,"y":2528395}],"cl":1,"dom":1,"frc":1,"h":"","i":8,"its":0,"l":12,"n":"㶫ʡ","p":"","s":102400,"v":443,"x":14116241,"y":5386659},{"bb":5217424,"bl":13988219,"br":14251713,"bt":5536780,"c":[{"4k":0,"bb":2766848,"bl":12203008,"br":12412928,"bt":3028992,"c":[],"cl":2,"dom":1,"frc":1,"h":"gl","i":142,"its":0,"l":12,"n":"","p":"guilin_142","s":9050584,"v":443,"x":12278277,"y":2891750},{"4k":0,"bb":2597888,"bl":11627520,"br":12011520,"bt":2871296,"c":[],"cl":2,"dom":1,"frc":1,"h":"bs","i":203,"its":0,"l":13,"n":"ɫ","p":"baise_203","s":8833776,"v":443,"x":11869566,"y":2724709},{"4k":0,"bb":2361344,"bl":12116992,"br":12223488,"bt":2487296,"c":[],"cl":2,"dom":1,"frc":1,"h":"bh","i":295,"its":0,"l":13,"n":"","p":"beihai_295","s":2929948,"v":443,"x":12148051,"y":2434246},{"4k":0,"bb":2447360,"bl":11863040,"br":12036096,"bt":2659328,"c":[],"cl":2,"dom":0,"frc":1,"h":"cz","i":144,"its":0,"l":14,"n":"","p":"chongzuo_144","s":4293137,"v":443,"x":11952674,"y":2540952},{"4k":0,"bb":2573312,"bl":12156928,"br":12320768,"bt":2742272,"c":[],"cl":2,"dom":1,"frc":1,"h":"gg","i":341,"its":0,"l":13,"n":"","p":"guigang_341","s":4582080,"v":443,"x":12201371,"y":2629300},{"4k":0,"bb":2434048,"bl":11965440,"br":12091392,"bt":2541568,"c":[],"cl":2,"dom":0,"frc":1,"h":"fcg","i":204,"its":0,"l":15,"n":"Ǹ","p":"fangchenggang_204","s":2483220,"v":443,"x":12062759,"y":2458820},{"4k":0,"bb":2681856,"bl":11864064,"br":12152832,"bt":2933760,"c":[],"cl":2,"dom":0,"frc":1,"h":"hc","i":143,"its":0,"l":14,"n":"ӳ","p":"hechi_143","s":8657320,"v":443,"x":12032866,"y":2820782},{"4k":0,"bb":2694144,"bl":12309504,"br":12476416,"bt":2877440,"c":[],"cl":2,"dom":0,"frc":1,"h":"hz","i":260,"its":0,"l":14,"n":"","p":"hezhou_260","s":3087896,"v":443,"x":12420393,"y":2785558},{"4k":0,"bb":2648064,"bl":12069888,"br":12297216,"bt":2793472,"c":[],"cl":2,"dom":0,"frc":1,"h":"lb","i":202,"its":0,"l":14,"n":"","p":"laibin_202","s":3988238,"v":443,"x":12159448,"y":2706201},{"4k":0,"bb":2724864,"bl":12088320,"br":12266496,"bt":2988032,"c":[],"cl":2,"dom":1,"frc":1,"h":"lz","i":305,"its":0,"l":12,"n":"","p":"liuzhou_305","s":7070375,"v":443,"x":12180931,"y":2776093},{"4k":1,"bb":2520064,"bl":11948032,"br":12204032,"bt":2741248,"c":[],"cl":2,"dom":1,"frc":1,"h":"nn","i":261,"its":1,"l":12,"n":"","p":"nanning_261","s":23933672,"v":443,"x":12064168,"y":2593869},{"4k":0,"bb":2436096,"bl":12043264,"br":12231680,"bt":2578432,"c":[],"cl":2,"dom":1,"frc":1,"h":"qz","i":145,"its":0,"l":13,"n":"","p":"qinzhou_145","s":4654444,"v":443,"x":12096190,"y":2493771},{"4k":0,"bb":2568192,"bl":12281856,"br":12432384,"bt":2786304,"c":[],"cl":2,"dom":1,"frc":1,"h":"wz","i":304,"its":0,"l":13,"n":"","p":"wuzhou_304","s":4529060,"v":443,"x":12388396,"y":2673339},{"4k":0,"bb":2452480,"bl":12194816,"br":12346368,"bt":2631680,"c":[],"cl":2,"dom":1,"frc":1,"h":"yl","i":361,"its":0,"l":14,"n":"","p":"yulin_361","s":6256769,"v":443,"x":12264306,"y":2572258}],"cl":1,"dom":1,"frc":1,"h":"","i":9,"its":0,"l":12,"n":"׳","p":"","s":102400,"v":443,"x":14116241,"y":5386659},{"bb":5217424,"bl":13988219,"br":14251713,"bt":5536780,"c":[{"4k":1,"bb":3003392,"bl":11813888,"br":11943936,"bt":3149824,"c":[],"cl":2,"dom":1,"frc":1,"h":"gy","i":146,"its":1,"l":12,"n":"","p":"guiyang_146","s":12010097,"v":443,"x":11870882,"y":3060846},{"4k":0,"bb":2900992,"bl":11716608,"br":11865088,"bt":3058688,"c":[],"cl":2,"dom":1,"frc":1,"h":"as","i":263,"its":0,"l":13,"n":"˳","p":"anshun_263","s":3927257,"v":443,"x":11794711,"y":3012219},{"4k":0,"bb":3024896,"bl":11533312,"br":11882496,"bt":3202048,"c":[],"cl":2,"dom":0,"frc":1,"h":"bjd","i":206,"its":0,"l":14,"n":"Ͻڵ","p":"bijiedi_206","s":9120149,"v":443,"x":11721033,"y":3142281},{"4k":0,"bb":2896896,"bl":11612160,"br":11769856,"bt":3095552,"c":[],"cl":2,"dom":1,"frc":1,"h":"lps","i":147,"its":0,"l":13,"n":"ˮ","p":"liupanshui_147","s":4115933,"v":443,"x":11670590,"y":3054083},{"4k":0,"bb":2894848,"bl":11944960,"br":12200960,"bt":3171328,"c":[],"cl":2,"dom":1,"frc":1,"h":"qdnmzdzzz","i":342,"its":0,"l":11,"n":"ǭ嶱","p":"qiandongnanmiaozudongzuzizhi_342","s":7922286,"v":443,"x":12021445,"y":3053001},{"4k":0,"bb":2865152,"bl":11824128,"br":12057600,"bt":3165184,"c":[],"cl":2,"dom":0,"frc":1,"h":"qnbyzmzzz","i":306,"its":0,"l":11,"n":"ǭϲ","p":"qiannanbuyizumiaozuzizhi_306","s":7904880,"v":443,"x":11970165,"y":3012314},{"4k":0,"bb":2810880,"bl":11636736,"br":11859968,"bt":3003392,"c":[],"cl":2,"dom":0,"frc":1,"h":"qxnbyzmzzz","i":343,"its":0,"l":11,"n":"ǭϲ","p":"qianxinanbuyizumiaozuzizhi_343","s":5564973,"v":443,"x":11678750,"y":2869250},{"4k":0,"bb":3119104,"bl":11995136,"br":12187648,"bt":3366912,"c":[],"cl":2,"dom":0,"frc":1,"h":"trd","i":205,"its":0,"l":14,"n":"ͭʵ","p":"tongrendi_205","s":6817188,"v":443,"x":12155781,"y":3195893},{"4k":0,"bb":3121152,"bl":11756544,"br":12047360,"bt":3384320,"c":[],"cl":2,"dom":1,"frc":1,"h":"zy","i":262,"its":0,"l":13,"n":"","p":"zunyi_262","s":10905159,"v":443,"x":11903929,"y":3195131}],"cl":1,"dom":1,"frc":1,"h":"","i":10,"its":0,"l":12,"n":"ʡ","p":"","s":102400,"v":443,"x":14116241,"y":5386659},{"bb":5217424,"bl":13988219,"br":14251713,"bt":5536780,"c":[{"4k":1,"bb":2202624,"bl":12253184,"br":12325888,"bt":2280448,"c":[],"cl":2,"dom":1,"frc":1,"h":"hk","i":125,"its":0,"l":13,"n":"","p":"haikou_125","s":5254065,"v":443,"x":12282523,"y":2262686},{"4k":0,"bb":397312,"bl":12086272,"br":13144064,"bt":2288640,"c":[],"cl":2,"dom":0,"frc":1,"h":"hnszxxjxzd","i":296,"its":0,"l":13,"n":"ʡֱϽؼλ","p":"hainanshengzhixiaxianjixingzhengdan_296","s":27428558,"v":443,"x":12204337,"y":2170840},{"4k":0,"bb":2037760,"bl":12126208,"br":12225536,"bt":2098176,"c":[],"cl":2,"dom":1,"frc":1,"h":"sy","i":121,"its":0,"l":12,"n":"","p":"sanya_121","s":1979206,"v":443,"x":12191644,"y":2054296}],"cl":1,"dom":1,"frc":1,"h":"","i":11,"its":0,"l":12,"n":"ʡ","p":"","s":102400,"v":443,"x":14116241,"y":5386659},{"bb":5217424,"bl":13988219,"br":14251713,"bt":5536780,"c":[{"4k":1,"bb":4474880,"bl":12637184,"br":12857344,"bt":4662272,"c":[],"cl":2,"dom":1,"frc":1,"h":"sjz","i":150,"its":1,"l":12,"n":"ʯׯ","p":"shijiazhuang_150","s":23147053,"v":443,"x":12748538,"y":4559724},{"4k":0,"bb":4586496,"bl":12664832,"br":12951552,"bt":4832256,"c":[],"cl":2,"dom":1,"frc":1,"h":"bd","i":307,"its":0,"l":13,"n":"","p":"baoding_307","s":16420615,"v":443,"x":12854318,"y":4677432},{"4k":0,"bb":4478976,"bl":12879872,"br":13131776,"bt":4687872,"c":[],"cl":2,"dom":1,"frc":1,"h":"cz","i":149,"its":0,"l":13,"n":"","p":"cangzhou_149","s":8851012,"v":443,"x":13007297,"y":4596606},{"4k":0,"bb":4866048,"bl":12903424,"br":13276160,"bt":5226496,"c":[],"cl":2,"dom":1,"frc":1,"h":"cd","i":207,"its":0,"l":14,"n":"е","p":"chengde_207","s":10190169,"v":443,"x":13130309,"y":4981756},{"4k":0,"bb":4282368,"bl":12631040,"br":12857344,"bt":4417536,"c":[],"cl":2,"dom":1,"frc":1,"h":"hd","i":151,"its":0,"l":13,"n":"","p":"handan_151","s":8060648,"v":443,"x":12746200,"y":4360331},{"4k":0,"bb":4421632,"bl":12823552,"br":12977152,"bt":4605952,"c":[],"cl":2,"dom":1,"frc":1,"h":"hs","i":208,"its":0,"l":13,"n":"ˮ","p":"hengshui_208","s":5616051,"v":443,"x":12877237,"y":4517087},{"4k":0,"bb":4620288,"bl":12925952,"br":13054976,"bt":4853760,"c":[],"cl":2,"dom":1,"frc":1,"h":"lf","i":191,"its":0,"l":13,"n":"ȷ","p":"langfang_191","s":6967694,"v":443,"x":12992591,"y":4769913},{"4k":1,"bb":4756480,"bl":13199360,"br":13344768,"bt":4928512,"c":[],"cl":2,"dom":1,"frc":1,"h":"qhd","i":148,"its":0,"l":12,"n":"ػʵ","p":"qinhuangdao_148","s":12894123,"v":443,"x":13314638,"y":4829708},{"4k":0,"bb":4680704,"bl":13081600,"br":13298688,"bt":4907008,"c":[],"cl":2,"dom":1,"frc":1,"h":"ts","i":265,"its":1,"l":13,"n":"ɽ","p":"tangshan_265","s":18289183,"v":443,"x":13156663,"y":4785770},{"4k":0,"bb":4379648,"bl":12663808,"br":12898304,"bt":4527104,"c":[],"cl":2,"dom":1,"frc":1,"h":"xt","i":266,"its":0,"l":13,"n":"̨","p":"xingtai_266","s":7047856,"v":443,"x":12747474,"y":4423807},{"4k":0,"bb":4774912,"bl":12670976,"br":12965888,"bt":5155840,"c":[],"cl":2,"dom":1,"frc":1,"h":"zjk","i":264,"its":0,"l":13,"n":"żҿ","p":"zhangjiakou_264","s":9573829,"v":443,"x":12790099,"y":4959124}],"cl":1,"dom":1,"frc":1,"h":"","i":12,"its":0,"l":12,"n":"ӱʡ","p":"","s":102400,"v":443,"x":14116241,"y":5386659},{"bb":5217424,"bl":13988219,"br":14251713,"bt":5536780,"c":[{"4k":1,"bb":5445632,"bl":13991936,"br":14499840,"bt":5859328,"c":[],"cl":2,"dom":1,"frc":1,"h":"heb","i":48,"its":1,"l":12,"n":"","p":"haerbin_48","s":27827108,"v":443,"x":14086779,"y":5718675},{"4k":0,"bb":5651456,"bl":13776896,"br":14004224,"bt":5990400,"c":[],"cl":2,"dom":1,"frc":1,"h":"dq","i":50,"its":0,"l":12,"n":"","p":"daqing_50","s":7115903,"v":443,"x":13927447,"y":5844942},{"4k":0,"bb":6571008,"bl":13490176,"br":14142464,"bt":7054336,"c":[],"cl":2,"dom":1,"frc":1,"h":"dxald","i":38,"its":0,"l":10,"n":"˰","p":"daxinganlingdi_38","s":4997030,"v":443,"x":13870692,"y":6757751},{"4k":0,"bb":5920768,"bl":14435328,"br":14753792,"bt":6134784,"c":[],"cl":2,"dom":1,"frc":1,"h":"hg","i":43,"its":0,"l":13,"n":"׸","p":"hegang_43","s":2899943,"v":443,"x":14505602,"y":5968657},{"4k":0,"bb":6006784,"bl":13887488,"br":14420992,"bt":6590464,"c":[],"cl":2,"dom":1,"frc":1,"h":"hh","i":39,"its":0,"l":14,"n":"ں","p":"heihe_39","s":8126071,"v":443,"x":14197287,"y":6456725},{"4k":0,"bb":5569536,"bl":14516224,"br":14912512,"bt":5849088,"c":[],"cl":2,"dom":1,"frc":1,"h":"jx","i":46,"its":0,"l":13,"n":"","p":"jixi_46","s":4099610,"v":443,"x":14580357,"y":5638357},{"4k":0,"bb":5741568,"bl":14416896,"br":15040512,"bt":6154240,"c":[],"cl":2,"dom":1,"frc":1,"h":"jms","i":42,"its":0,"l":12,"n":"ľ˹","p":"jiamusi_42","s":7734115,"v":443,"x":14508101,"y":5879000},{"4k":0,"bb":5348352,"bl":14274560,"br":14620672,"bt":5748736,"c":[],"cl":2,"dom":1,"frc":1,"h":"mdj","i":49,"its":0,"l":13,"n":"ĵ","p":"mudanjiang_49","s":5511489,"v":443,"x":14431502,"y":5522040},{"4k":0,"bb":5785600,"bl":13626368,"br":14102528,"bt":6233088,"c":[],"cl":2,"dom":1,"frc":1,"h":"qqhe","i":41,"its":0,"l":13,"n":"","p":"qiqihaer_41","s":10868386,"v":443,"x":13795365,"y":5969317},{"4k":0,"bb":5684224,"bl":14483456,"br":14688256,"bt":5805056,"c":[],"cl":2,"dom":1,"frc":1,"h":"qth","i":47,"its":0,"l":14,"n":"̨","p":"qitaihe_47","s":1288050,"v":443,"x":14584082,"y":5713696},{"4k":0,"bb":5715968,"bl":14545920,"br":14956544,"bt":6005760,"c":[],"cl":2,"dom":1,"frc":1,"h":"sys","i":45,"its":0,"l":13,"n":"˫Ѽɽ","p":"shuangyashan_45","s":3183152,"v":443,"x":14601428,"y":5854242},{"4k":0,"bb":5670912,"bl":13900800,"br":14312448,"bt":6092800,"c":[],"cl":2,"dom":1,"frc":1,"h":"sh","i":44,"its":0,"l":13,"n":"绯","p":"suihua_44","s":8546525,"v":443,"x":14135004,"y":5855176},{"4k":0,"bb":5827584,"bl":14208000,"br":14559232,"bt":6319104,"c":[],"cl":2,"dom":1,"frc":1,"h":"yc","i":40,"its":0,"l":14,"n":"","p":"yichun_40","s":3550152,"v":443,"x":14343343,"y":6030683}],"cl":1,"dom":1,"frc":1,"h":"","i":13,"its":0,"l":12,"n":"ʡ","p":"","s":102400,"v":443,"x":14116241,"y":5386659},{"bb":5217424,"bl":13988219,"br":14251713,"bt":5536780,"c":[{"4k":1,"bb":4039680,"bl":12548096,"br":12717056,"bt":4139008,"c":[],"cl":2,"dom":1,"frc":1,"h":"zz","i":268,"its":1,"l":12,"n":"֣","p":"zhengzhou_268","s":25326454,"v":443,"x":12649567,"y":4105840},{"4k":0,"bb":4166656,"bl":12649472,"br":12802048,"bt":4327424,"c":[],"cl":2,"dom":1,"frc":1,"h":"ay","i":267,"its":0,"l":12,"n":"","p":"anyang_267","s":5907301,"v":443,"x":12735044,"y":4289481},{"4k":0,"bb":4199424,"bl":12690432,"br":12776448,"bt":4283392,"c":[],"cl":2,"dom":1,"frc":1,"h":"hb","i":215,"its":0,"l":13,"n":"ױ","p":"hebi_215","s":1863555,"v":443,"x":12724387,"y":4241836},{"4k":0,"bb":4125696,"bl":12472320,"br":12554240,"bt":4177920,"c":[],"cl":2,"dom":0,"frc":1,"h":"jy","i":1277,"its":0,"l":13,"n":"Դ","p":"jiyuan_1277","s":1475878,"v":443,"x":12535733,"y":4149037},{"4k":0,"bb":4114432,"bl":12531712,"br":12652544,"bt":4207616,"c":[],"cl":2,"dom":1,"frc":1,"h":"jz","i":211,"its":0,"l":13,"n":"","p":"jiaozuo_211","s":3602514,"v":443,"x":12606908,"y":4169150},{"4k":0,"bb":4031488,"bl":12677120,"br":12832768,"bt":4143104,"c":[],"cl":2,"dom":1,"frc":1,"h":"kf","i":210,"its":0,"l":13,"n":"","p":"kaifeng_210","s":4687021,"v":443,"x":12725504,"y":4112520},{"4k":0,"bb":3926016,"bl":12631040,"br":12724224,"bt":4003840,"c":[],"cl":2,"dom":0,"frc":1,"h":"lh","i":344,"its":0,"l":13,"n":"","p":"luohe_344","s":2257089,"v":443,"x":12693146,"y":3949717},{"4k":1,"bb":3946496,"bl":12371968,"br":12578816,"bt":4150272,"c":[],"cl":2,"dom":1,"frc":1,"h":"ly","i":153,"its":0,"l":12,"n":"","p":"luoyang_153","s":21785286,"v":443,"x":12519129,"y":4088448},{"4k":0,"bb":3775488,"bl":12354560,"br":12670976,"bt":3979264,"c":[],"cl":2,"dom":1,"frc":1,"h":"ny","i":309,"its":0,"l":13,"n":"","p":"nanyang_309","s":14737414,"v":443,"x":12527475,"y":3871405},{"4k":0,"bb":3889152,"bl":12495872,"br":12656640,"bt":4051968,"c":[],"cl":2,"dom":1,"frc":1,"h":"pds","i":213,"its":0,"l":13,"n":"ƽɽ","p":"pingdingshan_213","s":5961878,"v":443,"x":12601567,"y":3974311},{"4k":0,"bb":4184064,"bl":12787712,"br":12926976,"bt":4305920,"c":[],"cl":2,"dom":1,"frc":1,"h":"py","i":209,"its":0,"l":12,"n":"","p":"puyang_209","s":3258727,"v":443,"x":12805878,"y":4243481},{"4k":0,"bb":3945472,"bl":12285952,"br":12472320,"bt":4152320,"c":[],"cl":2,"dom":1,"frc":1,"h":"smx","i":212,"its":0,"l":13,"n":"Ͽ","p":"sanmenxia_212","s":4052520,"v":443,"x":12379622,"y":4109213},{"4k":0,"bb":3965952,"bl":12782592,"br":12986368,"bt":4121600,"c":[],"cl":2,"dom":1,"frc":1,"h":"sq","i":154,"its":0,"l":13,"n":"","p":"shangqiu_154","s":6841470,"v":443,"x":12875663,"y":4061012},{"4k":0,"bb":4122624,"bl":12621824,"br":12805120,"bt":4254720,"c":[],"cl":2,"dom":1,"frc":1,"h":"xx","i":152,"its":0,"l":13,"n":"","p":"xinxiang_152","s":5815425,"v":443,"x":12683159,"y":4180929},{"4k":0,"bb":3660800,"bl":12658688,"br":12908544,"bt":3828736,"c":[],"cl":2,"dom":1,"frc":1,"h":"xy","i":214,"its":0,"l":13,"n":"","p":"xinyang_214","s":12944933,"v":443,"x":12698936,"y":3757298},{"4k":0,"bb":3963904,"bl":12587008,"br":12728320,"bt":4060160,"c":[],"cl":2,"dom":1,"frc":1,"h":"xc","i":155,"its":0,"l":13,"n":"","p":"xuchang_155","s":4130441,"v":443,"x":12674841,"y":4010266},{"4k":0,"bb":3878912,"bl":12700672,"br":12875776,"bt":4050944,"c":[],"cl":2,"dom":1,"frc":1,"h":"zk","i":308,"its":0,"l":13,"n":"ܿ","p":"zhoukou_308","s":7507646,"v":443,"x":12764507,"y":3954547},{"4k":0,"bb":3776512,"bl":12590080,"br":12827648,"bt":3943424,"c":[],"cl":2,"dom":0,"frc":1,"h":"zmd","i":269,"its":0,"l":13,"n":"פ","p":"zhumadian_269","s":7739736,"v":443,"x":12693783,"y":3874182}],"cl":1,"dom":1,"frc":1,"h":"","i":14,"its":0,"l":12,"n":"ʡ","p":"","s":102400,"v":443,"x":14116241,"y":5386659},{"bb":5217424,"bl":13988219,"br":14251713,"bt":5536780,"c":[{"4k":1,"bb":3210240,"bl":12456960,"br":12721152,"bt":3313664,"c":[],"cl":2,"dom":1,"frc":1,"h":"cs","i":158,"its":1,"l":12,"n":"ɳ","p":"changsha_158","s":24928169,"v":443,"x":12573153,"y":3258105},{"4k":0,"bb":2844672,"bl":12493824,"br":12718080,"bt":3085312,"c":[],"cl":2,"dom":1,"frc":1,"h":"cz","i":275,"its":0,"l":13,"n":"","p":"chenzhou_275","s":6967584,"v":443,"x":12581589,"y":2952699},{"4k":0,"bb":3279872,"bl":12300288,"br":12503040,"bt":3499008,"c":[],"cl":2,"dom":1,"frc":1,"h":"cd","i":219,"its":0,"l":12,"n":"","p":"changde_219","s":9065293,"v":443,"x":12435078,"y":3359518},{"4k":0,"bb":2994176,"bl":12417024,"br":12611584,"bt":3163136,"c":[],"cl":2,"dom":1,"frc":1,"h":"hy","i":159,"its":0,"l":13,"n":"","p":"hengyang_159","s":10285920,"v":443,"x":12532306,"y":3091415},{"4k":0,"bb":2963456,"bl":12110848,"br":12369920,"bt":3358720,"c":[],"cl":2,"dom":1,"frc":1,"h":"hh","i":363,"its":0,"l":13,"n":"","p":"huaihua_363","s":9564243,"v":443,"x":12245816,"y":3173822},{"4k":0,"bb":3129344,"bl":12331008,"br":12527616,"bt":3259392,"c":[],"cl":2,"dom":1,"frc":1,"h":"ld","i":221,"its":0,"l":13,"n":"¦","p":"loudi_221","s":5301527,"v":443,"x":12468039,"y":3191559},{"4k":0,"bb":2975744,"bl":12225536,"br":12479488,"bt":3187712,"c":[],"cl":2,"dom":1,"frc":1,"h":"sy","i":273,"its":0,"l":13,"n":"","p":"shaoyang_273","s":9938079,"v":443,"x":12409368,"y":3134396},{"4k":0,"bb":3145728,"bl":12468224,"br":12591104,"bt":3238912,"c":[],"cl":2,"dom":0,"frc":1,"h":"xt","i":313,"its":0,"l":13,"n":"̶","p":"xiangtan_313","s":4685126,"v":443,"x":12573737,"y":3208160},{"4k":0,"bb":3193856,"bl":12154880,"br":12290048,"bt":3436544,"c":[],"cl":2,"dom":0,"frc":1,"h":"xxtjzmzzz","i":274,"its":0,"l":14,"n":"","p":"xiangxitujiazumiaozuzizhi_274","s":4740425,"v":443,"x":12216945,"y":3268607},{"4k":0,"bb":3225600,"bl":12325888,"br":12574720,"bt":3422208,"c":[],"cl":2,"dom":0,"frc":1,"h":"yy","i":272,"its":0,"l":13,"n":"","p":"yiyang_272","s":5977967,"v":443,"x":12508180,"y":3299125},{"4k":0,"bb":2812928,"bl":12351488,"br":12520448,"bt":3088384,"c":[],"cl":2,"dom":1,"frc":1,"h":"yz","i":314,"its":0,"l":13,"n":"","p":"yongzhou_314","s":7952675,"v":443,"x":12425479,"y":3032799},{"4k":0,"bb":3281920,"bl":12503040,"br":12708864,"bt":3464192,"c":[],"cl":2,"dom":1,"frc":1,"h":"yy","i":220,"its":0,"l":13,"n":"","p":"yueyang_220","s":9238679,"v":443,"x":12594306,"y":3400824},{"4k":0,"bb":3338240,"bl":12211200,"br":12395520,"bt":3457024,"c":[],"cl":2,"dom":1,"frc":1,"h":"zjj","i":312,"its":0,"l":13,"n":"żҽ","p":"zhangjiajie_312","s":3340101,"v":443,"x":12299343,"y":3370210},{"4k":0,"bb":2985984,"bl":12575744,"br":12703744,"bt":3233792,"c":[],"cl":2,"dom":1,"frc":1,"h":"zz","i":222,"its":0,"l":13,"n":"","p":"zhuzhou_222","s":7329673,"v":443,"x":12594871,"y":3207895}],"cl":1,"dom":1,"frc":1,"h":"","i":15,"its":0,"l":12,"n":"ʡ","p":"","s":102400,"v":443,"x":14116241,"y":5386659},{"bb":5217424,"bl":13988219,"br":14251713,"bt":5536780,"c":[{"4k":1,"bb":3477504,"bl":12657664,"br":12812288,"bt":3658752,"c":[],"cl":2,"dom":1,"frc":1,"h":"wh","i":218,"its":1,"l":12,"n":"人","p":"wuhan_218","s":28705679,"v":443,"x":12725273,"y":3558756},{"4k":0,"bb":3484672,"bl":12746752,"br":12813312,"bt":3562496,"c":[],"cl":2,"dom":1,"frc":1,"h":"ez","i":122,"its":0,"l":14,"n":"","p":"ezhou_122","s":1878012,"v":443,"x":12790921,"y":3532802},{"4k":0,"bb":3368960,"bl":12063744,"br":12317696,"bt":3662848,"c":[],"cl":2,"dom":1,"frc":1,"h":"estjzmzzz","i":373,"its":0,"l":14,"n":"ʩ","p":"enshitujiazumiaozuzizhi_373","s":7879921,"v":443,"x":12189033,"y":3517581},{"4k":0,"bb":3446784,"bl":12735488,"br":12930048,"bt":3690496,"c":[],"cl":2,"dom":1,"frc":1,"h":"hg","i":271,"its":0,"l":14,"n":"Ƹ","p":"huanggang_271","s":11946052,"v":443,"x":12788396,"y":3540883},{"4k":0,"bb":3419136,"bl":12749824,"br":12860416,"bt":3525632,"c":[],"cl":2,"dom":1,"frc":1,"h":"hs","i":311,"its":0,"l":13,"n":"ʯ","p":"huangshi_311","s":3551321,"v":443,"x":12806938,"y":3508277},{"4k":0,"bb":3490816,"bl":12238848,"br":12672000,"bt":3723264,"c":[],"cl":2,"dom":0,"frc":1,"h":"hbszxxjxzd","i":345,"its":0,"l":13,"n":"ʡֱϽؼλ","p":"hubeishengzhixiaxianjixingzhengdan_345","s":5388376,"v":443,"x":12455557,"y":3607403},{"4k":0,"bb":3531776,"bl":12452864,"br":12635136,"bt":3690496,"c":[],"cl":2,"dom":1,"frc":1,"h":"jm","i":217,"its":0,"l":13,"n":"","p":"jingmen_217","s":6337019,"v":443,"x":12490833,"y":3615941},{"4k":0,"bb":3408896,"bl":12384256,"br":12701696,"bt":3567616,"c":[],"cl":2,"dom":1,"frc":1,"h":"jz","i":157,"its":0,"l":12,"n":"","p":"jingzhou_157","s":7883985,"v":443,"x":12495301,"y":3525648},{"4k":0,"bb":3676160,"bl":12182528,"br":12423168,"bt":3908608,"c":[],"cl":2,"dom":1,"frc":1,"h":"sy","i":216,"its":0,"l":13,"n":"ʮ","p":"shiyan_216","s":8510263,"v":443,"x":12334839,"y":3823705},{"4k":0,"bb":3652608,"bl":12549120,"br":12706816,"bt":3798016,"c":[],"cl":2,"dom":1,"frc":1,"h":"sz","i":371,"its":0,"l":13,"n":"","p":"suizhou_371","s":5741716,"v":443,"x":12622550,"y":3700859},{"4k":0,"bb":3640320,"bl":12331008,"br":12594176,"bt":3823616,"c":[],"cl":2,"dom":1,"frc":1,"h":"xf","i":156,"its":0,"l":12,"n":"","p":"xiangfan_156","s":10727197,"v":443,"x":12482289,"y":3742391},{"4k":0,"bb":3358720,"bl":12639232,"br":12800000,"bt":3521536,"c":[],"cl":2,"dom":1,"frc":1,"h":"xn","i":362,"its":0,"l":13,"n":"","p":"xianning_362","s":5411687,"v":443,"x":12727180,"y":3462453},{"4k":0,"bb":3530752,"bl":12614656,"br":12758016,"bt":3722240,"c":[],"cl":2,"dom":1,"frc":1,"h":"xg","i":310,"its":0,"l":13,"n":"Т","p":"xiaogan_310","s":6523012,"v":443,"x":12681984,"y":3601589},{"4k":0,"bb":3475456,"bl":12273664,"br":12478464,"bt":3686400,"c":[],"cl":2,"dom":1,"frc":1,"h":"yc","i":270,"its":0,"l":13,"n":"˲","p":"yichang_270","s":10163155,"v":443,"x":12389211,"y":3571525}],"cl":1,"dom":1,"frc":1,"h":"","i":16,"its":0,"l":12,"n":"ʡ","p":"","s":102400,"v":443,"x":14116241,"y":5386659},{"bb":5217424,"bl":13988219,"br":14251713,"bt":5536780,"c":[{"4k":1,"bb":5322752,"bl":13864960,"br":14149632,"bt":5632000,"c":[],"cl":2,"dom":1,"frc":1,"h":"cc","i":53,"its":1,"l":12,"n":"","p":"changchun_53","s":25943191,"v":443,"x":13951841,"y":5408059},{"4k":0,"bb":5471232,"bl":13541376,"br":13846528,"bt":5799936,"c":[],"cl":2,"dom":1,"frc":1,"h":"bc","i":51,"its":0,"l":13,"n":"׳","p":"baicheng_51","s":5816489,"v":443,"x":13675225,"y":5689688},{"4k":0,"bb":5038080,"bl":14040064,"br":14285824,"bt":5257216,"c":[],"cl":2,"dom":0,"frc":1,"h":"bs","i":57,"its":0,"l":13,"n":"ɽ","p":"baishan_57","s":3734197,"v":443,"x":14074329,"y":5124097},{"4k":0,"bb":5217280,"bl":13987840,"br":14252032,"bt":5537792,"c":[],"cl":2,"dom":1,"frc":1,"h":"jl","i":55,"its":0,"l":12,"n":"","p":"jilin_55","s":8160825,"v":443,"x":14088310,"y":5411378},{"4k":0,"bb":5177344,"bl":13897728,"br":14010368,"bt":5319680,"c":[],"cl":2,"dom":1,"frc":1,"h":"ly","i":183,"its":0,"l":13,"n":"Դ","p":"liaoyuan_183","s":2381679,"v":443,"x":13931797,"y":5266538},{"4k":0,"bb":5256192,"bl":13726720,"br":14003200,"bt":5460992,"c":[],"cl":2,"dom":1,"frc":1,"h":"sp","i":56,"its":0,"l":12,"n":"ƽ","p":"siping_56","s":5636687,"v":443,"x":13843452,"y":5308675},{"4k":0,"bb":5434368,"bl":13705216,"br":14049280,"bt":5678080,"c":[],"cl":2,"dom":1,"frc":1,"h":"sy","i":52,"its":0,"l":13,"n":"ԭ","p":"songyuan_52","s":6251789,"v":443,"x":13896307,"y":5614195},{"4k":0,"bb":4964352,"bl":13944832,"br":14111744,"bt":5286912,"c":[],"cl":2,"dom":1,"frc":1,"h":"th","i":165,"its":0,"l":13,"n":"ͨ","p":"tonghua_165","s":5132125,"v":443,"x":14020453,"y":5092491},{"4k":0,"bb":5132288,"bl":14190592,"br":14619648,"bt":5516288,"c":[],"cl":2,"dom":1,"frc":1,"h":"ybcxzzz","i":54,"its":0,"l":11,"n":"ӱ߳","p":"yanbianchaoxianzuzizhi_54","s":7416502,"v":443,"x":14417767,"y":5266979}],"cl":1,"dom":1,"frc":1,"h":"","i":17,"its":0,"l":12,"n":"ʡ","p":"","s":102400,"v":443,"x":14116241,"y":5386659},{"bb":5217424,"bl":13988219,"br":14251713,"bt":5536780,"c":[{"4k":1,"bb":3640320,"bl":13176832,"br":13275136,"bt":3822592,"c":[],"cl":2,"dom":1,"frc":1,"h":"nj","i":315,"its":1,"l":12,"n":"Ͼ","p":"nanjing_315","s":31021399,"v":443,"x":13225203,"y":3748900},{"4k":1,"bb":3630080,"bl":13262848,"br":13382656,"bt":3749888,"c":[],"cl":2,"dom":1,"frc":1,"h":"cz","i":348,"its":1,"l":12,"n":"","p":"changzhou_348","s":21076657,"v":443,"x":13356064,"y":3716504},{"4k":1,"bb":3834880,"bl":13160448,"br":13320192,"bt":4018176,"c":[],"cl":2,"dom":1,"frc":1,"h":"ha","i":162,"its":0,"l":12,"n":"","p":"huaian_162","s":15149142,"v":443,"x":13249618,"y":3953531},{"4k":0,"bb":4001792,"bl":13181952,"br":13342720,"bt":4157440,"c":[],"cl":2,"dom":1,"frc":1,"h":"lyg","i":347,"its":0,"l":12,"n":"Ƹ","p":"lianyungang_347","s":7569698,"v":443,"x":13272582,"y":4085419},{"4k":1,"bb":3690496,"bl":13381632,"br":13582336,"bt":3834880,"c":[],"cl":2,"dom":1,"frc":1,"h":"nt","i":161,"its":1,"l":12,"n":"ͨ","p":"nantong_161","s":23002386,"v":443,"x":13458552,"y":3738896},{"4k":0,"bb":3890176,"bl":13129728,"br":13267968,"bt":4062208,"c":[],"cl":2,"dom":1,"frc":1,"h":"sq","i":277,"its":0,"l":13,"n":"Ǩ","p":"suqian_277","s":8300561,"v":443,"x":13167242,"y":4000369},{"4k":1,"bb":3579904,"bl":13349888,"br":13513728,"bt":3745792,"c":[],"cl":2,"dom":1,"frc":1,"h":"sz","i":224,"its":1,"l":12,"n":"","p":"suzhou_224","s":38519157,"v":443,"x":13424106,"y":3650006},{"4k":0,"bb":3731456,"bl":13319168,"br":13421568,"bt":3902464,"c":[],"cl":2,"dom":1,"frc":1,"h":"tz","i":276,"its":0,"l":13,"n":"̩","p":"taizhou_276","s":8975160,"v":443,"x":13350650,"y":3800790},{"4k":1,"bb":3625984,"bl":13304832,"br":13426688,"bt":3739648,"c":[],"cl":2,"dom":1,"frc":1,"h":"wx","i":317,"its":1,"l":12,"n":"","p":"wuxi_317","s":26508436,"v":443,"x":13392937,"y":3684628},{"4k":1,"bb":3966976,"bl":12953600,"br":13211648,"bt":4132864,"c":[],"cl":2,"dom":1,"frc":1,"h":"xz","i":316,"its":0,"l":12,"n":"","p":"xuzhou_316","s":21928988,"v":443,"x":13057066,"y":4032807},{"4k":0,"bb":3816448,"bl":13298688,"br":13470720,"bt":4078592,"c":[],"cl":2,"dom":1,"frc":1,"h":"yc","i":223,"its":0,"l":12,"n":"γ","p":"yancheng_223","s":14111778,"v":443,"x":13377206,"y":3918849},{"4k":1,"bb":3769344,"bl":13249536,"br":13349888,"bt":3928064,"c":[],"cl":2,"dom":1,"frc":1,"h":"yz","i":346,"its":0,"l":13,"n":"","p":"yangzhou_346","s":14635676,"v":443,"x":13293904,"y":3792830},{"4k":1,"bb":3691520,"bl":13244416,"br":13358080,"bt":3783680,"c":[],"cl":2,"dom":1,"frc":1,"h":"zj","i":160,"its":0,"l":13,"n":"","p":"zhenjiang_160","s":10919920,"v":443,"x":13298752,"y":3767387}],"cl":1,"dom":1,"frc":1,"h":"","i":18,"its":0,"l":12,"n":"ʡ","p":"","s":102400,"v":443,"x":14116241,"y":5386659},{"bb":5217424,"bl":13988219,"br":14251713,"bt":5536780,"c":[{"4k":1,"bb":3249152,"bl":12851200,"br":12977152,"bt":3378176,"c":[],"cl":2,"dom":1,"frc":1,"h":"nc","i":163,"its":1,"l":12,"n":"ϲ","p":"nanchang_163","s":11595843,"v":443,"x":12898192,"y":3315314},{"4k":0,"bb":3041280,"bl":12867584,"br":13059072,"bt":3292160,"c":[],"cl":2,"dom":1,"frc":1,"h":"fz","i":226,"its":0,"l":13,"n":"","p":"fuzhou_226","s":6814220,"v":443,"x":12954062,"y":3222988},{"4k":0,"bb":2795520,"bl":12681216,"br":12986368,"bt":3123200,"c":[],"cl":2,"dom":1,"frc":1,"h":"gz","i":365,"its":0,"l":13,"n":"","p":"ganzhou_365","s":13635821,"v":443,"x":12795194,"y":2959921},{"4k":0,"bb":2976768,"bl":12672000,"br":12907520,"bt":3225600,"c":[],"cl":2,"dom":1,"frc":1,"h":"ja","i":318,"its":0,"l":13,"n":"","p":"jian_318","s":9404151,"v":443,"x":12801910,"y":3118785},{"4k":0,"bb":3319808,"bl":13020160,"br":13105152,"bt":3474432,"c":[],"cl":2,"dom":1,"frc":1,"h":"jdz","i":225,"its":0,"l":12,"n":"","p":"jingdezhen_225","s":2561100,"v":443,"x":13045112,"y":3389524},{"4k":0,"bb":3315712,"bl":12684288,"br":13015040,"bt":3492864,"c":[],"cl":2,"dom":1,"frc":1,"h":"jj","i":349,"its":0,"l":13,"n":"Ž","p":"jiujiang_349","s":9351996,"v":443,"x":12914091,"y":3445125},{"4k":0,"bb":3098624,"bl":12643328,"br":12722176,"bt":3230720,"c":[],"cl":2,"dom":1,"frc":1,"h":"px","i":350,"its":0,"l":13,"n":"Ƽ","p":"pingxiang_350","s":2611022,"v":443,"x":12675065,"y":3182257},{"4k":0,"bb":3204096,"bl":12939264,"br":13191168,"bt":3444736,"c":[],"cl":2,"dom":1,"frc":1,"h":"sr","i":364,"its":0,"l":13,"n":"","p":"shangrao_364","s":10424586,"v":443,"x":13130280,"y":3286655},{"4k":0,"bb":3170304,"bl":12744704,"br":12848128,"bt":3244032,"c":[],"cl":2,"dom":1,"frc":1,"h":"xy","i":164,"its":0,"l":13,"n":"","p":"xinyu_164","s":2314045,"v":443,"x":12793382,"y":3206619},{"4k":0,"bb":3172352,"bl":12678144,"br":12931072,"bt":3368960,"c":[],"cl":2,"dom":1,"frc":1,"h":"yc","i":278,"its":0,"l":13,"n":"˴","p":"yichun_278","s":9226537,"v":443,"x":12737614,"y":3206242},{"4k":0,"bb":3209216,"bl":12990464,"br":13078528,"bt":3308544,"c":[],"cl":2,"dom":0,"frc":1,"h":"yt","i":279,"its":0,"l":13,"n":"ӥ̶","p":"yingtan_279","s":2057057,"v":443,"x":13032956,"y":3262116}],"cl":1,"dom":1,"frc":1,"h":"","i":19,"its":0,"l":12,"n":"ʡ","p":"","s":102400,"v":443,"x":14116241,"y":5386659},{"bb":5217424,"bl":13988219,"br":14251713,"bt":5536780,"c":[{"4k":1,"bb":5013504,"bl":13628416,"br":13784064,"bt":5291008,"c":[],"cl":2,"dom":1,"frc":1,"h":"sy","i":58,"its":1,"l":12,"n":"","p":"shenyang_58","s":28363169,"v":443,"x":13741315,"y":5103986},{"4k":0,"bb":4838400,"bl":13601792,"br":13778944,"bt":5069824,"c":[],"cl":2,"dom":1,"frc":1,"h":"as","i":320,"its":0,"l":13,"n":"ɽ","p":"anshan_320","s":5982424,"v":443,"x":13692591,"y":5000938},{"4k":0,"bb":4957184,"bl":13758464,"br":14004224,"bt":5069824,"c":[],"cl":2,"dom":1,"frc":1,"h":"bx","i":227,"its":0,"l":12,"n":"Ϫ","p":"benxi_227","s":3983882,"v":443,"x":13778549,"y":5028203},{"4k":0,"bb":4925440,"bl":13230080,"br":13504512,"bt":5190656,"c":[],"cl":2,"dom":1,"frc":1,"h":"cy","i":280,"its":0,"l":13,"n":"","p":"chaoyang_280","s":6448668,"v":443,"x":13409390,"y":5069570},{"4k":1,"bb":4648960,"bl":13461504,"br":13753344,"bt":4869120,"c":[],"cl":2,"dom":1,"frc":1,"h":"dl","i":167,"its":1,"l":12,"n":"","p":"dalian_167","s":28463882,"v":443,"x":13538978,"y":4683029},{"4k":0,"bb":4793344,"bl":13734912,"br":13996032,"bt":5008384,"c":[],"cl":2,"dom":1,"frc":1,"h":"dd","i":282,"its":0,"l":12,"n":"","p":"dandong_282","s":5955834,"v":443,"x":13847372,"y":4857436},{"4k":0,"bb":5019648,"bl":13767680,"br":13970432,"bt":5204992,"c":[],"cl":2,"dom":1,"frc":1,"h":"fs","i":184,"its":0,"l":12,"n":"˳","p":"fushun_184","s":4302789,"v":443,"x":13799757,"y":5115277},{"4k":0,"bb":5087232,"bl":13471744,"br":13690880,"bt":5260288,"c":[],"cl":2,"dom":1,"frc":1,"h":"fx","i":59,"its":0,"l":14,"n":"","p":"fuxin_59","s":4017874,"v":443,"x":13545115,"y":5136296},{"4k":0,"bb":4832256,"bl":13271040,"br":13481984,"bt":5015552,"c":[],"cl":2,"dom":1,"frc":1,"h":"hld","i":319,"its":0,"l":13,"n":"«","p":"huludao_319","s":5042360,"v":443,"x":13452371,"y":4942605},{"4k":0,"bb":4944896,"bl":13438976,"br":13648896,"bt":5152768,"c":[],"cl":2,"dom":1,"frc":1,"h":"jz","i":166,"its":0,"l":13,"n":"","p":"jinzhou_166","s":4780252,"v":443,"x":13484681,"y":4998877},{"4k":0,"bb":4941824,"bl":13646848,"br":13770752,"bt":5075968,"c":[],"cl":2,"dom":1,"frc":1,"h":"ly","i":351,"its":1,"l":14,"n":"","p":"liaoyang_351","s":3616077,"v":443,"x":13712505,"y":5024558},{"4k":0,"bb":4931584,"bl":13522944,"br":13629440,"bt":5052416,"c":[],"cl":2,"dom":1,"frc":1,"h":"pj","i":228,"its":0,"l":13,"n":"̽","p":"panjin_228","s":5195087,"v":443,"x":13589726,"y":5002567},{"4k":0,"bb":5130240,"bl":13743104,"br":13928448,"bt":5358592,"c":[],"cl":2,"dom":0,"frc":1,"h":"tl","i":60,"its":0,"l":13,"n":"","p":"tieling_60","s":5941933,"v":443,"x":13786935,"y":5175882},{"4k":0,"bb":4827136,"bl":13565952,"br":13694976,"bt":4976640,"c":[],"cl":2,"dom":1,"frc":1,"h":"yk","i":281,"its":0,"l":13,"n":"Ӫ","p":"yingkou_281","s":4158012,"v":443,"x":13608007,"y":4936054}],"cl":1,"dom":1,"frc":1,"h":"","i":20,"its":0,"l":12,"n":"ʡ","p":"","s":102400,"v":443,"x":14116241,"y":5386659},{"bb":5217424,"bl":13988219,"br":14251713,"bt":5536780,"c":[{"4k":1,"bb":4779008,"bl":12303360,"br":12503040,"bt":5042176,"c":[],"cl":2,"dom":1,"frc":1,"h":"hhht","i":321,"its":1,"l":12,"n":"ͺ","p":"huhehaote_321","s":9296994,"v":443,"x":12440951,"y":4961799},{"4k":0,"bb":4469760,"bl":10817536,"br":11897856,"bt":5253120,"c":[],"cl":2,"dom":1,"frc":1,"h":"als","i":230,"its":0,"l":14,"n":"","p":"alashan_230","s":7638841,"v":443,"x":11770534,"y":4674264},{"4k":1,"bb":4874240,"bl":12162048,"br":12407808,"bt":5243904,"c":[],"cl":2,"dom":1,"frc":1,"h":"bt","i":229,"its":0,"l":12,"n":"ͷ","p":"baotou_229","s":9812465,"v":443,"x":12228223,"y":4934685},{"4k":0,"bb":4862976,"bl":11711488,"br":12235776,"bt":5202944,"c":[],"cl":2,"dom":1,"frc":1,"h":"byne","i":169,"its":0,"l":12,"n":"׶","p":"bayannaoer_169","s":8894741,"v":443,"x":11955189,"y":4947297},{"4k":0,"bb":5026816,"bl":12954624,"br":13469696,"bt":5630976,"c":[],"cl":2,"dom":1,"frc":1,"h":"cf","i":297,"its":0,"l":12,"n":"","p":"chifeng_297","s":13115679,"v":443,"x":13235547,"y":5171651},{"4k":0,"bb":4499456,"bl":11852800,"br":12409856,"bt":4968448,"c":[],"cl":2,"dom":1,"frc":1,"h":"eeds","i":283,"its":0,"l":12,"n":"˹","p":"eerduosi_283","s":11680444,"v":443,"x":12221783,"y":4782542},{"4k":0,"bb":5926912,"bl":12861440,"br":14035968,"bt":7012352,"c":[],"cl":2,"dom":1,"frc":1,"h":"hlbe","i":61,"its":0,"l":12,"n":"ױ","p":"hulunbeier_61","s":16140034,"v":443,"x":13333126,"y":6279265},{"4k":0,"bb":5169152,"bl":13274112,"br":13773824,"bt":5700608,"c":[],"cl":2,"dom":1,"frc":1,"h":"tl","i":64,"its":0,"l":12,"n":"ͨ","p":"tongliao_64","s":7599414,"v":443,"x":13611422,"y":5377940},{"4k":0,"bb":4700160,"bl":11866112,"br":11932672,"bt":4826112,"c":[],"cl":2,"dom":1,"frc":1,"h":"wh","i":123,"its":0,"l":13,"n":"ں","p":"wuhai_123","s":1125745,"v":443,"x":11888982,"y":4789144},{"4k":0,"bb":4861952,"bl":12282880,"br":12782592,"bt":5342208,"c":[],"cl":2,"dom":1,"frc":1,"h":"wlcb","i":168,"its":0,"l":12,"n":"첼","p":"wulanchabu_168","s":8024963,"v":443,"x":12594855,"y":4984080},{"4k":0,"bb":5069824,"bl":12374016,"br":13373440,"bt":5875712,"c":[],"cl":2,"dom":1,"frc":1,"h":"xlgl","i":63,"its":0,"l":11,"n":"ֹ","p":"xilinguole_63","s":9231491,"v":443,"x":12919227,"y":5426157},{"4k":0,"bb":5475328,"bl":13300736,"br":13765632,"bt":6020096,"c":[],"cl":2,"dom":0,"frc":1,"h":"xa","i":62,"its":0,"l":11,"n":"˰","p":"xingan_62","s":6085341,"v":443,"x":13589292,"y":5762674}],"cl":1,"dom":1,"frc":1,"h":"","i":21,"its":0,"l":12,"n":"ɹ","p":"","s":102400,"v":443,"x":14116241,"y":5386659},{"bb":5217424,"bl":13988219,"br":14251713,"bt":5536780,"c":[{"4k":1,"bb":4481024,"bl":11782144,"br":11897856,"bt":4677632,"c":[],"cl":2,"dom":1,"frc":1,"h":"yc","i":360,"its":0,"l":12,"n":"","p":"yinchuan_360","s":7210671,"v":443,"x":11826597,"y":4622375},{"4k":0,"bb":4171776,"bl":11724800,"br":11908096,"bt":4363264,"c":[],"cl":2,"dom":1,"frc":1,"h":"gy","i":246,"its":0,"l":13,"n":"ԭ","p":"guyuan_246","s":3536198,"v":443,"x":11827732,"y":4278232},{"4k":0,"bb":4640768,"bl":11798528,"br":11911168,"bt":4752384,"c":[],"cl":2,"dom":1,"frc":1,"h":"szs","i":335,"its":0,"l":13,"n":"ʯɽ","p":"shizuishan_335","s":1898404,"v":443,"x":11841713,"y":4698079},{"4k":0,"bb":4354048,"bl":11755520,"br":11985920,"bt":4591616,"c":[],"cl":2,"dom":1,"frc":1,"h":"wz","i":322,"its":0,"l":14,"n":"","p":"wuzhong_322","s":3770258,"v":443,"x":11822833,"y":4553416},{"4k":0,"bb":4292608,"bl":11610112,"br":11820032,"bt":4519936,"c":[],"cl":2,"dom":1,"frc":1,"h":"zw","i":181,"its":0,"l":14,"n":"","p":"zhongwei_181","s":2838162,"v":443,"x":11711309,"y":4483610}],"cl":1,"dom":1,"frc":1,"h":"","i":22,"its":0,"l":12,"n":"Ļ","p":"","s":102400,"v":443,"x":14116241,"y":5386659},{"bb":5217424,"bl":13988219,"br":14251713,"bt":5536780,"c":[{"4k":1,"bb":4306944,"bl":11233280,"br":11345920,"bt":4470784,"c":[],"cl":2,"dom":1,"frc":1,"h":"xn","i":66,"its":0,"l":12,"n":"","p":"xining_66","s":4808649,"v":443,"x":11330696,"y":4361026},{"4k":0,"bb":3808256,"bl":10796032,"br":11331584,"bt":4219904,"c":[],"cl":2,"dom":0,"frc":1,"h":"glzzzz","i":72,"its":0,"l":11,"n":"","p":"guoluozangzuzizhi_72","s":11958655,"v":443,"x":11160049,"y":4068648},{"4k":0,"bb":4376576,"bl":10919936,"br":11427840,"bt":4708352,"c":[],"cl":2,"dom":1,"frc":1,"h":"hbzzzz","i":67,"its":0,"l":11,"n":"","p":"haibeizangzuzizhi_67","s":7070659,"v":443,"x":11233081,"y":4407700},{"4k":0,"bb":4200448,"bl":11318272,"br":11474944,"bt":4434944,"c":[],"cl":2,"dom":1,"frc":1,"h":"hdd","i":69,"its":0,"l":11,"n":"","p":"haidongdi_69","s":3981388,"v":443,"x":11367014,"y":4345117},{"4k":0,"bb":4090880,"bl":11013120,"br":11333632,"bt":4447232,"c":[],"cl":2,"dom":0,"frc":1,"h":"hnzzzz","i":68,"its":0,"l":11,"n":"ϲ","p":"hainanzangzuzizhi_68","s":9253674,"v":443,"x":11201876,"y":4315366},{"4k":0,"bb":3834880,"bl":9978880,"br":11109376,"bt":4727808,"c":[],"cl":2,"dom":1,"frc":1,"h":"hxmgzzzzz","i":65,"its":0,"l":11,"n":"ɹ","p":"haiximengguzuzangzuzizhi_65","s":38650147,"v":443,"x":10839989,"y":4466394},{"4k":0,"bb":4014080,"bl":11208704,"br":11406336,"bt":4299776,"c":[],"cl":2,"dom":0,"frc":1,"h":"hnzzzz","i":70,"its":0,"l":11,"n":"ϲ","p":"huangnanzangzuzizhi_70","s":4650554,"v":443,"x":11357143,"y":4210539},{"4k":0,"bb":3688448,"bl":9953280,"br":10886144,"bt":4315136,"c":[],"cl":2,"dom":0,"frc":1,"h":"yszzzz","i":71,"its":0,"l":14,"n":"","p":"yushuzangzuzizhi_71","s":11173441,"v":443,"x":10799563,"y":3873278}],"cl":1,"dom":1,"frc":1,"h":"","i":23,"its":0,"l":12,"n":"ຣʡ","p":"","s":102400,"v":443,"x":14116241,"y":5386659},{"bb":5217424,"bl":13988219,"br":14251713,"bt":5536780,"c":[{"4k":1,"bb":4279296,"bl":12938240,"br":13109248,"bt":4489216,"c":[],"cl":2,"dom":1,"frc":1,"h":"jn","i":288,"its":1,"l":12,"n":"","p":"jinan_288","s":16838138,"v":443,"x":13024668,"y":4367676},{"4k":0,"bb":4370432,"bl":13053952,"br":13179904,"bt":4597760,"c":[],"cl":2,"dom":1,"frc":1,"h":"bz","i":235,"its":0,"l":12,"n":"","p":"binzhou_235","s":6487840,"v":443,"x":13133505,"y":4467148},{"4k":0,"bb":4331520,"bl":12887040,"br":13092864,"bt":4555776,"c":[],"cl":2,"dom":1,"frc":1,"h":"dz","i":372,"its":0,"l":12,"n":"","p":"dezhou_372","s":8660838,"v":443,"x":12953925,"y":4474579},{"4k":0,"bb":4405248,"bl":13148160,"br":13286400,"bt":4577280,"c":[],"cl":2,"dom":1,"frc":1,"h":"dy","i":174,"its":0,"l":12,"n":"Ӫ","p":"dongying_174","s":4988634,"v":443,"x":13211657,"y":4474396},{"4k":0,"bb":4078592,"bl":12782592,"br":12960768,"bt":4257792,"c":[],"cl":2,"dom":1,"frc":1,"h":"hz","i":353,"its":0,"l":13,"n":"","p":"heze_353","s":7802806,"v":443,"x":12856115,"y":4171574},{"4k":0,"bb":4065280,"bl":12898304,"br":13091840,"bt":4274176,"c":[],"cl":2,"dom":1,"frc":1,"h":"jn","i":286,"its":0,"l":13,"n":"","p":"jining_286","s":9574696,"v":443,"x":12979309,"y":4196147},{"4k":0,"bb":4274176,"bl":13061120,"br":13133824,"bt":4353024,"c":[],"cl":2,"dom":1,"frc":1,"h":"lw","i":124,"its":0,"l":13,"n":"","p":"laiwu_124","s":2079976,"v":443,"x":13100578,"y":4305364},{"4k":0,"bb":4245504,"bl":12833792,"br":12975104,"bt":4417536,"c":[],"cl":2,"dom":1,"frc":1,"h":"lc","i":366,"its":0,"l":12,"n":"ij","p":"liaocheng_366","s":6510388,"v":443,"x":12912298,"y":4338843},{"4k":1,"bb":4056064,"bl":13071360,"br":13271040,"bt":4304896,"c":[],"cl":2,"dom":1,"frc":1,"h":"ly","i":234,"its":0,"l":12,"n":"","p":"linyi_234","s":21283578,"v":443,"x":13176250,"y":4154108},{"4k":1,"bb":4210688,"bl":13304832,"br":13516800,"bt":4434944,"c":[],"cl":2,"dom":1,"frc":1,"h":"qd","i":236,"its":1,"l":12,"n":"ൺ","p":"qingdao_236","s":27085613,"v":443,"x":13401836,"y":4285189},{"4k":0,"bb":4133888,"bl":13203456,"br":13353984,"bt":4282368,"c":[],"cl":2,"dom":1,"frc":1,"h":"rz","i":173,"its":0,"l":12,"n":"","p":"rizhao_173","s":4828499,"v":443,"x":13306565,"y":4196491},{"4k":0,"bb":4225024,"bl":12918784,"br":13136896,"bt":4341760,"c":[],"cl":2,"dom":1,"frc":1,"h":"ta","i":325,"its":0,"l":13,"n":"̩","p":"taian_325","s":6803379,"v":443,"x":13035086,"y":4303515},{"4k":1,"bb":4236288,"bl":13155328,"br":13361152,"bt":4460544,"c":[],"cl":2,"dom":1,"frc":1,"h":"wf","i":287,"its":0,"l":12,"n":"Ϋ","p":"weifang_287","s":20995519,"v":443,"x":13265880,"y":4373425},{"4k":1,"bb":4368384,"bl":13490176,"br":13663232,"bt":4499456,"c":[],"cl":2,"dom":1,"frc":1,"h":"wh","i":175,"its":0,"l":13,"n":"","p":"weihai_175","s":9357958,"v":443,"x":13595391,"y":4485484},{"4k":1,"bb":4353024,"bl":13308928,"br":13574144,"bt":4619264,"c":[],"cl":2,"dom":1,"frc":1,"h":"yt","i":326,"its":1,"l":12,"n":"̨","p":"yantai_326","s":19575665,"v":443,"x":13520355,"y":4478575},{"4k":0,"bb":4067328,"bl":13003776,"br":13118464,"bt":4184064,"c":[],"cl":2,"dom":1,"frc":1,"h":"zz","i":172,"its":0,"l":13,"n":"ׯ","p":"zaozhuang_172","s":4137626,"v":443,"x":13061296,"y":4114535},{"4k":0,"bb":4264960,"bl":13085696,"br":13195264,"bt":4454400,"c":[],"cl":2,"dom":1,"frc":1,"h":"zb","i":354,"its":0,"l":12,"n":"Ͳ","p":"zibo_354","s":6365432,"v":443,"x":13142661,"y":4388086}],"cl":1,"dom":1,"frc":1,"h":"","i":24,"its":0,"l":12,"n":"ɽʡ","p":"","s":102400,"v":443,"x":14116241,"y":5386659},{"bb":5217424,"bl":13988219,"br":14251713,"bt":5536780,"c":[{"4k":1,"bb":4476928,"bl":12413952,"br":12598272,"bt":4614144,"c":[],"cl":2,"dom":1,"frc":1,"h":"ty","i":176,"its":1,"l":12,"n":"̫ԭ","p":"taiyuan_176","s":8745952,"v":443,"x":12529931,"y":4535569},{"4k":0,"bb":4251648,"bl":12466176,"br":12662784,"bt":4431872,"c":[],"cl":2,"dom":1,"frc":1,"h":"cz","i":356,"its":0,"l":12,"n":"","p":"changzhi_356","s":5625388,"v":443,"x":12592912,"y":4302899},{"4k":0,"bb":4702208,"bl":12532736,"br":12753920,"bt":4947968,"c":[],"cl":2,"dom":1,"frc":1,"h":"dt","i":355,"its":0,"l":12,"n":"ͬ","p":"datong_355","s":5776393,"v":443,"x":12613353,"y":4850173},{"4k":0,"bb":4166656,"bl":12461056,"br":12650496,"bt":4285440,"c":[],"cl":2,"dom":1,"frc":1,"h":"jc","i":290,"its":0,"l":13,"n":"","p":"jincheng_290","s":4068413,"v":443,"x":12563313,"y":4206695},{"4k":0,"bb":4364288,"bl":12402688,"br":12707840,"bt":4567040,"c":[],"cl":2,"dom":1,"frc":1,"h":"jz","i":238,"its":0,"l":13,"n":"","p":"jinzhong_238","s":6172798,"v":443,"x":12552450,"y":4509743},{"4k":0,"bb":4192256,"bl":12286976,"br":12532736,"bt":4405248,"c":[],"cl":2,"dom":1,"frc":1,"h":"lf","i":368,"its":0,"l":13,"n":"ٷ","p":"linfen_368","s":7428827,"v":443,"x":12415097,"y":4288128},{"4k":0,"bb":4376576,"bl":12286976,"br":12506112,"bt":4657152,"c":[],"cl":2,"dom":1,"frc":1,"h":"ll","i":327,"its":0,"l":14,"n":"","p":"lvliang_327","s":6392069,"v":443,"x":12373327,"y":4486172},{"4k":0,"bb":4707328,"bl":12456960,"br":12644352,"bt":4883456,"c":[],"cl":2,"dom":1,"frc":1,"h":"sz","i":237,"its":0,"l":13,"n":"˷","p":"shuozhou_237","s":3484028,"v":443,"x":12516820,"y":4742727},{"4k":0,"bb":4572160,"bl":12350464,"br":12688384,"bt":4791296,"c":[],"cl":2,"dom":1,"frc":1,"h":"xz","i":367,"its":0,"l":12,"n":"","p":"xinzhou_367","s":7582784,"v":443,"x":12550385,"y":4612464},{"4k":0,"bb":4505600,"bl":12570624,"br":12696576,"bt":4628480,"c":[],"cl":2,"dom":1,"frc":1,"h":"yq","i":357,"its":0,"l":13,"n":"Ȫ","p":"yangquan_357","s":1943196,"v":443,"x":12644594,"y":4533526},{"4k":0,"bb":4083712,"bl":12269568,"br":12478464,"bt":4252672,"c":[],"cl":2,"dom":1,"frc":1,"h":"yc","i":328,"its":0,"l":13,"n":"˳","p":"yuncheng_328","s":6149907,"v":443,"x":12358087,"y":4143555}],"cl":1,"dom":1,"frc":1,"h":"","i":25,"its":0,"l":12,"n":"ɽʡ","p":"","s":102400,"v":443,"x":14116241,"y":5386659},{"bb":5217424,"bl":13988219,"br":14251713,"bt":5536780,"c":[{"4k":1,"bb":3963904,"bl":11981824,"br":12226560,"bt":4106240,"c":[],"cl":2,"dom":1,"frc":1,"h":"xa","i":233,"its":1,"l":12,"n":"","p":"xian_233","s":19768928,"v":443,"x":12128454,"y":4040988},{"4k":0,"bb":3701760,"bl":12025856,"br":12269568,"bt":3984384,"c":[],"cl":2,"dom":1,"frc":1,"h":"ak","i":324,"its":0,"l":13,"n":"","p":"ankang_324","s":6444051,"v":443,"x":12137954,"y":3831013},{"4k":0,"bb":3948544,"bl":11834368,"br":12029952,"bt":4154368,"c":[],"cl":2,"dom":1,"frc":1,"h":"bj","i":171,"its":0,"l":12,"n":"","p":"baoji_171","s":5500413,"v":443,"x":11938466,"y":4053945},{"4k":0,"bb":3760128,"bl":11743232,"br":12055552,"bt":3989504,"c":[],"cl":2,"dom":1,"frc":1,"h":"hz","i":352,"its":0,"l":13,"n":"","p":"hanzhong_352","s":6682721,"v":443,"x":11914640,"y":3881567},{"4k":0,"bb":3885056,"bl":12087296,"br":12361728,"bt":4064256,"c":[],"cl":2,"dom":1,"frc":1,"h":"sl","i":285,"its":0,"l":13,"n":"","p":"shangluo_285","s":5335580,"v":443,"x":12239364,"y":3988197},{"4k":0,"bb":4113408,"bl":12087296,"br":12190720,"bt":4219904,"c":[],"cl":2,"dom":1,"frc":1,"h":"tc","i":232,"its":0,"l":13,"n":"ͭ","p":"tongchuan_232","s":1955348,"v":443,"x":12128563,"y":4126025},{"4k":0,"bb":4032512,"bl":12130304,"br":12313600,"bt":4256768,"c":[],"cl":2,"dom":1,"frc":1,"h":"wn","i":170,"its":0,"l":13,"n":"μ","p":"weinan_170","s":5966079,"v":443,"x":12191480,"y":4072478},{"4k":1,"bb":4031488,"bl":11983872,"br":12154880,"bt":4214784,"c":[],"cl":2,"dom":0,"frc":1,"h":"xy","i":323,"its":0,"l":13,"n":"","p":"xianyang_323","s":9490418,"v":443,"x":12102309,"y":4049630},{"4k":0,"bb":4186112,"bl":11984896,"br":12308480,"bt":4484096,"c":[],"cl":2,"dom":1,"frc":1,"h":"ya","i":284,"its":0,"l":13,"n":"Ӱ","p":"yanan_284","s":9106137,"v":443,"x":12189211,"y":4356543},{"4k":0,"bb":4388864,"bl":11940864,"br":12385280,"bt":4780032,"c":[],"cl":2,"dom":1,"frc":1,"h":"yl","i":231,"its":0,"l":12,"n":"","p":"yulin_231","s":13582145,"v":443,"x":12216466,"y":4593876}],"cl":1,"dom":1,"frc":1,"h":"","i":26,"its":0,"l":12,"n":"ʡ","p":"","s":102400,"v":443,"x":14116241,"y":5386659},{"bb":5217424,"bl":13988219,"br":14251713,"bt":5536780,"c":[{"4k":1,"bb":3493888,"bl":11468800,"br":11677696,"bt":3667968,"c":[],"cl":2,"dom":1,"frc":1,"h":"cd","i":75,"its":1,"l":12,"n":"ɶ","p":"chengdu_75","s":45254735,"v":443,"x":11585284,"y":3567299},{"4k":0,"bb":3558400,"bl":11191296,"br":11627520,"bt":4047872,"c":[],"cl":2,"dom":0,"frc":1,"h":"abzzqzzz","i":185,"its":0,"l":15,"n":"ӲǼ","p":"abazangzuqiangzuzizhi_185","s":7102224,"v":443,"x":11380447,"y":3728135},{"4k":0,"bb":3643392,"bl":11841536,"br":11997184,"bt":3838976,"c":[],"cl":2,"dom":1,"frc":1,"h":"bz","i":239,"its":0,"l":14,"n":"","p":"bazhong_239","s":5008528,"v":443,"x":11883644,"y":3723601},{"4k":0,"bb":3523584,"bl":11874304,"br":12085248,"bt":3785728,"c":[],"cl":2,"dom":0,"frc":1,"h":"dz","i":369,"its":0,"l":14,"n":"","p":"dazhou_369","s":6564909,"v":443,"x":11964137,"y":3638270},{"4k":0,"bb":3549184,"bl":11554816,"br":11709440,"bt":3702784,"c":[],"cl":2,"dom":1,"frc":1,"h":"dy","i":74,"its":0,"l":13,"n":"","p":"deyang_74","s":5519214,"v":443,"x":11622361,"y":3627752},{"4k":0,"bb":3223552,"bl":10838016,"br":11411456,"bt":4032512,"c":[],"cl":2,"dom":0,"frc":1,"h":"gzzzzz","i":73,"its":0,"l":15,"n":"β","p":"ganzizangzuzizhi_73","s":12172659,"v":443,"x":11351269,"y":3489052},{"4k":0,"bb":3484672,"bl":11794432,"br":11947008,"bt":3593216,"c":[],"cl":2,"dom":1,"frc":1,"h":"ga","i":241,"its":0,"l":13,"n":"㰲","p":"guangan_241","s":4387229,"v":443,"x":11871214,"y":3541176},{"4k":0,"bb":3679232,"bl":11645952,"br":11886592,"bt":3864576,"c":[],"cl":2,"dom":1,"frc":1,"h":"gy","i":329,"its":0,"l":13,"n":"Ԫ","p":"guangyuan_329","s":5954146,"v":443,"x":11783826,"y":3798100},{"4k":0,"bb":3281920,"bl":11456512,"br":11607040,"bt":3474432,"c":[],"cl":2,"dom":1,"frc":1,"h":"ls","i":79,"its":0,"l":13,"n":"ɽ","p":"leshan_79","s":5958387,"v":443,"x":11551963,"y":3425607},{"4k":0,"bb":2985984,"bl":11139072,"br":11565056,"bt":3394560,"c":[],"cl":2,"dom":1,"frc":1,"h":"lsyzzz","i":80,"its":0,"l":14,"n":"ɽ","p":"liangshanyizuzizhi_80","s":10954878,"v":443,"x":11385209,"y":3214652},{"4k":0,"bb":3186688,"bl":11705344,"br":11843584,"bt":3397632,"c":[],"cl":2,"dom":1,"frc":1,"h":"lz","i":331,"its":0,"l":14,"n":"","p":"luzhou_331","s":6593357,"v":443,"x":11738667,"y":3339250},{"4k":0,"bb":3405824,"bl":11449344,"br":11634688,"bt":3529728,"c":[],"cl":2,"dom":1,"frc":1,"h":"ms","i":77,"its":0,"l":13,"n":"üɽ","p":"meishan_77","s":6018178,"v":443,"x":11561223,"y":3492386},{"4k":0,"bb":3572736,"bl":11549696,"br":11770880,"bt":3878912,"c":[],"cl":2,"dom":1,"frc":1,"h":"my","i":240,"its":0,"l":12,"n":"","p":"mianyang_240","s":10000441,"v":443,"x":11653672,"y":3671857},{"4k":0,"bb":3540992,"bl":11738112,"br":11909120,"bt":3722240,"c":[],"cl":2,"dom":1,"frc":1,"h":"nc","i":291,"its":0,"l":13,"n":"ϳ","p":"nanchong_291","s":7168803,"v":443,"x":11813044,"y":3590306},{"4k":0,"bb":3378176,"bl":11608064,"br":11739136,"bt":3488768,"c":[],"cl":2,"dom":1,"frc":1,"h":"nj","i":248,"its":0,"l":13,"n":"ڽ","p":"neijiang_248","s":5209746,"v":443,"x":11695912,"y":3429133},{"4k":0,"bb":2990080,"bl":11258880,"br":11383808,"bt":3147776,"c":[],"cl":2,"dom":1,"frc":1,"h":"pzh","i":81,"its":0,"l":14,"n":"֦","p":"panzhihua_81","s":2294330,"v":443,"x":11324127,"y":3052807},{"4k":0,"bb":3505152,"bl":11695104,"br":11801600,"bt":3633152,"c":[],"cl":2,"dom":1,"frc":1,"h":"sn","i":330,"its":0,"l":12,"n":"","p":"suining_330","s":3956497,"v":443,"x":11755372,"y":3551098},{"4k":0,"bb":3336192,"bl":11347968,"br":11510784,"bt":3603456,"c":[],"cl":2,"dom":1,"frc":1,"h":"ya","i":76,"its":0,"l":13,"n":"Ű","p":"yaan_76","s":3181628,"v":443,"x":11468242,"y":3480229},{"4k":0,"bb":3209216,"bl":11534336,"br":11729920,"bt":3389440,"c":[],"cl":2,"dom":1,"frc":1,"h":"yb","i":186,"its":0,"l":13,"n":"˱","p":"yibin_186","s":6197878,"v":443,"x":11649662,"y":3324141},{"4k":0,"bb":3345408,"bl":11583488,"br":11719680,"bt":3436544,"c":[],"cl":2,"dom":1,"frc":1,"h":"zg","i":78,"its":0,"l":13,"n":"Թ","p":"zigong_78","s":4082725,"v":443,"x":11664727,"y":3398547},{"4k":0,"bb":3440640,"bl":11598848,"br":11773952,"bt":3565568,"c":[],"cl":2,"dom":1,"frc":1,"h":"zy","i":242,"its":0,"l":13,"n":"","p":"ziyang_242","s":6640665,"v":443,"x":11647963,"y":3499239}],"cl":1,"dom":1,"frc":1,"h":"","i":27,"its":0,"l":12,"n":"Ĵʡ","p":"","s":102400,"v":443,"x":14116241,"y":5386659},{"bb":5217424,"bl":13988219,"br":14251713,"bt":5536780,"c":[{"4k":0,"bb":3385344,"bl":9991168,"br":10311680,"bt":3618816,"c":[],"cl":2,"dom":1,"frc":1,"h":"ls","i":100,"its":0,"l":13,"n":"","p":"lasa_100","s":2862993,"v":443,"x":10143660,"y":3437317},{"4k":0,"bb":3440640,"bl":8727552,"br":9611264,"bt":4257792,"c":[],"cl":2,"dom":1,"frc":1,"h":"ald","i":103,"its":0,"l":11,"n":"","p":"alidi_103","s":7036394,"v":443,"x":9033918,"y":3534102},{"4k":0,"bb":3283968,"bl":10419200,"br":11034624,"bt":3819520,"c":[],"cl":2,"dom":0,"frc":1,"h":"cdd","i":99,"its":0,"l":15,"n":"","p":"changdudi_99","s":5867294,"v":443,"x":10818907,"y":3629222},{"4k":0,"bb":3173376,"bl":10259456,"br":10994688,"bt":3569664,"c":[],"cl":2,"dom":1,"frc":1,"h":"lzd","i":98,"its":0,"l":11,"n":"֥","p":"linzhidi_98","s":3147891,"v":443,"x":10505019,"y":3438953},{"4k":0,"bb":3474432,"bl":9467904,"br":10578944,"bt":4342784,"c":[],"cl":2,"dom":0,"frc":1,"h":"nqd","i":101,"its":0,"l":14,"n":"","p":"naqudi_101","s":11738338,"v":443,"x":10248183,"y":3672219},{"4k":0,"bb":3085312,"bl":10027008,"br":10505216,"bt":3461120,"c":[],"cl":2,"dom":0,"frc":1,"h":"snd","i":97,"its":0,"l":11,"n":"ɽϵ","p":"shannandi_97","s":3572372,"v":443,"x":10217258,"y":3384056},{"4k":0,"bb":3130368,"bl":9144320,"br":10058752,"bt":3716096,"c":[],"cl":2,"dom":0,"frc":1,"h":"rkzd","i":102,"its":0,"l":14,"n":"տ","p":"rikazedi_102","s":8276766,"v":443,"x":9895063,"y":3389320}],"cl":1,"dom":1,"frc":1,"h":"","i":28,"its":0,"l":12,"n":"","p":"","s":102400,"v":443,"x":14116241,"y":5386659},{"bb":5217424,"bl":13988219,"br":14251713,"bt":5536780,"c":[{"4k":1,"bb":5270528,"bl":9661440,"br":9906176,"bt":5593088,"c":[],"cl":2,"dom":1,"frc":1,"h":"wlmq","i":92,"its":1,"l":12,"n":"³ľ","p":"wulumuqi_92","s":7677822,"v":443,"x":9754269,"y":5409691},{"4k":0,"bb":4761600,"bl":8686592,"br":9362432,"bt":5230592,"c":[],"cl":2,"dom":0,"frc":1,"h":"aksd","i":85,"its":0,"l":12,"n":"յ","p":"akesudi_85","s":5550873,"v":443,"x":8935353,"y":5009764},{"4k":0,"bb":5592064,"bl":9521152,"br":10139648,"bt":6274048,"c":[],"cl":2,"dom":1,"frc":1,"h":"altd","i":96,"its":0,"l":13,"n":"̩","p":"aletaidi_96","s":5261930,"v":443,"x":9812684,"y":6050051},{"4k":0,"bb":4226048,"bl":9181184,"br":10450944,"bt":5369856,"c":[],"cl":2,"dom":1,"frc":1,"h":"byglmgzz","i":86,"its":0,"l":11,"n":"ɹ","p":"bayinguolengmengguzizhi_86","s":8924366,"v":443,"x":9590454,"y":5097890},{"4k":0,"bb":5436416,"bl":8893440,"br":9330688,"bt":5653504,"c":[],"cl":2,"dom":1,"frc":1,"h":"betlmgzz","i":88,"its":0,"l":11,"n":"ɹ","p":"boertalamengguzizhi_88","s":1938832,"v":443,"x":9136431,"y":5577250},{"4k":0,"bb":5298176,"bl":9527296,"br":10196992,"bt":5668864,"c":[],"cl":2,"dom":1,"frc":1,"h":"cjhzzz","i":93,"its":0,"l":13,"n":"","p":"changjihuizuzizhi_93","s":4916991,"v":443,"x":9719947,"y":5438089},{"4k":0,"bb":4947968,"bl":10149888,"br":10731520,"bt":5606400,"c":[],"cl":2,"dom":1,"frc":1,"h":"hmd","i":91,"its":0,"l":13,"n":"ܵ","p":"hamidi_91","s":3753660,"v":443,"x":10411021,"y":5255998},{"4k":0,"bb":4049920,"bl":8616960,"br":9454592,"bt":4787200,"c":[],"cl":2,"dom":0,"frc":1,"h":"htd","i":82,"its":0,"l":13,"n":"","p":"hetiandi_82","s":4859903,"v":443,"x":8897738,"y":4429897},{"4k":0,"bb":4200448,"bl":8289280,"br":8892416,"bt":4877312,"c":[],"cl":2,"dom":1,"frc":1,"h":"ksd","i":83,"its":0,"l":12,"n":"ʲ","p":"kashidi_83","s":7775267,"v":443,"x":8459955,"y":4762725},{"4k":0,"bb":5452800,"bl":9412608,"br":9578496,"bt":5784576,"c":[],"cl":2,"dom":1,"frc":1,"h":"klmy","i":95,"its":0,"l":13,"n":"","p":"kelamayi_95","s":1589154,"v":443,"x":9450656,"y":5683314},{"4k":0,"bb":4504576,"bl":8181760,"br":8781824,"bt":5044224,"c":[],"cl":2,"dom":0,"frc":1,"h":"kzlskekzzz","i":84,"its":0,"l":11,"n":"տ¶","p":"kezilesukeerkezizizhi_84","s":2886557,"v":443,"x":8479646,"y":4797955},{"4k":0,"bb":5356544,"bl":9156608,"br":9723904,"bt":5950464,"c":[],"cl":2,"dom":1,"frc":1,"h":"tcd","i":94,"its":0,"l":12,"n":"ǵ","p":"tachengdi_94","s":7783869,"v":443,"x":9238182,"y":5870117},{"4k":0,"bb":5012480,"bl":9713664,"br":10233856,"bt":5381120,"c":[],"cl":2,"dom":1,"frc":1,"h":"tlfd","i":89,"its":0,"l":13,"n":"³","p":"tulufandi_89","s":2572224,"v":443,"x":9929357,"y":5276094},{"4k":0,"bb":4783104,"bl":8756224,"br":9765888,"bt":5529600,"c":[],"cl":2,"dom":0,"frc":1,"h":"xjwwezzqzxxjxzd","i":87,"its":0,"l":13,"n":"½ֱϽؼλ","p":"xinjiangweiwuerzizhiquzhixiaxianjixingzhengdan_87","s":1721746,"v":443,"x":9260975,"y":5156288},{"4k":0,"bb":5171200,"bl":8924160,"br":9491456,"bt":5567488,"c":[],"cl":2,"dom":1,"frc":1,"h":"ylhskzz","i":90,"its":0,"l":11,"n":"","p":"yilihasakezizhi_90","s":4895655,"v":443,"x":9053790,"y":5423584}],"cl":1,"dom":1,"frc":1,"h":"","i":29,"its":0,"l":12,"n":"½ά","p":"","s":102400,"v":443,"x":14116241,"y":5386659},{"bb":5217424,"bl":13988219,"br":14251713,"bt":5536780,"c":[{"4k":1,"bb":2783232,"bl":11373568,"br":11542528,"bt":3048448,"c":[],"cl":2,"dom":1,"frc":1,"h":"km","i":104,"its":1,"l":12,"n":"","p":"kunming_104","s":24417098,"v":443,"x":11435821,"y":2862927},{"4k":0,"bb":2750464,"bl":10919936,"br":11139072,"bt":2963456,"c":[],"cl":2,"dom":1,"frc":1,"h":"bs","i":112,"its":0,"l":13,"n":"ɽ","p":"baoshan_112","s":5442583,"v":443,"x":11039493,"y":2871929},{"4k":0,"bb":2762752,"bl":11212800,"br":11409408,"bt":3043328,"c":[],"cl":2,"dom":1,"frc":1,"h":"cxyzzz","i":105,"its":0,"l":13,"n":"","p":"chuxiongyizuzizhi_105","s":9746491,"v":443,"x":11302848,"y":2863778},{"4k":0,"bb":2816000,"bl":11005952,"br":11249664,"bt":3067904,"c":[],"cl":2,"dom":1,"frc":1,"h":"dlbzzz","i":111,"its":0,"l":14,"n":"","p":"dalibaizuzizhi_111","s":8417989,"v":443,"x":11162596,"y":2932491},{"4k":0,"bb":2716672,"bl":10857472,"br":10991616,"bt":2899968,"c":[],"cl":2,"dom":0,"frc":1,"h":"dhdzjpzzz","i":116,"its":0,"l":14,"n":"º徰","p":"dehongdaizujingpozuzizhi_116","s":2997453,"v":443,"x":10975266,"y":2789038},{"4k":0,"bb":3087360,"bl":10976256,"br":11167744,"bt":3387392,"c":[],"cl":2,"dom":1,"frc":1,"h":"dqzzzz","i":115,"its":0,"l":14,"n":"","p":"diqingzangzuzizhi_115","s":3259958,"v":443,"x":11099728,"y":3206834},{"4k":0,"bb":2548736,"bl":11332608,"br":11610112,"bt":2830336,"c":[],"cl":2,"dom":1,"frc":1,"h":"hhhnzyzzz","i":107,"its":0,"l":11,"n":"ӹ","p":"honghehanizuyizuzizhi_107","s":8798248,"v":443,"x":11508573,"y":2659713},{"4k":0,"bb":2978816,"bl":11063296,"br":11301888,"bt":3220480,"c":[],"cl":2,"dom":1,"frc":1,"h":"lj","i":114,"its":0,"l":13,"n":"","p":"lijiang_114","s":4535977,"v":443,"x":11158143,"y":3086669},{"4k":0,"bb":2624512,"bl":10984448,"br":11194368,"bt":2863104,"c":[],"cl":2,"dom":1,"frc":1,"h":"lc","i":110,"its":0,"l":14,"n":"ٲ","p":"lincang_110","s":6633324,"v":443,"x":11141636,"y":2721816},{"4k":0,"bb":2924544,"bl":10924032,"br":11094016,"bt":3279872,"c":[],"cl":2,"dom":0,"frc":1,"h":"njlszzz","i":113,"its":0,"l":14,"n":"ŭ","p":"nujianglisuzuzizhi_113","s":1849582,"v":443,"x":11005519,"y":2958484},{"4k":0,"bb":2498560,"bl":11038720,"br":11392000,"bt":2837504,"c":[],"cl":2,"dom":1,"frc":1,"h":"pe","i":108,"its":0,"l":14,"n":"ն","p":"puer_108","s":10501691,"v":443,"x":11240814,"y":2589148},{"4k":0,"bb":2778112,"bl":11471872,"br":11670528,"bt":3111936,"c":[],"cl":2,"dom":1,"frc":1,"h":"qj","i":249,"its":0,"l":12,"n":"","p":"qujing_249","s":8624952,"v":443,"x":11555387,"y":2918272},{"4k":0,"bb":2577408,"bl":11530240,"br":11823104,"bt":2792448,"c":[],"cl":2,"dom":0,"frc":1,"h":"wszzmzzz","i":177,"its":0,"l":14,"n":"ɽ׳","p":"wenshanzhuangzumiaozuzizhi_177","s":7263943,"v":443,"x":11606072,"y":2660262},{"4k":0,"bb":2393088,"bl":11125760,"br":11338752,"bt":2567168,"c":[],"cl":2,"dom":1,"frc":1,"h":"xsbndzzz","i":109,"its":0,"l":14,"n":"˫ɴ","p":"xishuangbannadaizuzizhi_109","s":3432080,"v":443,"x":11221599,"y":2496994},{"4k":0,"bb":2653184,"bl":11274240,"br":11484160,"bt":2852864,"c":[],"cl":2,"dom":1,"frc":1,"h":"yx","i":106,"its":0,"l":13,"n":"Ϫ","p":"yuxi_106","s":7001400,"v":443,"x":11416289,"y":2779266},{"4k":0,"bb":3046400,"bl":11452416,"br":11724800,"bt":3313664,"c":[],"cl":2,"dom":1,"frc":1,"h":"zt","i":336,"its":0,"l":13,"n":"ͨ","p":"zhaotong_336","s":7749517,"v":443,"x":11546551,"y":3146717}],"cl":1,"dom":1,"frc":1,"h":"","i":30,"its":0,"l":12,"n":"ʡ","p":"","s":102400,"v":443,"x":14116241,"y":5386659},{"bb":5217424,"bl":13988219,"br":14251713,"bt":5536780,"c":[{"4k":1,"bb":3379200,"bl":13174784,"br":13440000,"bt":3556352,"c":[],"cl":2,"dom":1,"frc":1,"h":"hz","i":179,"its":1,"l":12,"n":"","p":"hangzhou_179","s":36146001,"v":443,"x":13376654,"y":3517776},{"4k":0,"bb":3529728,"bl":13274112,"br":13414400,"bt":3635200,"c":[],"cl":2,"dom":1,"frc":1,"h":"hz","i":294,"its":0,"l":12,"n":"","p":"huzhou_294","s":6937491,"v":443,"x":13368987,"y":3597484},{"4k":1,"bb":3513344,"bl":13391872,"br":13531136,"bt":3615744,"c":[],"cl":2,"dom":1,"frc":1,"h":"jx","i":334,"its":1,"l":13,"n":"","p":"jiaxing_334","s":13200892,"v":443,"x":13443316,"y":3578520},{"4k":0,"bb":3294208,"bl":13273088,"br":13447168,"bt":3442688,"c":[],"cl":2,"dom":1,"frc":1,"h":"jh","i":333,"its":1,"l":12,"n":"","p":"jinhua_333","s":11204757,"v":443,"x":13319970,"y":3365440},{"4k":0,"bb":3259392,"bl":13138944,"br":13287424,"bt":3419136,"c":[],"cl":2,"dom":1,"frc":1,"h":"qz","i":243,"its":0,"l":12,"n":"","p":"quzhou_243","s":4982817,"v":443,"x":13233890,"y":3347356},{"4k":0,"bb":3155968,"bl":13213696,"br":13408256,"bt":3349504,"c":[],"cl":2,"dom":1,"frc":1,"h":"ls","i":292,"its":0,"l":13,"n":"ˮ","p":"lishui_292","s":6218565,"v":443,"x":13350636,"y":3288181},{"4k":1,"bb":3335168,"bl":13456384,"br":13617152,"bt":3540992,"c":[],"cl":2,"dom":1,"frc":1,"h":"nb","i":180,"its":1,"l":12,"n":"","p":"ningbo_180","s":24443293,"v":443,"x":13531775,"y":3466674},{"4k":0,"bb":3383296,"bl":13345792,"br":13496320,"bt":3519488,"c":[],"cl":2,"dom":1,"frc":1,"h":"sx","i":293,"its":0,"l":13,"n":"","p":"shaoxing_293","s":9676484,"v":443,"x":13423604,"y":3483319},{"4k":0,"bb":3228672,"bl":13390848,"br":13580288,"bt":3398656,"c":[],"cl":2,"dom":1,"frc":1,"h":"tz","i":244,"its":1,"l":13,"n":"̨","p":"taizhou_244","s":9953782,"v":443,"x":13517359,"y":3312057},{"4k":1,"bb":3105792,"bl":13317120,"br":13512704,"bt":3306496,"c":[],"cl":2,"dom":1,"frc":1,"h":"wz","i":178,"its":1,"l":12,"n":"","p":"wenzhou_178","s":20162700,"v":443,"x":13437061,"y":3228867},{"4k":0,"bb":3424256,"bl":13528064,"br":13692928,"bt":3599360,"c":[],"cl":2,"dom":1,"frc":1,"h":"zs","i":245,"its":0,"l":12,"n":"ɽ","p":"zhoushan_245","s":4008756,"v":443,"x":13604986,"y":3480850}],"cl":1,"dom":1,"frc":1,"h":"","i":31,"its":0,"l":12,"n":"㽭ʡ","p":"","s":102400,"v":443,"x":14116241,"y":5386659},{"4k":0,"bb":2511872,"bl":12670976,"br":12747776,"bt":2564096,"c":[],"cl":2,"dom":1,"frc":2,"gs":64408340,"gv":75,"h":"xgtbxz","i":2912,"its":0,"l":11,"n":"ر","p":"xianggangtebiexingzheng_2912","s":64408340,"v":75,"x":12709499,"y":2529064},{"4k":0,"bb":2507776,"bl":12639232,"br":12648448,"bt":4196352,"c":[],"cl":2,"dom":1,"frc":2,"gs":22632328,"gv":75,"h":"amtbxz","i":2911,"its":0,"l":13,"n":"ر","p":"aomentebiexingzheng_2911","s":22632328,"v":75,"x":12640429,"y":2518425},{"4k":0,"bb":2373632,"bl":13150208,"br":13976576,"bt":3031040,"c":[],"cl":2,"dom":1,"frc":2,"gs":248793070,"gv":13,"h":"twd","i":9000,"its":0,"l":9,"n":"̨ʡ","p":"taiwandi_9000","s":248793070,"v":13,"x":13447711,"y":2742969},{"4k":0,"bb":126976,"bl":11532288,"br":11587584,"bt":162816,"c":[],"cl":2,"dom":1,"frc":2,"gs":29553226,"gv":77,"h":"","i":20001,"its":0,"l":13,"n":"¼","p":"sig_20001","s":29553226,"v":77,"x":11557270,"y":144308},{"4k":0,"bb":2741375,"bl":13685009,"br":17141903,"bt":5673412,"c":[{"4k":0,"bb":4081664,"bl":15209472,"br":15348736,"bt":4219904,"c":[],"cl":2,"dom":1,"frc":2,"gs":44908893,"gv":77,"h":"","i":26001,"its":0,"l":12,"n":"֪","p":"aizhi_26001","s":44908893,"v":77,"x":15289347,"y":4151169},{"4k":0,"bb":4674560,"bl":15532032,"br":15727616,"bt":4929536,"c":[],"cl":2,"dom":1,"frc":2,"gs":20230802,"gv":77,"h":"","i":26002,"its":0,"l":12,"n":"","p":"qiutian_26002","s":20230802,"v":77,"x":15596570,"y":4797992},{"4k":0,"bb":4853760,"bl":15507456,"br":15774720,"bt":5261312,"c":[],"cl":2,"dom":1,"frc":2,"gs":23776689,"gv":77,"h":"","i":26003,"its":0,"l":12,"n":"ɭ","p":"qinsen_26003","s":23776689,"v":77,"x":15690562,"y":4932530},{"4k":0,"bb":4124672,"bl":15554560,"br":15682560,"bt":4290560,"c":[],"cl":2,"dom":1,"frc":2,"gs":38684205,"gv":77,"h":"","i":26004,"its":0,"l":12,"n":"ǧҶ","p":"qianye_26004","s":38684205,"v":77,"x":15574929,"y":4183183},{"4k":0,"bb":3831808,"bl":14693376,"br":14885888,"bt":4050944,"c":[],"cl":2,"dom":1,"frc":2,"gs":24023082,"gv":77,"h":"","i":26005,"its":0,"l":12,"n":"","p":"aiyuan_26005","s":24023082,"v":77,"x":14781678,"y":3978824},{"4k":0,"bb":4173824,"bl":15071232,"br":15261696,"bt":4328448,"c":[],"cl":2,"dom":1,"frc":2,"gs":18321241,"gv":77,"h":"","i":26006,"its":0,"l":12,"n":"","p":"fujin_26006","s":18321241,"v":77,"x":15141644,"y":4262089},{"4k":0,"bb":3870720,"bl":14404608,"br":14606336,"bt":4102144,"c":[],"cl":2,"dom":1,"frc":2,"gs":29376818,"gv":77,"h":"","i":26007,"its":0,"l":12,"n":"","p":"fugang_26007","s":29376818,"v":77,"x":14523978,"y":3978528},{"4k":0,"bb":4374528,"bl":15468544,"br":15702016,"bt":4563968,"c":[],"cl":2,"dom":1,"frc":2,"gs":33908249,"gv":77,"h":"","i":26008,"its":0,"l":12,"n":"","p":"fudao_26008","s":33908249,"v":77,"x":15683728,"y":4435171},{"4k":0,"bb":4142080,"bl":15169536,"br":15355904,"bt":4355072,"c":[],"cl":2,"dom":1,"frc":2,"gs":34760148,"gv":77,"h":"","i":26009,"its":0,"l":12,"n":"᪸","p":"qifu_26009","s":34760148,"v":77,"x":15251237,"y":4242369},{"4k":0,"bb":4274176,"bl":15405056,"br":15560704,"bt":4462592,"c":[],"cl":2,"dom":1,"frc":2,"gs":27580465,"gv":77,"h":"","i":26010,"its":0,"l":12,"n":"Ⱥ","p":"qunma_26010","s":27580465,"v":77,"x":15475282,"y":4343219},{"4k":0,"bb":4007936,"bl":14670848,"br":14860288,"bt":4179968,"c":[],"cl":2,"dom":1,"frc":2,"gs":30773061,"gv":77,"h":"","i":26011,"its":0,"l":12,"n":"㵺","p":"guangdao_26011","s":30773061,"v":77,"x":14745147,"y":4056262},{"4k":0,"bb":5035008,"bl":15509504,"br":16551936,"bt":5679104,"c":[],"cl":2,"dom":1,"frc":2,"gs":53729977,"gv":77,"h":"","i":26012,"its":0,"l":12,"n":"","p":"beihaidao_26012","s":53729977,"v":77,"x":15892027,"y":5334432},{"4k":0,"bb":4023296,"bl":14943232,"br":15086592,"bt":4233216,"c":[],"cl":2,"dom":1,"frc":2,"gs":35825953,"gv":77,"h":"","i":26013,"its":0,"l":12,"n":"","p":"bingku_26013","s":35825953,"v":77,"x":15007567,"y":4152159},{"4k":0,"bb":4235264,"bl":15549440,"br":15685632,"bt":4407296,"c":[],"cl":2,"dom":1,"frc":2,"gs":35356922,"gv":77,"h":"","i":26014,"its":0,"l":12,"n":"ij","p":"cicheng_26014","s":35356922,"v":77,"x":15638462,"y":4370425},{"4k":0,"bb":4269056,"bl":15164416,"br":15293440,"bt":4534272,"c":[],"cl":2,"dom":1,"frc":2,"gs":19339980,"gv":77,"h":"","i":26015,"its":0,"l":12,"n":"ʯ","p":"shichuan_26015","s":19339980,"v":77,"x":15239395,"y":4467921},{"4k":0,"bb":4654080,"bl":15645696,"br":15817728,"bt":4915200,"c":[],"cl":2,"dom":1,"frc":2,"gs":24134319,"gv":77,"h":"","i":26016,"its":0,"l":12,"n":"","p":"yanshou_26016","s":24134319,"v":77,"x":15796631,"y":4792387},{"4k":0,"bb":3998720,"bl":14838784,"br":15002624,"bt":4087808,"c":[],"cl":2,"dom":1,"frc":2,"gs":15008575,"gv":77,"h":"","i":26017,"its":0,"l":12,"n":"㴨","p":"xiangchuan_26017","s":15008575,"v":77,"x":14901228,"y":4049779},{"4k":0,"bb":3094528,"bl":14287872,"br":14624768,"bt":3783680,"c":[],"cl":2,"dom":1,"frc":2,"gs":26839297,"gv":77,"h":"","i":26018,"its":0,"l":12,"n":"¹","p":"luerdao_26018","s":26839297,"v":77,"x":14532688,"y":3686874},{"4k":0,"bb":3872768,"bl":15453184,"br":15572992,"bt":4237312,"c":[],"cl":2,"dom":1,"frc":2,"gs":39669872,"gv":77,"h":"","i":26019,"its":0,"l":12,"n":"δ","p":"shennaichuan_26019","s":39669872,"v":77,"x":15503897,"y":4196088},{"4k":0,"bb":3830784,"bl":14744576,"br":14954496,"bt":4002816,"c":[],"cl":2,"dom":1,"frc":2,"gs":19546849,"gv":77,"h":"","i":26020,"its":0,"l":12,"n":"֪","p":"gaozhi_26020","s":19546849,"v":77,"x":14839770,"y":3932449},{"4k":0,"bb":3748864,"bl":14464000,"br":14621696,"bt":3899392,"c":[],"cl":2,"dom":1,"frc":2,"gs":24084822,"gv":77,"h":"","i":26021,"its":0,"l":12,"n":"ܱ","p":"xiongben_26021","s":24084822,"v":77,"x":14550721,"y":3844707},{"4k":0,"bb":4085760,"bl":15006720,"br":15153152,"bt":4246528,"c":[],"cl":2,"dom":1,"frc":2,"gs":32217460,"gv":77,"h":"","i":26022,"its":0,"l":12,"n":"","p":"jingdu_26022","s":32217460,"v":77,"x":15112040,"y":4135845},{"4k":0,"bb":3965952,"bl":15121408,"br":15251456,"bt":4188160,"c":[],"cl":2,"dom":1,"frc":2,"gs":30862038,"gv":77,"h":"","i":26023,"its":0,"l":12,"n":"","p":"sanzhong_26023","s":30862038,"v":77,"x":15210297,"y":4051543},{"4k":0,"bb":4500480,"bl":15608832,"br":15772672,"bt":4696064,"c":[],"cl":2,"dom":1,"frc":2,"gs":25365109,"gv":77,"h":"","i":26024,"its":0,"l":12,"n":"","p":"gongcheng_26024","s":25365109,"v":77,"x":15733260,"y":4612851},{"4k":0,"bb":3655680,"bl":14547968,"br":14684160,"bt":3852288,"c":[],"cl":2,"dom":1,"frc":2,"gs":20081591,"gv":77,"h":"","i":26025,"its":0,"l":12,"n":"","p":"gongqi_26025","s":20081591,"v":77,"x":14629430,"y":3728920},{"4k":0,"bb":4162560,"bl":15270912,"br":15468544,"bt":4436992,"c":[],"cl":2,"dom":1,"frc":2,"gs":36862095,"gv":77,"h":"","i":26026,"its":0,"l":12,"n":"Ұ","p":"changye_26026","s":36862095,"v":77,"x":15371220,"y":4293561},{"4k":0,"bb":3737600,"bl":14285824,"br":14518272,"bt":4109312,"c":[],"cl":2,"dom":1,"frc":2,"gs":23524273,"gv":77,"h":"","i":26027,"its":0,"l":12,"n":"","p":"changqi_26027","s":23524273,"v":77,"x":14403400,"y":3898797},{"4k":0,"bb":3985408,"bl":15085568,"br":15172608,"bt":4114432,"c":[],"cl":2,"dom":1,"frc":2,"gs":20211604,"gv":77,"h":"","i":26028,"its":0,"l":12,"n":"","p":"nailiang_26028","s":20211604,"v":77,"x":15124903,"y":4049922},{"4k":0,"bb":4353024,"bl":15293440,"br":15582208,"bt":4632576,"c":[],"cl":2,"dom":1,"frc":2,"gs":33059524,"gv":77,"h":"","i":26029,"its":0,"l":12,"n":"","p":"xinxi_26029","s":33059524,"v":77,"x":15434571,"y":4448108},{"4k":0,"bb":3825664,"bl":14559232,"br":14711808,"bt":3972096,"c":[],"cl":2,"dom":1,"frc":2,"gs":19234463,"gv":77,"h":"","i":26030,"its":0,"l":12,"n":"","p":"dafen_26030","s":19234463,"v":77,"x":14681350,"y":3888054},{"4k":0,"bb":4042752,"bl":14833664,"br":14974976,"bt":4197376,"c":[],"cl":2,"dom":1,"frc":2,"gs":23546346,"gv":77,"h":"","i":26031,"its":0,"l":12,"n":"ɽ","p":"gangshan_26031","s":23546346,"v":77,"x":14911926,"y":4072189},{"4k":0,"bb":2739200,"bl":13682688,"br":14621696,"bt":3297280,"c":[],"cl":2,"dom":1,"frc":2,"gs":16027162,"gv":77,"h":"","i":26032,"its":0,"l":12,"n":"","p":"chongshen_26032","s":16027162,"v":77,"x":14227452,"y":3021310},{"4k":0,"bb":4034560,"bl":14997504,"br":15113216,"bt":4151296,"c":[],"cl":2,"dom":1,"frc":2,"gs":40300534,"gv":77,"h":"","i":26033,"its":0,"l":12,"n":"","p":"daban_26033","s":40300534,"v":77,"x":15085509,"y":4094380},{"4k":0,"bb":3864576,"bl":14376960,"br":14534656,"bt":4099072,"c":[],"cl":2,"dom":1,"frc":2,"gs":20707118,"gv":77,"h":"","i":26034,"its":0,"l":12,"n":"","p":"zuohe_26034","s":20707118,"v":77,"x":14458666,"y":3938515},{"4k":0,"bb":4240384,"bl":15440896,"br":15576064,"bt":4317184,"c":[],"cl":2,"dom":1,"frc":2,"gs":31515408,"gv":77,"h":"","i":26035,"its":0,"l":12,"n":"","p":"qiyu_26035","s":31515408,"v":77,"x":15516930,"y":4272797},{"4k":0,"bb":4107264,"bl":15089664,"br":15211520,"bt":4235264,"c":[],"cl":2,"dom":1,"frc":2,"gs":18820902,"gv":77,"h":"","i":26036,"its":0,"l":12,"n":"־","p":"zhihe_26036","s":18820902,"v":77,"x":15156419,"y":4171302},{"4k":0,"bb":4021248,"bl":14656512,"br":14850048,"bt":4449280,"c":[],"cl":2,"dom":1,"frc":2,"gs":21365123,"gv":77,"h":"","i":26037,"its":0,"l":12,"n":"","p":"daogen_26037","s":21365123,"v":77,"x":14757454,"y":4146377},{"4k":0,"bb":3045376,"bl":15301632,"br":15837184,"bt":4254720,"c":[],"cl":2,"dom":1,"frc":2,"gs":49041874,"gv":77,"h":"","i":26038,"its":0,"l":12,"n":"","p":"jinggang_26038","s":49041874,"v":77,"x":15362726,"y":4123477},{"4k":0,"bb":4299776,"bl":15493120,"br":15631360,"bt":4463616,"c":[],"cl":2,"dom":1,"frc":2,"gs":23545178,"gv":77,"h":"","i":26039,"its":0,"l":12,"n":"ľ","p":"limu_26039","s":23545178,"v":77,"x":15563831,"y":4370280},{"4k":0,"bb":3942400,"bl":14878720,"br":15014912,"bt":4052992,"c":[],"cl":2,"dom":1,"frc":2,"gs":16944403,"gv":77,"h":"","i":26040,"its":0,"l":12,"n":"Ե","p":"dedao_26040","s":16944403,"v":77,"x":14980815,"y":3979161},{"4k":0,"bb":4200448,"bl":15466496,"br":15581184,"bt":4261888,"c":[],"cl":2,"dom":1,"frc":2,"gs":87195703,"gv":77,"h":"","i":26041,"its":0,"l":12,"n":"","p":"dongjing_26041","s":87195703,"v":77,"x":15560697,"y":4222468},{"4k":0,"bb":4145152,"bl":14783488,"br":14994432,"bt":4326400,"c":[],"cl":2,"dom":1,"frc":2,"gs":15007068,"gv":77,"h":"","i":26042,"its":0,"l":12,"n":"ȡ","p":"niaoqu_26042","s":15007068,"v":77,"x":14873687,"y":4202080},{"4k":0,"bb":4228096,"bl":15205376,"br":15366144,"bt":4430848,"c":[],"cl":2,"dom":1,"frc":2,"gs":19427520,"gv":77,"h":"","i":26043,"its":0,"l":12,"n":"ɽ","p":"fushan_26043","s":19427520,"v":77,"x":15275375,"y":4343986},{"4k":0,"bb":3927040,"bl":15025152,"br":15144960,"bt":4058112,"c":[],"cl":2,"dom":1,"frc":2,"gs":15653321,"gv":77,"h":"","i":26044,"its":0,"l":12,"n":"͸ɽ","p":"hegeshan_26044","s":15653321,"v":77,"x":15069586,"y":3982324},{"4k":0,"bb":4494336,"bl":15494144,"br":15671296,"bt":4715520,"c":[],"cl":2,"dom":1,"frc":2,"gs":21119214,"gv":77,"h":"","i":26045,"its":0,"l":12,"n":"ɽ","p":"shanxing_26045","s":21119214,"v":77,"x":15559069,"y":4653677},{"4k":0,"bb":3964928,"bl":14548992,"br":14756864,"bt":4114432,"c":[],"cl":2,"dom":1,"frc":2,"gs":23552347,"gv":77,"h":"","i":26046,"its":0,"l":12,"n":"ɽ","p":"shankou_26046","s":23552347,"v":77,"x":14676834,"y":4013027},{"4k":0,"bb":4156416,"bl":15351808,"br":15509504,"bt":4284416,"c":[],"cl":2,"dom":1,"frc":2,"gs":22592804,"gv":77,"h":"","i":26047,"its":0,"l":12,"n":"ɽ","p":"shanli_26047","s":22592804,"v":77,"x":15427698,"y":4216415}],"cl":1,"dom":1,"frc":2,"h":"","i":26000,"its":0,"l":12,"n":"ձ","p":"","s":2905338,"v":12,"x":11556136,"y":152247},{"4k":0,"bb":3886633,"bl":13924194,"br":14576378,"bt":4639352,"c":[{"4k":0,"bb":4099072,"bl":14314496,"br":14397440,"bt":4205568,"c":[],"cl":2,"dom":1,"frc":2,"gs":11536862,"gv":77,"h":"","i":30001,"its":0,"l":12,"n":"ɽ","p":"fushan_30001","s":11536862,"v":77,"x":14355817,"y":4147844},{"4k":0,"bb":4269056,"bl":14159872,"br":14324736,"bt":4446208,"c":[],"cl":2,"dom":1,"frc":2,"gs":13106076,"gv":77,"h":"","i":30002,"its":0,"l":12,"n":"山","p":"zhongqingbeidao_30002","s":13106076,"v":77,"x":14234416,"y":4370430},{"4k":0,"bb":4270080,"bl":13972480,"br":14214144,"bt":4431872,"c":[],"cl":2,"dom":1,"frc":2,"gs":14084613,"gv":77,"h":"","i":30003,"its":0,"l":12,"n":"ϵ","p":"zhongqingnandao_30003","s":14084613,"v":77,"x":14117385,"y":4349846},{"4k":0,"bb":4207616,"bl":14286848,"br":14338048,"bt":4272128,"c":[],"cl":2,"dom":1,"frc":2,"gs":9834240,"gv":77,"h":"","i":30004,"its":0,"l":12,"n":"","p":"daqiu_30004","s":9834240,"v":77,"x":14311019,"y":4243609},{"4k":0,"bb":4298752,"bl":14155776,"br":14215168,"bt":4348928,"c":[],"cl":2,"dom":1,"frc":2,"gs":9778853,"gv":77,"h":"","i":30005,"its":0,"l":12,"n":"","p":"datian_30005","s":9778853,"v":77,"x":14180805,"y":4319068},{"4k":0,"bb":4412416,"bl":14137344,"br":14404608,"bt":4644864,"c":[],"cl":2,"dom":1,"frc":2,"gs":16682225,"gv":77,"h":"","i":30006,"its":0,"l":12,"n":"ԭ","p":"jiangyuandao_30006","s":16682225,"v":77,"x":14376352,"y":4475386},{"4k":0,"bb":4083712,"bl":14004224,"br":14141440,"bt":4228096,"c":[],"cl":2,"dom":1,"frc":2,"gs":9519240,"gv":77,"h":"","i":30007,"its":0,"l":12,"n":"","p":"guanzhou_30007","s":9519240,"v":77,"x":14121709,"y":4157331},{"4k":0,"bb":4378624,"bl":14081024,"br":14231552,"bt":4601856,"c":[],"cl":2,"dom":1,"frc":2,"gs":26759433,"gv":77,"h":"","i":30008,"its":0,"l":12,"n":"ܵ","p":"jingjidao_30008","s":26759433,"v":77,"x":14101778,"y":4448701},{"4k":0,"bb":4195328,"bl":14221312,"br":14577664,"bt":4491264,"c":[],"cl":2,"dom":1,"frc":2,"gs":16785917,"gv":77,"h":"","i":30009,"its":0,"l":12,"n":"б","p":"qingshangbeidao_30009","s":16785917,"v":77,"x":14347993,"y":4342962},{"4k":0,"bb":4073472,"bl":14185472,"br":14385152,"bt":4259840,"c":[],"cl":2,"dom":1,"frc":2,"gs":17175247,"gv":77,"h":"","i":30010,"its":0,"l":12,"n":"ϵ","p":"qingshangnandao_30010","s":17175247,"v":77,"x":14243717,"y":4170539},{"4k":0,"bb":4397056,"bl":13865984,"br":14124032,"bt":4556800,"c":[],"cl":2,"dom":1,"frc":2,"gs":26094360,"gv":77,"h":"","i":30011,"its":0,"l":12,"n":"ʴ","p":"renchuan_30011","s":26094360,"v":77,"x":14102066,"y":4483446},{"4k":0,"bb":3885056,"bl":14006272,"br":14174208,"bt":4042752,"c":[],"cl":2,"dom":1,"frc":2,"gs":10389729,"gv":77,"h":"","i":30012,"its":0,"l":12,"n":"","p":"jizhou_30012","s":10389729,"v":77,"x":14080027,"y":3914603},{"4k":0,"bb":4166656,"bl":14031872,"br":14242816,"bt":4299776,"c":[],"cl":2,"dom":1,"frc":2,"gs":13517705,"gv":77,"h":"","i":30013,"its":0,"l":12,"n":"ȫޱ","p":"quanluobeidao_30013","s":13517705,"v":77,"x":14118494,"y":4233523},{"4k":0,"bb":3964928,"bl":13913088,"br":14242816,"bt":4206592,"c":[],"cl":2,"dom":1,"frc":2,"gs":16221951,"gv":77,"h":"","i":30014,"its":0,"l":12,"n":"ȫϵ","p":"quanluonandao_30014","s":16221951,"v":77,"x":14087426,"y":4085554},{"4k":0,"bb":4328448,"bl":14149632,"br":14179328,"bt":4375552,"c":[],"cl":2,"dom":1,"frc":2,"gs":8164725,"gv":77,"h":"","i":30015,"its":0,"l":12,"n":"","p":"shizong_30015","s":8164725,"v":77,"x":14164418,"y":4350399},{"4k":0,"bb":4378624,"bl":14071808,"br":14226432,"bt":4558848,"c":[],"cl":2,"dom":1,"frc":2,"gs":22362272,"gv":77,"h":"","i":30016,"its":0,"l":12,"n":"׶","p":"shouer_30016","s":22362272,"v":77,"x":14135959,"y":4486784},{"4k":0,"bb":4178944,"bl":14358528,"br":14419968,"bt":4272128,"c":[],"cl":2,"dom":1,"frc":2,"gs":9258735,"gv":77,"h":"","i":30017,"its":0,"l":12,"n":"εɽ","p":"weichuan_30017","s":9258735,"v":77,"x":14401104,"y":4202599}],"cl":1,"dom":1,"frc":2,"h":"","i":30000,"its":0,"l":12,"n":"","p":"","s":2905338,"v":12,"x":11556136,"y":152247},{"4k":0,"bb":621960,"bl":10836572,"br":11759822,"bt":2312901,"c":[{"4k":0,"bb":1602560,"bl":10829824,"br":11357184,"bt":2337792,"c":[],"cl":2,"dom":1,"frc":2,"gs":60000138,"gv":77,"h":"","i":20501,"its":0,"l":11,"n":"̩(,,ؿ̩)","p":"beibu_20501","s":60000138,"v":77,"x":11093538,"y":1970093},{"4k":0,"bb":1550336,"bl":11212800,"br":11782144,"bt":2084864,"c":[],"cl":2,"dom":1,"frc":2,"gs":64889237,"gv":77,"h":"","i":20502,"its":0,"l":11,"n":"̩(׾,߷)","p":"dongbeibu_20502","s":64889237,"v":77,"x":11497607,"y":1817541},{"4k":0,"bb":1282048,"bl":11198464,"br":11511808,"bt":1637376,"c":[],"cl":2,"dom":1,"frc":2,"gs":43027832,"gv":77,"h":"","i":20503,"its":0,"l":11,"n":"̩()","p":"dongbu_20503","s":43027832,"v":77,"x":11355193,"y":1459817},{"4k":0,"bb":1193984,"bl":10932224,"br":11350016,"bt":1774592,"c":[],"cl":2,"dom":1,"frc":2,"gs":78953569,"gv":77,"h":"","i":20504,"its":0,"l":11,"n":"̩в()","p":"zhongbu_20504","s":78953569,"v":77,"x":11141090,"y":1484197},{"4k":0,"bb":615424,"bl":10862592,"br":11385856,"bt":1236992,"c":[],"cl":2,"dom":1,"frc":2,"gs":40065648,"gv":77,"h":"","i":20505,"its":0,"l":11,"n":"̩ϲ(ռ,÷,)","p":"nanbu_20505","s":40065648,"v":77,"x":11123953,"y":926369}],"cl":1,"dom":1,"frc":2,"h":"","i":20500,"its":0,"l":11,"n":"̩","p":"","s":2905338,"v":12,"x":11556136,"y":152247},{"4k":0,"bb":748558,"bl":7590541,"br":10845115,"bt":4207826,"c":[{"4k":0,"bb":1763333,"bl":8087781,"br":8975365,"bt":2484502,"c":[],"cl":2,"dom":1,"frc":2,"gs":129780771,"gv":77,"h":"","i":30085,"its":0,"l":13,"n":"","p":"mengmai_30085","s":129780771,"v":77,"x":8113564,"y":2148839},{"4k":0,"bb":3291564,"bl":8571694,"br":8613439,"bt":3333744,"c":[],"cl":2,"dom":1,"frc":2,"gs":33398100,"gv":77,"h":"","i":30090,"its":0,"l":13,"n":"µ","p":"xindeli_30090","s":33398100,"v":77,"x":8591441,"y":3306577},{"4k":0,"bb":2725761,"bl":8585609,"br":9406599,"bt":3535390,"c":[],"cl":2,"dom":1,"frc":2,"gs":199444284,"gv":77,"h":"","i":30100,"its":0,"l":13,"n":",","p":"agewala_30100","s":199444284,"v":77,"x":8682257,"y":3120938},{"4k":0,"bb":2442868,"bl":9573580,"br":9991033,"bt":3117413,"c":[],"cl":2,"dom":1,"frc":2,"gs":57974668,"gv":77,"h":"","i":30102,"its":0,"l":13,"n":"Ӷ","p":"jiaergeda_30102","s":57974668,"v":77,"x":9835658,"y":2560906},{"4k":0,"bb":1260004,"bl":8207865,"br":8764933,"bt":2082477,"c":[],"cl":2,"dom":1,"frc":2,"gs":121335572,"gv":77,"h":"","i":30081,"its":0,"l":13,"n":"޶","p":"banjialuoer_30081","s":121335572,"v":77,"x":8634707,"y":1457844}],"cl":1,"dom":1,"frc":2,"h":"","i":31080,"its":0,"l":11,"n":"ӡ","p":"","s":2905338,"v":15,"x":9158673,"y":1884721},{"4k":0,"bb":94937,"bl":11092087,"br":13277189,"bt":818344,"c":[{"4k":0,"bb":331070,"bl":11284565,"br":11340796,"bt":366341,"c":[],"cl":2,"dom":1,"frc":2,"gs":18383940,"gv":77,"h":"","i":30108,"its":0,"l":13,"n":"¡","p":"jilongpo_30108","s":18383940,"v":77,"x":11319296,"y":346769},{"4k":0,"bb":328566,"bl":12719510,"br":13276555,"bt":818118,"c":[],"cl":2,"dom":1,"frc":2,"gs":18883255,"gv":77,"h":"","i":30117,"its":0,"l":13,"n":"ɳ,DZ","p":"shyab_30117","s":18883255,"v":77,"x":12928905,"y":668691},{"4k":0,"bb":440464,"bl":11092050,"br":11263337,"bt":729529,"c":[],"cl":2,"dom":1,"frc":2,"gs":15178780,"gv":77,"h":"","i":30106,"its":0,"l":13,"n":"","p":"lankawei_30106","s":15178780,"v":77,"x":11105431,"y":699839},{"4k":0,"bb":232530,"bl":11348260,"br":11410371,"bt":276506,"c":[],"cl":2,"dom":1,"frc":2,"gs":10572798,"gv":77,"h":"","i":30110,"its":0,"l":13,"n":"","p":"maliujia_30110","s":10572798,"v":77,"x":11381705,"y":249050}],"cl":1,"dom":1,"frc":2,"h":"","i":31190,"its":0,"l":11,"n":"","p":"","s":2905338,"v":15,"x":12329868,"y":537835},{"4k":0,"bb":3023050,"bl":8912351,"br":9819907,"bt":3539667,"c":[{"4k":0,"bb":3050838,"bl":9337023,"br":9643874,"bt":3265576,"c":[],"cl":2,"dom":1,"frc":2,"gs":23716881,"gv":77,"h":"","i":30121,"its":0,"l":13,"n":"ӵ,̹","p":"jiademandu_30121","s":23716881,"v":77,"x":9497939,"y":3192375},{"4k":0,"bb":3145139,"bl":9208187,"br":9484771,"bt":3397039,"c":[],"cl":2,"dom":1,"frc":2,"gs":19707886,"gv":77,"h":"","i":30125,"its":0,"l":13,"n":"","p":"bokala_30125","s":19707886,"v":77,"x":9349971,"y":3257586}],"cl":1,"dom":1,"frc":2,"h":"","i":31220,"its":0,"l":11,"n":"Ჴ","p":"","s":2905338,"v":15,"x":9403317,"y":3243336},{"4k":0,"bb":-7349207,"bl":12570302,"br":17728416,"bt":-1024040,"c":[{"4k":0,"bb":-4551909,"bl":15677096,"br":18701265,"bt":-3219473,"c":[],"cl":2,"dom":1,"frc":2,"gs":101019520,"gv":77,"h":"","i":30024,"its":0,"l":13,"n":"Ϥ","p":"xini_30024","s":101019520,"v":77,"x":16827992,"y":-3988719},{"4k":0,"bb":-4721252,"bl":15695978,"br":16701689,"bt":-4015830,"c":[],"cl":2,"dom":1,"frc":2,"gs":71954691,"gv":77,"h":"","i":30029,"its":0,"l":13,"n":"ī","p":"moerben_30029","s":71954691,"v":77,"x":16141224,"y":-4522392},{"4k":0,"bb":-3372111,"bl":15272801,"br":17127414,"bt":-1015102,"c":[],"cl":2,"dom":1,"frc":2,"gs":68732535,"gv":77,"h":"","i":30026,"its":0,"l":13,"n":"˹","p":"bulisiban_30026","s":68732535,"v":77,"x":17039546,"y":-3172167}],"cl":1,"dom":1,"frc":2,"h":"","i":31000,"its":0,"l":11,"n":"Ĵ","p":"","s":2905338,"v":15,"x":14982921,"y":-2434195},{"4k":0,"bb":-6878808,"bl":-19907141,"br":19933733,"bt":-3384124,"c":[{"4k":0,"bb":-5078468,"bl":19025372,"br":19874104,"bt":-3835093,"c":[],"cl":2,"dom":1,"frc":2,"gs":32502272,"gv":77,"h":"","i":30126,"its":0,"l":13,"n":"","p":"aokelan_30126","s":32502272,"v":77,"x":19454737,"y":-5027059},{"4k":0,"bb":-6889471,"bl":18257720,"br":19928161,"bt":-4889258,"c":[],"cl":2,"dom":1,"frc":2,"gs":23665507,"gv":77,"h":"","i":30127,"its":0,"l":13,"n":"","p":"jiducheng_30127","s":23665507,"v":77,"x":19218772,"y":-5368773}],"cl":1,"dom":1,"frc":2,"h":"","i":31230,"its":0,"l":13,"n":"","p":"","s":2905338,"v":15,"x":16654394,"y":-5012799},{"4k":0,"bb":507715,"bl":13016544,"br":14093796,"bt":2384744,"c":[{"4k":0,"bb":1158225,"bl":13326474,"br":13941056,"bt":2368785,"c":[],"cl":2,"dom":1,"frc":2,"gs":60766017,"gv":77,"h":"","i":30128,"its":0,"l":13,"n":"","p":"manila_30128","s":60766017,"v":77,"x":13468118,"y":1632398},{"4k":0,"bb":832362,"bl":13016674,"br":14022988,"bt":1551555,"c":[],"cl":2,"dom":1,"frc":2,"gs":29495397,"gv":77,"h":"","i":30130,"its":0,"l":13,"n":"̲,","p":"changtandao_30130","s":29495397,"v":77,"x":13575855,"y":1326706}],"cl":1,"dom":1,"frc":2,"h":"","i":31260,"its":0,"l":11,"n":"ɱ","p":"","s":2905338,"v":15,"x":13586886,"y":1160750},{"4k":0,"bb":445094,"bl":12706011,"br":12843733,"bt":558656,"c":[{"4k":0,"bb":469939,"bl":12700762,"br":12827797,"bt":558017,"c":[],"cl":2,"dom":1,"frc":2,"gs":9260802,"gv":77,"h":"","i":30031,"its":0,"l":13,"n":"˹ͼ,,","p":"sibajaw_30031","s":9260802,"v":77,"x":12796476,"y":547784}],"cl":1,"dom":1,"frc":2,"h":"","i":31020,"its":0,"l":12,"n":"","p":"","s":2905338,"v":15,"x":12802147,"y":540615},{"4k":0,"bb":-1224976,"bl":10572395,"br":15697528,"bt":673208,"c":[{"4k":0,"bb":-982370,"bl":12732305,"br":12880998,"bt":-894387,"c":[],"cl":2,"dom":1,"frc":2,"gs":17558765,"gv":77,"h":"","i":30033,"its":0,"l":12,"n":"嵺,ڲ","p":"balidao_30033","s":17558765,"v":77,"x":12809874,"y":-927265},{"4k":0,"bb":-710980,"bl":11843511,"br":11911315,"bt":-599375,"c":[],"cl":2,"dom":1,"frc":2,"gs":39393282,"gv":77,"h":"","i":30039,"its":0,"l":13,"n":"żӴ","p":"yajiada_30039","s":39393282,"v":77,"x":11896947,"y":-691585}],"cl":1,"dom":1,"frc":2,"h":"","i":31030,"its":0,"l":11,"n":"ӡ","p":"","s":2905338,"v":15,"x":13219171,"y":-217017},{"4k":0,"bb":655571,"bl":8852423,"br":9114800,"bt":1092989,"c":[{"4k":0,"bb":658095,"bl":8852433,"br":9111264,"bt":1090463,"c":[],"cl":2,"dom":1,"frc":2,"gs":25493405,"gv":77,"h":"","i":30103,"its":0,"l":13,"n":",,","p":"kelunpo_30103","s":25493405,"v":77,"x":8890619,"y":767358}],"cl":1,"dom":1,"frc":2,"h":"","i":31130,"its":0,"l":11,"n":"˹","p":"","s":2905338,"v":15,"x":8939138,"y":983360},{"4k":0,"bb":950416,"bl":11371741,"br":12186206,"bt":2662871,"c":[{"4k":0,"bb":1317907,"bl":11706280,"br":12186087,"bt":2101932,"c":[],"cl":2,"dom":1,"frc":2,"gs":21468034,"gv":77,"h":"","i":30133,"its":0,"l":13,"n":"᭸","p":"xiangang_30133","s":21468034,"v":77,"x":12042233,"y":1796529},{"4k":0,"bb":958153,"bl":11517098,"br":12171347,"bt":1431122,"c":[],"cl":2,"dom":1,"frc":2,"gs":26184376,"gv":77,"h":"","i":30132,"its":0,"l":13,"n":"־","p":"huzhiming_30132","s":26184376,"v":77,"x":11870150,"y":1202133},{"4k":0,"bb":2082477,"bl":11437273,"br":12031479,"bt":2660223,"c":[],"cl":2,"dom":1,"frc":2,"gs":32002852,"gv":77,"h":"","i":30131,"its":0,"l":13,"n":"","p":"xialongwan_30131","s":32002852,"v":77,"x":11921397,"y":2372568}],"cl":1,"dom":1,"frc":2,"h":"","i":32370,"its":0,"l":11,"n":"Խ","p":"","s":2905338,"v":15,"x":11925040,"y":2059946},{"4k":0,"bb":655571,"bl":8852423,"br":9114800,"bt":1092989,"c":[{"4k":0,"bb":2565742,"bl":5734677,"br":6279951,"bt":2993928,"c":[],"cl":2,"dom":1,"frc":2,"gs":32093703,"gv":78,"h":"","i":100079,"its":0,"l":13,"n":"ϰ","p":"dibai_100079","s":32093703,"v":78,"x":6152786,"y":2882561}],"cl":1,"dom":1,"frc":2,"h":"","i":70100,"its":0,"l":11,"n":"","p":"","s":2905338,"v":15,"x":8939138,"y":983360},{"4k":0,"bb":655571,"bl":8852423,"br":9114800,"bt":1092989,"c":[{"4k":0,"bb":1152843,"bl":11383775,"br":12023908,"bt":1653830,"c":[],"cl":2,"dom":1,"frc":2,"gs":23150655,"gv":78,"h":"","i":100438,"its":0,"l":13,"n":",","p":"jinbian_100438","s":23150655,"v":78,"x":11560091,"y":1491709}],"cl":1,"dom":1,"frc":2,"h":"","i":70011,"its":0,"l":11,"n":"կ","p":"","s":2905338,"v":15,"x":8939138,"y":983360},{"4k":0,"bb":655571,"bl":8852423,"br":9114800,"bt":1092989,"c":[{"4k":0,"bb":1940239,"bl":11120249,"br":11697836,"bt":2552754,"c":[],"cl":2,"dom":1,"frc":2,"gs":24211254,"gv":78,"h":"","i":100091,"its":0,"l":13,"n":"Ų","p":"langbolana_100091","s":24211254,"v":78,"x":11369690,"y":2244603}],"cl":1,"dom":1,"frc":2,"h":"","i":70012,"its":0,"l":11,"n":"","p":"","s":2905338,"v":15,"x":8939138,"y":983360},{"4k":0,"bb":655571,"bl":8852423,"br":9114800,"bt":1092989,"c":[{"4k":0,"bb":1757128,"bl":10491116,"br":10811391,"bt":2196238,"c":[],"cl":2,"dom":1,"frc":2,"gs":14812565,"gv":78,"h":"","i":100469,"its":0,"l":13,"n":"","p":"yangguang_100469","s":14812565,"v":78,"x":10708483,"y":1892725},{"4k":0,"bb":2104193,"bl":10472499,"br":10794876,"bt":2671634,"c":[],"cl":2,"dom":1,"frc":2,"gs":14996481,"gv":78,"h":"","i":100474,"its":0,"l":13,"n":"Ѹ,","p":"mandele_100474","s":14996481,"v":78,"x":10559710,"y":2396805}],"cl":1,"dom":1,"frc":2,"h":"","i":70014,"its":0,"l":11,"n":"","p":"","s":2905338,"v":15,"x":8939138,"y":983360},{"4k":0,"bb":655571,"bl":8852423,"br":9114800,"bt":1092989,"c":[{"4k":0,"bb":-2320234,"bl":6299325,"br":6429337,"bt":-1150364,"c":[],"cl":2,"dom":1,"frc":2,"gs":12441124,"gv":78,"h":"","i":100403,"its":0,"l":13,"n":"ë˹","p":"maoliqius_100403","s":12441124,"v":78,"x":6401172,"y":-2277220}],"cl":1,"dom":1,"frc":2,"h":"","i":70090,"its":0,"l":11,"n":"ë˹","p":"","s":2905338,"v":15,"x":8939138,"y":983360},{"4k":0,"bb":950416,"bl":11371741,"br":12186206,"bt":2662871,"c":[{"4k":0,"bb":4575316,"bl":-586569,"br":-109476,"bt":5035704,"c":[],"cl":2,"dom":1,"frc":2,"gs":67498868,"gv":77,"h":"","i":36503,"its":0,"l":13,"n":"","p":"madeli_36503","s":67498868,"v":77,"x":-412336,"y":4899206},{"4k":0,"bb":4909844,"bl":25278,"br":369793,"bt":5261694,"c":[],"cl":2,"dom":1,"frc":2,"gs":79605957,"gv":77,"h":"","i":36505,"its":0,"l":13,"n":"","p":"basluona_36505","s":79605957,"v":77,"x":241850,"y":5041306}],"cl":1,"dom":1,"frc":2,"h":"","i":51270,"its":0,"l":11,"n":"","p":"","s":2905338,"v":15,"x":11925040,"y":2059946},{"4k":0,"bb":655571,"bl":8852423,"br":9114800,"bt":1092989,"c":[{"4k":0,"bb":5719317,"bl":655634,"br":1170228,"bt":6043511,"c":[],"cl":2,"dom":1,"frc":2,"gs":165562770,"gv":77,"h":"","i":36531,"its":0,"l":13,"n":",,,¬","p":"ruishi_36531","s":165562770,"v":77,"x":952300,"y":5972921}],"cl":1,"dom":1,"frc":2,"h":"","i":50466,"its":0,"l":11,"n":"ʿ","p":"","s":2905338,"v":15,"x":8939138,"y":983360},{"4k":0,"bb":655571,"bl":8852423,"br":9114800,"bt":1092989,"c":[{"4k":0,"bb":6320678,"bl":265366,"br":719027,"bt":6682329,"c":[],"cl":2,"dom":1,"frc":2,"gs":152585529,"gv":77,"h":"","i":36559,"its":0,"l":13,"n":"³","p":"bulusaer_36559","s":152585529,"v":77,"x":484275,"y":6562342}],"cl":1,"dom":1,"frc":2,"h":"","i":50292,"its":0,"l":11,"n":"ʱ","p":"","s":2905338,"v":15,"x":8939138,"y":983360},{"4k":0,"bb":950416,"bl":11371741,"br":12186206,"bt":2662871,"c":[{"4k":0,"bb":6660001,"bl":1251168,"br":1655180,"bt":7033702,"c":[],"cl":2,"dom":1,"frc":2,"gs":77553972,"gv":77,"h":"","i":36562,"its":0,"l":13,"n":"","p":"bolin_36562","s":77553972,"v":77,"x":1492160,"y":6860069},{"4k":0,"bb":5951162,"bl":986556,"br":1545396,"bt":6515648,"c":[],"cl":2,"dom":1,"frc":2,"gs":280341398,"gv":77,"h":"","i":36561,"its":0,"l":13,"n":"Ľ","p":"munihei_36561","s":280341398,"v":77,"x":1289237,"y":6096935},{"4k":0,"bb":7040207,"bl":876311,"br":1259318,"bt":7337518,"c":[],"cl":2,"dom":1,"frc":2,"gs":64552731,"gv":77,"h":"","i":36564,"its":0,"l":13,"n":"","p":"hanbao_36564","s":64552731,"v":77,"x":1112302,"y":7051198},{"4k":0,"bb":6340913,"bl":861879,"br":1142154,"bt":6707357,"c":[],"cl":2,"dom":1,"frc":2,"gs":103778020,"gv":77,"h":"","i":36565,"its":0,"l":13,"n":"˸","p":"flkf_36565","s":103778020,"v":77,"x":966498,"y":6432776},{"4k":0,"bb":6456079,"bl":652680,"br":1058479,"bt":6873179,"c":[],"cl":2,"dom":1,"frc":2,"gs":145303378,"gv":77,"h":"","i":36567,"its":0,"l":13,"n":"¡","p":"kelong_36567","s":145303378,"v":77,"x":774813,"y":6576682}],"cl":1,"dom":1,"frc":2,"h":"","i":50664,"its":0,"l":11,"n":"¹","p":"","s":2905338,"v":15,"x":11925040,"y":2059946},{"4k":0,"bb":950416,"bl":11371741,"br":12186206,"bt":2662871,"c":[{"4k":0,"bb":6087417,"bl":150154,"br":404187,"bt":6286370,"c":[],"cl":2,"dom":1,"frc":2,"gs":122938570,"gv":77,"h":"","i":36590,"its":0,"l":13,"n":",ʥ","p":"bali_36590","s":122938570,"v":77,"x":261855,"y":6218023},{"4k":0,"bb":5243922,"bl":-204435,"br":167437,"bt":5710342,"c":[],"cl":2,"dom":1,"frc":2,"gs":126080714,"gv":77,"h":"","i":36580,"its":0,"l":13,"n":"","p":"boerduo_36580","s":126080714,"v":77,"x":-64128,"y":5565669},{"4k":0,"bb":5181153,"bl":-29409,"br":362388,"bt":5591398,"c":[],"cl":2,"dom":1,"frc":2,"gs":134122609,"gv":77,"h":"","i":36594,"its":0,"l":13,"n":"ͼ¬","p":"tuluzi_36594","s":134122609,"v":77,"x":160715,"y":5374505},{"4k":0,"bb":6398297,"bl":166527,"br":473837,"bt":6604292,"c":[],"cl":2,"dom":1,"frc":2,"gs":101781882,"gv":77,"h":"","i":36595,"its":0,"l":13,"n":"˹,","p":"lansi_36595","s":101781882,"v":77,"x":315050,"y":6487642},{"4k":0,"bb":5279943,"bl":481848,"br":861641,"bt":5618402,"c":[],"cl":2,"dom":1,"frc":2,"gs":136233998,"gv":77,"h":"","i":36599,"its":0,"l":13,"n":",˹,˹,","p":"masai_36599","s":136233998,"v":77,"x":598555,"y":5327805},{"4k":0,"bb":5473546,"bl":416340,"br":800637,"bt":5829493,"c":[],"cl":2,"dom":1,"frc":2,"gs":174509955,"gv":77,"h":"","i":36600,"its":0,"l":13,"n":"ﰺ,ʥٰ","p":"liang_36600","s":174509955,"v":77,"x":538359,"y":5711683}],"cl":1,"dom":1,"frc":2,"h":"","i":49841,"its":0,"l":11,"n":"","p":"","s":2905338,"v":15,"x":11925040,"y":2059946},{"4k":0,"bb":950416,"bl":11371741,"br":12186206,"bt":2662871,"c":[{"4k":0,"bb":4952634,"bl":1279873,"br":1701208,"bt":5258050,"c":[],"cl":2,"dom":1,"frc":2,"gs":63912939,"gv":77,"h":"","i":36608,"its":0,"l":13,"n":"","p":"luoma_36608","s":63912939,"v":77,"x":1391234,"y":5115877},{"4k":0,"bb":5383491,"bl":945090,"br":1433287,"bt":5855547,"c":[],"cl":2,"dom":1,"frc":2,"gs":191145989,"gv":77,"h":"","i":36611,"its":0,"l":13,"n":"","p":"milan_36611","s":191145989,"v":77,"x":1022205,"y":5666344},{"4k":0,"bb":5554297,"bl":1153077,"br":1553618,"bt":5928118,"c":[],"cl":2,"dom":1,"frc":2,"gs":157666255,"gv":77,"h":"","i":36612,"its":0,"l":13,"n":"˹","p":"weinisi_36612","s":157666255,"v":77,"x":1371647,"y":5660718},{"4k":0,"bb":5167933,"bl":1090274,"br":1550997,"bt":5488598,"c":[],"cl":2,"dom":1,"frc":2,"gs":80048895,"gv":77,"h":"","i":36614,"its":0,"l":13,"n":"","p":"fololuns_36614","s":80048895,"v":77,"x":1252804,"y":5401149}],"cl":1,"dom":1,"frc":2,"h":"","i":49987,"its":0,"l":11,"n":"","p":"","s":2905338,"v":15,"x":11925040,"y":2059946},{"4k":0,"bb":950416,"bl":11371741,"br":12186206,"bt":2662871,"c":[{"4k":0,"bb":6780373,"bl":493327,"br":685981,"bt":6995931,"c":[],"cl":2,"dom":1,"frc":2,"gs":108094050,"gv":77,"h":"","i":36634,"its":0,"l":13,"n":"ķ˹ص","p":"amstd_36634","s":108094050,"v":77,"x":544842,"y":6833594},{"4k":0,"bb":6526842,"bl":367091,"br":694807,"bt":6812746,"c":[],"cl":2,"dom":1,"frc":2,"gs":157533433,"gv":77,"h":"","i":36636,"its":0,"l":13,"n":"¹ص,","p":"haiya_36636","s":157533433,"v":77,"x":503390,"y":6751307}],"cl":1,"dom":1,"frc":2,"h":"","i":52386,"its":0,"l":11,"n":"","p":"","s":2905338,"v":15,"x":11925040,"y":2059946},{"4k":0,"bb":950416,"bl":11371741,"br":12186206,"bt":2662871,"c":[{"4k":0,"bb":6631545,"bl":-56408,"br":42240,"bt":6721679,"c":[],"cl":2,"dom":1,"frc":2,"gs":65072612,"gv":77,"h":"","i":36642,"its":0,"l":13,"n":"׶","p":"lundun_36642","s":65072612,"v":77,"x":-13673,"y":6677885},{"4k":0,"bb":6932003,"bl":-537539,"br":-207556,"bt":7342978,"c":[],"cl":2,"dom":1,"frc":2,"gs":66182699,"gv":77,"h":"","i":36640,"its":0,"l":13,"n":",˹","p":"liwupu_36640","s":66182699,"v":77,"x":-332941,"y":7023768},{"4k":0,"bb":7256097,"bl":-955824,"br":-81040,"bt":8551494,"c":[],"cl":2,"dom":1,"frc":2,"gs":71583638,"gv":77,"h":"","i":36644,"its":0,"l":13,"n":"","p":"aidingbao_36644","s":71583638,"v":77,"x":-354997,"y":7513084}],"cl":1,"dom":1,"frc":2,"h":"","i":51441,"its":0,"l":11,"n":"Ӣ","p":"","s":2905338,"v":15,"x":11925040,"y":2059946},{"4k":0,"bb":950416,"bl":11371741,"br":12186206,"bt":2662871,"c":[{"4k":0,"bb":6931753,"bl":3724168,"br":4892647,"bt":7870197,"c":[],"cl":2,"dom":1,"frc":2,"gs":151131099,"gv":78,"h":"","i":100286,"its":0,"l":13,"n":"Ī˹","p":"mosok_100286","s":151131099,"v":78,"x":4187560,"y":7474295},{"4k":0,"bb":8270669,"bl":3271387,"br":3433705,"bt":8422707,"c":[],"cl":2,"dom":1,"frc":2,"gs":38416136,"gv":78,"h":"","i":100284,"its":0,"l":13,"n":"ʥ˵ñ","p":"shengbid_100284","s":38416136,"v":78,"x":3376732,"y":8347910},{"4k":0,"bb":5012921,"bl":3615714,"br":19281379,"bt":6927215,"c":[],"cl":2,"dom":1,"frc":2,"gs":201733024,"gv":78,"h":"","i":100274,"its":0,"l":13,"n":"","p":"suoqi_100274","s":201733024,"v":78,"x":4423212,"y":5374449},{"4k":0,"bb":5496311,"bl":3731273,"br":9899629,"bt":8544791,"c":[],"cl":2,"dom":1,"frc":2,"gs":200143941,"gv":78,"h":"","i":100299,"its":0,"l":13,"n":"","p":"xxiboliya_100299","s":200143941,"v":78,"x":9232506,"y":7328182}],"cl":1,"dom":1,"frc":2,"h":"","i":70034,"its":0,"l":11,"n":"˹","p":"","s":2905338,"v":15,"x":11925040,"y":2059946},{"4k":0,"bb":655571,"bl":8852423,"br":9114800,"bt":1092989,"c":[{"4k":0,"bb":3823480,"bl":-1921785,"br":-687383,"bt":5154940,"c":[],"cl":2,"dom":1,"frc":2,"gs":89088190,"gv":77,"h":"","i":36649,"its":0,"l":13,"n":"ͼ,˹","p":"boertu_36649","s":89088190,"v":77,"x":-1017732,"y":4655341}],"cl":1,"dom":1,"frc":2,"h":"","i":51933,"its":0,"l":11,"n":"","p":"","s":2905338,"v":15,"x":8939138,"y":983360},{"4k":0,"bb":655571,"bl":8852423,"br":9114800,"bt":1092989,"c":[{"4k":0,"bb":5168321,"bl":2095290,"br":2571989,"bt":5782740,"c":[],"cl":2,"dom":1,"frc":2,"gs":42161386,"gv":78,"h":"","i":100078,"its":0,"l":13,"n":"","p":"beiergld_100078","s":42161386,"v":78,"x":2276394,"y":5557654}],"cl":1,"dom":1,"frc":2,"h":"","i":70031,"its":0,"l":11,"n":"ά","p":"","s":2905338,"v":15,"x":8939138,"y":983360},{"4k":0,"bb":655571,"bl":8852423,"br":9114800,"bt":1092989,"c":[{"4k":0,"bb":3416001,"bl":3772046,"br":4014986,"bt":3929018,"c":[],"cl":2,"dom":1,"frc":2,"gs":39869897,"gv":78,"h":"","i":100390,"its":0,"l":13,"n":"Ү·","p":"yelusaleng_100390","s":39869897,"v":78,"x":3920075,"y":3710266}],"cl":1,"dom":1,"frc":2,"h":"","i":70063,"its":0,"l":11,"n":"ɫ","p":"","s":2905338,"v":15,"x":8939138,"y":983360},{"4k":0,"bb":950416,"bl":11371741,"br":12186206,"bt":2662871,"c":[{"4k":0,"bb":-2200339,"bl":-5921093,"br":-5124854,"bt":-1439846,"c":[],"cl":2,"dom":1,"frc":2,"gs":31502914,"gv":77,"h":"","i":100052,"its":0,"l":13,"n":"","p":"baxiliya_100052","s":31502914,"v":77,"x":-5330278,"y":-1769165},{"4k":0,"bb":-2658447,"bl":-5679281,"br":-4390728,"bt":-1597172,"c":[],"cl":2,"dom":1,"frc":2,"gs":153414929,"gv":77,"h":"","i":100053,"its":0,"l":13,"n":"Լ¬","p":"liyue_100053","s":153414929,"v":77,"x":-4806377,"y":-2604030},{"4k":0,"bb":-1245184,"bl":-8279366,"br":-6282840,"bt":251786,"c":[],"cl":2,"dom":1,"frc":2,"gs":23272303,"gv":77,"h":"","i":100048,"its":0,"l":13,"n":"˹","p":"manaos_100048","s":23272303,"v":77,"x":-6681670,"y":-345013},{"4k":0,"bb":-1283864,"bl":-4601063,"br":-3266773,"bt":101354,"c":[],"cl":2,"dom":1,"frc":2,"gs":45567091,"gv":77,"h":"","i":100049,"its":0,"l":13,"n":",ִ","p":"leixipai_100049","s":45567091,"v":77,"x":-3883188,"y":-893921},{"4k":0,"bb":-2072863,"bl":-5197577,"br":-4154189,"bt":-939492,"c":[],"cl":2,"dom":1,"frc":2,"gs":40646864,"gv":77,"h":"","i":100051,"its":0,"l":13,"n":"߶,","p":"saerwaduo_100051","s":40646864,"v":77,"x":-4286099,"y":-1446949},{"4k":0,"bb":-1202166,"bl":-5390207,"br":-4482736,"bt":-139983,"c":[],"cl":2,"dom":1,"frc":2,"gs":17982869,"gv":77,"h":"","i":100054,"its":0,"l":13,"n":"ʥ·˹","p":"shengluyis_100054","s":17982869,"v":77,"x":-4929612,"y":-280824},{"4k":0,"bb":-2746287,"bl":-6534188,"br":-5658654,"bt":-1932682,"c":[],"cl":2,"dom":1,"frc":2,"gs":19100254,"gv":77,"h":"","i":100056,"its":0,"l":13,"n":"и","p":"nanmatuo_100056","s":19100254,"v":77,"x":-6080352,"y":-2313687},{"4k":0,"bb":-1095617,"bl":-6552485,"br":-5122129,"bt":175390,"c":[],"cl":2,"dom":1,"frc":2,"gs":22234196,"gv":77,"h":"","i":100057,"its":0,"l":13,"n":"","p":"beilun_100057","s":22234196,"v":77,"x":-5397979,"y":-160967},{"4k":0,"bb":-3386924,"bl":-6111202,"br":-5351663,"bt":-2565079,"c":[],"cl":2,"dom":1,"frc":2,"gs":92763528,"gv":77,"h":"","i":100058,"its":0,"l":13,"n":"˹,ٰ,ʥ","p":"fusi_100058","s":92763528,"v":77,"x":-6076462,"y":-2920715},{"4k":0,"bb":-2895769,"bl":-5899723,"br":-4868347,"bt":-2231433,"c":[],"cl":2,"dom":1,"frc":2,"gs":185283458,"gv":77,"h":"","i":100062,"its":0,"l":13,"n":"ʥ","p":"shengbaoluo_100062","s":185283458,"v":77,"x":-5191227,"y":-2681499}],"cl":1,"dom":1,"frc":2,"h":"","i":39797,"its":0,"l":11,"n":"","p":"","s":2905338,"v":15,"x":11925040,"y":2059946},{"4k":0,"bb":950416,"bl":11371741,"br":12186206,"bt":2662871,"c":[{"4k":0,"bb":-4993310,"bl":-7071647,"br":-6308905,"bt":-3925852,"c":[],"cl":2,"dom":1,"frc":2,"gs":49474579,"gv":77,"h":"","i":100029,"its":0,"l":13,"n":"ŵ˹˹","p":"bynsals_100029","s":49474579,"v":77,"x":-6500431,"y":-4085300},{"4k":0,"bb":-5766792,"bl":-8038673,"br":-6996167,"bt":-4283215,"c":[],"cl":2,"dom":1,"frc":2,"gs":18629159,"gv":77,"h":"","i":100032,"its":0,"l":13,"n":"ʥ˹-°,","p":"shengkaluod_100032","s":18629159,"v":77,"x":-7938327,"y":-5004144},{"4k":0,"bb":-4140905,"bl":-7341146,"br":-6865129,"bt":-3417874,"c":[],"cl":2,"dom":1,"frc":2,"gs":26561564,"gv":77,"h":"","i":100033,"its":0,"l":13,"n":"ƶ","p":"keerduow_100033","s":26561564,"v":77,"x":-7145542,"y":-3665067},{"4k":0,"bb":-3032125,"bl":-7640428,"br":-6916530,"bt":-2462390,"c":[],"cl":2,"dom":1,"frc":2,"gs":14256853,"gv":77,"h":"","i":100035,"its":0,"l":13,"n":"","p":"kafayat_100035","s":14256853,"v":77,"x":-7344523,"y":-2989169},{"4k":0,"bb":-3846290,"bl":-7851245,"br":-7298726,"bt":-3187135,"c":[],"cl":2,"dom":1,"frc":2,"gs":11237123,"gv":77,"h":"","i":100037,"its":0,"l":13,"n":"ʥ","p":"shenghuan_100037","s":11237123,"v":77,"x":-7629753,"y":-3679897},{"4k":0,"bb":-4489594,"bl":-7856049,"br":-7227361,"bt":-3725391,"c":[],"cl":2,"dom":1,"frc":2,"gs":17329478,"gv":77,"h":"","i":100038,"its":0,"l":13,"n":"Ŷ","p":"menduosa_100038","s":17329478,"v":77,"x":-7664021,"y":-3857163},{"4k":0,"bb":-7338705,"bl":-8172215,"br":-7103219,"bt":-5748690,"c":[],"cl":2,"dom":1,"frc":2,"gs":17799289,"gv":77,"h":"","i":100039,"its":0,"l":13,"n":"¼Ү˹,˹","p":"liaojiages_100039","s":17799289,"v":77,"x":-7604147,"y":-7288688},{"4k":0,"bb":-4064146,"bl":-6987030,"br":-6543829,"bt":-3207298,"c":[],"cl":2,"dom":1,"frc":2,"gs":28295749,"gv":77,"h":"","i":100040,"its":0,"l":13,"n":",ʥ","p":"luosaliao_100040","s":28295749,"v":77,"x":-6751708,"y":-3864370}],"cl":1,"dom":1,"frc":2,"h":"","i":39874,"its":0,"l":11,"n":"͢","p":"","s":2905338,"v":15,"x":11925040,"y":2059946},{"4k":0,"bb":950416,"bl":11371741,"br":12186206,"bt":2662871,"c":[{"4k":0,"bb":-4343787,"bl":-12183715,"br":-7759907,"bt":-3015535,"c":[],"cl":2,"dom":1,"frc":2,"gs":63319355,"gv":77,"h":"","i":100004,"its":0,"l":13,"n":"ʥǸ,߶,ǵ¶","p":"shengdiyag_100004","s":63319355,"v":77,"x":-7866890,"y":-3931297},{"4k":0,"bb":-7114124,"bl":-8419712,"br":-7606210,"bt":-6179810,"c":[],"cl":2,"dom":1,"frc":2,"gs":11692074,"gv":77,"h":"","i":100000,"its":0,"l":13,"n":"˹","p":"ptalns_100000","s":11692074,"v":77,"x":-7894539,"y":-6978841},{"4k":0,"bb":-3417690,"bl":-7958830,"br":-7448596,"bt":-1964334,"c":[],"cl":2,"dom":1,"frc":2,"gs":15852116,"gv":77,"h":"","i":100001,"its":0,"l":13,"n":"","p":"yijike_100001","s":15852116,"v":77,"x":-7807554,"y":-2285476},{"4k":0,"bb":-5447784,"bl":-8267695,"br":-7842978,"bt":-4273227,"c":[],"cl":2,"dom":1,"frc":2,"gs":31864770,"gv":77,"h":"","i":100002,"its":0,"l":13,"n":"ظ,,","p":"mengtegang_100002","s":31864770,"v":77,"x":-8119857,"y":-5053202}],"cl":1,"dom":1,"frc":2,"h":"","i":40228,"its":0,"l":11,"n":"","p":"","s":2905338,"v":15,"x":11925040,"y":2059946},{"4k":0,"bb":950416,"bl":11371741,"br":12186206,"bt":2662871,"c":[{"4k":0,"bb":99500,"bl":-8702524,"br":-8123553,"bt":638604,"c":[],"cl":2,"dom":1,"frc":2,"gs":48350276,"gv":77,"h":"","i":100009,"its":0,"l":13,"n":",","p":"bogeda_100009","s":48350276,"v":77,"x":-8245758,"y":521475},{"4k":0,"bb":442484,"bl":-8670371,"br":-8220970,"bt":1049279,"c":[],"cl":2,"dom":1,"frc":2,"gs":18549016,"gv":77,"h":"","i":100007,"its":0,"l":13,"n":"","p":"maidelin_100007","s":18549016,"v":77,"x":-8411899,"y":692768},{"4k":0,"bb":757096,"bl":-8446440,"br":-7918356,"bt":1388564,"c":[],"cl":2,"dom":1,"frc":2,"gs":29692223,"gv":77,"h":"","i":100014,"its":0,"l":13,"n":",","p":"balanjiy_100014","s":29692223,"v":77,"x":-8402432,"y":1155351}],"cl":1,"dom":1,"frc":2,"h":"","i":40382,"its":0,"l":11,"n":"ױ","p":"","s":2905338,"v":15,"x":11925040,"y":2059946},{"4k":0,"bb":950416,"bl":11371741,"br":12186206,"bt":2662871,"c":[{"4k":0,"bb":1083188,"bl":-7598796,"br":-7274850,"bt":1183968,"c":[],"cl":2,"dom":1,"frc":2,"gs":13171403,"gv":77,"h":"","i":100018,"its":0,"l":13,"n":"˹,,","p":"jialajias_100018","s":13171403,"v":77,"x":-7447762,"y":1165447},{"4k":0,"bb":470200,"bl":-7485386,"br":-6749114,"bt":939889,"c":[],"cl":2,"dom":1,"frc":2,"gs":9185655,"gv":77,"h":"","i":100020,"its":0,"l":13,"n":"߶","p":"boliwaer_100020","s":9185655,"v":77,"x":-7074821,"y":897326},{"4k":0,"bb":821893,"bl":-8167506,"br":-7792977,"bt":1319798,"c":[],"cl":2,"dom":1,"frc":2,"gs":15509494,"gv":77,"h":"","i":100025,"its":0,"l":13,"n":",÷","p":"malakaibo_100025","s":15509494,"v":77,"x":-7983337,"y":1184966}],"cl":1,"dom":1,"frc":2,"h":"","i":39949,"its":0,"l":11,"n":"ί","p":"","s":2905338,"v":15,"x":11925040,"y":2059946},{"4k":0,"bb":655571,"bl":8852423,"br":9114800,"bt":1092989,"c":[{"4k":0,"bb":257615,"bl":-6424048,"br":-6005801,"bt":663994,"c":[],"cl":2,"dom":1,"frc":2,"gs":9994426,"gv":77,"h":"","i":100026,"its":0,"l":13,"n":"ﲩ","p":"palamla_100026","s":9994426,"v":77,"x":-6143958,"y":648179}],"cl":1,"dom":1,"frc":2,"h":"","i":39584,"its":0,"l":11,"n":"","p":"","s":2905338,"v":15,"x":8939138,"y":983360},{"4k":0,"bb":655571,"bl":8852423,"br":9114800,"bt":1092989,"c":[{"4k":0,"bb":-3184840,"bl":-7038478,"br":-6029387,"bt":-2139000,"c":[],"cl":2,"dom":1,"frc":2,"gs":30425019,"gv":77,"h":"","i":100027,"its":0,"l":13,"n":"ɭ,","p":"yasongsen_100027","s":30425019,"v":77,"x":-6409340,"y":-2890149}],"cl":1,"dom":1,"frc":2,"h":"","i":40879,"its":0,"l":11,"n":"","p":"","s":2905338,"v":15,"x":8939138,"y":983360},{"4k":0,"bb":655571,"bl":8852423,"br":9114800,"bt":1092989,"c":[{"4k":0,"bb":161796,"bl":-6858961,"br":-6353889,"bt":932461,"c":[],"cl":2,"dom":1,"frc":2,"gs":9743112,"gv":77,"h":"","i":100028,"its":0,"l":13,"n":"ζ,°ķ˹ص","p":"qiaozhidun_100028","s":9743112,"v":77,"x":-6473561,"y":753845}],"cl":1,"dom":1,"frc":2,"h":"","i":40540,"its":0,"l":11,"n":"","p":"","s":2905338,"v":15,"x":8939138,"y":983360},{"4k":0,"bb":950416,"bl":11371741,"br":12186206,"bt":2662871,"c":[{"4k":0,"bb":-1495693,"bl":-8752448,"br":-8174726,"bt":-905974,"c":[],"cl":2,"dom":1,"frc":2,"gs":29611729,"gv":77,"h":"","i":100043,"its":0,"l":13,"n":"","p":"lima_100043","s":29611729,"v":77,"x":-8576456,"y":-1341998},{"4k":0,"bb":-1000387,"bl":-9052867,"br":-8412315,"bt":-331448,"c":[],"cl":2,"dom":1,"frc":2,"gs":17938330,"gv":77,"h":"","i":100041,"its":0,"l":13,"n":"³ϣ","p":"teluxilue_100041","s":17938330,"v":77,"x":-8796771,"y":-899637},{"4k":0,"bb":-1939342,"bl":-8499371,"br":-7871332,"bt":-1327779,"c":[],"cl":2,"dom":1,"frc":2,"gs":17438076,"gv":77,"h":"","i":100042,"its":0,"l":13,"n":"˹,","p":"nasika_100042","s":17438076,"v":77,"x":-8341684,"y":-1659196},{"4k":0,"bb":-1707700,"bl":-8202579,"br":-7589746,"bt":-1088453,"c":[],"cl":2,"dom":1,"frc":2,"gs":13461900,"gv":77,"h":"","i":100044,"its":0,"l":13,"n":"˹,ɶ","p":"kusike_100044","s":13461900,"v":77,"x":-8011530,"y":-1510472},{"4k":0,"bb":-2070237,"bl":-7962263,"br":-7657712,"bt":-1445447,"c":[],"cl":2,"dom":1,"frc":2,"gs":11763164,"gv":77,"h":"","i":100046,"its":0,"l":13,"n":"ŵ,ǿ","p":"punuo_100046","s":11763164,"v":77,"x":-7794882,"y":-1774473}],"cl":1,"dom":1,"frc":2,"h":"","i":40465,"its":0,"l":11,"n":"³","p":"","s":2905338,"v":15,"x":11925040,"y":2059946},{"4k":0,"bb":655571,"bl":8852423,"br":9114800,"bt":1092989,"c":[{"4k":0,"bb":331869,"bl":-6064961,"br":-5746416,"bt":636726,"c":[],"cl":2,"dom":1,"frc":2,"gs":10938970,"gv":77,"h":"","i":100064,"its":0,"l":13,"n":"","p":"kayan_100064","s":10938970,"v":77,"x":-5823581,"y":544962}],"cl":1,"dom":1,"frc":2,"h":"","i":40026,"its":0,"l":11,"n":"","p":"","s":2905338,"v":15,"x":8939138,"y":983360},{"4k":0,"bb":655571,"bl":8852423,"br":9114800,"bt":1092989,"c":[{"4k":0,"bb":-553905,"bl":-10191946,"br":-8363313,"bt":150135,"c":[],"cl":2,"dom":1,"frc":2,"gs":42648042,"gv":77,"h":"","i":100070,"its":0,"l":13,"n":",ǻ,,˹","p":"jiduo_100070","s":42648042,"v":77,"x":-8734828,"y":-19945}],"cl":1,"dom":1,"frc":2,"h":"","i":39509,"its":0,"l":11,"n":"϶","p":"","s":2905338,"v":15,"x":8939138,"y":983360},{"4k":0,"bb":-4142468,"bl":-7694855,"br":-5920057,"bt":-3476492,"c":[],"cl":2,"dom":1,"frc":2,"gs":8774674,"gv":76,"h":"","i":100065,"its":0,"l":13,"n":"","p":"wulagui_100065","s":2905338,"v":76,"x":-6252270,"y":-4125325},{"4k":0,"bb":950416,"bl":11371741,"br":12186206,"bt":2662871,"c":[{"4k":0,"bb":-2034088,"bl":-7751968,"br":-7260521,"bt":-1073524,"c":[],"cl":2,"dom":1,"frc":2,"gs":17155050,"gv":77,"h":"","i":100068,"its":0,"l":13,"n":"˹,","p":"labasi_100068","s":17155050,"v":77,"x":-7583104,"y":-1849249},{"4k":0,"bb":-2324717,"bl":-7222353,"br":-6393313,"bt":-1494303,"c":[],"cl":2,"dom":1,"frc":2,"gs":16911289,"gv":77,"h":"","i":100069,"its":0,"l":13,"n":"ʥ³˹","p":"skelusi_100069","s":16911289,"v":77,"x":-7031096,"y":-2002239},{"4k":0,"bb":-2603647,"bl":-7694855,"br":-6849162,"bt":-1771266,"c":[],"cl":2,"dom":1,"frc":2,"gs":26887638,"gv":77,"h":"","i":100066,"its":0,"l":13,"n":"տ,,,ǡ","p":"sukelei_100066","s":26887638,"v":77,"x":-7265001,"y":-2143198}],"cl":1,"dom":1,"frc":2,"h":"","i":40717,"its":0,"l":11,"n":"ά","p":"","s":2905338,"v":15,"x":11925040,"y":2059946},{"4k":0,"bb":950416,"bl":11371741,"br":12186206,"bt":2662871,"c":[{"4k":0,"bb":3510816,"bl":-9871803,"br":-9449706,"bt":3862440,"c":[],"cl":2,"dom":1,"frc":2,"gs":52028828,"gv":77,"h":"","i":100158,"its":0,"l":13,"n":"ɸ","p":"mengml_100158","s":52028828,"v":77,"x":-9606973,"y":3788471},{"4k":0,"bb":8233595,"bl":-17032198,"br":-15641574,"bt":9673992,"c":[],"cl":2,"dom":1,"frc":2,"gs":25640568,"gv":77,"h":"","i":100159,"its":0,"l":13,"n":"","p":"ankel_100159","s":25640568,"v":77,"x":-16687004,"y":8638248},{"4k":0,"bb":3929715,"bl":-12783375,"br":-12078112,"bt":4448452,"c":[],"cl":2,"dom":1,"frc":2,"gs":44921065,"gv":77,"h":"","i":100163,"its":0,"l":13,"n":"弪","p":"peij_100163","s":44921065,"v":77,"x":-12407328,"y":4401324},{"4k":0,"bb":3640172,"bl":-12784478,"br":-12101531,"bt":4054404,"c":[],"cl":2,"dom":1,"frc":2,"gs":64281676,"gv":77,"h":"","i":100164,"its":0,"l":13,"n":"˹","p":"feiniks_100164","s":64281676,"v":77,"x":-12480935,"y":3951419},{"4k":0,"bb":3809237,"bl":-13509987,"br":-12704960,"bt":4253172,"c":[],"cl":2,"dom":1,"frc":2,"gs":166554834,"gv":77,"h":"","i":100166,"its":0,"l":13,"n":"ɼ,ʥ","p":"luoshanj_100166","s":166554834,"v":77,"x":-13162970,"y":4011670},{"4k":0,"bb":4238978,"bl":-13700456,"br":-12873689,"bt":4660687,"c":[],"cl":2,"dom":1,"frc":2,"gs":112714012,"gv":77,"h":"","i":100168,"its":0,"l":13,"n":"ɽɽ,ʥ,ʥ³,","p":"jiujinshan_100168","s":112714012,"v":77,"x":-13627815,"y":4521261},{"4k":0,"bb":4661262,"bl":-8609534,"br":-8554389,"bt":4711670,"c":[],"cl":2,"dom":1,"frc":2,"gs":28681804,"gv":77,"h":"","i":100175,"its":0,"l":13,"n":"ʢ","p":"huashengd_100175","s":28681804,"v":77,"x":-8575798,"y":4681298},{"4k":0,"bb":2801950,"bl":-9230887,"br":-8909111,"bt":3192173,"c":[],"cl":2,"dom":1,"frc":2,"gs":57566155,"gv":77,"h":"","i":100176,"its":0,"l":13,"n":"","p":"maiami_100176","s":57566155,"v":77,"x":-8931201,"y":2953341},{"4k":0,"bb":3177325,"bl":-9289813,"br":-8942986,"bt":3613969,"c":[],"cl":2,"dom":1,"frc":2,"gs":78695099,"gv":77,"h":"","i":100177,"its":0,"l":13,"n":"","p":"ankel_100177","s":78695099,"v":77,"x":-9049711,"y":3288548},{"4k":0,"bb":3885153,"bl":-9553847,"br":-9148001,"bt":4158273,"c":[],"cl":2,"dom":1,"frc":2,"gs":99304325,"gv":77,"h":"","i":100180,"its":0,"l":13,"n":"","p":"yateland_100180","s":99304325,"v":77,"x":-9402496,"y":3963923},{"4k":0,"bb":2130540,"bl":-19847757,"br":-17233700,"bt":3278320,"c":[],"cl":2,"dom":1,"frc":2,"gs":23268631,"gv":77,"h":"","i":100183,"its":0,"l":13,"n":",̴ɽ,Ĵ,ï˵","p":"xiaweiyi_100183","s":23268631,"v":77,"x":-17572888,"y":2412836},{"4k":0,"bb":4856915,"bl":-10187860,"br":-9673888,"bt":5224058,"c":[],"cl":2,"dom":1,"frc":2,"gs":107041483,"gv":77,"h":"","i":100185,"its":0,"l":13,"n":"֥Ӹ","p":"zhijiage_100185","s":107041483,"v":77,"x":-9773841,"y":5112691},{"4k":0,"bb":4521075,"bl":-9811180,"br":-9424170,"bt":4851749,"c":[],"cl":2,"dom":1,"frc":2,"gs":66930659,"gv":77,"h":"","i":100187,"its":0,"l":13,"n":"˹","p":"bolisi_100187","s":66930659,"v":77,"x":-9591176,"y":4804753},{"4k":0,"bb":4647911,"bl":-8589369,"br":-8468329,"bt":4804873,"c":[],"cl":2,"dom":1,"frc":2,"gs":44184461,"gv":77,"h":"","i":100197,"its":0,"l":13,"n":"ͶĦ","p":"baerdimo_100197","s":44184461,"v":77,"x":-8528522,"y":4736040},{"4k":0,"bb":5019279,"bl":-7993620,"br":-7784654,"bt":5267269,"c":[],"cl":2,"dom":1,"frc":2,"gs":94533960,"gv":77,"h":"","i":100204,"its":0,"l":13,"n":"ʿ","p":"ankel_100204","s":94533960,"v":77,"x":-7909382,"y":5184839},{"4k":0,"bb":5288269,"bl":-10554918,"br":-10154154,"bt":5799212,"c":[],"cl":2,"dom":1,"frc":2,"gs":71032782,"gv":77,"h":"","i":100211,"its":0,"l":13,"n":"ᰢ˹,ʥ","p":"sbl_100211","s":71032782,"v":77,"x":-10377572,"y":5583517},{"4k":0,"bb":4129629,"bl":-13354093,"br":-12681298,"bt":4779671,"c":[],"cl":2,"dom":1,"frc":2,"gs":30674220,"gv":77,"h":"","i":100219,"its":0,"l":13,"n":"˹ά˹","p":"lasiweijiasi_100219","s":30674220,"v":77,"x":-12829738,"y":4313140},{"4k":0,"bb":4910350,"bl":-8369455,"br":-7999138,"bt":5161766,"c":[],"cl":2,"dom":1,"frc":2,"gs":132536843,"gv":77,"h":"","i":100227,"its":0,"l":13,"n":"ŦԼ","p":"niuyue_100227","s":132536843,"v":77,"x":-8222684,"y":4961265},{"4k":0,"bb":4860710,"bl":-9301582,"br":-8769771,"bt":5285589,"c":[],"cl":2,"dom":1,"frc":2,"gs":58448830,"gv":77,"h":"","i":100234,"its":0,"l":13,"n":"","p":"keliful_100234","s":58448830,"v":77,"x":-9095318,"y":5059601},{"4k":0,"bb":4729810,"bl":-9304385,"br":-8979983,"bt":5002925,"c":[],"cl":2,"dom":1,"frc":2,"gs":48718082,"gv":77,"h":"","i":100235,"its":0,"l":13,"n":"ײ","p":"gelunbu_100235","s":48718082,"v":77,"x":-9239495,"y":4832619},{"4k":0,"bb":3940628,"bl":-11535664,"br":-10486548,"bt":4467121,"c":[],"cl":2,"dom":1,"frc":2,"gs":108728063,"gv":77,"h":"","i":100236,"its":0,"l":13,"n":",ƥȱ","p":"ekelahema_100236","s":108728063,"v":77,"x":-10855607,"y":4202519},{"4k":0,"bb":5469215,"bl":-13816137,"br":-13391692,"bt":5797505,"c":[],"cl":2,"dom":1,"frc":2,"gs":64658606,"gv":77,"h":"","i":100240,"its":0,"l":13,"n":"","p":"botelan_100240","s":64658606,"v":77,"x":-13653084,"y":5680597},{"4k":0,"bb":4792609,"bl":-8573843,"br":-8314248,"bt":5145182,"c":[],"cl":2,"dom":1,"frc":2,"gs":84791584,"gv":77,"h":"","i":100242,"its":0,"l":13,"n":"ѳ","p":"feicheng_100242","s":84791584,"v":77,"x":-8367445,"y":4831358},{"4k":0,"bb":4788273,"bl":-8985012,"br":-8680416,"bt":5174175,"c":[],"cl":2,"dom":1,"frc":2,"gs":63042412,"gv":77,"h":"","i":100243,"its":0,"l":13,"n":"ƥȱ","p":"pizib_100243","s":63042412,"v":77,"x":-8904077,"y":4901345},{"4k":0,"bb":3895244,"bl":-9280128,"br":-8928185,"bt":4177257,"c":[],"cl":2,"dom":1,"frc":2,"gs":57226737,"gv":77,"h":"","i":100245,"its":0,"l":13,"n":"ױ","p":"gelunbiya_100245","s":57226737,"v":77,"x":-9020852,"y":4004777},{"4k":0,"bb":2956921,"bl":-11223169,"br":-10638695,"bt":3480724,"c":[],"cl":2,"dom":1,"frc":2,"gs":61129735,"gv":77,"h":"","i":100251,"its":0,"l":13,"n":"ʥ","p":"shengandongna_100251","s":61129735,"v":77,"x":-10964379,"y":3408555},{"4k":0,"bb":3698957,"bl":-10923035,"br":-10452746,"bt":4014205,"c":[],"cl":2,"dom":1,"frc":2,"gs":80513826,"gv":77,"h":"","i":100255,"its":0,"l":13,"n":"˹","p":"dalas_100255","s":80513826,"v":77,"x":-10775508,"y":3842352},{"4k":0,"bb":3328048,"bl":-10752228,"br":-10396343,"bt":3801191,"c":[],"cl":2,"dom":1,"frc":2,"gs":80587358,"gv":77,"h":"","i":100256,"its":0,"l":13,"n":"˹","p":"xiusidun_100256","s":80587358,"v":77,"x":-10616633,"y":3451388},{"4k":0,"bb":4729591,"bl":-12717558,"br":-12106356,"bt":5176574,"c":[],"cl":2,"dom":1,"frc":2,"gs":39634422,"gv":77,"h":"","i":100258,"its":0,"l":13,"n":"κ","p":"yanhu_100258","s":39634422,"v":77,"x":-12455789,"y":4948960},{"4k":0,"bb":1576485,"bl":16155974,"br":16233655,"bt":2038728,"c":[],"cl":2,"dom":1,"frc":2,"gs":10029995,"gv":77,"h":"","i":100492,"its":0,"l":13,"n":"ൺ","p":"saiban_100492","s":10029995,"v":77,"x":16225099,"y":1698412},{"4k":0,"bb":4334962,"bl":-8725124,"br":-8442489,"bt":4589627,"c":[],"cl":2,"dom":1,"frc":2,"gs":67630912,"gv":77,"h":"","i":100263,"its":0,"l":13,"n":"ʿ","p":"lishiman_100263","s":67630912,"v":77,"x":-8620235,"y":4488468},{"4k":0,"bb":5855399,"bl":-13752763,"br":-13469378,"bt":6068226,"c":[],"cl":2,"dom":1,"frc":2,"gs":47670095,"gv":77,"h":"","i":100270,"its":0,"l":13,"n":"ͼ","p":"xiyatu_100270","s":47670095,"v":77,"x":-13622734,"y":6012120}],"cl":1,"dom":1,"frc":2,"h":"","i":54003,"its":0,"l":11,"n":"","p":"","s":2905338,"v":15,"x":11925040,"y":2059946},{"4k":0,"bb":950416,"bl":11371741,"br":12186206,"bt":2662871,"c":[{"4k":0,"bb":6783512,"bl":-12778250,"br":-12459477,"bt":7157957,"c":[],"cl":2,"dom":1,"frc":2,"gs":41632128,"gv":77,"h":"","i":100530,"its":0,"l":13,"n":"ɶ","p":"aidemdun_100530","s":41632128,"v":77,"x":-12633926,"y":7048897},{"4k":0,"bb":6487310,"bl":-12778836,"br":-12459736,"bt":6802511,"c":[],"cl":2,"dom":1,"frc":2,"gs":27320469,"gv":77,"h":"","i":100533,"its":0,"l":13,"n":"","p":"kaerjil_100533","s":27320469,"v":77,"x":-12698484,"y":6591291},{"4k":0,"bb":5345220,"bl":-7390875,"br":-6654999,"bt":5749408,"c":[],"cl":2,"dom":1,"frc":2,"gs":39717908,"gv":77,"h":"","i":100098,"its":0,"l":13,"n":"˹","p":"alfks_100098","s":39717908,"v":77,"x":-7077240,"y":5536082},{"4k":0,"bb":6213505,"bl":-13643260,"br":-12717307,"bt":6883697,"c":[],"cl":2,"dom":1,"frc":2,"gs":41157715,"gv":77,"h":"","i":100106,"its":0,"l":13,"n":"","p":"jiluona_100106","s":41157715,"v":77,"x":-13302379,"y":6393902},{"4k":0,"bb":5848519,"bl":-6613653,"br":-5857767,"bt":6699446,"c":[],"cl":2,"dom":1,"frc":2,"gs":99655809,"gv":77,"h":"","i":100109,"its":0,"l":13,"n":"Ŧ","p":"niufen_100109","s":99655809,"v":77,"x":-5872646,"y":6008366},{"4k":0,"bb":8351248,"bl":-14287579,"br":-12123880,"bt":9503809,"c":[],"cl":2,"dom":1,"frc":2,"gs":59453461,"gv":77,"h":"","i":100110,"its":0,"l":13,"n":"Ƶ","p":"huangdao_100110","s":59453461,"v":77,"x":-12731952,"y":8929360},{"4k":0,"bb":5794257,"bl":-7698926,"br":-7176929,"bt":6084378,"c":[],"cl":2,"dom":1,"frc":2,"gs":94940561,"gv":77,"h":"","i":100094,"its":0,"l":13,"n":"ά","p":"weiduoliya_100094","s":94940561,"v":77,"x":-13733150,"y":6146155},{"4k":0,"bb":6211602,"bl":-10894084,"br":-10586628,"bt":6485660,"c":[],"cl":2,"dom":1,"frc":2,"gs":23405886,"gv":77,"h":"","i":100525,"its":0,"l":13,"n":"Ხ","p":"wennibo_100525","s":23405886,"v":77,"x":-10822082,"y":6388407},{"4k":0,"bb":5578002,"bl":-8357657,"br":-8109343,"bt":5834548,"c":[],"cl":2,"dom":1,"frc":2,"gs":45801436,"gv":77,"h":"","i":100128,"its":0,"l":13,"n":"","p":"mengtele_100128","s":45801436,"v":77,"x":-8206581,"y":5669527},{"4k":0,"bb":5462036,"bl":-8707453,"br":-8265067,"bt":5784444,"c":[],"cl":2,"dom":1,"frc":2,"gs":50371248,"gv":77,"h":"","i":100131,"its":0,"l":13,"n":"̫","p":"wotaihua_100131","s":50371248,"v":77,"x":-8426664,"y":5657404},{"4k":0,"bb":5803610,"bl":-8067810,"br":-7778233,"bt":6075477,"c":[],"cl":2,"dom":1,"frc":2,"gs":24725169,"gv":77,"h":"","i":100132,"its":0,"l":13,"n":"","p":"kuibeik_100132","s":24725169,"v":77,"x":-7927490,"y":5879971},{"4k":0,"bb":5066388,"bl":-9367536,"br":-8427946,"bt":5835646,"c":[],"cl":2,"dom":1,"frc":2,"gs":170031233,"gv":77,"h":"","i":100139,"its":0,"l":13,"n":"׶,ܶ,Ǽ","p":"duolunduo_100139","s":170031233,"v":77,"x":-8836991,"y":5382159},{"4k":0,"bb":6228807,"bl":-13899966,"br":-13443487,"bt":6625256,"c":[],"cl":2,"dom":1,"frc":2,"gs":39932538,"gv":77,"h":"","i":100140,"its":0,"l":13,"n":"¸绪,","p":"wengehua_100140","s":39932538,"v":77,"x":-13705195,"y":6286029}],"cl":1,"dom":1,"frc":2,"h":"","i":54015,"its":0,"l":11,"n":"ô","p":"","s":2905338,"v":15,"x":11925040,"y":2059946},{"4k":0,"bb":950416,"bl":11371741,"br":12186206,"bt":2662871,"c":[{"4k":0,"bb":2014440,"bl":-11770916,"br":-11105361,"bt":2830844,"c":[],"cl":2,"dom":1,"frc":2,"gs":59708640,"gv":77,"h":"","i":100358,"its":0,"l":13,"n":",Ƕ,ϴ,ɻ","p":"laiang_100358","s":59708640,"v":77,"x":-11317305,"y":2388136},{"4k":0,"bb":2599867,"bl":-13172688,"br":-12181283,"bt":3836634,"c":[],"cl":2,"dom":1,"frc":2,"gs":24141506,"gv":77,"h":"","i":100359,"its":0,"l":13,"n":"ٻ","p":"dihuan_100359","s":24141506,"v":77,"x":-13028807,"y":3807902},{"4k":0,"bb":1624975,"bl":-10487009,"br":-9631969,"bt":2449023,"c":[],"cl":2,"dom":1,"frc":2,"gs":31778233,"gv":77,"h":"","i":100360,"its":0,"l":13,"n":"÷,,","p":"meilida_100360","s":31778233,"v":77,"x":-9859428,"y":2339043},{"4k":0,"bb":2935696,"bl":-12128477,"br":-11507235,"bt":3721369,"c":[],"cl":2,"dom":1,"frc":2,"gs":22563488,"gv":77,"h":"","i":100361,"its":0,"l":13,"n":"","p":"qiwawa_100361","s":22563488,"v":77,"x":-11807686,"y":3308354},{"4k":0,"bb":1753509,"bl":-11378031,"br":-10439204,"bt":2556023,"c":[],"cl":2,"dom":1,"frc":2,"gs":97790742,"gv":77,"h":"","i":100363,"its":0,"l":13,"n":"ī,հ,߹","p":"moxigecity_100363","s":97790742,"v":77,"x":-11035578,"y":2191592},{"4k":0,"bb":2404227,"bl":-11377526,"br":-10814828,"bt":3199223,"c":[],"cl":2,"dom":1,"frc":2,"gs":39487770,"gv":77,"h":"","i":100365,"its":0,"l":13,"n":"ī","p":"mengtelei_100365","s":39487770,"v":77,"x":-11167297,"y":2941606}],"cl":1,"dom":1,"frc":2,"h":"","i":54025,"its":0,"l":11,"n":"ī","p":"","s":2905338,"v":15,"x":11925040,"y":2059946},{"4k":0,"bb":655571,"bl":8852423,"br":9114800,"bt":1092989,"c":[{"4k":0,"bb":1171110,"bl":-9760342,"br":-9236664,"bt":1677988,"c":[],"cl":2,"dom":1,"frc":2,"gs":19054445,"gv":77,"h":"","i":100147,"its":0,"l":13,"n":"ǹ","p":"managua_100147","s":19054445,"v":77,"x":-9599871,"y":1349751}],"cl":1,"dom":1,"frc":2,"h":"","i":54032,"its":0,"l":11,"n":"","p":"","s":2905338,"v":15,"x":8939138,"y":983360},{"4k":0,"bb":655571,"bl":8852423,"br":9114800,"bt":1092989,"c":[{"4k":0,"bb":2010760,"bl":-7563677,"br":-7263085,"bt":2084246,"c":[],"cl":2,"dom":1,"frc":2,"gs":27225888,"gv":77,"h":"","i":100389,"its":0,"l":13,"n":"ʥ","p":"shenghua_100389","s":27225888,"v":77,"x":-7358957,"y":2078487}],"cl":1,"dom":1,"frc":2,"h":"","i":54028,"its":0,"l":11,"n":"","p":"","s":2905338,"v":15,"x":8939138,"y":983360},{"4k":0,"bb":655571,"bl":8852423,"br":9114800,"bt":1092989,"c":[{"4k":0,"bb":2428732,"bl":-9456857,"br":-8956104,"bt":2644437,"c":[],"cl":2,"dom":1,"frc":2,"gs":16936085,"gv":77,"h":"","i":100463,"its":0,"l":13,"n":"","p":"hawana_100463","s":16936085,"v":77,"x":-9169107,"y":2628837}],"cl":1,"dom":1,"frc":2,"h":"","i":54039,"its":0,"l":11,"n":"Ű","p":"","s":2905338,"v":15,"x":8939138,"y":983360},{"4k":0,"bb":655571,"bl":8852423,"br":9114800,"bt":1092989,"c":[{"4k":0,"bb":802103,"bl":-9270564,"br":-8585898,"bt":1107005,"c":[],"cl":2,"dom":1,"frc":2,"gs":18230810,"gv":77,"h":"","i":100489,"its":0,"l":13,"n":"","p":"banama_100489","s":18230810,"v":77,"x":-8839182,"y":1010608}],"cl":1,"dom":1,"frc":2,"h":"","i":54021,"its":0,"l":11,"n":"","p":"","s":2905338,"v":15,"x":8939138,"y":983360},{"4k":0,"bb":655571,"bl":8852423,"br":9114800,"bt":1092989,"c":[{"4k":0,"bb":2216580,"bl":2665350,"br":4144360,"bt":3697831,"c":[],"cl":2,"dom":1,"frc":2,"gs":51212252,"gv":78,"h":"","i":100344,"its":0,"l":13,"n":"","p":"kailuo_100344","s":51212252,"v":78,"x":3477180,"y":3487670}],"cl":1,"dom":1,"frc":2,"h":"","i":70102,"its":0,"l":11,"n":"","p":"","s":2905338,"v":15,"x":8939138,"y":983360},{"4k":0,"bb":655571,"bl":8852423,"br":9114800,"bt":1092989,"c":[{"4k":0,"bb":-4116590,"bl":1986929,"br":2684526,"bt":-3550264,"c":[],"cl":2,"dom":1,"frc":2,"gs":33707505,"gv":78,"h":"","i":100357,"its":0,"l":13,"n":"ն","p":"kaipudun_100357","s":33707505,"v":78,"x":2050967,"y":-3994616}],"cl":1,"dom":1,"frc":2,"h":"","i":70087,"its":0,"l":11,"n":"Ϸ","p":"","s":2905338,"v":15,"x":8939138,"y":983360},{"4k":0,"bb":655571,"bl":8852423,"br":9114800,"bt":1092989,"c":[{"4k":0,"bb":3164152,"bl":-1469411,"br":-111319,"bt":4264562,"c":[],"cl":2,"dom":1,"frc":2,"gs":50932896,"gv":78,"h":"","i":100382,"its":0,"l":13,"n":"ʲ","p":"malakashi_100382","s":50932896,"v":78,"x":-888494,"y":3692199}],"cl":1,"dom":1,"frc":2,"h":"","i":70052,"its":0,"l":11,"n":"Ħ","p":"","s":2905338,"v":15,"x":8939138,"y":983360}],"dver":522,"fver":3000} \ No newline at end of file diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/DVHotMap.cfg b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/DVHotMap.cfg deleted file mode 100644 index c032305..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/DVHotMap.cfg +++ /dev/null @@ -1,106 +0,0 @@ -{ -"ver":3, -"cities": -[ -{"i":131,"n":"北京市","bl": 12893020.92, "bb": 4781550.32, "br": 13022044.92, "bt": 4899310.32}, -{"i":289,"n":"上海市","bl": 13478516.92, "bb": 3608446.32, "br": 13566964.92, "bt": 3672830.32}, -{"i":257,"n":"广州市","bl": 12574260.92, "bb": 2604350.32, "br": 12640436.92, "bt": 2668222.32}, -{"i":340,"n":"深圳市","bl": 12662868.92, "bb": 2556766.32, "br": 12730708.92, "bt": 2599518.32}, -{"i":179,"n":"杭州市","bl": 13351892.92, "bb": 3502942.32, "br": 13423700.92, "bt": 3547614.32}, -{"i":176,"n":"太原市","bl": 12487124.92, "bb": 4508254.32, "br": 12543796.92, "bt": 4560446.32}, -{"i":332,"n":"天津市","bl": 13012180.92, "bb": 4689758.32, "br": 13110484.92, "bt": 4745822.32}, -{"i":288,"n":"济南市","bl": 12993108.92, "bb": 4340606.32, "br": 13087956.92, "bt": 4397694.32}, -{"i":224,"n":"苏州市","bl": 13377780.92, "bb": 3618878.32, "br": 13451572.92, "bt": 3705534.32}, -{"i":194,"n":"厦门市","bl": 13107028.92, "bb": 2778878.32, "br": 13188308.92, "bt": 2834942.32}, -{"i":236,"n":"青岛市","bl": 13366836.92, "bb": 4261630.32, "br": 13419476.92, "bt": 4333950.32}, -{"i":268,"n":"郑州市","bl": 12628724.92, "bb": 4088862.32, "br": 12685300.92, "bt": 4123422.32}, -{"i":75,"n":"成都市","bl": 11550516.92, "bb": 3543262.32, "br": 11622324.92, "bt": 3597790.32}, -{"i":218,"n":"武汉市","bl": 12695220.92, "bb": 3523934.32, "br": 12756148.92, "bt": 3578590.32}, -{"i":315,"n":"南京市","bl": 13197364.92, "bb": 3725150.32, "br": 13256884.92, "bt": 3782494.32}, -{"i":233,"n":"西安市","bl": 12106228.92, "bb": 4019550.32, "br": 12158836.92, "bt": 4062046.32}, -{"i":127,"n":"合肥市","bl": 13033076.92, "bb": 3697886.32, "br": 13082996.92, "bt": 3744606.32}, -{"i":300,"n":"福州市","bl": 13258484.92, "bb": 2964830.32, "br": 13312756.92, "bt": 3016030.32}, -{"i":158,"n":"长沙市","bl": 12562932.92, "bb": 3239966.32, "br": 12607860.92, "bt": 3265502.32}, -{"i":150,"n":"石家庄市","bl": 12724788.92, "bb": 4541342.32, "br": 12774580.92, "bt": 4578718.32}, -{"i":132,"n":"重庆市","bl": 11840820.92, "bb": 3400990.32, "br": 11881012.92, "bt": 3445534.32}, -{"i":104,"n":"昆明市","bl": 11420468.92, "bb": 2843294.32, "br": 11464500.92, "bt": 2877726.32}, -{"i":261,"n":"南宁市","bl":12036148.92,"bb":2564894.32,"br":12082612.92,"bt":2609310.32}, -{"i":163,"n":"南昌市","bl": 12877940.92, "bb": 3291614.32, "br": 12923508.92, "bt": 3328734.32}, -{"i":53,"n":"长春市","bl": 13926516.92, "bb": 5396574.32, "br": 13983348.92, "bt": 5446494.32}, -{"i":146,"n":"贵阳市","bl": 11854964.92, "bb": 3024990.32, "br": 11901300.92, "bt": 3072606.32}, -{"i":180,"n":"宁波市","bl": 13508084.92, "bb": 3449630.32, "br": 13576052.92, "bt": 3491102.32}, -{"i":48,"n":"哈尔滨市","bl": 14051444.92, "bb": 5685534.32, "br": 14123764.92, "bt": 5737886.32}, -{"i":92,"n":"乌鲁木齐市","bl": 9718644.92, "bb": 5391262.32, "br": 9779444.92, "bt": 5444894.32}, -{"i":317,"n":"无锡市","bl": 13362487.810000, "bb": 3664426.860000, "br": 13422487.810000, "bt": 3704426.860000}, -{"i":321,"n":"呼和浩特市","bl": 12400108.610000, "bb": 4938853.060000, "br": 12460108.610000, "bt": 4978853.060000}, -{"i":178,"n":"温州市","bl": 13405366.190000, "bb": 3209086.950000, "br": 13465366.190000, "bt": 3249086.950000}, -{"i":125,"n":"海口市","bl": 12252102.320000, "bb": 2240885.320000, "br": 12312102.320000, "bt": 2280885.320000}, -{"i":316,"n":"徐州市","bl": 13015462.300000, "bb": 4021039.600000, "br": 13075462.300000, "bt": 4061039.600000}, -{"i":119,"n":"东莞市","bl": 12634225.340000, "bb": 2600346.880000, "br": 12694225.340000, "bt": 2640346.880000}, -{"i":347,"n":"连云港市","bl": 13236519.120000, "bb": 4065375.220000, "br": 13296519.120000, "bt": 4105375.220000}, -{"i":138,"n":"佛山市","bl": 12564159.160000, "bb": 2599393.220000, "br": 12624159.160000, "bt": 2639393.220000}, -{"i":307,"n":"保定市","bl": 12826963.350000, "bb": 4658360.500000, "br": 12886963.350000, "bt": 4698360.500000}, -{"i":36,"n":"兰州市","bl": 11527683.250000, "bb": 4264074.360000, "br": 11587683.250000, "bt": 4304074.360000}, -{"i":58,"n":"沈阳市","bl": 13710624.940000, "bb": 5083604.930000, "br": 13770624.940000, "bt": 5123604.930000}, -{"i":134,"n":"泉州市","bl": 13172675.600000, "bb": 2825515.500000, "br": 13232675.600000, "bt": 2865515.500000}, -{"i":167,"n":"大连市","bl": 13505871.310000, "bb": 4667215.520000, "br": 13565871.310000, "bt": 4707215.520000}, -{"i":153,"n":"洛阳市","bl": 12487737.400000, "bb": 4072892.140000, "br": 12547737.400000, "bt": 4112892.140000}, -{"i":160,"n":"镇江市","bl": 13267907.460000, "bb": 3747190.940000, "br": 13327907.460000, "bt": 3787190.940000}, -{"i":162,"n":"淮安市","bl": 13220523.910000, "bb": 3932219.560000, "br": 13280523.910000, "bt": 3972219.560000}, -{"i":349,"n":"九江市","bl": 12883184.520000, "bb": 3426185.890000, "br": 12943184.520000, "bt": 3466185.890000}, -{"i":161,"n":"南通市","bl": 13425756.380000, "bb": 3722375.180000, "br": 13485756.380000, "bt": 3762375.180000}, -{"i":360,"n":"银川市","bl": 11792979.760000, "bb": 4603825.040000, "br": 11852979.760000, "bt": 4643825.040000}, -{"i":142,"n":"桂林市","bl": 12244323.040000, "bb": 2869670.320000, "br": 12304323.040000, "bt": 2909670.320000}, -{"i":149,"n":"沧州市","bl": 12979360.980000, "bb": 4574826.050000, "br": 13039360.980000, "bt": 4614826.050000}, -{"i":191,"n":"廊坊市","bl": 12961526.930000, "bb": 4748788.230000, "br": 13021526.930000, "bt": 4788788.230000}, -{"i":348,"n":"常州市","bl": 13326465.000000, "bb": 3690635.190000, "br": 13386465.000000, "bt": 3730635.190000}, -{"i":187,"n":"中山市","bl": 12596223.350000, "bb": 2540577.370000, "br": 12656223.350000, "bt": 2580577.370000}, -{"i":287,"n":"潍坊市","bl": 13233041.640000, "bb": 4353827.070000, "br": 13293041.640000, "bt": 4393827.070000}, -{"i":305,"n":"柳州市","bl": 12150978.590000, "bb": 2755794.040000, "br": 12210978.590000, "bt": 2795794.040000}, -{"i":308,"n":"周口市","bl": 12733375.120000, "bb": 3934511.680000, "br": 12793375.120000, "bt": 3974511.680000}, -{"i":333,"n":"金华市","bl": 13289808.730000, "bb": 3347777.040000, "br": 13349808.730000, "bt": 3387777.040000}, -{"i":234,"n":"临沂市","bl": 13143777.400000, "bb": 4128945.460000, "br": 13203777.400000, "bt": 4168945.460000}, -{"i":55,"n":"吉林市","bl": 14059253.890000, "bb": 5395759.910000, "br": 14119253.890000, "bt": 5435759.910000}, -{"i":334,"n":"嘉兴市","bl": 13413135.590000, "bb": 3561369.510000, "br": 13473135.590000, "bt": 3601369.510000}, -{"i":301,"n":"惠州市","bl": 12706274.780000, "bb": 2608830.720000, "br": 12766274.780000, "bt": 2648830.720000}, -{"i":66,"n":"西宁市","bl": 11298876.410000, "bb": 4343410.220000, "br": 11358876.410000, "bt": 4383410.220000}, -{"i":326,"n":"烟台市","bl": 13474264.830000, "bb": 4467886.610000, "br": 13534264.830000, "bt": 4507886.610000}, -{"i":265,"n":"唐山市","bl": 13126264.690000, "bb": 4767766.500000, "br": 13186264.690000, "bt": 4807766.500000}, -{"i":244,"n":"台州市","bl": 13488854.290000, "bb": 3292807.610000, "br": 13548854.290000, "bt": 3332807.610000}, -{"i":151,"n":"邯郸市","bl": 12714293.860000, "bb": 4339069.600000, "br": 12774293.860000, "bt": 4379069.600000}, -{"i":293,"n":"绍兴市","bl": 13394438.130000, "bb": 3462292.230000, "br": 13454438.130000, "bt": 3502292.230000}, -{"i":157,"n":"荆州市","bl": 12464843.300000, "bb": 3504596.710000, "br": 12524843.300000, "bt": 3544596.710000}, -{"i":140,"n":"珠海市","bl": 12611851.330000, "bb": 2506069.550000, "br": 12671851.330000, "bt": 2546069.550000}, -{"i":152,"n":"新乡市","bl": 12650840.640000, "bb": 4160790.270000, "br": 12710840.640000, "bt": 4200790.270000}, -{"i":223,"n":"盐城市","bl": 13345056.760000, "bb": 3902107.560000, "br": 13405056.760000, "bt": 3942107.560000}, -{"i":220,"n":"岳阳市","bl": 12565513.920000, "bb": 3382693.340000, "br": 12625513.920000, "bt": 3422693.340000}, -{"i":303,"n":"汕头市","bl": 12964315.300000, "bb": 2641400.920000, "br": 13024315.300000, "bt": 2681400.920000}, -{"i":309,"n":"南阳市","bl": 12498348.170000, "bb": 3853326.130000, "br": 12558348.170000, "bt": 3893326.130000}, -{"i":286,"n":"济宁市","bl": 12950082.650000, "bb": 4173680.010000, "br": 13010082.650000, "bt": 4213680.010000}, -{"i":277,"n":"宿迁市","bl": 13138893.220000, "bb": 3978280.610000, "br": 13198893.220000, "bt": 4018280.610000}, -{"i":346,"n":"扬州市","bl": 13264784.040000, "bb": 3773942.000000, "br": 13324784.040000, "bt": 3813942.000000}, -{"i":302,"n":"江门市","bl": 12557936.300000, "bb": 2544165.550000, "br": 12617936.300000, "bt": 2584165.550000}, -{"i":199,"n":"阳江市","bl": 12435359.340000, "bb": 2460045.770000, "br": 12495359.340000, "bt": 2500045.770000}, -{"i":354,"n":"淄博市","bl": 13112425.710000, "bb": 4366080.450000, "br": 13172425.710000, "bt": 4406080.450000}, -{"i":338,"n":"肇庆市","bl": 12491313.980000, "bb": 2604634.130000, "br": 12551313.980000, "bt": 2644634.130000}, -{"i":365,"n":"赣州市","bl": 12764746.090000, "bb": 2941136.590000, "br": 12824746.090000, "bt": 2981136.590000}, -{"i":266,"n":"邢台市","bl": 12718500.990000, "bb": 4402806.700000, "br": 12778500.990000, "bt": 4442806.700000}, -{"i":159,"n":"衡阳市","bl": 12502909.750000, "bb": 3071248.080000, "br": 12562909.750000, "bt": 3111248.080000}, -{"i":238,"n":"晋中市","bl": 12520130.570000, "bb": 4489828.420000, "br": 12580130.570000, "bt": 4529828.420000}, -{"i":267,"n":"安阳市","bl": 12699723.380000, "bb": 4270388.550000, "br": 12759723.380000, "bt": 4310388.550000}, -{"i":240,"n":"绵阳市","bl": 11625891.880000, "bb": 3655935.190000, "br": 11685891.880000, "bt": 3695935.190000}, -{"i":325,"n":"泰安市","bl": 13004475.870000, "bb": 4281068.220000, "br": 13064475.870000, "bt": 4321068.220000}, -{"i":276,"n":"泰州市","bl": 13319534.730000, "bb": 3782809.030000, "br": 13379534.730000, "bt": 3822809.030000}, -{"i":155,"n":"许昌市","bl": 12642226.900000, "bb": 3988261.730000, "br": 12702226.900000, "bt": 4028261.730000}, -{"i":328,"n":"运城市","bl": 12327360.880000, "bb": 4124403.790000, "br": 12387360.880000, "bt": 4164403.790000}, -{"i":264,"n":"张家口市","bl": 12760056.420000, "bb": 4936342.980000, "br": 12820056.420000, "bt": 4976342.980000}, -{"i":353,"n":"菏泽市","bl": 12823462.270000, "bb": 4154706.020000, "br": 12883462.270000, "bt": 4194706.020000}, -{"i":237,"n":"朔州市","bl": 12491344.520000, "bb": 4722817.090000, "br": 12551344.520000, "bt": 4762817.090000}, -{"i":211,"n":"焦作市","bl": 12572821.050000, "bb": 4150929.200000, "br": 12632821.050000, "bt": 4190929.200000}, -{"i":366,"n":"聊城市","bl": 12881739.700000, "bb": 4317899.460000, "br": 12941739.700000, "bt": 4357899.460000}, -{"i":337,"n":"铜陵市","bl": 13085741.520000, "bb": 3582909.300000, "br": 13145741.520000, "bt": 3622909.300000}, -{"i":368,"n":"临汾市","bl": 12386576.140000, "bb": 4268945.310000, "br": 12446576.140000, "bt": 4308945.310000}, -{"i":198,"n":"湛江市","bl": 12255916.770000, "bb": 2386974.260000, "br": 12315916.770000, "bt": 2426974.260000}, -{"i":213,"n":"平顶山市","bl": 12582730.050000, "bb": 3950697.960000, "br": 12642730.050000, "bt": 3990697.960000} -] -} diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/DVHotcity.cfg b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/DVHotcity.cfg deleted file mode 100644 index 94e687f..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/DVHotcity.cfg +++ /dev/null @@ -1 +0,0 @@ -{"cities":[{"4k":0,"bb":4757504,"bl":12849152,"br":13082624,"bt":4994048,"c":[],"cl":2,"dom":1,"frc":1,"h":"bj","i":131,"its":1,"l":12,"n":"","p":"beijing_131","s":45521986,"v":320,"x":12959247,"y":4825323},{"4k":0,"bb":3568640,"bl":13454336,"br":13582336,"bt":3724288,"c":[],"cl":2,"dom":1,"frc":1,"h":"sh","i":289,"its":1,"l":12,"n":"Ϻ","p":"shanghai_289","s":41108081,"v":320,"x":13523376,"y":3641154},{"4k":0,"bb":2556928,"bl":12574720,"br":12698624,"bt":2728960,"c":[],"cl":2,"dom":1,"frc":1,"h":"gz","i":257,"its":1,"l":12,"n":"","p":"guangzhou_257","s":30107772,"v":320,"x":12609501,"y":2631394},{"4k":0,"bb":3640320,"bl":13176832,"br":13275136,"bt":3822592,"c":[],"cl":2,"dom":1,"frc":1,"h":"nj","i":315,"its":1,"l":12,"n":"Ͼ","p":"nanjing_315","s":21777532,"v":320,"x":13225203,"y":3748900},{"4k":0,"bb":3379200,"bl":13174784,"br":13440000,"bt":3556352,"c":[],"cl":2,"dom":1,"frc":1,"h":"hz","i":179,"its":1,"l":12,"n":"","p":"hangzhou_179","s":23401139,"v":320,"x":13376654,"y":3517776},{"4k":0,"bb":3493888,"bl":11468800,"br":11677696,"bt":3667968,"c":[],"cl":2,"dom":1,"frc":1,"h":"cd","i":75,"its":1,"l":12,"n":"ɶ","p":"chengdu_75","s":28504148,"v":320,"x":11585284,"y":3567299},{"4k":0,"bb":2523136,"bl":12654592,"br":12764160,"bt":2598912,"c":[],"cl":2,"dom":1,"frc":1,"h":"sz","i":340,"its":1,"l":12,"n":"","p":"shenzhen_340","s":28685707,"v":320,"x":12697742,"y":2560988},{"bb":2511872,"bl":12670976,"br":12747776,"bt":2564096,"c":[],"cl":2,"dom":1,"frc":2,"gs":63494441,"gv":75,"h":"xgtbxz","i":2912,"its":0,"l":11,"n":"ر","p":"xianggangtebiexingzheng_2912","s":63494441,"v":75,"x":12709499,"y":2529064},{"bb":2507776,"bl":12639232,"br":12648448,"bt":2522112,"c":[],"cl":2,"dom":1,"frc":2,"gs":22632328,"gv":75,"h":"amtbxz","i":2911,"its":0,"l":13,"n":"ر","p":"aomentebiexingzheng_2911","s":22632328,"v":75,"x":12640429,"y":2518425}],"dver":333,"fver":1} \ No newline at end of file diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/DVSDirectory.cfg b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/DVSDirectory.cfg deleted file mode 100644 index f676ae2..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/DVSDirectory.cfg +++ /dev/null @@ -1 +0,0 @@ -{"cities":[{"i":1,"s":6311577},{"i":33,"s":374657},{"i":34,"s":369346},{"i":35,"s":784583},{"i":36,"s":4001430},{"i":37,"s":824859},{"i":38,"s":161574},{"i":39,"s":827221},{"i":40,"s":513938},{"i":41,"s":1989451},{"i":42,"s":1236080},{"i":43,"s":582875},{"i":44,"s":1363207},{"i":45,"s":516660},{"i":46,"s":814087},{"i":47,"s":374346},{"i":48,"s":8298071},{"i":49,"s":1378713},{"i":50,"s":1836166},{"i":51,"s":1027412},{"i":52,"s":1406803},{"i":53,"s":7802022},{"i":54,"s":1552641},{"i":55,"s":2922503},{"i":56,"s":1274608},{"i":57,"s":816095},{"i":58,"s":11305203},{"i":59,"s":1231027},{"i":60,"s":1334879},{"i":61,"s":1591091},{"i":62,"s":731286},{"i":63,"s":794223},{"i":64,"s":1627312},{"i":65,"s":407298},{"i":66,"s":2318949},{"i":67,"s":142942},{"i":68,"s":191525},{"i":69,"s":427116},{"i":70,"s":75934},{"i":71,"s":85734},{"i":72,"s":61945},{"i":73,"s":394522},{"i":74,"s":2644756},{"i":75,"s":22595419},{"i":76,"s":965040},{"i":77,"s":1478931},{"i":78,"s":1031256},{"i":79,"s":2097352},{"i":80,"s":1311645},{"i":81,"s":890966},{"i":82,"s":333718},{"i":83,"s":777662},{"i":84,"s":116498},{"i":85,"s":838583},{"i":86,"s":1083769},{"i":87,"s":714852},{"i":88,"s":335815},{"i":89,"s":354890},{"i":90,"s":1357614},{"i":91,"s":588366},{"i":92,"s":4842337},{"i":93,"s":1187938},{"i":94,"s":506545},{"i":95,"s":536398},{"i":96,"s":349367},{"i":97,"s":111416},{"i":98,"s":172390},{"i":99,"s":96653},{"i":100,"s":840384},{"i":101,"s":77431},{"i":102,"s":214865},{"i":103,"s":51153},{"i":104,"s":9950066},{"i":105,"s":1416121},{"i":106,"s":1672399},{"i":107,"s":1602884},{"i":108,"s":1072131},{"i":109,"s":960604},{"i":110,"s":748693},{"i":111,"s":2050356},{"i":112,"s":1121533},{"i":113,"s":208741},{"i":114,"s":1410196},{"i":115,"s":353429},{"i":116,"s":829689},{"i":117,"s":663653},{"i":118,"s":603348},{"i":119,"s":12755714},{"i":120,"s":964},{"i":121,"s":1426643},{"i":122,"s":550782},{"i":123,"s":568553},{"i":124,"s":880064},{"i":125,"s":3221357},{"i":126,"s":1654577},{"i":127,"s":7394210},{"i":128,"s":2376756},{"i":129,"s":2209133},{"i":130,"s":2843045},{"i":131,"s":29648081},{"i":132,"s":19676006},{"i":133,"s":1954890},{"i":134,"s":6865312},{"i":135,"s":875771},{"i":136,"s":641010},{"i":137,"s":1959547},{"i":138,"s":11728277},{"i":139,"s":2326966},{"i":140,"s":3604823},{"i":141,"s":2461935},{"i":142,"s":3515475},{"i":143,"s":1377538},{"i":144,"s":845095},{"i":145,"s":1137399},{"i":146,"s":4509862},{"i":147,"s":978397},{"i":148,"s":2733643},{"i":149,"s":2940804},{"i":150,"s":8282513},{"i":151,"s":3209391},{"i":152,"s":2881173},{"i":153,"s":4931275},{"i":154,"s":2202765},{"i":155,"s":1938270},{"i":156,"s":3053534},{"i":157,"s":2437574},{"i":158,"s":10162032},{"i":159,"s":2755455},{"i":160,"s":3384868},{"i":161,"s":6557961},{"i":162,"s":3304197},{"i":163,"s":5894980},{"i":164,"s":815941},{"i":165,"s":1207150},{"i":166,"s":1940242},{"i":167,"s":8019474},{"i":168,"s":1159737},{"i":169,"s":1028703},{"i":170,"s":2224879},{"i":171,"s":1764148},{"i":172,"s":2112686},{"i":173,"s":1916988},{"i":174,"s":1981050},{"i":175,"s":3457026},{"i":176,"s":5584262},{"i":177,"s":1157595},{"i":178,"s":8566717},{"i":179,"s":16817914},{"i":180,"s":11010128},{"i":181,"s":554125},{"i":182,"s":424196},{"i":183,"s":651258},{"i":184,"s":1546128},{"i":185,"s":509978},{"i":186,"s":1759763},{"i":187,"s":5544835},{"i":188,"s":1524043},{"i":189,"s":1682502},{"i":190,"s":1593514},{"i":191,"s":3285355},{"i":192,"s":1962302},{"i":193,"s":1987719},{"i":194,"s":7134897},{"i":195,"s":2033135},{"i":196,"s":1034064},{"i":197,"s":2382911},{"i":198,"s":3073835},{"i":199,"s":1443961},{"i":200,"s":1761123},{"i":201,"s":1353539},{"i":202,"s":891193},{"i":203,"s":1460594},{"i":204,"s":741522},{"i":205,"s":1256694},{"i":206,"s":1134183},{"i":207,"s":1865890},{"i":208,"s":2028198},{"i":209,"s":1692170},{"i":210,"s":2113204},{"i":211,"s":1676765},{"i":212,"s":1309868},{"i":213,"s":2255001},{"i":214,"s":2462095},{"i":215,"s":954228},{"i":216,"s":1750067},{"i":217,"s":1391014},{"i":218,"s":14010848},{"i":219,"s":2390757},{"i":220,"s":2692880},{"i":221,"s":1305516},{"i":222,"s":2369082},{"i":223,"s":4992249},{"i":224,"s":18113276},{"i":225,"s":988679},{"i":226,"s":1460234},{"i":227,"s":1107957},{"i":228,"s":1139500},{"i":229,"s":3011889},{"i":230,"s":330500},{"i":231,"s":1936052},{"i":232,"s":454440},{"i":233,"s":12641182},{"i":234,"s":5106224},{"i":235,"s":1830035},{"i":236,"s":10898447},{"i":237,"s":924045},{"i":238,"s":1898538},{"i":239,"s":1149901},{"i":240,"s":3619019},{"i":241,"s":1346873},{"i":242,"s":970164},{"i":243,"s":1958184},{"i":244,"s":5941931},{"i":245,"s":1311427},{"i":246,"s":551868},{"i":247,"s":199815},{"i":248,"s":1033336},{"i":249,"s":2206216},{"i":250,"s":1181949},{"i":251,"s":1638454},{"i":252,"s":1372895},{"i":253,"s":1001030},{"i":254,"s":1776821},{"i":255,"s":3245232},{"i":256,"s":554223},{"i":257,"s":23003567},{"i":258,"s":1102103},{"i":259,"s":2364490},{"i":260,"s":884498},{"i":261,"s":7723677},{"i":262,"s":2626827},{"i":263,"s":1037991},{"i":264,"s":2618021},{"i":265,"s":4997939},{"i":266,"s":2717502},{"i":267,"s":2461329},{"i":268,"s":13105068},{"i":269,"s":2502978},{"i":270,"s":2504317},{"i":271,"s":2492227},{"i":272,"s":1550081},{"i":273,"s":1854134},{"i":274,"s":924350},{"i":275,"s":1654833},{"i":276,"s":4064925},{"i":277,"s":3098400},{"i":278,"s":2256436},{"i":279,"s":656010},{"i":280,"s":1468699},{"i":281,"s":1880239},{"i":282,"s":1625886},{"i":283,"s":1784699},{"i":284,"s":1136246},{"i":285,"s":715547},{"i":286,"s":4220643},{"i":287,"s":6837477},{"i":288,"s":8469972},{"i":289,"s":32715397},{"i":290,"s":1222772},{"i":291,"s":3031438},{"i":292,"s":1870406},{"i":293,"s":5310986},{"i":294,"s":3677074},{"i":295,"s":1600856},{"i":296,"s":2703213},{"i":297,"s":1932482},{"i":298,"s":1793238},{"i":299,"s":888934},{"i":300,"s":8345872},{"i":301,"s":5210250},{"i":302,"s":4155961},{"i":303,"s":3290991},{"i":304,"s":1341341},{"i":305,"s":3108852},{"i":306,"s":1248891},{"i":307,"s":5825971},{"i":308,"s":2394732},{"i":309,"s":4038472},{"i":310,"s":1749123},{"i":311,"s":1295332},{"i":312,"s":833051},{"i":313,"s":1931997},{"i":314,"s":1415182},{"i":315,"s":12814423},{"i":316,"s":6727373},{"i":317,"s":10118742},{"i":318,"s":1926887},{"i":319,"s":1545388},{"i":320,"s":2369965},{"i":321,"s":3760084},{"i":322,"s":724486},{"i":323,"s":2077916},{"i":324,"s":959952},{"i":325,"s":2823025},{"i":326,"s":6219747},{"i":327,"s":1335595},{"i":328,"s":2369617},{"i":329,"s":1584369},{"i":330,"s":1551149},{"i":331,"s":1688147},{"i":332,"s":13147270},{"i":333,"s":6920550},{"i":334,"s":5918167},{"i":335,"s":638858},{"i":336,"s":1065255},{"i":337,"s":707319},{"i":338,"s":2725458},{"i":339,"s":1030030},{"i":340,"s":21386101},{"i":341,"s":1430876},{"i":342,"s":1454867},{"i":343,"s":1040534},{"i":344,"s":1391683},{"i":345,"s":1617952},{"i":346,"s":4714271},{"i":347,"s":3554536},{"i":348,"s":8007707},{"i":349,"s":3096983},{"i":350,"s":975243},{"i":351,"s":1179307},{"i":352,"s":1452857},{"i":353,"s":2610672},{"i":354,"s":4265964},{"i":355,"s":1657013},{"i":356,"s":1898936},{"i":357,"s":866885},{"i":358,"s":1128564},{"i":359,"s":741347},{"i":360,"s":3175491},{"i":361,"s":2067557},{"i":362,"s":1298603},{"i":363,"s":1762962},{"i":364,"s":2630621},{"i":365,"s":3856911},{"i":366,"s":2009723},{"i":367,"s":1262234},{"i":368,"s":2251675},{"i":369,"s":1704042},{"i":370,"s":1668790},{"i":371,"s":976348},{"i":372,"s":2425437},{"i":373,"s":1369455},{"i":1277,"s":571535},{"i":2911,"s":554211},{"i":2912,"s":5020758}],"fver":1,"dver":20150320} \ No newline at end of file diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/DVStreet.cfg b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/DVStreet.cfg deleted file mode 100644 index 507e5ed..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/DVStreet.cfg +++ /dev/null @@ -1 +0,0 @@ -{"cities":[{"bb":4758298,"bl":12849780,"br":13081648,"bt":4993922,"i":131,"n":"北京市"},{"bb":5014316,"bl":13629240,"br":13783738,"bt":5290030,"i":58,"n":"沈阳市"},{"bb":3626874,"bl":13305727,"br":13426482,"bt":3739356,"i":317,"n":"无锡市"},{"bb":3640320,"bl":12331008,"br":12594176,"bt":3823616,"i":156,"n":"襄樊市"},{"bb":3193856,"bl":12154880,"br":12290048,"bt":3436544,"i":274,"n":"凤凰"},{"bb":3568640,"bl":13454336,"br":13582336,"bt":3724288,"i":289,"n":"上海市"},{"bb":4631552,"bl":12992512,"br":13145088,"bt":4876288,"i":332,"n":"天津市"},{"bb":4648960,"bl":13461504,"br":13753344,"bt":4869120,"i":167,"n":"大连市"},{"bb":2037760,"bl":12126208,"br":12225536,"bt":2098176,"i":121,"n":"三亚市"},{"bb":3385344,"bl":9991168,"br":10311680,"bt":3618816,"i":100,"n":"拉萨市"},{"bb":2202624,"bl":12253184,"br":12325888,"bt":2280448,"i":125,"n":"海口市"},{"bb":2523136,"bl":12654592,"br":12764160,"bt":2598912,"i":340,"n":"深圳市"},{"bb":3579904,"bl":13349888,"br":13513728,"bt":3745792,"i":224,"n":"苏州市"},{"bb":2511872,"bl":12670976,"br":12747776,"bt":2564096,"i":2912,"n":"香港特别行政区"},{"bb":2507776,"bl":12639232,"br":12648448,"bt":2522112,"i":2911,"n":"澳门特别行政区"},{"bb":2556928,"bl":12574720,"br":12698624,"bt":2728960,"i":257,"n":"广州市"},{"bb":4031488,"bl":12677120,"br":12832768,"bt":4143104,"i":210,"n":"开封市"},{"bb":3204096,"bl":12939264,"br":13191168,"bt":3444736,"i":364,"n":"上饶市"},{"bb":4210688,"bl":13304832,"br":13516800,"bt":4434944,"i":236,"n":"青岛市"},{"bb":3966976,"bl":12953600,"br":13211648,"bt":4132864,"i":316,"n":"徐州市"},{"bb":3249152,"bl":12851200,"br":12977152,"bt":3378176,"i":163,"n":"南昌市"},{"bb":5445632,"bl":13991936,"br":14499840,"bt":5859328,"i":48,"n":"哈尔滨市"},{"bb":5322752,"bl":13864960,"br":14149632,"bt":5632000,"i":53,"n":"长春市"},{"bb":3379200,"bl":13174784,"br":13440000,"bt":3556352,"i":179,"n":"杭州市"},{"bb":3640320,"bl":13176832,"br":13275136,"bt":3822592,"i":315,"n":"南京市"},{"bb":3630080,"bl":13262848,"br":13382656,"bt":3749888,"i":348,"n":"常州市"},{"bb":4779008,"bl":12303360,"br":12503040,"bt":5042176,"i":321,"n":"呼和浩特市"},{"bb":4279296,"bl":12938240,"br":13109248,"bt":4489216,"i":288,"n":"济南市"},{"bb":4620288,"bl":12925952,"br":13054976,"bt":4853760,"i":191,"n":"廊坊市"},{"bb":2782208,"bl":13123584,"br":13188096,"bt":2847744,"i":194,"n":"厦门市"},{"bb":4586496,"bl":12664832,"br":12951552,"bt":4832256,"i":307,"n":"保定市"},{"bb":5132288,"bl":14190592,"br":14619648,"bt":5516288,"i":54,"n":"延边朝鲜族自治州"},{"bb":4216832,"bl":11421696,"br":11642880,"bt":4419584,"i":36,"n":"兰州市"},{"bb":4941824,"bl":13646848,"br":13770752,"bt":5075968,"i":351,"n":"辽阳市"},{"bb":4306944,"bl":11233280,"br":11345920,"bt":4470784,"i":66,"n":"西宁市"},{"bb":3676160,"bl":12990464,"br":13124608,"bt":3812352,"i":127,"n":"合肥市"},{"bb":4039680,"bl":12548096,"br":12717056,"bt":4139008,"i":268,"n":"郑州市"},{"bb":4476928,"bl":12413952,"br":12598272,"bt":4614144,"i":176,"n":"太原市"},{"bb":3477504,"bl":12657664,"br":12812288,"bt":3658752,"i":218,"n":"武汉市"},{"bb":3210240,"bl":12456960,"br":12721152,"bt":3313664,"i":158,"n":"长沙市"},{"bb":2520064,"bl":11948032,"br":12204032,"bt":2741248,"i":261,"n":"南宁市"},{"bb":2783232,"bl":11373568,"br":11542528,"bt":3048448,"i":104,"n":"昆明市"},{"bb":3963904,"bl":11981824,"br":12226560,"bt":4106240,"i":233,"n":"西安市"},{"bb":4031488,"bl":11983872,"br":12154880,"bt":4214784,"i":323,"n":"咸阳市"},{"bb":3493888,"bl":11468800,"br":11677696,"bt":3667968,"i":75,"n":"成都市"},{"bb":4481024,"bl":11782144,"br":11897856,"bt":4677632,"i":360,"n":"银川市"},{"bb":3834880,"bl":9978880,"br":11109376,"bt":4727808,"i":65,"n":"海西蒙古族藏族自治州"},{"bb":3690496,"bl":13381632,"br":13582336,"bt":3834880,"i":161,"n":"南通市"},{"bb":4568064,"bl":10277888,"br":11155456,"bt":5253120,"i":37,"n":"酒泉市"},{"bb":4498432,"bl":10841088,"br":11379712,"bt":4823040,"i":117,"n":"张掖市"},{"bb":3688448,"bl":9953280,"br":10886144,"bt":4315136,"i":71,"n":"玉树藏族自治州"},{"bb":4133888,"bl":13203456,"br":13353984,"bt":4282368,"i":173,"n":"日照市"},{"bb":4001792,"bl":13181952,"br":13342720,"bt":4157440,"i":347,"n":"连云港市"},{"bb":4015104,"bl":11641856,"br":11880448,"bt":4164608,"i":196,"n":"天水市"},{"bb":4785152,"bl":10891264,"br":10969088,"bt":4836352,"i":33,"n":"嘉峪关市"},{"bb":4090880,"bl":11013120,"br":11333632,"bt":4447232,"i":68,"n":"海南藏族自治州"},{"bb":4236288,"bl":13155328,"br":13361152,"bt":4460544,"i":287,"n":"潍坊市"},{"bb":3531776,"bl":12452864,"br":12635136,"bt":3690496,"i":217,"n":"荆门市"},{"bb":4379648,"bl":11335680,"br":11601920,"bt":4761600,"i":118,"n":"武威市"},{"bb":4376576,"bl":10919936,"br":11427840,"bt":4708352,"i":67,"n":"海北藏族自治州"},{"bb":3963904,"bl":12587008,"br":12728320,"bt":4060160,"i":155,"n":"许昌市"},{"bb":5169152,"bl":13274112,"br":13773824,"bt":5700608,"i":64,"n":"通辽市"},{"bb":5475328,"bl":13300736,"br":13765632,"bt":6020096,"i":62,"n":"兴安盟"},{"bb":4388864,"bl":11940864,"br":12385280,"bt":4780032,"i":231,"n":"榆林市"},{"bb":5026816,"bl":12954624,"br":13469696,"bt":5630976,"i":297,"n":"赤峰市"},{"bb":4225024,"bl":12918784,"br":13136896,"bt":4341760,"i":325,"n":"泰安市"},{"bb":3946496,"bl":12371968,"br":12578816,"bt":4150272,"i":153,"n":"洛阳市"},{"bb":4505600,"bl":12570624,"br":12696576,"bt":4628480,"i":357,"n":"阳泉市"},{"bb":4376576,"bl":12286976,"br":12506112,"bt":4657152,"i":327,"n":"吕梁市"},{"bb":4192256,"bl":12286976,"br":12532736,"bt":4405248,"i":368,"n":"临汾市"},{"bb":4707328,"bl":12456960,"br":12644352,"bt":4883456,"i":237,"n":"朔州市"},{"bb":4572160,"bl":12350464,"br":12688384,"bt":4791296,"i":367,"n":"忻州市"},{"bb":3315712,"bl":12684288,"br":13015040,"bt":3492864,"i":349,"n":"九江市"},{"bb":4083712,"bl":12269568,"br":12478464,"bt":4252672,"i":328,"n":"运城市"},{"bb":4364288,"bl":12402688,"br":12707840,"bt":4567040,"i":238,"n":"晋中市"},{"bb":4186112,"bl":11984896,"br":12308480,"bt":4484096,"i":284,"n":"延安市"},{"bb":4251648,"bl":12466176,"br":12662784,"bt":4431872,"i":356,"n":"长治市"},{"bb":5471232,"bl":13541376,"br":13846528,"bt":5799936,"i":51,"n":"白城市"},{"bb":4122624,"bl":12621824,"br":12805120,"bt":4254720,"i":152,"n":"新乡市"},{"bb":4964352,"bl":13944832,"br":14111744,"bt":5286912,"i":165,"n":"通化市"},{"bb":4368384,"bl":13490176,"br":13663232,"bt":4499456,"i":175,"n":"威海市"},{"bb":4123648,"bl":11726848,"br":12008448,"bt":4242432,"i":359,"n":"平凉市"},{"bb":4171776,"bl":11840512,"br":12103680,"bt":4436992,"i":135,"n":"庆阳市"},{"bb":5926912,"bl":12861440,"br":14035968,"bt":7012352,"i":61,"n":"呼伦贝尔市"},{"bb":2681856,"bl":13014016,"br":13164544,"bt":2882560,"i":255,"n":"漳州市"},{"bb":4874240,"bl":12162048,"br":12407808,"bt":5243904,"i":229,"n":"包头市"},{"bb":3889152,"bl":12495872,"br":12656640,"bt":4051968,"i":213,"n":"平顶山市"},{"bb":3249152,"bl":11720704,"br":12268544,"bt":3768320,"i":132,"n":"重庆市"},{"bb":3760128,"bl":11743232,"br":12055552,"bt":3989504,"i":352,"n":"汉中市"},{"bb":5434368,"bl":13705216,"br":14049280,"bt":5678080,"i":52,"n":"松原市"},{"bb":4292608,"bl":11610112,"br":11820032,"bt":4519936,"i":181,"n":"中卫市"},{"bb":5348352,"bl":14274560,"br":14620672,"bt":5748736,"i":49,"n":"牡丹江市"},{"bb":3776512,"bl":12590080,"br":12827648,"bt":3943424,"i":269,"n":"驻马店市"},{"bb":2883584,"bl":13178880,"br":13419520,"bt":3060736,"i":300,"n":"福州市"},{"bb":3085312,"bl":10027008,"br":10505216,"bt":3461120,"i":97,"n":"山南地区"},{"bb":3130368,"bl":9144320,"br":10058752,"bt":3716096,"i":102,"n":"日喀则地区"},{"bb":3173376,"bl":10259456,"br":10994688,"bt":3569664,"i":98,"n":"林芝地区"},{"bb":3948544,"bl":11834368,"br":12029952,"bt":4154368,"i":171,"n":"宝鸡市"},{"bb":4114432,"bl":12531712,"br":12652544,"bt":4207616,"i":211,"n":"焦作市"},{"bb":3878912,"bl":12700672,"br":12875776,"bt":4050944,"i":308,"n":"周口市"},{"bb":5217280,"bl":13987840,"br":14252032,"bt":5537792,"i":55,"n":"吉林市"},{"bb":3338240,"bl":12211200,"br":12395520,"bt":3457024,"i":312,"n":"张家界市"},{"bb":3404800,"bl":13046784,"br":13237248,"bt":3549184,"i":252,"n":"黄山市"},{"bb":397312,"bl":12086272,"br":13144064,"bt":2288640,"i":296,"n":"海南省直辖县级行政单位"},{"bb":5741568,"bl":14416896,"br":15040512,"bt":6154240,"i":42,"n":"佳木斯市"},{"bb":4065280,"bl":12898304,"br":13091840,"bt":4274176,"i":286,"n":"济宁市"},{"bb":3319808,"bl":13020160,"br":13105152,"bt":3474432,"i":225,"n":"景德镇市"},{"bb":4499456,"bl":11852800,"br":12409856,"bt":4968448,"i":283,"n":"鄂尔多斯市"},{"bb":4957184,"bl":13758464,"br":14004224,"bt":5069824,"i":227,"n":"本溪市"},{"bb":2850816,"bl":13186048,"br":13328384,"bt":2951168,"i":195,"n":"莆田市"},{"bb":5785600,"bl":13626368,"br":14102528,"bt":6233088,"i":41,"n":"齐齐哈尔市"},{"bb":4353024,"bl":13308928,"br":13574144,"bt":4619264,"i":326,"n":"烟台市"},{"bb":3011584,"bl":13025280,"br":13279232,"bt":3269632,"i":133,"n":"南平市"},{"bb":3155968,"bl":13213696,"br":13408256,"bt":3349504,"i":292,"n":"丽水市"},{"bb":4866048,"bl":12903424,"br":13276160,"bt":5226496,"i":207,"n":"承德市"},{"bb":3660800,"bl":12658688,"br":12908544,"bt":3828736,"i":214,"n":"信阳市"},{"bb":2976768,"bl":12672000,"br":12907520,"bt":3225600,"i":318,"n":"吉安市"},{"bb":3383296,"bl":13345792,"br":13496320,"bt":3519488,"i":293,"n":"绍兴市"},{"bb":2540544,"bl":12669952,"br":12850176,"bt":2732032,"i":301,"n":"惠州市"},{"bb":2572288,"bl":12511232,"br":12623872,"bt":2684928,"i":138,"n":"佛山市"},{"bb":3691520,"bl":13244416,"br":13358080,"bt":3783680,"i":160,"n":"镇江市"},{"bb":5019648,"bl":13767680,"br":13970432,"bt":5204992,"i":184,"n":"抚顺市"},{"bb":4680704,"bl":13081600,"br":13298688,"bt":4907008,"i":265,"n":"唐山市"},{"bb":4474880,"bl":12637184,"br":12857344,"bt":4662272,"i":150,"n":"石家庄市"},{"bb":3834880,"bl":13160448,"br":13320192,"bt":4018176,"i":162,"n":"淮安市"},{"bb":4774912,"bl":12670976,"br":12965888,"bt":5155840,"i":264,"n":"张家口市"},{"bb":3602432,"bl":13028352,"br":13193216,"bt":3748864,"i":251,"n":"巢湖市"},{"bb":3335168,"bl":13456384,"br":13617152,"bt":3540992,"i":180,"n":"宁波市"},{"bb":2574336,"bl":12637184,"br":12721152,"bt":2633728,"i":119,"n":"东莞市"},{"bb":4370432,"bl":13053952,"br":13179904,"bt":4597760,"i":235,"n":"滨州市"},{"bb":3965952,"bl":12782592,"br":12986368,"bt":4121600,"i":154,"n":"商丘市"},{"bb":4756480,"bl":13199360,"br":13344768,"bt":4928512,"i":148,"n":"秦皇岛市"},{"bb":2516992,"bl":12597248,"br":12657664,"bt":2589696,"i":187,"n":"中山市"},{"bb":4166656,"bl":12649472,"br":12802048,"bt":4327424,"i":267,"n":"安阳市"},{"bb":5651456,"bl":13776896,"br":14004224,"bt":5990400,"i":50,"n":"大庆市"},{"bb":3513344,"bl":13391872,"br":13531136,"bt":3615744,"i":334,"n":"嘉兴市"},{"bb":3228672,"bl":13390848,"br":13580288,"bt":3398656,"i":244,"n":"台州市"},{"bb":3890176,"bl":13129728,"br":13267968,"bt":4062208,"i":277,"n":"宿迁市"},{"bb":2569216,"bl":12792832,"br":12940288,"bt":2673664,"i":339,"n":"汕尾市"},{"bb":3769344,"bl":13249536,"br":13349888,"bt":3928064,"i":346,"n":"扬州市"},{"bb":3259392,"bl":13138944,"br":13287424,"bt":3419136,"i":243,"n":"衢州市"},{"bb":2428928,"bl":12468224,"br":12609536,"bt":2598912,"i":302,"n":"江门市"},{"bb":2670592,"bl":12460032,"br":12682240,"bt":2883584,"i":197,"n":"清远市"},{"bb":3816448,"bl":13298688,"br":13470720,"bt":4078592,"i":223,"n":"盐城市"},{"bb":2468864,"bl":12585984,"br":12737536,"bt":2550784,"i":140,"n":"珠海市"},{"bb":4354048,"bl":11755520,"br":11985920,"bt":4591616,"i":322,"n":"吴忠市"},{"bb":4405248,"bl":13148160,"br":13286400,"bt":4577280,"i":174,"n":"东营市"},{"bb":3424256,"bl":13528064,"br":13692928,"bt":3599360,"i":245,"n":"舟山市"},{"bb":3529728,"bl":13274112,"br":13414400,"bt":3635200,"i":294,"n":"湖州市"},{"bb":4931584,"bl":13522944,"br":13629440,"bt":5052416,"i":228,"n":"盘锦市"},{"bb":3652608,"bl":12549120,"br":12706816,"bt":3798016,"i":371,"n":"随州市"},{"bb":4761600,"bl":8686592,"br":9362432,"bt":5230592,"i":85,"n":"阿克苏地区"},{"bb":4944896,"bl":13438976,"br":13648896,"bt":5152768,"i":166,"n":"锦州市"},{"bb":4200448,"bl":8289280,"br":8892416,"bt":4877312,"i":83,"n":"喀什地区"},{"bb":5012480,"bl":9713664,"br":10233856,"bt":5381120,"i":89,"n":"吐鲁番地区"},{"bb":3676160,"bl":12182528,"br":12423168,"bt":3908608,"i":216,"n":"十堰市"},{"bb":4049920,"bl":8616960,"br":9454592,"bt":4787200,"i":82,"n":"和田地区"},{"bb":3419136,"bl":12749824,"br":12860416,"bt":3525632,"i":311,"n":"黄石市"},{"bb":4245504,"bl":12833792,"br":12975104,"bt":4417536,"i":366,"n":"聊城市"},{"bb":3474432,"bl":9467904,"br":10578944,"bt":4342784,"i":101,"n":"那曲地区"},{"bb":6571008,"bl":13490176,"br":14142464,"bt":7054336,"i":38,"n":"大兴安岭地区"},{"bb":4264960,"bl":13085696,"br":13195264,"bt":4454400,"i":354,"n":"淄博市"},{"bb":2620416,"bl":12941312,"br":13066240,"bt":2694144,"i":303,"n":"汕头市"},{"bb":2434048,"bl":11965440,"br":12091392,"bt":2541568,"i":204,"n":"防城港市"},{"bb":3408896,"bl":12384256,"br":12701696,"bt":3567616,"i":157,"n":"荆州市"},{"bb":2361344,"bl":12116992,"br":12223488,"bt":2487296,"i":295,"n":"北海市"},{"bb":3564544,"bl":13132800,"br":13218816,"bt":3680256,"i":129,"n":"芜湖市"},{"bb":3611648,"bl":12843008,"br":13053952,"bt":3828736,"i":298,"n":"六安市"},{"bb":4331520,"bl":12887040,"br":13092864,"bt":4555776,"i":372,"n":"德州市"},{"bb":4925440,"bl":13230080,"br":13504512,"bt":5190656,"i":280,"n":"朝阳市"},{"bb":2436096,"bl":12043264,"br":12231680,"bt":2578432,"i":145,"n":"钦州市"},{"bb":5171200,"bl":8924160,"br":9491456,"bt":5567488,"i":90,"n":"伊犁哈萨克自治州"},{"bb":2452480,"bl":12194816,"br":12346368,"bt":2631680,"i":361,"n":"玉林市"},{"bb":4702208,"bl":12532736,"br":12753920,"bt":4947968,"i":355,"n":"大同市"},{"bb":4827136,"bl":13565952,"br":13694976,"bt":4976640,"i":281,"n":"营口市"},{"bb":5069824,"bl":12374016,"br":13373440,"bt":5875712,"i":63,"n":"锡林郭勒盟"},{"bb":4783104,"bl":8756224,"br":9765888,"bt":5529600,"i":87,"n":"新疆直辖县级行政单位"},{"bb":5452800,"bl":9412608,"br":9578496,"bt":5784576,"i":95,"n":"克拉玛依市"},{"bb":3209216,"bl":12990464,"br":13078528,"bt":3308544,"i":279,"n":"鹰潭市"},{"bb":2596864,"bl":12870656,"br":12985344,"bt":2709504,"i":259,"n":"揭阳市"},{"bb":2265088,"bl":12204032,"br":12366848,"bt":2487296,"i":198,"n":"湛江市"},{"bb":2573312,"bl":12156928,"br":12320768,"bt":2742272,"i":341,"n":"贵港市"},{"bb":2724864,"bl":12088320,"br":12266496,"bt":2988032,"i":305,"n":"柳州市"},{"bb":2447360,"bl":11863040,"br":12036096,"bt":2659328,"i":144,"n":"崇左市"},{"bb":2597888,"bl":11627520,"br":12011520,"bt":2871296,"i":203,"n":"百色市"},{"bb":3484672,"bl":12746752,"br":12813312,"bt":3562496,"i":122,"n":"鄂州市"},{"bb":4793344,"bl":13734912,"br":13996032,"bt":5008384,"i":282,"n":"丹东市"},{"bb":2766848,"bl":12203008,"br":12412928,"bt":3028992,"i":142,"n":"桂林市"},{"bb":3105792,"bl":13317120,"br":13512704,"bt":3306496,"i":178,"n":"温州市"},{"bb":2772992,"bl":13088768,"br":13255680,"bt":2972672,"i":134,"n":"泉州市"},{"bb":3530752,"bl":12614656,"br":12758016,"bt":3722240,"i":310,"n":"孝感市"},{"bb":3446784,"bl":12735488,"br":12930048,"bt":3690496,"i":271,"n":"黄冈市"},{"bb":3358720,"bl":12639232,"br":12800000,"bt":3521536,"i":362,"n":"咸宁市"},{"bb":4861952,"bl":12282880,"br":12782592,"bt":5342208,"i":168,"n":"乌兰察布市"},{"bb":5130240,"bl":13743104,"br":13928448,"bt":5358592,"i":60,"n":"铁岭市"},{"bb":2634752,"bl":12718080,"br":12869632,"bt":2832384,"i":200,"n":"河源市"},{"bb":4469760,"bl":10817536,"br":11897856,"bt":5253120,"i":230,"n":"阿拉善盟"},{"bb":5087232,"bl":13471744,"br":13690880,"bt":5260288,"i":59,"n":"阜新市"},{"bb":4838400,"bl":13601792,"br":13778944,"bt":5069824,"i":320,"n":"鞍山市"},{"bb":2568192,"bl":12281856,"br":12432384,"bt":2786304,"i":304,"n":"梧州市"},{"bb":2694144,"bl":12309504,"br":12476416,"bt":2877440,"i":260,"n":"贺州市"},{"bb":4862976,"bl":11711488,"br":12235776,"bt":5202944,"i":169,"n":"巴彦淖尔市"},{"bb":2432000,"bl":12388352,"br":12510208,"bt":2577408,"i":199,"n":"阳江市"},{"bb":2781184,"bl":12897280,"br":13109248,"bt":2985984,"i":193,"n":"龙岩市"},{"bb":3016704,"bl":13197312,"br":13443072,"bt":3189760,"i":192,"n":"宁德市"},{"bb":2660352,"bl":12836864,"br":13019136,"bt":2850816,"i":141,"n":"梅州市"},{"bb":2540544,"bl":12362752,"br":12527616,"bt":2655232,"i":258,"n":"云浮市"},{"bb":2648064,"bl":12069888,"br":12297216,"bt":2793472,"i":202,"n":"来宾市"},{"bb":2577408,"bl":11530240,"br":11823104,"bt":2792448,"i":177,"n":"文山壮族苗族自治州"},{"bb":3145728,"bl":12468224,"br":12591104,"bt":3238912,"i":313,"n":"湘潭市"},{"bb":2985984,"bl":12575744,"br":12703744,"bt":3233792,"i":222,"n":"株洲市"},{"bb":2778112,"bl":11471872,"br":11670528,"bt":3111936,"i":249,"n":"曲靖市"},{"bb":3193856,"bl":12154880,"br":12290048,"bt":3436544,"i":274,"n":"湘西土家族苗族自治州"},{"bb":2498560,"bl":11038720,"br":11392000,"bt":2837504,"i":108,"n":"普洱市"},{"bb":3225600,"bl":12325888,"br":12574720,"bt":3422208,"i":272,"n":"益阳市"},{"bb":2750464,"bl":10919936,"br":11139072,"bt":2963456,"i":112,"n":"保山市"},{"bb":2548736,"bl":11332608,"br":11610112,"bt":2830336,"i":107,"n":"红河哈尼族彝族自治州"},{"bb":3098624,"bl":12643328,"br":12722176,"bt":3230720,"i":350,"n":"萍乡市"},{"bb":3368960,"bl":12063744,"br":12317696,"bt":3662848,"i":373,"n":"恩施土家族苗族自治州"},{"bb":3279872,"bl":12300288,"br":12503040,"bt":3499008,"i":219,"n":"常德市"},{"bb":2994176,"bl":12417024,"br":12611584,"bt":3163136,"i":159,"n":"衡阳市"},{"bb":3281920,"bl":12503040,"br":12708864,"bt":3464192,"i":220,"n":"岳阳市"},{"bb":4226048,"bl":9181184,"br":10450944,"bt":5369856,"i":86,"n":"巴音郭楞蒙古自治州"},{"bb":5270528,"bl":9661440,"br":9906176,"bt":5593088,"i":92,"n":"乌鲁木齐市"},{"bb":2816000,"bl":11005952,"br":11249664,"bt":3067904,"i":111,"n":"大理白族自治州"},{"bb":2653184,"bl":11274240,"br":11484160,"bt":2852864,"i":106,"n":"玉溪市"},{"bb":2924544,"bl":10924032,"br":11094016,"bt":3279872,"i":113,"n":"怒江傈僳族自治州"},{"bb":2393088,"bl":11125760,"br":11338752,"bt":2567168,"i":109,"n":"西双版纳傣族自治州"},{"bb":2681856,"bl":11864064,"br":12152832,"bt":2933760,"i":143,"n":"河池市"},{"bb":3475456,"bl":12273664,"br":12478464,"bt":3686400,"i":270,"n":"宜昌市"},{"bb":3172352,"bl":12678144,"br":12931072,"bt":3368960,"i":278,"n":"宜春市"},{"bb":3490816,"bl":12238848,"br":12672000,"bt":3723264,"i":345,"n":"湖北省直辖县级行政单位"},{"bb":2416640,"bl":12281856,"br":12434432,"bt":2580480,"i":139,"n":"茂名市"},{"bb":3775488,"bl":12354560,"br":12670976,"bt":3979264,"i":309,"n":"南阳市"},{"bb":3908608,"bl":12957696,"br":13032448,"bt":4039680,"i":253,"n":"淮北市"},{"bb":3833856,"bl":12995584,"br":13145088,"bt":3939328,"i":126,"n":"蚌埠市"},{"bb":4078592,"bl":12782592,"br":12960768,"bt":4257792,"i":353,"n":"菏泽市"},{"bb":4421632,"bl":12823552,"br":12977152,"bt":4605952,"i":208,"n":"衡水市"},{"bb":3648512,"bl":13177856,"br":13236224,"bt":3713024,"i":358,"n":"马鞍山市"},{"bb":2985984,"bl":11139072,"br":11565056,"bt":3394560,"i":80,"n":"凉山彝族自治州"},{"bb":2990080,"bl":11258880,"br":11383808,"bt":3147776,"i":81,"n":"攀枝花市"},{"bb":3294208,"bl":13273088,"br":13447168,"bt":3442688,"i":333,"n":"金华市"},{"bb":3721216,"bl":13042688,"br":13274112,"bt":3901440,"i":189,"n":"滁州市"},{"bb":4379648,"bl":12663808,"br":12898304,"bt":4527104,"i":266,"n":"邢台市"},{"bb":4056064,"bl":13071360,"br":13271040,"bt":4304896,"i":234,"n":"临沂市"},{"bb":3540992,"bl":11738112,"br":11909120,"bt":3722240,"i":291,"n":"南充市"},{"bb":4184064,"bl":12787712,"br":12926976,"bt":4305920,"i":209,"n":"濮阳市"},{"bb":3793920,"bl":12788736,"br":12985344,"bt":3950592,"i":128,"n":"阜阳市"},{"bb":3945472,"bl":12285952,"br":12472320,"bt":4152320,"i":212,"n":"三门峡市"},{"bb":4166656,"bl":12461056,"br":12650496,"bt":4285440,"i":290,"n":"晋城市"},{"bb":3209216,"bl":11534336,"br":11729920,"bt":3389440,"i":186,"n":"宜宾市"},{"bb":3549184,"bl":11554816,"br":11709440,"bt":3702784,"i":74,"n":"德阳市"},{"bb":3186688,"bl":11705344,"br":11843584,"bt":3397632,"i":331,"n":"泸州市"},{"bb":3908608,"bl":12931072,"br":13158400,"bt":4092928,"i":370,"n":"宿州市"},{"bb":4067328,"bl":13003776,"br":13118464,"bt":4184064,"i":172,"n":"枣庄市"},{"bb":3523584,"bl":11874304,"br":12085248,"bt":3785728,"i":369,"n":"达州市"},{"bb":4504576,"bl":8181760,"br":8781824,"bt":5044224,"i":84,"n":"克孜勒苏柯尔克孜自治州"},{"bb":2762752,"bl":11212800,"br":11409408,"bt":3043328,"i":105,"n":"楚雄彝族自治州"},{"bb":3731456,"bl":13319168,"br":13421568,"bt":3902464,"i":276,"n":"泰州市"},{"bb":3453952,"bl":12887040,"br":13108224,"bt":3646464,"i":130,"n":"安庆市"},{"bb":3440640,"bl":11598848,"br":11773952,"bt":3565568,"i":242,"n":"资阳市"},{"bb":3046400,"bl":11452416,"br":11724800,"bt":3313664,"i":336,"n":"昭通市"},{"bb":3345408,"bl":11583488,"br":11719680,"bt":3436544,"i":78,"n":"自贡市"},{"bb":4832256,"bl":13271040,"br":13481984,"bt":5015552,"i":319,"n":"葫芦岛市"},{"bb":3121152,"bl":11756544,"br":12047360,"bt":3384320,"i":262,"n":"遵义市"},{"bb":2978816,"bl":11063296,"br":11301888,"bt":3220480,"i":114,"n":"丽江市"},{"bb":2916352,"bl":12955648,"br":13211648,"bt":3121152,"i":254,"n":"三明市"},{"bb":2722816,"bl":12563456,"br":12774400,"bt":2922496,"i":137,"n":"韶关市"},{"bb":3003392,"bl":11813888,"br":11943936,"bt":3149824,"i":146,"n":"贵阳市"},{"bb":3790848,"bl":12953600,"br":13049856,"bt":3873792,"i":250,"n":"淮南市"},{"bb":2624512,"bl":10984448,"br":11194368,"bt":2863104,"i":110,"n":"临沧市"},{"bb":3172352,"bl":12678144,"br":12931072,"bt":3368960,"i":278,"n":"宜春市"},{"bb":5569536,"bl":14516224,"br":14912512,"bt":5849088,"i":46,"n":"鸡西市"},{"bb":6006784,"bl":13887488,"br":14420992,"bt":6590464,"i":39,"n":"黑河市"},{"bb":5670912,"bl":13900800,"br":14312448,"bt":6092800,"i":44,"n":"绥化市"},{"bb":5920768,"bl":14435328,"br":14753792,"bt":6134784,"i":43,"n":"鹤岗市"},{"bb":5684224,"bl":14483456,"br":14688256,"bt":5805056,"i":47,"n":"七台河市"},{"bb":5715968,"bl":14545920,"br":14956544,"bt":6005760,"i":45,"n":"双鸭山市"},{"bb":5256192,"bl":13726720,"br":14003200,"bt":5460992,"i":56,"n":"四平市"},{"bb":5038080,"bl":14040064,"br":14285824,"bt":5257216,"i":57,"n":"白山市"},{"bb":5177344,"bl":13897728,"br":14010368,"bt":5319680,"i":183,"n":"辽源市"},{"bb":2900992,"bl":11716608,"br":11865088,"bt":3058688,"i":263,"n":"安顺市"},{"bb":3119104,"bl":11995136,"br":12187648,"bt":3366912,"i":205,"n":"铜仁地区"},{"bb":3484672,"bl":11794432,"br":11947008,"bt":3593216,"i":241,"n":"广安市"},{"bb":3679232,"bl":11645952,"br":11886592,"bt":3864576,"i":329,"n":"广元市"},{"bb":3405824,"bl":11449344,"br":11634688,"bt":3529728,"i":77,"n":"眉山市"},{"bb":3572736,"bl":11549696,"br":11770880,"bt":3878912,"i":240,"n":"绵阳市"},{"bb":3281920,"bl":11456512,"br":11607040,"bt":3474432,"i":79,"n":"乐山市"},{"bb":3378176,"bl":11608064,"br":11739136,"bt":3488768,"i":248,"n":"内江市"},{"bb":3505152,"bl":11695104,"br":11801600,"bt":3633152,"i":330,"n":"遂宁市"},{"bb":3558400,"bl":11191296,"br":11627520,"bt":4047872,"i":185,"n":"阿坝藏族羌族自治州"},{"bb":3170304,"bl":12744704,"br":12848128,"bt":3244032,"i":164,"n":"新余市"},{"bb":4021248,"bl":11517952,"br":11761664,"bt":4282368,"i":136,"n":"定西市"},{"bb":2795520,"bl":12681216,"br":12986368,"bt":3123200,"i":365,"n":"赣州市"},{"bb":4556800,"bl":11290624,"br":11438080,"bt":4696064,"i":34,"n":"金昌市"},{"bb":4700160,"bl":11866112,"br":11932672,"bt":4826112,"i":123,"n":"乌海市"},{"bb":4640768,"bl":11798528,"br":11911168,"bt":4752384,"i":335,"n":"石嘴山市"},{"bb":4282368,"bl":12631040,"br":12857344,"bt":4417536,"i":151,"n":"邯郸市"},{"bb":4199424,"bl":12690432,"br":12776448,"bt":4283392,"i":215,"n":"鹤壁市"},{"bb":3926016,"bl":12631040,"br":12724224,"bt":4003840,"i":344,"n":"漯河市"},{"bb":3041280,"bl":12867584,"br":13059072,"bt":3292160,"i":226,"n":"抚州市"},{"bb":2812928,"bl":12351488,"br":12520448,"bt":3088384,"i":314,"n":"永州市"}],"dver":1253,"fver":1100} \ No newline at end of file diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/DVVersion.cfg b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/DVVersion.cfg deleted file mode 100644 index 378890c..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/DVVersion.cfg +++ /dev/null @@ -1 +0,0 @@ -{"std": 10, "c": 522, "stg": 11, "assets": [{"path": "mode_1/bus.sty", "version": 54}, {"path": "mode_1/car.sty", "version": 48}, {"path": "mode_1/cycle.sty", "version": 301}, {"path": "mode_1/map.rs", "version": 36}, {"path": "mode_1/map.sty", "version": 496}, {"path": "mode_1/reduct.rs", "version": 12}, {"path": "mode_1/reduct.sty", "version": 323}, {"path": "mode_1/traffic.rs", "version": 291}, {"path": "mode_1/traffic.sty", "version": 1116}, {"path": "mode_2/map.sty", "version": 35}, {"path": "mode_4/map.rs", "version": 9}, {"path": "mode_4/map.sty", "version": 476}], "stc": 1253, "h": 456, "idrresver": 133, "sc": 20160613, "gd": 79, "didr": 1194, "idrcfgver": 1135, "idrs": 14, "d": 522} \ No newline at end of file diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_1/bus.sty b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_1/bus.sty deleted file mode 100644 index 19f1d25..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_1/bus.sty and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_1/car.sty b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_1/car.sty deleted file mode 100644 index b9cd121..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_1/car.sty and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_1/cycle.sty b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_1/cycle.sty deleted file mode 100644 index f5b3add..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_1/cycle.sty and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_1/map.rs b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_1/map.rs deleted file mode 100644 index 210bb2b..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_1/map.rs and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_1/map.sty b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_1/map.sty deleted file mode 100644 index abd7c57..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_1/map.sty and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_1/reduct.rs b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_1/reduct.rs deleted file mode 100644 index 0810b12..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_1/reduct.rs and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_1/reduct.sty b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_1/reduct.sty deleted file mode 100644 index 6cca3a8..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_1/reduct.sty and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_1/traffic.rs b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_1/traffic.rs deleted file mode 100644 index cf1e317..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_1/traffic.rs and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_1/traffic.sty b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_1/traffic.sty deleted file mode 100644 index 3550f56..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_1/traffic.sty and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_2/map.sty b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_2/map.sty deleted file mode 100644 index 277d931..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_2/map.sty and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_4/map.rs b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_4/map.rs deleted file mode 100644 index 940b9aa..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_4/map.rs and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_4/map.sty b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_4/map.sty deleted file mode 100644 index 12c1f79..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_4/map.sty and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/street.sty b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/street.sty deleted file mode 100644 index d821187..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/street.sty and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/idrres/DVIndoor.cfg b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/idrres/DVIndoor.cfg deleted file mode 100644 index d237b8b..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/idrres/DVIndoor.cfg +++ /dev/null @@ -1,157 +0,0 @@ -{"citys":[ -{"bb":2521743,"bl":12636529,"br":12644693,"bt":2529413,"i":140,"n":"广东省-珠海市"}, -{"bb":3527130,"bl":12706616,"br":12743019,"bt":3595932,"i":218,"n":"湖北省-武汉市"}, -{"bb":4275086,"bl":13190039,"br":13294707,"bt":4397364,"i":287,"n":"山东省-潍坊市"}, -{"bb":3304221,"bl":12890531,"br":12910477,"bt":3338311,"i":163,"n":"江西省-南昌市"}, -{"bb":3852302,"bl":13336346,"br":13394828,"bt":3935484,"i":223,"n":"江苏省-盐城市"}, -{"bb":4791047,"bl":11891862,"br":11892309,"bt":4791584,"i":123,"n":"内蒙古自治区-乌海市"}, -{"bb":4948459,"bl":12789601,"br":12790946,"bt":4958900,"i":264,"n":"河北省-张家口市"}, -{"bb":3356523,"bl":12876437,"br":12923113,"bt":3447675,"i":349,"n":"江西省-九江市"}, -{"bb":4618696,"bl":11821341,"br":11832385,"bt":4623402,"i":360,"n":"宁夏回族自治区-银川市"}, -{"bb":3052009,"bl":11323053,"br":11323150,"bt":3052163,"i":81,"n":"四川省-攀枝花市"}, -{"bb":3607062,"bl":11596828,"br":11623998,"bt":3628023,"i":74,"n":"四川省-德阳市"}, -{"bb":3669880,"bl":11658160,"br":11662033,"bt":3672163,"i":240,"n":"四川省-绵阳市"}, -{"bb":3550018,"bl":11537534,"br":11607721,"bt":3610240,"i":75,"n":"四川省-成都市"}, -{"bb":3796716,"bl":11780842,"br":11787354,"bt":3798733,"i":329,"n":"四川省-广元市"}, -{"bb":4337790,"bl":12912536,"br":12912855,"bt":4339636,"i":366,"n":"山东省-聊城市"}, -{"bb":2454949,"bl":12348740,"br":12351009,"bt":2455653,"i":139,"n":"广东省-茂名市"}, -{"bb":5405222,"bl":9754780,"br":9754976,"bt":5405378,"i":92,"n":"新疆维吾尔自治区-乌鲁木齐市"}, -{"bb":2433348,"bl":12147231,"br":12147389,"bt":2433497,"i":295,"n":"广西壮族自治区-北海市"}, -{"bb":2628381,"bl":12200925,"br":12201207,"bt":2628900,"i":341,"n":"广西壮族自治区-贵港市"}, -{"bb":2773447,"bl":12180362,"br":12184034,"bt":2776702,"i":305,"n":"广西壮族自治区-柳州市"}, -{"bb":2786227,"bl":12419017,"br":12419137,"bt":2786391,"i":260,"n":"广西壮族自治区-贺州市"}, -{"bb":2491207,"bl":12092552,"br":12093347,"bt":2493227,"i":145,"n":"广西壮族自治区-钦州市"}, -{"bb":2590032,"bl":12053096,"br":12069583,"bt":2600266,"i":261,"n":"广西壮族自治区-南宁市"}, -{"bb":2887725,"bl":12278483,"br":12281780,"bt":2892368,"i":142,"n":"广西壮族自治区-桂林市"}, -{"bb":4955113,"bl":12431309,"br":12439334,"bt":4960956,"i":321,"n":"内蒙古自治区-呼和浩特市"}, -{"bb":6345148,"bl":13072844,"br":13073236,"bt":6345462,"i":61,"n":"内蒙古自治区-呼伦贝尔市"}, -{"bb":4990069,"bl":12592106,"br":12592285,"bt":4990204,"i":168,"n":"内蒙古自治区-乌兰察布市"}, -{"bb":4947775,"bl":11956262,"br":11958446,"bt":4949579,"i":169,"n":"内蒙古自治区-巴彦淖尔市"}, -{"bb":4778002,"bl":12217855,"br":12246820,"bt":4813085,"i":283,"n":"内蒙古自治区-鄂尔多斯市"}, -{"bb":4923267,"bl":12225069,"br":12249286,"bt":4936424,"i":229,"n":"内蒙古自治区-包头市"}, -{"bb":5170734,"bl":13238319,"br":13238738,"bt":5171113,"i":297,"n":"内蒙古自治区-赤峰市"}, -{"bb":5426862,"bl":12922482,"br":12923575,"bt":5428073,"i":63,"n":"内蒙古自治区-锡林郭勒盟"}, -{"bb":5702412,"bl":14091136,"br":14104570,"bt":5715202,"i":48,"n":"黑龙江省-哈尔滨市"}, -{"bb":5845542,"bl":13926100,"br":13926598,"bt":5845973,"i":50,"n":"黑龙江省-大庆市"}, -{"bb":3207014,"bl":11099787,"br":11099850,"bt":3207075,"i":115,"n":"云南省-迪庆藏族自治州"}, -{"bb":4086393,"bl":13267591,"br":13267744,"bt":4086520,"i":347,"n":"江苏省-连云港市"}, -{"bb":3392072,"bl":13048485,"br":13049434,"bt":3392699,"i":225,"n":"江西省-景德镇市"}, -{"bb":3969832,"bl":12562386,"br":12614645,"bt":4028604,"i":213,"n":"河南省-平顶山市"}, -{"bb":4537682,"bl":12741220,"br":12764689,"bt":4575193,"i":150,"n":"河北省-石家庄市"}, -{"bb":3696668,"bl":13192783,"br":13193337,"bt":3700308,"i":358,"n":"安徽省-马鞍山市"}, -{"bb":4796992,"bl":13266340,"br":13332691,"bt":4839496,"i":148,"n":"河北省-秦皇岛市"}, -{"bb":5112739,"bl":13793419,"br":13793793,"bt":5113165,"i":184,"n":"辽宁省-抚顺市"}, -{"bb":2865049,"bl":13027531,"br":13027848,"bt":2865190,"i":193,"n":"福建省-龙岩市"}, -{"bb":3204806,"bl":12795783,"br":12795916,"bt":3204919,"i":164,"n":"江西省-新余市"}, -{"bb":4691272,"bl":13032908,"br":13104173,"bt":4748502,"i":332,"n":"天津市-天津市"}, -{"bb":5167523,"bl":13774211,"br":13787926,"bt":5177785,"i":60,"n":"辽宁省-铁岭市"}, -{"bb":3488881,"bl":13326393,"br":13408164,"bt":3536951,"i":179,"n":"浙江省-杭州市"}, -{"bb":3716512,"bl":13248134,"br":13340225,"bt":3772481,"i":160,"n":"江苏省-镇江市"}, -{"bb":5414532,"bl":14091186,"br":14091560,"bt":5415314,"i":55,"n":"吉林省-吉林市"}, -{"bb":4734300,"bl":13131761,"br":13188308,"bt":4868439,"i":265,"n":"河北省-唐山市"}, -{"bb":4849552,"bl":12613435,"br":12613574,"bt":4849720,"i":355,"n":"山西省-大同市"}, -{"bb":3565809,"bl":12389026,"br":12398900,"bt":3573668,"i":270,"n":"湖北省-宜昌市"}, -{"bb":3574290,"bl":13480966,"br":13561930,"bt":3691836,"i":289,"n":"上海市-上海市"}, -{"bb":3789734,"bl":13286625,"br":13299061,"bt":3844878,"i":346,"n":"江苏省-扬州市"}, -{"bb":3652849,"bl":13214228,"br":13252441,"bt":3786221,"i":315,"n":"江苏省-南京市"}, -{"bb":3478355,"bl":13593355,"br":13617454,"bt":3484936,"i":245,"n":"浙江省-舟山市"}, -{"bb":4305001,"bl":13100634,"br":13100912,"bt":4309273,"i":124,"n":"山东省-莱芜市"}, -{"bb":3238216,"bl":12569902,"br":12649824,"bt":3260551,"i":158,"n":"湖南省-长沙市"}, -{"bb":3203018,"bl":12587468,"br":12597602,"bt":3209218,"i":222,"n":"湖南省-株洲市"}, -{"bb":5077825,"bl":13731260,"br":13749941,"bt":5121310,"i":58,"n":"辽宁省-沈阳市"}, -{"bb":2960635,"bl":12795397,"br":12795614,"bt":2960797,"i":365,"n":"江西省-赣州市"}, -{"bb":2553554,"bl":12669597,"br":12728039,"bt":2589794,"i":340,"n":"广东省-深圳市"}, -{"bb":3861940,"bl":13065126,"br":13065476,"bt":3862133,"i":126,"n":"安徽省-蚌埠市"}, -{"bb":2622645,"bl":12521060,"br":12550046,"bt":2654414,"i":338,"n":"广东省-肇庆市"}, -{"bb":4299423,"bl":12999677,"br":13042334,"bt":4303466,"i":325,"n":"山东省-泰安市"}, -{"bb":3428296,"bl":13385613,"br":13457111,"bt":3495580,"i":293,"n":"浙江省-绍兴市"}, -{"bb":3177635,"bl":13422861,"br":13449765,"bt":3230896,"i":178,"n":"浙江省-温州市"}, -{"bb":2659275,"bl":12993669,"br":12997463,"bt":2661424,"i":303,"n":"广东省-汕头市"}, -{"bb":2590213,"bl":12730639,"br":12743727,"bt":2630014,"i":301,"n":"广东省-惠州市"}, -{"bb":4344009,"bl":13120612,"br":13170322,"bt":4408571,"i":354,"n":"山东省-淄博市"}, -{"bb":4108973,"bl":12730348,"br":12730821,"bt":4109122,"i":210,"n":"河南省-开封市"}, -{"bb":4407670,"bl":12912609,"br":13049791,"bt":4516609,"i":372,"n":"山东省-德州市"}, -{"bb":2582084,"bl":12644732,"br":12714491,"bt":2628446,"i":119,"n":"广东省-东莞市"}, -{"bb":3526128,"bl":12493446,"br":12493744,"bt":3526471,"i":157,"n":"湖北省-荆州市"}, -{"bb":2705455,"bl":12767850,"br":12768696,"bt":2707511,"i":200,"n":"广东省-河源市"}, -{"bb":4799843,"bl":12911156,"br":13037613,"bt":4906211,"i":131,"n":"北京市-北京市"}, -{"bb":2844916,"bl":11409472,"br":11459615,"bt":2870947,"i":104,"n":"云南省-昆明市"}, -{"bb":3763267,"bl":13341471,"br":13361425,"bt":3863271,"i":276,"n":"江苏省-泰州市"}, -{"bb":3509051,"bl":12809000,"br":12813148,"bt":3514024,"i":311,"n":"湖北省-黄石市"}, -{"bb":4112232,"bl":13054210,"br":13059605,"bt":4113572,"i":172,"n":"山东省-枣庄市"}, -{"bb":4079053,"bl":11769417,"br":11789704,"bt":4083410,"i":196,"n":"甘肃省-天水市"}, -{"bb":4050384,"bl":12102827,"br":12108681,"bt":4064914,"i":323,"n":"陕西省-咸阳市"}, -{"bb":4535789,"bl":12923254,"br":13064395,"bt":4654095,"i":149,"n":"河北省-沧州市"}, -{"bb":5415303,"bl":13937779,"br":13959668,"bt":5427313,"i":53,"n":"吉林省-长春市"}, -{"bb":5003079,"bl":13587899,"br":13593683,"bt":5012719,"i":228,"n":"辽宁省-盘锦市"}, -{"bb":4145139,"bl":13169749,"br":13175035,"bt":4152928,"i":234,"n":"山东省-临沂市"}, -{"bb":4998894,"bl":13484894,"br":13489515,"bt":5002871,"i":166,"n":"辽宁省-锦州市"}, -{"bb":3598889,"bl":13404612,"br":13487529,"bt":3735367,"i":224,"n":"江苏省-苏州市"}, -{"bb":2835999,"bl":13199589,"br":13203748,"bt":2855141,"i":134,"n":"福建省-泉州市"}, -{"bb":2653447,"bl":12931872,"br":12932137,"bt":2653679,"i":259,"n":"广东省-揭阳市"}, -{"bb":3666171,"bl":13300965,"br":13356547,"bt":3722289,"i":348,"n":"江苏省-常州市"}, -{"bb":4473807,"bl":13191176,"br":13211172,"bt":4479691,"i":174,"n":"山东省-东营市"}, -{"bb":3601203,"bl":13173484,"br":13181193,"bt":3656532,"i":129,"n":"安徽省-芜湖市"}, -{"bb":4675535,"bl":13528482,"br":13557968,"bt":4710202,"i":167,"n":"辽宁省-大连市"}, -{"bb":3342019,"bl":13298093,"br":13385859,"bt":3412907,"i":333,"n":"浙江省-金华市"}, -{"bb":2565026,"bl":12577247,"br":12589564,"bt":2586470,"i":302,"n":"广东省-江门市"}, -{"bb":4139749,"bl":12949022,"br":13023028,"bt":4215506,"i":286,"n":"山东省-济宁市"}, -{"bb":3047606,"bl":11877369,"br":11890125,"bt":3052161,"i":146,"n":"贵州省-贵阳市"}, -{"bb":3203783,"bl":12734254,"br":12734589,"bt":3204049,"i":278,"n":"江西省-宜春市"}, -{"bb":2587044,"bl":12565652,"br":12612286,"bt":2639815,"i":138,"n":"广东省-佛山市"}, -{"bb":2400116,"bl":12275244,"br":12292804,"bt":2448849,"i":198,"n":"广东省-湛江市"}, -{"bb":2790632,"bl":13140053,"br":13156436,"bt":2814121,"i":194,"n":"福建省-厦门市"}, -{"bb":4258074,"bl":13353843,"br":13417549,"bt":4394804,"i":236,"n":"山东省-青岛市"}, -{"bb":3539934,"bl":12789264,"br":12805639,"bt":3634786,"i":271,"n":"湖北省-黄冈市"}, -{"bb":4518869,"bl":12525445,"br":12539608,"bt":4537742,"i":176,"n":"山西省-太原市"}, -{"bb":3644700,"bl":13338760,"br":13410637,"bt":3731365,"i":317,"n":"江苏省-无锡市"}, -{"bb":4435721,"bl":13587884,"br":13635133,"bt":4487593,"i":175,"n":"山东省-威海市"}, -{"bb":3259492,"bl":13028660,"br":13028853,"bt":3259727,"i":279,"n":"江西省-鹰潭市"}, -{"bb":3601682,"bl":13115815,"br":13118532,"bt":3604902,"i":337,"n":"安徽省-铜陵市"}, -{"bb":3400579,"bl":12591841,"br":12603364,"bt":3403134,"i":220,"n":"湖南省-岳阳市"}, -{"bb":3757653,"bl":12699641,"br":12773601,"bt":3787585,"i":214,"n":"河南省-信阳市"}, -{"bb":2050684,"bl":12180053,"br":12218401,"bt":2068379,"i":121,"n":"海南省-三亚市"}, -{"bb":4357524,"bl":13012985,"br":13049377,"bt":4393720,"i":288,"n":"山东省-济南市"}, -{"bb":4039348,"bl":13043276,"br":13052901,"bt":4045847,"i":316,"n":"江苏省-徐州市"}, -{"bb":4466450,"bl":13136403,"br":13139105,"bt":4467579,"i":235,"n":"山东省-滨州市"}, -{"bb":3749173,"bl":12483347,"br":12494432,"bt":3754156,"i":156,"n":"湖北省-襄阳市"}, -{"bb":4281756,"bl":11535981,"br":11564035,"bt":4290003,"i":36,"n":"甘肃省-兰州市"}, -{"bb":2478665,"bl":12464890,"br":12465233,"bt":2478788,"i":199,"n":"广东省-阳江市"}, -{"bb":2909266,"bl":13247302,"br":13247675,"bt":2909594,"i":195,"n":"福建省-莆田市"}, -{"bb":3285263,"bl":13126494,"br":13133363,"bt":3286223,"i":364,"n":"江西省-上饶市"}, -{"bb":4051723,"bl":11927734,"br":11954843,"bt":4055540,"i":171,"n":"陕西省-宝鸡市"}, -{"bb":4026329,"bl":12122462,"br":12134828,"bt":4056242,"i":233,"n":"陕西省-西安市"}, -{"bb":4935470,"bl":13607896,"br":13608922,"bt":4936668,"i":281,"n":"辽宁省-营口市"}, -{"bb":4675099,"bl":12854566,"br":12869812,"bt":4680394,"i":307,"n":"河北省-保定市"}, -{"bb":4854894,"bl":13844932,"br":13848679,"bt":4858477,"i":282,"n":"辽宁省-丹东市"}, -{"bb":2790081,"bl":13098085,"br":13115201,"bt":2798347,"i":255,"n":"福建省-漳州市"}, -{"bb":3872851,"bl":12530861,"br":12531072,"bt":3873005,"i":309,"n":"河南省-南阳市"}, -{"bb":4193489,"bl":13299086,"br":13307157,"bt":4197734,"i":173,"n":"山东省-日照市"}, -{"bb":3577158,"bl":13412579,"br":13448829,"bt":3580587,"i":334,"n":"浙江省-嘉兴市"}, -{"bb":4361269,"bl":11327803,"br":11330709,"bt":4363317,"i":66,"n":"青海省-西宁市"}, -{"bb":4084958,"bl":12513944,"br":12519996,"bt":4095327,"i":153,"n":"河南省-洛阳市"}, -{"bb":3716524,"bl":13411213,"br":13543891,"bt":3812000,"i":161,"n":"江苏省-南通市"}, -{"bb":2590954,"bl":12598509,"br":12672841,"bt":2672358,"i":257,"n":"广东省-广州市"}, -{"bb":3061300,"bl":13307685,"br":13308083,"bt":3061571,"i":192,"n":"福建省-宁德市"}, -{"bb":3939594,"bl":13250767,"br":13264890,"bt":3952492,"i":162,"n":"江苏省-淮安市"}, -{"bb":3404095,"bl":11826382,"br":12066229,"bt":3587135,"i":132,"n":"重庆市-重庆市"}, -{"bb":3118760,"bl":12800735,"br":12800923,"bt":3118914,"i":318,"n":"江西省-吉安市"}, -{"bb":3882855,"bl":11915124,"br":11915578,"bt":3883524,"i":352,"n":"陕西省-汉中市"}, -{"bb":4101709,"bl":12646756,"br":12666984,"bt":4111212,"i":268,"n":"河南省-郑州市"}, -{"bb":3392926,"bl":13485188,"br":13567655,"bt":3525038,"i":180,"n":"浙江省-宁波市"}, -{"bb":5001428,"bl":13692398,"br":13692509,"bt":5001585,"i":320,"n":"辽宁省-鞍山市"}, -{"bb":3460579,"bl":12722695,"br":12728898,"bt":3466940,"i":362,"n":"湖北省-咸宁市"}, -{"bb":4769904,"bl":12989988,"br":13005513,"bt":4834853,"i":191,"n":"河北省-廊坊市"}, -{"bb":3707453,"bl":13021544,"br":13077331,"bt":3739673,"i":127,"n":"安徽省-合肥市"}, -{"bb":4328254,"bl":12713178,"br":12749295,"bt":4371287,"i":151,"n":"河北省-邯郸市"}, -{"bb":2945711,"bl":13270470,"br":13291558,"bt":2995111,"i":300,"n":"福建省-福州市"}, -{"bb":2251569,"bl":12281702,"br":12298297,"bt":2263763,"i":125,"n":"海南省-海口市"}, -{"bb":2556005,"bl":12600200,"br":12626685,"bt":2577258,"i":187,"n":"广东省-中山市"}, -{"bb":3966715,"bl":13168130,"br":13212300,"bt":3999787,"i":277,"n":"江苏省-宿迁市"}, -{"bb":3183089,"bl":12674161,"br":12674806,"bt":3184398,"i":350,"n":"江西省-萍乡市"}, -{"bb":4928581,"bl":13438927,"br":13455690,"bt":4949446,"i":319,"n":"辽宁省-葫芦岛市"}, -{"bb":4422186,"bl":12742242,"br":12746942,"bt":4424899,"i":266,"n":"河北省-邢台市"}, -{"bb":4408531,"bl":13352522,"br":13538768,"bt":4527984,"i":326,"n":"山东省-烟台市"}, -{"bb":3245675,"bl":13473870,"br":13519294,"bt":3373843,"i":244,"n":"浙江省-台州市"}, -{"bb":2772752,"bl":12928590,"br":12928829,"bt":2772980,"i":141,"n":"广东省-梅州市"} -],"dver":1135,"fver":1000} diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/idrres/ResPackIndoorMap.rs b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/idrres/ResPackIndoorMap.rs deleted file mode 100644 index 15e53ef..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/idrres/ResPackIndoorMap.rs and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/idrres/baseindoormap.sty b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/idrres/baseindoormap.sty deleted file mode 100644 index a5916a6..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/idrres/baseindoormap.sty and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/baidumap_logo.png b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/baidumap_logo.png deleted file mode 100644 index 94858b8..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/baidumap_logo.png and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/baidumap_logo@2x.png b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/baidumap_logo@2x.png deleted file mode 100644 index 26cba9a..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/baidumap_logo@2x.png and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/bnavi_icon_location_fixed.png b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/bnavi_icon_location_fixed.png deleted file mode 100644 index a1acd6c..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/bnavi_icon_location_fixed.png and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/bnavi_icon_location_fixed@2x.png b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/bnavi_icon_location_fixed@2x.png deleted file mode 100644 index 5a1d85d..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/bnavi_icon_location_fixed@2x.png and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/direction_wheel.png b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/direction_wheel.png deleted file mode 100644 index 4a24f95..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/direction_wheel.png and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/direction_wheel@2x.png b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/direction_wheel@2x.png deleted file mode 100644 index a7046ea..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/direction_wheel@2x.png and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_action_paopao_middle_left.png b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_action_paopao_middle_left.png deleted file mode 100644 index b716dff..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_action_paopao_middle_left.png and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_action_paopao_middle_left@2x.png b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_action_paopao_middle_left@2x.png deleted file mode 100644 index 8c906f9..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_action_paopao_middle_left@2x.png and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_action_paopao_middle_left_highlighted.png b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_action_paopao_middle_left_highlighted.png deleted file mode 100644 index eda5faf..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_action_paopao_middle_left_highlighted.png and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_action_paopao_middle_left_highlighted@2x.png b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_action_paopao_middle_left_highlighted@2x.png deleted file mode 100644 index 57e092e..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_action_paopao_middle_left_highlighted@2x.png and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_action_paopao_middle_right.png b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_action_paopao_middle_right.png deleted file mode 100644 index 360d2aa..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_action_paopao_middle_right.png and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_action_paopao_middle_right@2x.png b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_action_paopao_middle_right@2x.png deleted file mode 100644 index 0a65e7d..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_action_paopao_middle_right@2x.png and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_action_paopao_middle_right_highlighted.png b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_action_paopao_middle_right_highlighted.png deleted file mode 100644 index 053b474..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_action_paopao_middle_right_highlighted.png and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_action_paopao_middle_right_highlighted@2x.png b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_action_paopao_middle_right_highlighted@2x.png deleted file mode 100644 index 47eb881..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_action_paopao_middle_right_highlighted@2x.png and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_cellphone.png b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_cellphone.png deleted file mode 100644 index d17a4d0..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_cellphone.png and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_cellphone2.png b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_cellphone2.png deleted file mode 100644 index 60bb66d..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_cellphone2.png and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_cellphone2@2x.png b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_cellphone2@2x.png deleted file mode 100644 index 9421d2f..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_cellphone2@2x.png and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_cellphone@2x.png b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_cellphone@2x.png deleted file mode 100644 index dfdd588..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_cellphone@2x.png and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_center_point.png b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_center_point.png deleted file mode 100644 index 6fdcf66..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_center_point.png and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_center_point@2x.png b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_center_point@2x.png deleted file mode 100644 index 67e631a..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_center_point@2x.png and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_compass.png b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_compass.png deleted file mode 100644 index 196ff22..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_compass.png and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_compass@2x.png b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_compass@2x.png deleted file mode 100644 index cbd9d49..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_compass@2x.png and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_compass_background.png b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_compass_background.png deleted file mode 100644 index 7676a11..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_compass_background.png and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_compass_background@2x.png b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_compass_background@2x.png deleted file mode 100644 index 93c171a..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_compass_background@2x.png and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_direction.png b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_direction.png deleted file mode 100644 index 8dc5319..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_direction.png and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_direction@2x.png b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_direction@2x.png deleted file mode 100644 index acbb02d..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_direction@2x.png and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_line_nofocus.png b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_line_nofocus.png deleted file mode 100644 index 910f495..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_line_nofocus.png and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_bus.png b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_bus.png deleted file mode 100644 index faba2fb..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_bus.png and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_bus@2x.png b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_bus@2x.png deleted file mode 100644 index 7294c56..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_bus@2x.png and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_end.png b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_end.png deleted file mode 100644 index 6da923a..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_end.png and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_end@2x.png b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_end@2x.png deleted file mode 100644 index 6ecd890..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_end@2x.png and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_rail.png b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_rail.png deleted file mode 100644 index 71f441e..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_rail.png and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_rail@2x.png b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_rail@2x.png deleted file mode 100644 index a19c875..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_rail@2x.png and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_start.png b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_start.png deleted file mode 100644 index 3c7c1ae..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_start.png and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_start@2x.png b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_start@2x.png deleted file mode 100644 index 2ca97b5..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_start@2x.png and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_waypoint.png b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_waypoint.png deleted file mode 100644 index 7f61cd0..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_waypoint.png and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_waypoint@2x.png b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_waypoint@2x.png deleted file mode 100644 index f7fc472..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_waypoint@2x.png and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_paopao_middle_left.png b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_paopao_middle_left.png deleted file mode 100644 index a1bdd28..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_paopao_middle_left.png and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_paopao_middle_left@2x.png b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_paopao_middle_left@2x.png deleted file mode 100644 index e491f8d..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_paopao_middle_left@2x.png and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_paopao_middle_left_highlighted.png b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_paopao_middle_left_highlighted.png deleted file mode 100644 index b61b647..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_paopao_middle_left_highlighted.png and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_paopao_middle_left_highlighted@2x.png b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_paopao_middle_left_highlighted@2x.png deleted file mode 100644 index db276e2..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_paopao_middle_left_highlighted@2x.png and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_paopao_middle_right.png b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_paopao_middle_right.png deleted file mode 100644 index fbf8979..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_paopao_middle_right.png and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_paopao_middle_right@2x.png b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_paopao_middle_right@2x.png deleted file mode 100644 index 7bacc2e..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_paopao_middle_right@2x.png and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_paopao_middle_right_highlighted.png b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_paopao_middle_right_highlighted.png deleted file mode 100644 index a3d9d9a..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_paopao_middle_right_highlighted.png and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_paopao_middle_right_highlighted@2x.png b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_paopao_middle_right_highlighted@2x.png deleted file mode 100644 index 4133666..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_paopao_middle_right_highlighted@2x.png and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/lineDashTexture.png b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/lineDashTexture.png deleted file mode 100644 index ec2166a..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/lineDashTexture.png and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/line_texture.png b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/line_texture.png deleted file mode 100755 index e43156a..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/line_texture.png and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/pin_green.png b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/pin_green.png deleted file mode 100644 index 48e8d83..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/pin_green.png and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/pin_green@2x.png b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/pin_green@2x.png deleted file mode 100644 index 9ca313a..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/pin_green@2x.png and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/pin_purple.png b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/pin_purple.png deleted file mode 100644 index 9145ccd..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/pin_purple.png and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/pin_purple@2x.png b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/pin_purple@2x.png deleted file mode 100644 index 6657c6f..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/pin_purple@2x.png and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/pin_red.png b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/pin_red.png deleted file mode 100644 index 0584407..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/pin_red.png and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/pin_red@2x.png b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/pin_red@2x.png deleted file mode 100644 index caeb353..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/pin_red@2x.png and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/readme.txt b/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/readme.txt deleted file mode 100644 index 3abce4a..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Map.framework/readme.txt +++ /dev/null @@ -1,67 +0,0 @@ -基础地图:包括基本矢量地图、卫星图、实时路况图和各种地图覆盖物,此外还包括各种与地图相关的操作和事件监听; - - - - --------------------------------------------------------------------------------------- - -iOS 地图 SDK v3.3.0是适用于iOS系统移动设备的矢量地图开发包 - --------------------------------------------------------------------------------------- - -地图SDK功能介绍(全功能开发包): - -地图:提供地图展示和地图操作功能; - -POI检索:支持周边检索、区域检索和城市内兴趣点检索; - -地理编码:提供经纬度和地址信息相互转化的功能接口; - -线路规划:支持公交、驾车、步行三种方式的线路规划; - -覆盖物图层:支持在地图上添加覆盖物(标注、几何图形、热力图、地形图图层等),展示更丰富的LBS信息; - -定位:获取当前位置信息,并在地图上展示(支持普通、跟随、罗盘三种模式); - -离线地图:使用离线地图可节省用户流量,提供更好的地图展示效果; - -调启百度地图:利用SDK接口,直接在本地打开百度地图客户端或WebApp,实现地图功能; - -周边雷达:利用周边雷达功能,开发者可在App内低成本、快速实现查找周边使用相同App的用户位置的功能; - -LBS云检索:支持查询存储在LBS云内的自有数据; - -特色功能:提供短串分享、Place详情检索、热力图等特色功能,帮助开发者搭建功能更加强大的应用; - - --------------------------------------------------------------------------------------- - - 注:自v3.2.0起,百度地图iOS SDK全面支持HTTPS,需要广大开发者导入第三方openssl静态库:libssl.a和libcrypto.a(存放于thirdlib目录下)。 - - 新 版 提 示 】 -【 注 意 】 -1、自v3.2.0起,百度地图iOS SDK全面支持HTTPS,需要广大开发者导入第三方openssl静态库:libssl.a和libcrypto.a(存放于thirdlib目录下) -添加方法:在 TARGETS->Build Phases-> Link Binary With Libaries中点击“+”按钮,在弹出的窗口中点击“Add Other”按钮,选择libssl.a和libcrypto.a添加到工程中 。 - -2、支持CocoaPods导入 -pod setup //更新CocoPods的本地库 -pod search BaiduMapKit //下载最新地图SDK - -【 新 增 】 -[ 基 础 地 图 ] -3D地图下,增加显示天空效果,无需设置 - -[ 工 具 ] -1.全面支持GCJ02坐标输入/输出,全局设置方法如下: -[BMKMapManager setCoordinateTypeUsedInBaiduMapSDK:BMK_COORDTYPE_COMMON];//默认为BD09LL坐标,且此方法仅在国内生效,国外均为WGS84坐标 - -2. 新增调启步行AR导航接口:openBaiduMapwalkARNavigation - -[ LBS云] -云检索中,keywords 改为非必填项 - -【 优 化 】 -优化个性化地图元素分类 - -【 修 复 】 -少部分地铁线及室内图无法显示问题(v3.2.0引入的问题)。 未下载全国离线基础包时,离线状态下全国(球)地图显示异常。 \ No newline at end of file diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/BaiduMapAPI_Search b/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/BaiduMapAPI_Search deleted file mode 100644 index 062382c..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/BaiduMapAPI_Search and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/Headers/BMKBusLineSearch.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/Headers/BMKBusLineSearch.h deleted file mode 100644 index f72ed89..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/Headers/BMKBusLineSearch.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * BMKBusLineSearch.h - * BMapKit - * - * Copyright 2014 Baidu Inc. All rights reserved. - * - */ - -#import -#import "BMKPoiSearchType.h" -#import -#import "BMKBusLineSearchOption.h" -#import "BMKRouteSearchType.h" -#import "BMKSearchBase.h" - -@protocol BMKBusLineSearchDelegate; -///busline搜索服务 -@interface BMKBusLineSearch : BMKSearchBase -/// 检索模块的Delegate,此处记得不用的时候需要置nil,否则影响内存的释放 -@property (nonatomic, weak) id delegate; - -/** - *公交详情检索 - *异步函数,返回结果在BMKBusLineSearchDelegate的onGetBusDetailResult通知 - *@param busLineSearchOption 公交线路检索信息类 - *@return 成功返回YES,否则返回NO - */ -- (BOOL)busLineSearch:(BMKBusLineSearchOption*)busLineSearchOption; - - -@end - -///搜索delegate,用于获取搜索结果 -@protocol BMKBusLineSearchDelegate -@optional -/** - *返回busdetail搜索结果 - *@param searcher 搜索对象 - *@param busLineResult 搜索结果 - *@param error 错误号,@see BMKSearchErrorCode - */ -- (void)onGetBusDetailResult:(BMKBusLineSearch*)searcher result:(BMKBusLineResult*)busLineResult errorCode:(BMKSearchErrorCode)error; - -@end - - - - diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/Headers/BMKBusLineSearchOption.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/Headers/BMKBusLineSearchOption.h deleted file mode 100644 index 55f0f9b..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/Headers/BMKBusLineSearchOption.h +++ /dev/null @@ -1,22 +0,0 @@ -/* - * BMKBusLineSearchOption.h - * BMapKit - * - * Copyright 2014 Baidu Inc. All rights reserved. - * - */ - -#import -/// 公交线路检索信息类 -@interface BMKBusLineSearchOption : NSObject -{ - NSString *_city; - NSString *_busLineUid; -} -///城市名 -@property (nonatomic, strong) NSString *city; -///公交线路的uid -@property (nonatomic, strong) NSString *busLineUid; - -@end - diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/Headers/BMKDistrictSearch.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/Headers/BMKDistrictSearch.h deleted file mode 100644 index 4bdc4e9..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/Headers/BMKDistrictSearch.h +++ /dev/null @@ -1,74 +0,0 @@ -// -// BMKDistrictSearch.h -// SearchComponent -// -// Created by wzy on 15/12/14. -// Copyright © 2015年 baidu. All rights reserved. -// - -#ifndef BMKDistrictSearch_h -#define BMKDistrictSearch_h -#import -#import "BMKSearchBase.h" - -/// 行政区域检索信息 -@interface BMKDistrictSearchOption : NSObject - -/// 城市名字(必须) -@property (nonatomic, strong) NSString *city; -/// 区县名字(可选) -@property (nonatomic, strong) NSString *district; - -@end - -#pragma mark - - -/// 行政区域检索结果 -@interface BMKDistrictResult : NSObject - -/// 行政区域编码 -@property (nonatomic, assign) NSInteger code; -/// 行政区域名称 -@property (nonatomic, strong) NSString *name; -/// 行政区域中心点 -@property (nonatomic, assign) CLLocationCoordinate2D center; -/// 行政区边界直角地理坐标点数据(NSString数组,字符串数据格式为: @"x,y;x,y") -@property (nonatomic, strong) NSArray *paths; - -@end - -#pragma mark - - -@protocol BMKDistrictSearchDelegate; - -/// 行政区域搜索服务 -@interface BMKDistrictSearch : BMKSearchBase -/// 检索模块的delegate,此处记得不用的时候需要置nil,否则影响内存的释放 -@property (nonatomic, weak) id delegate; - -/** - *行政区域检索 - *异步函数,返回结果在BMKDistrictSearchDelegate的onGetDistrictResult通知 - *@param DistrictSearchOption 公交线路检索信息类 - *@return 成功返回YES,否则返回NO - */ -- (BOOL)districtSearch:(BMKDistrictSearchOption*)districtSearchOption; - -@end - -#pragma mark - - -///搜索delegate,用于获取行政区域搜索结果 -@protocol BMKDistrictSearchDelegate -@optional -/** - *返回行政区域搜索结果 - *@param searcher 搜索对象 - *@param result 搜索结BMKDistrictSearch果 - *@param error 错误号,@see BMKSearchErrorCode - */ -- (void)onGetDistrictResult:(BMKDistrictSearch *)searcher result:(BMKDistrictResult *)result errorCode:(BMKSearchErrorCode)error; - -@end - -#endif /* BMKDistrictSearch_h */ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/Headers/BMKGeocodeSearch.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/Headers/BMKGeocodeSearch.h deleted file mode 100644 index 1197fdf..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/Headers/BMKGeocodeSearch.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - * BMKGeocodeSearch.h - * BMapKit - * - * Copyright 2011 Baidu Inc. All rights reserved. - * - */ - -#import "BMKGeocodeSearchOption.h" -#import "BMKGeocodeType.h" -#import "BMKSearchBase.h" - -@protocol BMKGeoCodeSearchDelegate; -///geo搜索服务 -@interface BMKGeoCodeSearch : BMKSearchBase -/// 检索模块的Delegate,此处记得不用的时候需要置nil,否则影响内存的释放 -@property (nonatomic, weak) id delegate; - -/** - *根据地址名称获取地理信息 - *异步函数,返回结果在BMKGeoCodeSearchDelegate的onGetAddrResult通知 - *@param geoCodeOption geo检索信息类 - *@return 成功返回YES,否则返回NO - */ -- (BOOL)geoCode:(BMKGeoCodeSearchOption*)geoCodeOption; -/** - *根据地理坐标获取地址信息 - *异步函数,返回结果在BMKGeoCodeSearchDelegate的onGetAddrResult通知 - *@param reverseGeoCodeOption 反geo检索信息类 - *@return 成功返回YES,否则返回NO - */ -- (BOOL)reverseGeoCode:(BMKReverseGeoCodeOption*)reverseGeoCodeOption; - - -@end - -///搜索delegate,用于获取搜索结果 -@protocol BMKGeoCodeSearchDelegate -@optional -/** - *返回地址信息搜索结果 - *@param searcher 搜索对象 - *@param result 搜索结BMKGeoCodeSearch果 - *@param error 错误号,@see BMKSearchErrorCode - */ -- (void)onGetGeoCodeResult:(BMKGeoCodeSearch *)searcher result:(BMKGeoCodeResult *)result errorCode:(BMKSearchErrorCode)error; - -/** - *返回反地理编码搜索结果 - *@param searcher 搜索对象 - *@param result 搜索结果 - *@param error 错误号,@see BMKSearchErrorCode - */ -- (void)onGetReverseGeoCodeResult:(BMKGeoCodeSearch *)searcher result:(BMKReverseGeoCodeResult *)result errorCode:(BMKSearchErrorCode)error; - -@end - - - - diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/Headers/BMKGeocodeSearchOption.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/Headers/BMKGeocodeSearchOption.h deleted file mode 100644 index 233ca17..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/Headers/BMKGeocodeSearchOption.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - * BMKGeoCodeSearchOption.h - * BMapKit - * - * Copyright 2013 Baidu Inc. All rights reserved. - * - */ - -#import -/// geo检索信息类 -@interface BMKGeoCodeSearchOption : NSObject -{ - NSString *_address; - NSString *_city; -} -///地址 -@property (nonatomic, strong) NSString *address; -///城市名 -@property (nonatomic, strong) NSString *city; -@end - -///反geo检索信息类 -@interface BMKReverseGeoCodeOption : NSObject { - CLLocationCoordinate2D _reverseGeoPoint; -} -///经纬度 -@property (nonatomic, assign) CLLocationCoordinate2D reverseGeoPoint; -@end - - - diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/Headers/BMKGeocodeType.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/Headers/BMKGeocodeType.h deleted file mode 100644 index ad374e2..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/Headers/BMKGeocodeType.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * BMKGeocodeType.h - * BMapKit - * - * Copyright 2011 Baidu Inc. All rights reserved. - * - */ - -#import - -///反地址编码结果 -@interface BMKReverseGeoCodeResult : NSObject -{ - BMKAddressComponent* _addressDetail; - NSString* _address; - CLLocationCoordinate2D _location; - NSArray* _poiList; -} -///层次化地址信息 -@property (nonatomic, strong) BMKAddressComponent* addressDetail; -///地址名称 -@property (nonatomic, strong) NSString* address; -///商圈名称 -@property (nonatomic, strong) NSString* businessCircle; -///结合当前位置POI的语义化结果描述 -@property (nonatomic, strong) NSString* sematicDescription; -///地址坐标 -@property (nonatomic) CLLocationCoordinate2D location; -///地址周边POI信息,成员类型为BMKPoiInfo -@property (nonatomic, strong) NSArray* poiList; - -@end - -///地址编码结果 -@interface BMKGeoCodeResult : NSObject -{ - CLLocationCoordinate2D _location; - NSString* _address; -} -///地理编码位置 -@property (nonatomic) CLLocationCoordinate2D location; -///地理编码地址 -@property (nonatomic,strong) NSString* address; - -@end - - - diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/Headers/BMKPoiSearch.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/Headers/BMKPoiSearch.h deleted file mode 100644 index 210cbb1..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/Headers/BMKPoiSearch.h +++ /dev/null @@ -1,86 +0,0 @@ -/* - * BMKPoiSearch.h - * BMapKit - * - * Copyright 2011 Baidu Inc. All rights reserved. - * - */ - -#import -#import "BMKPoiSearchType.h" -#import "BMKPoiSearchOption.h" -#import "BMKSearchBase.h" - -@protocol BMKPoiSearchDelegate; -///搜索服务 -@interface BMKPoiSearch : BMKSearchBase -/// 检索模块的Delegate,此处记得不用的时候需要置nil,否则影响内存的释放 -@property (nonatomic, weak) id delegate; - - -/** - *城市POI检索 - *异步函数,返回结果在BMKPoiSearchDelegate的onGetPoiResult通知 - *@param option 城市内搜索的搜索参数类(BMKCitySearchOption) - *@return 成功返回YES,否则返回NO - */ -- (BOOL)poiSearchInCity:(BMKCitySearchOption*)option; - -/** - *根据范围和检索词发起范围检索 - *异步函数,返回结果在BMKPoiSearchDelegate的onGetPoiResult通知 - *@param option 范围搜索的搜索参数类(BMKBoundSearchOption) - *@return 成功返回YES,否则返回NO - */ -- (BOOL)poiSearchInbounds:(BMKBoundSearchOption*)option; -/** - *根据中心点、半径和检索词发起周边检索 - *异步函数,返回结果在BMKPoiSearchDelegate的onGetPoiResult通知 - *@param option 周边搜索的搜索参数类(BMKNearbySearchOption) - *@param index 页码,如果是第一次发起搜索,填0,根据返回的结果可以去获取第n页的结果,页码从0开始 - *@return 成功返回YES,否则返回NO - */ -- (BOOL)poiSearchNearBy:(BMKNearbySearchOption*)option; -/** - *根据poi uid 发起poi详情检索 - *异步函数,返回结果在BMKPoiSearchDelegate的onGetPoiDetailResult通知 - *@param option poi详情检索参数类(BMKPoiDetailSearchOption) - *@return 成功返回YES,否则返回NO - */ -- (BOOL)poiDetailSearch:(BMKPoiDetailSearchOption*)option; -/** - *poi室内检索 - *异步函数,返回结果在BMKPoiSearchDelegate的onGetPoiIndoorResult通知 - *@param option poi室内检索参数类(BMKPoiIndoorSearchOption) - *@return 成功返回YES,否则返回NO - */ -- (BOOL)poiIndoorSearch:(BMKPoiIndoorSearchOption*)option; -@end - -///搜索delegate,用于获取搜索结果 -@protocol BMKPoiSearchDelegate -@optional -/** - *返回POI搜索结果 - *@param searcher 搜索对象 - *@param poiResult 搜索结果列表 - *@param errorCode 错误号,@see BMKSearchErrorCode - */ -- (void)onGetPoiResult:(BMKPoiSearch*)searcher result:(BMKPoiResult*)poiResult errorCode:(BMKSearchErrorCode)errorCode; - -/** - *返回POI详情搜索结果 - *@param searcher 搜索对象 - *@param poiDetailResult 详情搜索结果 - *@param errorCode 错误号,@see BMKSearchErrorCode - */ -- (void)onGetPoiDetailResult:(BMKPoiSearch*)searcher result:(BMKPoiDetailResult*)poiDetailResult errorCode:(BMKSearchErrorCode)errorCode; - -/** - *返回POI室内搜索结果 - *@param searcher 搜索对象 - *@param poiIndoorResult 搜索结果列表 - *@param errorCode 错误号,@see BMKSearchErrorCode - */ -- (void)onGetPoiIndoorResult:(BMKPoiSearch*)searcher result:(BMKPoiIndoorResult*)poiIndoorResult errorCode:(BMKSearchErrorCode)errorCode; -@end \ No newline at end of file diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/Headers/BMKPoiSearchOption.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/Headers/BMKPoiSearchOption.h deleted file mode 100644 index dff4a78..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/Headers/BMKPoiSearchOption.h +++ /dev/null @@ -1,84 +0,0 @@ -/* - * BMKPoiSearchOption.h - * BMapKit - * - * Copyright 2013 Baidu Inc. All rights reserved. - * - */ -#import -#import - -typedef enum{ - BMK_POI_SORT_BY_COMPOSITE = 0,//综合排序 - BMK_POI_SORT_BY_DISTANCE,//距离由近到远排序 -}BMKPoiSortType; - -/// 检索基础信息类,所有类型Poi检索的基类 -@interface BMKBasePoiSearchOption : NSObject -{ - NSString *_keyword; - int _pageIndex; - int _pageCapacity; -} -///搜索关键字 -@property (nonatomic, strong) NSString *keyword; -///分页索引,可选,默认为0 -@property (nonatomic, assign) int pageIndex; -///分页数量,可选,默认为10,最多为50 -@property (nonatomic, assign) int pageCapacity; - -@end - -///本地云检索参数信息类 -@interface BMKCitySearchOption : BMKBasePoiSearchOption { - NSString *_city; -} -///区域名称(市或区的名字,如北京市,海淀区),必选, 必须最长25个字符 -@property (nonatomic, strong) NSString *city; -///是否请求门址信息列表,默认为YES -@property (nonatomic, assign) BOOL requestPoiAddressInfoList; -@end - -///周边云检索参数信息类 -@interface BMKNearbySearchOption : BMKBasePoiSearchOption { - CLLocationCoordinate2D _location; - int _radius; -} -///检索的中心点,经纬度 -@property (nonatomic, assign) CLLocationCoordinate2D location; -///周边检索半径 -@property (nonatomic, assign) int radius; -//搜索结果排序规则,可选,默认BMK_POI_SORT_BY_COMPOSITE -@property (nonatomic, assign) BMKPoiSortType sortType; - -@end - -///矩形云检索参数信息类 -@interface BMKBoundSearchOption : BMKBasePoiSearchOption { - CLLocationCoordinate2D _leftBottom; - CLLocationCoordinate2D _rightTop; - -} -///矩形区域,左下角和右上角的经纬度坐标点。 -@property (nonatomic, assign) CLLocationCoordinate2D leftBottom; -@property (nonatomic, assign) CLLocationCoordinate2D rightTop; -@end - -///室内POI检索参数信息类 -@interface BMKPoiIndoorSearchOption : BMKBasePoiSearchOption -/// 室内ID(必须) -@property (nonatomic, strong) NSString *indoorId; -/// 楼层(可选),设置后,会优先获取该楼层的室内POI,然后是其它楼层的 -@property (nonatomic, strong) NSString *floor; -@end - -///poi详情检索信息类 -@interface BMKPoiDetailSearchOption : NSObject { - NSString* _poiUid; -} -///poi的uid,从poi检索返回的BMKPoiResult结构中获取 -@property (nonatomic, strong) NSString* poiUid; - -@end - - diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/Headers/BMKPoiSearchType.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/Headers/BMKPoiSearchType.h deleted file mode 100644 index 24a7dce..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/Headers/BMKPoiSearchType.h +++ /dev/null @@ -1,239 +0,0 @@ -/* - * BMKPoiSearchType.h - * BMapKit - * - * Copyright 2011 Baidu Inc. All rights reserved. - * - */ - -#import -#import -enum { - BMKInvalidCoordinate = -1, ///<无效坐标 - BMKCarTrafficFIRST = 60, ///<驾乘检索策略常量:躲避拥堵,若无实时路况,默认按照时间优先策略 - BMKCarTimeFirst = 0, ///<驾乘检索策略常量:时间优先 - BMKCarDisFirst, ///<驾乘检索策略常量:最短距离 - BMKCarFeeFirst, ///<驾乘检索策略常量:较少费用 - BMKBusTimeFirst, ///<公交检索策略常量:时间优先 - BMKBusTransferFirst, ///<公交检索策略常量:最少换乘 - BMKBusWalkFirst, ///<公交检索策略常量:最小步行距离 - BMKBusNoSubway, ///<公交检索策略常量:不含地铁 - BMKTypeCityList = 7, /// delegate; - -/** - *公交路线检索(仅支持市内) - *异步函数,返回结果在BMKRouteSearchDelegate的onGetTransitRouteResult通知 - *@param transitRoutePlanOption 公交换乘信息类 - *@return 成功返回YES,否则返回NO - */ -- (BOOL)transitSearch:(BMKTransitRoutePlanOption*)transitRoutePlanOption; - -/** - *公共交通路线检索(new)(支持市内和跨城) - *异步函数,返回结果在BMKRouteSearchDelegate的onGetMassTransitRouteResult通知 - *注:起终点城市不支持使用cityId - *@param routePlanOption 公共交通检索信息类 - *@return 成功返回YES,否则返回NO - */ -- (BOOL)massTransitSearch:(BMKMassTransitRoutePlanOption*)routePlanOption; - -/** - *驾乘路线检索 - *异步函数,返回结果在BMKRouteSearchDelegate的onGetDrivingRouteResult通知 - *@param drivingRoutePlanOption 驾车检索信息类 - *@return 成功返回YES,否则返回NO - */ -- (BOOL)drivingSearch:(BMKDrivingRoutePlanOption*)drivingRoutePlanOption; - -/** - *步行路线检索 - *异步函数,返回结果在BMKRouteSearchDelegate的onGetWalkingRouteResult通知 - *@param walkingRoutePlanOption 步行检索信息类 - *@return 成功返回YES,否则返回NO - */ -- (BOOL)walkingSearch:(BMKWalkingRoutePlanOption*)walkingRoutePlanOption; - -/** - *骑行路线检索 - *异步函数,返回结果在BMKRouteSearchDelegate的onGetRidingRouteResult通知 - *@param ridingRoutePlanOption 骑行检索信息类 - *@return 成功返回YES,否则返回NO - */ -- (BOOL)ridingSearch:(BMKRidingRoutePlanOption*) ridingRoutePlanOption; - -/** - *室内路线检索 - *异步函数,返回结果在BMKRouteSearchDelegate的onGetIndoorRouteResult通知 - *@param indoorRoutePlanOption 室内路线检索信息类 - *@return 成功返回YES,否则返回NO - */ -- (BOOL)indoorRoutePlanSearch:(BMKIndoorRoutePlanOption*) indoorRoutePlanOption; - -@end - -///路线搜索delegate,用于获取路线搜索结果 -@protocol BMKRouteSearchDelegate -@optional -/** - *返回公交搜索结果 - *@param searcher 搜索对象 - *@param result 搜索结果,类型为BMKTransitRouteResult - *@param error 错误号,@see BMKSearchErrorCode - */ -- (void)onGetTransitRouteResult:(BMKRouteSearch*)searcher result:(BMKTransitRouteResult*)result errorCode:(BMKSearchErrorCode)error; - -/** - *返回公共交通路线检索结果(new) - *@param searcher 搜索对象 - *@param result 搜索结果,类型为BMKMassTransitRouteResult - *@param error 错误号,@see BMKSearchErrorCode - */ -- (void)onGetMassTransitRouteResult:(BMKRouteSearch*)searcher result:(BMKMassTransitRouteResult*)result errorCode:(BMKSearchErrorCode)error; - -/** - *返回驾乘搜索结果 - *@param searcher 搜索对象 - *@param result 搜索结果,类型为BMKDrivingRouteResult - *@param error 错误号,@see BMKSearchErrorCode - */ -- (void)onGetDrivingRouteResult:(BMKRouteSearch*)searcher result:(BMKDrivingRouteResult*)result errorCode:(BMKSearchErrorCode)error; - -/** - *返回步行搜索结果 - *@param searcher 搜索对象 - *@param result 搜索结果,类型为BMKWalkingRouteResult - *@param error 错误号,@see BMKSearchErrorCode - */ -- (void)onGetWalkingRouteResult:(BMKRouteSearch*)searcher result:(BMKWalkingRouteResult*)result errorCode:(BMKSearchErrorCode)error; - -/** - *返回骑行搜索结果 - *@param searcher 搜索对象 - *@param result 搜索结果,类型为BMKRidingRouteResult - *@param error 错误号,@see BMKSearchErrorCode - */ -- (void)onGetRidingRouteResult:(BMKRouteSearch*)searcher result:(BMKRidingRouteResult*)result errorCode:(BMKSearchErrorCode)error; - -/** - *返回室内路线搜索结果 - *@param searcher 搜索对象 - *@param result 搜索结果,类型为BMKIndoorRouteResult - *@param error 错误号,@see BMKSearchErrorCode - */ -- (void)onGetIndoorRouteResult:(BMKRouteSearch*)searcher result:(BMKIndoorRouteResult*)result errorCode:(BMKSearchErrorCode)error; -@end diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/Headers/BMKRouteSearchOption.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/Headers/BMKRouteSearchOption.h deleted file mode 100644 index 6de08f8..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/Headers/BMKRouteSearchOption.h +++ /dev/null @@ -1,84 +0,0 @@ -/* - * BMKPoiSearchOption.h - * BMapKit - * - * Copyright 2013 Baidu Inc. All rights reserved. - * - */ - -#import -#import "BMKRouteSearchType.h" -/// 路线查询基础信息类 -@interface BMKBaseRoutePlanOption : NSObject -{ - BMKPlanNode *_from; - BMKPlanNode *_to; -} -///检索的起点,可通过关键字、坐标两种方式指定。cityName和cityID同时指定时,优先使用cityID -@property (nonatomic, strong) BMKPlanNode *from; -///检索的终点,可通过关键字、坐标两种方式指定。cityName和cityID同时指定时,优先使用cityID -@property (nonatomic, strong) BMKPlanNode *to; -@end -/// 步行查询基础信息类 -@interface BMKWalkingRoutePlanOption : BMKBaseRoutePlanOption -{ - -} -@end -/// 驾车查询基础信息类 -@interface BMKDrivingRoutePlanOption : BMKBaseRoutePlanOption -{ - NSArray* _wayPointsArray; - BMKDrivingPolicy _drivingPolicy; -} -@property (nonatomic, strong) NSArray *wayPointsArray; -///驾车检索策略,默认使用BMK_DRIVING_TIME_FIRST -@property (nonatomic) BMKDrivingPolicy drivingPolicy; - -///驾车检索获取路线每一个step的路况,默认使用BMK_DRIVING_REQUEST_TRAFFICE_TYPE_NONE -@property (nonatomic) BMKDrivingRequestTrafficType drivingRequestTrafficType; - - -@end -/// 公交查询基础信息类 -@interface BMKTransitRoutePlanOption : BMKBaseRoutePlanOption -{ - NSString* _city; - BMKTransitPolicy _transitPolicy; -} -///城市名,用于在哪个城市内进行检索 -@property (nonatomic, strong) NSString *city; -///公交检索策略,默认使用BMK_TRANSIT_TIME_FIRST -@property (nonatomic) BMKTransitPolicy transitPolicy; - -@end - -/// 公共交通路线查询基础信息类(支持市内和跨城)(注:起终点城市不支持cityId) -@interface BMKMassTransitRoutePlanOption : BMKBaseRoutePlanOption - -///分页索引,可选,默认为0(从0开始) -@property (nonatomic, assign) NSUInteger pageIndex; -///分页数量,可选,默认为10,取值范围[1,10] -@property (nonatomic, assign) NSUInteger pageCapacity; -///市内公交换乘策略策略,可选,默认使用BMK_MASS_TRANSIT_INCITY_RECOMMEND -@property (nonatomic, assign) BMKMassTransitIncityPolicy incityPolicy; -///跨城公交换乘策略,可选,默认使用BMK_MASS_TRANSIT_INTERCITY_TIME_FIRST -@property (nonatomic, assign) BMKMassTransitIntercityPolicy intercityPolicy; -///跨城交通方式策略,可选,默认使用BMK_MASS_TRANSIT_INTERCITY_TRANS_TRAIN_FIRST -@property (nonatomic, assign) BMKMassTransitIntercityTransPolicy intercityTransPolicy; - -@end - -/// 骑行查询基础信息类 -@interface BMKRidingRoutePlanOption : BMKBaseRoutePlanOption - -@end - -/// 室内路线规划查询基础信息类 -@interface BMKIndoorRoutePlanOption : NSObject -///检索的起点 -@property (nonatomic, strong) BMKIndoorPlanNode *from; -///检索的终点 -@property (nonatomic, strong) BMKIndoorPlanNode *to; - -@end \ No newline at end of file diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/Headers/BMKRouteSearchType.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/Headers/BMKRouteSearchType.h deleted file mode 100644 index e055471..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/Headers/BMKRouteSearchType.h +++ /dev/null @@ -1,598 +0,0 @@ -/* - * BMKRouteSearchType.h - * BMapKit - * - * Copyright 2011 Baidu Inc. All rights reserved. - * - */ - -#import -#import -#import "BMKPoiSearchType.h" -#import -///路段类型枚举 -typedef enum -{ - BMK_BUSLINE = 0,///公交 - BMK_SUBWAY = 1,///地铁 - BMK_WAKLING = 2,///步行 -}BMKTransitStepType; - -///交通方式枚举 -typedef enum -{ - BMK_TRANSIT_SUBWAY = 0,///地铁 - BMK_TRANSIT_TRAIN = 1,///火车 - BMK_TRANSIT_PLANE = 2,///飞机 - BMK_TRANSIT_BUSLINE = 3,///公交 - BMK_TRANSIT_DRIVING = 4,///驾车 - BMK_TRANSIT_WAKLING = 5,///步行 - BMK_TRANSIT_COACH = 6,///大巴 -}BMKMassTransitType; - - -///室内路线结点类型 -typedef enum -{ - BMK_INDOOR_STEP_NODE_TYPE_ELEVATOR = 1,///直梯 - BMK_INDOOR_STEP_NODE_TYPE_ESCALATOR = 2,///扶梯 - BMK_INDOOR_STEP_NODE_TYPE_STAIR = 3,///楼梯 - BMK_INDOOR_STEP_NODE_TYPE_SECURITY_CHECK = 4,///安检 -}BMKIndoorStepNodeType; - -typedef enum -{ - BMK_TRANSIT_TIME_FIRST = 3, //较快捷(公交) - BMK_TRANSIT_TRANSFER_FIRST = 4, //少换乘(公交) - BMK_TRANSIT_WALK_FIRST = 5, //少步行(公交) - BMK_TRANSIT_NO_SUBWAY = 6, //不坐地铁 -}BMKTransitPolicy; - -/// 公共交通:市内公交换乘策略 -typedef enum -{ - BMK_MASS_TRANSIT_INCITY_RECOMMEND = 0,//推荐 - BMK_MASS_TRANSIT_INCITY_TRANSFER_FIRST = 1,//少换乘 - BMK_MASS_TRANSIT_INCITY_WALK_FIRST = 2,//少步行 - BMK_MASS_TRANSIT_INCITY_NO_SUBWAY = 3,//不坐地铁 - BMK_MASS_TRANSIT_INCITY_TIME_FIRST = 4,//较快捷 - BMK_MASS_TRANSIT_INCITY_SUBWAY_FIRST = 5,//地铁优先 -}BMKMassTransitIncityPolicy; - -/// 公共交通:跨城公交换乘策略 -typedef enum -{ - BMK_MASS_TRANSIT_INTERCITY_TIME_FIRST = 0,//较快捷 - BMK_MASS_TRANSIT_INTERCITY_START_EARLY = 1,//出发早 - BMK_MASS_TRANSIT_INTERCITY_PRICE_FIRST = 2,//价格低 -}BMKMassTransitIntercityPolicy; - -/// 公共交通:跨城交通方式策略 -typedef enum -{ - BMK_MASS_TRANSIT_INTERCITY_TRANS_TRAIN_FIRST = 0,//火车优先 - BMK_MASS_TRANSIT_INTERCITY_TRANS_PLANE_FIRST = 1,//飞机优先 - BMK_MASS_TRANSIT_INTERCITY_TRANS_BUS_FIRST = 2,//大巴优先 -}BMKMassTransitIntercityTransPolicy; - - -typedef enum -{ - BMK_DRIVING_BLK_FIRST = -1, //躲避拥堵(自驾) - BMK_DRIVING_TIME_FIRST = 0, //最短时间(自驾) - BMK_DRIVING_DIS_FIRST = 1, //最短路程(自驾) - BMK_DRIVING_FEE_FIRST, //少走高速(自驾) - -}BMKDrivingPolicy; - -typedef enum -{ - BMK_DRIVING_REQUEST_TRAFFICE_TYPE_NONE = 0, //不带路况 - BMK_DRIVING_REQUEST_TRAFFICE_TYPE_PATH_AND_TRAFFICE = 1, //道路和路况 -}BMKDrivingRequestTrafficType; - -///打车信息类 -@interface BMKTaxiInfo : NSObject - -///路线打车描述信息 -@property (nonatomic, strong) NSString* desc; -///总路程,单位: 米 -@property (nonatomic) int distance; -///总耗时,单位: 秒 -@property (nonatomic) int duration; -///每千米单价(白天),单位 元 -@property (nonatomic) CGFloat perKMPrice; -///起步价(白天),单位 元 -@property (nonatomic) CGFloat startPrice; -///总价(预估) , 单位: 元 -@property (nonatomic) int totalPrice; - -@end - -///路线换乘方案里的交通工具信息类 -@interface BMKVehicleInfo : NSObject{ - NSString* _uid; - NSString* _title; - int _passStationNum; - int _totalPrice; - int _zonePrice; -} -///该交通路线的标识 -@property (nonatomic, strong) NSString* uid; -///该交通路线的名称 -@property (nonatomic, strong) NSString* title; -///该交通路线的所乘站数 -@property (nonatomic) int passStationNum; -///该交通路线的全程价格 -@property (nonatomic) int totalPrice; -///该交通路线的所乘区间的区间价格 -@property (nonatomic) int zonePrice; -@end - -///此类代表一个时间段,每个属性都是一个时间段。 -@interface BMKTime : NSObject{ - int _dates; - int _hours; - int _minutes; - int _seconds; - -} - -///时间段,单位(天) -@property (nonatomic) int dates; -///时间段,单位(小时) -@property (nonatomic) int hours; -///时间段,单位(分) -@property (nonatomic) int minutes; -///时间段,单位(秒) -@property (nonatomic) int seconds; -@end - -///此类表示路线中的一节点,节点包括:路线起终点,公交站点等 -@interface BMKRouteNode : NSObject{ - NSString* _uid; - NSString* _title; - CLLocationCoordinate2D _location; -} -///该节点uid -@property (nonatomic, strong) NSString* uid; -///该节点的名称 -@property (nonatomic, strong) NSString* title; -///该节点的坐标 -@property (nonatomic) CLLocationCoordinate2D location; -@end -///此类表示公交站点信息 -@interface BMKBusStation : BMKRouteNode -@end - - -///此类表示路线中的一个路段(基类) -@interface BMKRouteStep : NSObject{ - int _distance; - int _duration; - BMKMapPoint* _points; - int _pointsCount; -} -///路段长度 单位: 米 -@property (nonatomic) int distance; -///路段耗时 单位: 秒 -@property (nonatomic) int duration; -///路段所经过的地理坐标集合 -@property (nonatomic) BMKMapPoint* points; -///路段所经过的地理坐标集合内点的个数 -@property (nonatomic) int pointsCount; - -@end - -///此类表示公交线路中的一个路段 -@interface BMKBusStep : BMKRouteStep -@end - -///此类表示公交换乘路线中的一个路段 -@interface BMKTransitStep : BMKRouteStep{ - BMKRouteNode* _entrace; - BMKRouteNode* _exit; - NSString* _instruction; - BMKTransitStepType _stepType; - BMKVehicleInfo* _vehicleInfo; -} -///路段入口信息 -@property (nonatomic, strong) BMKRouteNode* entrace; -///路段出口信息 -@property (nonatomic, strong) BMKRouteNode* exit; -///路段换乘说明 -@property (nonatomic, strong) NSString* instruction; -///路段类型 -@property (nonatomic) BMKTransitStepType stepType; -///当路段为公交路段或地铁路段时,可以获取交通工具信息 -@property (nonatomic, strong) BMKVehicleInfo* vehicleInfo; -@end - -///公共交通方案里的交通工具信息基类类 -@interface BMKBaseVehicleInfo : NSObject - -///该交通路线的名称 -@property (nonatomic, strong) NSString* name; -///出发站 -@property (nonatomic, strong) NSString* departureStation; -///到达站 -@property (nonatomic, strong) NSString* arriveStation; -///出发时间(BMKBusVehicleInfo时departureTime为空) -@property (nonatomic, strong) NSString* departureTime; -///到达时间(BMKBusVehicleInfo时arriveTime为空) -@property (nonatomic, strong) NSString* arriveTime; - -@end - -///公共交通方案里的交通工具信息类- 公交车、地铁 -@interface BMKBusVehicleInfo : BMKBaseVehicleInfo - -///该交通路线的所乘站数 -@property (nonatomic, assign) NSInteger passStationNum; -///始发车发车时间 -@property (nonatomic, strong) NSString* firstTime; -///末班车发车时间 -@property (nonatomic, strong) NSString* lastTime; - -@end -///公共交通方案里的交通工具信息类 - 飞机 -@interface BMKPlaneVehicleInfo : BMKBaseVehicleInfo - -///价格(单位:元) -@property (nonatomic, assign) CGFloat price; -///折扣 -@property (nonatomic, assign) CGFloat discount; -///航空公司 -@property (nonatomic, strong) NSString* airlines; -///订票网址 -@property (nonatomic, strong) NSString* bookingUrl; - -@end -///公共交通方案里的交通工具信息类 - 火车 -@interface BMKTrainVehicleInfo : BMKBaseVehicleInfo - -///价格(单位:元) -@property (nonatomic, assign) CGFloat price; -///订票电话 -@property (nonatomic, strong) NSString* booking; - -@end -///公共交通方案里的交通工具信息类 - 大巴 -@interface BMKCoachVehicleInfo : BMKBaseVehicleInfo - -///价格(单位:元) -@property (nonatomic, assign) CGFloat price; -///订票网址 -@property (nonatomic, strong) NSString* bookingUrl; -///合作方名称 -@property (nonatomic, strong) NSString* providerName; -///合作方官网 -@property (nonatomic, strong) NSString* providerUrl; - -@end - -///此类表示公共交通路线中的路段 -@interface BMKMassTransitStep : NSObject -///steps中是方案还是子路段,YES:steps是BMKMassTransitStep的子路段(A到B需要经过多个steps);NO:steps是多个方案(A到B有多个方案选择) -@property (nonatomic, assign) BOOL isSubStep; -///本BMKMassTransitStep中的有几个方案或几个子路段,成员类型为BMKMassTransitSubStep -@property (nonatomic, strong) NSArray *steps; - -@end - -///此类表示公共交通路线中的一个路段 -@interface BMKMassTransitSubStep : BMKRouteStep - -///路段入口经纬度 -@property (nonatomic, assign) CLLocationCoordinate2D entraceCoor; -///路段出口经纬度 -@property (nonatomic, assign) CLLocationCoordinate2D exitCoor; -///路段说明 -@property (nonatomic, strong) NSString* instructions; -///路段类型 -@property (nonatomic) BMKMassTransitType stepType; -///该路段交通工具信息(当stepType为公交地铁时,BMKBusVehicleInfo对象;stepType为大巴时,BMKCoachVehicleInfo对象;stepType为飞机时,BMKPlaneVehicleInfo对象;stepType为火车时,BMKTrainVehicleInfo对象;其它为nil) -@property (nonatomic, strong) BMKBaseVehicleInfo* vehicleInfo; - -@end - -///此类表示驾车路线中的一个路段 -@interface BMKDrivingStep : BMKRouteStep{ - int _direction; - BMKRouteNode* _entrace; - NSString* _entraceInstruction; - BMKRouteNode* _exit; - NSString* _exitInstruction; - NSString* _instruction; - int _numTurns; -} -///该路段起点方向值 -@property (nonatomic) int direction; -///路段入口信息 -@property (nonatomic, strong) BMKRouteNode* entrace; -///路段入口的指示信息 -@property (nonatomic, strong) NSString* entraceInstruction; -///路段出口信息 -@property (nonatomic, strong) BMKRouteNode* exit; -///路段出口指示信息 -@property (nonatomic, strong) NSString* exitInstruction; -///路段总体指示信息 -@property (nonatomic, strong) NSString* instruction; -///路段需要转弯数 -@property (nonatomic) int numTurns; -///路段是否有路况信息 -@property (nonatomic) BOOL hasTrafficsInfo; -///路段的路况信息,成员为NSNumber。0:无数据;1:畅通;2:缓慢;3:拥堵 -@property (nonatomic, strong) NSArray* traffics; - -@end - -///室内路线结点 -@interface BMKIndoorStepNode : NSObject - -///坐标 -@property (nonatomic, assign) CLLocationCoordinate2D coordinate; -///类型 -@property (nonatomic, assign) BMKIndoorStepNodeType type; -///描述 -@property (nonatomic, strong) NSString* desc; - -@end - -/// 此类表示室内路线的一个路段 -@interface BMKIndoorRouteStep : BMKRouteStep - -///入口信息 -@property (nonatomic, strong) BMKRouteNode* entrace; -///出口信息 -@property (nonatomic, strong) BMKRouteNode* exit; -///路段指示信息 -@property (nonatomic, strong) NSString* instructions; -///建筑物id -@property (nonatomic, strong) NSString* buildingid; -///室内楼层id -@property (nonatomic, strong) NSString* floorid; -///结点数组,成员类型为:BMKIndoorStepNode -@property (nonatomic, strong) NSArray* indoorStepNodes; - -@end - -///此类表示步行路线中的一个路段 -@interface BMKWalkingStep : BMKRouteStep{ - int _direction; - BMKRouteNode* _entrace; - NSString* _entraceInstruction; - BMKRouteNode* _exit; - NSString* _exitInstruction; - NSString* _instruction; -} -///该路段起点方向值 -@property (nonatomic) int direction; -///路段入口信息 -@property (nonatomic, strong) BMKRouteNode* entrace; -///获取该路段入口指示信息 -@property (nonatomic, strong) NSString* entraceInstruction; -///路段出口信息 -@property (nonatomic, strong) BMKRouteNode* exit; -///获取该路段出口指示信息 -@property (nonatomic, strong) NSString* exitInstruction; -///获取该路段指示信息 -@property (nonatomic, strong) NSString* instruction; -@end - -///此类表示骑行路线中的一个路段 -@interface BMKRidingStep : BMKRouteStep - -///该路段起点方向值 -@property (nonatomic) NSInteger direction; -///路段入口信息 -@property (nonatomic, strong) BMKRouteNode* entrace; -///获取该路段入口指示信息 -@property (nonatomic, strong) NSString* entraceInstruction; -///路段出口信息 -@property (nonatomic, strong) BMKRouteNode* exit; -///获取该路段出口指示信息 -@property (nonatomic, strong) NSString* exitInstruction; -///获取该路段指示信息 -@property (nonatomic, strong) NSString* instruction; - -@end - - -///此类表示路线数据结构的基类,表示一条路线,路线可能包括:路线规划中的换乘/驾车/步行路线 -///此类为路线数据结构的基类,一般关注其子类对象即可,无需直接生成该类对象 -@interface BMKRouteLine : NSObject{ - int _distance; - BMKTime* _duration; - BMKRouteNode* _starting; - BMKRouteNode* _terminal; - NSString* _title; - NSArray* _steps; -} -///路线长度 单位: 米 -@property (nonatomic) int distance; -///路线耗时 单位: 秒 -@property (nonatomic, strong) BMKTime* duration; -///路线起点信息 -@property (nonatomic, strong) BMKRouteNode* starting; -///路线终点信息 -@property (nonatomic, strong) BMKRouteNode* terminal; -///路线名称(预留字段,现为空) -@property (nonatomic, strong) NSString* title; -///路线中的所有路段,成员类型为BMKWalkingStep,BMKDrivingStep,BMKTransitStep,BMKRidingStep,BMKIndoorRouteStep,BMKMassTransitStep -@property (nonatomic, strong) NSArray* steps; -@end - -///此类表示一个换乘路线,换乘路线将根据既定策略调配多种交通工具 -@interface BMKTransitRouteLine : BMKRouteLine -@end -///此类表示一条公共交通路线 -@interface BMKMassTransitRouteLine : BMKRouteLine - -///路线花费 -@property (nonatomic, assign) CGFloat price; - -@end -///此类表示一个室内路线 -@interface BMKIndoorRouteLine : BMKRouteLine -@end -///此类表示一条驾车路线 -@interface BMKDrivingRouteLine : BMKRouteLine{ - bool _isSupportTraffic;//从2.7.0开始,废弃 - NSArray* _wayPoints; -} -///该路线所在区域是否含有交通流量信息,从2.7.0开始,废弃 -@property (nonatomic) bool isSupportTraffic; -///路线途经点列表,成员类型为BMKPlanNode -@property (nonatomic, strong) NSArray* wayPoints; -///路线红绿灯个数 -@property (nonatomic, assign) NSInteger lightNum; -///路线拥堵米数,发起请求时需设置参数 drivingRequestTrafficType = BMK_DRIVING_REQUEST_TRAFFICE_TYPE_PATH_AND_TRAFFICE 才有值 -@property (nonatomic, assign) NSInteger congestionMetres; -///路线预估打车费(元),负数表示无打车费信息 -@property (nonatomic, assign) NSInteger taxiFares; - -@end - -///此类表示一条步行路线 -@interface BMKWalkingRouteLine : BMKRouteLine -@end - -///此类表示一条骑行路线 -@interface BMKRidingRouteLine : BMKRouteLine -@end - -///路线搜索地址结果类.当输入的起点或终点有多个地点选择时,或者选定的城市没有此地点,但其它城市有(驾乘或步行),返回该类的实例 -@interface BMKSuggestAddrInfo : NSObject -{ - NSArray* _startPoiList; - NSArray* _endPoiList; - NSArray* _startCityList; - NSArray* _endCityList; - NSArray* _wayPointsPoiList; - NSArray* _wayPointsCityList; -} -///起点POI列表,成员类型为BMKPoiInfo -@property (nonatomic, strong) NSArray* startPoiList; -///起点城市列表,成员类型为BMKCityListInfo,如果输入的地点在本城市没有而在其它城市有,则返回其它城市的信息 -@property (nonatomic, strong) NSArray* startCityList; -///终点POI列表,成员类型为BMKPoiInfo -@property (nonatomic, strong) NSArray* endPoiList; -///终点城市列表,成员类型为BMKCityListInfo,如果输入的地点在本城市没有而在其它城市有,则返回其它城市的信息 -@property (nonatomic, strong) NSArray* endCityList; -///途经点POI列表,成员类型为NSArray -@property (nonatomic, strong) NSArray* wayPointPoiList; -///途经点城市列表,成员类型为NSArray,如果输入的地点在本城市没有而在其它城市有,则返回其它城市的信息 -@property (nonatomic, strong) NSArray* wayPointCityList; -@end - -///此类表示公共交通信息查询结果 -@interface BMKBusLineResult : NSObject{ - NSString* _busCompany; - NSString* _busLineName; - NSString* _uid; - NSString* _startTime; - NSString* _endTime; - int _isMonTicket; - NSArray* _busStations; - NSArray* _busSteps; -} -///公交公司名称 -@property (nonatomic, strong) NSString* busCompany; -///公交线路名称 -@property (nonatomic, strong) NSString* busLineName; -///公交线路方向 -@property (nonatomic, strong) NSString* busLineDirection; -///公交线路uid -@property (nonatomic, strong) NSString* uid; -///公交路线首班车时间 -@property (nonatomic, strong) NSString* startTime; -///公交路线末班车时间 -@property (nonatomic, strong) NSString* endTime; -///公交是线是否有月票 -@property (nonatomic) int isMonTicket; -///起步票价 -@property (nonatomic, assign) CGFloat basicPrice; -///全程票价 -@property (nonatomic, assign) CGFloat totalPrice; -///所有公交站点信息,成员类型为BMKBusStation -@property (nonatomic, strong) NSArray* busStations; -///公交路线分段信息,成员类型为BMKBusStep -@property (nonatomic, strong) NSArray* busSteps; -@end - -///此类表示步行路线结果 -@interface BMKWalkingRouteResult : NSObject{ - BMKTaxiInfo* _taxiInfo; - BMKSuggestAddrInfo* _suggestAddrResult; - NSArray* _routes; -} -///该路线打车信息 -@property (nonatomic, strong) BMKTaxiInfo* taxiInfo; -///返回起点或终点的地址信息结果 -@property (nonatomic, strong) BMKSuggestAddrInfo* suggestAddrResult; -///步行结果,现在只返回一条。成员类型为BMKWalkingRouteLine -@property (nonatomic, strong) NSArray* routes; - -@end - -///此类表示驾车路线结果 -@interface BMKDrivingRouteResult : NSObject{ - BMKTaxiInfo* _taxiInfo; - BMKSuggestAddrInfo* _suggestAddrResult; - NSArray* _routes; -} -///该路线打车信息 -@property (nonatomic, strong) BMKTaxiInfo* taxiInfo; -///返回起点或终点的地址信息结果 -@property (nonatomic, strong) BMKSuggestAddrInfo* suggestAddrResult; -///驾车结果,支持多路线。成员类型为BMKDrivingRouteLine -@property (nonatomic, strong) NSArray* routes; - -@end - -@interface BMKTransitRouteResult : NSObject{ - BMKTaxiInfo* _taxiInfo; - BMKSuggestAddrInfo* _suggestAddrResult; - NSArray* _routes; -} -///该路线打车信息 -@property (nonatomic, strong) BMKTaxiInfo* taxiInfo; -///返回起点或终点的地址信息结果 -@property (nonatomic, strong) BMKSuggestAddrInfo* suggestAddrResult; -///方案数组,成员类型为BMKTransitRouteLine -@property (nonatomic, strong) NSArray* routes; - -@end - -///此类表示公共交通路线结果 -@interface BMKMassTransitRouteResult : NSObject - -///返回起点或终点的地址信息结果 -@property (nonatomic, strong) BMKSuggestAddrInfo* suggestAddrResult; -///方案数组,成员类型为BMKMassTransitRouteLine -@property (nonatomic, strong) NSArray* routes; -///总方案数 -@property (nonatomic, assign) NSInteger totalRoutes; -///该路线打车信息(只有起终点是大陆地区且是同城的请求时才返回此字段, 否则此字段为nil) -@property (nonatomic, strong) BMKTaxiInfo* taxiInfo; - -@end - -///此类表示骑行路线结果 -@interface BMKRidingRouteResult : NSObject - -///返回起点或终点的地址信息结果 -@property (nonatomic, strong) BMKSuggestAddrInfo* suggestAddrResult; -///骑行路线结果,成员类型为BMKRidingRouteLine -@property (nonatomic, strong) NSArray* routes; - -@end - -/// 此类表示室内路线结果 -@interface BMKIndoorRouteResult : NSObject - -///方案数组,成员类型为BMKIndoorRouteLine -@property (nonatomic, strong) NSArray* routes; - -@end diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/Headers/BMKSearchBase.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/Headers/BMKSearchBase.h deleted file mode 100644 index c6d42f5..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/Headers/BMKSearchBase.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// BMKSearchBase.h -// SearchComponent -// -// Created by wzy on 15/9/9. -// Copyright © 2015年 baidu. All rights reserved. -// - -#ifndef BMKSearchBase_h -#define BMKSearchBase_h - -///检索服务基类 -@interface BMKSearchBase : NSObject - -@end - - -#endif /* BMKSearchBase_h */ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/Headers/BMKSearchComponent.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/Headers/BMKSearchComponent.h deleted file mode 100644 index 8cff2ed..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/Headers/BMKSearchComponent.h +++ /dev/null @@ -1,25 +0,0 @@ -// -// BMKSearchComponent.h -// SearchComponent -// -// Created by baidu on 14-3-10. -// Copyright (c) 2014年 baidu. All rights reserved. -// - -#import "BMKSearchVersion.h" -#import "BMKPoiSearchType.h" -#import "BMKGeocodeType.h" -#import "BMKRouteSearchType.h" -#import "BMKPoiSearchOption.h" -#import "BMKPoiSearch.h" -#import "BMKGeocodeSearch.h" -#import "BMKGeocodeSearchOption.h" -#import "BMKShareURLSearch.h" -#import "BMKShareUrlSearchOption.h" -#import "BMKSuggestionSearch.h" -#import "BMKSuggestionSearchOption.h" -#import "BMKBusLineSearch.h" -#import "BMKBusLineSearchOption.h" -#import "BMKRouteSearch.h" -#import "BMKRouteSearchOption.h" -#import "BMKDistrictSearch.h" \ No newline at end of file diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/Headers/BMKSearchVersion.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/Headers/BMKSearchVersion.h deleted file mode 100644 index b108eb2..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/Headers/BMKSearchVersion.h +++ /dev/null @@ -1,32 +0,0 @@ -// -// BMKSearchVersion.h -// SearchComponent -// -// Created by wzy on 15/9/9. -// Copyright © 2015年 baidu. All rights reserved. -// - -#ifndef BMKSearchVersion_h -#define BMKSearchVersion_h - -#import - -/** - *重要: - *base组件的版本和search组件的版本必须一致,否则不能正常使用 - */ - -/** - *获取当前地图API search组件 的版本号 - *当前search组件版本 : 3.3.0 - *return 返回当前API search组件 的版本号 - */ -UIKIT_EXTERN NSString* BMKGetMapApiSearchComponentVersion(); - -/** - *检查search组件的版本号是否和base组件的版本号一致 - *return 版本号一致返回YES - */ -UIKIT_EXTERN BOOL BMKCheckSearchComponentIsLegal(); - -#endif /* BMKSearchVersion_h */ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/Headers/BMKShareURLSearch.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/Headers/BMKShareURLSearch.h deleted file mode 100644 index c746fe1..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/Headers/BMKShareURLSearch.h +++ /dev/null @@ -1,82 +0,0 @@ -/* - * BMKShareUrlSearch.h - * BMapKit - * - * Copyright 2014 Baidu Inc. All rights reserved. - * - */ - -#import "BMKShareUrlSearchOption.h" -#import "BMKSearchBase.h" - -///分享URL结果类 -@interface BMKShareURLResult : NSObject -{ - NSString * _url; -} -///返回结果url -@property (nonatomic,strong) NSString* url; -@end - - -@protocol BMKShareURLSearchDelegate; -///短串搜索服务 -@interface BMKShareURLSearch : BMKSearchBase -/// 检索模块的Delegate,此处记得不用的时候需要置nil,否则影响内存的释放 -@property (nonatomic, weak) id delegate; - -/** - *获取poi详情短串分享url - *异步函数,返回结果在BMKShareUrlSearchDelegate的onGetPoiDetailShareURLResult通知 - *@param poiDetailShareUrlSearchOption poi详情短串分享检索信息类 - *@return 成功返回YES,否则返回NO - */ -- (BOOL)requestPoiDetailShareURL:(BMKPoiDetailShareURLOption *) poiDetailShareUrlSearchOption; - -/** - *获取反geo短串分享url - *异步函数,返回结果在BMKShareUrlSearchDelegate的onGetLocationShareURLResult通知 - *@param reverseGeoShareUrlSearchOption 反geo短串分享检索信息类 - *@return 成功返回YES,否则返回NO - */ -- (BOOL)requestLocationShareURL:(BMKLocationShareURLOption *)reverseGeoShareUrlSearchOption; - -/** - *获取路线规划短串分享url - *异步函数,返回结果在BMKShareUrlSearchDelegate的onGetRoutePlanShareURLResult通知 - *@param routePlanShareUrlSearchOption 取路线规划短串分享检索信息类 - *@return 成功返回YES,否则返回NO - */ -- (BOOL)requestRoutePlanShareURL:(BMKRoutePlanShareURLOption *)routePlanShareUrlSearchOption; - - -@end - -///搜索delegate,用于获取搜索结果 -@protocol BMKShareURLSearchDelegate -@optional -/** - *返回poi详情分享url - *@param searcher 搜索对象 - *@param result 返回结果 - *@param error 错误号,@see BMKSearchErrorCode - */ -- (void)onGetPoiDetailShareURLResult:(BMKShareURLSearch *)searcher result:(BMKShareURLResult *)result errorCode:(BMKSearchErrorCode)error; - -/** - *返回位置信息分享url - *@param searcher 搜索对象 - *@param result 返回结果 - *@param error 错误号,@see BMKSearchErrorCode - */ -- (void)onGetLocationShareURLResult:(BMKShareURLSearch *)searcher result:(BMKShareURLResult *)result errorCode:(BMKSearchErrorCode)error; - -/** - *返回路线规划分享url - *@param searcher 搜索对象 - *@param result 返回结果 - *@param error 错误号,@see BMKSearchErrorCode - */ -- (void)onGetRoutePlanShareURLResult:(BMKShareURLSearch *)searcher result:(BMKShareURLResult *)result errorCode:(BMKSearchErrorCode)error; - -@end \ No newline at end of file diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/Headers/BMKShareUrlSearchOption.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/Headers/BMKShareUrlSearchOption.h deleted file mode 100644 index bc67806..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/Headers/BMKShareUrlSearchOption.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * BMKShareUrlSearchOption.h - * BMapKit - * - * Copyright 2014 Baidu Inc. All rights reserved. - * - */ - -#import -/// poi详情短串分享检索信息类 -@interface BMKPoiDetailShareURLOption : NSObject -{ - NSString *_uid; -} -///poi的uid -@property (nonatomic, strong) NSString *uid; - -@end - -///反geo短串分享检索信息类 -@interface BMKLocationShareURLOption : NSObject { - NSString *_name; - NSString *_snippet; - CLLocationCoordinate2D _location; -} -///名称 -@property (nonatomic, strong) NSString *name; -///通过短URL调起客户端时作为附加信息显示在名称下面 -@property (nonatomic, strong) NSString *snippet; -///经纬度 -@property (nonatomic, assign) CLLocationCoordinate2D location; -@end - - -///路线规划短串分享 -typedef enum { - BMK_ROUTE_PLAN_SHARE_URL_TYPE_DRIVE = 0, //驾车路线规划短串分享 - BMK_ROUTE_PLAN_SHARE_URL_TYPE_WALK = 1, //步行路线规划短串分享 - BMK_ROUTE_PLAN_SHARE_URL_TYPE_RIDE = 2, //骑行路线规划短串分享 - BMK_ROUTE_PLAN_SHARE_URL_TYPE_TRANSIT = 3, //公交路线规划短串分享 -}BMKRoutePlanShareURLType; - -///路线规划短串分享检索信息类 -@interface BMKRoutePlanShareURLOption : NSObject - -///路线规划短串分享类型 -@property (nonatomic, assign) BMKRoutePlanShareURLType routePlanType; -///起点,可通过关键字、坐标两种方式指定,使用关键字时必须指定from.cityID -@property (nonatomic, strong) BMKPlanNode *from; -///终点,可通过关键字、坐标两种方式指定,使用关键字时必须指定to.cityID -@property (nonatomic, strong) BMKPlanNode *to; -///cityID,当进行公交路线规划短串分享且起终点通过关键字指定时,必须指定 -@property (nonatomic, assign) NSUInteger cityID; -///公交路线规划短串分享时使用,分享的是第几条线路 -@property (nonatomic, assign) NSUInteger routeIndex; - -@end \ No newline at end of file diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/Headers/BMKSuggestionSearch.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/Headers/BMKSuggestionSearch.h deleted file mode 100644 index 441c7a6..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/Headers/BMKSuggestionSearch.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - * BMKSuggestionSearch.h - * BMapKit - * - * Copyright 2014 Baidu Inc. All rights reserved. - * - */ - -#import "BMKSuggestionSearchOption.h" -#import -#import "BMKSearchBase.h" - -///Suggestion结果类 -@interface BMKSuggestionResult : BMKSearchBase -{ - NSArray* _keyList; - NSArray* _cityList; - NSArray* _districtList; -} -///key列表,成员是NSString -@property (nonatomic, strong) NSArray* keyList; -///city列表,成员是NSString -@property (nonatomic, strong) NSArray* cityList; -///district列表,成员是NSString -@property (nonatomic, strong) NSArray* districtList; -///poiId列表,成员是NSString -@property (nonatomic, strong) NSArray* poiIdList; -///pt列表,成员是:封装成NSValue的CLLocationCoordinate2D -@property (nonatomic, strong) NSArray* ptList; - -@end - -@protocol BMKSuggestionSearchDelegate; -///sug搜索服务 -@interface BMKSuggestionSearch : BMKSearchBase -/// 检索模块的Delegate,此处记得不用的时候需要置nil,否则影响内存的释放 -@property (nonatomic, weak) id delegate; - -/** - *搜索建议检索 - *@param suggestionSearchOption sug检索信息类 - *异步函数,返回结果在BMKSuggestionSearchDelegate的onGetSuggestionResult通知 - *@return 成功返回YES,否则返回NO - */ -- (BOOL)suggestionSearch:(BMKSuggestionSearchOption*)suggestionSearchOption; - -@end - -///搜索delegate,用于获取搜索结果 -@protocol BMKSuggestionSearchDelegate -@optional -/** - *返回suggestion搜索结果 - *@param searcher 搜索对象 - *@param result 搜索结果 - *@param error 错误号,@see BMKSearchErrorCode - */ -- (void)onGetSuggestionResult:(BMKSuggestionSearch*)searcher result:(BMKSuggestionResult*)result errorCode:(BMKSearchErrorCode)error; - - -@end - - - - diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/Headers/BMKSuggestionSearchOption.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/Headers/BMKSuggestionSearchOption.h deleted file mode 100644 index ff2cfc5..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/Headers/BMKSuggestionSearchOption.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * BMKSuggestionSearchOption.h - * BMapKit - * - * Copyright 2014 Baidu Inc. All rights reserved. - * - */ - -#import -/// sug检索信息类 -@interface BMKSuggestionSearchOption : NSObject -{ - NSString *_keyword; - NSString *_cityname; - -} -///搜索关键字 -@property (nonatomic, strong) NSString *keyword; -///城市名 -@property (nonatomic, strong) NSString *cityname; -///是否只返回指定城市检索结果(默认:NO)(提示:海外区域暂不支持设置cityLimit) -@property (nonatomic, assign) BOOL cityLimit; - -@end - - diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/readme.txt b/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/readme.txt deleted file mode 100644 index 17f6d14..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Search.framework/readme.txt +++ /dev/null @@ -1,67 +0,0 @@ -检索功能:包括POI检索,公交信息查询,路线规划,地理编码/反地理编码,在线建议查询,短串分享等; - - - - --------------------------------------------------------------------------------------- - -iOS 地图 SDK v3.3.0是适用于iOS系统移动设备的矢量地图开发包 - --------------------------------------------------------------------------------------- - -地图SDK功能介绍(全功能开发包): - -地图:提供地图展示和地图操作功能; - -POI检索:支持周边检索、区域检索和城市内兴趣点检索; - -地理编码:提供经纬度和地址信息相互转化的功能接口; - -线路规划:支持公交、驾车、步行三种方式的线路规划; - -覆盖物图层:支持在地图上添加覆盖物(标注、几何图形、热力图、地形图图层等),展示更丰富的LBS信息; - -定位:获取当前位置信息,并在地图上展示(支持普通、跟随、罗盘三种模式); - -离线地图:使用离线地图可节省用户流量,提供更好的地图展示效果; - -调启百度地图:利用SDK接口,直接在本地打开百度地图客户端或WebApp,实现地图功能; - -周边雷达:利用周边雷达功能,开发者可在App内低成本、快速实现查找周边使用相同App的用户位置的功能; - -LBS云检索:支持查询存储在LBS云内的自有数据; - -特色功能:提供短串分享、Place详情检索、热力图等特色功能,帮助开发者搭建功能更加强大的应用; - - --------------------------------------------------------------------------------------- - - 注:自v3.2.0起,百度地图iOS SDK全面支持HTTPS,需要广大开发者导入第三方openssl静态库:libssl.a和libcrypto.a(存放于thirdlib目录下)。 - - 新 版 提 示 】 -【 注 意 】 -1、自v3.2.0起,百度地图iOS SDK全面支持HTTPS,需要广大开发者导入第三方openssl静态库:libssl.a和libcrypto.a(存放于thirdlib目录下) -添加方法:在 TARGETS->Build Phases-> Link Binary With Libaries中点击“+”按钮,在弹出的窗口中点击“Add Other”按钮,选择libssl.a和libcrypto.a添加到工程中 。 - -2、支持CocoaPods导入 -pod setup //更新CocoPods的本地库 -pod search BaiduMapKit //下载最新地图SDK - -【 新 增 】 -[ 基 础 地 图 ] -3D地图下,增加显示天空效果,无需设置 - -[ 工 具 ] -1.全面支持GCJ02坐标输入/输出,全局设置方法如下: -[BMKMapManager setCoordinateTypeUsedInBaiduMapSDK:BMK_COORDTYPE_COMMON];//默认为BD09LL坐标,且此方法仅在国内生效,国外均为WGS84坐标 - -2. 新增调启步行AR导航接口:openBaiduMapwalkARNavigation - -[ LBS云] -云检索中,keywords 改为非必填项 - -【 优 化 】 -优化个性化地图元素分类 - -【 修 复 】 -少部分地铁线及室内图无法显示问题(v3.2.0引入的问题)。 未下载全国离线基础包时,离线状态下全国(球)地图显示异常。 \ No newline at end of file diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Utils.framework/BaiduMapAPI_Utils b/Ifish/BMKMap3.3.0/BaiduMapAPI_Utils.framework/BaiduMapAPI_Utils deleted file mode 100644 index 5b092e7..0000000 Binary files a/Ifish/BMKMap3.3.0/BaiduMapAPI_Utils.framework/BaiduMapAPI_Utils and /dev/null differ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Utils.framework/Headers/BMKFavPoiInfo.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Utils.framework/Headers/BMKFavPoiInfo.h deleted file mode 100644 index 7f662ca..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Utils.framework/Headers/BMKFavPoiInfo.h +++ /dev/null @@ -1,36 +0,0 @@ -// -// BMKFavPoiInfo.h -// UtilsComponent -// -// Created by wzy on 15/4/8. -// Copyright (c) 2015年 baidu. All rights reserved. -// - -#ifndef UtilsComponent_BMKFavPoiInfo_h -#define UtilsComponent_BMKFavPoiInfo_h - -#import -#import - -///收藏点信息类 -@interface BMKFavPoiInfo : NSObject - -///数据ID,自动生成 -@property (nonatomic, strong) NSString* favId; -///poi名称(添加或更新时,必须有) -@property (nonatomic, strong) NSString* poiName; -///poi点Uid -@property (nonatomic, strong) NSString* poiUid; -///poi坐标(添加或更新时,必须有) -@property (nonatomic, assign) CLLocationCoordinate2D pt; -///poi地址 -@property (nonatomic, strong) NSString* address; -///城市名称 -@property (nonatomic, strong) NSString* cityName; -///添加或最后修改时间戳 -@property (nonatomic, assign) NSUInteger timeStamp; - - -@end - -#endif diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Utils.framework/Headers/BMKFavPoiManager.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Utils.framework/Headers/BMKFavPoiManager.h deleted file mode 100644 index ee1a620..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Utils.framework/Headers/BMKFavPoiManager.h +++ /dev/null @@ -1,60 +0,0 @@ -// -// BMKFavPoiManager.h -// UtilsComponent -// -// Created by wzy on 15/4/9. -// Copyright (c) 2015年 baidu. All rights reserved. -// - -#ifndef UtilsComponent_BMKFavPoiManager_h -#define UtilsComponent_BMKFavPoiManager_h - -#import "BMKFavPoiInfo.h" - -///收藏点管理类 -@interface BMKFavPoiManager : NSObject - -/** - * 添加一个poi点 - * @param favPoiInfo 点信息,in/out,输出包含favId和添加时间 - * @return -2:收藏夹已满,-1:名称为空,0:添加失败,1:添加成功 - */ -- (NSInteger)addFavPoi:(BMKFavPoiInfo*) favPoiInfo; - -/** - * 获取一个收藏点信息 - * @param favId 添加时返回的favId,也可通过getAllFavPois获取的信息中BMKFavPoiInfo的属性favId - * @return 收藏点信息,没有返回nil - */ -- (BMKFavPoiInfo*)getFavPoi:(NSString*) favId; - -/** - * 获取所有收藏点信息 - * @return 点信息数组 - */ -- (NSArray*)getAllFavPois; - -/** - * 更新一个收藏点 - * @param favId 添加时返回的favId,也可通过getAllFavPois获取的信息中BMKFavPoiInfo的属性favId - * @param favPoiInfo 点信息,in/out,输出包含修改时间 - * @return 成功返回YES,失败返回NO - */ -- (BOOL)updateFavPoi:(NSString*) favId favPoiInfo:(BMKFavPoiInfo*) favPoiInfo; - -/** - * 删除一个收藏点 - * @param favId 添加时返回的favId,也可通过getAllFavPois获取的信息中BMKFavPoiInfo的属性favId - * @return 成功返回YES,失败返回NO - */ -- (BOOL)deleteFavPoi:(NSString*) favId; - -/** - * 清空所有收藏点 - * @return 成功返回YES,失败返回NO - */ -- (BOOL)clearAllFavPois; - -@end - -#endif diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Utils.framework/Headers/BMKGeometry.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Utils.framework/Headers/BMKGeometry.h deleted file mode 100644 index d9be561..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Utils.framework/Headers/BMKGeometry.h +++ /dev/null @@ -1,420 +0,0 @@ -/* BMKGeometry.h - * BMapKit - * - * Copyright 2011 Baidu Inc. All rights reserved. - * - */ - -#import -#import - - -/** - *构造BMKCoordinateSpan对象 - *@param latitudeDelta 纬度方向的变化量 - *@param longitudeDelta 经度方向的变化量 - *@return 根据指定参数生成的BMKCoordinateSpan对象 - */ -UIKIT_STATIC_INLINE BMKCoordinateSpan BMKCoordinateSpanMake(CLLocationDegrees latitudeDelta, CLLocationDegrees longitudeDelta) -{ - BMKCoordinateSpan span; - span.latitudeDelta = latitudeDelta; - span.longitudeDelta = longitudeDelta; - return span; -} - -/** - *构造BMKCoordinateRegion对象 - *@param centerCoordinate 中心点经纬度坐标 - *@param span 经纬度的范围 - *@return 根据指定参数生成的BMKCoordinateRegion对象 - */ -UIKIT_STATIC_INLINE BMKCoordinateRegion BMKCoordinateRegionMake(CLLocationCoordinate2D centerCoordinate, BMKCoordinateSpan span) -{ - BMKCoordinateRegion region; - region.center = centerCoordinate; - region.span = span; - return region; -} - -/** - *根据中心点和距离生成BMKCoordinateRegion - *@param centerCoordinate 中心点坐标 - *@param latitudinalMeters 纬度方向的距离范围,单位:米 - *@param longitudinalMeters 经度方向的距离范围,单位:米 - *@return 根据中心点和距离生成BMKCoordinateRegion - */ -UIKIT_EXTERN BMKCoordinateRegion BMKCoordinateRegionMakeWithDistance(CLLocationCoordinate2D centerCoordinate, CLLocationDistance latitudinalMeters, CLLocationDistance longitudinalMeters); - -/** - *将经纬度坐标转换为投影后的直角地理坐标 - *@param coordinate 待转换的经纬度坐标 - *@return 转换后的直角地理坐标 - */ -UIKIT_EXTERN BMKMapPoint BMKMapPointForCoordinate(CLLocationCoordinate2D coordinate); - -/** - *将投影后的直角地理坐标转换为经纬度坐标 - *@param mapPoint 投影后的直角地理坐标 - *@return 转换后的经纬度坐标 - */ -UIKIT_EXTERN CLLocationCoordinate2D BMKCoordinateForMapPoint(BMKMapPoint mapPoint); - -/** - *计算在指定纬度下一个BMKMapPoint单位对应的米数 - *@param latitude 指定的纬度 - *@return 在指定纬度下一个BMKMapPoint单位对应的米数 - */ -UIKIT_EXTERN CLLocationDistance BMKMetersPerMapPointAtLatitude(CLLocationDegrees latitude); - -/** - *计算在指定纬度下一米对应的MKMapPoint的单位数 - *@param latitude 指定的纬度 - *@return 在指定纬度下一米对应的MKMapPoint的单位数 - */ -UIKIT_EXTERN double BMKMapPointsPerMeterAtLatitude(CLLocationDegrees latitude); - -/** - *计算指定两点之间的距离 - *@param a 第一个坐标点 - *@param b 第二个坐标点 - *@return 两点之间的距离,单位:米 - */ -UIKIT_EXTERN CLLocationDistance BMKMetersBetweenMapPoints(BMKMapPoint a, BMKMapPoint b); - -/** - *构造BMKMapPoint对象 - *@param x 水平方向的坐标值 - *@param y 垂直方向的坐标值 - *@return 根据指定参数生成的BMKMapPoint对象 - */ -UIKIT_STATIC_INLINE BMKMapPoint BMKMapPointMake(double x, double y) { - return (BMKMapPoint){x, y}; -} - -/** - *构造BMKMapSize对象 - *@param width 宽度 - *@param height 高度 - *@return 根据指定参数生成的BMKMapSize对象 - */ -UIKIT_STATIC_INLINE BMKMapSize BMKMapSizeMake(double width, double height) { - return (BMKMapSize){width, height}; -} - -/** - *构造BMKMapRect对象 - *@param x 矩形左上顶点的x坐标值 - *@param y 矩形左上顶点的y坐标值 - *@param width 矩形宽度 - *@param height 矩形高度 - *@return 根据指定参数生成的BMKMapRect对象 - */ -UIKIT_STATIC_INLINE BMKMapRect BMKMapRectMake(double x, double y, double width, double height) { - return (BMKMapRect){ BMKMapPointMake(x, y), BMKMapSizeMake(width, height)}; -} - -/** - *获取指定矩形的x轴坐标最小值 - *@param rect 指定的矩形 - *@return x轴坐标最小值 - */ -UIKIT_STATIC_INLINE double BMKMapRectGetMinX(BMKMapRect rect) { - return rect.origin.x; -} - -/** - *获取指定矩形的y轴坐标最小值 - *@param rect 指定的矩形 - *@return y轴坐标最小值 - */ -UIKIT_STATIC_INLINE double BMKMapRectGetMinY(BMKMapRect rect) { - return rect.origin.y; -} - -/** - *获取指定矩形在x轴中点的坐标值 - *@param rect 指定的矩形 - *@return x轴中点的坐标值 - */ -UIKIT_STATIC_INLINE double BMKMapRectGetMidX(BMKMapRect rect) { - return rect.origin.x + rect.size.width / 2.0; -} - -/** - *获取指定矩形在y轴中点的坐标值 - *@param rect 指定的矩形 - *@return y轴中点的坐标值 - */ -UIKIT_STATIC_INLINE double BMKMapRectGetMidY(BMKMapRect rect) { - return rect.origin.y + rect.size.height / 2.0; -} - -/** - *获取指定矩形的x轴坐标最大值 - *@param rect 指定的矩形 - *@return x轴坐标最大值 - */ -UIKIT_STATIC_INLINE double BMKMapRectGetMaxX(BMKMapRect rect) { - return rect.origin.x + rect.size.width; -} - -/** - *获取指定矩形的y轴坐标最大值 - *@param rect 指定的矩形 - *@return y轴坐标最大值 - */ -UIKIT_STATIC_INLINE double BMKMapRectGetMaxY(BMKMapRect rect) { - return rect.origin.y + rect.size.height; -} - -/** - *获取指定矩形的宽度 - *@param rect 指定的矩形 - *@return 指定矩形的宽度 - */ -UIKIT_STATIC_INLINE double BMKMapRectGetWidth(BMKMapRect rect) { - return rect.size.width; -} - -/** - *获取指定矩形的高度 - *@param rect 指定的矩形 - *@return 指定矩形的高度 - */ -UIKIT_STATIC_INLINE double BMKMapRectGetHeight(BMKMapRect rect) { - return rect.size.height; -} - -/** - *判断两个点是否相等 - *@param point1 第一个点 - *@param point2 第二个点 - *@return 如果两点相等,返回YES,否则返回NO - */ -UIKIT_STATIC_INLINE BOOL BMKMapPointEqualToPoint(BMKMapPoint point1, BMKMapPoint point2) { - return point1.x == point2.x && point1.y == point2.y; -} - -/** - *判断两个矩形范围是否相等 - *@param size1 范围1 - *@param size2 范围2 - *@return 如果相等,返回YES,否则返回NO - */ -UIKIT_STATIC_INLINE BOOL BMKMapSizeEqualToSize(BMKMapSize size1, BMKMapSize size2) { - return size1.width == size2.width && size1.height == size2.height; -} - -/** - *判断两个矩形是否相等 - *@param rect1 矩形1 - *@param rect2 矩形2 - *@return 如果相等,返回YES,否则返回NO - */ -UIKIT_STATIC_INLINE BOOL BMKMapRectEqualToRect(BMKMapRect rect1, BMKMapRect rect2) { - return - BMKMapPointEqualToPoint(rect1.origin, rect2.origin) && - BMKMapSizeEqualToSize(rect1.size, rect2.size); -} - -/** - *判断指定矩形是否为NULL - *@param rect 指定矩形 - *@return 如果矩形为NULL,返回YES,否则返回NO - */ -UIKIT_STATIC_INLINE BOOL BMKMapRectIsNull(BMKMapRect rect) { - return isinf(rect.origin.x) || isinf(rect.origin.y); -} - -/** - *判断一个矩形是否为空矩形 - *@param rect 指定矩形 - *@return 如果矩形为空矩形,返回YES,否则返回NO - */ -UIKIT_STATIC_INLINE BOOL BMKMapRectIsEmpty(BMKMapRect rect) { - return BMKMapRectIsNull(rect) || (rect.size.width == 0.0 && rect.size.height == 0.0); -} - -/** - *将BMKMapPoint格式化为字符串 - *@param point 指定的标点 - *@return 返回转换后的字符串 - */ -UIKIT_STATIC_INLINE NSString *BMKStringFromMapPoint(BMKMapPoint point) { - return [NSString stringWithFormat:@"{%.1f, %.1f}", point.x, point.y]; -} - -/** - *将BMKMapSize格式化为字符串 - *@param size 指定的size - *@return 返回转换后的字符串 - */ -UIKIT_STATIC_INLINE NSString *BMKStringFromMapSize(BMKMapSize size) { - return [NSString stringWithFormat:@"{%.1f, %.1f}", size.width, size.height]; -} - -/** - *将BMKMapRect格式化为字符串 - *@param rect 指定的rect - *@return 返回转换后的字符串 - */ -UIKIT_STATIC_INLINE NSString *BMKStringFromMapRect(BMKMapRect rect) { - return [NSString stringWithFormat:@"{%@, %@}", BMKStringFromMapPoint(rect.origin), BMKStringFromMapSize(rect.size)]; -} - -/** - *计算两个矩形的并集 - *@param rect1 矩形1 - *@param rect2 矩形2 - *@return 两个矩形的并集 - */ -UIKIT_EXTERN BMKMapRect BMKMapRectUnion(BMKMapRect rect1, BMKMapRect rect2); - -/** - *计算两个矩形的交集 - *@param rect1 矩形1 - *@param rect2 矩形2 - *@return 两个矩形的交集 - */ -UIKIT_EXTERN BMKMapRect BMKMapRectIntersection(BMKMapRect rect1, BMKMapRect rect2); - -/** - *将矩形向内缩小dx,dy大小 - *@param rect 指定的矩形 - *@param dx x轴的变化量 - *@param dy y轴的变化量 - *@return 调整后的矩形 - */ -UIKIT_EXTERN BMKMapRect BMKMapRectInset(BMKMapRect rect, double dx, double dy); - -/** - *将矩形原点偏移指定大小 - *@param rect 指定的矩形 - *@param dx x轴的偏移量 - *@param dy y轴的偏移量 - *@return 调整后的矩形 - */ -UIKIT_EXTERN BMKMapRect BMKMapRectOffset(BMKMapRect rect, double dx, double dy); - -/** - *矩形分割,将一个矩形分割为两个矩形 - *@param rect 待分割的矩形 - *@param slice 指针,用来保存分割后被移除的矩形 - *@param remainder 指针,用来保存分割后剩下的矩形 - *@param amount 指定分割的大小,如果设置为负数,则将自动调整为0 - *@param edge 用来指定要从那条边开始分割 - */ -UIKIT_EXTERN void BMKMapRectDivide(BMKMapRect rect, BMKMapRect *slice, BMKMapRect *remainder, double amount, CGRectEdge edge); - -/** - *判断指定点是否在某矩形内 - *@param rect 指定的矩形 - *@param point 指定的点 - *@return 如果包含,返回YES,否则,返回NO - */ -UIKIT_EXTERN BOOL BMKMapRectContainsPoint(BMKMapRect rect, BMKMapPoint point); - -/** - *判断矩形rect1是否包含矩形rect2 - *@param rect1 矩形1 - *@param rect2 矩形2 - *@return 如果包含,返回YES,否则,返回NO - */ -UIKIT_EXTERN BOOL BMKMapRectContainsRect(BMKMapRect rect1, BMKMapRect rect2); - -/** - *判断两矩形是否相交 - *@param rect1 矩形1 - *@param rect2 矩形2 - *@return 如果相交,返回YES,否则,返回NO - */ -UIKIT_EXTERN BOOL BMKMapRectIntersectsRect(BMKMapRect rect1, BMKMapRect rect2); - -/** - *将投影后的直角坐标矩形转换为泳经纬度表示的范围 - *@param rect 待转换的直角坐标矩形 - *@return 转换后的经纬度范围 - */ -UIKIT_EXTERN BMKCoordinateRegion BMKCoordinateRegionForMapRect(BMKMapRect rect); - -/** - *判断指定的直角坐标矩形是否跨越了180度经线 - *@param rect 待判断的矩形 - *@return 如果跨越,返回YES,否则返回NO - */ -UIKIT_EXTERN BOOL BMKMapRectSpans180thMeridian(BMKMapRect rect); - -/** - *对于跨越了180经线的矩形,本函数将世界之外的部分进行分割,并将分割下来的矩形转换到地球对面,例如将-185度经线对应的区域转换到5度经线对应的区域,并将转换后的矩形返回 - *@param rect 待处理的矩形 - *@return 返回转换后的矩形 - */ -UIKIT_EXTERN BMKMapRect BMKMapRectRemainder(BMKMapRect rect); - -/** - *判断点是否在圆内 - *@param point 待判断的平面坐标点 - *@param center 目标圆形的中心点平面坐标 - *@param radius 目标圆形的半径,单位m - *@return 如果在内,返回YES,否则返回NO - */ -UIKIT_EXTERN BOOL BMKCircleContainsPoint(BMKMapPoint point, BMKMapPoint center, double radius); - -/** - *判断点是否在圆内 - *@param point 待判断的经纬度坐标点 - *@param center 目标圆形的中心点经纬度坐标 - *@param radius 目标圆形的半径,单位m - *@return 如果在内,返回YES,否则返回NO - */ -UIKIT_EXTERN BOOL BMKCircleContainsCoordinate(CLLocationCoordinate2D point, CLLocationCoordinate2D center, double radius); -/** - *判断点是否在多边形内 - *@param point 待判断的平面坐标点 - *@param polygon 目标多边形的顶点数组 - *@param count 目标多边形顶点数组元素个数 - *@return 如果在内,返回YES,否则返回NO - */ -UIKIT_EXTERN BOOL BMKPolygonContainsPoint(BMKMapPoint point, BMKMapPoint *polygon, NSUInteger count); - -/** - *判断点是否在多边形内 - *@param point 待判断的经纬度点 - *@param polygon 目标多边形的顶点数组 - *@param count 目标多边形顶点数组元素个数 - *@return 如果在内,返回YES,否则返回NO - */ -UIKIT_EXTERN BOOL BMKPolygonContainsCoordinate(CLLocationCoordinate2D point, CLLocationCoordinate2D *polygon, NSUInteger count); - -/** - *获取折线外某点到这线上距离最近的点 - *@param point 待判断的经纬度点 - *@param polyline 目标折线的顶点数组 - *@param count 目标折线顶点数组元素个数 - *@return 返回折线上的点(距离point最近) - */ -UIKIT_EXTERN BMKMapPoint BMKGetNearestMapPointFromPolyline(BMKMapPoint point, BMKMapPoint* polyline, NSUInteger count); - -/** - *计算地理矩形区域的面积 - *@param leftTop 左上角经纬度坐标点 - *@param rightBottom 右下角经纬度坐标点 - *@return 返回区域面积,单位:平方米 - */ -UIKIT_EXTERN double BMKAreaBetweenCoordinates(CLLocationCoordinate2D leftTop, CLLocationCoordinate2D rightBottom); - -/** - *坐标转换函数,从原始GPS坐标,mapbar坐标,google坐标,51地图坐标,mapabc坐标转换为百度坐标(51地图坐标需要显出10000) - *@param coordinate 待转换的坐标 - *@param type 待转换的坐标系类型,GPS为原始GPS坐标,COMMON为google坐标,51地图坐标,mapabc坐标 - *@return 返回的NSDictionry中包含“x”,“y”字段,各自对应经过base64加密之后的x,y坐标 - */ -UIKIT_EXTERN NSDictionary* BMKConvertBaiduCoorFrom(CLLocationCoordinate2D coordinate,BMK_COORD_TYPE type); -/** - *base64加密后的坐标字典解密函数 - *@param dictionary 带解密的NSDictionry,该NSDictionry中应包含“x”,“y”字段,各自对应经过base64加密之后的x,y坐标 - *@return 解密之后的坐标 - */ -UIKIT_EXTERN CLLocationCoordinate2D BMKCoorDictionaryDecode(NSDictionary* dictionary); - diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Utils.framework/Headers/BMKNavigation.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Utils.framework/Headers/BMKNavigation.h deleted file mode 100644 index 5c45d21..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Utils.framework/Headers/BMKNavigation.h +++ /dev/null @@ -1,73 +0,0 @@ -/* - * BMKNavigation.h - * BMapKit - * - * Copyright 2011 Baidu Inc. All rights reserved. - * - */ -#import -#import -//定义调起导航的两种类型 -//注:自2.8.0开始废弃,只支持调起客户端导航,在调起客户端导航时,才会调起web导航 -typedef enum -{ - BMK_NAVI_TYPE_NATIVE = 0,//客户端导航 - BMK_NAVI_TYPE_WEB,//web导航 -} BMK_NAVI_TYPE; - -///此类管理调起导航时传入的参数 -@interface BMKNaviPara : NSObject -{ - BMKPlanNode* _startPoint; - BMKPlanNode* _endPoint; - BMK_NAVI_TYPE _naviType; - NSString* _appScheme; - NSString* _appName; -} -///起点,必须包含经纬度坐标(调起地图客户端时设置起点无效,以“我的位置”为起点) -@property (nonatomic, strong) BMKPlanNode* startPoint; -///终点,必须包含经纬度坐标 -@property (nonatomic, strong) BMKPlanNode* endPoint; -///导航类型 注:自2.8.0开始废弃,只支持调起客户端导航,在调起客户端导航时,才会调起web导航 -@property (nonatomic, assign) BMK_NAVI_TYPE naviType __deprecated_msg("自2.8.0开始废弃"); -///应用返回scheme -@property (nonatomic, strong) NSString* appScheme; -///应用名称 -@property (nonatomic, strong) NSString* appName; -///调起百度地图客户端驾车导航失败后(步行、骑行导航设置该参数无效),是否支持调起web地图,默认:YES -@property (nonatomic, assign) BOOL isSupportWeb; - -@end - -///调起百度地图 -- 导航(驾车、步行、骑行) -@interface BMKNavigation : NSObject - -/** -*调起百度地图客户端驾车导航页面 -*@param para 调起驾车导航时传入得参数 -*/ -+ (BMKOpenErrorCode)openBaiduMapNavigation:(BMKNaviPara*)para; - -/** - *调起百度地图客户端步行导航页面(不支持调起web地图) - *客户端v8.8以后支持 - *@param para 调起步行导航时传入参数 - */ -+ (BMKOpenErrorCode)openBaiduMapWalkNavigation:(BMKNaviPara*)para; - -/** - *调起百度地图客户端骑行导航页面(不支持调起web地图) - *客户端v8.8以后支持 - *@param para 调起骑行导航时传入参数 - */ -+ (BMKOpenErrorCode)openBaiduMapRideNavigation:(BMKNaviPara*)para; -/** - *调起百度地图AR步行导航 - *百度地图客户端v9.7.5以后支持AR步行导航,低于此版本,默认调用步行导航;注:客户端版本低于8.6.9,不支持步行导航。 - *@param para 调起AR步行导航时传入参数 - */ -+ (BMKOpenErrorCode)openBaiduMapwalkARNavigation:(BMKNaviPara*)para; - -@end - - diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Utils.framework/Headers/BMKOpenOption.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Utils.framework/Headers/BMKOpenOption.h deleted file mode 100644 index d1bc05f..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Utils.framework/Headers/BMKOpenOption.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// BMKOpenOption.h -// UtilsComponent -// -// Created by wzy on 15/3/26. -// Copyright (c) 2015年 baidu. All rights reserved. -// - -#ifndef UtilsComponent_BMKOpenOption_h -#define UtilsComponent_BMKOpenOption_h - -///调起百度地图参数基类 -@interface BMKOpenOption : NSObject - -///应用返回scheme,用于调起后返回,没有不能返回 -@property (nonatomic, strong) NSString* appScheme; -///调起百度地图客户端失败后,是否支持调起web地图,默认:YES -@property (nonatomic, assign) BOOL isSupportWeb; - -@end - -#endif - diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Utils.framework/Headers/BMKOpenPanorama.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Utils.framework/Headers/BMKOpenPanorama.h deleted file mode 100644 index dba8a0b..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Utils.framework/Headers/BMKOpenPanorama.h +++ /dev/null @@ -1,46 +0,0 @@ -// -// BMKOpenPanorama.h -// UtilsComponent -// -// Created by wzy on 16/5/12. -// Copyright © 2016年 baidu. All rights reserved. -// - -#ifndef BMKOpenPanorama_h -#define BMKOpenPanorama_h - -#import -#import "BMKOpenOption.h" - -@protocol BMKOpenPanoramaDelegate; - -///调起百度地图全景参数类 -@interface BMKOpenPanoramaOption : BMKOpenOption - -///poi的uid -@property (nonatomic, strong) NSString* poiUid; - -@end - -///调起百度地图 -- 全景 -@interface BMKOpenPanorama : NSObject - -@property (nonatomic, weak) id delegate; - -/** - * 调起百度地图全景页面 - * 异步,调起结果在BMKOpenPanoramaDelegate的onGetOpenPanoramaStatus:通知 - *@param option 调起百度地图全景参数类(BMKOpenPanoramaOption) - */ -- (void)openBaiduMapPanorama:(BMKOpenPanoramaOption *) option; - -@end - -///调起百度地图全景delegate,用于获取调起状态 -@protocol BMKOpenPanoramaDelegate - -- (void)onGetOpenPanoramaStatus:(BMKOpenErrorCode) ecode; - -@end - -#endif /* BMKOpenPanorama_h */ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Utils.framework/Headers/BMKOpenPoi.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Utils.framework/Headers/BMKOpenPoi.h deleted file mode 100644 index ea9c67f..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Utils.framework/Headers/BMKOpenPoi.h +++ /dev/null @@ -1,37 +0,0 @@ -// -// BMKOpenPoi.h -// UtilsComponent -// -// Created by wzy on 15/3/26. -// Copyright (c) 2015年 baidu. All rights reserved. -// - -#ifndef UtilsComponent_BMKOpenPoi_h -#define UtilsComponent_BMKOpenPoi_h - -#import "BMKOpenPoiOption.h" -#import - -///调起百度地图 -- poi -///注:从iphone百度地图 8.2.0版本开始支持 -@interface BMKOpenPoi : NSObject - -/** - * 调起百度地图poi详情页面 - * 注:从iphone百度地图 8.2.0版本开始支持 - *@param option poi详情参数类(BMKOpenPoiDetailOption) - *@return 调起结果 - */ -+ (BMKOpenErrorCode)openBaiduMapPoiDetailPage:(BMKOpenPoiDetailOption *) option; - -/** - * 调起百度地图poi周边检索页面 - * 注:从iphone百度地图 8.2.0版本开始支持 - *@param option poi周边参数类(BMKOpenPoiNearbyOption) - *@return 调起结果 - */ -+ (BMKOpenErrorCode)openBaiduMapPoiNearbySearch:(BMKOpenPoiNearbyOption *) option; - -@end - -#endif diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Utils.framework/Headers/BMKOpenPoiOption.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Utils.framework/Headers/BMKOpenPoiOption.h deleted file mode 100644 index 179e9ed..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Utils.framework/Headers/BMKOpenPoiOption.h +++ /dev/null @@ -1,39 +0,0 @@ -// -// BMKOpenPoiOption.h -// UtilsComponent -// -// Created by wzy on 15/3/26. -// Copyright (c) 2015年 baidu. All rights reserved. -// - -#ifndef UtilsComponent_BMKOpenPoiOption_h -#define UtilsComponent_BMKOpenPoiOption_h - -#import -#import -#import "BMKOpenOption.h" - -///调起百度地图: poi详情参数类 -@interface BMKOpenPoiDetailOption : BMKOpenOption - -///poi的uid -@property (nonatomic, strong) NSString* poiUid; - -@end - - -///调起百度地图: poi周边参数类 -@interface BMKOpenPoiNearbyOption : BMKOpenOption - -///中心点(经纬度) -@property (nonatomic, assign) CLLocationCoordinate2D location; -///半径 -@property (nonatomic, assign) NSUInteger radius; -///关键词 -@property (nonatomic, strong) NSString* keyword; - -@end - - -#endif - diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Utils.framework/Headers/BMKOpenRoute.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Utils.framework/Headers/BMKOpenRoute.h deleted file mode 100644 index ea80b58..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Utils.framework/Headers/BMKOpenRoute.h +++ /dev/null @@ -1,45 +0,0 @@ -// -// BMKOpenRoute.h -// UtilsComponent -// -// Created by wzy on 15/3/26. -// Copyright (c) 2015年 baidu. All rights reserved. -// - -#ifndef UtilsComponent_BMKOpenRoute_h -#define UtilsComponent_BMKOpenRoute_h -#import "BMKOpenRouteOption.h" -#import - -///调起百度地图 -- 路线 -///注:从iphone百度地图 8.2.0版本开始支持 -@interface BMKOpenRoute : NSObject - -/** - * 调起百度地图步行路线页面 - * 注:从iphone百度地图 8.2.0版本开始支持 - *@param option 步行路线参数类(BMKOpenWalkingRouteOption) - *@return 调起结果 - */ -+ (BMKOpenErrorCode)openBaiduMapWalkingRoute:(BMKOpenWalkingRouteOption *) option; - -/** - * 调起百度地图公交路线页面 - * 注:从iphone百度地图 8.2.0版本开始支持 - *@param option 公交路线参数类(BMKOpenTransitRouteOption) - *@return 调起结果 - */ -+ (BMKOpenErrorCode)openBaiduMapTransitRoute:(BMKOpenTransitRouteOption *) option; - -/** - * 调起百度地图驾车路线检索页面 - * 注:从iphone百度地图 8.2.0版本开始支持 - *@param option 驾车路线参数类(BMKOpenDrivingRouteOption) - *@return 调起结果 - */ -+ (BMKOpenErrorCode)openBaiduMapDrivingRoute:(BMKOpenDrivingRouteOption *) option; - -@end - - -#endif diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Utils.framework/Headers/BMKOpenRouteOption.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Utils.framework/Headers/BMKOpenRouteOption.h deleted file mode 100644 index 05298ad..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Utils.framework/Headers/BMKOpenRouteOption.h +++ /dev/null @@ -1,54 +0,0 @@ -// -// BMKOpenRouteOption.h -// UtilsComponent -// -// Created by wzy on 15/3/26. -// Copyright (c) 2015年 baidu. All rights reserved. -// - -#ifndef UtilsComponent_BMKOpenRouteOption_h -#define UtilsComponent_BMKOpenRouteOption_h - -#import -#import "BMKOpenOption.h" -#import - -typedef enum -{ - BMK_OPEN_TRANSIT_RECOMMAND = 3, //推荐 - BMK_OPEN_TRANSIT_TRANSFER_FIRST, //少换乘 - BMK_OPEN_TRANSIT_WALK_FIRST, //少步行 - BMK_OPEN_TRANSIT_NO_SUBWAY, //不坐地铁 - BMK_OPEN_TRANSIT_TIME_FIRST, //时间短 -}BMKOpenTransitPolicy; - -///此类管理调起百度地图路线时传入的参数 -@interface BMKOpenRouteOption : BMKOpenOption - -///起点 -@property (nonatomic, strong) BMKPlanNode *startPoint; -///终点 -@property (nonatomic, strong) BMKPlanNode *endPoint; - -@end - -///此类管理调起百度地图步行路线时传入的参数 -@interface BMKOpenWalkingRouteOption : BMKOpenRouteOption - -@end - -///此类管理调起百度地图驾车路线时传入的参数 -@interface BMKOpenDrivingRouteOption : BMKOpenRouteOption - -@end - -///此类管理调起百度地图公共交通路线时传入的参数 -@interface BMKOpenTransitRouteOption : BMKOpenRouteOption - -//策略,默认:BMK_OPEN_TRANSIT_RECOMMAND(异常值,强制使用BMK_OPEN_TRANSIT_RECOMMAND) -@property (nonatomic, assign) BMKOpenTransitPolicy openTransitPolicy; - -@end - - -#endif diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Utils.framework/Headers/BMKUtilsComponent.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Utils.framework/Headers/BMKUtilsComponent.h deleted file mode 100644 index b4e3850..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Utils.framework/Headers/BMKUtilsComponent.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// BMKUtilsComponent.h -// baiduMapSdk -// -// Created by baidu on 14-4-22. -// Copyright (c) 2014年 baidu. All rights reserved. -// - - -#import "BMKGeometry.h" -#import "BMKNavigation.h" -#import "BMKOpenPoi.h" -#import "BMKOpenRoute.h" -#import "BMKOpenPoiOption.h" -#import "BMKOpenRouteOption.h" -#import "BMKFavPoiManager.h" -#import "BMKUtilsVersion.h" -#import "BMKOpenPanorama.h" \ No newline at end of file diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Utils.framework/Headers/BMKUtilsVersion.h b/Ifish/BMKMap3.3.0/BaiduMapAPI_Utils.framework/Headers/BMKUtilsVersion.h deleted file mode 100644 index 0c81776..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Utils.framework/Headers/BMKUtilsVersion.h +++ /dev/null @@ -1,33 +0,0 @@ -// -// BMKUtilsVersion.h -// UtilsComponent -// -// Created by wzy on 15/9/9. -// Copyright © 2015年 baidu. All rights reserved. -// - -#ifndef BMKUtilsVersion_h -#define BMKUtilsVersion_h - -#import - -/** - *重要: - *utils组件的版本和base组件的版本必须一致,否则不能正常使用 - */ - -/** - *获取当前地图API utils组件 的版本号 - *当前utils组件版本 : 3.3.0 - *return 返回当前API utils组件 的版本号 - */ -UIKIT_EXTERN NSString* BMKGetMapApiUtilsComponentVersion(); - -/** - *检查utils组件的版本号是否和base组件的版本号一致 - *return 版本号一致返回YES - */ -UIKIT_EXTERN BOOL BMKCheckUtilsComponentIsLegal(); - - -#endif /* BMKUtilsVersion_h */ diff --git a/Ifish/BMKMap3.3.0/BaiduMapAPI_Utils.framework/readme.txt b/Ifish/BMKMap3.3.0/BaiduMapAPI_Utils.framework/readme.txt deleted file mode 100644 index 6143c0c..0000000 --- a/Ifish/BMKMap3.3.0/BaiduMapAPI_Utils.framework/readme.txt +++ /dev/null @@ -1,67 +0,0 @@ -计算工具:包括测距(两点之间距离)、坐标转换、调起百度地图等功能; - - - - --------------------------------------------------------------------------------------- - -iOS 地图 SDK v3.3.0是适用于iOS系统移动设备的矢量地图开发包 - --------------------------------------------------------------------------------------- - -地图SDK功能介绍(全功能开发包): - -地图:提供地图展示和地图操作功能; - -POI检索:支持周边检索、区域检索和城市内兴趣点检索; - -地理编码:提供经纬度和地址信息相互转化的功能接口; - -线路规划:支持公交、驾车、步行三种方式的线路规划; - -覆盖物图层:支持在地图上添加覆盖物(标注、几何图形、热力图、地形图图层等),展示更丰富的LBS信息; - -定位:获取当前位置信息,并在地图上展示(支持普通、跟随、罗盘三种模式); - -离线地图:使用离线地图可节省用户流量,提供更好的地图展示效果; - -调启百度地图:利用SDK接口,直接在本地打开百度地图客户端或WebApp,实现地图功能; - -周边雷达:利用周边雷达功能,开发者可在App内低成本、快速实现查找周边使用相同App的用户位置的功能; - -LBS云检索:支持查询存储在LBS云内的自有数据; - -特色功能:提供短串分享、Place详情检索、热力图等特色功能,帮助开发者搭建功能更加强大的应用; - - --------------------------------------------------------------------------------------- - - 注:自v3.2.0起,百度地图iOS SDK全面支持HTTPS,需要广大开发者导入第三方openssl静态库:libssl.a和libcrypto.a(存放于thirdlib目录下)。 - - 新 版 提 示 】 -【 注 意 】 -1、自v3.2.0起,百度地图iOS SDK全面支持HTTPS,需要广大开发者导入第三方openssl静态库:libssl.a和libcrypto.a(存放于thirdlib目录下) -添加方法:在 TARGETS->Build Phases-> Link Binary With Libaries中点击“+”按钮,在弹出的窗口中点击“Add Other”按钮,选择libssl.a和libcrypto.a添加到工程中 。 - -2、支持CocoaPods导入 -pod setup //更新CocoPods的本地库 -pod search BaiduMapKit //下载最新地图SDK - -【 新 增 】 -[ 基 础 地 图 ] -3D地图下,增加显示天空效果,无需设置 - -[ 工 具 ] -1.全面支持GCJ02坐标输入/输出,全局设置方法如下: -[BMKMapManager setCoordinateTypeUsedInBaiduMapSDK:BMK_COORDTYPE_COMMON];//默认为BD09LL坐标,且此方法仅在国内生效,国外均为WGS84坐标 - -2. 新增调启步行AR导航接口:openBaiduMapwalkARNavigation - -[ LBS云] -云检索中,keywords 改为非必填项 - -【 优 化 】 -优化个性化地图元素分类 - -【 修 复 】 -少部分地铁线及室内图无法显示问题(v3.2.0引入的问题)。 未下载全国离线基础包时,离线状态下全国(球)地图显示异常。 \ No newline at end of file diff --git a/Ifish/Info.plist b/Ifish/Info.plist index 2059f06..631dab8 100644 --- a/Ifish/Info.plist +++ b/Ifish/Info.plist @@ -17,7 +17,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 4.6.7 + 4.9.0 CFBundleSignature ???? CFBundleURLTypes @@ -70,7 +70,7 @@ CFBundleVersion - 511 + 531 ITSAppUsesNonExemptEncryption LSApplicationCategoryType diff --git a/Ifish/UMCommunity/UMCommunitySDK/README.txt b/Ifish/UMCommunity/UMCommunitySDK/README.txt deleted file mode 100644 index d96148b..0000000 --- a/Ifish/UMCommunity/UMCommunitySDK/README.txt +++ /dev/null @@ -1,6 +0,0 @@ - version: 2.7 - UMCommunitySDK - 微社区SDK API - UMCommunityUI - 微社区模板UI - UMComDataController - 数据控制器,属于UI与SDK底层的中间部分,负责处理数据交互,解耦UI控制器 - UMComModules - 登录、分享、消息部分管理器,负责UI触发的登录、分享等操作 - UMComThirdComponent - 第三方平台(微信、 微博、QQ)的授权分享SDK套件及PUSH组件 \ No newline at end of file diff --git a/Ifish/UMCommunity/UMCommunitySDK/UMCommunitySDK/README.txt b/Ifish/UMCommunity/UMCommunitySDK/UMCommunitySDK/README.txt deleted file mode 100644 index 7d5371f..0000000 --- a/Ifish/UMCommunity/UMCommunitySDK/UMCommunitySDK/README.txt +++ /dev/null @@ -1,5 +0,0 @@ - version: 2.7 - UMComFoundation.framework - 微社区基础工具库 - UMComDataStorage.framework - 微社区数据存储 - UMComNetwork.framework - 微社区网络接口库 - UMCommunitySDK.framework - 微社区SDK入口 diff --git a/Ifish/UMSocial/SocialLibraries/WeChat/.DS_Store b/Ifish/UMSocial/SocialLibraries/WeChat/.DS_Store index 5008ddf..bec5565 100644 Binary files a/Ifish/UMSocial/SocialLibraries/WeChat/.DS_Store and b/Ifish/UMSocial/SocialLibraries/WeChat/.DS_Store differ diff --git a/Ifish/UMSocial/SocialLibraries/WeChat/WechatSDK/README.txt b/Ifish/UMSocial/SocialLibraries/WeChat/WechatSDK/README.txt deleted file mode 100644 index 60a55b5..0000000 --- a/Ifish/UMSocial/SocialLibraries/WeChat/WechatSDK/README.txt +++ /dev/null @@ -1,69 +0,0 @@ -重要! - -SDK1.7.7 -1 增加SDK分享小程序 -2 增加选择发票接口 - -SDK1.7.6 -1. 提高稳定性 -1 修复mta崩溃 -2 新增接口支持开发者关闭mta数据统计上报 - -SDK1.7.5 -1. 提高稳定性 -2. 加快registerApp接口启动速度 - -SDK1.7.4 -1. 更新支持iOS启用 ATS(App Transport Security) -2. 需要在工程中链接CFNetwork.framework -3. 在工程配置中的”Other Linker Flags”中加入”-Objc -all_load” - -SDK1.7.3 -1. 增强稳定性,适配iOS10 -2. 修复小于32K的jpg格式缩略图设置失败的问题 - -SDK1.7.2 -1. 修复因CTTeleponyNetworkInfo引起的崩溃问题 - -SDK1.7.1 -1. 支持兼容ipv6(提升稳定性) -2. xCode Version 7.3.1 (7D1014) 编译 - -SDK1.7 -1. 支持兼容ipv6 -2. 修复若干问题增强稳定性 - -SDK1.6.3 -1. xCode7.2 构建的sdk包。 -2. 请使用xCode7.2进行编译。 -3. 需要在Build Phases中Link Security.framework -4. 修复若干小问题。 - -SDK1.6.2 -1、xCode7.1 构建的sdk包 -2、请使用xCode7.1进行编译 - -SDK1.6.1 -1、修复armv7s下,bitcode可能编译不过 -2、解决warning - -SDK1.6 -1、iOS 9系统策略更新,限制了http协议的访问,此外应用需要在“Info.plist”中将要使用的URL Schemes列为白名单,才可正常检查其他应用是否安装。 -受此影响,当你的应用在iOS 9中需要使用微信SDK的相关能力(分享、收藏、支付、登录等)时,需要在“Info.plist”里增加如下代码: -LSApplicationQueriesSchemes - -weixin - -NSAppTransportSecurity - -NSAllowsArbitraryLoads - - -2、开发者需要在工程中链接上 CoreTelephony.framework -3、解决bitcode编译不过问题 - -SDK1.5 -1、废弃safeSendReq:接口,使用sendReq:即可。 -2、新增+(BOOL) sendAuthReq:(SendAuthReq*) req viewController : (UIViewController*) viewController delegate:(id) delegate; -支持未安装微信情况下Auth,具体见WXApi.h接口描述 -3、微信开放平台新增了微信模块用户统计功能,便于开发者统计微信功能模块的用户使用和活跃情况。开发者需要在工程中链接上:SystemConfiguration.framework,libz.dylib,libsqlite3.0.dylib。 diff --git a/Ifish/Utinitys/Define.h b/Ifish/Utinitys/Define.h index f84f573..4c4596f 100644 --- a/Ifish/Utinitys/Define.h +++ b/Ifish/Utinitys/Define.h @@ -87,7 +87,7 @@ alpha:1.0] #import "IfishTaskModel.h" #import "merchantModel.h" #import "dataContorl.h" -#import "zbar.h" +//#import "zbar.h" #import "AFHttpTool.h" #import "AFNOHeaderHttpTool.h" #import "IFISHHttpTool.h" @@ -464,5 +464,17 @@ alpha:1.0] #define IFishUserActivitiesMaxCount [NSString stringWithFormat:@"%@/api/userActivitiesMaxCount",JIEKOUPORT] +#define NEWServerURL @"http://139.196.24.156:8080" +//四十二、 保存\修改 智能加热棒信息 +#define SaveHotBarInfo [NSString stringWithFormat:@"%@/api/user/saveOrUpdateDeviceHeaterInfo.do",JIEKOUPORT] +// 四十三、 获取智能加热棒信息 +#define GetHotBarInfo [NSString stringWithFormat:@"%@/api/user/getDeviceHeaterInfo.do",JIEKOUPORT] +//四十四、 删除智能加热棒信息 +#define DeleteHotBar [NSString stringWithFormat:@"%@/api/user/deleteDeviceHeaterInfo.do",JIEKOUPORT] + +// +#define getHotBarHistory [NSString stringWithFormat:@"%@/api/user/getDeviceHeaterPhsByDate.do",JIEKOUPORT] + + #endif /* Define_h */ diff --git a/Ifish/Utinitys/IfishHttpRequest/IfishDataUnity.m b/Ifish/Utinitys/IfishHttpRequest/IfishDataUnity.m index c4c88df..d3b5f29 100644 --- a/Ifish/Utinitys/IfishHttpRequest/IfishDataUnity.m +++ b/Ifish/Utinitys/IfishHttpRequest/IfishDataUnity.m @@ -10,6 +10,7 @@ //#import "JPUSHService.h" #import "IfishCameraModel.h" #import "IfishNewsModel.h" +#import "IfishHotBarVc.h" @implementation IfishDataUnity @@ -64,14 +65,14 @@ if (scanVC) { - [[UIApplication sharedApplication].delegate.window.rootViewController.view makeToastActivityBlackBack]; + // [[UIApplication sharedApplication].delegate.window.rootViewController.view makeToastActivityBlackBack]; [scanVC dismissViewControllerAnimated:YES completion:^{ + + // [[UIApplication sharedApplication].delegate.window.rootViewController.view hideToastActivity]; + [self setrootWith:devicemodel]; - [[UIApplication sharedApplication].delegate.window.rootViewController.view hideToastActivity]; - - }]; return; @@ -83,6 +84,9 @@ } -(void)setrootWith:(DeviceModel*)devicemodel{ + +// NSString *tost=[NSString stringWithFormat:@"type%@",devicemodel.type]; +// [[UIApplication sharedApplication].keyWindow makeToast:tost]; // 先判断是否授权 if ([devicemodel.type isEqual:[NSNull null]]||!devicemodel.type) { //未知类型 跳转未授权 显示未知类型 @@ -149,7 +153,24 @@ [nav.navigationBar setBackgroundImage:[UIImage imageNamed:@"blackbar.png"] forBarMetrics:UIBarMetricsDefault]; app1.window.rootViewController=nav; - }else{ + }else if ([devicemodel.type isEqualToString:DECICE_TYPE_hotBar]) { + + IfishHotBarVc*barVc=[[IfishHotBarVc alloc]initWithNibName:@"IfishHotBarVc" bundle:nil]; + barVc.devicemodel = devicemodel; + barVc.hidesBottomBarWhenPushed=YES; + + UIApplication*app=[UIApplication sharedApplication]; + AppDelegate*app1=(AppDelegate*)app.delegate; +// UINavigationController*nav=[[UINavigationController alloc]initWithRootViewController:barVc]; +// [nav.navigationBar setBackgroundImage:[UIImage imageNamed:@"blackbar.png"] forBarMetrics:UIBarMetricsDefault]; +// app1.window.rootViewController=nav; + // [((UINavigationController*)app1.window.rootViewController) pushViewController:barVc animated:YES]; + UITabBarController*tabVc= (UITabBarController*)app1.window.rootViewController; + tabVc.selectedIndex=0; + UINavigationController*navVc=(UINavigationController*)tabVc.childViewControllers[tabVc.selectedIndex]; + [navVc pushViewController:barVc animated:YES]; + } + else{ int controlAmount=[devicemodel.controlAmount intValue]; @@ -186,6 +207,7 @@ app1.window.rootViewController=nav; + } break; diff --git a/Ifish/Utinitys/IfishUtils/IfishDeviceInfo.h b/Ifish/Utinitys/IfishUtils/IfishDeviceInfo.h index 58899b6..b100257 100644 --- a/Ifish/Utinitys/IfishUtils/IfishDeviceInfo.h +++ b/Ifish/Utinitys/IfishUtils/IfishDeviceInfo.h @@ -49,4 +49,7 @@ //瑞美4控 #define DECICE_TYPE_RUIMEI @"2b" +//加热系统 +#define DECICE_TYPE_hotBar @"3a" + #endif /* IfishDeviceInfo_h */ diff --git a/Ifish/Utinitys/SocketSingleton/Socketsingleton.h b/Ifish/Utinitys/SocketSingleton/Socketsingleton.h index 14a3282..7c19797 100644 --- a/Ifish/Utinitys/SocketSingleton/Socketsingleton.h +++ b/Ifish/Utinitys/SocketSingleton/Socketsingleton.h @@ -75,9 +75,7 @@ @property (nonatomic, copy ) NSString *socketHost; // socket的Host @property (nonatomic, assign) UInt16 socketPort; // socket的prot @property (nonatomic, retain) NSTimer *connectTimer; // 计时器 //心跳 -@property (nonatomic, assign) id - -communiteDelegate; +@property (nonatomic, weak) id communiteDelegate; + (Socketsingleton *)sharedInstance; diff --git a/Ifish/Utinitys/dataUnity/dataContorl.h b/Ifish/Utinitys/dataUnity/dataContorl.h index ee539b6..6908633 100644 --- a/Ifish/Utinitys/dataUnity/dataContorl.h +++ b/Ifish/Utinitys/dataUnity/dataContorl.h @@ -19,6 +19,7 @@ +(NSString*)tpIntStringToFourHex:(int)intString; +(NSString*)hexStringToDateString:(NSString*)hexString; +(NSString *)translation:(NSString *)arebic; ++(NSString*)leftAddZero:(NSInteger)totle andStr:(NSString*)str; //随机生成32位字符 +(NSString *)get10LengthString; diff --git a/Ifish/Utinitys/dataUnity/dataContorl.m b/Ifish/Utinitys/dataUnity/dataContorl.m index 4cc15b9..b5a0c48 100644 --- a/Ifish/Utinitys/dataUnity/dataContorl.m +++ b/Ifish/Utinitys/dataUnity/dataContorl.m @@ -63,6 +63,18 @@ return hexStr; } ++(NSString*)leftAddZero:(NSInteger)totle andStr:(NSString*)str{ + NSMutableString*str1=[NSMutableString string]; + NSInteger strLenth=str.length; + + while (strLenth - + - + @@ -20,14 +20,14 @@ - + - + diff --git a/Ifish/controllers/HotBar/HitbarWifeVc.h b/Ifish/controllers/HotBar/HitbarWifeVc.h new file mode 100644 index 0000000..c603084 --- /dev/null +++ b/Ifish/controllers/HotBar/HitbarWifeVc.h @@ -0,0 +1,14 @@ +// +// HitbarWifeVc.h +// Ifish +// +// Created by 罗艺 on 2018/9/23. +// Copyright © 2018年 lianlian. All rights reserved. +// + +#import +#import "SecondConnectWifiController.h" + +@interface HitbarWifeVc : SecondConnectWifiController + +@end diff --git a/Ifish/controllers/HotBar/HitbarWifeVc.m b/Ifish/controllers/HotBar/HitbarWifeVc.m new file mode 100644 index 0000000..45dc4c5 --- /dev/null +++ b/Ifish/controllers/HotBar/HitbarWifeVc.m @@ -0,0 +1,38 @@ +// +// HitbarWifeVc.m +// Ifish +// +// Created by 罗艺 on 2018/9/23. +// Copyright © 2018年 lianlian. All rights reserved. +// + +#import "HitbarWifeVc.h" + +@interface HitbarWifeVc () + +@end + +@implementation HitbarWifeVc + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + [self addTitleViewWithTitle:@"连接加热系统"]; +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/Ifish/controllers/HotBar/IfishBaseVc.h b/Ifish/controllers/HotBar/IfishBaseVc.h new file mode 100644 index 0000000..6dc6152 --- /dev/null +++ b/Ifish/controllers/HotBar/IfishBaseVc.h @@ -0,0 +1,59 @@ +// +// IfishBaseVc.h +// Ifish +// +// Created by 罗艺 on 2018/9/23. +// Copyright © 2018年 lianlian. All rights reserved. +// + +#import + +@interface IfishBaseVc : UIViewController +-(void)socketDidGetBackmsgData:(NSData *)data onsoket:(AsyncSocket *)sock; +//已断开连接 + +- (void)ifishSocketDidDisconnect:(AsyncSocket *)sock; + +//已经连接成功 + +-(void)ifishSocket:(AsyncSocket *)sock ifishSocketdidConnectToHost:(NSString *)host port:(UInt16)port; + +//发送数据完成 + +- (void)ifishSocket:(AsyncSocket *)sock didWriteDataWithTag:(long)tag; + +//错误断开 + +-(void)ifishSocket:(AsyncSocket *)sock willDisconnectWithError:(NSError *)err; + +// 将要连接 + +- (BOOL)ifishSocketWillConnect:(AsyncSocket *)sock; + +//新的soket + +- (void)ifishSocket:(AsyncSocket *)sock didAcceptNewSocket:(AsyncSocket *)newSocket; + +//设备登陆成功 + +-(void)ifishDeviceLogInSuccees; + +//设备登陆失败 + +-(void)ifishDeviceLogInFail; + +- (void)showLableAction:(NSString *)str; +@property(nonatomic,strong)DeviceModel*devicemodel; +-(void)InitSocket; +-(void)presentPopView; +-(void)deleteDeviceRequset; +-(void)deleteDeviceRequsetSus; +-(void)shezhiMingCheng; +-(void)wenduRequest; +@property(nonatomic,strong)UITableView *tableView; +@property(nonatomic,assign)BOOL isRefeshing; +@property(nonatomic,assign)BOOL isconnect; +-(void)creatRefreshView; +-(void)endRefreshing; + +@end diff --git a/Ifish/controllers/HotBar/IfishBaseVc.m b/Ifish/controllers/HotBar/IfishBaseVc.m new file mode 100644 index 0000000..32891c4 --- /dev/null +++ b/Ifish/controllers/HotBar/IfishBaseVc.m @@ -0,0 +1,379 @@ +// +// IfishBaseVc.m +// Ifish +// +// Created by 罗艺 on 2018/9/23. +// Copyright © 2018年 lianlian. All rights reserved. +// + +#import "IfishBaseVc.h" +#import "LXPopView.h" +#import "DXPopover.h" +#import "CreatErWeiMaController.h" +#import "JHRefreshAmazingAniView.h" +#import "UIScrollView+JHRefresh.h" + + +@interface IfishBaseVc () +@property(nonatomic,strong)DXPopover *popover; + +@end + +@implementation IfishBaseVc + +- (void)viewDidLoad { + [super viewDidLoad]; + [self InitSocket]; + + [Socketsingleton sharedInstance].communiteDelegate=self; + // Do any additional setup after loading the view. +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +#pragma mark-------- +-(void)socketDidGetBackmsgData:(NSData *)data onsoket:(AsyncSocket *)sock{ + +} + +//已断开连接 + +- (void)ifishSocketDidDisconnect:(AsyncSocket *)sock{ + _isconnect=NO; + [self endRefreshing]; +} + +//已经连接成功 + +-(void)ifishSocket:(AsyncSocket *)sock ifishSocketdidConnectToHost:(NSString *)host port:(UInt16)port{ + //已建立连接 登陆指令同意在soket单例中 + _isconnect=YES; +} + +//发送数据完成 + +- (void)ifishSocket:(AsyncSocket *)sock didWriteDataWithTag:(long)tag{} + +//错误断开 + +-(void)ifishSocket:(AsyncSocket *)sock willDisconnectWithError:(NSError *)err{ + +} + +// 将要连接 +- (BOOL)ifishSocketWillConnect:(AsyncSocket *)sock{ + return YES; +} + +//新的soket + +- (void)ifishSocket:(AsyncSocket *)sock didAcceptNewSocket:(AsyncSocket *)newSocket{} + +//设备登陆成功 + +-(void)ifishDeviceLogInSuccees{} + +//设备登陆失败 + +-(void)ifishDeviceLogInFail{} + +- (void)showLableAction:(NSString *)str{ + + UILabel *laberAction =[[UILabel alloc]init]; + laberAction.frame =CGRectMake((kScreenSize.width/2) - 50, kScreenSize.height/2 , 100, 50); + laberAction.clipsToBounds =YES; + laberAction.layer.cornerRadius =5; + laberAction.alpha =1; + laberAction.text =str; + laberAction.textAlignment =NSTextAlignmentCenter; + laberAction.backgroundColor =IndicatorBack_COLOR; + laberAction.font=[UIFont systemFontOfSize:12]; + laberAction.textColor=[UIColor whiteColor]; + + [UIView animateWithDuration:2.0 animations:^{ + laberAction.alpha =0; + }completion:^(BOOL finished) { + [laberAction removeFromSuperview]; + }]; + [self.view addSubview:laberAction]; +} + +-(void)InitSocket{ + NSLog(@"******%d",[Socketsingleton sharedInstance].clientSocket.isConnected); + if (![Socketsingleton sharedInstance].clientSocket.isConnected) { + + //[[Socketsingleton sharedInstance]; + } + // 切换设备 先断开然后重连 + + + [[Socketsingleton sharedInstance] socketConnectHost]; + + [Socketsingleton sharedInstance].macAddress = self.devicemodel.macAddress; + + + // if ([self.singletonSocket.clientSocket canSafelySetDelegate]==YES) { + // self.singletonSocket.clientSocket=[[AsyncSocket alloc]initWithDelegate:self]; + // }else{ + // NSLog(@"当前的委托有悬而未决的业务(读/写)"); + // } + + + +} + +- (NSString *)zeroLeftPadding:(NSString *)origin { + if (origin.length >= 40) { + return [origin substringToIndex:40]; + } else { + NSInteger left = 40 - origin.length; + NSMutableString *str = [NSMutableString string]; + [str appendString:origin]; + for (NSInteger index = 0; index < left; index++) { + [str appendString:@"0"]; + } + return [str copy]; + } +} + + + +-(void)presentPopView{ + + UIImage *image = [UIImage imageNamed:@"popover_background_image_notrangle"]; + NSArray *titleImgs = nil; + + NSArray *titles=nil; + LXPopView *pop=[[LXPopView alloc] init]; + CGFloat popRowH=160*(image.size.height/image.size.width); + if ([self.devicemodel.isMaster isEqualToString:@"1"]) { + //主控 + pop.frame = CGRectMake(0, 0, 160, 160*(image.size.height/image.size.width) + (popRowH -12)/2); + titleImgs = @[@"ifishdropview_edite_device",@"ifishdropview_delect_device",@"Ifish_share_device"]; + + titles=@[@"修改名称",@"删除设备",@"分享设备"]; + + }else{ + pop.frame = CGRectMake(0,0, 160, 160*(image.size.height/image.size.width)); + titleImgs = @[@"ifishdropview_edite_device",@"ifishdropview_delect_device"]; + + titles=@[@"修改名称",@"删除设备"]; + + } + + pop.delegate = self; + + pop.backgroundImage =image + ; + pop.titles = titles; + + pop.titleImgs =titleImgs; + + DXPopover *popover = [DXPopover popover]; + + self.popover = popover; + + popover.arrowSize = CGSizeMake(0.0,0.0); + + [popover showAtView:self.navigationItem.rightBarButtonItem.customView withContentView:pop]; + + NSLog(@"设备右侧pop"); + +} + +#pragma mark - PopViewDelagate + +-(void)disSelectedPopViewIndex:(NSIndexPath *)Index{ + + [self.popover dismiss]; + + if (Index.row == 0) { + //修改名称 + [self shezhiMingCheng]; + + + }else if (Index.row == 1){ + //删除设备 + + [self deletDevice]; + + }else if (Index.row == 2){ + //分享设备 + + [self fenXiangSheBei]; + + } + +} + +#pragma mark - 修改设备名 + +-(void)shezhiMingCheng{ + +// self.setNameVC = [[SetNameTextViewController alloc] init]; +// +// self.setNameVC.name = self.name.text; +// self.setNameVC.device = self.currentDevice; +// self.setNameVC.deviceType = 0; +// +// __weak typeof (self)wself = self; +// _setNameVC.NameWithBlock = ^(NSString *nameStr){ +// +// wself.name.text = nameStr; +// +// }; +// +// +// [ wself.navigationController pushViewController: wself.setNameVC animated:YES]; + + +} + +#pragma mark - 删除设备 + +-(void)deletDevice{ + + 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){ + + + //先判断此设备是否有关联 摄像头 + + //DeviceModel*deviceModel=[_deviceArr objectAtIndex:indexpath.row]; + //要删除的设设备id + +// //存在则 解除关系 删除对应的cameraId +// NSMutableArray *guanxiiArr= [[DataCenter defaultDtacenter] valueForKey:@"devicamerArr"]; +// +// for (DeviceCameraModel *model in guanxiiArr) { +// +// if (self.currentDevice.deviceId == model.deviceId ) { +// +// +// [guanxiiArr removeObject:model]; +// //保存新关系数组 +// [[DataCenter defaultDtacenter] setValue:guanxiiArr forKey:@"devicamerArr"]; +// +// } +// +// } + + [self deleteDeviceRequset]; + + + }]]; + +} + +-(void)deleteDeviceRequset{ + AFHTTPRequestOperationManager*mannager=[AFHTTPRequestOperationManager manager]; + mannager.responseSerializer=[AFHTTPResponseSerializer serializer]; + NSMutableDictionary * para = [NSMutableDictionary dictionary]; + + NSString *priId=self.devicemodel.deviceId; + ; + NSString*userId=self.devicemodel.userId; + + [para setValue:priId forKey:@"priId.deviceId"]; + [para setValue:userId forKey:@"priId.userId"]; + // __weak typeof (self)weakSelf=self; + [mannager POST:kDeleteDeviceUser parameters:para success:^(AFHTTPRequestOperation *operation, id responseObject) { + if (responseObject) { + NSDictionary*resultDic=[NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil]; + NSLog(@"result:%@",resultDic[@"result"]); + if ([resultDic[@"result"] isEqualToString:@"100"]) { + + + [self deleteDeviceRequsetSus]; + + }else if ([resultDic[@"result"] isEqualToString:@"101"]){ + +// [self showTitle:@"" messsage:@"删除失败"]; + [self showLableAction:@"删除失败"]; + + }else if ([resultDic[@"result"] isEqualToString:@"301"]){ + +// [self showTitle:@"" messsage:@"请求验证失败,请重新登陆"]; + [self showLableAction:@"请求验证失败,请重新登陆"]; + + }else if ([resultDic[@"result"] isEqualToString:@"302"]){ + +// [self showTitle:@"" messsage:@"请求被舍弃,未执行"]; + [self showLableAction:@"请求被舍弃,未执行"]; + } + } + + } failure:^(AFHTTPRequestOperation *operation, NSError *error) { + +// [self showTitle:@"" messsage:@"请求异常"]; + [self showLableAction:@"请求异常"]; + }]; +} + +-(void)deleteDeviceRequsetSus{ + +} + + + +#pragma mark - 分享设备 + +-(void)fenXiangSheBei{ + + CreatErWeiMaController*vc=[[CreatErWeiMaController alloc]init] + ; + vc.erdevicemodel=self.devicemodel; + + [self.navigationController pushViewController:vc animated:YES]; + +} + +#pragma mark - 刷新 + +-(void)wenduRequest{ + +} + +-(void)creatRefreshView{ + + __weak typeof (self)weakSelf=self; + [weakSelf.tableView addRefreshHeaderViewWithAniViewClass:[JHRefreshAmazingAniView class] beginRefresh:^{ + if (weakSelf.isRefeshing) { + return ; + } + + weakSelf.isRefeshing=YES; + if (_isconnect==YES) { + // + dispatch_async(dispatch_get_main_queue(), ^{ + [weakSelf wenduRequest]; + }); + + + }else{// socket中断 + [weakSelf InitSocket]; + + } + }]; +} +-(void)endRefreshing{ + if (self.isRefeshing) { + self.isRefeshing=NO; + [self.tableView headerEndRefreshingWithResult:JHRefreshResultSuccess]; + } +} + + + + +@end diff --git a/Ifish/controllers/HotBar/IfishHotBarModifyNameVc.h b/Ifish/controllers/HotBar/IfishHotBarModifyNameVc.h new file mode 100644 index 0000000..c0eed04 --- /dev/null +++ b/Ifish/controllers/HotBar/IfishHotBarModifyNameVc.h @@ -0,0 +1,14 @@ +// +// IfishHotBarModifyNameVc.h +// Ifish +// +// Created by 罗艺 on 2018/9/25. +// Copyright © 2018年 lianlian. All rights reserved. +// + +#import +#import "DeviceModel.h" + +@interface IfishHotBarModifyNameVc : UIViewController +@property(nonatomic,strong)DeviceModel*devicemodel; +@end diff --git a/Ifish/controllers/HotBar/IfishHotBarModifyNameVc.m b/Ifish/controllers/HotBar/IfishHotBarModifyNameVc.m new file mode 100644 index 0000000..79174cf --- /dev/null +++ b/Ifish/controllers/HotBar/IfishHotBarModifyNameVc.m @@ -0,0 +1,82 @@ +// +// IfishHotBarModifyNameVc.m +// Ifish +// +// Created by 罗艺 on 2018/9/25. +// Copyright © 2018年 lianlian. All rights reserved. +// + +#import "IfishHotBarModifyNameVc.h" + +@interface IfishHotBarModifyNameVc () +@property (weak, nonatomic) IBOutlet UITextField *nameTextF; + +@end + +@implementation IfishHotBarModifyNameVc + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view from its nib. + self.title=@"修改名称"; + self.navigationItem.rightBarButtonItem=[[UIBarButtonItem alloc]initWithTitle:@"保存" style:0 target:self action:@selector(clickModifyName)]; + UIImage *hamburger = [[UIImage imageNamed:@"back_btn"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; + self.navigationItem.leftBarButtonItem=[[UIBarButtonItem alloc]initWithImage:hamburger style:0 target:self action:@selector(clickBack)]; +} + +-(void)clickBack{ + [self.navigationController popViewControllerAnimated:YES]; +} + +-(void)viewWillAppear:(BOOL)animated{ + [super viewWillAppear:animated]; + [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"blackbar.png"] forBarMetrics:UIBarMetricsDefault]; +} + +- (void)clickModifyName{ + [self modifyNameWith:self.nameTextF.text]; +} + + +-(void)modifyNameWith:(NSString*)str{ +// priId.deviceId Integer 是 设备ID +// priId.userId Integer 是 用户ID +// showName string 是 显示名称 + + + NSDictionary*para=@{ + @"priId.deviceId":self.devicemodel.deviceId, + @"priId.userId":self.devicemodel.userId, + @"showName":str + }; + [AFHttpTool requestWihtMethod:RequestMethodTypePost url:kUpdateDeviceUser params:para success:^(id response) { + NSLog(@"-----------%@",response); + NSDictionary*dict=[NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableContainers error:nil]; + NSString*result=dict[@"result"]; + if ([result integerValue]==100) { + // self.vo=[IfishHotBarVo mj_objectWithKeyValues:dict[@"data"]]; + [self.view makeToast:@"修改成功"]; + [[NSUserDefaults standardUserDefaults]setObject:str forKey:@"dTitle"]; + [self updateNameInLocalWithName:str]; + } + } failure:^(NSError *err) { + [self.view makeToast:@"修改失败"]; + }]; +} + + +-(void)updateNameInLocalWithName:(NSString*)name{ + NSArray* deviceArr =[dataContorl getallDevices]; + for (DeviceModel *device in deviceArr) { + if (device.deviceId==self.devicemodel.deviceId) { + device.showName=name; + [[DataCenter defaultDtacenter]setValue:deviceArr forKey:@"deviceInfo"]; + [[NSNotificationCenter defaultCenter] postNotificationName:@"updateDevice" object:nil]; + break; + } + } + + +} + +@end diff --git a/Ifish/controllers/HotBar/IfishHotBarModifyNameVc.xib b/Ifish/controllers/HotBar/IfishHotBarModifyNameVc.xib new file mode 100644 index 0000000..597bfc3 --- /dev/null +++ b/Ifish/controllers/HotBar/IfishHotBarModifyNameVc.xib @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Ifish/controllers/HotBar/IfishHotBarVc.h b/Ifish/controllers/HotBar/IfishHotBarVc.h index 2acae3e..80d5ed9 100644 --- a/Ifish/controllers/HotBar/IfishHotBarVc.h +++ b/Ifish/controllers/HotBar/IfishHotBarVc.h @@ -7,7 +7,10 @@ // #import +#import "DeviceModel.h" +#import "CenterViewController.h" +#import "IfishBaseVc.h" -@interface IfishHotBarVc : UIViewController +@interface IfishHotBarVc :IfishBaseVc @end diff --git a/Ifish/controllers/HotBar/IfishHotBarVc.m b/Ifish/controllers/HotBar/IfishHotBarVc.m index 58f5432..27d9b6f 100644 --- a/Ifish/controllers/HotBar/IfishHotBarVc.m +++ b/Ifish/controllers/HotBar/IfishHotBarVc.m @@ -12,29 +12,127 @@ #import "IFishWaterChangeView.h" #import "UIView+GetView.h" #import "IfishHistoryView.h" +#import "AFHttpTool.h" +#import "IfishHotBarVc.h" +#import "MJExtension.h" +#import "Socketsingleton.h" +#import "IfishHotBarPackegeVo.h" +#import "Toast+UIView.h" +#import "IfishHotBarModifyNameVc.h" +#import "searchDeviceModel.h" +#import "IfishHotBarHeader.h" +#import "IfishCameraModel.h" +#import "SVProgressHUD.h" #define HOTBARCELL @"hotBarCell" -@interface IfishHotBarVc () -@property (weak, nonatomic) IBOutlet UITableView *tableView; +@interface IfishHotBarVc () +@property (weak, nonatomic) IBOutlet UITableView *mainTableView; @property(nonatomic,strong)NSMutableArray*datas; @property(nonatomic,strong)IFishWaterChangeView*changeWaterView; @property(nonatomic,strong)IfishHistoryView*historyView; +@property (weak, nonatomic) IBOutlet UILabel *templetrueLable; +@property(nonatomic,strong)IfishHotBarVo*vo; +@property(nonatomic,strong)IfishHotBarHeader*header; +@property(nonatomic,assign)NSInteger curDay; @end @implementation IfishHotBarVc +-(IfishHotBarHeader *)header{ + if(_header==nil){ + _header=[IfishHotBarHeader getView]; + _header.frame=CGRectMake(0, 0, SCREEN_WIDTH, 207); + _header.tag=100; + UIView*view=[[UIView alloc]initWithFrame:_header.frame]; + [view addSubview:_header]; + self.mainTableView.tableHeaderView=view; + } + return _header; +} + +-(void)initUI{ +} + +-(void)wenduRequest{// 查询设备状态信息 + + searchDeviceModel*xinxiModel=[[searchDeviceModel alloc]init]; + xinxiModel.resavemacId = self.devicemodel.macAddress; + xinxiModel.sendmacId = self.devicemodel.macAddress; + + NSString*requestStr=xinxiModel.description; + NSData*data1=[dataContorl stringToHexData:requestStr]; + [[Socketsingleton sharedInstance].clientSocket writeData:data1 withTimeout:-1 tag:0]; + [[Socketsingleton sharedInstance].clientSocket readDataWithTimeout:-1 tag:0]; + + [self getHotBarInfo]; +} + -(IfishHistoryView *)historyView{ if (_historyView==nil) { _historyView=[IfishHistoryView getView]; _historyView.frame=self.view.bounds; + _historyView.myDeleget=self; [self.view addSubview:_historyView]; } - _historyView.hidden=NO; +// _historyView.hidden=NO; return _historyView; } +-(void)clickBottomBarWithIdx:(NSInteger)idx{ + if (idx==10) { + self.curDay++; + if (self.curDay>7) { + [SVProgressHUD showInfoWithStatus:@"只能查询前七天数据!"]; + self.curDay=7; + return; + } + + }else{ + self.curDay--; + if(self.curDay<0){ + [SVProgressHUD showInfoWithStatus:@"只能查询前七天数据!"]; + self.curDay=0; + return; + } + + } + + NSDate *curDate = [NSDate dateWithTimeInterval:self.curDay*60*60*-24 sinceDate:[NSDate date]]; + NSDateFormatter *dateFormatter=[[NSDateFormatter alloc]init];//创建一个日期格式化器 + + dateFormatter.dateFormat=@"yyyy-MM-dd";//指定转date得日期格式化形式 + + NSLog(@"%@",[dateFormatter stringFromDate:curDate]);//2015-11-20 08:24:04 + NSString*curDateStr=[dateFormatter stringFromDate:curDate]; +// __block NSString*b_dateStr=curDateStr; + [SVProgressHUD showWithMaskType:SVProgressHUDMaskTypeBlack]; + NSDictionary*para=@{@"heaterMacAddress":self.devicemodel.macAddress,@"date":curDateStr};//yyyy-mm-dd + self.historyView.curdateStr=curDateStr; + [AFHttpTool requestWihtMethod:RequestMethodTypePost url:getHotBarHistory params:para success:^(id response) { + NSLog(@"-----------%@",response); + NSDictionary*dict=[NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableContainers error:nil]; + NSString*result=dict[@"result"]; + [SVProgressHUD dismiss]; + if ([result integerValue]==100) { + IfishHotBarVo*vo= [IfishHotBarVo mj_objectWithKeyValues:dict[@"data"]]; + if (vo.phs.count<1) { + [SVProgressHUD showInfoWithStatus:@"暂无数据"]; + }else{ + self.historyView.datas=vo.phs; + } + }else{ + [SVProgressHUD showInfoWithStatus:@"暂无数据"]; + } + } failure:^(NSError *err) { + [SVProgressHUD dismiss]; + [SVProgressHUD showInfoWithStatus:@"网络在开小差,请稍后!"]; + }]; +} + +#pragma mark----设置参数代理--- + -(IFishWaterChangeView *)changeWaterView{ if(_changeWaterView==nil){ _changeWaterView=[IFishWaterChangeView getView]; @@ -48,12 +146,65 @@ } -(void)didSelectRow1:(NSString *)v andRow2:(NSString *)v2{ - NSString*str=[NSString stringWithFormat:@"换水周期 %@ 天 %@",v,v2]; + v=[v stringByReplacingOccurrencesOfString:@"天" withString:@""]; + v2=[v2 stringByReplacingOccurrencesOfString:@":00" withString:@""]; + NSString*str=[NSString stringWithFormat:@"换水周期 %@天 %@:00",v,v2]; + if (v2.length==0) { + str=[NSString stringWithFormat:@"换水周期 %@天",v]; + } IfishHotBarVo*vo=self.datas[4]; vo.title=str; - [self.tableView reloadData]; + + self.vo.heater.heaterCycle=v; + self.vo.heater.heaterReminderTime=v2; + [self setTeampleture]; + [self.mainTableView reloadData]; } +-(void)submitText:(NSString *)w andh:(NSString *)h andV:(NSString *)v{ + IfishHotBarVo*vo=self.datas[1]; + float heaterVolume; + if (w&&h&&v) { + heaterVolume=[w integerValue]*[h integerValue]*[v integerValue]*0.001; + self.vo.heater.heaterVolume=[NSString stringWithFormat:@"%0.1f",heaterVolume]; + self.vo.heater.heaterLong=v; + self.vo.heater.heaterWidth=w; + self.vo.heater.heaterHeight=h; + } + if (self.vo.heater.heaterVolume.length) { + vo.title=[NSString stringWithFormat:@"鱼缸容量 %@L",self.vo.heater.heaterVolume]; + vo.subTitle=[NSString stringWithFormat:@"推荐流量:%.1fL--%.1fL",[self.vo.heater.heaterVolume intValue]*1.5,[self.vo.heater.heaterVolume intValue]*2.0]; + [self.mainTableView reloadData]; + } + [self setHeigh:h andW:w andLong:v]; + + +} + + +-(void)didSelectTeamptrue:(NSString *)up andDown:(NSString *)down andT:(NSString *)t andWarnCode:(NSString *)code{ + up=[up stringByReplacingOccurrencesOfString:@"°c" withString:@""]; + down=[down stringByReplacingOccurrencesOfString:@"°c" withString:@""]; + t=[t stringByReplacingOccurrencesOfString:@"°c" withString:@""]; + +// [self setHeatTeapWith:t]; + IfishHotBarVo*vo=self.datas[0]; + self.vo.heaterNum=[NSString stringWithFormat:@"%f",t.floatValue]; + + vo.title=[NSString stringWithFormat:@"设置温度 %.1f°c",[self.vo.heaterNum floatValue]]; + [self.mainTableView reloadData]; + self.vo.wornCode=code; + // self.vo.wornCode=[NSString stringWithFormat:@"%llu",[dataContorl hexToTen:self.vo.wornCode]]; + + self.vo.upTeamp=up; + + self.vo.downTeamp=down; + + [self setHeatTeapWith:t]; + // [self setTeampletureWithUp:self.vo.upTeamp andDown:self.vo.downTeamp andHnum:0 andWarmC:self.vo.wornCode]; +} + + -(NSMutableArray *)datas{ if (_datas==nil) { @@ -66,7 +217,7 @@ [_datas addObject:vo]; IfishHotBarVo*vo1=[[IfishHotBarVo alloc]init]; - vo1.title=@"鱼缸容量 1000L"; + vo1.title=@"鱼缸容量 "; vo1.iconUrl=@"容积图标"; vo1.isShowArrow=YES; vo1.subTitle=@""; @@ -75,16 +226,16 @@ vo2.title=@"水泵流量"; vo2.iconUrl=@"流量标"; vo2.isShowArrow=NO; - vo2.subTitle=@"流量:合适"; + vo2.subTitle=@""; [_datas addObject:vo2]; IfishHotBarVo*vo3=[[IfishHotBarVo alloc]init]; vo3.title=@"历史趋势"; - vo3.iconUrl=@"趋势图标"; + vo3.iconUrl=@"走势图标"; vo3.isShowArrow=YES; vo3.subTitle=@""; [_datas addObject:vo3]; IfishHotBarVo*vo4=[[IfishHotBarVo alloc]init]; - vo4.title=@"换水周期 5 天 7:00"; + vo4.title=@"换水周期 "; vo4.iconUrl=@"换水图标"; vo4.isShowArrow=YES; vo4.subTitle=@""; @@ -96,13 +247,234 @@ } + - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view from its nib. - [self.tableView registerNib:[UINib nibWithNibName:@"IFishHotBarCell" bundle:nil] forCellReuseIdentifier:HOTBARCELL]; - self.tableView.rowHeight=70; + [self.mainTableView registerNib:[UINib nibWithNibName:@"IFishHotBarCell" bundle:nil] forCellReuseIdentifier:HOTBARCELL]; + self.mainTableView.rowHeight=70; + self.mainTableView.dataSource=self; + self.mainTableView.delegate=self; + [self.mainTableView reloadData]; + [self getHotBarInfo]; + self.tableView=self.mainTableView; + [self creatRefreshView]; + [self header]; +// + UIImage *hamburger = [[UIImage imageNamed:@"back_btn"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; + self.navigationItem.leftBarButtonItem=[[UIBarButtonItem alloc]initWithImage:hamburger style:0 target:self action:@selector(clickBack)]; + self.navigationItem.rightBarButtonItem=[[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"ifishnav_dropview_list"] style:0 target:self action:@selector(clickMoreBtn)]; } +//-(void)updateNameInLocal{ +// NSArray* deviceArr =[dataContorl getallDevices]; +// for (DeviceModel *device in deviceArr) { +// if (device.deviceId==self.devicemodel.deviceId) { +// device.defaultShowName=self.title; +// [[DataCenter defaultDtacenter]setValue:deviceArr forKey:@"deviceInfo"]; +// break; +// } +// } +// +// +//} + + +-(void)viewWillAppear:(BOOL)animated{ + [super viewWillAppear:animated]; + [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"blackbar.png"] forBarMetrics:UIBarMetricsDefault]; + NSString*dTitle=[[NSUserDefaults standardUserDefaults] valueForKey:@"dTitle"]; + self.title=self.devicemodel.showName; +// [self updateNameInLocal]; +} + + +-(void)clickMoreBtn{ + [self presentPopView]; +} + +-(void)deleteDeviceRequset{ + [super deleteDeviceRequset]; +} + +-(void)deleteDeviceRequsetSus{ + [self deleteHotBarInfo]; +} + +-(void)clickBack{ + [self.navigationController popToRootViewControllerAnimated:YES]; + [self.navigationController.navigationBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault]; +} + +-(void)shezhiMingCheng{ + IfishHotBarModifyNameVc*mVc=[[IfishHotBarModifyNameVc alloc]init]; + mVc.devicemodel=self.devicemodel; + [self.navigationController pushViewController:mVc animated:YES]; +} + +#pragma mark------请求服务器------- + +-(void)setHeigh:(NSString*)h andW:(NSString*)w andLong:(NSString*)l{ + // 参数名称 参数类型 是否必须 说明描述 + // heaterId Integer 是 保存信息此字段为空 + // 修改信息此字段有值 + // heaterMacAddress String 是 加热棒mac地址 + // heaterVolume String 是 鱼缸容积 + // heaterLong String 是 鱼缸长 + // heaterWidth String 是 鱼缸宽 + // heaterHeight String 是 鱼缸高 + // heaterCycle String 是 换水提醒周期 + // c String 是 提醒时间 + if ([l isEqualToString:@""]) { + [self.view makeToast:@"请输入鱼缸长"]; + return; + }else if ([w isEqualToString:@""]){ + [self.view makeToast:@"请输入鱼缸宽"]; + return; + }else if([h isEqualToString:@""]) + { + [self.view makeToast:@"请输入鱼缸高"]; + return; + } + NSString*v=@""; + NSString*r=@""; + NSString*c=@""; + NSString*heaterId=@""; + if (self.vo.heater) { + v=self.vo.heater.heaterVolume; + c=self.vo.heater.heaterCycle; + r=self.vo.heater.heaterReminderTime; + heaterId=self.vo.heater.heaterId; + } + + NSDictionary*para=@{ + @"heaterId":heaterId, + @"heaterMacAddress":self.devicemodel.macAddress, + @"heaterVolume":v, + @"heaterLong":l, + @"heaterWidth":w, + @"heaterHeight":h, + @"heaterCycle":c, + @"heaterRemindTime":r + }; + [SVProgressHUD showWithMaskType:SVProgressHUDMaskTypeBlack]; + [AFHttpTool requestWihtMethod:RequestMethodTypePost url:SaveHotBarInfo params:para success:^(id response) { + NSLog(@"-----------%@",response); + NSDictionary*dict=[NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableContainers error:nil]; + NSString*result=dict[@"result"]; + if ([result integerValue]==100) { + // self.vo=[IfishHotBarVo mj_objectWithKeyValues:dict[@"data"]]; + [SVProgressHUD dismiss]; + [self showLableAction:@"修改成功"]; + } + } failure:^(NSError *err) { + + }]; +} + + +-(void)deleteHotBarInfo{ + + NSDictionary*para=@{ + @"heaterMacAddress":self.devicemodel.macAddress + }; + [AFHttpTool requestWihtMethod:RequestMethodTypePost url:DeleteHotBar params:para success:^(id response) { + NSLog(@"-----------%@",response); + NSDictionary*dict=[NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableContainers error:nil]; + NSString*result=dict[@"result"]; + if ([result integerValue]==100) { + // self.vo=[IfishHotBarVo mj_objectWithKeyValues:dict[@"data"]]; + [self.view makeToast:@"删除成功"]; + + }else{ + [self.view makeToast:@"删除失败"]; + } + //发送删除消息 + //重置数据库 + NSArray*deviceArry=[[DataCenter defaultDtacenter]valueForKey:@"deviceInfo"]; + NSMutableArray *newArr = [NSMutableArray arrayWithArray:deviceArry]; + + for (DeviceModel *model in deviceArry) { + + if ([model.deviceId isEqual:self.devicemodel.deviceId]) { + + [newArr removeObject:model]; + + } + + } + + [[DataCenter defaultDtacenter] setValue: newArr forKey:@"deviceInfo"]; + + if ([newArr count]==0) { + + NSArray *cameraArr= [[DataCenter defaultDtacenter] valueForKey:@"cameraArr"]; + if ([cameraArr count]!=0) { + [[Socketsingleton sharedInstance] cutOffSocket]; + }else{ + //两种设备都 + [[Socketsingleton sharedInstance] cutOffSocket]; + + } + + } + [self.navigationController popViewControllerAnimated:YES]; + } failure:^(NSError *err) { + [self.view makeToast:@"删除失败"]; + }]; +} + + + +-(void)getHotBarInfo{ + NSDictionary*para=@{@"heaterMacAddress":self.devicemodel.macAddress}; + [SVProgressHUD showWithMaskType:SVProgressHUDMaskTypeBlack]; + [AFHttpTool requestWihtMethod:RequestMethodTypePost url:GetHotBarInfo params:para success:^(id response) { + NSLog(@"-----------%@",response); + NSDictionary*dict=[NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableContainers error:nil]; + NSString*result=dict[@"result"]; + [SVProgressHUD dismiss]; + if ([result integerValue]==100) { + self.vo=[IfishHotBarVo mj_objectWithKeyValues:dict[@"data"]]; + + if (self.vo.phs.count>0) { + NSDate *curDate = [NSDate dateWithTimeInterval:self.curDay*60*60*-24 sinceDate:[NSDate date]]; + NSDateFormatter *dateFormatter=[[NSDateFormatter alloc]init];//创建一个日期格式化器 + dateFormatter.dateFormat=@"yyyy-MM-dd";//指定转date得日期格式化形式 + + NSLog(@"%@",[dateFormatter stringFromDate:curDate]);//2015-11-20 08:24:04 + NSString*curDateStr=[dateFormatter stringFromDate:curDate]; + self.historyView.curdateStr=curDateStr; + self.historyView.datas=self.vo.phs; + self.historyView.hidden=YES; + } + + IfishHotBarVo*vo=self.datas[1]; + if (self.vo.heater.heaterVolume.length) { + vo.title=[NSString stringWithFormat:@"鱼缸容量 %@L",self.vo.heater.heaterVolume]; + vo.subTitle=[NSString stringWithFormat:@"推荐流量:%.1fL--%.1fL",[self.vo.heater.heaterVolume intValue]*1.5,[self.vo.heater.heaterVolume intValue]*2.0]; + } + IfishHotBarVo*vo1=self.datas[4]; + if (self.vo.heater.heaterCycle.length) { + if (self.vo.heater.heaterReminderTime.length) { + vo1.title=[NSString stringWithFormat:@"换水周期 %@天 %@:00",self.vo.heater.heaterCycle,self.vo.heater.heaterReminderTime]; + }else{ + vo1.title=[NSString stringWithFormat:@"换水周期 %@天",self.vo.heater.heaterCycle]; + } + + } + + [self.mainTableView reloadData]; + }else{ + [SVProgressHUD showInfoWithStatus:@"暂无数据"]; + } + } failure:^(NSError *err) { + [SVProgressHUD dismiss]; + [SVProgressHUD showInfoWithStatus:@"网络错误,请稍后"]; + }]; +} + + -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ return self.datas.count; @@ -117,11 +489,267 @@ -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ if (indexPath.row==3) { self.historyView.hidden=NO; - }else{ - [self changeWaterView]; - self.changeWaterView.viewType=indexPath.row; +// self.historyView.datas=self.vo.phs; + }else if (indexPath.row==2){ + } + else{ +// [self wenduRequest]; + [self changeWaterView]; + self.changeWaterView.hotVo=self.vo; + self.changeWaterView.viewType=indexPath.row; + + } +} + + + +#pragma mark----socket返回---- + +-(void)ifishDeviceLogInFail{ +// self.mainTableView.userInteractionEnabled=NO; +} + +-(void)socketDidGetBackmsgData:(NSData *)data onsoket:(AsyncSocket *)sock{ + self.mainTableView.userInteractionEnabled=YES; + NSLog(@"TwoControlView收到服务器的回执--->%@",data); + NSLog(@"TwoControlView收到服务器的回执--->%@",[NSThread currentThread]); + + NSString*string1=[dataContorl dataToHexString:data]; + NSLog(@"TwoControlView收到服务器的回执--->%@",string1); + NSString*functionCode=[string1 substringWithRange:NSMakeRange(2, 2)]; + if ([functionCode isEqualToString:@"08"]) { + [self updateUiWithInfo:string1]; + }else if([functionCode isEqualToString:@"05"]){ +// [self setHeatTeapWith:self.vo.heaterNum]; + }else if([functionCode isEqualToString:@"0e"]){ + [self setTeampletureWithUp:self.vo.upTeamp andDown:self.vo.downTeamp andHnum:0 andWarmC:self.vo.wornCode]; + }else if([functionCode isEqualToString:@"06"]){ + [self updateUiWithInfo:string1]; + [self endRefreshing]; + } +} + +-(void)updateUiWithInfo:(NSString*)info{ + NSString*templeture=[info substringWithRange:NSMakeRange(36, 4)]; + // templeture=[NSString stringWithFormat:@"0x%@",templeture]; + UInt64 temp=[dataContorl hexToTen:templeture]; + float tempFloat=temp*0.1; +// self.templetrueLable.text=[NSString stringWithFormat:@"%llu°c",temp]; + self.header.degreeLable.text=[NSString stringWithFormat:@"%0.1f°c",tempFloat]; + //流量 46 + NSString*ph=[info substringWithRange:NSMakeRange(46, 4)]; + UInt64 phV=[dataContorl hexToTen:ph]; + IfishHotBarVo*vo2=self.datas[2]; +// phV=0; + vo2.phv=phV; + vo2.title=[NSString stringWithFormat:@"水循环 %lluL",phV]; + if (phV<=120) { + vo2.subTitle=@"流量警告:加热器停止加热,进入保护状态"; + }else{ + vo2.subTitle=@""; + } + + self.vo.heaterNum=[info substringWithRange:NSMakeRange(40, 4)]; + UInt64 heaterNum= [dataContorl hexToTen:self.vo.heaterNum]; + float num=heaterNum*1.0; + if (heaterNum>100) { + num=heaterNum*0.1; + } + self.vo.heaterNum=[NSString stringWithFormat:@"%f",num]; + + IfishHotBarVo*vo=self.datas[0]; + vo.title=[NSString stringWithFormat:@"设置温度 %.1f°c",[self.vo.heaterNum floatValue]]; + + + self.vo.wornCode=[info substringWithRange:NSMakeRange(44, 2)]; + // self.vo.wornCode=[NSString stringWithFormat:@"%llu",[dataContorl hexToTen:self.vo.wornCode]]; + + self.vo.upTeamp=[info substringWithRange:NSMakeRange(54, 4)]; + self.vo.upTeamp=[NSString stringWithFormat:@"%f",[dataContorl hexToTen:self.vo.upTeamp]*0.1]; + + self.vo.downTeamp=[info substringWithRange:NSMakeRange(50, 4)]; + self.vo.downTeamp=[NSString stringWithFormat:@"%f",[dataContorl hexToTen:self.vo.downTeamp]*0.1]; + + + + [self.mainTableView reloadData]; + +} + + +#pragma mark----UDP----- + + +// +//数据包头(15字节) 1 "发送消息类型填充00,回复类型填充01 +//" +//1 功能码 +//6 发送方MAC地址 +//6 接收方MAC地址 +//1 消息长度,包长度(15+*的长度) + +// +//设置报警温度指令(22字节) 15 数据包头 +//1 开启关闭报警,00关,01开 +//2 最低报警温度,关闭报警时传0 +//2 最高报警温度,关闭报警时传0 +//2 CRC16校验码 +-(void)setTeampleture{ + if (!self.vo.heater.heaterCycle||!self.vo.heater.heaterReminderTime) { + return; + } + self.vo.heater.heaterCycle=[self.vo.heater.heaterCycle stringByReplacingOccurrencesOfString:@"天" withString:@""]; + self.vo.heater.heaterReminderTime=[self.vo.heater.heaterReminderTime stringByReplacingOccurrencesOfString:@":00" withString:@""]; + NSString*longNum=@""; + NSString*heaterWidth=@""; + NSString*heaterHeight=@""; + NSString*heaterId=@""; + NSString*heaterVolume=@""; + if (self.vo.heater) { + longNum=self.vo.heater.heaterLong; + heaterWidth=self.vo.heater.heaterWidth; + heaterHeight=self.vo.heater.heaterHeight; + heaterId=self.vo.heater.heaterId; + heaterVolume=self.vo.heater.heaterVolume; + } + + NSDictionary*para=@{ + @"heaterId":heaterId, + @"heaterMacAddress":self.devicemodel.macAddress, + @"heaterVolume":heaterVolume, + @"heaterLong":longNum, + @"heaterWidth":heaterWidth, + @"heaterHeight":heaterHeight, + @"heaterCycle":self.vo.heater.heaterCycle, + @"heaterReminderTime":self.vo.heater.heaterReminderTime + }; + [AFHttpTool requestWihtMethod:RequestMethodTypePost url:SaveHotBarInfo params:para success:^(id response) { + NSLog(@"-----------%@",response); + NSDictionary*dict=[NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableContainers error:nil]; + NSString*result=dict[@"result"]; + if ([result integerValue]==100) { + // self.vo=[IfishHotBarVo mj_objectWithKeyValues:dict[@"data"]]; + [self showLableAction:@"修改成功"]; + } + } failure:^(NSError *err) { + + }]; +} + + +#pragma mark-----打开开关---- +-(void)clickWormCode:(NSString *)code{ + IfishHotBarPackegeVo*pvo=[[IfishHotBarPackegeVo alloc]init]; + + pvo.msgType=@"00"; + pvo.funcCode=@"05"; + pvo.sendAdr=self.devicemodel.macAddress; + pvo.reciceAdr=self.devicemodel.macAddress; + pvo.lenth=@"16"; + + pvo.warnCode=code; + + pvo.downTeamptrue=@"0000"; + pvo.upTeamptrue=@"0000"; + + + + + pvo.crcCode=@"0000"; + + + NSString*stateString=[pvo description]; + + NSData*selctorData=[dataContorl stringToHexData:stateString]; + [[Socketsingleton sharedInstance].clientSocket writeData:selctorData withTimeout:-1 tag:0]; + [[Socketsingleton sharedInstance].clientSocket readDataWithTimeout:-1 tag:0]; +} + +-(void)setTeampletureWithUp:(NSString*)up andDown:(NSString*)down andHnum:(NSString*)num andWarmC:(NSString*)code{ + if(!up||!down){ +// [self.view makeToast:@"请选择最高温度或最低温度"]; + [self setHeatTeapWith:num]; + return; + } + IfishHotBarPackegeVo*pvo=[[IfishHotBarPackegeVo alloc]init]; + + pvo.msgType=@"00"; + pvo.funcCode=@"05"; + pvo.sendAdr=self.devicemodel.macAddress; + pvo.reciceAdr=self.devicemodel.macAddress; + pvo.lenth=@"16"; + + pvo.warnCode=code; + + if([code isEqualToString:@"00"]){ + pvo.downTeamptrue=@"0000"; + pvo.upTeamptrue=@"0000"; + }else{ + pvo.warnCode=@"02"; + pvo.downTeamptrue=[dataContorl ToHex:down.longLongValue*10]; + if (pvo.downTeamptrue.length<4) { + pvo.downTeamptrue=[dataContorl leftAddZero:4 andStr:pvo.downTeamptrue]; + } + pvo.upTeamptrue=[dataContorl ToHex:up.longLongValue*10]; + if (pvo.upTeamptrue.length<4) { + pvo.upTeamptrue=[dataContorl leftAddZero:4 andStr:pvo.upTeamptrue]; + } + } + + + + pvo.crcCode=@"0000"; + + + NSString*stateString=[pvo description]; + + NSData*selctorData=[dataContorl stringToHexData:stateString]; + self.vo.heaterNum=num; + [[Socketsingleton sharedInstance].clientSocket writeData:selctorData withTimeout:-1 tag:0]; + [[Socketsingleton sharedInstance].clientSocket readDataWithTimeout:-1 tag:0]; +// [self showLableAction:@"发送成功"]; + } + +//"设置加热温度 +//(19字节)" 15 数据包头 +//2 加热温度,如设置为27.1℃0x10F转成16进制则为0x10F +//2 CRC16校验码 + +-(void)setHeatTeapWith:(NSString*)num{ + if(!num){ +// [self.view makeToast:@"请选择加热温度"]; + + // self.vo.wornCode=[NSString stringWithFormat:@"%llu",[dataContorl hexToTen:self.vo.wornCode]]; + + [self setTeampletureWithUp:self.vo.upTeamp andDown:self.vo.downTeamp andHnum:0 andWarmC:self.vo.wornCode]; + return; + } + IfishPackageHeaderVo*header=[[IfishPackageHeaderVo alloc]init]; + header.msgType=@"00"; + header.funcCode=@"0e"; + header.sendAdr=self.devicemodel.macAddress; + header.reciceAdr=self.devicemodel.macAddress; + header.lenth=@"13"; + +// NSString*str=[NSString stringWithFormat:@"%@0",num]; + + NSString*crc=@"0000"; + num=[dataContorl ToHex:num.longLongValue*10]; + if (num.length<4) { + num=[dataContorl leftAddZero:4 andStr:num]; + } + NSString*stateString=[NSString stringWithFormat:@"%@%@%@",[header getHeader],num,crc]; + + NSData*selctorData=[dataContorl stringToHexData:stateString]; +[[Socketsingleton sharedInstance].clientSocket writeData:selctorData withTimeout:-1 tag:0]; + [[Socketsingleton sharedInstance].clientSocket readDataWithTimeout:-1 tag:0]; + [self showLableAction:@"发送成功"]; + +} + + @end diff --git a/Ifish/controllers/HotBar/IfishHotBarVc.xib b/Ifish/controllers/HotBar/IfishHotBarVc.xib index 4977a9c..fe66d71 100644 --- a/Ifish/controllers/HotBar/IfishHotBarVc.xib +++ b/Ifish/controllers/HotBar/IfishHotBarVc.xib @@ -11,7 +11,8 @@ - + + @@ -20,22 +21,12 @@ - - - - - - - + - - - - - + - - - - + - - - - diff --git a/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Categories/IQNSArray+Sort.h b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Categories/IQNSArray+Sort.h new file mode 100755 index 0000000..4d7c374 --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Categories/IQNSArray+Sort.h @@ -0,0 +1,47 @@ +// +// IQNSArray+Sort.h +// https://github.com/hackiftekhar/IQKeyboardManager +// Copyright (c) 2013-16 Iftekhar Qurashi. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import + +@class UIView; + +/** + UIView.subviews sorting category. + */ +@interface NSArray (IQ_NSArray_Sort) + +///-------------- +/// @name Sorting +///-------------- + +/** + Returns the array by sorting the UIView's by their tag property. + */ +@property (nonatomic, readonly, copy) NSArray<__kindof UIView*> * _Nonnull sortedArrayByTag; + +/** + Returns the array by sorting the UIView's by their tag property. + */ +@property (nonatomic, readonly, copy) NSArray<__kindof UIView*> * _Nonnull sortedArrayByPosition; + +@end diff --git a/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Categories/IQNSArray+Sort.m b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Categories/IQNSArray+Sort.m new file mode 100755 index 0000000..7ca0cdd --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Categories/IQNSArray+Sort.m @@ -0,0 +1,71 @@ +// +// IQNSArray+Sort.m +// https://github.com/hackiftekhar/IQKeyboardManager +// Copyright (c) 2013-16 Iftekhar Qurashi. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "IQNSArray+Sort.h" +#import "IQUIView+Hierarchy.h" + +#import + +@implementation NSArray (IQ_NSArray_Sort) + +- (NSArray*)sortedArrayByTag +{ + return [self sortedArrayUsingComparator:^NSComparisonResult(UIView *view1, UIView *view2) { + + if ([view1 respondsToSelector:@selector(tag)] && [view2 respondsToSelector:@selector(tag)]) + { + if ([view1 tag] < [view2 tag]) return NSOrderedAscending; + + else if ([view1 tag] > [view2 tag]) return NSOrderedDescending; + + else return NSOrderedSame; + } + else + return NSOrderedSame; + }]; +} + +- (NSArray*)sortedArrayByPosition +{ + return [self sortedArrayUsingComparator:^NSComparisonResult(UIView *view1, UIView *view2) { + + CGFloat x1 = CGRectGetMinX(view1.frame); + CGFloat y1 = CGRectGetMinY(view1.frame); + CGFloat x2 = CGRectGetMinX(view2.frame); + CGFloat y2 = CGRectGetMinY(view2.frame); + + if (y1 < y2) return NSOrderedAscending; + + else if (y1 > y2) return NSOrderedDescending; + + //Else both y are same so checking for x positions + else if (x1 < x2) return NSOrderedAscending; + + else if (x1 > x2) return NSOrderedDescending; + + else return NSOrderedSame; + }]; +} + + +@end diff --git a/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Categories/IQUIScrollView+Additions.h b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Categories/IQUIScrollView+Additions.h new file mode 100755 index 0000000..4e3c028 --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Categories/IQUIScrollView+Additions.h @@ -0,0 +1,40 @@ +// +// IQUIScrollView+Additions.h +// https://github.com/hackiftekhar/IQKeyboardManager +// Copyright (c) 2013-16 Iftekhar Qurashi. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import + + +@interface UIScrollView (Additions) + +/** + If YES, then scrollview will ignore scrolling (simply not scroll it) for adjusting textfield position. Default is NO. + */ +@property(nonatomic, assign) BOOL shouldIgnoreScrollingAdjustment; + +/** + Restore scrollViewContentOffset when resigning from scrollView. Default is NO. + */ +@property(nonatomic, assign) BOOL shouldRestoreScrollViewContentOffset; + + +@end diff --git a/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Categories/IQUIScrollView+Additions.m b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Categories/IQUIScrollView+Additions.m new file mode 100755 index 0000000..bfe1fab --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Categories/IQUIScrollView+Additions.m @@ -0,0 +1,53 @@ +// +// IQUIScrollView+Additions.m +// https://github.com/hackiftekhar/IQKeyboardManager +// Copyright (c) 2013-16 Iftekhar Qurashi. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "IQUIScrollView+Additions.h" +#import + +@implementation UIScrollView (Additions) + +-(void)setShouldIgnoreScrollingAdjustment:(BOOL)shouldIgnoreScrollingAdjustment +{ + objc_setAssociatedObject(self, @selector(shouldIgnoreScrollingAdjustment), @(shouldIgnoreScrollingAdjustment), OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +-(BOOL)shouldIgnoreScrollingAdjustment +{ + NSNumber *shouldIgnoreScrollingAdjustment = objc_getAssociatedObject(self, @selector(shouldIgnoreScrollingAdjustment)); + + return [shouldIgnoreScrollingAdjustment boolValue]; +} + +-(void)setShouldRestoreScrollViewContentOffset:(BOOL)shouldRestoreScrollViewContentOffset +{ + objc_setAssociatedObject(self, @selector(shouldRestoreScrollViewContentOffset), @(shouldRestoreScrollViewContentOffset), OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +-(BOOL)shouldRestoreScrollViewContentOffset +{ + NSNumber *shouldRestoreScrollViewContentOffset = objc_getAssociatedObject(self, @selector(shouldRestoreScrollViewContentOffset)); + + return [shouldRestoreScrollViewContentOffset boolValue]; +} + +@end diff --git a/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Categories/IQUITextFieldView+Additions.h b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Categories/IQUITextFieldView+Additions.h new file mode 100755 index 0000000..8da65e3 --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Categories/IQUITextFieldView+Additions.h @@ -0,0 +1,62 @@ +// +// IQUITextFieldView+Additions.h +// https://github.com/hackiftekhar/IQKeyboardManager +// Copyright (c) 2013-16 Iftekhar Qurashi. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import +#import "IQKeyboardManagerConstants.h" + +/** + UIView category for managing UITextField/UITextView + */ + +@interface UIView (Additions) + +/** + To set customized distance from keyboard for textField/textView. Can't be less than zero + */ +@property(nonatomic, assign) CGFloat keyboardDistanceFromTextField; + +/** + If shouldIgnoreSwitchingByNextPrevious is YES then library will ignore this textField/textView while moving to other textField/textView using keyboard toolbar next previous buttons. Default is NO + */ +@property(nonatomic, assign) BOOL ignoreSwitchingByNextPrevious; + +///** +// Override Enable/disable managing distance between keyboard and textField behaviour for this particular textField. +// */ +//@property(nonatomic, assign) IQEnableMode enableMode; + +/** + Override resigns Keyboard on touching outside of UITextField/View behaviour for this particular textField. + */ +@property(nonatomic, assign) IQEnableMode shouldResignOnTouchOutsideMode; + +@end + +///------------------------------------------- +/// @name Custom KeyboardDistanceFromTextField +///------------------------------------------- + +/** + Uses default keyboard distance for textField. + */ +extern CGFloat const kIQUseDefaultKeyboardDistance; diff --git a/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Categories/IQUITextFieldView+Additions.m b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Categories/IQUITextFieldView+Additions.m new file mode 100755 index 0000000..d17bfaf --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Categories/IQUITextFieldView+Additions.m @@ -0,0 +1,90 @@ +// +// IQUITextFieldView+Additions.m +// https://github.com/hackiftekhar/IQKeyboardManager +// Copyright (c) 2013-16 Iftekhar Qurashi. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "IQUITextFieldView+Additions.h" +#import + +@implementation UIView (Additions) + +-(void)setKeyboardDistanceFromTextField:(CGFloat)keyboardDistanceFromTextField +{ + //Can't be less than zero. Minimum is zero. + keyboardDistanceFromTextField = MAX(keyboardDistanceFromTextField, 0); + + objc_setAssociatedObject(self, @selector(keyboardDistanceFromTextField), @(keyboardDistanceFromTextField), OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +-(CGFloat)keyboardDistanceFromTextField +{ + NSNumber *keyboardDistanceFromTextField = objc_getAssociatedObject(self, @selector(keyboardDistanceFromTextField)); + + return (keyboardDistanceFromTextField)?[keyboardDistanceFromTextField floatValue]:kIQUseDefaultKeyboardDistance; +} + +-(void)setIgnoreSwitchingByNextPrevious:(BOOL)ignoreSwitchingByNextPrevious +{ + objc_setAssociatedObject(self, @selector(ignoreSwitchingByNextPrevious), @(ignoreSwitchingByNextPrevious), OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +-(BOOL)ignoreSwitchingByNextPrevious +{ + NSNumber *ignoreSwitchingByNextPrevious = objc_getAssociatedObject(self, @selector(ignoreSwitchingByNextPrevious)); + + return [ignoreSwitchingByNextPrevious boolValue]; +} + +//-(void)setEnableMode:(IQEnableMode)enableMode +//{ +// objc_setAssociatedObject(self, @selector(enableMode), @(enableMode), OBJC_ASSOCIATION_RETAIN_NONATOMIC); +//} +// +//-(IQEnableMode)enableMode +//{ +// NSNumber *enableMode = objc_getAssociatedObject(self, @selector(enableMode)); +// +// return [enableMode unsignedIntegerValue]; +//} + +-(void)setShouldResignOnTouchOutsideMode:(IQEnableMode)shouldResignOnTouchOutsideMode +{ + objc_setAssociatedObject(self, @selector(shouldResignOnTouchOutsideMode), @(shouldResignOnTouchOutsideMode), OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +-(IQEnableMode)shouldResignOnTouchOutsideMode +{ + NSNumber *shouldResignOnTouchOutsideMode = objc_getAssociatedObject(self, @selector(shouldResignOnTouchOutsideMode)); + + return [shouldResignOnTouchOutsideMode unsignedIntegerValue]; +} + +@end + +///------------------------------------ +/// @name keyboardDistanceFromTextField +///------------------------------------ + +/** + Uses default keyboard distance for textField. + */ +CGFloat const kIQUseDefaultKeyboardDistance = CGFLOAT_MAX; + diff --git a/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Categories/IQUIView+Hierarchy.h b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Categories/IQUIView+Hierarchy.h new file mode 100755 index 0000000..9598fc6 --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Categories/IQUIView+Hierarchy.h @@ -0,0 +1,134 @@ +// +// IQUIView+Hierarchy.h +// https://github.com/hackiftekhar/IQKeyboardManager +// Copyright (c) 2013-16 Iftekhar Qurashi. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import +#import +#import "IQKeyboardManagerConstants.h" + +@class UICollectionView, UIScrollView, UITableView, UISearchBar, NSArray; + +/** + UIView hierarchy category. + */ +@interface UIView (IQ_UIView_Hierarchy) + +///---------------------- +/// @name viewControllers +///---------------------- + +/** + Returns the UIViewController object that manages the receiver. + */ +@property (nullable, nonatomic, readonly, strong) UIViewController *viewContainingController; + +/** + Returns the topMost UIViewController object in hierarchy. + */ +@property (nullable, nonatomic, readonly, strong) UIViewController *topMostController; + +/** + Returns the UIViewController object that is actually the parent of this object. Most of the time it's the viewController object which actually contains it, but result may be different if it's viewController is added as childViewController of another viewController. + */ +@property (nullable, nonatomic, readonly, strong) UIViewController *parentContainerViewController; + +///----------------------------------- +/// @name Superviews/Subviews/Siglings +///----------------------------------- + +/** + Returns the superView of provided class type. + */ +-(nullable UIView*)superviewOfClassType:(nonnull Class)classType; + +/** + Returns all siblings of the receiver which canBecomeFirstResponder. + */ +@property (nonnull, nonatomic, readonly, copy) NSArray<__kindof UIView*> *responderSiblings; + +/** + Returns all deep subViews of the receiver which canBecomeFirstResponder. + */ +@property (nonnull, nonatomic, readonly, copy) NSArray<__kindof UIView*> *deepResponderViews; + +///------------------------- +/// @name Special TextFields +///------------------------- + +/** + Returns searchBar if receiver object is UISearchBarTextField, otherwise return nil. + */ +@property (nullable, nonatomic, readonly) UISearchBar *searchBar; + +/** + Returns YES if the receiver object is UIAlertSheetTextField, otherwise return NO. + */ +@property (nonatomic, getter=isAlertViewTextField, readonly) BOOL alertViewTextField; + +///---------------- +/// @name Transform +///---------------- + +/** + Returns current view transform with respect to the 'toView'. + */ +-(CGAffineTransform)convertTransformToView:(nullable UIView*)toView; + +///----------------- +/// @name Hierarchy +///----------------- + +/** + Returns a string that represent the information about it's subview's hierarchy. You can use this method to debug the subview's positions. + */ +@property (nonnull, nonatomic, readonly, copy) NSString *subHierarchy; + +/** + Returns an string that represent the information about it's upper hierarchy. You can use this method to debug the superview's positions. + */ +@property (nonnull, nonatomic, readonly, copy) NSString *superHierarchy; + +/** + Returns an string that represent the information about it's frame positions. You can use this method to debug self positions. + */ +@property (nonnull, nonatomic, readonly, copy) NSString *debugHierarchy; + +@end + + +@interface UIViewController (IQ_UIView_Hierarchy) + +-(nullable UIViewController*)parentIQContainerViewController; + +@end + +/** + NSObject category to used for logging purposes + */ +@interface NSObject (IQ_Logging) + +/** + Short description for logging purpose. + */ +@property (nonnull, nonatomic, readonly, copy) NSString *_IQDescription; + +@end diff --git a/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Categories/IQUIView+Hierarchy.m b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Categories/IQUIView+Hierarchy.m new file mode 100755 index 0000000..54a5433 --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Categories/IQUIView+Hierarchy.m @@ -0,0 +1,437 @@ +// +// IQUIView+Hierarchy.m +// https://github.com/hackiftekhar/IQKeyboardManager +// Copyright (c) 2013-16 Iftekhar Qurashi. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "IQUIView+Hierarchy.h" +#import "IQUITextFieldView+Additions.h" + +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import + +#import + +#import "IQNSArray+Sort.h" + +@implementation UIView (IQ_UIView_Hierarchy) + +-(UIViewController*)viewContainingController +{ + UIResponder *nextResponder = self; + + do + { + nextResponder = [nextResponder nextResponder]; + + if ([nextResponder isKindOfClass:[UIViewController class]]) + return (UIViewController*)nextResponder; + + } while (nextResponder); + + return nil; +} + +-(UIViewController *)topMostController +{ + NSMutableArray *controllersHierarchy = [[NSMutableArray alloc] init]; + + UIViewController *topController = self.window.rootViewController; + + if (topController) + { + [controllersHierarchy addObject:topController]; + } + + while ([topController presentedViewController]) { + + topController = [topController presentedViewController]; + [controllersHierarchy addObject:topController]; + } + + UIViewController *matchController = [self viewContainingController]; + + while (matchController && [controllersHierarchy containsObject:matchController] == NO) + { + do + { + matchController = (UIViewController*)[matchController nextResponder]; + + } while (matchController && [matchController isKindOfClass:[UIViewController class]] == NO); + } + + return matchController; +} + +-(UIViewController *)parentContainerViewController +{ + UIViewController *matchController = [self viewContainingController]; + + UIViewController *parentContainerViewController = nil; + + if (matchController.navigationController) + { + UINavigationController *navController = matchController.navigationController; + + while (navController.navigationController) { + navController = navController.navigationController; + } + + UIViewController *parentController = navController; + + UIViewController *parentParentController = parentController.parentViewController; + + while (parentParentController && + ([parentParentController isKindOfClass:[UINavigationController class]] == NO && + [parentParentController isKindOfClass:[UITabBarController class]] == NO && + [parentParentController isKindOfClass:[UISplitViewController class]] == NO)) + { + parentController = parentParentController; + parentParentController = parentController.parentViewController; + } + + if (navController == parentController) + { + parentContainerViewController = navController.topViewController; + } + else + { + parentContainerViewController = parentController; + } + } + else if (matchController.tabBarController) + { + if ([matchController.tabBarController.selectedViewController isKindOfClass:[UINavigationController class]]) + { + parentContainerViewController = [(UINavigationController*)matchController.tabBarController.selectedViewController topViewController]; + } + else + { + parentContainerViewController = matchController.tabBarController.selectedViewController; + } + } + else + { + UIViewController *matchParentController = matchController.parentViewController; + + while (matchParentController && + ([matchParentController isKindOfClass:[UINavigationController class]] == NO && + [matchParentController isKindOfClass:[UITabBarController class]] == NO && + [matchParentController isKindOfClass:[UISplitViewController class]] == NO)) + { + matchController = matchParentController; + matchParentController = matchController.parentViewController; + } + + parentContainerViewController = matchController; + } + + UIViewController *finalController = [parentContainerViewController parentIQContainerViewController] ?: parentContainerViewController; + + return finalController; +} + +-(UIView*)superviewOfClassType:(Class)classType +{ + UIView *superview = self.superview; + + while (superview) + { + if ([superview isKindOfClass:classType]) + { + //If it's UIScrollView, then validating for special cases + if ([superview isKindOfClass:[UIScrollView class]]) + { + NSString *classNameString = NSStringFromClass([superview class]); + + // If it's not UITableViewWrapperView class, this is internal class which is actually manage in UITableview. The speciality of this class is that it's superview is UITableView. + // If it's not UITableViewCellScrollView class, this is internal class which is actually manage in UITableviewCell. The speciality of this class is that it's superview is UITableViewCell. + //If it's not _UIQueuingScrollView class, actually we validate for _ prefix which usually used by Apple internal classes + if ([superview.superview isKindOfClass:[UITableView class]] == NO && + [superview.superview isKindOfClass:[UITableViewCell class]] == NO && + [classNameString hasPrefix:@"_"] == NO) + { + return superview; + } + } + else + { + return superview; + } + } + + superview = superview.superview; + } + + return nil; +} + +-(BOOL)_IQcanBecomeFirstResponder +{ + BOOL _IQcanBecomeFirstResponder = NO; + + if ([self isKindOfClass:[UITextField class]]) + { + _IQcanBecomeFirstResponder = [(UITextField*)self isEnabled]; + } + else if ([self isKindOfClass:[UITextView class]]) + { + _IQcanBecomeFirstResponder = [(UITextView*)self isEditable]; + } + + if (_IQcanBecomeFirstResponder == YES) + { + _IQcanBecomeFirstResponder = ([self isUserInteractionEnabled] && ![self isHidden] && [self alpha]!=0.0 && ![self isAlertViewTextField] && !self.searchBar); + } + + return _IQcanBecomeFirstResponder; +} + +- (NSArray*)responderSiblings +{ + // Getting all siblings + NSArray *siblings = self.superview.subviews; + + //Array of (UITextField/UITextView's). + NSMutableArray *tempTextFields = [[NSMutableArray alloc] init]; + + for (UIView *textField in siblings) + if ((textField == self || textField.ignoreSwitchingByNextPrevious == NO) && [textField _IQcanBecomeFirstResponder]) + [tempTextFields addObject:textField]; + + return tempTextFields; +} + +- (NSArray*)deepResponderViews +{ + NSMutableArray *textFields = [[NSMutableArray alloc] init]; + + for (UIView *textField in self.subviews) + { + if ((textField == self || textField.ignoreSwitchingByNextPrevious == NO) && [textField _IQcanBecomeFirstResponder]) + { + [textFields addObject:textField]; + } + + //Sometimes there are hidden or disabled views and textField inside them still recorded, so we added some more validations here (Bug ID: #458) + //Uncommented else (Bug ID: #625) + if (textField.subviews.count && [textField isUserInteractionEnabled] && ![textField isHidden] && [textField alpha]!=0.0) + { + [textFields addObjectsFromArray:[textField deepResponderViews]]; + } + } + + //subviews are returning in incorrect order. Sorting according the frames 'y'. + return [textFields sortedArrayUsingComparator:^NSComparisonResult(UIView *view1, UIView *view2) { + + CGRect frame1 = [view1 convertRect:view1.bounds toView:self]; + CGRect frame2 = [view2 convertRect:view2.bounds toView:self]; + + CGFloat x1 = CGRectGetMinX(frame1); + CGFloat y1 = CGRectGetMinY(frame1); + CGFloat x2 = CGRectGetMinX(frame2); + CGFloat y2 = CGRectGetMinY(frame2); + + if (y1 < y2) return NSOrderedAscending; + + else if (y1 > y2) return NSOrderedDescending; + + //Else both y are same so checking for x positions + else if (x1 < x2) return NSOrderedAscending; + + else if (x1 > x2) return NSOrderedDescending; + + else return NSOrderedSame; + }]; + + return textFields; +} + +-(CGAffineTransform)convertTransformToView:(UIView*)toView +{ + if (toView == nil) + { + toView = self.window; + } + + CGAffineTransform myTransform = CGAffineTransformIdentity; + + //My Transform + { + UIView *superView = [self superview]; + + if (superView) myTransform = CGAffineTransformConcat(self.transform, [superView convertTransformToView:nil]); + else myTransform = self.transform; + } + + CGAffineTransform viewTransform = CGAffineTransformIdentity; + + //view Transform + { + UIView *superView = [toView superview]; + + if (superView) viewTransform = CGAffineTransformConcat(toView.transform, [superView convertTransformToView:nil]); + else if (toView) viewTransform = toView.transform; + } + + return CGAffineTransformConcat(myTransform, CGAffineTransformInvert(viewTransform)); +} + + +- (NSInteger)depth +{ + NSInteger depth = 0; + + if ([self superview]) + { + depth = [[self superview] depth] + 1; + } + + return depth; +} + +- (NSString *)subHierarchy +{ + NSMutableString *debugInfo = [[NSMutableString alloc] initWithString:@"\n"]; + NSInteger depth = [self depth]; + + for (int counter = 0; counter < depth; counter ++) [debugInfo appendString:@"| "]; + + [debugInfo appendString:[self debugHierarchy]]; + + for (UIView *subview in self.subviews) + { + [debugInfo appendString:[subview subHierarchy]]; + } + + return debugInfo; +} + +- (NSString *)superHierarchy +{ + NSMutableString *debugInfo = [[NSMutableString alloc] init]; + + if (self.superview) + { + [debugInfo appendString:[self.superview superHierarchy]]; + } + else + { + [debugInfo appendString:@"\n"]; + } + + NSInteger depth = [self depth]; + + for (int counter = 0; counter < depth; counter ++) [debugInfo appendString:@"| "]; + + [debugInfo appendString:[self debugHierarchy]]; + + [debugInfo appendString:@"\n"]; + + return debugInfo; +} + +-(NSString *)debugHierarchy +{ + NSMutableString *debugInfo = [[NSMutableString alloc] init]; + + [debugInfo appendFormat:@"%@: ( %.0f, %.0f, %.0f, %.0f )",NSStringFromClass([self class]), CGRectGetMinX(self.frame), CGRectGetMinY(self.frame), CGRectGetWidth(self.frame), CGRectGetHeight(self.frame)]; + + if ([self isKindOfClass:[UIScrollView class]]) + { + UIScrollView *scrollView = (UIScrollView*)self; + [debugInfo appendFormat:@"%@: ( %.0f, %.0f )",NSStringFromSelector(@selector(contentSize)),scrollView.contentSize.width,scrollView.contentSize.height]; + } + + if (CGAffineTransformEqualToTransform(self.transform, CGAffineTransformIdentity) == false) + { + [debugInfo appendFormat:@"%@: %@",NSStringFromSelector(@selector(transform)),NSStringFromCGAffineTransform(self.transform)]; + } + + return debugInfo; +} + +-(UISearchBar *)searchBar +{ + UIResponder *searchBar = [self nextResponder]; + + while (searchBar) + { + if ([searchBar isKindOfClass:[UISearchBar class]]) + { + return (UISearchBar*)searchBar; + } + else if ([searchBar isKindOfClass:[UIViewController class]]) //If found viewcontroller but still not found UISearchBar then it's not the search bar textfield + { + break; + } + + searchBar = [searchBar nextResponder]; + } + + return nil; +} + +-(BOOL)isAlertViewTextField +{ + UIResponder *alertViewController = [self viewContainingController]; + + BOOL isAlertViewTextField = NO; + while (alertViewController && isAlertViewTextField == NO) + { + if ([alertViewController isKindOfClass:[UIAlertController class]]) + { + isAlertViewTextField = YES; + break; + } + + alertViewController = [alertViewController nextResponder]; + } + + return isAlertViewTextField; +} + +@end + +@implementation UIViewController (IQ_UIView_Hierarchy) + +-(nullable UIViewController*)parentIQContainerViewController +{ + return self; +} + +@end + +@implementation NSObject (IQ_Logging) + +-(NSString *)_IQDescription +{ + return [NSString stringWithFormat:@"<%@ %p>",NSStringFromClass([self class]),self]; +} + +@end diff --git a/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Categories/IQUIViewController+Additions.h b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Categories/IQUIViewController+Additions.h new file mode 100755 index 0000000..f7e9893 --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Categories/IQUIViewController+Additions.h @@ -0,0 +1,39 @@ +// +// IQUIViewController+Additions.h +// https://github.com/hackiftekhar/IQKeyboardManager +// Copyright (c) 2013-16 Iftekhar Qurashi. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import + +@class NSLayoutConstraint; + +@interface UIViewController (Additions) + +/** + Top/Bottom Layout constraint which help library to manage keyboardTextField distance + + @message Library is internally handle Safe Area in iOS11 if `canAdjustAdditionalSafeAreaInsets = YES` and there is no need to do any tweak if you already migrated to use Safe Area + + @deprecated Due to change in core-logic of handling distance between textField and keyboard distance, this layout contraint tweak is no longer needed and things will just work out of the box regardless of constraint pinned with safeArea/layoutGuide/superview. +*/ +@property(nullable, nonatomic, strong) IBOutlet NSLayoutConstraint *IQLayoutGuideConstraint __attribute__((deprecated("Due to change in core-logic of handling distance between textField and keyboard distance, this layout contraint tweak is no longer needed and things will just work out of the box regardless of constraint pinned with safeArea/layoutGuide/superview."))); + +@end diff --git a/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Categories/IQUIViewController+Additions.m b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Categories/IQUIViewController+Additions.m new file mode 100755 index 0000000..767d10a --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Categories/IQUIViewController+Additions.m @@ -0,0 +1,40 @@ +// +// IQUIViewController+Additions.m +// https://github.com/hackiftekhar/IQKeyboardManager +// Copyright (c) 2013-16 Iftekhar Qurashi. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "IQUIViewController+Additions.h" +#import +#import + +@implementation UIViewController (Additions) + +-(void)setIQLayoutGuideConstraint:(NSLayoutConstraint *)IQLayoutGuideConstraint +{ + objc_setAssociatedObject(self, @selector(IQLayoutGuideConstraint), IQLayoutGuideConstraint, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +-(NSLayoutConstraint *)IQLayoutGuideConstraint +{ + return objc_getAssociatedObject(self, @selector(IQLayoutGuideConstraint)); +} + +@end diff --git a/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Constants/IQKeyboardManagerConstants.h b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Constants/IQKeyboardManagerConstants.h new file mode 100755 index 0000000..548f16f --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Constants/IQKeyboardManagerConstants.h @@ -0,0 +1,156 @@ +// +// IQKeyboardManagerConstants.h +// https://github.com/hackiftekhar/IQKeyboardManager +// Copyright (c) 2013-16 Iftekhar Qurashi. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#ifndef IQKeyboardManagerConstants_h +#define IQKeyboardManagerConstants_h + +#import + +///----------------------------------- +/// @name IQAutoToolbarManageBehaviour +///----------------------------------- + +/** + `IQAutoToolbarBySubviews` + Creates Toolbar according to subview's hirarchy of Textfield's in view. + + `IQAutoToolbarByTag` + Creates Toolbar according to tag property of TextField's. + + `IQAutoToolbarByPosition` + Creates Toolbar according to the y,x position of textField in it's superview coordinate. + */ +typedef NS_ENUM(NSInteger, IQAutoToolbarManageBehaviour) { + IQAutoToolbarBySubviews, + IQAutoToolbarByTag, + IQAutoToolbarByPosition, +}; + +/** + `IQPreviousNextDisplayModeDefault` + Show NextPrevious when there are more than 1 textField otherwise hide. + + `IQPreviousNextDisplayModeAlwaysHide` + Do not show NextPrevious buttons in any case. + + `IQPreviousNextDisplayModeAlwaysShow` + Always show nextPrevious buttons, if there are more than 1 textField then both buttons will be visible but will be shown as disabled. + */ +typedef NS_ENUM(NSUInteger, IQPreviousNextDisplayMode) { + IQPreviousNextDisplayModeDefault, + IQPreviousNextDisplayModeAlwaysHide, + IQPreviousNextDisplayModeAlwaysShow, +}; + +/** + `IQEnableModeDefault` + Pick default settings. + + `IQEnableModeEnabled` + setting is enabled. + + `IQEnableModeDisabled` + setting is disabled. + */ +typedef NS_ENUM(NSUInteger, IQEnableMode) { + IQEnableModeDefault, + IQEnableModeEnabled, + IQEnableModeDisabled, +}; + +#endif + +/* + + /---------------------------------------------------------------------------------------------------\ + \---------------------------------------------------------------------------------------------------/ + | iOS NSNotification Mechanism | + /---------------------------------------------------------------------------------------------------\ + \---------------------------------------------------------------------------------------------------/ + + + ------------------------------------------------------------ + When UITextField become first responder + ------------------------------------------------------------ + - UITextFieldTextDidBeginEditingNotification (UITextField) + - UIKeyboardWillShowNotification + - UIKeyboardDidShowNotification + + ------------------------------------------------------------ + When UITextView become first responder + ------------------------------------------------------------ + - UIKeyboardWillShowNotification + - UITextViewTextDidBeginEditingNotification (UITextView) + - UIKeyboardDidShowNotification + + ------------------------------------------------------------ + When switching focus from UITextField to another UITextField + ------------------------------------------------------------ + - UITextFieldTextDidEndEditingNotification (UITextField1) + - UITextFieldTextDidBeginEditingNotification (UITextField2) + - UIKeyboardWillShowNotification + - UIKeyboardDidShowNotification + + ------------------------------------------------------------ + When switching focus from UITextView to another UITextView + ------------------------------------------------------------ + - UITextViewTextDidEndEditingNotification : (UITextView1) + - UIKeyboardWillShowNotification + - UITextViewTextDidBeginEditingNotification : (UITextView2) + - UIKeyboardDidShowNotification + + ------------------------------------------------------------ + When switching focus from UITextField to UITextView + ------------------------------------------------------------ + - UITextFieldTextDidEndEditingNotification (UITextField) + - UIKeyboardWillShowNotification + - UITextViewTextDidBeginEditingNotification (UITextView) + - UIKeyboardDidShowNotification + + ------------------------------------------------------------ + When switching focus from UITextView to UITextField + ------------------------------------------------------------ + - UITextViewTextDidEndEditingNotification (UITextView) + - UITextFieldTextDidBeginEditingNotification (UITextField) + - UIKeyboardWillShowNotification + - UIKeyboardDidShowNotification + + ------------------------------------------------------------ + When opening/closing UIKeyboard Predictive bar + ------------------------------------------------------------ + - UIKeyboardWillShowNotification + - UIKeyboardDidShowNotification + + ------------------------------------------------------------ + On orientation change + ------------------------------------------------------------ + - UIApplicationWillChangeStatusBarOrientationNotification + - UIKeyboardWillHideNotification + - UIKeyboardDidHideNotification + - UIApplicationDidChangeStatusBarOrientationNotification + - UIKeyboardWillShowNotification + - UIKeyboardDidShowNotification + - UIKeyboardWillShowNotification + - UIKeyboardDidShowNotification + + */ diff --git a/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Constants/IQKeyboardManagerConstantsInternal.h b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Constants/IQKeyboardManagerConstantsInternal.h new file mode 100755 index 0000000..2225174 --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Constants/IQKeyboardManagerConstantsInternal.h @@ -0,0 +1,30 @@ +// +// IQKeyboardManagerConstantsInternal.h +// https://github.com/hackiftekhar/IQKeyboardManager +// Copyright (c) 2013-16 Iftekhar Qurashi. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#ifndef IQKeyboardManagerConstantsInternal_h +#define IQKeyboardManagerConstantsInternal_h + + +#define IQ_IS_IOS10_OR_GREATER ([[NSProcessInfo processInfo] operatingSystemVersion].majorVersion >= 10) + +#endif diff --git a/Ifish/controllers/HotBar/Lib/IQKeyboardManager/IQKeyboardManager.h b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/IQKeyboardManager.h new file mode 100755 index 0000000..c6714e0 --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/IQKeyboardManager.h @@ -0,0 +1,368 @@ +// +// IQKeyboardManager.h +// https://github.com/hackiftekhar/IQKeyboardManager +// Copyright (c) 2013-16 Iftekhar Qurashi. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "IQKeyboardManagerConstants.h" +#import "IQUIView+IQKeyboardToolbar.h" +#import "IQPreviousNextView.h" +#import "IQUIViewController+Additions.h" +#import "IQKeyboardReturnKeyHandler.h" +#import "IQTextView.h" +#import "IQToolbar.h" +#import "IQUIScrollView+Additions.h" +#import "IQUITextFieldView+Additions.h" +#import "IQBarButtonItem.h" +#import "IQTitleBarButtonItem.h" +#import "IQUIView+Hierarchy.h" + +#import + +#import +#import +#import + +#import + +@class UIFont, UIColor, UITapGestureRecognizer, UIView, UIImage; + +@class NSString; + +///--------------------- +/// @name IQToolbar tags +///--------------------- + +/** + Default tag for toolbar with Done button -1002. + */ +extern NSInteger const kIQDoneButtonToolbarTag; + +/** + Default tag for toolbar with Previous/Next buttons -1005. + */ +extern NSInteger const kIQPreviousNextButtonToolbarTag; + + + +/** + Codeless drop-in universal library allows to prevent issues of keyboard sliding up and cover UITextField/UITextView. Neither need to write any code nor any setup required and much more. A generic version of KeyboardManagement. https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html + */ +@interface IQKeyboardManager : NSObject + +///-------------------------- +/// @name UIKeyboard handling +///-------------------------- + +/** + Returns the default singleton instance. You are not allowed to create your own instances of this class. + */ ++ (nonnull instancetype)sharedManager; + +/** + Enable/disable managing distance between keyboard and textField. Default is YES(Enabled when class loads in `+(void)load` method). + */ +@property(nonatomic, assign, getter = isEnabled) BOOL enable; + +/** + To set keyboard distance from textField. can't be less than zero. Default is 10.0. + */ +@property(nonatomic, assign) CGFloat keyboardDistanceFromTextField; + +/** + Prevent keyboard manager to slide up the rootView to more than keyboard height. Default is YES. + + Due to change in core-logic of handling distance between textField and keyboard distance, this tweak is no longer needed and things will just work out of the box for most of the cases. + */ +@property(nonatomic, assign) BOOL preventShowingBottomBlankSpace __attribute__((deprecated("Due to change in core-logic of handling distance between textField and keyboard distance, this tweak is no longer needed and things will just work out of the box for most of the cases. This property will be removed in future release."))); + +/** + Refreshes textField/textView position if any external changes is explicitly made by user. + */ +- (void)reloadLayoutIfNeeded; + +/** + Boolean to know if keyboard is showing. + */ +@property(nonatomic, assign, readonly, getter = isKeyboardShowing) BOOL keyboardShowing; + +/** + moved distance to the top used to maintain distance between keyboard and textField. Most of the time this will be a positive value. + */ +@property(nonatomic, assign, readonly) CGFloat movedDistance; + + +///------------------------- +/// @name IQToolbar handling +///------------------------- + +/** + Automatic add IQToolbar functionality. Default is YES. + */ +@property(nonatomic, assign, getter = isEnableAutoToolbar) BOOL enableAutoToolbar; + +/** + IQAutoToolbarBySubviews: Creates Toolbar according to subview's hirarchy of Textfield's in view. + IQAutoToolbarByTag: Creates Toolbar according to tag property of TextField's. + IQAutoToolbarByPosition: Creates Toolbar according to the y,x position of textField in it's superview coordinate. + + Default is IQAutoToolbarBySubviews. +*/ +@property(nonatomic, assign) IQAutoToolbarManageBehaviour toolbarManageBehaviour; + +/** + If YES, then uses textField's tintColor property for IQToolbar, otherwise tint color is black. Default is NO. + */ +@property(nonatomic, assign) BOOL shouldToolbarUsesTextFieldTintColor; + +/** + This is used for toolbar.tintColor when textfield.keyboardAppearance is UIKeyboardAppearanceDefault. If shouldToolbarUsesTextFieldTintColor is YES then this property is ignored. Default is nil and uses black color. + */ +@property(nullable, nonatomic, strong) UIColor *toolbarTintColor; + +/** + This is used for toolbar.barTintColor. Default is nil and uses white color. + */ +@property(nullable, nonatomic, strong) UIColor *toolbarBarTintColor; + +/** + IQPreviousNextDisplayModeDefault: Show NextPrevious when there are more than 1 textField otherwise hide. + IQPreviousNextDisplayModeAlwaysHide: Do not show NextPrevious buttons in any case. + IQPreviousNextDisplayModeAlwaysShow: Always show nextPrevious buttons, if there are more than 1 textField then both buttons will be visible but will be shown as disabled. + */ +@property(nonatomic, assign) IQPreviousNextDisplayMode previousNextDisplayMode; + +/** + Toolbar previous/next/done button icon, If nothing is provided then check toolbarDoneBarButtonItemText to draw done button. + */ +@property(nullable, nonatomic, strong) UIImage *toolbarPreviousBarButtonItemImage; +@property(nullable, nonatomic, strong) UIImage *toolbarNextBarButtonItemImage; +@property(nullable, nonatomic, strong) UIImage *toolbarDoneBarButtonItemImage; + +/** + Toolbar previous/next/done button text, If nothing is provided then system default 'UIBarButtonSystemItemDone' will be used. + */ +@property(nullable, nonatomic, strong) NSString *toolbarPreviousBarButtonItemText; +@property(nullable, nonatomic, strong) NSString *toolbarNextBarButtonItemText; +@property(nullable, nonatomic, strong) NSString *toolbarDoneBarButtonItemText; + +/** + If YES, then it add the textField's placeholder text on IQToolbar. Default is YES. + */ +@property(nonatomic, assign) BOOL shouldShowTextFieldPlaceholder __attribute__((deprecated("This is renamed to `shouldShowToolbarPlaceholder` for more clear naming."))); +@property(nonatomic, assign) BOOL shouldShowToolbarPlaceholder; + +/** + Placeholder Font. Default is nil. + */ +@property(nullable, nonatomic, strong) UIFont *placeholderFont; + +/** + Placeholder Color. Default is nil. Which means lightGray + */ +@property(nullable, nonatomic, strong) UIColor *placeholderColor; + +/** + Placeholder Button Color when it's treated as button. Default is nil. Which means iOS Blue for light toolbar and Yellow for dark toolbar + */ +@property(nullable, nonatomic, strong) UIColor *placeholderButtonColor; + +/** + Reload all toolbar buttons on the fly. + */ +- (void)reloadInputViews; + +///--------------------------------------- +/// @name UIKeyboard appearance overriding +///--------------------------------------- + +/** + Override the keyboardAppearance for all textField/textView. Default is NO. + */ +@property(nonatomic, assign) BOOL overrideKeyboardAppearance; + +/** + If overrideKeyboardAppearance is YES, then all the textField keyboardAppearance is set using this property. + */ +@property(nonatomic, assign) UIKeyboardAppearance keyboardAppearance; + +///----------------------------------------------------------- +/// @name UITextField/UITextView Next/Previous/Resign handling +///----------------------------------------------------------- + +/** + Resigns Keyboard on touching outside of UITextField/View. Default is NO. + */ +@property(nonatomic, assign) BOOL shouldResignOnTouchOutside; + +/** TapGesture to resign keyboard on view's touch. It's a readonly property and exposed only for adding/removing dependencies if your added gesture does have collision with this one */ +@property(nonnull, nonatomic, strong, readonly) UITapGestureRecognizer *resignFirstResponderGesture; + +/** + Resigns currently first responder field. + */ +- (BOOL)resignFirstResponder; + +/** + Returns YES if can navigate to previous responder textField/textView, otherwise NO. + */ +@property (nonatomic, readonly) BOOL canGoPrevious; + +/** + Returns YES if can navigate to next responder textField/textView, otherwise NO. + */ +@property (nonatomic, readonly) BOOL canGoNext; + +/** + Navigate to previous responder textField/textView. + */ +- (BOOL)goPrevious; + +/** + Navigate to next responder textField/textView. + */ +- (BOOL)goNext; + +///----------------------- +/// @name UISound handling +///----------------------- + +/** + If YES, then it plays inputClick sound on next/previous/done click. Default is YES. + */ +@property(nonatomic, assign) BOOL shouldPlayInputClicks; + +///--------------------------- +/// @name UIAnimation handling +///--------------------------- + +/** + If YES, then calls 'setNeedsLayout' and 'layoutIfNeeded' on any frame update of to viewController's view. + */ +@property(nonatomic, assign) BOOL layoutIfNeededOnUpdate; + +///----------------------------------------------- +/// @name InteractivePopGestureRecognizer handling +///----------------------------------------------- + +/** + If YES, then always consider UINavigationController.view begin point as {0,0}, this is a workaround to fix a bug #464 because there are no notification mechanism exist when UINavigationController.view.frame gets changed internally. + */ +@property(nonatomic, assign) BOOL shouldFixInteractivePopGestureRecognizer __attribute__((deprecated("Due to change in core-logic of handling distance between textField and keyboard distance, this tweak is no longer needed and things will just work out of the box for most of the cases. This property will be removed in future release."))); + +#ifdef __IPHONE_11_0 +///--------------------------- +/// @name Safe Area +///--------------------------- + +/** + If YES, then library will try to adjust viewController.additionalSafeAreaInsets to automatically handle layout guide. Default is NO. + */ +@property(nonatomic, assign) BOOL canAdjustAdditionalSafeAreaInsets __attribute__((deprecated("Due to change in core-logic of handling distance between textField and keyboard distance, this safe area tweak is no longer needed and things will just work out of the box regardless of constraint pinned with safeArea/layoutGuide/superview. This property will be removed in future release."))); +#endif + +///--------------------------------------------- +/// @name Class Level enabling/disabling methods +///--------------------------------------------- + +/** + Disable distance handling within the scope of disabled distance handling viewControllers classes. Within this scope, 'enabled' property is ignored. Class should be kind of UIViewController. Default is [UITableViewController, UIAlertController, _UIAlertControllerTextFieldViewController]. + */ +@property(nonatomic, strong, nonnull, readonly) NSMutableSet *disabledDistanceHandlingClasses; + +/** + Enable distance handling within the scope of enabled distance handling viewControllers classes. Within this scope, 'enabled' property is ignored. Class should be kind of UIViewController. Default is []. + */ +@property(nonatomic, strong, nonnull, readonly) NSMutableSet *enabledDistanceHandlingClasses; + +/** + Disable automatic toolbar creation within the scope of disabled toolbar viewControllers classes. Within this scope, 'enableAutoToolbar' property is ignored. Class should be kind of UIViewController. Default is [UIAlertController, _UIAlertControllerTextFieldViewController]. + */ +@property(nonatomic, strong, nonnull, readonly) NSMutableSet *disabledToolbarClasses; + +/** + Enable automatic toolbar creation within the scope of enabled toolbar viewControllers classes. Within this scope, 'enableAutoToolbar' property is ignored. Class should be kind of UIViewController. Default is []. + */ +@property(nonatomic, strong, nonnull, readonly) NSMutableSet *enabledToolbarClasses; + +/** + Allowed subclasses of UIView to add all inner textField, this will allow to navigate between textField contains in different superview. Class should be kind of UIView. Default is [UITableView, UICollectionView, IQPreviousNextView]. + */ +@property(nonatomic, strong, nonnull, readonly) NSMutableSet *toolbarPreviousNextAllowedClasses; + +/** + Disabled classes to ignore 'shouldResignOnTouchOutside' property, Class should be kind of UIViewController. Default is [UIAlertController, UIAlertControllerTextFieldViewController] + */ +@property(nonatomic, strong, nonnull, readonly) NSMutableSet *disabledTouchResignedClasses; + +/** + Enabled classes to forcefully enable 'shouldResignOnTouchOutsite' property. Class should be kind of UIViewController. Default is []. + */ +@property(nonatomic, strong, nonnull, readonly) NSMutableSet *enabledTouchResignedClasses; + +/** + if shouldResignOnTouchOutside is enabled then you can customise the behaviour to not recognise gesture touches on some specific view subclasses. Class should be kind of UIView. Default is [UIControl, UINavigationBar] + */ +@property(nonatomic, strong, nonnull, readonly) NSMutableSet *touchResignedGestureIgnoreClasses; + +///------------------------------------------- +/// @name Third Party Library support +/// Add TextField/TextView Notifications customised NSNotifications. For example while using YYTextView https://github.com/ibireme/YYText +///------------------------------------------- + +/** + Add/Remove customised Notification for third party customised TextField/TextView. Please be aware that the NSNotification object must be idential to UITextField/UITextView NSNotification objects and customised TextField/TextView support must be idential to UITextField/UITextView. + @param didBeginEditingNotificationName This should be identical to UITextViewTextDidBeginEditingNotification + @param didEndEditingNotificationName This should be identical to UITextViewTextDidEndEditingNotification + */ +-(void)registerTextFieldViewClass:(nonnull Class)aClass + didBeginEditingNotificationName:(nonnull NSString *)didBeginEditingNotificationName + didEndEditingNotificationName:(nonnull NSString *)didEndEditingNotificationName; +-(void)unregisterTextFieldViewClass:(nonnull Class)aClass + didBeginEditingNotificationName:(nonnull NSString *)didBeginEditingNotificationName + didEndEditingNotificationName:(nonnull NSString *)didEndEditingNotificationName; + +///---------------------------------------- +/// @name Debugging & Developer options +///---------------------------------------- + +@property(nonatomic, assign) BOOL enableDebugging; + +/** + @warning Use these methods to completely enable/disable notifications registered by library internally. Please keep in mind that library is totally dependent on NSNotification of UITextField, UITextField, Keyboard etc. If you do unregisterAllNotifications then library will not work at all. You should only use below methods if you want to completedly disable all library functions. You should use below methods at your own risk. + */ +-(void)registerAllNotifications; +-(void)unregisterAllNotifications; + +///---------------------------------------- +/// @name Must not be used for subclassing. +///---------------------------------------- + +/** + Unavailable. Please use sharedManager method + */ +-(nonnull instancetype)init NS_UNAVAILABLE; + +/** + Unavailable. Please use sharedManager method + */ ++ (nonnull instancetype)new NS_UNAVAILABLE; + +@end diff --git a/Ifish/controllers/HotBar/Lib/IQKeyboardManager/IQKeyboardManager.m b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/IQKeyboardManager.m new file mode 100755 index 0000000..13d5b58 --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/IQKeyboardManager.m @@ -0,0 +1,2105 @@ +// +// IQKeyboardManager.m +// https://github.com/hackiftekhar/IQKeyboardManager +// Copyright (c) 2013-16 Iftekhar Qurashi. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "IQKeyboardManager.h" +#import "IQUIView+Hierarchy.h" +#import "IQUIView+IQKeyboardToolbar.h" +#import "IQNSArray+Sort.h" +#import "IQKeyboardManagerConstantsInternal.h" +#import "IQUIScrollView+Additions.h" +#import "IQUITextFieldView+Additions.h" +#import "IQUIViewController+Additions.h" +#import "IQPreviousNextView.h" + +#import + +#import + +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import + + +NSInteger const kIQDoneButtonToolbarTag = -1002; +NSInteger const kIQPreviousNextButtonToolbarTag = -1005; + +#define kIQCGPointInvalid CGPointMake(CGFLOAT_MAX, CGFLOAT_MAX) + +@interface IQKeyboardManager() + +/*******************************************/ + +/** used to adjust contentInset of UITextView. */ +@property(nonatomic, assign) UIEdgeInsets startingTextViewContentInsets; + +/** used to adjust scrollIndicatorInsets of UITextView. */ +@property(nonatomic, assign) UIEdgeInsets startingTextViewScrollIndicatorInsets; + +/** used with textView to detect a textFieldView contentInset is changed or not. (Bug ID: #92)*/ +@property(nonatomic, assign) BOOL isTextViewContentInsetChanged; + +/*******************************************/ + +/** To save UITextField/UITextView object voa textField/textView notifications. */ +@property(nonatomic, weak) UIView *textFieldView; + +/** To save rootViewController.view.frame.origin. */ +@property(nonatomic, assign) CGPoint topViewBeginOrigin; + +/** To save rootViewController */ +@property(nonatomic, weak) UIViewController *rootViewController; + +/** To overcome with popGestureRecognizer issue Bug ID: #1361 */ +@property(nonatomic, weak) UIViewController *rootViewControllerWhilePopGestureRecognizerActive; +@property(nonatomic, assign) CGPoint topViewBeginOriginWhilePopGestureRecognizerActive; + +/** To know if we have any pending request to adjust view position. */ +@property(nonatomic, assign) BOOL hasPendingAdjustRequest; + +/*******************************************/ + +/** Variable to save lastScrollView that was scrolled. */ +@property(nonatomic, weak) UIScrollView *lastScrollView; + +/** LastScrollView's initial contentInsets. */ +@property(nonatomic, assign) UIEdgeInsets startingContentInsets; + +/** LastScrollView's initial scrollIndicatorInsets. */ +@property(nonatomic, assign) UIEdgeInsets startingScrollIndicatorInsets; + +/** LastScrollView's initial contentOffset. */ +@property(nonatomic, assign) CGPoint startingContentOffset; + +/*******************************************/ + +/** To save keyboard animation duration. */ +@property(nonatomic, assign) CGFloat animationDuration; + +/** To mimic the keyboard animation */ +@property(nonatomic, assign) NSInteger animationCurve; + +/*******************************************/ + +/** TapGesture to resign keyboard on view's touch. It's a readonly property and exposed only for adding/removing dependencies if your added gesture does have collision with this one */ +@property(nonnull, nonatomic, strong, readwrite) UITapGestureRecognizer *resignFirstResponderGesture; + +/** + moved distance to the top used to maintain distance between keyboard and textField. Most of the time this will be a positive value. + */ +@property(nonatomic, assign, readwrite) CGFloat movedDistance; + +/*******************************************/ + +@property(nonatomic, strong, nonnull, readwrite) NSMutableSet *registeredClasses; + +@property(nonatomic, strong, nonnull, readwrite) NSMutableSet *disabledDistanceHandlingClasses; +@property(nonatomic, strong, nonnull, readwrite) NSMutableSet *enabledDistanceHandlingClasses; + +@property(nonatomic, strong, nonnull, readwrite) NSMutableSet *disabledToolbarClasses; +@property(nonatomic, strong, nonnull, readwrite) NSMutableSet *enabledToolbarClasses; + +@property(nonatomic, strong, nonnull, readwrite) NSMutableSet *toolbarPreviousNextAllowedClasses; + +@property(nonatomic, strong, nonnull, readwrite) NSMutableSet *disabledTouchResignedClasses; +@property(nonatomic, strong, nonnull, readwrite) NSMutableSet *enabledTouchResignedClasses; +@property(nonatomic, strong, nonnull, readwrite) NSMutableSet *touchResignedGestureIgnoreClasses; + +/*******************************************/ + +@end + +@implementation IQKeyboardManager +{ + @package + + /*******************************************/ + + /** To save keyboardWillShowNotification. Needed for enable keyboard functionality. */ + NSNotification *_kbShowNotification; + + /** To save keyboard size. */ + CGSize _kbSize; + + /*******************************************/ +} + +//UIKeyboard handling +@synthesize enable = _enable; +@synthesize keyboardDistanceFromTextField = _keyboardDistanceFromTextField; + +//Keyboard Appearance handling +@synthesize overrideKeyboardAppearance = _overrideKeyboardAppearance; +@synthesize keyboardAppearance = _keyboardAppearance; + +//IQToolbar handling +@synthesize enableAutoToolbar = _enableAutoToolbar; +@synthesize toolbarManageBehaviour = _toolbarManageBehaviour; + +@synthesize shouldToolbarUsesTextFieldTintColor = _shouldToolbarUsesTextFieldTintColor; +@synthesize toolbarTintColor = _toolbarTintColor; +@synthesize toolbarBarTintColor = _toolbarBarTintColor; +@dynamic shouldShowTextFieldPlaceholder; +@synthesize shouldShowToolbarPlaceholder = _shouldShowToolbarPlaceholder; +@synthesize placeholderFont = _placeholderFont; +@synthesize placeholderColor = _placeholderColor; +@synthesize placeholderButtonColor = _placeholderButtonColor; + +//Resign handling +@synthesize shouldResignOnTouchOutside = _shouldResignOnTouchOutside; +@synthesize resignFirstResponderGesture = _resignFirstResponderGesture; + +//Sound handling +@synthesize shouldPlayInputClicks = _shouldPlayInputClicks; + +//Animation handling +@synthesize layoutIfNeededOnUpdate = _layoutIfNeededOnUpdate; + +#pragma mark - Initializing functions + +/** Override +load method to enable KeyboardManager when class loader load IQKeyboardManager. Enabling when app starts (No need to write any code) */ ++(void)load +{ + //Enabling IQKeyboardManager. Loading asynchronous on main thread + [self performSelectorOnMainThread:@selector(sharedManager) withObject:nil waitUntilDone:NO]; +} + +/* Singleton Object Initialization. */ +-(instancetype)init +{ + if (self = [super init]) + { + __weak typeof(self) weakSelf = self; + + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + + __strong typeof(self) strongSelf = weakSelf; + + strongSelf.registeredClasses = [[NSMutableSet alloc] init]; + + [strongSelf registerAllNotifications]; + + //Creating gesture for @shouldResignOnTouchOutside. (Enhancement ID: #14) + strongSelf.resignFirstResponderGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapRecognized:)]; + strongSelf.resignFirstResponderGesture.cancelsTouchesInView = NO; + [strongSelf.resignFirstResponderGesture setDelegate:self]; + strongSelf.resignFirstResponderGesture.enabled = strongSelf.shouldResignOnTouchOutside; + strongSelf.topViewBeginOrigin = kIQCGPointInvalid; + strongSelf.topViewBeginOriginWhilePopGestureRecognizerActive = kIQCGPointInvalid; + + //Setting it's initial values + strongSelf.animationDuration = 0.25; + strongSelf.animationCurve = UIViewAnimationCurveEaseInOut; + [self setEnable:YES]; + [self setKeyboardDistanceFromTextField:10.0]; + [self setShouldPlayInputClicks:YES]; + [self setShouldResignOnTouchOutside:NO]; + [self setOverrideKeyboardAppearance:NO]; + [self setKeyboardAppearance:UIKeyboardAppearanceDefault]; + [self setEnableAutoToolbar:YES]; + [self setShouldShowToolbarPlaceholder:YES]; + [self setToolbarManageBehaviour:IQAutoToolbarBySubviews]; + [self setLayoutIfNeededOnUpdate:NO]; + + //Loading IQToolbar, IQTitleBarButtonItem, IQBarButtonItem to fix first time keyboard appearance delay (Bug ID: #550) + { + //If you experience exception breakpoint issue at below line then try these solutions https://stackoverflow.com/questions/27375640/all-exception-break-point-is-stopping-for-no-reason-on-simulator + UITextField *view = [[UITextField alloc] init]; + [view addDoneOnKeyboardWithTarget:nil action:nil]; + [view addPreviousNextDoneOnKeyboardWithTarget:nil previousAction:nil nextAction:nil doneAction:nil]; + } + + //Initializing disabled classes Set. + strongSelf.disabledDistanceHandlingClasses = [[NSMutableSet alloc] initWithObjects:[UITableViewController class],[UIAlertController class], nil]; + strongSelf.enabledDistanceHandlingClasses = [[NSMutableSet alloc] init]; + + strongSelf.disabledToolbarClasses = [[NSMutableSet alloc] initWithObjects:[UIAlertController class], nil]; + strongSelf.enabledToolbarClasses = [[NSMutableSet alloc] init]; + + strongSelf.toolbarPreviousNextAllowedClasses = [[NSMutableSet alloc] initWithObjects:[UITableView class],[UICollectionView class],[IQPreviousNextView class], nil]; + + strongSelf.disabledTouchResignedClasses = [[NSMutableSet alloc] initWithObjects:[UIAlertController class], nil]; + strongSelf.enabledTouchResignedClasses = [[NSMutableSet alloc] init]; + strongSelf.touchResignedGestureIgnoreClasses = [[NSMutableSet alloc] initWithObjects:[UIControl class],[UINavigationBar class], nil]; + + [self setShouldToolbarUsesTextFieldTintColor:NO]; + }); + } + return self; +} + +/* Automatically called from the `+(void)load` method. */ ++ (IQKeyboardManager*)sharedManager +{ + //Singleton instance + static IQKeyboardManager *kbManager; + + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + + kbManager = [[self alloc] init]; + }); + + return kbManager; +} + +#pragma mark - Dealloc +-(void)dealloc +{ + // Disable the keyboard manager. + [self setEnable:NO]; + + //Removing notification observers on dealloc. + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + +#pragma mark - Property functions +-(void)setEnable:(BOOL)enable +{ + // If not enabled, enable it. + if (enable == YES && + _enable == NO) + { + //Setting NO to _enable. + _enable = enable; + + //If keyboard is currently showing. Sending a fake notification for keyboardWillShow to adjust view according to keyboard. + if (_kbShowNotification) [self keyboardWillShow:_kbShowNotification]; + + [self showLog:@"Enabled"]; + } + //If not disable, desable it. + else if (enable == NO && + _enable == YES) + { + //Sending a fake notification for keyboardWillHide to retain view's original position. + [self keyboardWillHide:nil]; + + //Setting NO to _enable. + _enable = enable; + + [self showLog:@"Disabled"]; + } + //If already disabled. + else if (enable == NO && + _enable == NO) + { + [self showLog:@"Already Disabled"]; + } + //If already enabled. + else if (enable == YES && + _enable == YES) + { + [self showLog:@"Already Enabled"]; + } +} + +-(BOOL)privateIsEnabled +{ + BOOL enable = _enable; + +// IQEnableMode enableMode = _textFieldView.enableMode; +// +// if (enableMode == IQEnableModeEnabled) +// { +// enable = YES; +// } +// else if (enableMode == IQEnableModeDisabled) +// { +// enable = NO; +// } +// else + { + UIViewController *textFieldViewController = [_textFieldView viewContainingController]; + + if (textFieldViewController) + { + if (enable == NO) + { + //If viewController is kind of enable viewController class, then assuming it's enabled. + for (Class enabledClass in _enabledDistanceHandlingClasses) + { + if ([textFieldViewController isKindOfClass:enabledClass]) + { + enable = YES; + break; + } + } + } + + if (enable) + { + //If viewController is kind of disable viewController class, then assuming it's disable. + for (Class disabledClass in _disabledDistanceHandlingClasses) + { + if ([textFieldViewController isKindOfClass:disabledClass]) + { + enable = NO; + break; + } + } + + //Special Controllers + if (enable == YES) + { + NSString *classNameString = NSStringFromClass([textFieldViewController class]); + + //_UIAlertControllerTextFieldViewController + if ([classNameString containsString:@"UIAlertController"] && [classNameString hasSuffix:@"TextFieldViewController"]) + { + enable = NO; + } + } + } + } + } + + return enable; +} + +-(BOOL)shouldShowTextFieldPlaceholder +{ + return _shouldShowToolbarPlaceholder; +} + +-(void)setShouldShowTextFieldPlaceholder:(BOOL)shouldShowTextFieldPlaceholder +{ + _shouldShowToolbarPlaceholder = shouldShowTextFieldPlaceholder; +} + +// Setting keyboard distance from text field. +-(void)setKeyboardDistanceFromTextField:(CGFloat)keyboardDistanceFromTextField +{ + //Can't be less than zero. Minimum is zero. + _keyboardDistanceFromTextField = MAX(keyboardDistanceFromTextField, 0); + + [self showLog:[NSString stringWithFormat:@"keyboardDistanceFromTextField: %.2f",_keyboardDistanceFromTextField]]; +} + +/** Enabling/disable gesture on touching. */ +-(void)setShouldResignOnTouchOutside:(BOOL)shouldResignOnTouchOutside +{ + [self showLog:[NSString stringWithFormat:@"shouldResignOnTouchOutside: %@",shouldResignOnTouchOutside?@"Yes":@"No"]]; + + _shouldResignOnTouchOutside = shouldResignOnTouchOutside; + + //Enable/Disable gesture recognizer (Enhancement ID: #14) + [_resignFirstResponderGesture setEnabled:[self privateShouldResignOnTouchOutside]]; +} + +-(BOOL)privateShouldResignOnTouchOutside +{ + BOOL shouldResignOnTouchOutside = _shouldResignOnTouchOutside; + + UIView *textFieldView = _textFieldView; + IQEnableMode enableMode = textFieldView.shouldResignOnTouchOutsideMode; + + if (enableMode == IQEnableModeEnabled) + { + shouldResignOnTouchOutside = YES; + } + else if (enableMode == IQEnableModeDisabled) + { + shouldResignOnTouchOutside = NO; + } + else + { + UIViewController *textFieldViewController = [textFieldView viewContainingController]; + + if (textFieldViewController) + { + if (shouldResignOnTouchOutside == NO) + { + //If viewController is kind of enable viewController class, then assuming shouldResignOnTouchOutside is enabled. + for (Class enabledClass in _enabledTouchResignedClasses) + { + if ([textFieldViewController isKindOfClass:enabledClass]) + { + shouldResignOnTouchOutside = YES; + break; + } + } + } + + if (shouldResignOnTouchOutside) + { + //If viewController is kind of disable viewController class, then assuming shouldResignOnTouchOutside is disable. + for (Class disabledClass in _disabledTouchResignedClasses) + { + if ([textFieldViewController isKindOfClass:disabledClass]) + { + shouldResignOnTouchOutside = NO; + break; + } + } + + //Special Controllers + if (shouldResignOnTouchOutside == YES) + { + NSString *classNameString = NSStringFromClass([textFieldViewController class]); + + //_UIAlertControllerTextFieldViewController + if ([classNameString containsString:@"UIAlertController"] && [classNameString hasSuffix:@"TextFieldViewController"]) + { + shouldResignOnTouchOutside = NO; + } + } + } + } + } + + return shouldResignOnTouchOutside; +} + +/** Enable/disable autotoolbar. Adding and removing toolbar if required. */ +-(void)setEnableAutoToolbar:(BOOL)enableAutoToolbar +{ + _enableAutoToolbar = enableAutoToolbar; + + [self showLog:[NSString stringWithFormat:@"enableAutoToolbar: %@",enableAutoToolbar?@"Yes":@"No"]]; + + //If enabled then adding toolbar. + if ([self privateIsEnableAutoToolbar] == YES) + { + [self addToolbarIfRequired]; + } + //Else removing toolbar. + else + { + [self removeToolbarIfRequired]; + } +} + +-(BOOL)privateIsEnableAutoToolbar +{ + BOOL enableAutoToolbar = _enableAutoToolbar; + + UIViewController *textFieldViewController = [_textFieldView viewContainingController]; + + if (textFieldViewController) + { + if (enableAutoToolbar == NO) + { + //If found any toolbar enabled classes then return. + for (Class enabledToolbarClass in _enabledToolbarClasses) + { + if ([textFieldViewController isKindOfClass:enabledToolbarClass]) + { + enableAutoToolbar = YES; + break; + } + } + } + + if (enableAutoToolbar) + { + //If found any toolbar disabled classes then return. + for (Class disabledToolbarClass in _disabledToolbarClasses) + { + if ([textFieldViewController isKindOfClass:disabledToolbarClass]) + { + enableAutoToolbar = NO; + break; + } + } + + + //Special Controllers + if (enableAutoToolbar == YES) + { + NSString *classNameString = NSStringFromClass([textFieldViewController class]); + + //_UIAlertControllerTextFieldViewController + if ([classNameString containsString:@"UIAlertController"] && [classNameString hasSuffix:@"TextFieldViewController"]) + { + enableAutoToolbar = NO; + } + } + } + } + + return enableAutoToolbar; +} + +#pragma mark - Private Methods + +/** Getting keyWindow. */ +-(UIWindow *)keyWindow +{ + UIView *textFieldView = _textFieldView; + + if (textFieldView.window) + { + return textFieldView.window; + } + else + { + static __weak UIWindow *_keyWindow = nil; + + /* (Bug ID: #23, #25, #73) */ + UIWindow *originalKeyWindow = [[UIApplication sharedApplication] keyWindow]; + + //If original key window is not nil and the cached keywindow is also not original keywindow then changing keywindow. + if (originalKeyWindow && + _keyWindow != originalKeyWindow) + { + _keyWindow = originalKeyWindow; + } + + return _keyWindow; + } +} + +-(void)optimizedAdjustPosition +{ + if (_hasPendingAdjustRequest == NO) + { + _hasPendingAdjustRequest = YES; + + __weak typeof(self) weakSelf = self; + + [[NSOperationQueue mainQueue] addOperationWithBlock:^{ + [self adjustPosition]; + weakSelf.hasPendingAdjustRequest = NO; + }]; + } +} + +/* Adjusting RootViewController's frame according to interface orientation. */ +-(void)adjustPosition +{ + UIView *textFieldView = _textFieldView; + + // Getting RootViewController. (Bug ID: #1, #4) + UIViewController *rootController = _rootViewController; + + // Getting KeyWindow object. + UIWindow *keyWindow = [self keyWindow]; + + // We are unable to get textField object while keyboard showing on UIWebView's textField. (Bug ID: #11) + if (_hasPendingAdjustRequest == NO || + textFieldView == nil || + rootController == nil || + keyWindow == nil) + return; + + CFTimeInterval startTime = CACurrentMediaTime(); + [self showLog:[NSString stringWithFormat:@"****** %@ started ******",NSStringFromSelector(_cmd)]]; + + // Converting Rectangle according to window bounds. + CGRect textFieldViewRectInWindow = [[textFieldView superview] convertRect:textFieldView.frame toView:keyWindow]; + CGRect textFieldViewRectInRootSuperview = [[textFieldView superview] convertRect:textFieldView.frame toView:rootController.view.superview]; + // Getting RootView origin. + CGPoint rootViewOrigin = rootController.view.frame.origin; + + //Maintain keyboardDistanceFromTextField + CGFloat specialKeyboardDistanceFromTextField = textFieldView.keyboardDistanceFromTextField; + + { + UISearchBar *searchBar = textFieldView.searchBar; + + if (searchBar) + { + specialKeyboardDistanceFromTextField = searchBar.keyboardDistanceFromTextField; + } + } + + CGFloat keyboardDistanceFromTextField = (specialKeyboardDistanceFromTextField == kIQUseDefaultKeyboardDistance)?_keyboardDistanceFromTextField:specialKeyboardDistanceFromTextField; + CGSize kbSize = _kbSize; + kbSize.height += keyboardDistanceFromTextField; + + CGFloat navigationBarAreaHeight = [[UIApplication sharedApplication] statusBarFrame].size.height + rootController.navigationController.navigationBar.frame.size.height; + CGFloat layoutAreaHeight = rootController.view.layoutMargins.top; + + CGFloat topLayoutGuide = MAX(navigationBarAreaHeight, layoutAreaHeight) + 5; + CGFloat bottomLayoutGuide = [textFieldView isKindOfClass:[UITextView class]] ? 0 : rootController.view.layoutMargins.bottom; //Validation of textView for case where there is a tab bar at the bottom or running on iPhone X and textView is at the bottom. + + // +Move positive = textField is hidden. + // -Move negative = textField is showing. + // Calculating move position. Common for both normal and special cases. + CGFloat move = MIN(CGRectGetMinY(textFieldViewRectInRootSuperview)-topLayoutGuide, CGRectGetMaxY(textFieldViewRectInWindow)-(CGRectGetHeight(keyWindow.frame)-kbSize.height)+bottomLayoutGuide); + + [self showLog:[NSString stringWithFormat:@"Need to move: %.2f",move]]; + + UIScrollView *superScrollView = nil; + UIScrollView *superView = (UIScrollView*)[textFieldView superviewOfClassType:[UIScrollView class]]; + + //Getting UIScrollView whose scrolling is enabled. // (Bug ID: #285) + while (superView) + { + if (superView.isScrollEnabled && superView.shouldIgnoreScrollingAdjustment == NO) + { + superScrollView = superView; + break; + } + else + { + // Getting it's superScrollView. // (Enhancement ID: #21, #24) + superView = (UIScrollView*)[superView superviewOfClassType:[UIScrollView class]]; + } + } + + //If there was a lastScrollView. // (Bug ID: #34) + if (_lastScrollView) + { + //If we can't find current superScrollView, then setting lastScrollView to it's original form. + if (superScrollView == nil) + { + [self showLog:[NSString stringWithFormat:@"Restoring %@ contentInset to : %@ and contentOffset to : %@",[_lastScrollView _IQDescription],NSStringFromUIEdgeInsets(_startingContentInsets),NSStringFromCGPoint(_startingContentOffset)]]; + + __weak typeof(self) weakSelf = self; + + [UIView animateWithDuration:_animationDuration delay:0 options:(_animationCurve|UIViewAnimationOptionBeginFromCurrentState) animations:^{ + + __strong typeof(self) strongSelf = weakSelf; + UIScrollView *strongLastScrollView = strongSelf.lastScrollView; + + [strongLastScrollView setContentInset:strongSelf.startingContentInsets]; + strongLastScrollView.scrollIndicatorInsets = strongSelf.startingScrollIndicatorInsets; + } completion:NULL]; + + if (_lastScrollView.shouldRestoreScrollViewContentOffset) + { + [_lastScrollView setContentOffset:_startingContentOffset animated:UIView.areAnimationsEnabled]; + } + + _startingContentInsets = UIEdgeInsetsZero; + _startingScrollIndicatorInsets = UIEdgeInsetsZero; + _startingContentOffset = CGPointZero; + _lastScrollView = nil; + } + //If both scrollView's are different, then reset lastScrollView to it's original frame and setting current scrollView as last scrollView. + else if (superScrollView != _lastScrollView) + { + [self showLog:[NSString stringWithFormat:@"Restoring %@ contentInset to : %@ and contentOffset to : %@",[_lastScrollView _IQDescription],NSStringFromUIEdgeInsets(_startingContentInsets),NSStringFromCGPoint(_startingContentOffset)]]; + + __weak typeof(self) weakSelf = self; + + [UIView animateWithDuration:_animationDuration delay:0 options:(_animationCurve|UIViewAnimationOptionBeginFromCurrentState) animations:^{ + + __strong typeof(self) strongSelf = weakSelf; + UIScrollView *strongLastScrollView = strongSelf.lastScrollView; + + [strongLastScrollView setContentInset:strongSelf.startingContentInsets]; + strongLastScrollView.scrollIndicatorInsets = strongSelf.startingScrollIndicatorInsets; + } completion:NULL]; + + if (_lastScrollView.shouldRestoreScrollViewContentOffset) + { + [_lastScrollView setContentOffset:_startingContentOffset animated:UIView.areAnimationsEnabled]; + } + + _lastScrollView = superScrollView; + _startingContentInsets = superScrollView.contentInset; + _startingScrollIndicatorInsets = superScrollView.scrollIndicatorInsets; + _startingContentOffset = superScrollView.contentOffset; + + [self showLog:[NSString stringWithFormat:@"Saving New %@ contentInset: %@ and contentOffset : %@",[_lastScrollView _IQDescription],NSStringFromUIEdgeInsets(_startingContentInsets),NSStringFromCGPoint(_startingContentOffset)]]; + } + //Else the case where superScrollView == lastScrollView means we are on same scrollView after switching to different textField. So doing nothing + } + //If there was no lastScrollView and we found a current scrollView. then setting it as lastScrollView. + else if(superScrollView) + { + _lastScrollView = superScrollView; + _startingContentInsets = superScrollView.contentInset; + _startingContentOffset = superScrollView.contentOffset; + _startingScrollIndicatorInsets = superScrollView.scrollIndicatorInsets; + + [self showLog:[NSString stringWithFormat:@"Saving %@ contentInset: %@ and contentOffset : %@",[_lastScrollView _IQDescription],NSStringFromUIEdgeInsets(_startingContentInsets),NSStringFromCGPoint(_startingContentOffset)]]; + } + + // Special case for ScrollView. + { + // If we found lastScrollView then setting it's contentOffset to show textField. + if (_lastScrollView) + { + //Saving + UIView *lastView = textFieldView; + superScrollView = _lastScrollView; + + //Looping in upper hierarchy until we don't found any scrollView in it's upper hirarchy till UIWindow object. + while (superScrollView && + (move>0?(move > (-superScrollView.contentOffset.y-superScrollView.contentInset.top)):superScrollView.contentOffset.y>0) ) + { + UIScrollView *nextScrollView = nil; + UIScrollView *tempScrollView = (UIScrollView*)[superScrollView superviewOfClassType:[UIScrollView class]]; + + //Getting UIScrollView whose scrolling is enabled. // (Bug ID: #285) + while (tempScrollView) + { + if (tempScrollView.isScrollEnabled && tempScrollView.shouldIgnoreScrollingAdjustment == NO) + { + nextScrollView = tempScrollView; + break; + } + else + { + // Getting it's superScrollView. // (Enhancement ID: #21, #24) + tempScrollView = (UIScrollView*)[tempScrollView superviewOfClassType:[UIScrollView class]]; + } + } + + //Getting lastViewRect. + CGRect lastViewRect = [[lastView superview] convertRect:lastView.frame toView:superScrollView]; + + //Calculating the expected Y offset from move and scrollView's contentOffset. + CGFloat shouldOffsetY = superScrollView.contentOffset.y - MIN(superScrollView.contentOffset.y,-move); + + //Rearranging the expected Y offset according to the view. + shouldOffsetY = MIN(shouldOffsetY, lastViewRect.origin.y); + + //[textFieldView isKindOfClass:[UITextView class]] If is a UITextView type + //[superScrollView superviewOfClassType:[UIScrollView class]] == nil If processing scrollView is last scrollView in upper hierarchy (there is no other scrollView upper hierarchy.) + //shouldOffsetY >= 0 shouldOffsetY must be greater than in order to keep distance from navigationBar (Bug ID: #92) + if ([textFieldView isKindOfClass:[UITextView class]] && + nextScrollView == nil && + (shouldOffsetY >= 0)) + { + // Converting Rectangle according to window bounds. + CGRect currentTextFieldViewRect = [[textFieldView superview] convertRect:textFieldView.frame toView:keyWindow]; + + //Calculating expected fix distance which needs to be managed from navigation bar + CGFloat expectedFixDistance = CGRectGetMinY(currentTextFieldViewRect) - topLayoutGuide; + + //Now if expectedOffsetY (superScrollView.contentOffset.y + expectedFixDistance) is lower than current shouldOffsetY, which means we're in a position where navigationBar up and hide, then reducing shouldOffsetY with expectedOffsetY (superScrollView.contentOffset.y + expectedFixDistance) + shouldOffsetY = MIN(shouldOffsetY, superScrollView.contentOffset.y + expectedFixDistance); + + //Setting move to 0 because now we don't want to move any view anymore (All will be managed by our contentInset logic. + move = 0; + } + else + { + //Subtracting the Y offset from the move variable, because we are going to change scrollView's contentOffset.y to shouldOffsetY. + move -= (shouldOffsetY-superScrollView.contentOffset.y); + } + + + //Getting problem while using `setContentOffset:animated:`, So I used animation API. + [UIView animateWithDuration:_animationDuration delay:0 options:(_animationCurve|UIViewAnimationOptionBeginFromCurrentState) animations:^{ + + [self showLog:[NSString stringWithFormat:@"Adjusting %.2f to %@ ContentOffset",(superScrollView.contentOffset.y-shouldOffsetY),[superScrollView _IQDescription]]]; + [self showLog:[NSString stringWithFormat:@"Remaining Move: %.2f",move]]; + + superScrollView.contentOffset = CGPointMake(superScrollView.contentOffset.x, shouldOffsetY); + + } completion:NULL]; + + // Getting next lastView & superScrollView. + lastView = superScrollView; + superScrollView = nextScrollView; + } + + //Updating contentInset + { + CGRect lastScrollViewRect = [[_lastScrollView superview] convertRect:_lastScrollView.frame toView:keyWindow]; + + CGFloat bottom = (kbSize.height-keyboardDistanceFromTextField)-(CGRectGetHeight(keyWindow.frame)-CGRectGetMaxY(lastScrollViewRect)); + + // Update the insets so that the scroll vew doesn't shift incorrectly when the offset is near the bottom of the scroll view. + UIEdgeInsets movedInsets = _lastScrollView.contentInset; + + movedInsets.bottom = MAX(_startingContentInsets.bottom, bottom); + + [self showLog:[NSString stringWithFormat:@"%@ old ContentInset : %@",[_lastScrollView _IQDescription], NSStringFromUIEdgeInsets(_lastScrollView.contentInset)]]; + + __weak typeof(self) weakSelf = self; + + [UIView animateWithDuration:_animationDuration delay:0 options:(_animationCurve|UIViewAnimationOptionBeginFromCurrentState) animations:^{ + + __strong typeof(self) strongSelf = weakSelf; + UIScrollView *strongLastScrollView = strongSelf.lastScrollView; + + strongLastScrollView.contentInset = movedInsets; + + UIEdgeInsets newInset = strongLastScrollView.scrollIndicatorInsets; + newInset.bottom = movedInsets.bottom; + strongLastScrollView.scrollIndicatorInsets = newInset; + + } completion:NULL]; + + [self showLog:[NSString stringWithFormat:@"%@ new ContentInset : %@",[_lastScrollView _IQDescription], NSStringFromUIEdgeInsets(_lastScrollView.contentInset)]]; + } + } + //Going ahead. No else if. + } + + { + //Special case for UITextView(Readjusting textView.contentInset when textView hight is too big to fit on screen) + //_lastScrollView If not having inside any scrollView, (now contentInset manages the full screen textView. + //[textFieldView isKindOfClass:[UITextView class]] If is a UITextView type + if ([textFieldView isKindOfClass:[UITextView class]]) + { + UITextView *textView = (UITextView*)textFieldView; + + CGFloat keyboardYPosition = CGRectGetHeight(keyWindow.frame)-(kbSize.height-keyboardDistanceFromTextField); + + CGRect rootSuperViewFrameInWindow = [rootController.view.superview convertRect:rootController.view.superview.bounds toView:keyWindow]; + + CGFloat keyboardOverlapping = CGRectGetMaxY(rootSuperViewFrameInWindow) - keyboardYPosition; + + CGFloat textViewHeight = MIN(CGRectGetHeight(textFieldView.frame), (CGRectGetHeight(rootSuperViewFrameInWindow)-topLayoutGuide-keyboardOverlapping)); + + if (textFieldView.frame.size.height-textView.contentInset.bottom>textViewHeight) + { + __weak typeof(self) weakSelf = self; + + [UIView animateWithDuration:_animationDuration delay:0 options:(_animationCurve|UIViewAnimationOptionBeginFromCurrentState) animations:^{ + + __strong typeof(self) strongSelf = weakSelf; + UIView *strongTextFieldView = strongSelf.textFieldView; + + [self showLog:[NSString stringWithFormat:@"%@ Old UITextView.contentInset : %@",[strongTextFieldView _IQDescription], NSStringFromUIEdgeInsets(textView.contentInset)]]; + + //_isTextViewContentInsetChanged, If frame is not change by library in past, then saving user textView properties (Bug ID: #92) + if (strongSelf.isTextViewContentInsetChanged == NO) + { + strongSelf.startingTextViewContentInsets = textView.contentInset; + strongSelf.startingTextViewScrollIndicatorInsets = textView.scrollIndicatorInsets; + } + + UIEdgeInsets newContentInset = textView.contentInset; + newContentInset.bottom = strongTextFieldView.frame.size.height-textViewHeight; + textView.contentInset = newContentInset; + textView.scrollIndicatorInsets = newContentInset; + strongSelf.isTextViewContentInsetChanged = YES; + + [self showLog:[NSString stringWithFormat:@"%@ New UITextView.contentInset : %@",[strongTextFieldView _IQDescription], NSStringFromUIEdgeInsets(textView.contentInset)]]; + + } completion:NULL]; + } + } + + { + __weak typeof(self) weakSelf = self; + + // +Positive or zero. + if (move>=0) + { + rootViewOrigin.y -= move; + + // From now prevent keyboard manager to slide up the rootView to more than keyboard height. (Bug ID: #93) + rootViewOrigin.y = MAX(rootViewOrigin.y, MIN(0, -(kbSize.height-keyboardDistanceFromTextField))); + + [self showLog:@"Moving Upward"]; + // Setting adjusted rootViewOrigin.ty + + //Used UIViewAnimationOptionBeginFromCurrentState to minimize strange animations. + [UIView animateWithDuration:_animationDuration delay:0 options:(_animationCurve|UIViewAnimationOptionBeginFromCurrentState) animations:^{ + + __strong typeof(self) strongSelf = weakSelf; + + // Setting it's new frame + CGRect rect = rootController.view.frame; + rect.origin = rootViewOrigin; + rootController.view.frame = rect; + + //Animating content if needed (Bug ID: #204) + if (strongSelf.layoutIfNeededOnUpdate) + { + //Animating content (Bug ID: #160) + [rootController.view setNeedsLayout]; + [rootController.view layoutIfNeeded]; + } + + [self showLog:[NSString stringWithFormat:@"Set %@ origin to : %@",[rootController _IQDescription],NSStringFromCGPoint(rootViewOrigin)]]; + } completion:NULL]; + + _movedDistance = (_topViewBeginOrigin.y-rootViewOrigin.y); + } + // -Negative + else + { + CGFloat disturbDistance = rootController.view.frame.origin.y-_topViewBeginOrigin.y; + + // disturbDistance Negative = frame disturbed. Pull Request #3 + // disturbDistance positive = frame not disturbed. + if(disturbDistance<=0) + { + rootViewOrigin.y -= MAX(move, disturbDistance); + + [self showLog:@"Moving Downward"]; + // Setting adjusted rootViewRect + + //Used UIViewAnimationOptionBeginFromCurrentState to minimize strange animations. + [UIView animateWithDuration:_animationDuration delay:0 options:(_animationCurve|UIViewAnimationOptionBeginFromCurrentState) animations:^{ + + __strong typeof(self) strongSelf = weakSelf; + + // Setting it's new frame + CGRect rect = rootController.view.frame; + rect.origin = rootViewOrigin; + rootController.view.frame = rect; + + //Animating content if needed (Bug ID: #204) + if (strongSelf.layoutIfNeededOnUpdate) + { + //Animating content (Bug ID: #160) + [rootController.view setNeedsLayout]; + [rootController.view layoutIfNeeded]; + } + + [self showLog:[NSString stringWithFormat:@"Set %@ origin to : %@",[rootController _IQDescription],NSStringFromCGPoint(rootViewOrigin)]]; + } completion:NULL]; + + _movedDistance = (_topViewBeginOrigin.y-rootController.view.frame.origin.y); + } + } + } + } + + CFTimeInterval elapsedTime = CACurrentMediaTime() - startTime; + [self showLog:[NSString stringWithFormat:@"****** %@ ended: %g seconds ******\n",NSStringFromSelector(_cmd),elapsedTime]]; +} + +-(void)restorePosition +{ + _hasPendingAdjustRequest = NO; + + // Setting rootViewController frame to it's original position. // (Bug ID: #18) + if (_rootViewController && CGPointEqualToPoint(_topViewBeginOrigin, kIQCGPointInvalid) == false) + { + __weak typeof(self) weakSelf = self; + + //Used UIViewAnimationOptionBeginFromCurrentState to minimize strange animations. + [UIView animateWithDuration:_animationDuration delay:0 options:(_animationCurve|UIViewAnimationOptionBeginFromCurrentState) animations:^{ + + __strong typeof(self) strongSelf = weakSelf; + UIViewController *strongRootController = strongSelf.rootViewController; + + { + [strongSelf showLog:[NSString stringWithFormat:@"Restoring %@ origin to : %@",[strongRootController _IQDescription],NSStringFromCGPoint(strongSelf.topViewBeginOrigin)]]; + + //Restoring + CGRect rect = strongRootController.view.frame; + rect.origin = strongSelf.topViewBeginOrigin; + strongRootController.view.frame = rect; + + strongSelf.movedDistance = 0; + + if (strongRootController.navigationController.interactivePopGestureRecognizer.state == UIGestureRecognizerStateBegan) { + strongSelf.rootViewControllerWhilePopGestureRecognizerActive = strongRootController; + strongSelf.topViewBeginOriginWhilePopGestureRecognizerActive = strongSelf.topViewBeginOrigin; + } + + //Animating content if needed (Bug ID: #204) + if (strongSelf.layoutIfNeededOnUpdate) + { + //Animating content (Bug ID: #160) + [strongRootController.view setNeedsLayout]; + [strongRootController.view layoutIfNeeded]; + } + } + + } completion:NULL]; + _rootViewController = nil; + } +} + +#pragma mark - Public Methods + +/* Refreshes textField/textView position if any external changes is explicitly made by user. */ +- (void)reloadLayoutIfNeeded +{ + if ([self privateIsEnabled] == YES) + { + UIView *textFieldView = _textFieldView; + + if (textFieldView && + _keyboardShowing == YES && + CGPointEqualToPoint(_topViewBeginOrigin, kIQCGPointInvalid) == false && + [textFieldView isAlertViewTextField] == NO) + { + [self optimizedAdjustPosition]; + } + } +} + +#pragma mark - UIKeyboad Notification methods +/* UIKeyboardWillShowNotification. */ +-(void)keyboardWillShow:(NSNotification*)aNotification +{ + _kbShowNotification = aNotification; + + // Boolean to know keyboard is showing/hiding + _keyboardShowing = YES; + + // Getting keyboard animation. + NSInteger curve = [[aNotification userInfo][UIKeyboardAnimationCurveUserInfoKey] integerValue]; + _animationCurve = curve<<16; + + // Getting keyboard animation duration + CGFloat duration = [[aNotification userInfo][UIKeyboardAnimationDurationUserInfoKey] floatValue]; + + //Saving animation duration + if (duration != 0.0) _animationDuration = duration; + + CGSize oldKBSize = _kbSize; + + // Getting UIKeyboardSize. + CGRect kbFrame = [[aNotification userInfo][UIKeyboardFrameEndUserInfoKey] CGRectValue]; + + CGRect screenSize = [[UIScreen mainScreen] bounds]; + + //Calculating actual keyboard displayed size, keyboard frame may be different when hardware keyboard is attached (Bug ID: #469) (Bug ID: #381) + CGRect intersectRect = CGRectIntersection(kbFrame, screenSize); + + if (CGRectIsNull(intersectRect)) + { + _kbSize = CGSizeMake(screenSize.size.width, 0); + } + else + { + _kbSize = intersectRect.size; + } + + if ([self privateIsEnabled] == NO) return; + + CFTimeInterval startTime = CACurrentMediaTime(); + [self showLog:[NSString stringWithFormat:@"****** %@ started ******",NSStringFromSelector(_cmd)]]; + + UIView *textFieldView = _textFieldView; + + if (textFieldView && CGPointEqualToPoint(_topViewBeginOrigin, kIQCGPointInvalid)) // (Bug ID: #5) + { + // keyboard is not showing(At the beginning only). We should save rootViewRect. + UIViewController *rootController = [textFieldView parentContainerViewController]; + _rootViewController = rootController; + + if (_rootViewControllerWhilePopGestureRecognizerActive == _rootViewController) + { + _topViewBeginOrigin = _topViewBeginOriginWhilePopGestureRecognizerActive; + } + else + { + _topViewBeginOrigin = rootController.view.frame.origin; + } + + _rootViewControllerWhilePopGestureRecognizerActive = nil; + _topViewBeginOriginWhilePopGestureRecognizerActive = kIQCGPointInvalid; + + [self showLog:[NSString stringWithFormat:@"Saving %@ beginning origin: %@",[rootController _IQDescription] ,NSStringFromCGPoint(_topViewBeginOrigin)]]; + } + + //If last restored keyboard size is different(any orientation accure), then refresh. otherwise not. + if (!CGSizeEqualToSize(_kbSize, oldKBSize)) + { + //If _textFieldView is inside UIAlertView then do nothing. (Bug ID: #37, #74, #76) + //See notes:- https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html If it is UIAlertView textField then do not affect anything (Bug ID: #70). + if (_keyboardShowing == YES && + textFieldView && + [textFieldView isAlertViewTextField] == NO) + { + [self optimizedAdjustPosition]; + } + } + + CFTimeInterval elapsedTime = CACurrentMediaTime() - startTime; + [self showLog:[NSString stringWithFormat:@"****** %@ ended: %g seconds ******\n",NSStringFromSelector(_cmd),elapsedTime]]; +} + +/* UIKeyboardDidShowNotification. */ +- (void)keyboardDidShow:(NSNotification*)aNotification +{ + if ([self privateIsEnabled] == NO) return; + + CFTimeInterval startTime = CACurrentMediaTime(); + [self showLog:[NSString stringWithFormat:@"****** %@ started ******",NSStringFromSelector(_cmd)]]; + + UIView *textFieldView = _textFieldView; + + // Getting topMost ViewController. + UIViewController *controller = [textFieldView topMostController]; + + //If _textFieldView viewController is presented as formSheet, then adjustPosition again because iOS internally update formSheet frame on keyboardShown. (Bug ID: #37, #74, #76) + if (_keyboardShowing == YES && + textFieldView && + (controller.modalPresentationStyle == UIModalPresentationFormSheet || controller.modalPresentationStyle == UIModalPresentationPageSheet) && + [textFieldView isAlertViewTextField] == NO) + { + [self optimizedAdjustPosition]; + } + + CFTimeInterval elapsedTime = CACurrentMediaTime() - startTime; + [self showLog:[NSString stringWithFormat:@"****** %@ ended: %g seconds ******\n",NSStringFromSelector(_cmd),elapsedTime]]; +} + +/* UIKeyboardWillHideNotification. So setting rootViewController to it's default frame. */ +- (void)keyboardWillHide:(NSNotification*)aNotification +{ + //If it's not a fake notification generated by [self setEnable:NO]. + if (aNotification) _kbShowNotification = nil; + + // Boolean to know keyboard is showing/hiding + _keyboardShowing = NO; + + // Getting keyboard animation duration + CGFloat aDuration = [[aNotification userInfo][UIKeyboardAnimationDurationUserInfoKey] floatValue]; + if (aDuration!= 0.0f) + { + _animationDuration = aDuration; + } + + //If not enabled then do nothing. + if ([self privateIsEnabled] == NO) return; + + CFTimeInterval startTime = CACurrentMediaTime(); + [self showLog:[NSString stringWithFormat:@"****** %@ started ******",NSStringFromSelector(_cmd)]]; + + //Commented due to #56. Added all the conditions below to handle UIWebView's textFields. (Bug ID: #56) + // We are unable to get textField object while keyboard showing on UIWebView's textField. (Bug ID: #11) +// if (_textFieldView == nil) return; + + //Restoring the contentOffset of the lastScrollView + if (_lastScrollView) + { + __weak typeof(self) weakSelf = self; + + [UIView animateWithDuration:_animationDuration delay:0 options:(_animationCurve|UIViewAnimationOptionBeginFromCurrentState) animations:^{ + + __strong typeof(self) strongSelf = weakSelf; + + strongSelf.lastScrollView.contentInset = strongSelf.startingContentInsets; + strongSelf.lastScrollView.scrollIndicatorInsets = strongSelf.startingScrollIndicatorInsets; + + if (strongSelf.lastScrollView.shouldRestoreScrollViewContentOffset) + { + strongSelf.lastScrollView.contentOffset = strongSelf.startingContentOffset; + } + + [self showLog:[NSString stringWithFormat:@"Restoring %@ contentInset to : %@ and contentOffset to : %@",[strongSelf.lastScrollView _IQDescription],NSStringFromUIEdgeInsets(strongSelf.startingContentInsets),NSStringFromCGPoint(strongSelf.startingContentOffset)]]; + + // TODO: restore scrollView state + // This is temporary solution. Have to implement the save and restore scrollView state + UIScrollView *superscrollView = strongSelf.lastScrollView; + do + { + CGSize contentSize = CGSizeMake(MAX(superscrollView.contentSize.width, CGRectGetWidth(superscrollView.frame)), MAX(superscrollView.contentSize.height, CGRectGetHeight(superscrollView.frame))); + + CGFloat minimumY = contentSize.height-CGRectGetHeight(superscrollView.frame); + + if (minimumY *textFields = [self responderViews]; + + //Getting index of current textField. + NSUInteger index = [textFields indexOfObject:_textFieldView]; + + //If it is not first textField. then it's previous object can becomeFirstResponder. + if (index != NSNotFound && + index > 0) + { + return YES; + } + else + { + return NO; + } +} + +/** Returns YES if can navigate to next responder textField/textView, otherwise NO. */ +-(BOOL)canGoNext +{ + //Getting all responder view's. + NSArray *textFields = [self responderViews]; + + //Getting index of current textField. + NSUInteger index = [textFields indexOfObject:_textFieldView]; + + //If it is not last textField. then it's next object becomeFirstResponder. + if (index != NSNotFound && + index < textFields.count-1) + { + return YES; + } + else + { + return NO; + } +} + +/** Navigate to previous responder textField/textView. */ +-(BOOL)goPrevious +{ + //Getting all responder view's. + NSArray<__kindof UIView*> *textFields = [self responderViews]; + + //Getting index of current textField. + NSUInteger index = [textFields indexOfObject:_textFieldView]; + + //If it is not first textField. then it's previous object becomeFirstResponder. + if (index != NSNotFound && + index > 0) + { + UITextField *nextTextField = textFields[index-1]; + + // Retaining textFieldView + UIView *textFieldRetain = _textFieldView; + + BOOL isAcceptAsFirstResponder = [nextTextField becomeFirstResponder]; + + // If it refuses then becoming previous textFieldView as first responder again. (Bug ID: #96) + if (isAcceptAsFirstResponder == NO) + { + //If next field refuses to become first responder then restoring old textField as first responder. + [textFieldRetain becomeFirstResponder]; + + [self showLog:[NSString stringWithFormat:@"Refuses to become first responder: %@",[nextTextField _IQDescription]]]; + } + + return isAcceptAsFirstResponder; + } + else + { + return NO; + } +} + +/** Navigate to next responder textField/textView. */ +-(BOOL)goNext +{ + //Getting all responder view's. + NSArray<__kindof UIView*> *textFields = [self responderViews]; + + //Getting index of current textField. + NSUInteger index = [textFields indexOfObject:_textFieldView]; + + //If it is not last textField. then it's next object becomeFirstResponder. + if (index != NSNotFound && + index < textFields.count-1) + { + UITextField *nextTextField = textFields[index+1]; + + // Retaining textFieldView + UIView *textFieldRetain = _textFieldView; + + BOOL isAcceptAsFirstResponder = [nextTextField becomeFirstResponder]; + + // If it refuses then becoming previous textFieldView as first responder again. (Bug ID: #96) + if (isAcceptAsFirstResponder == NO) + { + //If next field refuses to become first responder then restoring old textField as first responder. + [textFieldRetain becomeFirstResponder]; + + [self showLog:[NSString stringWithFormat:@"Refuses to become first responder: %@",[nextTextField _IQDescription]]]; + } + + return isAcceptAsFirstResponder; + } + else + { + return NO; + } +} + +#pragma mark AutoToolbar methods + +/** Get all UITextField/UITextView siblings of textFieldView. */ +-(NSArray<__kindof UIView*>*)responderViews +{ + UIView *superConsideredView; + + UIView *textFieldView = _textFieldView; + + //If find any consider responderView in it's upper hierarchy then will get deepResponderView. + for (Class consideredClass in _toolbarPreviousNextAllowedClasses) + { + superConsideredView = [textFieldView superviewOfClassType:consideredClass]; + + if (superConsideredView) + break; + } + + //If there is a superConsideredView in view's hierarchy, then fetching all it's subview that responds. No sorting for superConsideredView, it's by subView position. (Enhancement ID: #22) + if (superConsideredView) + { + return [superConsideredView deepResponderViews]; + } + //Otherwise fetching all the siblings + else + { + NSArray *textFields = [textFieldView responderSiblings]; + + //Sorting textFields according to behaviour + switch (_toolbarManageBehaviour) + { + //If autoToolbar behaviour is bySubviews, then returning it. + case IQAutoToolbarBySubviews: + return textFields; + break; + + //If autoToolbar behaviour is by tag, then sorting it according to tag property. + case IQAutoToolbarByTag: + return [textFields sortedArrayByTag]; + break; + + //If autoToolbar behaviour is by tag, then sorting it according to tag property. + case IQAutoToolbarByPosition: + return [textFields sortedArrayByPosition]; + break; + default: + return nil; + break; + } + } +} + +/** Add toolbar if it is required to add on textFields and it's siblings. */ +-(void)addToolbarIfRequired +{ + CFTimeInterval startTime = CACurrentMediaTime(); + [self showLog:[NSString stringWithFormat:@"****** %@ started ******",NSStringFromSelector(_cmd)]]; + + // Getting all the sibling textFields. + NSArray *siblings = [self responderViews]; + + [self showLog:[NSString stringWithFormat:@"Found %lu responder sibling(s)",(unsigned long)siblings.count]]; + + UIView *textFieldView = _textFieldView; + + //Either there is no inputAccessoryView or if accessoryView is not appropriate for current situation(There is Previous/Next/Done toolbar). + //setInputAccessoryView: check (Bug ID: #307) + if ([textFieldView respondsToSelector:@selector(setInputAccessoryView:)]) + { + if ([textFieldView inputAccessoryView] == nil || + [[textFieldView inputAccessoryView] tag] == kIQPreviousNextButtonToolbarTag || + [[textFieldView inputAccessoryView] tag] == kIQDoneButtonToolbarTag) + { + UITextField *textField = (UITextField*)textFieldView; + + IQBarButtonItemConfiguration *rightConfiguration = nil; + + //Supporting Custom Done button image (Enhancement ID: #366) + if (_toolbarDoneBarButtonItemImage) + { + rightConfiguration = [[IQBarButtonItemConfiguration alloc] initWithImage:_toolbarDoneBarButtonItemImage action:@selector(doneAction:)]; + } + //Supporting Custom Done button text (Enhancement ID: #209, #411, Bug ID: #376) + else if (_toolbarDoneBarButtonItemText) + { + rightConfiguration = [[IQBarButtonItemConfiguration alloc] initWithTitle:_toolbarDoneBarButtonItemText action:@selector(doneAction:)]; + } + else + { + rightConfiguration = [[IQBarButtonItemConfiguration alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone action:@selector(doneAction:)]; + } + + // If only one object is found, then adding only Done button. + if ((siblings.count==1 && self.previousNextDisplayMode == IQPreviousNextDisplayModeDefault) || self.previousNextDisplayMode == IQPreviousNextDisplayModeAlwaysHide) + { + [textField addKeyboardToolbarWithTarget:self titleText:(_shouldShowToolbarPlaceholder ? textField.drawingToolbarPlaceholder : nil) rightBarButtonConfiguration:rightConfiguration previousBarButtonConfiguration:nil nextBarButtonConfiguration:nil]; + + textField.inputAccessoryView.tag = kIQDoneButtonToolbarTag; // (Bug ID: #78) + } + //If there is multiple siblings of textField + else if ((siblings.count && self.previousNextDisplayMode == IQPreviousNextDisplayModeDefault) || self.previousNextDisplayMode == IQPreviousNextDisplayModeAlwaysShow) + { + IQBarButtonItemConfiguration *prevConfiguration = nil; + + //Supporting Custom Done button image (Enhancement ID: #366) + if (_toolbarPreviousBarButtonItemImage) + { + prevConfiguration = [[IQBarButtonItemConfiguration alloc] initWithImage:_toolbarPreviousBarButtonItemImage action:@selector(previousAction:)]; + } + //Supporting Custom Done button text (Enhancement ID: #209, #411, Bug ID: #376) + else if (_toolbarPreviousBarButtonItemText) + { + prevConfiguration = [[IQBarButtonItemConfiguration alloc] initWithTitle:_toolbarPreviousBarButtonItemText action:@selector(previousAction:)]; + } + else + { + prevConfiguration = [[IQBarButtonItemConfiguration alloc] initWithImage:[UIImage keyboardPreviousImage] action:@selector(previousAction:)]; + } + + IQBarButtonItemConfiguration *nextConfiguration = nil; + + //Supporting Custom Done button image (Enhancement ID: #366) + if (_toolbarNextBarButtonItemImage) + { + nextConfiguration = [[IQBarButtonItemConfiguration alloc] initWithImage:_toolbarNextBarButtonItemImage action:@selector(nextAction:)]; + } + //Supporting Custom Done button text (Enhancement ID: #209, #411, Bug ID: #376) + else if (_toolbarNextBarButtonItemText) + { + nextConfiguration = [[IQBarButtonItemConfiguration alloc] initWithTitle:_toolbarNextBarButtonItemText action:@selector(nextAction:)]; + } + else + { + nextConfiguration = [[IQBarButtonItemConfiguration alloc] initWithImage:[UIImage keyboardNextImage] action:@selector(nextAction:)]; + } + + [textField addKeyboardToolbarWithTarget:self titleText:(_shouldShowToolbarPlaceholder ? textField.drawingToolbarPlaceholder : nil) rightBarButtonConfiguration:rightConfiguration previousBarButtonConfiguration:prevConfiguration nextBarButtonConfiguration:nextConfiguration]; + + textField.inputAccessoryView.tag = kIQPreviousNextButtonToolbarTag; // (Bug ID: #78) + } + + IQToolbar *toolbar = textField.keyboardToolbar; + + //Bar style according to keyboard appearance + if ([textField respondsToSelector:@selector(keyboardAppearance)]) + { + switch ([textField keyboardAppearance]) + { + case UIKeyboardAppearanceDark: + { + toolbar.barStyle = UIBarStyleBlack; + [toolbar setTintColor:[UIColor whiteColor]]; + [toolbar setBarTintColor:nil]; + } + break; + default: + { + toolbar.barStyle = UIBarStyleDefault; + toolbar.barTintColor = _toolbarBarTintColor; + + //Setting toolbar tintColor // (Enhancement ID: #30) + if (_shouldToolbarUsesTextFieldTintColor) + { + toolbar.tintColor = [textField tintColor]; + } + else if (_toolbarTintColor) + { + toolbar.tintColor = _toolbarTintColor; + } + else + { + toolbar.tintColor = [UIColor blackColor]; + } + } + break; + } + + //If need to show placeholder + if (_shouldShowToolbarPlaceholder && + textField.shouldHideToolbarPlaceholder == NO) + { + //Updating placeholder //(Bug ID: #148, #272) + if (toolbar.titleBarButton.title == nil || + [toolbar.titleBarButton.title isEqualToString:textField.drawingToolbarPlaceholder] == NO) + { + [toolbar.titleBarButton setTitle:textField.drawingToolbarPlaceholder]; + } + + //Setting toolbar title font. // (Enhancement ID: #30) + if (_placeholderFont && + [_placeholderFont isKindOfClass:[UIFont class]]) + { + [toolbar.titleBarButton setTitleFont:_placeholderFont]; + } + + //Setting toolbar title color. // (Enhancement ID: #880) + if (_placeholderColor && + [_placeholderColor isKindOfClass:[UIColor class]]) + { + [toolbar.titleBarButton setTitleColor:_placeholderColor]; + } + + //Setting toolbar button title color. // (Enhancement ID: #880) + if (_placeholderButtonColor && + [_placeholderButtonColor isKindOfClass:[UIColor class]]) + { + [toolbar.titleBarButton setSelectableTitleColor:_placeholderButtonColor]; + } + } + else + { + //Updating placeholder //(Bug ID: #272) + toolbar.titleBarButton.title = nil; + } + } + + //In case of UITableView (Special), the next/previous buttons has to be refreshed everytime. (Bug ID: #56) + // If firstTextField, then previous should not be enabled. + if (siblings.firstObject == textField) + { + if (siblings.count == 1) + { + textField.keyboardToolbar.previousBarButton.enabled = NO; + textField.keyboardToolbar.nextBarButton.enabled = NO; + } + else + { + textField.keyboardToolbar.previousBarButton.enabled = NO; + textField.keyboardToolbar.nextBarButton.enabled = YES; + } + } + // If lastTextField then next should not be enaled. + else if ([siblings lastObject] == textField) + { + textField.keyboardToolbar.previousBarButton.enabled = YES; + textField.keyboardToolbar.nextBarButton.enabled = NO; + } + else + { + textField.keyboardToolbar.previousBarButton.enabled = YES; + textField.keyboardToolbar.nextBarButton.enabled = YES; + } + } + } + + CFTimeInterval elapsedTime = CACurrentMediaTime() - startTime; + [self showLog:[NSString stringWithFormat:@"****** %@ ended: %g seconds ******\n",NSStringFromSelector(_cmd),elapsedTime]]; +} + +/** Remove any toolbar if it is IQToolbar. */ +-(void)removeToolbarIfRequired // (Bug ID: #18) +{ + CFTimeInterval startTime = CACurrentMediaTime(); + [self showLog:[NSString stringWithFormat:@"****** %@ started ******",NSStringFromSelector(_cmd)]]; + + // Getting all the sibling textFields. + NSArray *siblings = [self responderViews]; + + [self showLog:[NSString stringWithFormat:@"Found %lu responder sibling(s)",(unsigned long)siblings.count]]; + + for (UITextField *textField in siblings) + { + UIView *toolbar = [textField inputAccessoryView]; + + // (Bug ID: #78) + //setInputAccessoryView: check (Bug ID: #307) + if ([textField respondsToSelector:@selector(setInputAccessoryView:)] && + ([toolbar isKindOfClass:[IQToolbar class]] && (toolbar.tag == kIQDoneButtonToolbarTag || toolbar.tag == kIQPreviousNextButtonToolbarTag))) + { + textField.inputAccessoryView = nil; + [textField reloadInputViews]; + } + } + + CFTimeInterval elapsedTime = CACurrentMediaTime() - startTime; + [self showLog:[NSString stringWithFormat:@"****** %@ ended: %g seconds ******\n",NSStringFromSelector(_cmd),elapsedTime]]; +} + +/** reloadInputViews to reload toolbar buttons enable/disable state on the fly Enhancement ID #434. */ +- (void)reloadInputViews +{ + //If enabled then adding toolbar. + if ([self privateIsEnableAutoToolbar] == YES) + { + [self addToolbarIfRequired]; + } + //Else removing toolbar. + else + { + [self removeToolbarIfRequired]; + } +} + +#pragma mark previous/next/done functionality +/** previousAction. */ +-(void)previousAction:(IQBarButtonItem*)barButton +{ + //If user wants to play input Click sound. Then Play Input Click Sound. + if (_shouldPlayInputClicks) + { + [[UIDevice currentDevice] playInputClick]; + } + + if ([self canGoPrevious]) + { + UIView *currentTextFieldView = _textFieldView; + BOOL isAcceptAsFirstResponder = [self goPrevious]; + + NSInvocation *invocation = barButton.invocation; + + //Handling search bar special case + { + UISearchBar *searchBar = currentTextFieldView.searchBar; + + if (searchBar) + { + invocation = searchBar.keyboardToolbar.previousBarButton.invocation; + } + } + + if (isAcceptAsFirstResponder == YES && barButton.invocation) + { + if (barButton.invocation.methodSignature.numberOfArguments > 2) + { + [barButton.invocation setArgument:¤tTextFieldView atIndex:2]; + } + + [barButton.invocation invoke]; + } + } +} + +/** nextAction. */ +-(void)nextAction:(IQBarButtonItem*)barButton +{ + //If user wants to play input Click sound. Then Play Input Click Sound. + if (_shouldPlayInputClicks) + { + [[UIDevice currentDevice] playInputClick]; + } + + if ([self canGoNext]) + { + UIView *currentTextFieldView = _textFieldView; + BOOL isAcceptAsFirstResponder = [self goNext]; + + NSInvocation *invocation = barButton.invocation; + + //Handling search bar special case + { + UISearchBar *searchBar = currentTextFieldView.searchBar; + + if (searchBar) + { + invocation = searchBar.keyboardToolbar.nextBarButton.invocation; + } + } + + if (isAcceptAsFirstResponder == YES && barButton.invocation) + { + if (barButton.invocation.methodSignature.numberOfArguments > 2) + { + [barButton.invocation setArgument:¤tTextFieldView atIndex:2]; + } + + [barButton.invocation invoke]; + } + } +} + +/** doneAction. Resigning current textField. */ +-(void)doneAction:(IQBarButtonItem*)barButton +{ + //If user wants to play input Click sound. Then Play Input Click Sound. + if (_shouldPlayInputClicks) + { + [[UIDevice currentDevice] playInputClick]; + } + + UIView *currentTextFieldView = _textFieldView; + BOOL isResignedFirstResponder = [self resignFirstResponder]; + + NSInvocation *invocation = barButton.invocation; + + //Handling search bar special case + { + UISearchBar *searchBar = currentTextFieldView.searchBar; + + if (searchBar) + { + invocation = searchBar.keyboardToolbar.doneBarButton.invocation; + } + } + + if (isResignedFirstResponder == YES && barButton.invocation) + { + if (barButton.invocation.methodSignature.numberOfArguments > 2) + { + [barButton.invocation setArgument:¤tTextFieldView atIndex:2]; + } + + [barButton.invocation invoke]; + } +} + +#pragma mark - Customised textField/textView support. + +/** + Add customised Notification for third party customised TextField/TextView. + */ +-(void)registerTextFieldViewClass:(nonnull Class)aClass + didBeginEditingNotificationName:(nonnull NSString *)didBeginEditingNotificationName + didEndEditingNotificationName:(nonnull NSString *)didEndEditingNotificationName +{ + [_registeredClasses addObject:aClass]; + + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldViewDidBeginEditing:) name:didBeginEditingNotificationName object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldViewDidEndEditing:) name:didEndEditingNotificationName object:nil]; +} + +/** + Remove customised Notification for third party customised TextField/TextView. + */ +-(void)unregisterTextFieldViewClass:(nonnull Class)aClass + didBeginEditingNotificationName:(nonnull NSString *)didBeginEditingNotificationName + didEndEditingNotificationName:(nonnull NSString *)didEndEditingNotificationName +{ + [_registeredClasses removeObject:aClass]; + + [[NSNotificationCenter defaultCenter] removeObserver:self name:didBeginEditingNotificationName object:nil]; + [[NSNotificationCenter defaultCenter] removeObserver:self name:didEndEditingNotificationName object:nil]; +} + +-(void)registerAllNotifications +{ + // Registering for keyboard notification. + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide:) name:UIKeyboardDidHideNotification object:nil]; + + // Registering for UITextField notification. + [self registerTextFieldViewClass:[UITextField class] + didBeginEditingNotificationName:UITextFieldTextDidBeginEditingNotification + didEndEditingNotificationName:UITextFieldTextDidEndEditingNotification]; + + // Registering for UITextView notification. + [self registerTextFieldViewClass:[UITextView class] + didBeginEditingNotificationName:UITextViewTextDidBeginEditingNotification + didEndEditingNotificationName:UITextViewTextDidEndEditingNotification]; + + // Registering for orientation changes notification + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willChangeStatusBarOrientation:) name:UIApplicationWillChangeStatusBarOrientationNotification object:[UIApplication sharedApplication]]; +} + +-(void)unregisterAllNotifications +{ + // Unregistering for keyboard notification. + [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil]; + [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidShowNotification object:nil]; + [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil]; + [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidHideNotification object:nil]; + + // Unregistering for UITextField notification. + [self unregisterTextFieldViewClass:[UITextField class] + didBeginEditingNotificationName:UITextFieldTextDidBeginEditingNotification + didEndEditingNotificationName:UITextFieldTextDidEndEditingNotification]; + + // Unregistering for UITextView notification. + [self unregisterTextFieldViewClass:[UITextView class] + didBeginEditingNotificationName:UITextViewTextDidBeginEditingNotification + didEndEditingNotificationName:UITextViewTextDidEndEditingNotification]; + + // Unregistering for orientation changes notification + [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationWillChangeStatusBarOrientationNotification object:[UIApplication sharedApplication]]; +} + +-(void)showLog:(NSString*)logString +{ + if (_enableDebugging) + { + NSLog(@"IQKeyboardManager: %@",logString); + } +} + +@end diff --git a/Ifish/controllers/HotBar/Lib/IQKeyboardManager/IQKeyboardReturnKeyHandler.h b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/IQKeyboardReturnKeyHandler.h new file mode 100755 index 0000000..81cdd4b --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/IQKeyboardReturnKeyHandler.h @@ -0,0 +1,99 @@ +// +// IQKeyboardReturnKeyHandler.h +// https://github.com/hackiftekhar/IQKeyboardManager +// Copyright (c) 2013-16 Iftekhar Qurashi. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "IQKeyboardManagerConstants.h" + +#import +#import + +#import + +@class UITextField, UIView, UIViewController; +@protocol UITextFieldDelegate, UITextViewDelegate; + +/** + Manages the return key to work like next/done in a view hierarchy. + */ +@interface IQKeyboardReturnKeyHandler : NSObject + +///---------------------- +/// @name Initializations +///---------------------- + +/** + Add all the textFields available in UIViewController's view. + */ +-(nonnull instancetype)initWithViewController:(nullable UIViewController*)controller NS_DESIGNATED_INITIALIZER; + +/** + Unavailable. Please use initWithViewController: or init method + */ +-(nonnull instancetype)initWithCoder:(nullable NSCoder *)aDecoder NS_UNAVAILABLE; + +///--------------- +/// @name Settings +///--------------- + +/** + Delegate of textField/textView. + */ +@property(nullable, nonatomic, weak) id delegate; + +/** + Set the last textfield return key type. Default is UIReturnKeyDefault. + */ +@property(nonatomic, assign) UIReturnKeyType lastTextFieldReturnKeyType; + +///---------------------------------------------- +/// @name Registering/Unregistering textFieldView +///---------------------------------------------- + +/** + Should pass UITextField/UITextView instance. Assign textFieldView delegate to self, change it's returnKeyType. + + @param textFieldView UITextField/UITextView object to register. + */ +-(void)addTextFieldView:(nonnull UIView*)textFieldView; + +/** + Should pass UITextField/UITextView instance. Restore it's textFieldView delegate and it's returnKeyType. + + @param textFieldView UITextField/UITextView object to unregister. + */ +-(void)removeTextFieldView:(nonnull UIView*)textFieldView; + +/** + Add all the UITextField/UITextView responderView's. + + @param view object to register all it's responder subviews. + */ +-(void)addResponderFromView:(nonnull UIView*)view; + +/** + Remove all the UITextField/UITextView responderView's. + + @param view object to unregister all it's responder subviews. + */ +-(void)removeResponderFromView:(nonnull UIView*)view; + +@end diff --git a/Ifish/controllers/HotBar/Lib/IQKeyboardManager/IQKeyboardReturnKeyHandler.m b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/IQKeyboardReturnKeyHandler.m new file mode 100755 index 0000000..5fbb415 --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/IQKeyboardReturnKeyHandler.m @@ -0,0 +1,637 @@ +// +// IQKeyboardReturnKeyHandler.m +// https://github.com/hackiftekhar/IQKeyboardManager +// Copyright (c) 2013-16 Iftekhar Qurashi. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "IQKeyboardReturnKeyHandler.h" +#import "IQKeyboardManager.h" +#import "IQUIView+Hierarchy.h" +#import "IQNSArray+Sort.h" + +#import +#import +#import + +@interface IQTextFieldViewInfoModal : NSObject + +@property(nullable, nonatomic, weak) UIView *textFieldView; +@property(nullable, nonatomic, weak) id textFieldDelegate; +@property(nullable, nonatomic, weak) id textViewDelegate; +@property(nonatomic) UIReturnKeyType originalReturnKeyType; + +@end + +@implementation IQTextFieldViewInfoModal + +-(instancetype)initWithTextFieldView:(UIView*)textFieldView textFieldDelegate:(id)textFieldDelegate textViewDelegate:(id)textViewDelegate originalReturnKey:(UIReturnKeyType)returnKeyType +{ + self = [super init]; + + if (self) + { + _textFieldView = textFieldView; + _textFieldDelegate = textFieldDelegate; + _textViewDelegate = textViewDelegate; + _originalReturnKeyType = returnKeyType; + } + + return self; +} + +@end + + +@interface IQKeyboardReturnKeyHandler () + +-(void)updateReturnKeyTypeOnTextField:(UIView*)textField; + +@end + +@implementation IQKeyboardReturnKeyHandler +{ + NSMutableSet *textFieldInfoCache; +} + +@synthesize lastTextFieldReturnKeyType = _lastTextFieldReturnKeyType; +@synthesize delegate = _delegate; + +- (instancetype)init +{ + self = [self initWithViewController:nil]; + return self; +} + +-(instancetype)initWithViewController:(nullable UIViewController*)controller +{ + self = [super init]; + + if (self) + { + textFieldInfoCache = [[NSMutableSet alloc] init]; + + if (controller.view) + { + [self addResponderFromView:controller.view]; + } + } + + return self; +} + +-(IQTextFieldViewInfoModal*)textFieldViewCachedInfo:(UIView*)textField +{ + for (IQTextFieldViewInfoModal *modal in textFieldInfoCache) + if (modal.textFieldView == textField) return modal; + + return nil; +} + +#pragma mark - Add/Remove TextFields +-(void)addResponderFromView:(UIView*)view +{ + NSArray *textFields = [view deepResponderViews]; + + for (UIView *textField in textFields) [self addTextFieldView:textField]; +} + +-(void)removeResponderFromView:(UIView*)view +{ + NSArray *textFields = [view deepResponderViews]; + + for (UIView *textField in textFields) [self removeTextFieldView:textField]; +} + +-(void)removeTextFieldView:(UIView*)view +{ + IQTextFieldViewInfoModal *modal = [self textFieldViewCachedInfo:view]; + + if (modal) + { + if ([view isKindOfClass:[UITextField class]]) + { + UITextField *textField = (UITextField*)view; + textField.returnKeyType = modal.originalReturnKeyType; + textField.delegate = modal.textFieldDelegate; + } + else if ([view isKindOfClass:[UITextView class]]) + { + UITextView *textView = (UITextView*)view; + textView.returnKeyType = modal.originalReturnKeyType; + textView.delegate = modal.textViewDelegate; + } + + [textFieldInfoCache removeObject:modal]; + } +} + +-(void)addTextFieldView:(UIView*)view +{ + IQTextFieldViewInfoModal *modal = [[IQTextFieldViewInfoModal alloc] initWithTextFieldView:view textFieldDelegate:nil textViewDelegate:nil originalReturnKey:UIReturnKeyDefault]; + + if ([view isKindOfClass:[UITextField class]]) + { + UITextField *textField = (UITextField*)view; + modal.originalReturnKeyType = textField.returnKeyType; + modal.textFieldDelegate = textField.delegate; + [textField setDelegate:self]; + } + else if ([view isKindOfClass:[UITextView class]]) + { + UITextView *textView = (UITextView*)view; + modal.originalReturnKeyType = textView.returnKeyType; + modal.textViewDelegate = textView.delegate; + [textView setDelegate:self]; + } + + [textFieldInfoCache addObject:modal]; +} + +-(void)updateReturnKeyTypeOnTextField:(UIView*)textField +{ + UIView *superConsideredView; + + //If find any consider responderView in it's upper hierarchy then will get deepResponderView. (Bug ID: #347) + for (Class consideredClass in [[IQKeyboardManager sharedManager] toolbarPreviousNextAllowedClasses]) + { + superConsideredView = [textField superviewOfClassType:consideredClass]; + + if (superConsideredView) + break; + } + + NSArray *textFields = nil; + + //If there is a tableView in view's hierarchy, then fetching all it's subview that responds. No sorting for tableView, it's by subView position. + if (superConsideredView) // // (Enhancement ID: #22) + { + textFields = [superConsideredView deepResponderViews]; + } + //Otherwise fetching all the siblings + else + { + textFields = [textField responderSiblings]; + + //Sorting textFields according to behaviour + switch ([[IQKeyboardManager sharedManager] toolbarManageBehaviour]) + { + //If needs to sort it by tag + case IQAutoToolbarByTag: + textFields = [textFields sortedArrayByTag]; + break; + + //If needs to sort it by Position + case IQAutoToolbarByPosition: + textFields = [textFields sortedArrayByPosition]; + break; + + default: + break; + } + } + + //If it's the last textField in responder view, else next + [(UITextField*)textField setReturnKeyType:(([textFields lastObject] == textField) ? self.lastTextFieldReturnKeyType : UIReturnKeyNext)]; +} + +#pragma mark - Goto next or Resign. + +-(BOOL)goToNextResponderOrResign:(UIView*)textField +{ + UIView *superConsideredView; + + //If find any consider responderView in it's upper hierarchy then will get deepResponderView. (Bug ID: #347) + for (Class consideredClass in [[IQKeyboardManager sharedManager] toolbarPreviousNextAllowedClasses]) + { + superConsideredView = [textField superviewOfClassType:consideredClass]; + + if (superConsideredView) + break; + } + + NSArray *textFields = nil; + + //If there is a tableView in view's hierarchy, then fetching all it's subview that responds. No sorting for tableView, it's by subView position. + if (superConsideredView) // // (Enhancement ID: #22) + { + textFields = [superConsideredView deepResponderViews]; + } + //Otherwise fetching all the siblings + else + { + textFields = [textField responderSiblings]; + + //Sorting textFields according to behaviour + switch ([[IQKeyboardManager sharedManager] toolbarManageBehaviour]) + { + //If needs to sort it by tag + case IQAutoToolbarByTag: + textFields = [textFields sortedArrayByTag]; + break; + + //If needs to sort it by Position + case IQAutoToolbarByPosition: + textFields = [textFields sortedArrayByPosition]; + break; + + default: + break; + } + } + + //Getting index of current textField. + NSUInteger index = [textFields indexOfObject:textField]; + + //If it is not last textField. then it's next object becomeFirstResponder. + if (index != NSNotFound && index < textFields.count-1) + { + [textFields[index+1] becomeFirstResponder]; + return NO; + } + else + { + [textField resignFirstResponder]; + return YES; + } +} + +#pragma mark - TextField delegate +- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField +{ + id delegate = self.delegate; + + if (delegate == nil) + { + IQTextFieldViewInfoModal *modal = [self textFieldViewCachedInfo:textField]; + delegate = modal.textFieldDelegate; + } + + if ([delegate respondsToSelector:@selector(textFieldShouldBeginEditing:)]) + return [delegate textFieldShouldBeginEditing:textField]; + else + return YES; +} + +- (void)textFieldDidBeginEditing:(UITextField *)textField +{ + [self updateReturnKeyTypeOnTextField:textField]; + + id delegate = self.delegate; + + if (delegate == nil) + { + IQTextFieldViewInfoModal *modal = [self textFieldViewCachedInfo:textField]; + delegate = modal.textFieldDelegate; + } + + if ([delegate respondsToSelector:@selector(textFieldDidBeginEditing:)]) + [delegate textFieldDidBeginEditing:textField]; +} + +- (BOOL)textFieldShouldEndEditing:(UITextField *)textField +{ + id delegate = self.delegate; + + if (delegate == nil) + { + IQTextFieldViewInfoModal *modal = [self textFieldViewCachedInfo:textField]; + delegate = modal.textFieldDelegate; + } + + if ([delegate respondsToSelector:@selector(textFieldShouldEndEditing:)]) + return [delegate textFieldShouldEndEditing:textField]; + else + return YES; +} + +- (void)textFieldDidEndEditing:(UITextField *)textField +{ + id delegate = self.delegate; + + if (delegate == nil) + { + IQTextFieldViewInfoModal *modal = [self textFieldViewCachedInfo:textField]; + delegate = modal.textFieldDelegate; + } + + if ([delegate respondsToSelector:@selector(textFieldDidEndEditing:)]) + [delegate textFieldDidEndEditing:textField]; +} + +- (void)textFieldDidEndEditing:(UITextField *)textField reason:(UITextFieldDidEndEditingReason)reason NS_AVAILABLE_IOS(10_0); +{ + id delegate = self.delegate; + + if (delegate == nil) + { + IQTextFieldViewInfoModal *modal = [self textFieldViewCachedInfo:textField]; + delegate = modal.textFieldDelegate; + } + +#ifdef __IPHONE_11_0 + if (@available(iOS 10.0, *)) { +#endif + if ([delegate respondsToSelector:@selector(textFieldDidEndEditing:reason:)]) + [delegate textFieldDidEndEditing:textField reason:reason]; +#ifdef __IPHONE_11_0 + } +#endif +} + +- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string +{ + id delegate = self.delegate; + + if (delegate == nil) + { + IQTextFieldViewInfoModal *modal = [self textFieldViewCachedInfo:textField]; + delegate = modal.textFieldDelegate; + } + + if ([delegate respondsToSelector:@selector(textField:shouldChangeCharactersInRange:replacementString:)]) + return [delegate textField:textField shouldChangeCharactersInRange:range replacementString:string]; + else + return YES; +} + +- (BOOL)textFieldShouldClear:(UITextField *)textField +{ + id delegate = self.delegate; + + if (delegate == nil) + { + IQTextFieldViewInfoModal *modal = [self textFieldViewCachedInfo:textField]; + delegate = modal.textFieldDelegate; + } + + if ([delegate respondsToSelector:@selector(textFieldShouldClear:)]) + return [delegate textFieldShouldClear:textField]; + else + return YES; +} + +-(BOOL)textFieldShouldReturn:(UITextField *)textField +{ + id delegate = self.delegate; + + if (delegate == nil) + { + IQTextFieldViewInfoModal *modal = [self textFieldViewCachedInfo:textField]; + delegate = modal.textFieldDelegate; + } + + if ([delegate respondsToSelector:@selector(textFieldShouldReturn:)]) + { + BOOL shouldReturn = [delegate textFieldShouldReturn:textField]; + + if (shouldReturn) + { + shouldReturn = [self goToNextResponderOrResign:textField]; + } + + return shouldReturn; + } + else + { + return [self goToNextResponderOrResign:textField]; + } +} + + +#pragma mark - TextView delegate +- (BOOL)textViewShouldBeginEditing:(UITextView *)textView +{ + id delegate = self.delegate; + + if (delegate == nil) + { + IQTextFieldViewInfoModal *modal = [self textFieldViewCachedInfo:textView]; + delegate = modal.textViewDelegate; + } + + if ([delegate respondsToSelector:@selector(textViewShouldBeginEditing:)]) + return [delegate textViewShouldBeginEditing:textView]; + else + return YES; +} + +- (BOOL)textViewShouldEndEditing:(UITextView *)textView +{ + id delegate = self.delegate; + + if (delegate == nil) + { + IQTextFieldViewInfoModal *modal = [self textFieldViewCachedInfo:textView]; + delegate = modal.textViewDelegate; + } + + if ([delegate respondsToSelector:@selector(textViewShouldEndEditing:)]) + return [delegate textViewShouldEndEditing:textView]; + else + return YES; +} + +- (void)textViewDidBeginEditing:(UITextView *)textView +{ + [self updateReturnKeyTypeOnTextField:textView]; + + id delegate = self.delegate; + + if (delegate == nil) + { + IQTextFieldViewInfoModal *modal = [self textFieldViewCachedInfo:textView]; + delegate = modal.textViewDelegate; + } + + if ([delegate respondsToSelector:@selector(textViewDidBeginEditing:)]) + [delegate textViewDidBeginEditing:textView]; +} + +- (void)textViewDidEndEditing:(UITextView *)textView +{ + id delegate = self.delegate; + + if (delegate == nil) + { + IQTextFieldViewInfoModal *modal = [self textFieldViewCachedInfo:textView]; + delegate = modal.textViewDelegate; + } + + if ([delegate respondsToSelector:@selector(textViewDidEndEditing:)]) + [delegate textViewDidEndEditing:textView]; +} + +- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text +{ + id delegate = self.delegate; + + if (delegate == nil) + { + IQTextFieldViewInfoModal *modal = [self textFieldViewCachedInfo:textView]; + delegate = modal.textViewDelegate; + } + + BOOL shouldReturn = YES; + + if ([delegate respondsToSelector:@selector(textView:shouldChangeTextInRange:replacementText:)]) + shouldReturn = [delegate textView:textView shouldChangeTextInRange:range replacementText:text]; + + if (shouldReturn && [text isEqualToString:@"\n"]) + { + shouldReturn = [self goToNextResponderOrResign:textView]; + } + + return shouldReturn; +} + +- (void)textViewDidChange:(UITextView *)textView +{ + id delegate = self.delegate; + + if (delegate == nil) + { + IQTextFieldViewInfoModal *modal = [self textFieldViewCachedInfo:textView]; + delegate = modal.textViewDelegate; + } + + if ([delegate respondsToSelector:@selector(textViewDidChange:)]) + [delegate textViewDidChange:textView]; +} + +- (void)textViewDidChangeSelection:(UITextView *)textView +{ + id delegate = self.delegate; + + if (delegate == nil) + { + IQTextFieldViewInfoModal *modal = [self textFieldViewCachedInfo:textView]; + delegate = modal.textViewDelegate; + } + + if ([delegate respondsToSelector:@selector(textViewDidChangeSelection:)]) + [delegate textViewDidChangeSelection:textView]; +} + +- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange interaction:(UITextItemInteraction)interaction NS_AVAILABLE_IOS(10_0); +{ + id delegate = self.delegate; + + if (delegate == nil) + { + IQTextFieldViewInfoModal *modal = [self textFieldViewCachedInfo:textView]; + delegate = modal.textViewDelegate; + } + +#ifdef __IPHONE_11_0 + if (@available(iOS 10.0, *)) { +#endif + if ([delegate respondsToSelector:@selector(textView:shouldInteractWithURL:inRange:interaction:)]) + return [delegate textView:textView shouldInteractWithURL:URL inRange:characterRange interaction:interaction]; +#ifdef __IPHONE_11_0 + } +#endif + + return YES; +} + +- (BOOL)textView:(UITextView *)textView shouldInteractWithTextAttachment:(NSTextAttachment *)textAttachment inRange:(NSRange)characterRange interaction:(UITextItemInteraction)interaction NS_AVAILABLE_IOS(10_0); +{ + id delegate = self.delegate; + + if (delegate == nil) + { + IQTextFieldViewInfoModal *modal = [self textFieldViewCachedInfo:textView]; + delegate = modal.textViewDelegate; + } + +#ifdef __IPHONE_11_0 + if (@available(iOS 10.0, *)) { +#endif + if ([delegate respondsToSelector:@selector(textView:shouldInteractWithTextAttachment:inRange:interaction:)]) + return [delegate textView:textView shouldInteractWithTextAttachment:textAttachment inRange:characterRange interaction:interaction]; +#ifdef __IPHONE_11_0 + } +#endif + + return YES; +} + +- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange +{ + id delegate = self.delegate; + + if (delegate == nil) + { + IQTextFieldViewInfoModal *modal = [self textFieldViewCachedInfo:textView]; + delegate = modal.textViewDelegate; + } + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + if ([delegate respondsToSelector:@selector(textView:shouldInteractWithURL:inRange:)]) + return [delegate textView:textView shouldInteractWithURL:URL inRange:characterRange]; +#pragma clang diagnostic pop + else + return YES; +} + +- (BOOL)textView:(UITextView *)textView shouldInteractWithTextAttachment:(NSTextAttachment *)textAttachment inRange:(NSRange)characterRange +{ + id delegate = self.delegate; + + if (delegate == nil) + { + IQTextFieldViewInfoModal *modal = [self textFieldViewCachedInfo:textView]; + delegate = modal.textViewDelegate; + } + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + if ([delegate respondsToSelector:@selector(textView:shouldInteractWithTextAttachment:inRange:)]) + return [delegate textView:textView shouldInteractWithTextAttachment:textAttachment inRange:characterRange]; +#pragma clang diagnostic pop + else + return YES; +} + +-(void)dealloc +{ + for (IQTextFieldViewInfoModal *modal in textFieldInfoCache) + { + UIView *textFieldView = modal.textFieldView; + if ([textFieldView isKindOfClass:[UITextField class]]) + { + UITextField *textField = (UITextField*)textFieldView; + textField.returnKeyType = modal.originalReturnKeyType; + textField.delegate = modal.textFieldDelegate + ; + } + else if ([textFieldView isKindOfClass:[UITextView class]]) + { + UITextView *textView = (UITextView*)textFieldView; + textView.returnKeyType = modal.originalReturnKeyType; + textView.delegate = modal.textViewDelegate; + } + } + + [textFieldInfoCache removeAllObjects]; +} + +@end diff --git a/Ifish/controllers/HotBar/Lib/IQKeyboardManager/IQTextView/IQTextView.h b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/IQTextView/IQTextView.h new file mode 100755 index 0000000..8ff1859 --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/IQTextView/IQTextView.h @@ -0,0 +1,47 @@ +// +// IQTextView.h +// https://github.com/hackiftekhar/IQKeyboardManager +// Copyright (c) 2013-16 Iftekhar Qurashi. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "IQKeyboardManagerConstants.h" + +#import + +/** + UITextView with placeholder support + */ +@interface IQTextView : UITextView + +/** + Set textView's placeholder text. Default is nil. + */ +@property(nullable, nonatomic,copy) IBInspectable NSString *placeholder; + +/** + To set textView's placeholder text color. Default is nil. + */ +@property(nullable, nonatomic,copy) IBInspectable UIColor *placeholderTextColor; + +@end + + + + diff --git a/Ifish/controllers/HotBar/Lib/IQKeyboardManager/IQTextView/IQTextView.m b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/IQTextView/IQTextView.m new file mode 100755 index 0000000..f451552 --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/IQTextView/IQTextView.m @@ -0,0 +1,183 @@ +// +// IQTextView.m +// https://github.com/hackiftekhar/IQKeyboardManager +// Copyright (c) 2013-16 Iftekhar Qurashi. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "IQTextView.h" + +#import +#import +#import + +@interface IQTextView () + +@property(nonatomic, strong) UILabel *placeholderLabel; + +@end + +@implementation IQTextView + +@synthesize placeholder = _placeholder; +@synthesize placeholderLabel = _placeholderLabel; +@synthesize placeholderTextColor = _placeholderTextColor; + +-(void)initialize +{ + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(refreshPlaceholder) name:UITextViewTextDidChangeNotification object:self]; +} + +-(void)dealloc +{ + [_placeholderLabel removeFromSuperview]; + _placeholderLabel = nil; + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + +- (instancetype)init +{ + self = [super init]; + if (self) { + [self initialize]; + } + return self; +} + +-(void)awakeFromNib +{ + [super awakeFromNib]; + [self initialize]; +} + +-(void)refreshPlaceholder +{ + if([[self text] length]) + { + [_placeholderLabel setAlpha:0]; + } + else + { + [_placeholderLabel setAlpha:1]; + } + + [self setNeedsLayout]; + [self layoutIfNeeded]; +} + +- (void)setText:(NSString *)text +{ + [super setText:text]; + [self refreshPlaceholder]; +} + +-(void)setFont:(UIFont *)font +{ + [super setFont:font]; + self.placeholderLabel.font = self.font; + + [self setNeedsLayout]; + [self layoutIfNeeded]; +} + +-(void)setTextAlignment:(NSTextAlignment)textAlignment +{ + [super setTextAlignment:textAlignment]; + self.placeholderLabel.textAlignment = textAlignment; + + [self setNeedsLayout]; + [self layoutIfNeeded]; +} + +-(void)layoutSubviews +{ + [super layoutSubviews]; + self.placeholderLabel.frame = [self placeholderExpectedFrame]; +} + +-(void)setPlaceholder:(NSString *)placeholder +{ + _placeholder = placeholder; + + self.placeholderLabel.text = placeholder; + [self refreshPlaceholder]; +} + +-(void)setPlaceholderTextColor:(UIColor*)placeholderTextColor +{ + _placeholderTextColor = placeholderTextColor; + self.placeholderLabel.textColor = placeholderTextColor; +} + +-(UIEdgeInsets)placeholderInsets +{ + return UIEdgeInsetsMake(self.textContainerInset.top, self.textContainerInset.left + self.textContainer.lineFragmentPadding, self.textContainerInset.bottom, self.textContainerInset.right + self.textContainer.lineFragmentPadding); +} + +-(CGRect)placeholderExpectedFrame +{ + UIEdgeInsets placeholderInsets = [self placeholderInsets]; + CGFloat maxWidth = CGRectGetWidth(self.frame)-placeholderInsets.left-placeholderInsets.right; + + CGSize expectedSize = [self.placeholderLabel sizeThatFits:CGSizeMake(maxWidth, CGRectGetHeight(self.frame)-placeholderInsets.top-placeholderInsets.bottom)]; + + return CGRectMake(placeholderInsets.left, placeholderInsets.top, maxWidth, expectedSize.height); +} + +-(UILabel*)placeholderLabel +{ + if (_placeholderLabel == nil) + { + _placeholderLabel = [[UILabel alloc] init]; + _placeholderLabel.autoresizingMask = (UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight); + _placeholderLabel.lineBreakMode = NSLineBreakByWordWrapping; + _placeholderLabel.numberOfLines = 0; + _placeholderLabel.font = self.font; + _placeholderLabel.textAlignment = self.textAlignment; + _placeholderLabel.backgroundColor = [UIColor clearColor]; + _placeholderLabel.textColor = [UIColor colorWithWhite:0.7 alpha:1.0]; + _placeholderLabel.alpha = 0; + [self addSubview:_placeholderLabel]; + } + + return _placeholderLabel; +} + +//When any text changes on textField, the delegate getter is called. At this time we refresh the textView's placeholder +-(id)delegate +{ + [self refreshPlaceholder]; + return [super delegate]; +} + +-(CGSize)intrinsicContentSize +{ + if (self.hasText) { + return [super intrinsicContentSize]; + } + + UIEdgeInsets placeholderInsets = [self placeholderInsets]; + CGSize newSize = [super intrinsicContentSize]; + + newSize.height = [self placeholderExpectedFrame].size.height + placeholderInsets.top + placeholderInsets.bottom; + + return newSize; +} + +@end diff --git a/Ifish/controllers/HotBar/Lib/IQKeyboardManager/IQToolbar/IQBarButtonItem.h b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/IQToolbar/IQBarButtonItem.h new file mode 100755 index 0000000..25bf9ad --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/IQToolbar/IQBarButtonItem.h @@ -0,0 +1,51 @@ +// +// IQBarButtonItem.h +// https://github.com/hackiftekhar/IQKeyboardManager +// Copyright (c) 2013-16 Iftekhar Qurashi. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import + +@class NSInvocation; + +/** + IQBarButtonItem used for IQToolbar. + */ +@interface IQBarButtonItem : UIBarButtonItem + +/** + Boolean to know if it's a system item or custom item + */ +@property (nonatomic, readonly) BOOL isSystemItem; + +/** + Additional target & action to do get callback action. Note that setting custom target & selector doesn't affect native functionality, this is just an additional target to get a callback. + + @param target Target object. + @param action Target Selector. + */ +-(void)setTarget:(nullable id)target action:(nullable SEL)action; + +/** + Customized Invocation to be called when button is pressed. invocation is internally created using setTarget:action: method. + */ +@property (nullable, strong, nonatomic) NSInvocation *invocation; + +@end diff --git a/Ifish/controllers/HotBar/Lib/IQKeyboardManager/IQToolbar/IQBarButtonItem.m b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/IQToolbar/IQBarButtonItem.m new file mode 100755 index 0000000..fb28fb2 --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/IQToolbar/IQBarButtonItem.m @@ -0,0 +1,99 @@ +// +// IQBarButtonItem.m +// https://github.com/hackiftekhar/IQKeyboardManager +// Copyright (c) 2013-16 Iftekhar Qurashi. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "IQBarButtonItem.h" +#import "IQKeyboardManagerConstantsInternal.h" +#import + +@implementation IQBarButtonItem + ++(void)initialize +{ + [super initialize]; + + IQBarButtonItem *appearanceProxy = [self appearance]; + + NSArray *states = @[@(UIControlStateNormal),@(UIControlStateHighlighted),@(UIControlStateDisabled),@(UIControlStateSelected),@(UIControlStateApplication),@(UIControlStateReserved)]; + + for (NSNumber *state in states) + { + UIControlState controlState = [state unsignedIntegerValue]; + + [appearanceProxy setBackgroundImage:nil forState:controlState barMetrics:UIBarMetricsDefault]; + [appearanceProxy setBackgroundImage:nil forState:controlState style:UIBarButtonItemStyleDone barMetrics:UIBarMetricsDefault]; + [appearanceProxy setBackgroundImage:nil forState:controlState style:UIBarButtonItemStylePlain barMetrics:UIBarMetricsDefault]; + [appearanceProxy setBackButtonBackgroundImage:nil forState:controlState barMetrics:UIBarMetricsDefault]; + } + + [appearanceProxy setTitlePositionAdjustment:UIOffsetZero forBarMetrics:UIBarMetricsDefault]; + [appearanceProxy setBackgroundVerticalPositionAdjustment:0 forBarMetrics:UIBarMetricsDefault]; + [appearanceProxy setBackButtonBackgroundVerticalPositionAdjustment:0 forBarMetrics:UIBarMetricsDefault]; +} + +-(void)setTintColor:(UIColor *)tintColor +{ + [super setTintColor:tintColor]; + + //titleTextAttributes tweak is to overcome an issue comes with iOS11 where appearanceProxy set for NSForegroundColorAttributeName and bar button texts start appearing in appearance proxy color + NSMutableDictionary *textAttributes = [[self titleTextAttributesForState:UIControlStateNormal] mutableCopy]?:[NSMutableDictionary new]; + + textAttributes[NSForegroundColorAttributeName] = tintColor; + + [self setTitleTextAttributes:textAttributes forState:UIControlStateNormal]; +} + +- (instancetype)initWithBarButtonSystemItem:(UIBarButtonSystemItem)systemItem target:(nullable id)target action:(nullable SEL)action +{ + self = [super initWithBarButtonSystemItem:systemItem target:target action:action]; + + if (self) + { + _isSystemItem = YES; + } + + return self; +} + + +-(void)setTarget:(nullable id)target action:(nullable SEL)action +{ + NSInvocation *invocation = nil; + + if (target && action) + { + invocation = [NSInvocation invocationWithMethodSignature:[target methodSignatureForSelector:action]]; + invocation.target = target; + invocation.selector = action; + } + + self.invocation = invocation; +} + +-(void)dealloc +{ + self.target = nil; + self.invocation.target = nil; + self.invocation = nil; +} + +@end diff --git a/Ifish/controllers/HotBar/Lib/IQKeyboardManager/IQToolbar/IQPreviousNextView.h b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/IQToolbar/IQPreviousNextView.h new file mode 100755 index 0000000..aa282ee --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/IQToolbar/IQPreviousNextView.h @@ -0,0 +1,30 @@ +// +// IQPreviousNextView.h +// https://github.com/hackiftekhar/IQKeyboardManager +// Copyright (c) 2013-16 Iftekhar Qurashi. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import +/** + If you need to enable previous/next toolbar button with some complex hierarchy where your textFields are not in same view, then make the top view as IQPreviousNextView. + */ +@interface IQPreviousNextView : UIView + +@end diff --git a/Ifish/controllers/HotBar/Lib/IQKeyboardManager/IQToolbar/IQPreviousNextView.m b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/IQToolbar/IQPreviousNextView.m new file mode 100755 index 0000000..207d115 --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/IQToolbar/IQPreviousNextView.m @@ -0,0 +1,28 @@ +// +// IQPreviousNextView.m +// https://github.com/hackiftekhar/IQKeyboardManager +// Copyright (c) 2013-16 Iftekhar Qurashi. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "IQPreviousNextView.h" + +@implementation IQPreviousNextView + +@end diff --git a/Ifish/controllers/HotBar/Lib/IQKeyboardManager/IQToolbar/IQTitleBarButtonItem.h b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/IQToolbar/IQTitleBarButtonItem.h new file mode 100755 index 0000000..bd16835 --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/IQToolbar/IQTitleBarButtonItem.h @@ -0,0 +1,71 @@ +// +// IQTitleBarButtonItem.h +// https://github.com/hackiftekhar/IQKeyboardManager +// Copyright (c) 2013-16 Iftekhar Qurashi. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "IQKeyboardManagerConstants.h" +#import "IQBarButtonItem.h" + +#import + +/** + BarButtonItem with title text. + */ +@interface IQTitleBarButtonItem : IQBarButtonItem + +/** + Font to be used in bar button. Default is (system font 12.0 bold). + */ +@property(nullable, nonatomic, strong) UIFont *titleFont; + +/** + titleColor to be used for displaying button text when displaying title (disabled state). + */ +@property(nullable, nonatomic, strong) UIColor *titleColor; + +/** + selectableTitleColor to be used for displaying button text when button is enabled. + */ +@property(nullable, nonatomic, strong) UIColor *selectableTitleColor; + +/** + Initialize with frame and title. + + @param title Title of barButtonItem. + */ +-(nonnull instancetype)initWithTitle:(nullable NSString *)title NS_DESIGNATED_INITIALIZER; + +/** + Unavailable. Please use initWithFrame:title: method + */ +-(nonnull instancetype)init NS_UNAVAILABLE; + +/** + Unavailable. Please use initWithFrame:title: method + */ +-(nonnull instancetype)initWithCoder:(nullable NSCoder *)aDecoder NS_UNAVAILABLE; + +/** + Unavailable. Please use initWithFrame:title: method + */ ++ (nonnull instancetype)new NS_UNAVAILABLE; + +@end diff --git a/Ifish/controllers/HotBar/Lib/IQKeyboardManager/IQToolbar/IQTitleBarButtonItem.m b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/IQToolbar/IQTitleBarButtonItem.m new file mode 100755 index 0000000..7a4ffe9 --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/IQToolbar/IQTitleBarButtonItem.m @@ -0,0 +1,153 @@ +// +// IQTitleBarButtonItem.m +// https://github.com/hackiftekhar/IQKeyboardManager +// Copyright (c) 2013-16 Iftekhar Qurashi. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "IQTitleBarButtonItem.h" +#import "IQKeyboardManagerConstants.h" +#import "IQKeyboardManagerConstantsInternal.h" + +#import +#import + +@interface IQTitleBarButtonItem () + +@property(nonatomic, strong) UIView *titleView; +@property(nonatomic, strong) UIButton *titleButton; + +@end + +@implementation IQTitleBarButtonItem + +-(nonnull instancetype)initWithTitle:(nullable NSString *)title +{ + self = [super init]; + if (self) + { + _titleView = [[UIView alloc] init]; + _titleView.backgroundColor = [UIColor clearColor]; + + _titleButton = [UIButton buttonWithType:UIButtonTypeSystem]; + _titleButton.enabled = NO; + _titleButton.titleLabel.numberOfLines = 3; + [_titleButton setTitleColor:[UIColor colorWithRed:0.0 green:0.5 blue:1.0 alpha:1.0] forState:UIControlStateNormal]; + [_titleButton setTitleColor:[UIColor lightGrayColor] forState:UIControlStateDisabled]; + [_titleButton setBackgroundColor:[UIColor clearColor]]; + [_titleButton.titleLabel setTextAlignment:NSTextAlignmentCenter]; + [self setTitle:title]; + [self setTitleFont:[UIFont systemFontOfSize:13.0]]; + [_titleView addSubview:_titleButton]; + +#ifdef __IPHONE_11_0 + if (@available(iOS 11.0, *)) + { + CGFloat layoutDefaultLowPriority = UILayoutPriorityDefaultLow-1; + CGFloat layoutDefaultHighPriority = UILayoutPriorityDefaultHigh-1; + + _titleView.translatesAutoresizingMaskIntoConstraints = NO; + [_titleView setContentHuggingPriority:layoutDefaultLowPriority forAxis:UILayoutConstraintAxisVertical]; + [_titleView setContentHuggingPriority:layoutDefaultLowPriority forAxis:UILayoutConstraintAxisHorizontal]; + [_titleView setContentCompressionResistancePriority:layoutDefaultHighPriority forAxis:UILayoutConstraintAxisVertical]; + [_titleView setContentCompressionResistancePriority:layoutDefaultHighPriority forAxis:UILayoutConstraintAxisHorizontal]; + + _titleButton.translatesAutoresizingMaskIntoConstraints = NO; + [_titleButton setContentHuggingPriority:layoutDefaultLowPriority forAxis:UILayoutConstraintAxisVertical]; + [_titleButton setContentHuggingPriority:layoutDefaultLowPriority forAxis:UILayoutConstraintAxisHorizontal]; + [_titleButton setContentCompressionResistancePriority:layoutDefaultHighPriority forAxis:UILayoutConstraintAxisVertical]; + [_titleButton setContentCompressionResistancePriority:layoutDefaultHighPriority forAxis:UILayoutConstraintAxisHorizontal]; + + NSLayoutConstraint *top = [NSLayoutConstraint constraintWithItem:_titleButton attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:_titleView attribute:NSLayoutAttributeTop multiplier:1 constant:0]; + NSLayoutConstraint *bottom = [NSLayoutConstraint constraintWithItem:_titleButton attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:_titleView attribute:NSLayoutAttributeBottom multiplier:1 constant:0]; + NSLayoutConstraint *leading = [NSLayoutConstraint constraintWithItem:_titleButton attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:_titleView attribute:NSLayoutAttributeLeading multiplier:1 constant:0]; + NSLayoutConstraint *trailing = [NSLayoutConstraint constraintWithItem:_titleButton attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:_titleView attribute:NSLayoutAttributeTrailing multiplier:1 constant:0]; + [_titleView addConstraints:@[top,bottom,leading,trailing]]; + } + else +#endif + { + _titleView.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight; + _titleButton.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight; + } + + self.customView = _titleView; + } + return self; +} + +-(void)setTitleFont:(UIFont *)titleFont +{ + _titleFont = titleFont; + + if (titleFont) + { + _titleButton.titleLabel.font = titleFont; + } + else + { + _titleButton.titleLabel.font = [UIFont systemFontOfSize:13]; + } +} + +-(void)setTitle:(NSString *)title +{ + [super setTitle:title]; + [_titleButton setTitle:title forState:UIControlStateNormal]; +} + +-(void)setTitleColor:(UIColor*)titleColor +{ + _titleColor = titleColor; + [_titleButton setTitleColor:_titleColor?:[UIColor lightGrayColor] forState:UIControlStateDisabled]; +} + +-(void)setSelectableTitleColor:(UIColor*)selectableTitleColor +{ + _selectableTitleColor = selectableTitleColor; + [_titleButton setTitleColor:_selectableTitleColor?:[UIColor colorWithRed:0.0 green:0.5 blue:1.0 alpha:1.0] forState:UIControlStateNormal]; +} + +-(void)setInvocation:(NSInvocation *)invocation +{ + [super setInvocation:invocation]; + + if (invocation.target == nil || invocation.selector == NULL) + { + self.enabled = NO; + _titleButton.enabled = NO; + [_titleButton removeTarget:nil action:NULL forControlEvents:UIControlEventTouchUpInside]; + } + else + { + self.enabled = YES; + _titleButton.enabled = YES; + [_titleButton addTarget:invocation.target action:invocation.selector forControlEvents:UIControlEventTouchUpInside]; + } +} + +-(void)dealloc +{ + self.customView = nil; + [_titleButton removeTarget:nil action:NULL forControlEvents:UIControlEventTouchUpInside]; + _titleView = nil; + _titleButton = nil; +} + +@end diff --git a/Ifish/controllers/HotBar/Lib/IQKeyboardManager/IQToolbar/IQToolbar.h b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/IQToolbar/IQToolbar.h new file mode 100755 index 0000000..3ab3aee --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/IQToolbar/IQToolbar.h @@ -0,0 +1,60 @@ +// +// IQToolbar.h +// https://github.com/hackiftekhar/IQKeyboardManager +// Copyright (c) 2013-16 Iftekhar Qurashi. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "IQTitleBarButtonItem.h" + +#import +#import + +/** + IQToolbar for IQKeyboardManager. + */ +@interface IQToolbar : UIToolbar + +/** + Previous bar button of toolbar. + */ +@property(nonnull, nonatomic, strong) IQBarButtonItem *previousBarButton; + +/** + Next bar button of toolbar. + */ +@property(nonnull, nonatomic, strong) IQBarButtonItem *nextBarButton; + +/** + Title bar button of toolbar. + */ +@property(nonnull, nonatomic, strong, readonly) IQTitleBarButtonItem *titleBarButton; + +/** + Done bar button of toolbar. + */ +@property(nonnull, nonatomic, strong) IQBarButtonItem *doneBarButton; + +/** + Fixed space bar button of toolbar. + */ +@property(nonnull, nonatomic, strong) IQBarButtonItem *fixedSpaceBarButton; + +@end + diff --git a/Ifish/controllers/HotBar/Lib/IQKeyboardManager/IQToolbar/IQToolbar.m b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/IQToolbar/IQToolbar.m new file mode 100755 index 0000000..9bb2270 --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/IQToolbar/IQToolbar.m @@ -0,0 +1,300 @@ +// +// IQToolbar.m +// https://github.com/hackiftekhar/IQKeyboardManager +// Copyright (c) 2013-16 Iftekhar Qurashi. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "IQToolbar.h" +#import "IQKeyboardManagerConstantsInternal.h" +#import "IQUIView+Hierarchy.h" + +#import +#import +#import + +@interface IQTitleBarButtonItem (PrivateAccessor) + +@property(nonatomic, strong) UIButton *titleButton; + +@end + +@implementation IQToolbar +@synthesize previousBarButton = _previousBarButton; +@synthesize nextBarButton = _nextBarButton; +@synthesize titleBarButton = _titleBarButton; +@synthesize doneBarButton = _doneBarButton; +@synthesize fixedSpaceBarButton = _fixedSpaceBarButton; + ++(void)initialize +{ + [super initialize]; + + IQToolbar *appearanceProxy = [self appearance]; + + NSArray *positions = @[@(UIBarPositionAny),@(UIBarPositionBottom),@(UIBarPositionTop),@(UIBarPositionTopAttached)]; + + for (NSNumber *position in positions) + { + UIToolbarPosition toolbarPosition = [position unsignedIntegerValue]; + + [appearanceProxy setBackgroundImage:nil forToolbarPosition:toolbarPosition barMetrics:UIBarMetricsDefault]; + [appearanceProxy setShadowImage:nil forToolbarPosition:toolbarPosition]; + } +} + +-(void)initialize +{ + [self sizeToFit]; + self.autoresizingMask = UIViewAutoresizingFlexibleWidth;// | UIViewAutoresizingFlexibleHeight; + self.translucent = YES; +} + +- (instancetype)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) + { + [self initialize]; + } + return self; +} + +- (instancetype)initWithCoder:(NSCoder *)coder +{ + self = [super initWithCoder:coder]; + if (self) + { + [self initialize]; + } + return self; +} + +-(void)dealloc +{ + self.items = nil; + _previousBarButton = nil; + _nextBarButton = nil; + _titleBarButton = nil; + _doneBarButton = nil; + _fixedSpaceBarButton = nil; +} + +-(IQBarButtonItem *)previousBarButton +{ + if (_previousBarButton == nil) + { + _previousBarButton = [[IQBarButtonItem alloc] initWithImage:nil style:UIBarButtonItemStylePlain target:nil action:nil]; + _previousBarButton.accessibilityLabel = @"Toolbar Previous Button"; + } + + return _previousBarButton; +} + +-(IQBarButtonItem *)nextBarButton +{ + if (_nextBarButton == nil) + { + _nextBarButton = [[IQBarButtonItem alloc] initWithImage:nil style:UIBarButtonItemStylePlain target:nil action:nil]; + _nextBarButton.accessibilityLabel = @"Toolbar Next Button"; + } + + return _nextBarButton; +} + +-(IQTitleBarButtonItem *)titleBarButton +{ + if (_titleBarButton == nil) + { + _titleBarButton = [[IQTitleBarButtonItem alloc] initWithTitle:nil]; + _titleBarButton.accessibilityLabel = @"Toolbar Title Button"; + } + + return _titleBarButton; +} + +-(IQBarButtonItem *)doneBarButton +{ + if (_doneBarButton == nil) + { + _doneBarButton = [[IQBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:nil action:nil]; + _doneBarButton.accessibilityLabel = @"Toolbar Done Button"; + } + + return _doneBarButton; +} + +-(IQBarButtonItem *)fixedSpaceBarButton +{ + if (_fixedSpaceBarButton == nil) + { + _fixedSpaceBarButton = [[IQBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil]; +#ifdef __IPHONE_11_0 + if (@available(iOS 10.0, *)) +#else + if (IQ_IS_IOS10_OR_GREATER) +#endif + { + [_fixedSpaceBarButton setWidth:6]; + } + else + { + [_fixedSpaceBarButton setWidth:20]; + } + } + + return _fixedSpaceBarButton; +} + +-(CGSize)sizeThatFits:(CGSize)size +{ + CGSize sizeThatFit = [super sizeThatFits:size]; + + sizeThatFit.height = 44; + + return sizeThatFit; +} + +-(void)setBarStyle:(UIBarStyle)barStyle +{ + [super setBarStyle:barStyle]; + + if (self.titleBarButton.selectableTitleColor == nil) + { + if (barStyle == UIBarStyleDefault) + { + [self.titleBarButton.titleButton setTitleColor:[UIColor colorWithRed:0.0 green:0.5 blue:1.0 alpha:1.0] forState:UIControlStateNormal]; + } + else + { + [self.titleBarButton.titleButton setTitleColor:[UIColor yellowColor] forState:UIControlStateNormal]; + } + } +} + +-(void)setTintColor:(UIColor *)tintColor +{ + [super setTintColor:tintColor]; + + for (UIBarButtonItem *item in self.items) + { + [item setTintColor:tintColor]; + } +} + +-(void)layoutSubviews +{ + [super layoutSubviews]; + + //If running on Xcode9 (iOS11) only then we'll validate for iOS version, otherwise for older versions of Xcode (iOS10 and below) we'll just execute the tweak +#ifdef __IPHONE_11_0 + if (@available(iOS 11.0, *)) {} + else +#endif + { + CGRect leftRect = CGRectNull; + CGRect rightRect = CGRectNull; + + BOOL isTitleBarButtonFound = NO; + + NSArray *subviews = [self.subviews sortedArrayUsingComparator:^NSComparisonResult(UIView *view1, UIView *view2) { + + CGFloat x1 = CGRectGetMinX(view1.frame); + CGFloat y1 = CGRectGetMinY(view1.frame); + CGFloat x2 = CGRectGetMinX(view2.frame); + CGFloat y2 = CGRectGetMinY(view2.frame); + + if (x1 < x2) return NSOrderedAscending; + + else if (x1 > x2) return NSOrderedDescending; + + //Else both y are same so checking for x positions + else if (y1 < y2) return NSOrderedAscending; + + else if (y1 > y2) return NSOrderedDescending; + + else return NSOrderedSame; + }]; + + for (UIView *barButtonItemView in subviews) + { + if (isTitleBarButtonFound == YES) + { + rightRect = barButtonItemView.frame; + break; + } + else if (barButtonItemView == self.titleBarButton.customView) + { + isTitleBarButtonFound = YES; + } + //If it's UIToolbarButton or UIToolbarTextButton (which actually UIBarButtonItem) + else if ([barButtonItemView isKindOfClass:[UIControl class]]) + { + leftRect = barButtonItemView.frame; + } + } + + CGFloat titleMargin = 16; + + CGFloat maxWidth = CGRectGetWidth(self.frame) - titleMargin*2 - (CGRectIsNull(leftRect)?0:CGRectGetMaxX(leftRect)) - (CGRectIsNull(rightRect)?0:CGRectGetWidth(self.frame)-CGRectGetMinX(rightRect)); + CGFloat maxHeight = self.frame.size.height; + + CGSize sizeThatFits = [self.titleBarButton.customView sizeThatFits:CGSizeMake(maxWidth, maxHeight)]; + + CGRect titleRect = CGRectZero; + + CGFloat x = titleMargin; + + if (sizeThatFits.width > 0 && sizeThatFits.height > 0) + { + CGFloat width = MIN(sizeThatFits.width, maxWidth); + CGFloat height = MIN(sizeThatFits.height, maxHeight); + + if (CGRectIsNull(leftRect) == false) + { + x = titleMargin + CGRectGetMaxX(leftRect) + ((maxWidth - width)/2); + } + + CGFloat y = (maxHeight - height)/2; + + titleRect = CGRectMake(x, y, width, height); + } + else + { + if (CGRectIsNull(leftRect) == false) + { + x = titleMargin + CGRectGetMaxX(leftRect); + } + + CGFloat width = CGRectGetWidth(self.frame) - titleMargin*2 - (CGRectIsNull(leftRect)?0:CGRectGetMaxX(leftRect)) - (CGRectIsNull(rightRect)?0:CGRectGetWidth(self.frame)-CGRectGetMinX(rightRect)); + + titleRect = CGRectMake(x, 0, width, maxHeight); + } + + self.titleBarButton.customView.frame = titleRect; + } +} + +#pragma mark - UIInputViewAudioFeedback delegate +- (BOOL) enableInputClicksWhenVisible +{ + return YES; +} + +@end diff --git a/Ifish/controllers/HotBar/Lib/IQKeyboardManager/IQToolbar/IQUIView+IQKeyboardToolbar.h b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/IQToolbar/IQUIView+IQKeyboardToolbar.h new file mode 100755 index 0000000..eb1dc42 --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/IQToolbar/IQUIView+IQKeyboardToolbar.h @@ -0,0 +1,150 @@ +// +// IQUIView+IQKeyboardToolbar.h +// https://github.com/hackiftekhar/IQKeyboardManager +// Copyright (c) 2013-16 Iftekhar Qurashi. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "IQToolbar.h" + +#import +#import + +@interface IQBarButtonItemConfiguration : NSObject + +-(instancetype)initWithBarButtonSystemItem:(UIBarButtonSystemItem)barButtonSystemItem action:(nullable SEL)action; +-(instancetype)initWithImage:(nonnull UIImage*)image action:(nullable SEL)action; +-(instancetype)initWithTitle:(nonnull NSString*)title action:(nullable SEL)action; + +@property (readonly, nonatomic) UIBarButtonSystemItem barButtonSystemItem; //System Item to be used to instantiate bar button +@property (readonly, nonatomic, nullable) UIImage *image; //Image to show on bar button item if it's not a system item. +@property (readonly, nonatomic, nullable) NSString *title; //Title to show on bar button item if it's not a system item. +@property (readonly, nonatomic, nullable) SEL action; //action for bar button item. Usually 'doneAction:(IQBarButtonItem*)item'. + +@end + +@interface UIImage (IQKeyboardToolbarNextPreviousImage) + ++(UIImage*)keyboardPreviousiOS9Image; ++(UIImage*)keyboardNextiOS9Image; ++(UIImage*)keyboardPreviousiOS10Image; ++(UIImage*)keyboardNextiOS10Image; + ++(UIImage*)keyboardPreviousImage; ++(UIImage*)keyboardNextImage; + +@end + +/** + UIView category methods to add IQToolbar on UIKeyboard. + */ +@interface UIView (IQToolbarAddition) + +///------------------------- +/// @name Toolbar Title +///------------------------- + +/** + IQToolbar references for better customization control. + */ +@property (readonly, nonatomic, nonnull) IQToolbar *keyboardToolbar; + +/** + If `shouldHideToolbarPlaceholder` is YES, then title will not be added to the toolbar. Default to NO. + */ +@property (assign, nonatomic) BOOL shouldHideToolbarPlaceholder; +@property (assign, nonatomic) BOOL shouldHidePlaceholderText __attribute__((deprecated("This is renamed to `shouldHideToolbarPlaceholder` for more clear naming."))); + +/** + `toolbarPlaceholder` to override default `placeholder` text when drawing text on toolbar. + */ +@property (nullable, strong, nonatomic) NSString* toolbarPlaceholder; +@property (nullable, strong, nonatomic) NSString* placeholderText __attribute__((deprecated("This is renamed to `toolbarPlaceholder` for more clear naming."))); + +/** + `drawingToolbarPlaceholder` will be actual text used to draw on toolbar. This would either `placeholder` or `toolbarPlaceholder`. + */ +@property (nullable, strong, nonatomic, readonly) NSString* drawingToolbarPlaceholder; +@property (nullable, strong, nonatomic, readonly) NSString* drawingPlaceholderText __attribute__((deprecated("This is renamed to `drawingToolbarPlaceholder` for more clear naming."))); + +///------------- +/// MARK: Common +///------------- + +- (void)addKeyboardToolbarWithTarget:(nullable id)target titleText:(nullable NSString*)titleText rightBarButtonConfiguration:(nullable IQBarButtonItemConfiguration*)rightBarButtonConfiguration previousBarButtonConfiguration:(nullable IQBarButtonItemConfiguration*)previousBarButtonConfiguration nextBarButtonConfiguration:(nullable IQBarButtonItemConfiguration*)nextBarButtonConfiguration; + +///------------ +/// @name Done +///------------ + +- (void)addDoneOnKeyboardWithTarget:(nullable id)target action:(nullable SEL)action; +- (void)addDoneOnKeyboardWithTarget:(nullable id)target action:(nullable SEL)action shouldShowPlaceholder:(BOOL)shouldShowPlaceholder; +- (void)addDoneOnKeyboardWithTarget:(nullable id)target action:(nullable SEL)action titleText:(nullable NSString*)titleText; + +///------------ +/// @name Right +///------------ + +- (void)addRightButtonOnKeyboardWithText:(nullable NSString*)text target:(nullable id)target action:(nullable SEL)action; +- (void)addRightButtonOnKeyboardWithText:(nullable NSString*)text target:(nullable id)target action:(nullable SEL)action shouldShowPlaceholder:(BOOL)shouldShowPlaceholder; +- (void)addRightButtonOnKeyboardWithText:(nullable NSString*)text target:(nullable id)target action:(nullable SEL)action titleText:(nullable NSString*)titleText; + +- (void)addRightButtonOnKeyboardWithImage:(nullable UIImage*)image target:(nullable id)target action:(nullable SEL)action; +- (void)addRightButtonOnKeyboardWithImage:(nullable UIImage*)image target:(nullable id)target action:(nullable SEL)action shouldShowPlaceholder:(BOOL)shouldShowPlaceholder; +- (void)addRightButtonOnKeyboardWithImage:(nullable UIImage*)image target:(nullable id)target action:(nullable SEL)action titleText:(nullable NSString*)titleText; + +///------------------ +/// @name Cancel/Done +///------------------ + +- (void)addCancelDoneOnKeyboardWithTarget:(nullable id)target cancelAction:(nullable SEL)cancelAction doneAction:(nullable SEL)doneAction; +- (void)addCancelDoneOnKeyboardWithTarget:(nullable id)target cancelAction:(nullable SEL)cancelAction doneAction:(nullable SEL)doneAction shouldShowPlaceholder:(BOOL)shouldShowPlaceholder; +- (void)addCancelDoneOnKeyboardWithTarget:(nullable id)target cancelAction:(nullable SEL)cancelAction doneAction:(nullable SEL)doneAction titleText:(nullable NSString*)titleText; + +///----------------- +/// @name Right/Left +///----------------- + +- (void)addLeftRightOnKeyboardWithTarget:(nullable id)target leftButtonTitle:(nullable NSString*)leftButtonTitle rightButtonTitle:(nullable NSString*)rightButtonTitle leftButtonAction:(nullable SEL)leftButtonAction rightButtonAction:(nullable SEL)rightButtonAction; +- (void)addLeftRightOnKeyboardWithTarget:(nullable id)target leftButtonTitle:(nullable NSString*)leftButtonTitle rightButtonTitle:(nullable NSString*)rightButtonTitle leftButtonAction:(nullable SEL)leftButtonAction rightButtonAction:(nullable SEL)rightButtonAction shouldShowPlaceholder:(BOOL)shouldShowPlaceholder; +- (void)addLeftRightOnKeyboardWithTarget:(nullable id)target leftButtonTitle:(nullable NSString*)leftButtonTitle rightButtonTitle:(nullable NSString*)rightButtonTitle leftButtonAction:(nullable SEL)leftButtonAction rightButtonAction:(nullable SEL)rightButtonAction titleText:(nullable NSString*)titleText; + +///------------------------- +/// @name Previous/Next/Done +///------------------------- + +- (void)addPreviousNextDoneOnKeyboardWithTarget:(nullable id)target previousAction:(nullable SEL)previousAction nextAction:(nullable SEL)nextAction doneAction:(nullable SEL)doneAction; +- (void)addPreviousNextDoneOnKeyboardWithTarget:(nullable id)target previousAction:(nullable SEL)previousAction nextAction:(nullable SEL)nextAction doneAction:(nullable SEL)doneAction shouldShowPlaceholder:(BOOL)shouldShowPlaceholder; +- (void)addPreviousNextDoneOnKeyboardWithTarget:(nullable id)target previousAction:(nullable SEL)previousAction nextAction:(nullable SEL)nextAction doneAction:(nullable SEL)doneAction titleText:(nullable NSString*)titleText; + +///-------------------------- +/// @name Previous/Next/Right +///-------------------------- + +- (void)addPreviousNextRightOnKeyboardWithTarget:(nullable id)target rightButtonTitle:(nullable NSString*)rightButtonTitle previousAction:(nullable SEL)previousAction nextAction:(nullable SEL)nextAction rightButtonAction:(nullable SEL)rightButtonAction; +- (void)addPreviousNextRightOnKeyboardWithTarget:(nullable id)target rightButtonTitle:(nullable NSString*)rightButtonTitle previousAction:(nullable SEL)previousAction nextAction:(nullable SEL)nextAction rightButtonAction:(nullable SEL)rightButtonAction shouldShowPlaceholder:(BOOL)shouldShowPlaceholder; +- (void)addPreviousNextRightOnKeyboardWithTarget:(nullable id)target rightButtonTitle:(nullable NSString*)rightButtonTitle previousAction:(nullable SEL)previousAction nextAction:(nullable SEL)nextAction rightButtonAction:(nullable SEL)rightButtonAction titleText:(nullable NSString*)titleText; + +- (void)addPreviousNextRightOnKeyboardWithTarget:(nullable id)target rightButtonImage:(nullable UIImage*)rightButtonImage previousAction:(nullable SEL)previousAction nextAction:(nullable SEL)nextAction rightButtonAction:(nullable SEL)rightButtonAction; +- (void)addPreviousNextRightOnKeyboardWithTarget:(nullable id)target rightButtonImage:(nullable UIImage*)rightButtonImage previousAction:(nullable SEL)previousAction nextAction:(nullable SEL)nextAction rightButtonAction:(nullable SEL)rightButtonAction shouldShowPlaceholder:(BOOL)shouldShowPlaceholder; +- (void)addPreviousNextRightOnKeyboardWithTarget:(nullable id)target rightButtonImage:(nullable UIImage*)rightButtonImage previousAction:(nullable SEL)previousAction nextAction:(nullable SEL)nextAction rightButtonAction:(nullable SEL)rightButtonAction titleText:(nullable NSString*)titleText; + +@end + + diff --git a/Ifish/controllers/HotBar/Lib/IQKeyboardManager/IQToolbar/IQUIView+IQKeyboardToolbar.m b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/IQToolbar/IQUIView+IQKeyboardToolbar.m new file mode 100755 index 0000000..8ab0d97 --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/IQToolbar/IQUIView+IQKeyboardToolbar.m @@ -0,0 +1,676 @@ +// +// IQUIView+IQKeyboardToolbar.m +// https://github.com/hackiftekhar/IQKeyboardManager +// Copyright (c) 2013-16 Iftekhar Qurashi. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + + +#import "IQUIView+IQKeyboardToolbar.h" +#import "IQKeyboardManagerConstantsInternal.h" +#import "IQKeyboardManager.h" + +#import + +#import +#import +#import + +@implementation IQBarButtonItemConfiguration + +-(instancetype)initWithBarButtonSystemItem:(UIBarButtonSystemItem)barButtonSystemItem action:(SEL)action +{ + self = [super init]; + if (self) { + _barButtonSystemItem = barButtonSystemItem; + _action = action; + } + return self; +} + +-(instancetype)initWithImage:(UIImage *)image action:(SEL)action +{ + self = [super init]; + if (self) { + _image = image; + _action = action; + } + return self; +} + +-(instancetype)initWithTitle:(NSString *)title action:(SEL)action +{ + self = [super init]; + if (self) { + _title = title; + _action = action; + } + return self; +} + +@end + +@implementation UIImage (IQKeyboardToolbarNextPreviousImage) + ++(UIImage*)keyboardPreviousiOS9Image +{ + static UIImage *keyboardPreviousiOS9Image = nil; + + if (keyboardPreviousiOS9Image == nil) + { + // Get the top level "bundle" which may actually be the framework + NSBundle *mainBundle = [NSBundle bundleForClass:[IQKeyboardManager class]]; + + // Check to see if the resource bundle exists inside the top level bundle + NSBundle *resourcesBundle = [NSBundle bundleWithPath:[mainBundle pathForResource:@"IQKeyboardManager" ofType:@"bundle"]]; + + if (resourcesBundle == nil) { + resourcesBundle = mainBundle; + } + + keyboardPreviousiOS9Image = [UIImage imageNamed:@"IQButtonBarArrowLeft" inBundle:resourcesBundle compatibleWithTraitCollection:nil];; + + //Support for RTL languages like Arabic, Persia etc... (Bug ID: #448) +#ifdef __IPHONE_11_0 + if (@available(iOS 9.0, *)) { +#endif + if ([UIImage instancesRespondToSelector:@selector(imageFlippedForRightToLeftLayoutDirection)]) + { + keyboardPreviousiOS9Image = [keyboardPreviousiOS9Image imageFlippedForRightToLeftLayoutDirection]; + } +#ifdef __IPHONE_11_0 + } +#endif + } + + return keyboardPreviousiOS9Image; +} + ++(UIImage*)keyboardNextiOS9Image +{ + static UIImage *keyboardNextiOS9Image = nil; + + if (keyboardNextiOS9Image == nil) + { + // Get the top level "bundle" which may actually be the framework + NSBundle *mainBundle = [NSBundle bundleForClass:[IQKeyboardManager class]]; + + // Check to see if the resource bundle exists inside the top level bundle + NSBundle *resourcesBundle = [NSBundle bundleWithPath:[mainBundle pathForResource:@"IQKeyboardManager" ofType:@"bundle"]]; + + if (resourcesBundle == nil) { + resourcesBundle = mainBundle; + } + + keyboardNextiOS9Image = [UIImage imageNamed:@"IQButtonBarArrowRight" inBundle:resourcesBundle compatibleWithTraitCollection:nil]; + + //Support for RTL languages like Arabic, Persia etc... (Bug ID: #448) +#ifdef __IPHONE_11_0 + if (@available(iOS 9.0, *)) { +#endif + if ([UIImage instancesRespondToSelector:@selector(imageFlippedForRightToLeftLayoutDirection)]) + { + keyboardNextiOS9Image = [keyboardNextiOS9Image imageFlippedForRightToLeftLayoutDirection]; + } +#ifdef __IPHONE_11_0 + } +#endif + } + + return keyboardNextiOS9Image; +} + ++(UIImage*)keyboardPreviousiOS10Image +{ + static UIImage *keyboardPreviousiOS10Image = nil; + + if (keyboardPreviousiOS10Image == nil) + { + // Get the top level "bundle" which may actually be the framework + NSBundle *mainBundle = [NSBundle bundleForClass:[IQKeyboardManager class]]; + + // Check to see if the resource bundle exists inside the top level bundle + NSBundle *resourcesBundle = [NSBundle bundleWithPath:[mainBundle pathForResource:@"IQKeyboardManager" ofType:@"bundle"]]; + + if (resourcesBundle == nil) { + resourcesBundle = mainBundle; + } + + keyboardPreviousiOS10Image = [UIImage imageNamed:@"IQButtonBarArrowUp" inBundle:resourcesBundle compatibleWithTraitCollection:nil]; + + //Support for RTL languages like Arabic, Persia etc... (Bug ID: #448) +#ifdef __IPHONE_11_0 + if (@available(iOS 9.0, *)) { +#endif + if ([UIImage instancesRespondToSelector:@selector(imageFlippedForRightToLeftLayoutDirection)]) + { + keyboardPreviousiOS10Image = [keyboardPreviousiOS10Image imageFlippedForRightToLeftLayoutDirection]; + } +#ifdef __IPHONE_11_0 + } +#endif + } + + return keyboardPreviousiOS10Image; +} + ++(UIImage*)keyboardNextiOS10Image +{ + static UIImage *keyboardNextiOS10Image = nil; + + if (keyboardNextiOS10Image == nil) + { + // Get the top level "bundle" which may actually be the framework + NSBundle *mainBundle = [NSBundle bundleForClass:[IQKeyboardManager class]]; + + // Check to see if the resource bundle exists inside the top level bundle + NSBundle *resourcesBundle = [NSBundle bundleWithPath:[mainBundle pathForResource:@"IQKeyboardManager" ofType:@"bundle"]]; + + if (resourcesBundle == nil) { + resourcesBundle = mainBundle; + } + + keyboardNextiOS10Image = [UIImage imageNamed:@"IQButtonBarArrowDown" inBundle:resourcesBundle compatibleWithTraitCollection:nil]; + + //Support for RTL languages like Arabic, Persia etc... (Bug ID: #448) +#ifdef __IPHONE_11_0 + if (@available(iOS 9.0, *)) { +#endif + if ([UIImage instancesRespondToSelector:@selector(imageFlippedForRightToLeftLayoutDirection)]) + { + keyboardNextiOS10Image = [keyboardNextiOS10Image imageFlippedForRightToLeftLayoutDirection]; + } +#ifdef __IPHONE_11_0 + } +#endif + } + + return keyboardNextiOS10Image; +} + ++(UIImage*)keyboardPreviousImage +{ +#ifdef __IPHONE_11_0 + if (@available(iOS 10.0, *)) +#else + if (IQ_IS_IOS10_OR_GREATER) +#endif + { + return [UIImage keyboardPreviousiOS10Image]; + } + else + { + return [UIImage keyboardPreviousiOS9Image]; + } +} + ++(UIImage*)keyboardNextImage +{ +#ifdef __IPHONE_11_0 + if (@available(iOS 10.0, *)) +#else + if (IQ_IS_IOS10_OR_GREATER) +#endif + { + return [UIImage keyboardNextiOS10Image]; + } + else + { + return [UIImage keyboardNextiOS9Image]; + } +} + +@end + + +/*UIKeyboardToolbar Category implementation*/ +@implementation UIView (IQToolbarAddition) + +-(IQToolbar *)keyboardToolbar +{ + IQToolbar *keyboardToolbar = nil; + if ([[self inputAccessoryView] isKindOfClass:[IQToolbar class]]) + { + keyboardToolbar = [self inputAccessoryView]; + } + else + { + keyboardToolbar = objc_getAssociatedObject(self, @selector(keyboardToolbar)); + + if (keyboardToolbar == nil) + { + keyboardToolbar = [[IQToolbar alloc] init]; + + objc_setAssociatedObject(self, @selector(keyboardToolbar), keyboardToolbar, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + } + } + + return keyboardToolbar; +} + +-(void)setShouldHideToolbarPlaceholder:(BOOL)shouldHideToolbarPlaceholder +{ + objc_setAssociatedObject(self, @selector(shouldHideToolbarPlaceholder), @(shouldHideToolbarPlaceholder), OBJC_ASSOCIATION_RETAIN_NONATOMIC); + + self.keyboardToolbar.titleBarButton.title = self.drawingToolbarPlaceholder; +} + +-(BOOL)shouldHideToolbarPlaceholder +{ + NSNumber *shouldHideToolbarPlaceholder = objc_getAssociatedObject(self, @selector(shouldHideToolbarPlaceholder)); + return [shouldHideToolbarPlaceholder boolValue]; +} + +-(void)setShouldHidePlaceholderText:(BOOL)shouldHidePlaceholderText +{ + [self setShouldHideToolbarPlaceholder:shouldHidePlaceholderText]; +} + +-(BOOL)shouldHidePlaceholderText +{ + return [self shouldHideToolbarPlaceholder]; +} + +-(void)setToolbarPlaceholder:(NSString *)toolbarPlaceholder +{ + objc_setAssociatedObject(self, @selector(toolbarPlaceholder), toolbarPlaceholder, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + + self.keyboardToolbar.titleBarButton.title = self.drawingToolbarPlaceholder; +} + +-(NSString *)toolbarPlaceholder +{ + NSString *toolbarPlaceholder = objc_getAssociatedObject(self, @selector(toolbarPlaceholder)); + return toolbarPlaceholder; +} + +-(void)setPlaceholderText:(NSString*)placeholderText +{ + [self setToolbarPlaceholder:placeholderText]; +} + +-(NSString*)placeholderText +{ + return [self toolbarPlaceholder]; +} + +-(NSString *)drawingToolbarPlaceholder +{ + if (self.shouldHideToolbarPlaceholder) + { + return nil; + } + else if (self.toolbarPlaceholder.length != 0) + { + return self.toolbarPlaceholder; + } + else if ([self respondsToSelector:@selector(placeholder)]) + { + return [(UITextField*)self placeholder]; + } + else + { + return nil; + } +} + +-(NSString*)drawingPlaceholderText +{ + return [self drawingToolbarPlaceholder]; +} + +#pragma mark - Private helper + ++(IQBarButtonItem*)flexibleBarButtonItem +{ + static IQBarButtonItem *nilButton = nil; + + if (nilButton == nil) + { + nilButton = [[IQBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; + } + + return nilButton; +} + +#pragma mark - Common + +- (void)addKeyboardToolbarWithTarget:(id)target titleText:(NSString*)titleText rightBarButtonConfiguration:(IQBarButtonItemConfiguration*)rightBarButtonConfiguration previousBarButtonConfiguration:(IQBarButtonItemConfiguration*)previousBarButtonConfiguration nextBarButtonConfiguration:(IQBarButtonItemConfiguration*)nextBarButtonConfiguration +{ + //If can't set InputAccessoryView. Then return + if (![self respondsToSelector:@selector(setInputAccessoryView:)]) return; + + // Creating a toolBar for phoneNumber keyboard + IQToolbar *toolbar = self.keyboardToolbar; + + NSMutableArray *items = [[NSMutableArray alloc] init]; + + if(previousBarButtonConfiguration) + { + IQBarButtonItem *prev = toolbar.previousBarButton; + + if (prev.isSystemItem == NO && (previousBarButtonConfiguration.image || previousBarButtonConfiguration.title)) + { + prev.title = previousBarButtonConfiguration.title; + prev.image = previousBarButtonConfiguration.image; + prev.target = target; + prev.action = previousBarButtonConfiguration.action; + } + else if (previousBarButtonConfiguration.image) + { + prev = [[IQBarButtonItem alloc] initWithImage:previousBarButtonConfiguration.image style:UIBarButtonItemStylePlain target:target action:previousBarButtonConfiguration.action]; + prev.invocation = toolbar.previousBarButton.invocation; + prev.accessibilityLabel = toolbar.previousBarButton.accessibilityLabel; + toolbar.previousBarButton = prev; + } + else if (previousBarButtonConfiguration.title) + { + prev = [[IQBarButtonItem alloc] initWithTitle:previousBarButtonConfiguration.title style:UIBarButtonItemStylePlain target:target action:previousBarButtonConfiguration.action]; + prev.invocation = toolbar.previousBarButton.invocation; + prev.accessibilityLabel = toolbar.previousBarButton.accessibilityLabel; + toolbar.previousBarButton = prev; + } + else + { + prev = [[IQBarButtonItem alloc] initWithBarButtonSystemItem:previousBarButtonConfiguration.barButtonSystemItem target:target action:previousBarButtonConfiguration.action]; + prev.invocation = toolbar.previousBarButton.invocation; + prev.accessibilityLabel = toolbar.previousBarButton.accessibilityLabel; + toolbar.previousBarButton = prev; + } + + [items addObject:prev]; + } + + if (previousBarButtonConfiguration != nil && nextBarButtonConfiguration != nil) + { + [items addObject:toolbar.fixedSpaceBarButton]; + } + + if(nextBarButtonConfiguration) + { + IQBarButtonItem *next = toolbar.nextBarButton; + + if (next.isSystemItem == NO && (nextBarButtonConfiguration.image || nextBarButtonConfiguration.title)) + { + next.title = nextBarButtonConfiguration.title; + next.image = nextBarButtonConfiguration.image; + next.target = target; + next.action = nextBarButtonConfiguration.action; + } + else if (nextBarButtonConfiguration.image) + { + next = [[IQBarButtonItem alloc] initWithImage:nextBarButtonConfiguration.image style:UIBarButtonItemStylePlain target:target action:nextBarButtonConfiguration.action]; + next.invocation = toolbar.nextBarButton.invocation; + next.accessibilityLabel = toolbar.nextBarButton.accessibilityLabel; + toolbar.nextBarButton = next; + } + else if (nextBarButtonConfiguration.title) + { + next = [[IQBarButtonItem alloc] initWithTitle:nextBarButtonConfiguration.title style:UIBarButtonItemStylePlain target:target action:nextBarButtonConfiguration.action]; + next.invocation = toolbar.nextBarButton.invocation; + next.accessibilityLabel = toolbar.nextBarButton.accessibilityLabel; + toolbar.nextBarButton = next; + } + else + { + next = [[IQBarButtonItem alloc] initWithBarButtonSystemItem:nextBarButtonConfiguration.barButtonSystemItem target:target action:nextBarButtonConfiguration.action]; + next.invocation = toolbar.nextBarButton.invocation; + next.accessibilityLabel = toolbar.nextBarButton.accessibilityLabel; + toolbar.nextBarButton = next; + } + + [items addObject:next]; + } + + //Title + { + //Flexible space + [items addObject:[[self class] flexibleBarButtonItem]]; + + //Title button + toolbar.titleBarButton.title = titleText; +#ifdef __IPHONE_11_0 + if (@available(iOS 11.0, *)) {} + else +#endif + { + toolbar.titleBarButton.customView.frame = CGRectZero; + } + [items addObject:toolbar.titleBarButton]; + + //Flexible space + [items addObject:[[self class] flexibleBarButtonItem]]; + } + + if(rightBarButtonConfiguration) + { + IQBarButtonItem *done = toolbar.doneBarButton; + + if (done.isSystemItem == NO && (rightBarButtonConfiguration.image || rightBarButtonConfiguration.title)) + { + done.title = rightBarButtonConfiguration.title; + done.image = rightBarButtonConfiguration.image; + done.target = target; + done.action = rightBarButtonConfiguration.action; + } + else if (rightBarButtonConfiguration.image) + { + done = [[IQBarButtonItem alloc] initWithImage:rightBarButtonConfiguration.image style:UIBarButtonItemStylePlain target:target action:rightBarButtonConfiguration.action]; + done.invocation = toolbar.doneBarButton.invocation; + done.accessibilityLabel = toolbar.doneBarButton.accessibilityLabel; + toolbar.doneBarButton = done; + } + else if (rightBarButtonConfiguration.title) + { + done = [[IQBarButtonItem alloc] initWithTitle:rightBarButtonConfiguration.title style:UIBarButtonItemStylePlain target:target action:rightBarButtonConfiguration.action]; + done.invocation = toolbar.doneBarButton.invocation; + done.accessibilityLabel = toolbar.doneBarButton.accessibilityLabel; + toolbar.doneBarButton = done; + } + else + { + done = [[IQBarButtonItem alloc] initWithBarButtonSystemItem:rightBarButtonConfiguration.barButtonSystemItem target:target action:rightBarButtonConfiguration.action]; + done.invocation = toolbar.doneBarButton.invocation; + done.accessibilityLabel = toolbar.doneBarButton.accessibilityLabel; + toolbar.doneBarButton = done; + } + + [items addObject:done]; + } + + // Adding button to toolBar. + [toolbar setItems:items]; + + // Setting toolbar to keyboard. + [(UITextField*)self setInputAccessoryView:toolbar]; + + + if ([self respondsToSelector:@selector(keyboardAppearance)]) + { + switch ([(UITextField*)self keyboardAppearance]) + { + case UIKeyboardAppearanceDark: toolbar.barStyle = UIBarStyleBlack; break; + default: toolbar.barStyle = UIBarStyleDefault; break; + } + } +} + +#pragma mark - Right + +- (void)addRightButtonOnKeyboardWithText:(NSString*)text target:(id)target action:(SEL)action +{ + [self addRightButtonOnKeyboardWithText:text target:target action:action titleText:nil]; +} + +- (void)addRightButtonOnKeyboardWithText:(NSString*)text target:(id)target action:(SEL)action shouldShowPlaceholder:(BOOL)shouldShowPlaceholder +{ + [self addRightButtonOnKeyboardWithText:text target:target action:action titleText:(shouldShowPlaceholder?[self drawingToolbarPlaceholder]:nil)]; +} + +- (void)addRightButtonOnKeyboardWithText:(NSString*)text target:(id)target action:(SEL)action titleText:(NSString*)titleText +{ + IQBarButtonItemConfiguration *rightConfiguration = [[IQBarButtonItemConfiguration alloc] initWithTitle:text action:action]; + + [self addKeyboardToolbarWithTarget:target titleText:titleText rightBarButtonConfiguration:rightConfiguration previousBarButtonConfiguration:nil nextBarButtonConfiguration:nil]; +} + + +- (void)addRightButtonOnKeyboardWithImage:(UIImage*)image target:(id)target action:(SEL)action +{ + [self addRightButtonOnKeyboardWithImage:image target:target action:action titleText:nil]; +} + +- (void)addRightButtonOnKeyboardWithImage:(UIImage*)image target:(id)target action:(SEL)action shouldShowPlaceholder:(BOOL)shouldShowPlaceholder +{ + [self addRightButtonOnKeyboardWithImage:image target:target action:action titleText:(shouldShowPlaceholder?[self drawingToolbarPlaceholder]:nil)]; +} + +- (void)addRightButtonOnKeyboardWithImage:(UIImage*)image target:(id)target action:(SEL)action titleText:(NSString*)titleText +{ + IQBarButtonItemConfiguration *rightConfiguration = [[IQBarButtonItemConfiguration alloc] initWithImage:image action:action]; + + [self addKeyboardToolbarWithTarget:target titleText:titleText rightBarButtonConfiguration:rightConfiguration previousBarButtonConfiguration:nil nextBarButtonConfiguration:nil]; +} + + +-(void)addDoneOnKeyboardWithTarget:(id)target action:(SEL)action +{ + [self addDoneOnKeyboardWithTarget:target action:action titleText:nil]; +} + +-(void)addDoneOnKeyboardWithTarget:(id)target action:(SEL)action shouldShowPlaceholder:(BOOL)shouldShowPlaceholder +{ + [self addDoneOnKeyboardWithTarget:target action:action titleText:(shouldShowPlaceholder?[self drawingToolbarPlaceholder]:nil)]; +} + +- (void)addDoneOnKeyboardWithTarget:(id)target action:(SEL)action titleText:(NSString*)titleText +{ + IQBarButtonItemConfiguration *rightConfiguration = [[IQBarButtonItemConfiguration alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone action:action]; + + [self addKeyboardToolbarWithTarget:target titleText:titleText rightBarButtonConfiguration:rightConfiguration previousBarButtonConfiguration:nil nextBarButtonConfiguration:nil]; +} + + +- (void)addLeftRightOnKeyboardWithTarget:(id)target leftButtonTitle:(NSString*)leftTitle rightButtonTitle:(NSString*)rightTitle leftButtonAction:(SEL)leftAction rightButtonAction:(SEL)rightAction +{ + [self addLeftRightOnKeyboardWithTarget:target leftButtonTitle:leftTitle rightButtonTitle:rightTitle leftButtonAction:leftAction rightButtonAction:rightAction titleText:nil]; +} + +- (void)addLeftRightOnKeyboardWithTarget:(id)target leftButtonTitle:(NSString*)leftTitle rightButtonTitle:(NSString*)rightTitle leftButtonAction:(SEL)leftAction rightButtonAction:(SEL)rightAction shouldShowPlaceholder:(BOOL)shouldShowPlaceholder +{ + [self addLeftRightOnKeyboardWithTarget:target leftButtonTitle:leftTitle rightButtonTitle:rightTitle leftButtonAction:leftAction rightButtonAction:rightAction titleText:(shouldShowPlaceholder?[self drawingToolbarPlaceholder]:nil)]; +} + +- (void)addLeftRightOnKeyboardWithTarget:(id)target leftButtonTitle:(NSString*)leftTitle rightButtonTitle:(NSString*)rightTitle leftButtonAction:(SEL)leftAction rightButtonAction:(SEL)rightAction titleText:(NSString*)titleText +{ + IQBarButtonItemConfiguration *leftConfiguration = [[IQBarButtonItemConfiguration alloc] initWithTitle:leftTitle action:leftAction]; + + IQBarButtonItemConfiguration *rightConfiguration = [[IQBarButtonItemConfiguration alloc] initWithTitle:rightTitle action:rightAction]; + + [self addKeyboardToolbarWithTarget:target titleText:titleText rightBarButtonConfiguration:rightConfiguration previousBarButtonConfiguration:leftConfiguration nextBarButtonConfiguration:nil]; +} + + +-(void)addCancelDoneOnKeyboardWithTarget:(id)target cancelAction:(SEL)cancelAction doneAction:(SEL)doneAction +{ + [self addCancelDoneOnKeyboardWithTarget:target cancelAction:cancelAction doneAction:doneAction titleText:nil]; +} + +-(void)addCancelDoneOnKeyboardWithTarget:(id)target cancelAction:(SEL)cancelAction doneAction:(SEL)doneAction shouldShowPlaceholder:(BOOL)shouldShowPlaceholder +{ + [self addCancelDoneOnKeyboardWithTarget:target cancelAction:cancelAction doneAction:doneAction titleText:(shouldShowPlaceholder?[self drawingToolbarPlaceholder]:nil)]; +} + +- (void)addCancelDoneOnKeyboardWithTarget:(id)target cancelAction:(SEL)cancelAction doneAction:(SEL)doneAction titleText:(NSString*)titleText +{ + IQBarButtonItemConfiguration *leftConfiguration = [[IQBarButtonItemConfiguration alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel action:cancelAction]; + + IQBarButtonItemConfiguration *rightConfiguration = [[IQBarButtonItemConfiguration alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone action:doneAction]; + + [self addKeyboardToolbarWithTarget:target titleText:titleText rightBarButtonConfiguration:rightConfiguration previousBarButtonConfiguration:leftConfiguration nextBarButtonConfiguration:nil]; +} + + +-(void)addPreviousNextDoneOnKeyboardWithTarget:(id)target previousAction:(SEL)previousAction nextAction:(SEL)nextAction doneAction:(SEL)doneAction +{ + [self addPreviousNextDoneOnKeyboardWithTarget:target previousAction:previousAction nextAction:nextAction doneAction:doneAction titleText:nil]; +} + +-(void)addPreviousNextDoneOnKeyboardWithTarget:(id)target previousAction:(SEL)previousAction nextAction:(SEL)nextAction doneAction:(SEL)doneAction shouldShowPlaceholder:(BOOL)shouldShowPlaceholder +{ + [self addPreviousNextDoneOnKeyboardWithTarget:target previousAction:previousAction nextAction:nextAction doneAction:doneAction titleText:(shouldShowPlaceholder?[self drawingToolbarPlaceholder]:nil)]; +} + +- (void)addPreviousNextDoneOnKeyboardWithTarget:(id)target previousAction:(SEL)previousAction nextAction:(SEL)nextAction doneAction:(SEL)doneAction titleText:(NSString*)titleText +{ + IQBarButtonItemConfiguration *previousConfiguration = [[IQBarButtonItemConfiguration alloc] initWithImage:[UIImage keyboardPreviousImage] action:previousAction]; + + IQBarButtonItemConfiguration *nextConfiguration = [[IQBarButtonItemConfiguration alloc] initWithImage:[UIImage keyboardNextImage] action:nextAction]; + + IQBarButtonItemConfiguration *rightConfiguration = [[IQBarButtonItemConfiguration alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone action:doneAction]; + + [self addKeyboardToolbarWithTarget:target titleText:titleText rightBarButtonConfiguration:rightConfiguration previousBarButtonConfiguration:previousConfiguration nextBarButtonConfiguration:nextConfiguration]; +} + + +- (void)addPreviousNextRightOnKeyboardWithTarget:(nullable id)target rightButtonImage:(nullable UIImage*)rightButtonImage previousAction:(nullable SEL)previousAction nextAction:(nullable SEL)nextAction rightButtonAction:(nullable SEL)rightButtonAction +{ + [self addPreviousNextRightOnKeyboardWithTarget:target rightButtonImage:rightButtonImage previousAction:previousAction nextAction:nextAction rightButtonAction:rightButtonAction titleText:nil]; +} + +- (void)addPreviousNextRightOnKeyboardWithTarget:(nullable id)target rightButtonImage:(nullable UIImage*)rightButtonImage previousAction:(nullable SEL)previousAction nextAction:(nullable SEL)nextAction rightButtonAction:(nullable SEL)rightButtonAction shouldShowPlaceholder:(BOOL)shouldShowPlaceholder +{ + [self addPreviousNextRightOnKeyboardWithTarget:target rightButtonImage:rightButtonImage previousAction:previousAction nextAction:nextAction rightButtonAction:rightButtonAction titleText:(shouldShowPlaceholder?[self drawingToolbarPlaceholder]:nil)]; +} + +- (void)addPreviousNextRightOnKeyboardWithTarget:(id)target rightButtonImage:(UIImage*)rightButtonImage previousAction:(SEL)previousAction nextAction:(SEL)nextAction rightButtonAction:(SEL)rightButtonAction titleText:(NSString*)titleText +{ + IQBarButtonItemConfiguration *previousConfiguration = [[IQBarButtonItemConfiguration alloc] initWithImage:[UIImage keyboardPreviousImage] action:previousAction]; + + IQBarButtonItemConfiguration *nextConfiguration = [[IQBarButtonItemConfiguration alloc] initWithImage:[UIImage keyboardNextImage] action:nextAction]; + + IQBarButtonItemConfiguration *rightConfiguration = [[IQBarButtonItemConfiguration alloc] initWithImage:rightButtonImage action:rightButtonAction]; + + [self addKeyboardToolbarWithTarget:target titleText:titleText rightBarButtonConfiguration:rightConfiguration previousBarButtonConfiguration:previousConfiguration nextBarButtonConfiguration:nextConfiguration]; +} + + +- (void)addPreviousNextRightOnKeyboardWithTarget:(id)target rightButtonTitle:(NSString*)rightButtonTitle previousAction:(SEL)previousAction nextAction:(SEL)nextAction rightButtonAction:(SEL)rightButtonAction +{ + [self addPreviousNextRightOnKeyboardWithTarget:target rightButtonTitle:rightButtonTitle previousAction:previousAction nextAction:nextAction rightButtonAction:rightButtonAction titleText:nil]; +} + +- (void)addPreviousNextRightOnKeyboardWithTarget:(id)target rightButtonTitle:(NSString*)rightButtonTitle previousAction:(SEL)previousAction nextAction:(SEL)nextAction rightButtonAction:(SEL)rightButtonAction shouldShowPlaceholder:(BOOL)shouldShowPlaceholder +{ + [self addPreviousNextRightOnKeyboardWithTarget:target rightButtonTitle:rightButtonTitle previousAction:previousAction nextAction:nextAction rightButtonAction:rightButtonAction titleText:(shouldShowPlaceholder?[self drawingToolbarPlaceholder]:nil)]; +} + +- (void)addPreviousNextRightOnKeyboardWithTarget:(id)target rightButtonTitle:(NSString*)rightButtonTitle previousAction:(SEL)previousAction nextAction:(SEL)nextAction rightButtonAction:(SEL)rightButtonAction titleText:(NSString*)titleText +{ + IQBarButtonItemConfiguration *previousConfiguration = [[IQBarButtonItemConfiguration alloc] initWithImage:[UIImage keyboardPreviousImage] action:previousAction]; + + IQBarButtonItemConfiguration *nextConfiguration = [[IQBarButtonItemConfiguration alloc] initWithImage:[UIImage keyboardNextImage] action:nextAction]; + + IQBarButtonItemConfiguration *rightConfiguration = [[IQBarButtonItemConfiguration alloc] initWithTitle:rightButtonTitle action:rightButtonAction]; + + [self addKeyboardToolbarWithTarget:target titleText:titleText rightBarButtonConfiguration:rightConfiguration previousBarButtonConfiguration:previousConfiguration nextBarButtonConfiguration:nextConfiguration]; +} + + +@end diff --git a/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowDown@2x.png b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowDown@2x.png new file mode 100755 index 0000000..81db2ed Binary files /dev/null and b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowDown@2x.png differ diff --git a/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowDown@3x.png b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowDown@3x.png new file mode 100755 index 0000000..dd34122 Binary files /dev/null and b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowDown@3x.png differ diff --git a/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowLeft@2x.png b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowLeft@2x.png new file mode 100755 index 0000000..cfc40d6 Binary files /dev/null and b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowLeft@2x.png differ diff --git a/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowLeft@3x.png b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowLeft@3x.png new file mode 100755 index 0000000..849b991 Binary files /dev/null and b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowLeft@3x.png differ diff --git a/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowRight@2x.png b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowRight@2x.png new file mode 100755 index 0000000..c8b9a87 Binary files /dev/null and b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowRight@2x.png differ diff --git a/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowRight@3x.png b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowRight@3x.png new file mode 100755 index 0000000..95c4397 Binary files /dev/null and b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowRight@3x.png differ diff --git a/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowUp@2x.png b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowUp@2x.png new file mode 100755 index 0000000..8ec96a9 Binary files /dev/null and b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowUp@2x.png differ diff --git a/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowUp@3x.png b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowUp@3x.png new file mode 100755 index 0000000..9304f50 Binary files /dev/null and b/Ifish/controllers/HotBar/Lib/IQKeyboardManager/Resources/IQKeyboardManager.bundle/IQButtonBarArrowUp@3x.png differ diff --git a/Ifish/controllers/HotBar/Lib/MJExtension/MJExtension.h b/Ifish/controllers/HotBar/Lib/MJExtension/MJExtension.h new file mode 100755 index 0000000..ad35d09 --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/MJExtension/MJExtension.h @@ -0,0 +1,15 @@ +// +// MJExtension.h +// MJExtension +// +// Created by mj on 14-1-15. +// Copyright (c) 2014年 小码哥. All rights reserved. +// 代码地址:https://github.com/CoderMJLee/MJExtension +// 代码地址:http://code4app.com/ios/%E5%AD%97%E5%85%B8-JSON-%E4%B8%8E%E6%A8%A1%E5%9E%8B%E7%9A%84%E8%BD%AC%E6%8D%A2/5339992a933bf062608b4c57 + +#import "NSObject+MJCoding.h" +#import "NSObject+MJProperty.h" +#import "NSObject+MJClass.h" +#import "NSObject+MJKeyValue.h" +#import "NSString+MJExtension.h" +#import "MJExtensionConst.h" \ No newline at end of file diff --git a/Ifish/controllers/HotBar/Lib/MJExtension/MJExtensionConst.h b/Ifish/controllers/HotBar/Lib/MJExtension/MJExtensionConst.h new file mode 100644 index 0000000..ba8893a --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/MJExtension/MJExtensionConst.h @@ -0,0 +1,88 @@ + +#ifndef __MJExtensionConst__H__ +#define __MJExtensionConst__H__ + +#import + +// 过期 +#define MJExtensionDeprecated(instead) NS_DEPRECATED(2_0, 2_0, 2_0, 2_0, instead) + +// 构建错误 +#define MJExtensionBuildError(clazz, msg) \ +NSError *error = [NSError errorWithDomain:msg code:250 userInfo:nil]; \ +[clazz setMj_error:error]; + +// 日志输出 +#ifdef DEBUG +#define MJExtensionLog(...) NSLog(__VA_ARGS__) +#else +#define MJExtensionLog(...) +#endif + +/** + * 断言 + * @param condition 条件 + * @param returnValue 返回值 + */ +#define MJExtensionAssertError(condition, returnValue, clazz, msg) \ +[clazz setMj_error:nil]; \ +if ((condition) == NO) { \ + MJExtensionBuildError(clazz, msg); \ + return returnValue;\ +} + +#define MJExtensionAssert2(condition, returnValue) \ +if ((condition) == NO) return returnValue; + +/** + * 断言 + * @param condition 条件 + */ +#define MJExtensionAssert(condition) MJExtensionAssert2(condition, ) + +/** + * 断言 + * @param param 参数 + * @param returnValue 返回值 + */ +#define MJExtensionAssertParamNotNil2(param, returnValue) \ +MJExtensionAssert2((param) != nil, returnValue) + +/** + * 断言 + * @param param 参数 + */ +#define MJExtensionAssertParamNotNil(param) MJExtensionAssertParamNotNil2(param, ) + +/** + * 打印所有的属性 + */ +#define MJLogAllIvars \ +-(NSString *)description \ +{ \ + return [self mj_keyValues].description; \ +} +#define MJExtensionLogAllProperties MJLogAllIvars + +/** + * 类型(属性类型) + */ +extern NSString *const MJPropertyTypeInt; +extern NSString *const MJPropertyTypeShort; +extern NSString *const MJPropertyTypeFloat; +extern NSString *const MJPropertyTypeDouble; +extern NSString *const MJPropertyTypeLong; +extern NSString *const MJPropertyTypeLongLong; +extern NSString *const MJPropertyTypeChar; +extern NSString *const MJPropertyTypeBOOL1; +extern NSString *const MJPropertyTypeBOOL2; +extern NSString *const MJPropertyTypePointer; + +extern NSString *const MJPropertyTypeIvar; +extern NSString *const MJPropertyTypeMethod; +extern NSString *const MJPropertyTypeBlock; +extern NSString *const MJPropertyTypeClass; +extern NSString *const MJPropertyTypeSEL; +extern NSString *const MJPropertyTypeId; + +#endif \ No newline at end of file diff --git a/Ifish/controllers/HotBar/Lib/MJExtension/MJExtensionConst.m b/Ifish/controllers/HotBar/Lib/MJExtension/MJExtensionConst.m new file mode 100644 index 0000000..24bcca5 --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/MJExtension/MJExtensionConst.m @@ -0,0 +1,27 @@ +#ifndef __MJExtensionConst__M__ +#define __MJExtensionConst__M__ + +#import + +/** + * 成员变量类型(属性类型) + */ +NSString *const MJPropertyTypeInt = @"i"; +NSString *const MJPropertyTypeShort = @"s"; +NSString *const MJPropertyTypeFloat = @"f"; +NSString *const MJPropertyTypeDouble = @"d"; +NSString *const MJPropertyTypeLong = @"l"; +NSString *const MJPropertyTypeLongLong = @"q"; +NSString *const MJPropertyTypeChar = @"c"; +NSString *const MJPropertyTypeBOOL1 = @"c"; +NSString *const MJPropertyTypeBOOL2 = @"b"; +NSString *const MJPropertyTypePointer = @"*"; + +NSString *const MJPropertyTypeIvar = @"^{objc_ivar=}"; +NSString *const MJPropertyTypeMethod = @"^{objc_method=}"; +NSString *const MJPropertyTypeBlock = @"@?"; +NSString *const MJPropertyTypeClass = @"#"; +NSString *const MJPropertyTypeSEL = @":"; +NSString *const MJPropertyTypeId = @"@"; + +#endif \ No newline at end of file diff --git a/Ifish/controllers/HotBar/Lib/MJExtension/MJFoundation.h b/Ifish/controllers/HotBar/Lib/MJExtension/MJFoundation.h new file mode 100644 index 0000000..8a0e457 --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/MJExtension/MJFoundation.h @@ -0,0 +1,13 @@ +// +// MJFoundation.h +// MJExtensionExample +// +// Created by MJ Lee on 14/7/16. +// Copyright (c) 2014年 小码哥. All rights reserved. +// + +#import + +@interface MJFoundation : NSObject ++ (BOOL)isClassFromFoundation:(Class)c; +@end diff --git a/Ifish/controllers/HotBar/Lib/MJExtension/MJFoundation.m b/Ifish/controllers/HotBar/Lib/MJExtension/MJFoundation.m new file mode 100644 index 0000000..23a7d8c --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/MJExtension/MJFoundation.m @@ -0,0 +1,48 @@ +// +// MJFoundation.m +// MJExtensionExample +// +// Created by MJ Lee on 14/7/16. +// Copyright (c) 2014年 小码哥. All rights reserved. +// + +#import "MJFoundation.h" +#import "MJExtensionConst.h" +#import + +static NSSet *foundationClasses_; + +@implementation MJFoundation + ++ (NSSet *)foundationClasses +{ + if (foundationClasses_ == nil) { + // 集合中没有NSObject,因为几乎所有的类都是继承自NSObject,具体是不是NSObject需要特殊判断 + foundationClasses_ = [NSSet setWithObjects: + [NSURL class], + [NSDate class], + [NSValue class], + [NSData class], + [NSError class], + [NSArray class], + [NSDictionary class], + [NSString class], + [NSAttributedString class], nil]; + } + return foundationClasses_; +} + ++ (BOOL)isClassFromFoundation:(Class)c +{ + if (c == [NSObject class] || c == [NSManagedObject class]) return YES; + + __block BOOL result = NO; + [[self foundationClasses] enumerateObjectsUsingBlock:^(Class foundationClass, BOOL *stop) { + if ([c isSubclassOfClass:foundationClass]) { + result = YES; + *stop = YES; + } + }]; + return result; +} +@end diff --git a/Ifish/controllers/HotBar/Lib/MJExtension/MJProperty.h b/Ifish/controllers/HotBar/Lib/MJExtension/MJProperty.h new file mode 100644 index 0000000..90ac6bc --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/MJExtension/MJProperty.h @@ -0,0 +1,53 @@ +// +// MJProperty.h +// MJExtensionExample +// +// Created by MJ Lee on 15/4/17. +// Copyright (c) 2015年 小码哥. All rights reserved. +// 包装一个成员属性 + +#import +#import +#import "MJPropertyType.h" +#import "MJPropertyKey.h" + +/** + * 包装一个成员 + */ +@interface MJProperty : NSObject +/** 成员属性 */ +@property (nonatomic, assign) objc_property_t property; +/** 成员属性的名字 */ +@property (nonatomic, readonly) NSString *name; + +/** 成员属性的类型 */ +@property (nonatomic, readonly) MJPropertyType *type; +/** 成员属性来源于哪个类(可能是父类) */ +@property (nonatomic, assign) Class srcClass; + +/**** 同一个成员属性 - 父类和子类的行为可能不一致(originKey、propertyKeys、objectClassInArray) ****/ +/** 设置最原始的key */ +- (void)setOriginKey:(id)originKey forClass:(Class)c; +/** 对应着字典中的多级key(里面存放的数组,数组里面都是MJPropertyKey对象) */ +- (NSArray *)propertyKeysForClass:(Class)c; + +/** 模型数组中的模型类型 */ +- (void)setObjectClassInArray:(Class)objectClass forClass:(Class)c; +- (Class)objectClassInArrayForClass:(Class)c; +/**** 同一个成员变量 - 父类和子类的行为可能不一致(key、keys、objectClassInArray) ****/ + +/** + * 设置object的成员变量值 + */ +- (void)setValue:(id)value forObject:(id)object; +/** + * 得到object的成员属性值 + */ +- (id)valueForObject:(id)object; + +/** + * 初始化 + */ ++ (instancetype)cachedPropertyWithProperty:(objc_property_t)property; + +@end diff --git a/Ifish/controllers/HotBar/Lib/MJExtension/MJProperty.m b/Ifish/controllers/HotBar/Lib/MJExtension/MJProperty.m new file mode 100644 index 0000000..96710fa --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/MJExtension/MJProperty.m @@ -0,0 +1,170 @@ +// +// MJProperty.m +// MJExtensionExample +// +// Created by MJ Lee on 15/4/17. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "MJProperty.h" +#import "MJFoundation.h" +#import "MJExtensionConst.h" +#import + +@interface MJProperty() +@property (strong, nonatomic) NSMutableDictionary *propertyKeysDict; +@property (strong, nonatomic) NSMutableDictionary *objectClassInArrayDict; +@end + +@implementation MJProperty + +#pragma mark - 初始化 +- (instancetype)init +{ + if (self = [super init]) { + _propertyKeysDict = [NSMutableDictionary dictionary]; + _objectClassInArrayDict = [NSMutableDictionary dictionary]; + } + return self; +} + +#pragma mark - 缓存 ++ (instancetype)cachedPropertyWithProperty:(objc_property_t)property +{ + MJProperty *propertyObj = objc_getAssociatedObject(self, property); + if (propertyObj == nil) { + propertyObj = [[self alloc] init]; + propertyObj.property = property; + objc_setAssociatedObject(self, property, propertyObj, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + } + return propertyObj; +} + +#pragma mark - 公共方法 +- (void)setProperty:(objc_property_t)property +{ + _property = property; + + MJExtensionAssertParamNotNil(property); + + // 1.属性名 + _name = @(property_getName(property)); + + // 2.成员类型 + NSString *attrs = @(property_getAttributes(property)); + NSUInteger dotLoc = [attrs rangeOfString:@","].location; + NSString *code = nil; + NSUInteger loc = 1; + if (dotLoc == NSNotFound) { // 没有, + code = [attrs substringFromIndex:loc]; + } else { + code = [attrs substringWithRange:NSMakeRange(loc, dotLoc - loc)]; + } + _type = [MJPropertyType cachedTypeWithCode:code]; +} + +/** + * 获得成员变量的值 + */ +- (id)valueForObject:(id)object +{ + if (self.type.KVCDisabled) return [NSNull null]; + return [object valueForKey:self.name]; +} + +/** + * 设置成员变量的值 + */ +- (void)setValue:(id)value forObject:(id)object +{ + if (self.type.KVCDisabled || value == nil) return; + [object setValue:value forKey:self.name]; +} + +/** + * 通过字符串key创建对应的keys + */ +- (NSArray *)propertyKeysWithStringKey:(NSString *)stringKey +{ + if (stringKey.length == 0) return nil; + + NSMutableArray *propertyKeys = [NSMutableArray array]; + // 如果有多级映射 + NSArray *oldKeys = [stringKey componentsSeparatedByString:@"."]; + + for (NSString *oldKey in oldKeys) { + NSUInteger start = [oldKey rangeOfString:@"["].location; + if (start != NSNotFound) { // 有索引的key + NSString *prefixKey = [oldKey substringToIndex:start]; + NSString *indexKey = prefixKey; + if (prefixKey.length) { + MJPropertyKey *propertyKey = [[MJPropertyKey alloc] init]; + propertyKey.name = prefixKey; + [propertyKeys addObject:propertyKey]; + + indexKey = [oldKey stringByReplacingOccurrencesOfString:prefixKey withString:@""]; + } + + /** 解析索引 **/ + // 元素 + NSArray *cmps = [[indexKey stringByReplacingOccurrencesOfString:@"[" withString:@""] componentsSeparatedByString:@"]"]; + for (NSInteger i = 0; i + +typedef enum { + MJPropertyKeyTypeDictionary = 0, // 字典的key + MJPropertyKeyTypeArray // 数组的key +} MJPropertyKeyType; + +/** + * 属性的key + */ +@interface MJPropertyKey : NSObject +/** key的名字 */ +@property (copy, nonatomic) NSString *name; +/** key的种类,可能是@"10",可能是@"age" */ +@property (assign, nonatomic) MJPropertyKeyType type; + +/** + * 根据当前的key,也就是name,从object(字典或者数组)中取值 + */ +- (id)valueInObject:(id)object; + +@end diff --git a/Ifish/controllers/HotBar/Lib/MJExtension/MJPropertyKey.m b/Ifish/controllers/HotBar/Lib/MJExtension/MJPropertyKey.m new file mode 100644 index 0000000..438d019 --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/MJExtension/MJPropertyKey.m @@ -0,0 +1,25 @@ +// +// MJPropertyKey.m +// MJExtensionExample +// +// Created by MJ Lee on 15/8/11. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "MJPropertyKey.h" + +@implementation MJPropertyKey + +- (id)valueInObject:(id)object +{ + if ([object isKindOfClass:[NSDictionary class]] && self.type == MJPropertyKeyTypeDictionary) { + return object[self.name]; + } else if ([object isKindOfClass:[NSArray class]] && self.type == MJPropertyKeyTypeArray) { + NSArray *array = object; + NSUInteger index = self.name.intValue; + if (index < array.count) return array[index]; + return nil; + } + return nil; +} +@end diff --git a/Ifish/controllers/HotBar/Lib/MJExtension/MJPropertyType.h b/Ifish/controllers/HotBar/Lib/MJExtension/MJPropertyType.h new file mode 100755 index 0000000..8c53f27 --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/MJExtension/MJPropertyType.h @@ -0,0 +1,39 @@ +// +// MJPropertyType.h +// MJExtension +// +// Created by mj on 14-1-15. +// Copyright (c) 2014年 小码哥. All rights reserved. +// 包装一种类型 + +#import + +/** + * 包装一种类型 + */ +@interface MJPropertyType : NSObject +/** 类型标识符 */ +@property (nonatomic, copy) NSString *code; + +/** 是否为id类型 */ +@property (nonatomic, readonly, getter=isIdType) BOOL idType; + +/** 是否为基本数字类型:int、float等 */ +@property (nonatomic, readonly, getter=isNumberType) BOOL numberType; + +/** 是否为BOOL类型 */ +@property (nonatomic, readonly, getter=isBoolType) BOOL boolType; + +/** 对象类型(如果是基本数据类型,此值为nil) */ +@property (nonatomic, readonly) Class typeClass; + +/** 类型是否来自于Foundation框架,比如NSString、NSArray */ +@property (nonatomic, readonly, getter = isFromFoundation) BOOL fromFoundation; +/** 类型是否不支持KVC */ +@property (nonatomic, readonly, getter = isKVCDisabled) BOOL KVCDisabled; + +/** + * 获得缓存的类型对象 + */ ++ (instancetype)cachedTypeWithCode:(NSString *)code; +@end \ No newline at end of file diff --git a/Ifish/controllers/HotBar/Lib/MJExtension/MJPropertyType.m b/Ifish/controllers/HotBar/Lib/MJExtension/MJPropertyType.m new file mode 100755 index 0000000..384beba --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/MJExtension/MJPropertyType.m @@ -0,0 +1,72 @@ +// +// MJPropertyType.m +// MJExtension +// +// Created by mj on 14-1-15. +// Copyright (c) 2014年 小码哥. All rights reserved. +// + +#import "MJPropertyType.h" +#import "MJExtension.h" +#import "MJFoundation.h" +#import "MJExtensionConst.h" + +@implementation MJPropertyType + +static NSMutableDictionary *types_; ++ (void)initialize +{ + types_ = [NSMutableDictionary dictionary]; +} + ++ (instancetype)cachedTypeWithCode:(NSString *)code +{ + MJExtensionAssertParamNotNil2(code, nil); + @synchronized (self) { + MJPropertyType *type = types_[code]; + if (type == nil) { + type = [[self alloc] init]; + type.code = code; + types_[code] = type; + } + return type; + } +} + +#pragma mark - 公共方法 +- (void)setCode:(NSString *)code +{ + _code = code; + + MJExtensionAssertParamNotNil(code); + + if ([code isEqualToString:MJPropertyTypeId]) { + _idType = YES; + } else if (code.length == 0) { + _KVCDisabled = YES; + } else if (code.length > 3 && [code hasPrefix:@"@\""]) { + // 去掉@"和",截取中间的类型名称 + _code = [code substringWithRange:NSMakeRange(2, code.length - 3)]; + _typeClass = NSClassFromString(_code); + _fromFoundation = [MJFoundation isClassFromFoundation:_typeClass]; + _numberType = [_typeClass isSubclassOfClass:[NSNumber class]]; + + } else if ([code isEqualToString:MJPropertyTypeSEL] || + [code isEqualToString:MJPropertyTypeIvar] || + [code isEqualToString:MJPropertyTypeMethod]) { + _KVCDisabled = YES; + } + + // 是否为数字类型 + NSString *lowerCode = _code.lowercaseString; + NSArray *numberTypes = @[MJPropertyTypeInt, MJPropertyTypeShort, MJPropertyTypeBOOL1, MJPropertyTypeBOOL2, MJPropertyTypeFloat, MJPropertyTypeDouble, MJPropertyTypeLong, MJPropertyTypeLongLong, MJPropertyTypeChar]; + if ([numberTypes containsObject:lowerCode]) { + _numberType = YES; + + if ([lowerCode isEqualToString:MJPropertyTypeBOOL1] + || [lowerCode isEqualToString:MJPropertyTypeBOOL2]) { + _boolType = YES; + } + } +} +@end diff --git a/Ifish/controllers/HotBar/Lib/MJExtension/NSObject+MJClass.h b/Ifish/controllers/HotBar/Lib/MJExtension/NSObject+MJClass.h new file mode 100644 index 0000000..e4ac1c5 --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/MJExtension/NSObject+MJClass.h @@ -0,0 +1,90 @@ +// +// NSObject+MJClass.h +// MJExtensionExample +// +// Created by MJ Lee on 15/8/11. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import + +/** + * 遍历所有类的block(父类) + */ +typedef void (^MJClassesEnumeration)(Class c, BOOL *stop); + +/** 这个数组中的属性名才会进行字典和模型的转换 */ +typedef NSArray * (^MJAllowedPropertyNames)(); +/** 这个数组中的属性名才会进行归档 */ +typedef NSArray * (^MJAllowedCodingPropertyNames)(); + +/** 这个数组中的属性名将会被忽略:不进行字典和模型的转换 */ +typedef NSArray * (^MJIgnoredPropertyNames)(); +/** 这个数组中的属性名将会被忽略:不进行归档 */ +typedef NSArray * (^MJIgnoredCodingPropertyNames)(); + +/** + * 类相关的扩展 + */ +@interface NSObject (MJClass) +/** + * 遍历所有的类 + */ ++ (void)mj_enumerateClasses:(MJClassesEnumeration)enumeration; ++ (void)mj_enumerateAllClasses:(MJClassesEnumeration)enumeration; + +#pragma mark - 属性白名单配置 +/** + * 这个数组中的属性名才会进行字典和模型的转换 + * + * @param allowedPropertyNames 这个数组中的属性名才会进行字典和模型的转换 + */ ++ (void)mj_setupAllowedPropertyNames:(MJAllowedPropertyNames)allowedPropertyNames; + +/** + * 这个数组中的属性名才会进行字典和模型的转换 + */ ++ (NSMutableArray *)mj_totalAllowedPropertyNames; + +#pragma mark - 属性黑名单配置 +/** + * 这个数组中的属性名将会被忽略:不进行字典和模型的转换 + * + * @param ignoredPropertyNames 这个数组中的属性名将会被忽略:不进行字典和模型的转换 + */ ++ (void)mj_setupIgnoredPropertyNames:(MJIgnoredPropertyNames)ignoredPropertyNames; + +/** + * 这个数组中的属性名将会被忽略:不进行字典和模型的转换 + */ ++ (NSMutableArray *)mj_totalIgnoredPropertyNames; + +#pragma mark - 归档属性白名单配置 +/** + * 这个数组中的属性名才会进行归档 + * + * @param allowedCodingPropertyNames 这个数组中的属性名才会进行归档 + */ ++ (void)mj_setupAllowedCodingPropertyNames:(MJAllowedCodingPropertyNames)allowedCodingPropertyNames; + +/** + * 这个数组中的属性名才会进行字典和模型的转换 + */ ++ (NSMutableArray *)mj_totalAllowedCodingPropertyNames; + +#pragma mark - 归档属性黑名单配置 +/** + * 这个数组中的属性名将会被忽略:不进行归档 + * + * @param ignoredCodingPropertyNames 这个数组中的属性名将会被忽略:不进行归档 + */ ++ (void)mj_setupIgnoredCodingPropertyNames:(MJIgnoredCodingPropertyNames)ignoredCodingPropertyNames; + +/** + * 这个数组中的属性名将会被忽略:不进行归档 + */ ++ (NSMutableArray *)mj_totalIgnoredCodingPropertyNames; + +#pragma mark - 内部使用 ++ (void)mj_setupBlockReturnValue:(id (^)())block key:(const char *)key; +@end diff --git a/Ifish/controllers/HotBar/Lib/MJExtension/NSObject+MJClass.m b/Ifish/controllers/HotBar/Lib/MJExtension/NSObject+MJClass.m new file mode 100644 index 0000000..46447a8 --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/MJExtension/NSObject+MJClass.m @@ -0,0 +1,170 @@ +// +// NSObject+MJClass.m +// MJExtensionExample +// +// Created by MJ Lee on 15/8/11. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "NSObject+MJClass.h" +#import "NSObject+MJCoding.h" +#import "NSObject+MJKeyValue.h" +#import "MJFoundation.h" +#import + +static const char MJAllowedPropertyNamesKey = '\0'; +static const char MJIgnoredPropertyNamesKey = '\0'; +static const char MJAllowedCodingPropertyNamesKey = '\0'; +static const char MJIgnoredCodingPropertyNamesKey = '\0'; + +static NSMutableDictionary *allowedPropertyNamesDict_; +static NSMutableDictionary *ignoredPropertyNamesDict_; +static NSMutableDictionary *allowedCodingPropertyNamesDict_; +static NSMutableDictionary *ignoredCodingPropertyNamesDict_; + +@implementation NSObject (MJClass) + ++ (void)load +{ + allowedPropertyNamesDict_ = [NSMutableDictionary dictionary]; + ignoredPropertyNamesDict_ = [NSMutableDictionary dictionary]; + allowedCodingPropertyNamesDict_ = [NSMutableDictionary dictionary]; + ignoredCodingPropertyNamesDict_ = [NSMutableDictionary dictionary]; +} + ++ (NSMutableDictionary *)dictForKey:(const void *)key +{ + @synchronized (self) { + if (key == &MJAllowedPropertyNamesKey) return allowedPropertyNamesDict_; + if (key == &MJIgnoredPropertyNamesKey) return ignoredPropertyNamesDict_; + if (key == &MJAllowedCodingPropertyNamesKey) return allowedCodingPropertyNamesDict_; + if (key == &MJIgnoredCodingPropertyNamesKey) return ignoredCodingPropertyNamesDict_; + return nil; + } +} + ++ (void)mj_enumerateClasses:(MJClassesEnumeration)enumeration +{ + // 1.没有block就直接返回 + if (enumeration == nil) return; + + // 2.停止遍历的标记 + BOOL stop = NO; + + // 3.当前正在遍历的类 + Class c = self; + + // 4.开始遍历每一个类 + while (c && !stop) { + // 4.1.执行操作 + enumeration(c, &stop); + + // 4.2.获得父类 + c = class_getSuperclass(c); + + if ([MJFoundation isClassFromFoundation:c]) break; + } +} + ++ (void)mj_enumerateAllClasses:(MJClassesEnumeration)enumeration +{ + // 1.没有block就直接返回 + if (enumeration == nil) return; + + // 2.停止遍历的标记 + BOOL stop = NO; + + // 3.当前正在遍历的类 + Class c = self; + + // 4.开始遍历每一个类 + while (c && !stop) { + // 4.1.执行操作 + enumeration(c, &stop); + + // 4.2.获得父类 + c = class_getSuperclass(c); + } +} + +#pragma mark - 属性黑名单配置 ++ (void)mj_setupIgnoredPropertyNames:(MJIgnoredPropertyNames)ignoredPropertyNames +{ + [self mj_setupBlockReturnValue:ignoredPropertyNames key:&MJIgnoredPropertyNamesKey]; +} + ++ (NSMutableArray *)mj_totalIgnoredPropertyNames +{ + return [self mj_totalObjectsWithSelector:@selector(mj_ignoredPropertyNames) key:&MJIgnoredPropertyNamesKey]; +} + +#pragma mark - 归档属性黑名单配置 ++ (void)mj_setupIgnoredCodingPropertyNames:(MJIgnoredCodingPropertyNames)ignoredCodingPropertyNames +{ + [self mj_setupBlockReturnValue:ignoredCodingPropertyNames key:&MJIgnoredCodingPropertyNamesKey]; +} + ++ (NSMutableArray *)mj_totalIgnoredCodingPropertyNames +{ + return [self mj_totalObjectsWithSelector:@selector(mj_ignoredCodingPropertyNames) key:&MJIgnoredCodingPropertyNamesKey]; +} + +#pragma mark - 属性白名单配置 ++ (void)mj_setupAllowedPropertyNames:(MJAllowedPropertyNames)allowedPropertyNames; +{ + [self mj_setupBlockReturnValue:allowedPropertyNames key:&MJAllowedPropertyNamesKey]; +} + ++ (NSMutableArray *)mj_totalAllowedPropertyNames +{ + return [self mj_totalObjectsWithSelector:@selector(mj_allowedPropertyNames) key:&MJAllowedPropertyNamesKey]; +} + +#pragma mark - 归档属性白名单配置 ++ (void)mj_setupAllowedCodingPropertyNames:(MJAllowedCodingPropertyNames)allowedCodingPropertyNames +{ + [self mj_setupBlockReturnValue:allowedCodingPropertyNames key:&MJAllowedCodingPropertyNamesKey]; +} + ++ (NSMutableArray *)mj_totalAllowedCodingPropertyNames +{ + return [self mj_totalObjectsWithSelector:@selector(mj_allowedCodingPropertyNames) key:&MJAllowedCodingPropertyNamesKey]; +} +#pragma mark - block和方法处理:存储block的返回值 ++ (void)mj_setupBlockReturnValue:(id (^)())block key:(const char *)key +{ + if (block) { + objc_setAssociatedObject(self, key, block(), OBJC_ASSOCIATION_RETAIN_NONATOMIC); + } else { + objc_setAssociatedObject(self, key, nil, OBJC_ASSOCIATION_RETAIN_NONATOMIC); + } + + // 清空数据 + [[self dictForKey:key] removeAllObjects]; +} + ++ (NSMutableArray *)mj_totalObjectsWithSelector:(SEL)selector key:(const char *)key +{ + NSMutableArray *array = [self dictForKey:key][NSStringFromClass(self)]; + if (array) return array; + + // 创建、存储 + [self dictForKey:key][NSStringFromClass(self)] = array = [NSMutableArray array]; + + if ([self respondsToSelector:selector]) { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Warc-performSelector-leaks" + NSArray *subArray = [self performSelector:selector]; +#pragma clang diagnostic pop + if (subArray) { + [array addObjectsFromArray:subArray]; + } + } + + [self mj_enumerateAllClasses:^(__unsafe_unretained Class c, BOOL *stop) { + NSArray *subArray = objc_getAssociatedObject(c, key); + [array addObjectsFromArray:subArray]; + }]; + return array; +} +@end diff --git a/Ifish/controllers/HotBar/Lib/MJExtension/NSObject+MJCoding.h b/Ifish/controllers/HotBar/Lib/MJExtension/NSObject+MJCoding.h new file mode 100755 index 0000000..d4327dd --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/MJExtension/NSObject+MJCoding.h @@ -0,0 +1,55 @@ +// +// NSObject+MJCoding.h +// MJExtension +// +// Created by mj on 14-1-15. +// Copyright (c) 2014年 小码哥. All rights reserved. +// + +#import +#import "MJExtensionConst.h" + +/** + * Codeing协议 + */ +@protocol MJCoding +@optional +/** + * 这个数组中的属性名才会进行归档 + */ ++ (NSArray *)mj_allowedCodingPropertyNames; +/** + * 这个数组中的属性名将会被忽略:不进行归档 + */ ++ (NSArray *)mj_ignoredCodingPropertyNames; +@end + +@interface NSObject (MJCoding) +/** + * 解码(从文件中解析对象) + */ +- (void)mj_decode:(NSCoder *)decoder; +/** + * 编码(将对象写入文件中) + */ +- (void)mj_encode:(NSCoder *)encoder; +@end + +/** + 归档的实现 + */ +#define MJCodingImplementation \ +- (id)initWithCoder:(NSCoder *)decoder \ +{ \ +if (self = [super init]) { \ +[self mj_decode:decoder]; \ +} \ +return self; \ +} \ +\ +- (void)encodeWithCoder:(NSCoder *)encoder \ +{ \ +[self mj_encode:encoder]; \ +} + +#define MJExtensionCodingImplementation MJCodingImplementation \ No newline at end of file diff --git a/Ifish/controllers/HotBar/Lib/MJExtension/NSObject+MJCoding.m b/Ifish/controllers/HotBar/Lib/MJExtension/NSObject+MJCoding.m new file mode 100755 index 0000000..27ae8ee --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/MJExtension/NSObject+MJCoding.m @@ -0,0 +1,54 @@ +// +// NSObject+MJCoding.m +// MJExtension +// +// Created by mj on 14-1-15. +// Copyright (c) 2014年 小码哥. All rights reserved. +// + +#import "NSObject+MJCoding.h" +#import "NSObject+MJClass.h" +#import "NSObject+MJProperty.h" +#import "MJProperty.h" + +@implementation NSObject (MJCoding) + +- (void)mj_encode:(NSCoder *)encoder +{ + Class clazz = [self class]; + + NSArray *allowedCodingPropertyNames = [clazz mj_totalAllowedCodingPropertyNames]; + NSArray *ignoredCodingPropertyNames = [clazz mj_totalIgnoredCodingPropertyNames]; + + [clazz mj_enumerateProperties:^(MJProperty *property, BOOL *stop) { + // 检测是否被忽略 + if (allowedCodingPropertyNames.count && ![allowedCodingPropertyNames containsObject:property.name]) return; + if ([ignoredCodingPropertyNames containsObject:property.name]) return; + + id value = [property valueForObject:self]; + if (value == nil) return; + [encoder encodeObject:value forKey:property.name]; + }]; +} + +- (void)mj_decode:(NSCoder *)decoder +{ + Class clazz = [self class]; + + NSArray *allowedCodingPropertyNames = [clazz mj_totalAllowedCodingPropertyNames]; + NSArray *ignoredCodingPropertyNames = [clazz mj_totalIgnoredCodingPropertyNames]; + + [clazz mj_enumerateProperties:^(MJProperty *property, BOOL *stop) { + // 检测是否被忽略 + if (allowedCodingPropertyNames.count && ![allowedCodingPropertyNames containsObject:property.name]) return; + if ([ignoredCodingPropertyNames containsObject:property.name]) return; + + id value = [decoder decodeObjectForKey:property.name]; + if (value == nil) { // 兼容以前的MJExtension版本 + value = [decoder decodeObjectForKey:[@"_" stringByAppendingString:property.name]]; + } + if (value == nil) return; + [property setValue:value forObject:self]; + }]; +} +@end diff --git a/Ifish/controllers/HotBar/Lib/MJExtension/NSObject+MJKeyValue.h b/Ifish/controllers/HotBar/Lib/MJExtension/NSObject+MJKeyValue.h new file mode 100755 index 0000000..2428a4a --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/MJExtension/NSObject+MJKeyValue.h @@ -0,0 +1,225 @@ +// +// NSObject+MJKeyValue.h +// MJExtension +// +// Created by mj on 13-8-24. +// Copyright (c) 2013年 小码哥. All rights reserved. +// + +#import +#import "MJExtensionConst.h" +#import +#import "MJProperty.h" + +/** + * KeyValue协议 + */ +@protocol MJKeyValue +@optional +/** + * 只有这个数组中的属性名才允许进行字典和模型的转换 + */ ++ (NSArray *)mj_allowedPropertyNames; + +/** + * 这个数组中的属性名将会被忽略:不进行字典和模型的转换 + */ ++ (NSArray *)mj_ignoredPropertyNames; + +/** + * 将属性名换为其他key去字典中取值 + * + * @return 字典中的key是属性名,value是从字典中取值用的key + */ ++ (NSDictionary *)mj_replacedKeyFromPropertyName; + +/** + * 将属性名换为其他key去字典中取值 + * + * @return 从字典中取值用的key + */ ++ (id)mj_replacedKeyFromPropertyName121:(NSString *)propertyName; + +/** + * 数组中需要转换的模型类 + * + * @return 字典中的key是数组属性名,value是数组中存放模型的Class(Class类型或者NSString类型) + */ ++ (NSDictionary *)mj_objectClassInArray; + +/** + * 旧值换新值,用于过滤字典中的值 + * + * @param oldValue 旧值 + * + * @return 新值 + */ +- (id)mj_newValueFromOldValue:(id)oldValue property:(MJProperty *)property; + +/** + * 当字典转模型完毕时调用 + */ +- (void)mj_keyValuesDidFinishConvertingToObject; + +/** + * 当模型转字典完毕时调用 + */ +- (void)mj_objectDidFinishConvertingToKeyValues; +@end + +@interface NSObject (MJKeyValue) +#pragma mark - 类方法 +/** + * 字典转模型过程中遇到的错误 + */ ++ (NSError *)mj_error; + +/** + * 模型转字典时,字典的key是否参考replacedKeyFromPropertyName等方法(父类设置了,子类也会继承下来) + */ ++ (void)mj_referenceReplacedKeyWhenCreatingKeyValues:(BOOL)reference; + +#pragma mark - 对象方法 +/** + * 将字典的键值对转成模型属性 + * @param keyValues 字典(可以是NSDictionary、NSData、NSString) + */ +- (instancetype)mj_setKeyValues:(id)keyValues; + +/** + * 将字典的键值对转成模型属性 + * @param keyValues 字典(可以是NSDictionary、NSData、NSString) + * @param context CoreData上下文 + */ +- (instancetype)mj_setKeyValues:(id)keyValues context:(NSManagedObjectContext *)context; + +/** + * 将模型转成字典 + * @return 字典 + */ +- (NSMutableDictionary *)mj_keyValues; +- (NSMutableDictionary *)mj_keyValuesWithKeys:(NSArray *)keys; +- (NSMutableDictionary *)mj_keyValuesWithIgnoredKeys:(NSArray *)ignoredKeys; + +/** + * 通过模型数组来创建一个字典数组 + * @param objectArray 模型数组 + * @return 字典数组 + */ ++ (NSMutableArray *)mj_keyValuesArrayWithObjectArray:(NSArray *)objectArray; ++ (NSMutableArray *)mj_keyValuesArrayWithObjectArray:(NSArray *)objectArray keys:(NSArray *)keys; ++ (NSMutableArray *)mj_keyValuesArrayWithObjectArray:(NSArray *)objectArray ignoredKeys:(NSArray *)ignoredKeys; + +#pragma mark - 字典转模型 +/** + * 通过字典来创建一个模型 + * @param keyValues 字典(可以是NSDictionary、NSData、NSString) + * @return 新建的对象 + */ ++ (instancetype)mj_objectWithKeyValues:(id)keyValues; + +/** + * 通过字典来创建一个CoreData模型 + * @param keyValues 字典(可以是NSDictionary、NSData、NSString) + * @param context CoreData上下文 + * @return 新建的对象 + */ ++ (instancetype)mj_objectWithKeyValues:(id)keyValues context:(NSManagedObjectContext *)context; + +/** + * 通过plist来创建一个模型 + * @param filename 文件名(仅限于mainBundle中的文件) + * @return 新建的对象 + */ ++ (instancetype)mj_objectWithFilename:(NSString *)filename; + +/** + * 通过plist来创建一个模型 + * @param file 文件全路径 + * @return 新建的对象 + */ ++ (instancetype)mj_objectWithFile:(NSString *)file; + +#pragma mark - 字典数组转模型数组 +/** + * 通过字典数组来创建一个模型数组 + * @param keyValuesArray 字典数组(可以是NSDictionary、NSData、NSString) + * @return 模型数组 + */ ++ (NSMutableArray *)mj_objectArrayWithKeyValuesArray:(id)keyValuesArray; + +/** + * 通过字典数组来创建一个模型数组 + * @param keyValuesArray 字典数组(可以是NSDictionary、NSData、NSString) + * @param context CoreData上下文 + * @return 模型数组 + */ ++ (NSMutableArray *)mj_objectArrayWithKeyValuesArray:(id)keyValuesArray context:(NSManagedObjectContext *)context; + +/** + * 通过plist来创建一个模型数组 + * @param filename 文件名(仅限于mainBundle中的文件) + * @return 模型数组 + */ ++ (NSMutableArray *)mj_objectArrayWithFilename:(NSString *)filename; + +/** + * 通过plist来创建一个模型数组 + * @param file 文件全路径 + * @return 模型数组 + */ ++ (NSMutableArray *)mj_objectArrayWithFile:(NSString *)file; + +#pragma mark - 转换为JSON +/** + * 转换为JSON Data + */ +- (NSData *)mj_JSONData; +/** + * 转换为字典或者数组 + */ +- (id)mj_JSONObject; +/** + * 转换为JSON 字符串 + */ +- (NSString *)mj_JSONString; +@end + +@interface NSObject (MJKeyValueDeprecated_v_2_5_16) +- (instancetype)setKeyValues:(id)keyValue MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); +- (instancetype)setKeyValues:(id)keyValues error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); +- (instancetype)setKeyValues:(id)keyValues context:(NSManagedObjectContext *)context MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); +- (instancetype)setKeyValues:(id)keyValues context:(NSManagedObjectContext *)context error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (void)referenceReplacedKeyWhenCreatingKeyValues:(BOOL)reference MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); +- (NSMutableDictionary *)keyValues MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); +- (NSMutableDictionary *)keyValuesWithError:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); +- (NSMutableDictionary *)keyValuesWithKeys:(NSArray *)keys MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); +- (NSMutableDictionary *)keyValuesWithKeys:(NSArray *)keys error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); +- (NSMutableDictionary *)keyValuesWithIgnoredKeys:(NSArray *)ignoredKeys MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); +- (NSMutableDictionary *)keyValuesWithIgnoredKeys:(NSArray *)ignoredKeys error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (NSMutableArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (NSMutableArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (NSMutableArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray keys:(NSArray *)keys MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (NSMutableArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray keys:(NSArray *)keys error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (NSMutableArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray ignoredKeys:(NSArray *)ignoredKeys MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (NSMutableArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray ignoredKeys:(NSArray *)ignoredKeys error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (instancetype)objectWithKeyValues:(id)keyValues MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (instancetype)objectWithKeyValues:(id)keyValues error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (instancetype)objectWithKeyValues:(id)keyValues context:(NSManagedObjectContext *)context MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (instancetype)objectWithKeyValues:(id)keyValues context:(NSManagedObjectContext *)context error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (instancetype)objectWithFilename:(NSString *)filename MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (instancetype)objectWithFilename:(NSString *)filename error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (instancetype)objectWithFile:(NSString *)file MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (instancetype)objectWithFile:(NSString *)file error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (NSMutableArray *)objectArrayWithKeyValuesArray:(id)keyValuesArray MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (NSMutableArray *)objectArrayWithKeyValuesArray:(id)keyValuesArray error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (NSMutableArray *)objectArrayWithKeyValuesArray:(id)keyValuesArray context:(NSManagedObjectContext *)context MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (NSMutableArray *)objectArrayWithKeyValuesArray:(id)keyValuesArray context:(NSManagedObjectContext *)context error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (NSMutableArray *)objectArrayWithFilename:(NSString *)filename MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (NSMutableArray *)objectArrayWithFilename:(NSString *)filename error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (NSMutableArray *)objectArrayWithFile:(NSString *)file MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (NSMutableArray *)objectArrayWithFile:(NSString *)file error:(NSError **)error MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); +- (NSData *)JSONData MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); +- (id)JSONObject MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); +- (NSString *)JSONString MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); +@end diff --git a/Ifish/controllers/HotBar/Lib/MJExtension/NSObject+MJKeyValue.m b/Ifish/controllers/HotBar/Lib/MJExtension/NSObject+MJKeyValue.m new file mode 100755 index 0000000..84fe982 --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/MJExtension/NSObject+MJKeyValue.m @@ -0,0 +1,709 @@ +// +// NSObject+MJKeyValue.m +// MJExtension +// +// Created by mj on 13-8-24. +// Copyright (c) 2013年 小码哥. All rights reserved. +// + +#import "NSObject+MJKeyValue.h" +#import "NSObject+MJProperty.h" +#import "NSString+MJExtension.h" +#import "MJProperty.h" +#import "MJPropertyType.h" +#import "MJExtensionConst.h" +#import "MJFoundation.h" +#import "NSString+MJExtension.h" +#import "NSObject+MJClass.h" + +@implementation NSObject (MJKeyValue) + +#pragma mark - 错误 +static const char MJErrorKey = '\0'; ++ (NSError *)mj_error +{ + return objc_getAssociatedObject(self, &MJErrorKey); +} + ++ (void)setMj_error:(NSError *)error +{ + objc_setAssociatedObject(self, &MJErrorKey, error, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +#pragma mark - 模型 -> 字典时的参考 +/** 模型转字典时,字典的key是否参考replacedKeyFromPropertyName等方法(父类设置了,子类也会继承下来) */ +static const char MJReferenceReplacedKeyWhenCreatingKeyValuesKey = '\0'; + ++ (void)mj_referenceReplacedKeyWhenCreatingKeyValues:(BOOL)reference +{ + objc_setAssociatedObject(self, &MJReferenceReplacedKeyWhenCreatingKeyValuesKey, @(reference), OBJC_ASSOCIATION_ASSIGN); +} + ++ (BOOL)mj_isReferenceReplacedKeyWhenCreatingKeyValues +{ + __block id value = objc_getAssociatedObject(self, &MJReferenceReplacedKeyWhenCreatingKeyValuesKey); + if (!value) { + [self mj_enumerateAllClasses:^(__unsafe_unretained Class c, BOOL *stop) { + value = objc_getAssociatedObject(c, &MJReferenceReplacedKeyWhenCreatingKeyValuesKey); + + if (value) *stop = YES; + }]; + } + return [value boolValue]; +} + +#pragma mark - --常用的对象-- +static NSNumberFormatter *numberFormatter_; ++ (void)load +{ + numberFormatter_ = [[NSNumberFormatter alloc] init]; + + // 默认设置 + [self mj_referenceReplacedKeyWhenCreatingKeyValues:YES]; +} + +#pragma mark - --公共方法-- +#pragma mark - 字典 -> 模型 +- (instancetype)mj_setKeyValues:(id)keyValues +{ + return [self mj_setKeyValues:keyValues context:nil]; +} + +/** + 核心代码: + */ +- (instancetype)mj_setKeyValues:(id)keyValues context:(NSManagedObjectContext *)context +{ + // 获得JSON对象 + keyValues = [keyValues mj_JSONObject]; + + MJExtensionAssertError([keyValues isKindOfClass:[NSDictionary class]], self, [self class], @"keyValues参数不是一个字典"); + + Class clazz = [self class]; + NSArray *allowedPropertyNames = [clazz mj_totalAllowedPropertyNames]; + NSArray *ignoredPropertyNames = [clazz mj_totalIgnoredPropertyNames]; + + //通过封装的方法回调一个通过运行时编写的,用于返回属性列表的方法。 + [clazz mj_enumerateProperties:^(MJProperty *property, BOOL *stop) { + @try { + // 0.检测是否被忽略 + if (allowedPropertyNames.count && ![allowedPropertyNames containsObject:property.name]) return; + if ([ignoredPropertyNames containsObject:property.name]) return; + + // 1.取出属性值 + id value; + NSArray *propertyKeyses = [property propertyKeysForClass:clazz]; + for (NSArray *propertyKeys in propertyKeyses) { + value = keyValues; + for (MJPropertyKey *propertyKey in propertyKeys) { + value = [propertyKey valueInObject:value]; + } + if (value) break; + } + + // 值的过滤 + id newValue = [clazz mj_getNewValueFromObject:self oldValue:value property:property]; + if (newValue != value) { // 有过滤后的新值 + [property setValue:newValue forObject:self]; + return; + } + + // 如果没有值,就直接返回 + if (!value || value == [NSNull null]) return; + + // 2.复杂处理 + MJPropertyType *type = property.type; + Class propertyClass = type.typeClass; + Class objectClass = [property objectClassInArrayForClass:[self class]]; + + // 不可变 -> 可变处理 + if (propertyClass == [NSMutableArray class] && [value isKindOfClass:[NSArray class]]) { + value = [NSMutableArray arrayWithArray:value]; + } else if (propertyClass == [NSMutableDictionary class] && [value isKindOfClass:[NSDictionary class]]) { + value = [NSMutableDictionary dictionaryWithDictionary:value]; + } else if (propertyClass == [NSMutableString class] && [value isKindOfClass:[NSString class]]) { + value = [NSMutableString stringWithString:value]; + } else if (propertyClass == [NSMutableData class] && [value isKindOfClass:[NSData class]]) { + value = [NSMutableData dataWithData:value]; + } + + if (!type.isFromFoundation && propertyClass) { // 模型属性 + value = [propertyClass mj_objectWithKeyValues:value context:context]; + } else if (objectClass) { + if (objectClass == [NSURL class] && [value isKindOfClass:[NSArray class]]) { + // string array -> url array + NSMutableArray *urlArray = [NSMutableArray array]; + for (NSString *string in value) { + if (![string isKindOfClass:[NSString class]]) continue; + [urlArray addObject:string.mj_url]; + } + value = urlArray; + } else { // 字典数组-->模型数组 + value = [objectClass mj_objectArrayWithKeyValuesArray:value context:context]; + } + } else { + if (propertyClass == [NSString class]) { + if ([value isKindOfClass:[NSNumber class]]) { + // NSNumber -> NSString + value = [value description]; + } else if ([value isKindOfClass:[NSURL class]]) { + // NSURL -> NSString + value = [value absoluteString]; + } + } else if ([value isKindOfClass:[NSString class]]) { + if (propertyClass == [NSURL class]) { + // NSString -> NSURL + // 字符串转码 + value = [value mj_url]; + } else if (type.isNumberType) { + NSString *oldValue = value; + + // NSString -> NSNumber + if (type.typeClass == [NSDecimalNumber class]) { + value = [NSDecimalNumber decimalNumberWithString:oldValue]; + } else { + value = [numberFormatter_ numberFromString:oldValue]; + } + + // 如果是BOOL + if (type.isBoolType) { + // 字符串转BOOL(字符串没有charValue方法) + // 系统会调用字符串的charValue转为BOOL类型 + NSString *lower = [oldValue lowercaseString]; + if ([lower isEqualToString:@"yes"] || [lower isEqualToString:@"true"]) { + value = @YES; + } else if ([lower isEqualToString:@"no"] || [lower isEqualToString:@"false"]) { + value = @NO; + } + } + } + } + + // value和property类型不匹配 + if (propertyClass && ![value isKindOfClass:propertyClass]) { + value = nil; + } + } + + // 3.赋值 + [property setValue:value forObject:self]; + } @catch (NSException *exception) { + MJExtensionBuildError([self class], exception.reason); + MJExtensionLog(@"%@", exception); + } + }]; + + // 转换完毕 + if ([self respondsToSelector:@selector(mj_keyValuesDidFinishConvertingToObject)]) { + [self mj_keyValuesDidFinishConvertingToObject]; + } + return self; +} + ++ (instancetype)mj_objectWithKeyValues:(id)keyValues +{ + return [self mj_objectWithKeyValues:keyValues context:nil]; +} + ++ (instancetype)mj_objectWithKeyValues:(id)keyValues context:(NSManagedObjectContext *)context +{ + // 获得JSON对象 + keyValues = [keyValues mj_JSONObject]; + MJExtensionAssertError([keyValues isKindOfClass:[NSDictionary class]], nil, [self class], @"keyValues参数不是一个字典"); + + if ([self isSubclassOfClass:[NSManagedObject class]] && context) { + NSString *entityName = [NSStringFromClass(self) componentsSeparatedByString:@"."].lastObject; + return [[NSEntityDescription insertNewObjectForEntityForName:entityName inManagedObjectContext:context] mj_setKeyValues:keyValues context:context]; + } + return [[[self alloc] init] mj_setKeyValues:keyValues]; +} + ++ (instancetype)mj_objectWithFilename:(NSString *)filename +{ + MJExtensionAssertError(filename != nil, nil, [self class], @"filename参数为nil"); + + return [self mj_objectWithFile:[[NSBundle mainBundle] pathForResource:filename ofType:nil]]; +} + ++ (instancetype)mj_objectWithFile:(NSString *)file +{ + MJExtensionAssertError(file != nil, nil, [self class], @"file参数为nil"); + + return [self mj_objectWithKeyValues:[NSDictionary dictionaryWithContentsOfFile:file]]; +} + +#pragma mark - 字典数组 -> 模型数组 ++ (NSMutableArray *)mj_objectArrayWithKeyValuesArray:(NSArray *)keyValuesArray +{ + return [self mj_objectArrayWithKeyValuesArray:keyValuesArray context:nil]; +} + ++ (NSMutableArray *)mj_objectArrayWithKeyValuesArray:(id)keyValuesArray context:(NSManagedObjectContext *)context +{ + // 如果是JSON字符串 + keyValuesArray = [keyValuesArray mj_JSONObject]; + + // 1.判断真实性 + MJExtensionAssertError([keyValuesArray isKindOfClass:[NSArray class]], nil, [self class], @"keyValuesArray参数不是一个数组"); + + // 如果数组里面放的是NSString、NSNumber等数据 + if ([MJFoundation isClassFromFoundation:self]) return [NSMutableArray arrayWithArray:keyValuesArray]; + + + // 2.创建数组 + NSMutableArray *modelArray = [NSMutableArray array]; + + // 3.遍历 + for (NSDictionary *keyValues in keyValuesArray) { + if ([keyValues isKindOfClass:[NSArray class]]){ + [modelArray addObject:[self mj_objectArrayWithKeyValuesArray:keyValues context:context]]; + } else { + id model = [self mj_objectWithKeyValues:keyValues context:context]; + if (model) [modelArray addObject:model]; + } + } + + return modelArray; +} + ++ (NSMutableArray *)mj_objectArrayWithFilename:(NSString *)filename +{ + MJExtensionAssertError(filename != nil, nil, [self class], @"filename参数为nil"); + + return [self mj_objectArrayWithFile:[[NSBundle mainBundle] pathForResource:filename ofType:nil]]; +} + ++ (NSMutableArray *)mj_objectArrayWithFile:(NSString *)file +{ + MJExtensionAssertError(file != nil, nil, [self class], @"file参数为nil"); + + return [self mj_objectArrayWithKeyValuesArray:[NSArray arrayWithContentsOfFile:file]]; +} + +#pragma mark - 模型 -> 字典 +- (NSMutableDictionary *)mj_keyValues +{ + return [self mj_keyValuesWithKeys:nil ignoredKeys:nil]; +} + +- (NSMutableDictionary *)mj_keyValuesWithKeys:(NSArray *)keys +{ + return [self mj_keyValuesWithKeys:keys ignoredKeys:nil]; +} + +- (NSMutableDictionary *)mj_keyValuesWithIgnoredKeys:(NSArray *)ignoredKeys +{ + return [self mj_keyValuesWithKeys:nil ignoredKeys:ignoredKeys]; +} + +- (NSMutableDictionary *)mj_keyValuesWithKeys:(NSArray *)keys ignoredKeys:(NSArray *)ignoredKeys +{ + // 如果自己不是模型类, 那就返回自己 + MJExtensionAssertError(![MJFoundation isClassFromFoundation:[self class]], (NSMutableDictionary *)self, [self class], @"不是自定义的模型类") + + id keyValues = [NSMutableDictionary dictionary]; + + Class clazz = [self class]; + NSArray *allowedPropertyNames = [clazz mj_totalAllowedPropertyNames]; + NSArray *ignoredPropertyNames = [clazz mj_totalIgnoredPropertyNames]; + + [clazz mj_enumerateProperties:^(MJProperty *property, BOOL *stop) { + @try { + // 0.检测是否被忽略 + if (allowedPropertyNames.count && ![allowedPropertyNames containsObject:property.name]) return; + if ([ignoredPropertyNames containsObject:property.name]) return; + if (keys.count && ![keys containsObject:property.name]) return; + if ([ignoredKeys containsObject:property.name]) return; + + // 1.取出属性值 + id value = [property valueForObject:self]; + if (!value) return; + + // 2.如果是模型属性 + MJPropertyType *type = property.type; + Class propertyClass = type.typeClass; + if (!type.isFromFoundation && propertyClass) { + value = [value mj_keyValues]; + } else if ([value isKindOfClass:[NSArray class]]) { + // 3.处理数组里面有模型的情况 + value = [NSObject mj_keyValuesArrayWithObjectArray:value]; + } else if (propertyClass == [NSURL class]) { + value = [value absoluteString]; + } + + // 4.赋值 + if ([clazz mj_isReferenceReplacedKeyWhenCreatingKeyValues]) { + NSArray *propertyKeys = [[property propertyKeysForClass:clazz] firstObject]; + NSUInteger keyCount = propertyKeys.count; + // 创建字典 + __block id innerContainer = keyValues; + [propertyKeys enumerateObjectsUsingBlock:^(MJPropertyKey *propertyKey, NSUInteger idx, BOOL *stop) { + // 下一个属性 + MJPropertyKey *nextPropertyKey = nil; + if (idx != keyCount - 1) { + nextPropertyKey = propertyKeys[idx + 1]; + } + + if (nextPropertyKey) { // 不是最后一个key + // 当前propertyKey对应的字典或者数组 + id tempInnerContainer = [propertyKey valueInObject:innerContainer]; + if (tempInnerContainer == nil || [tempInnerContainer isKindOfClass:[NSNull class]]) { + if (nextPropertyKey.type == MJPropertyKeyTypeDictionary) { + tempInnerContainer = [NSMutableDictionary dictionary]; + } else { + tempInnerContainer = [NSMutableArray array]; + } + if (propertyKey.type == MJPropertyKeyTypeDictionary) { + innerContainer[propertyKey.name] = tempInnerContainer; + } else { + innerContainer[propertyKey.name.intValue] = tempInnerContainer; + } + } + + if ([tempInnerContainer isKindOfClass:[NSMutableArray class]]) { + NSMutableArray *tempInnerContainerArray = tempInnerContainer; + int index = nextPropertyKey.name.intValue; + while (tempInnerContainerArray.count < index + 1) { + [tempInnerContainerArray addObject:[NSNull null]]; + } + } + + innerContainer = tempInnerContainer; + } else { // 最后一个key + if (propertyKey.type == MJPropertyKeyTypeDictionary) { + innerContainer[propertyKey.name] = value; + } else { + innerContainer[propertyKey.name.intValue] = value; + } + } + }]; + } else { + keyValues[property.name] = value; + } + } @catch (NSException *exception) { + MJExtensionBuildError([self class], exception.reason); + MJExtensionLog(@"%@", exception); + } + }]; + + // 转换完毕 + if ([self respondsToSelector:@selector(mj_objectDidFinishConvertingToKeyValues)]) { + [self mj_objectDidFinishConvertingToKeyValues]; + } + + return keyValues; +} +#pragma mark - 模型数组 -> 字典数组 ++ (NSMutableArray *)mj_keyValuesArrayWithObjectArray:(NSArray *)objectArray +{ + return [self mj_keyValuesArrayWithObjectArray:objectArray keys:nil ignoredKeys:nil]; +} + ++ (NSMutableArray *)mj_keyValuesArrayWithObjectArray:(NSArray *)objectArray keys:(NSArray *)keys +{ + return [self mj_keyValuesArrayWithObjectArray:objectArray keys:keys ignoredKeys:nil]; +} + ++ (NSMutableArray *)mj_keyValuesArrayWithObjectArray:(NSArray *)objectArray ignoredKeys:(NSArray *)ignoredKeys +{ + return [self mj_keyValuesArrayWithObjectArray:objectArray keys:nil ignoredKeys:ignoredKeys]; +} + ++ (NSMutableArray *)mj_keyValuesArrayWithObjectArray:(NSArray *)objectArray keys:(NSArray *)keys ignoredKeys:(NSArray *)ignoredKeys +{ + // 0.判断真实性 + MJExtensionAssertError([objectArray isKindOfClass:[NSArray class]], nil, [self class], @"objectArray参数不是一个数组"); + + // 1.创建数组 + NSMutableArray *keyValuesArray = [NSMutableArray array]; + for (id object in objectArray) { + if (keys) { + [keyValuesArray addObject:[object mj_keyValuesWithKeys:keys]]; + } else { + [keyValuesArray addObject:[object mj_keyValuesWithIgnoredKeys:ignoredKeys]]; + } + } + return keyValuesArray; +} + +#pragma mark - 转换为JSON +- (NSData *)mj_JSONData +{ + if ([self isKindOfClass:[NSString class]]) { + return [((NSString *)self) dataUsingEncoding:NSUTF8StringEncoding]; + } else if ([self isKindOfClass:[NSData class]]) { + return (NSData *)self; + } + + return [NSJSONSerialization dataWithJSONObject:[self mj_JSONObject] options:kNilOptions error:nil]; +} + +- (id)mj_JSONObject +{ + if ([self isKindOfClass:[NSString class]]) { + return [NSJSONSerialization JSONObjectWithData:[((NSString *)self) dataUsingEncoding:NSUTF8StringEncoding] options:kNilOptions error:nil]; + } else if ([self isKindOfClass:[NSData class]]) { + return [NSJSONSerialization JSONObjectWithData:(NSData *)self options:kNilOptions error:nil]; + } + + return self.mj_keyValues; +} + +- (NSString *)mj_JSONString +{ + if ([self isKindOfClass:[NSString class]]) { + return (NSString *)self; + } else if ([self isKindOfClass:[NSData class]]) { + return [[NSString alloc] initWithData:(NSData *)self encoding:NSUTF8StringEncoding]; + } + + return [[NSString alloc] initWithData:[self mj_JSONData] encoding:NSUTF8StringEncoding]; +} +@end + +@implementation NSObject (MJKeyValueDeprecated_v_2_5_16) +- (instancetype)setKeyValues:(id)keyValues +{ + return [self mj_setKeyValues:keyValues]; +} + +- (instancetype)setKeyValues:(id)keyValues error:(NSError **)error +{ + id value = [self mj_setKeyValues:keyValues]; + if (error != NULL) { + *error = [self.class mj_error]; + } + return value; + +} + +- (instancetype)setKeyValues:(id)keyValues context:(NSManagedObjectContext *)context +{ + return [self mj_setKeyValues:keyValues context:context]; +} + +- (instancetype)setKeyValues:(id)keyValues context:(NSManagedObjectContext *)context error:(NSError **)error +{ + id value = [self mj_setKeyValues:keyValues context:context]; + if (error != NULL) { + *error = [self.class mj_error]; + } + return value; +} + ++ (void)referenceReplacedKeyWhenCreatingKeyValues:(BOOL)reference +{ + [self mj_referenceReplacedKeyWhenCreatingKeyValues:reference]; +} + +- (NSMutableDictionary *)keyValues +{ + return [self mj_keyValues]; +} + +- (NSMutableDictionary *)keyValuesWithError:(NSError **)error +{ + id value = [self mj_keyValues]; + if (error != NULL) { + *error = [self.class mj_error]; + } + return value; +} + +- (NSMutableDictionary *)keyValuesWithKeys:(NSArray *)keys +{ + return [self mj_keyValuesWithKeys:keys]; +} + +- (NSMutableDictionary *)keyValuesWithKeys:(NSArray *)keys error:(NSError **)error +{ + id value = [self mj_keyValuesWithKeys:keys]; + if (error != NULL) { + *error = [self.class mj_error]; + } + return value; +} + +- (NSMutableDictionary *)keyValuesWithIgnoredKeys:(NSArray *)ignoredKeys +{ + return [self mj_keyValuesWithIgnoredKeys:ignoredKeys]; +} + +- (NSMutableDictionary *)keyValuesWithIgnoredKeys:(NSArray *)ignoredKeys error:(NSError **)error +{ + id value = [self mj_keyValuesWithIgnoredKeys:ignoredKeys]; + if (error != NULL) { + *error = [self.class mj_error]; + } + return value; +} + ++ (NSMutableArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray +{ + return [self mj_keyValuesArrayWithObjectArray:objectArray]; +} + ++ (NSMutableArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray error:(NSError **)error +{ + id value = [self mj_keyValuesArrayWithObjectArray:objectArray]; + if (error != NULL) { + *error = [self mj_error]; + } + return value; +} + ++ (NSMutableArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray keys:(NSArray *)keys +{ + return [self mj_keyValuesArrayWithObjectArray:objectArray keys:keys]; +} + ++ (NSMutableArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray keys:(NSArray *)keys error:(NSError **)error +{ + id value = [self mj_keyValuesArrayWithObjectArray:objectArray keys:keys]; + if (error != NULL) { + *error = [self mj_error]; + } + return value; +} + ++ (NSMutableArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray ignoredKeys:(NSArray *)ignoredKeys +{ + return [self mj_keyValuesArrayWithObjectArray:objectArray ignoredKeys:ignoredKeys]; +} + ++ (NSMutableArray *)keyValuesArrayWithObjectArray:(NSArray *)objectArray ignoredKeys:(NSArray *)ignoredKeys error:(NSError **)error +{ + id value = [self mj_keyValuesArrayWithObjectArray:objectArray ignoredKeys:ignoredKeys]; + if (error != NULL) { + *error = [self mj_error]; + } + return value; +} + ++ (instancetype)objectWithKeyValues:(id)keyValues +{ + return [self mj_objectWithKeyValues:keyValues]; +} + ++ (instancetype)objectWithKeyValues:(id)keyValues error:(NSError **)error +{ + id value = [self mj_objectWithKeyValues:keyValues]; + if (error != NULL) { + *error = [self mj_error]; + } + return value; +} + ++ (instancetype)objectWithKeyValues:(id)keyValues context:(NSManagedObjectContext *)context +{ + return [self mj_objectWithKeyValues:keyValues context:context]; +} + ++ (instancetype)objectWithKeyValues:(id)keyValues context:(NSManagedObjectContext *)context error:(NSError **)error +{ + id value = [self mj_objectWithKeyValues:keyValues context:context]; + if (error != NULL) { + *error = [self mj_error]; + } + return value; +} + ++ (instancetype)objectWithFilename:(NSString *)filename +{ + return [self mj_objectWithFilename:filename]; +} + ++ (instancetype)objectWithFilename:(NSString *)filename error:(NSError **)error +{ + id value = [self mj_objectWithFilename:filename]; + if (error != NULL) { + *error = [self mj_error]; + } + return value; +} + ++ (instancetype)objectWithFile:(NSString *)file +{ + return [self mj_objectWithFile:file]; +} + ++ (instancetype)objectWithFile:(NSString *)file error:(NSError **)error +{ + id value = [self mj_objectWithFile:file]; + if (error != NULL) { + *error = [self mj_error]; + } + return value; +} + ++ (NSMutableArray *)objectArrayWithKeyValuesArray:(id)keyValuesArray +{ + return [self mj_objectArrayWithKeyValuesArray:keyValuesArray]; +} + ++ (NSMutableArray *)objectArrayWithKeyValuesArray:(id)keyValuesArray error:(NSError **)error +{ + id value = [self mj_objectArrayWithKeyValuesArray:keyValuesArray]; + if (error != NULL) { + *error = [self mj_error]; + } + return value; +} + ++ (NSMutableArray *)objectArrayWithKeyValuesArray:(id)keyValuesArray context:(NSManagedObjectContext *)context +{ + return [self mj_objectArrayWithKeyValuesArray:keyValuesArray context:context]; +} + ++ (NSMutableArray *)objectArrayWithKeyValuesArray:(id)keyValuesArray context:(NSManagedObjectContext *)context error:(NSError **)error +{ + id value = [self mj_objectArrayWithKeyValuesArray:keyValuesArray context:context]; + if (error != NULL) { + *error = [self mj_error]; + } + return value; +} + ++ (NSMutableArray *)objectArrayWithFilename:(NSString *)filename +{ + return [self mj_objectArrayWithFilename:filename]; +} + ++ (NSMutableArray *)objectArrayWithFilename:(NSString *)filename error:(NSError **)error +{ + id value = [self mj_objectArrayWithFilename:filename]; + if (error != NULL) { + *error = [self mj_error]; + } + return value; +} + ++ (NSMutableArray *)objectArrayWithFile:(NSString *)file +{ + return [self mj_objectArrayWithFile:file]; +} + ++ (NSMutableArray *)objectArrayWithFile:(NSString *)file error:(NSError **)error +{ + id value = [self mj_objectArrayWithFile:file]; + if (error != NULL) { + *error = [self mj_error]; + } + return value; +} + +- (NSData *)JSONData +{ + return [self mj_JSONData]; +} + +- (id)JSONObject +{ + return [self mj_JSONObject]; +} + +- (NSString *)JSONString +{ + return [self mj_JSONString]; +} +@end \ No newline at end of file diff --git a/Ifish/controllers/HotBar/Lib/MJExtension/NSObject+MJProperty.h b/Ifish/controllers/HotBar/Lib/MJExtension/NSObject+MJProperty.h new file mode 100644 index 0000000..e4e0ebb --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/MJExtension/NSObject+MJProperty.h @@ -0,0 +1,79 @@ +// +// NSObject+MJProperty.h +// MJExtensionExample +// +// Created by MJ Lee on 15/4/17. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import +#import "MJExtensionConst.h" + +@class MJProperty; + +/** + * 遍历成员变量用的block + * + * @param property 成员的包装对象 + * @param stop YES代表停止遍历,NO代表继续遍历 + */ +typedef void (^MJPropertiesEnumeration)(MJProperty *property, BOOL *stop); + +/** 将属性名换为其他key去字典中取值 */ +typedef NSDictionary * (^MJReplacedKeyFromPropertyName)(); +typedef id (^MJReplacedKeyFromPropertyName121)(NSString *propertyName); +/** 数组中需要转换的模型类 */ +typedef NSDictionary * (^MJObjectClassInArray)(); +/** 用于过滤字典中的值 */ +typedef id (^MJNewValueFromOldValue)(id object, id oldValue, MJProperty *property); + +/** + * 成员属性相关的扩展 + */ +@interface NSObject (MJProperty) +#pragma mark - 遍历 +/** + * 遍历所有的成员 + */ ++ (void)mj_enumerateProperties:(MJPropertiesEnumeration)enumeration; + +#pragma mark - 新值配置 +/** + * 用于过滤字典中的值 + * + * @param newValueFormOldValue 用于过滤字典中的值 + */ ++ (void)mj_setupNewValueFromOldValue:(MJNewValueFromOldValue)newValueFormOldValue; ++ (id)mj_getNewValueFromObject:(__unsafe_unretained id)object oldValue:(__unsafe_unretained id)oldValue property:(__unsafe_unretained MJProperty *)property; + +#pragma mark - key配置 +/** + * 将属性名换为其他key去字典中取值 + * + * @param replacedKeyFromPropertyName 将属性名换为其他key去字典中取值 + */ ++ (void)mj_setupReplacedKeyFromPropertyName:(MJReplacedKeyFromPropertyName)replacedKeyFromPropertyName; +/** + * 将属性名换为其他key去字典中取值 + * + * @param replacedKeyFromPropertyName121 将属性名换为其他key去字典中取值 + */ ++ (void)mj_setupReplacedKeyFromPropertyName121:(MJReplacedKeyFromPropertyName121)replacedKeyFromPropertyName121; + +#pragma mark - array model class配置 +/** + * 数组中需要转换的模型类 + * + * @param objectClassInArray 数组中需要转换的模型类 + */ ++ (void)mj_setupObjectClassInArray:(MJObjectClassInArray)objectClassInArray; +@end + +@interface NSObject (MJPropertyDeprecated_v_2_5_16) ++ (void)enumerateProperties:(MJPropertiesEnumeration)enumeration MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (void)setupNewValueFromOldValue:(MJNewValueFromOldValue)newValueFormOldValue MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (id)getNewValueFromObject:(__unsafe_unretained id)object oldValue:(__unsafe_unretained id)oldValue property:(__unsafe_unretained MJProperty *)property MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (void)setupReplacedKeyFromPropertyName:(MJReplacedKeyFromPropertyName)replacedKeyFromPropertyName MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (void)setupReplacedKeyFromPropertyName121:(MJReplacedKeyFromPropertyName121)replacedKeyFromPropertyName121 MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); ++ (void)setupObjectClassInArray:(MJObjectClassInArray)objectClassInArray MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); +@end \ No newline at end of file diff --git a/Ifish/controllers/HotBar/Lib/MJExtension/NSObject+MJProperty.m b/Ifish/controllers/HotBar/Lib/MJExtension/NSObject+MJProperty.m new file mode 100644 index 0000000..c9aff54 --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/MJExtension/NSObject+MJProperty.m @@ -0,0 +1,268 @@ +// +// NSObject+MJProperty.m +// MJExtensionExample +// +// Created by MJ Lee on 15/4/17. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "NSObject+MJProperty.h" +#import "NSObject+MJKeyValue.h" +#import "NSObject+MJCoding.h" +#import "NSObject+MJClass.h" +#import "MJProperty.h" +#import "MJFoundation.h" +#import + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wundeclared-selector" +#pragma clang diagnostic ignored "-Warc-performSelector-leaks" + +static const char MJReplacedKeyFromPropertyNameKey = '\0'; +static const char MJReplacedKeyFromPropertyName121Key = '\0'; +static const char MJNewValueFromOldValueKey = '\0'; +static const char MJObjectClassInArrayKey = '\0'; + +static const char MJCachedPropertiesKey = '\0'; + +@implementation NSObject (Property) + +static NSMutableDictionary *replacedKeyFromPropertyNameDict_; +static NSMutableDictionary *replacedKeyFromPropertyName121Dict_; +static NSMutableDictionary *newValueFromOldValueDict_; +static NSMutableDictionary *objectClassInArrayDict_; +static NSMutableDictionary *cachedPropertiesDict_; + ++ (void)load +{ + replacedKeyFromPropertyNameDict_ = [NSMutableDictionary dictionary]; + replacedKeyFromPropertyName121Dict_ = [NSMutableDictionary dictionary]; + newValueFromOldValueDict_ = [NSMutableDictionary dictionary]; + objectClassInArrayDict_ = [NSMutableDictionary dictionary]; + cachedPropertiesDict_ = [NSMutableDictionary dictionary]; +} + ++ (NSMutableDictionary *)dictForKey:(const void *)key +{ + @synchronized (self) { + if (key == &MJReplacedKeyFromPropertyNameKey) return replacedKeyFromPropertyNameDict_; + if (key == &MJReplacedKeyFromPropertyName121Key) return replacedKeyFromPropertyName121Dict_; + if (key == &MJNewValueFromOldValueKey) return newValueFromOldValueDict_; + if (key == &MJObjectClassInArrayKey) return objectClassInArrayDict_; + if (key == &MJCachedPropertiesKey) return cachedPropertiesDict_; + return nil; + } +} + +#pragma mark - --私有方法-- ++ (id)propertyKey:(NSString *)propertyName +{ + MJExtensionAssertParamNotNil2(propertyName, nil); + + __block id key = nil; + // 查看有没有需要替换的key + if ([self respondsToSelector:@selector(mj_replacedKeyFromPropertyName121:)]) { + key = [self mj_replacedKeyFromPropertyName121:propertyName]; + } + // 兼容旧版本 + if ([self respondsToSelector:@selector(replacedKeyFromPropertyName121:)]) { + key = [self performSelector:@selector(replacedKeyFromPropertyName121) withObject:propertyName]; + } + + // 调用block + if (!key) { + [self mj_enumerateAllClasses:^(__unsafe_unretained Class c, BOOL *stop) { + MJReplacedKeyFromPropertyName121 block = objc_getAssociatedObject(c, &MJReplacedKeyFromPropertyName121Key); + if (block) { + key = block(propertyName); + } + if (key) *stop = YES; + }]; + } + + // 查看有没有需要替换的key + if ((!key || [key isEqual:propertyName]) && [self respondsToSelector:@selector(mj_replacedKeyFromPropertyName)]) { + key = [self mj_replacedKeyFromPropertyName][propertyName]; + } + // 兼容旧版本 + if ((!key || [key isEqual:propertyName]) && [self respondsToSelector:@selector(replacedKeyFromPropertyName)]) { + key = [self performSelector:@selector(replacedKeyFromPropertyName)][propertyName]; + } + + if (!key || [key isEqual:propertyName]) { + [self mj_enumerateAllClasses:^(__unsafe_unretained Class c, BOOL *stop) { + NSDictionary *dict = objc_getAssociatedObject(c, &MJReplacedKeyFromPropertyNameKey); + if (dict) { + key = dict[propertyName]; + } + if (key && ![key isEqual:propertyName]) *stop = YES; + }]; + } + + // 2.用属性名作为key + if (!key) key = propertyName; + + return key; +} + ++ (Class)propertyObjectClassInArray:(NSString *)propertyName +{ + __block id clazz = nil; + if ([self respondsToSelector:@selector(mj_objectClassInArray)]) { + clazz = [self mj_objectClassInArray][propertyName]; + } + // 兼容旧版本 + if ([self respondsToSelector:@selector(objectClassInArray)]) { + clazz = [self performSelector:@selector(objectClassInArray)][propertyName]; + } + + if (!clazz) { + [self mj_enumerateAllClasses:^(__unsafe_unretained Class c, BOOL *stop) { + NSDictionary *dict = objc_getAssociatedObject(c, &MJObjectClassInArrayKey); + if (dict) { + clazz = dict[propertyName]; + } + if (clazz) *stop = YES; + }]; + } + + // 如果是NSString类型 + if ([clazz isKindOfClass:[NSString class]]) { + clazz = NSClassFromString(clazz); + } + return clazz; +} + +#pragma mark - --公共方法-- ++ (void)mj_enumerateProperties:(MJPropertiesEnumeration)enumeration +{ + // 获得成员变量 + NSArray *cachedProperties = [self properties]; + + // 遍历成员变量 + BOOL stop = NO; + for (MJProperty *property in cachedProperties) { + enumeration(property, &stop); + if (stop) break; + } +} + +#pragma mark - 公共方法 ++ (NSMutableArray *)properties +{ + NSMutableArray *cachedProperties = [self dictForKey:&MJCachedPropertiesKey][NSStringFromClass(self)]; + + if (cachedProperties == nil) { + cachedProperties = [NSMutableArray array]; + + [self mj_enumerateClasses:^(__unsafe_unretained Class c, BOOL *stop) { + // 1.获得所有的成员变量 + unsigned int outCount = 0; + objc_property_t *properties = class_copyPropertyList(c, &outCount); + + // 2.遍历每一个成员变量 + for (unsigned int i = 0; i +#import "MJExtensionConst.h" + +@interface NSString (MJExtension) +/** + * 驼峰转下划线(loveYou -> love_you) + */ +- (NSString *)mj_underlineFromCamel; +/** + * 下划线转驼峰(love_you -> loveYou) + */ +- (NSString *)mj_camelFromUnderline; +/** + * 首字母变大写 + */ +- (NSString *)mj_firstCharUpper; +/** + * 首字母变小写 + */ +- (NSString *)mj_firstCharLower; + +- (BOOL)mj_isPureInt; + +- (NSURL *)mj_url; +@end + +@interface NSString (MJExtensionDeprecated_v_2_5_16) +- (NSString *)underlineFromCamel MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); +- (NSString *)camelFromUnderline MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); +- (NSString *)firstCharUpper MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); +- (NSString *)firstCharLower MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); +- (BOOL)isPureInt MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); +- (NSURL *)url MJExtensionDeprecated("请在方法名前面加上mj_前缀,使用mj_***"); +@end diff --git a/Ifish/controllers/HotBar/Lib/MJExtension/NSString+MJExtension.m b/Ifish/controllers/HotBar/Lib/MJExtension/NSString+MJExtension.m new file mode 100644 index 0000000..569c310 --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/MJExtension/NSString+MJExtension.m @@ -0,0 +1,112 @@ +// +// NSString+MJExtension.m +// MJExtensionExample +// +// Created by MJ Lee on 15/6/7. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "NSString+MJExtension.h" + +@implementation NSString (MJExtension) +- (NSString *)mj_underlineFromCamel +{ + if (self.length == 0) return self; + NSMutableString *string = [NSMutableString string]; + for (NSUInteger i = 0; i= 2) [string appendString:[cmp substringFromIndex:1]]; + } else { + [string appendString:cmp]; + } + } + return string; +} + +- (NSString *)mj_firstCharLower +{ + if (self.length == 0) return self; + NSMutableString *string = [NSMutableString string]; + [string appendString:[NSString stringWithFormat:@"%c", [self characterAtIndex:0]].lowercaseString]; + if (self.length >= 2) [string appendString:[self substringFromIndex:1]]; + return string; +} + +- (NSString *)mj_firstCharUpper +{ + if (self.length == 0) return self; + NSMutableString *string = [NSMutableString string]; + [string appendString:[NSString stringWithFormat:@"%c", [self characterAtIndex:0]].uppercaseString]; + if (self.length >= 2) [string appendString:[self substringFromIndex:1]]; + return string; +} + +- (BOOL)mj_isPureInt +{ + NSScanner *scan = [NSScanner scannerWithString:self]; + int val; + return [scan scanInt:&val] && [scan isAtEnd]; +} + +- (NSURL *)mj_url +{ +// [self stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet characterSetWithCharactersInString:@"!$&'()*+,-./:;=?@_~%#[]"]]; +#pragma clang diagnostic push +#pragma clang diagnostic ignored"-Wdeprecated-declarations" + return [NSURL URLWithString:(NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)self, (CFStringRef)@"!$&'()*+,-./:;=?@_~%#[]", NULL,kCFStringEncodingUTF8))]; +#pragma clang diagnostic pop +} +@end + +@implementation NSString (MJExtensionDeprecated_v_2_5_16) +- (NSString *)underlineFromCamel +{ + return self.mj_underlineFromCamel; +} + +- (NSString *)camelFromUnderline +{ + return self.mj_camelFromUnderline; +} + +- (NSString *)firstCharLower +{ + return self.mj_firstCharLower; +} + +- (NSString *)firstCharUpper +{ + return self.mj_firstCharUpper; +} + +- (BOOL)isPureInt +{ + return self.mj_isPureInt; +} + +- (NSURL *)url +{ + return self.mj_url; +} +@end diff --git a/Ifish/controllers/HotBar/Lib/PNChart/PNBar.h b/Ifish/controllers/HotBar/Lib/PNChart/PNBar.h new file mode 100755 index 0000000..68e6b0b --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/PNChart/PNBar.h @@ -0,0 +1,37 @@ +// +// PNBar.h +// PNChartDemo +// +// Created by kevin on 11/7/13. +// Copyright (c) 2013年 kevinzhow. All rights reserved. +// + +#import +#import + +@interface PNBar : UIView + + +- (void)rollBack; + +@property (nonatomic) float grade; +@property (nonatomic) float maxDivisor; + +@property (nonatomic) CAShapeLayer *chartLine; +@property (nonatomic) UIColor *barColor; +@property (nonatomic) UIColor *barColorGradientStart; +@property (nonatomic) CGFloat barRadius; +@property (nonatomic) CAShapeLayer *gradientMask; + +@property (nonatomic) CAShapeLayer *gradeLayer; +@property (nonatomic) CATextLayer* textLayer; + +/** Text color for all bars in the chart. */ +@property (nonatomic) UIColor * labelTextColor; + +@property (nonatomic, assign) BOOL isNegative; //!< 是否是负数 +@property (nonatomic, assign) BOOL isShowNumber; //!< 是否显示numbers + +/** Display the bar with or without animation. Default is YES. **/ +@property (nonatomic) BOOL displayAnimated; +@end diff --git a/Ifish/controllers/HotBar/Lib/PNChart/PNBar.m b/Ifish/controllers/HotBar/Lib/PNChart/PNBar.m new file mode 100755 index 0000000..8ea5fc9 --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/PNChart/PNBar.m @@ -0,0 +1,288 @@ +// +// PNBar.m +// PNChartDemo +// +// Created by kevin on 11/7/13. +// Copyright (c) 2013年 kevinzhow. All rights reserved. +// + +#import "PNBar.h" +#import "PNColor.h" +#import + +@interface PNBar () + +@property (nonatomic) float copyGrade; + +@end + +@implementation PNBar + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + + if (self) { + _chartLine = [CAShapeLayer layer]; + _chartLine.lineCap = kCALineCapButt; + _chartLine.fillColor = [[UIColor whiteColor] CGColor]; + _chartLine.lineWidth = self.frame.size.width; + _chartLine.strokeEnd = 0.0; + self.clipsToBounds = YES; + [self.layer addSublayer:_chartLine]; + self.barRadius = 2.0; + } + + return self; +} + +-(void)setBarRadius:(CGFloat)barRadius +{ + _barRadius = barRadius; + self.layer.cornerRadius = _barRadius; +} + + +- (void)setGrade:(float)grade +{ + _copyGrade = grade; + CGFloat startPosY = (1 - grade) * self.frame.size.height; + + UIBezierPath *progressline = [UIBezierPath bezierPath]; + + [progressline moveToPoint:CGPointMake(self.frame.size.width / 2.0, self.frame.size.height)]; + [progressline addLineToPoint:CGPointMake(self.frame.size.width / 2.0, startPosY)]; + + [progressline setLineWidth:1.0]; + [progressline setLineCapStyle:kCGLineCapSquare]; + [self addAnimationIfNeededWithProgressLine:progressline]; + + + if (_barColor) { + _chartLine.strokeColor = [_barColor CGColor]; + } + else { + _chartLine.strokeColor = [PNGreen CGColor]; + } + + if (_grade) { + + _chartLine.path = progressline.CGPath; + + if (_barColorGradientStart) { + + // Add gradient + self.gradientMask.path = progressline.CGPath; + + CABasicAnimation* opacityAnimation = [self fadeAnimation]; + [self.textLayer addAnimation:opacityAnimation forKey:nil]; + + } + + }else{ + _chartLine.strokeEnd = 1.0; + + _chartLine.path = progressline.CGPath; + // Check if user wants to add a gradient from the start color to the bar color + if (_barColorGradientStart) { + + // Add gradient + self.gradientMask = [CAShapeLayer layer]; + self.gradientMask.fillColor = [[UIColor clearColor] CGColor]; + self.gradientMask.strokeColor = [[UIColor blackColor] CGColor]; + self.gradientMask.lineWidth = self.frame.size.width; + self.gradientMask.frame = CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height); + self.gradientMask.path = progressline.CGPath; + + CAGradientLayer *gradientLayer = [CAGradientLayer layer]; + gradientLayer.startPoint = CGPointMake(0.0,0.0); + gradientLayer.endPoint = CGPointMake(1.0 ,0.0); + gradientLayer.frame = CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height); + UIColor *middleColor = [UIColor colorWithWhite:255/255 alpha:0.8]; + NSArray *colors = @[ + (__bridge id)self.barColor.CGColor, + (__bridge id)middleColor.CGColor, + (__bridge id)self.barColor.CGColor + ]; + gradientLayer.colors = colors; + + [gradientLayer setMask:self.gradientMask]; + + [_chartLine addSublayer:gradientLayer]; + + self.gradientMask.strokeEnd = 1.0; + + CABasicAnimation* opacityAnimation = [self fadeAnimation]; + [self.textLayer addAnimation:opacityAnimation forKey:nil]; + } + } + + _grade = grade; + +} + + +- (void)rollBack +{ + [UIView animateWithDuration:0.3 delay:0.0 options:UIViewAnimationOptionCurveEaseOut animations: ^{ + _chartLine.strokeColor = [UIColor clearColor].CGColor; + } completion:nil]; +} + +- (void)setBarColorGradientStart:(UIColor *)barColorGradientStart +{ + // Set gradient color, remove any existing sublayer first + for (CALayer *sublayer in [_chartLine sublayers]) { + [sublayer removeFromSuperlayer]; + } + _barColorGradientStart = barColorGradientStart; + + [self setGrade:_grade]; + +} + +// Only override drawRect: if you perform custom drawing. +// An empty implementation adversely affects performance during animation. +- (void)drawRect:(CGRect)rect +{ + CGContextRef context = UIGraphicsGetCurrentContext(); + + CGContextSetFillColorWithColor(context, self.backgroundColor.CGColor); + CGContextFillRect(context, rect); +} + + +// add number display on the top of bar +-(CGPathRef)gradePath:(CGRect)rect +{ + return nil; +} + +-(CATextLayer*)textLayer +{ + if (!_textLayer) { + _textLayer = [[CATextLayer alloc]init]; + [_textLayer setString:@"0"]; + [_textLayer setAlignmentMode:kCAAlignmentCenter]; + [_textLayer setForegroundColor:[_labelTextColor CGColor]]; + _textLayer.hidden = YES; + + } + + return _textLayer; +} + +- (void) setLabelTextColor:(UIColor *)labelTextColor { + _labelTextColor = labelTextColor; + [_textLayer setForegroundColor:[_labelTextColor CGColor]]; +} + +-(void)setGradeFrame:(CGFloat)grade startPosY:(CGFloat)startPosY +{ + CGFloat textheigt = self.bounds.size.height*self.grade; + + CGFloat topSpace = self.bounds.size.height * (1-self.grade); + CGFloat textWidth = self.bounds.size.width; + + [_chartLine addSublayer:self.textLayer]; + [self.textLayer setFontSize:18.0]; + + [self.textLayer setString:[[NSString alloc]initWithFormat:@"%0.f",grade*self.maxDivisor]]; + + CGSize size = CGSizeMake(320,2000); //设置一个行高上限 + NSDictionary *attributes = @{NSFontAttributeName:[UIFont systemFontOfSize:18.0]}; + size = [self.textLayer.string boundingRectWithSize:size options:NSStringDrawingUsesLineFragmentOrigin attributes:attributes context:nil].size; + float verticalY ; + + if (size.height>=textheigt) { + + verticalY = topSpace - size.height; + } else { + verticalY = topSpace + (textheigt-size.height)/2.0; + } + + [self.textLayer setFrame:CGRectMake((textWidth-size.width)/2.0,verticalY, size.width,size.height)]; + self.textLayer.contentsScale = [UIScreen mainScreen].scale; + +} + +- (void)setIsShowNumber:(BOOL)isShowNumber{ + if (isShowNumber) { + self.textLayer.hidden = NO; + [self setGradeFrame:_copyGrade startPosY:0]; + }else{ + self.textLayer.hidden = YES; + } +} +- (void)setIsNegative:(BOOL)isNegative{ + if (isNegative) { + [self.textLayer setString:[[NSString alloc]initWithFormat:@"- %1.f",_grade*self.maxDivisor]]; + + CGSize size = CGSizeMake(320,2000); //设置一个行高上限 + NSDictionary *attributes = @{NSFontAttributeName:[UIFont systemFontOfSize:18.0]}; + size = [self.textLayer.string boundingRectWithSize:size options:NSStringDrawingUsesLineFragmentOrigin attributes:attributes context:nil].size; + CGRect frame = self.textLayer.frame; + frame.origin.x = (self.bounds.size.width - size.width)/2.0; + frame.size = size; + self.textLayer.frame = frame; + + [self addRotationAnimationIfNeeded]; + } +} + +-(CABasicAnimation*)fadeAnimation +{ + CABasicAnimation* fadeAnimation = nil; + if (self.displayAnimated) { + fadeAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"]; + fadeAnimation.fromValue = [NSNumber numberWithFloat:0.0]; + fadeAnimation.toValue = [NSNumber numberWithFloat:1.0]; + fadeAnimation.duration = 2.0; + } + return fadeAnimation; +} + +-(void)addAnimationIfNeededWithProgressLine:(UIBezierPath *)progressline +{ + if (self.displayAnimated) { + CABasicAnimation *pathAnimation = nil; + + if (_grade) { + pathAnimation = [CABasicAnimation animationWithKeyPath:@"path"]; + pathAnimation.fromValue = (id)_chartLine.path; + pathAnimation.toValue = (id)[progressline CGPath]; + pathAnimation.duration = 0.5f; + pathAnimation.autoreverses = NO; + pathAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; + [_chartLine addAnimation:pathAnimation forKey:@"animationKey"]; + } + else { + pathAnimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"]; + pathAnimation.duration = 1.0; + pathAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; + pathAnimation.fromValue = @0.0f; + pathAnimation.toValue = @1.0f; + [_chartLine addAnimation:pathAnimation forKey:@"strokeEndAnimation"]; + } + + [self.gradientMask addAnimation:pathAnimation forKey:@"animationKey"]; + } +} + +- (void)addRotationAnimationIfNeeded +{ + if (self.displayAnimated) { + CABasicAnimation* rotationAnimation; + rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; + rotationAnimation.toValue = [NSNumber numberWithFloat: M_PI]; + [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; + rotationAnimation.duration = 0.1; + rotationAnimation.repeatCount = 0;//你可以设置到最大的整数值 + rotationAnimation.cumulative = NO; + rotationAnimation.removedOnCompletion = NO; + rotationAnimation.fillMode = kCAFillModeForwards; + [self.textLayer addAnimation:rotationAnimation forKey:@"Rotation"]; + } +} + +@end diff --git a/Ifish/controllers/HotBar/Lib/PNChart/PNBarChart.h b/Ifish/controllers/HotBar/Lib/PNChart/PNBarChart.h new file mode 100755 index 0000000..e628c08 --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/PNChart/PNBarChart.h @@ -0,0 +1,123 @@ +// +// PNBarChart.h +// PNChartDemo +// +// Created by kevin on 11/7/13. +// Copyright (c) 2013年 kevinzhow. All rights reserved. +// + +#import +#import "PNGenericChart.h" +#import "PNChartDelegate.h" +#import "PNBar.h" + +#define kXLabelMargin 15 +#define kYLabelMargin 15 +#define kYLabelHeight 11 +#define kXLabelHeight 20 + +typedef NSString *(^PNYLabelFormatter)(CGFloat yLabelValue); + +@interface PNBarChart : PNGenericChart + +/** + * Draws the chart in an animated fashion. + */ +- (void)strokeChart; + +@property (nonatomic) NSArray *xLabels; +@property (nonatomic) NSArray *yLabels; +@property (nonatomic) NSArray *yValues; + +@property (nonatomic) NSMutableArray * bars; + +@property (nonatomic) CGFloat xLabelWidth; +@property (nonatomic) float yValueMax; +@property (nonatomic) UIColor *strokeColor; +@property (nonatomic) NSArray *strokeColors; + + +/** Update Values. */ +- (void)updateChartData:(NSArray *)data; + +/** Changes chart margin. */ +@property (nonatomic) CGFloat yChartLabelWidth; + +/** Formats the ylabel text. */ +@property (copy) PNYLabelFormatter yLabelFormatter; + +/** Prefix to y label values, none if unset. */ +@property (nonatomic) NSString *yLabelPrefix; + +/** Suffix to y label values, none if unset. */ +@property (nonatomic) NSString *yLabelSuffix; + +@property (nonatomic) CGFloat chartMarginLeft; +@property (nonatomic) CGFloat chartMarginRight; +@property (nonatomic) CGFloat chartMarginTop; +@property (nonatomic) CGFloat chartMarginBottom; + +/** Controls whether labels should be displayed. */ +@property (nonatomic) BOOL showLabel; + +/** Controls whether the chart border line should be displayed. */ +@property (nonatomic) BOOL showChartBorder; + +@property (nonatomic) UIColor *chartBorderColor; + +/** Controls whether the chart Horizontal separator should be displayed. */ +@property (nonatomic, assign) BOOL showLevelLine; + +/** Chart bottom border, co-linear with the x-axis. */ +@property (nonatomic) CAShapeLayer * chartBottomLine; + +/** Chart bottom border, level separator-linear with the x-axis. */ +@property (nonatomic) CAShapeLayer * chartLevelLine; + +/** Chart left border, co-linear with the y-axis. */ +@property (nonatomic) CAShapeLayer * chartLeftLine; + +/** Corner radius for all bars in the chart. */ +@property (nonatomic) CGFloat barRadius; + +/** Width of all bars in the chart. */ +@property (nonatomic) CGFloat barWidth; + +@property (nonatomic) CGFloat labelMarginTop; + +/** Background color of all bars in the chart. */ +@property (nonatomic) UIColor * barBackgroundColor; + +/** Text color for all bars in the chart. */ +@property (nonatomic) UIColor * labelTextColor; + +/** Font for all bars in the chart. */ +@property (nonatomic) UIFont * labelFont; + +/** How many labels on the x-axis to skip in between displaying labels. */ +@property (nonatomic) NSInteger xLabelSkip; + +/** How many labels on the y-axis to skip in between displaying labels. */ +@property (nonatomic) NSInteger yLabelSum; + +/** The maximum for the range of values to display on the y-axis. */ +@property (nonatomic) CGFloat yMaxValue; + +/** The minimum for the range of values to display on the y-axis. */ +@property (nonatomic) CGFloat yMinValue; + +/** Controls whether each bar should have a gradient fill. */ +@property (nonatomic) UIColor *barColorGradientStart; + +/** Controls whether text for x-axis be straight or rotate 45 degree. */ +@property (nonatomic) BOOL rotateForXAxisText; + +@property (nonatomic, weak) id delegate; + +/**whether show gradient bar*/ +@property (nonatomic, assign) BOOL isGradientShow; + +/** whether show numbers*/ +@property (nonatomic, assign) BOOL isShowNumbers; + +@end diff --git a/Ifish/controllers/HotBar/Lib/PNChart/PNBarChart.m b/Ifish/controllers/HotBar/Lib/PNChart/PNBarChart.m new file mode 100755 index 0000000..50e035c --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/PNChart/PNBarChart.m @@ -0,0 +1,459 @@ +// +// PNBarChart.m +// PNChartDemo +// +// Created by kevin on 11/7/13. +// Copyright (c) 2013年 kevinzhow. All rights reserved. +// + +#import "PNBarChart.h" +#import "PNColor.h" +#import "PNChartLabel.h" + +@interface PNBarChart () { + NSMutableArray *_xChartLabels; + NSMutableArray *_yChartLabels; +} + +- (UIColor *)barColorAtIndex:(NSUInteger)index; + +@end + +@implementation PNBarChart + +- (id)initWithCoder:(NSCoder *)aDecoder +{ + self = [super initWithCoder:aDecoder]; + + if (self) { + [self setupDefaultValues]; + } + return self; +} + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + + if (self) { + [self setupDefaultValues]; + } + + return self; +} + +- (void)setupDefaultValues +{ + [super setupDefaultValues]; + self.backgroundColor = [UIColor whiteColor]; + self.clipsToBounds = YES; + _showLabel = YES; + _barBackgroundColor = PNLightGrey; + _labelTextColor = [UIColor grayColor]; + _labelFont = [UIFont systemFontOfSize:11.0f]; + _xChartLabels = [NSMutableArray array]; + _yChartLabels = [NSMutableArray array]; + _bars = [NSMutableArray array]; + _xLabelSkip = 1; + _yLabelSum = 4; + _labelMarginTop = 2; + _chartMarginLeft = 25.0; + _chartMarginRight = 25.0; + _chartMarginTop = 25.0; + _chartMarginBottom = 25.0; + _barRadius = 2.0; + _showChartBorder = NO; + _chartBorderColor = PNLightGrey; + _showLevelLine = NO; + _yChartLabelWidth = 18; + _rotateForXAxisText = false; + _isGradientShow = YES; + _isShowNumbers = YES; + _yLabelPrefix = @""; + _yLabelSuffix = @""; + _yLabelFormatter = ^(CGFloat yValue){ + return [NSString stringWithFormat:@"%1.f",yValue]; + }; +} + +- (void)setYValues:(NSArray *)yValues +{ + _yValues = yValues; + //make the _yLabelSum value dependant of the distinct values of yValues to avoid duplicates on yAxis + + if (_showLabel) { + [self __addYCoordinateLabelsValues]; + } else { + [self processYMaxValue]; + } +} + +- (void)processYMaxValue { + NSArray *yAxisValues = _yLabels ? _yLabels : _yValues; + _yLabelSum = _yLabels ? _yLabels.count - 1 :_yLabelSum; + if (_yMaxValue) { + _yValueMax = _yMaxValue; + } else { + [self getYValueMax:yAxisValues]; + } + + if (_yLabelSum==4) { + _yLabelSum = yAxisValues.count; + (_yLabelSum % 2 == 0) ? _yLabelSum : _yLabelSum++; + } +} + +#pragma mark - Private Method +#pragma mark - Add Y Label +- (void)__addYCoordinateLabelsValues{ + + [self viewCleanupForCollection:_yChartLabels]; + + [self processYMaxValue]; + + float sectionHeight = (self.frame.size.height - _chartMarginTop - _chartMarginBottom - kXLabelHeight) / _yLabelSum; + + for (int i = 0; i <= _yLabelSum; i++) { + NSString *labelText; + if (_yLabels) { + float yAsixValue = [_yLabels[_yLabels.count - i - 1] floatValue]; + labelText= _yLabelFormatter(yAsixValue); + } else { + labelText = _yLabelFormatter((float)_yValueMax * ( (_yLabelSum - i) / (float)_yLabelSum )); + } + + PNChartLabel *label = [[PNChartLabel alloc] initWithFrame:CGRectZero]; + label.font = _labelFont; + label.textColor = _labelTextColor; + [label setTextAlignment:NSTextAlignmentRight]; + label.text = [NSString stringWithFormat:@"%@%@%@", _yLabelPrefix, labelText, _yLabelSuffix]; + + [self addSubview:label]; + + label.frame = (CGRect){0, sectionHeight * i + _chartMarginTop - kYLabelHeight/2.0 + kXLabelHeight + _labelMarginTop, _yChartLabelWidth, kYLabelHeight}; + + [_yChartLabels addObject:label]; + } +} + +-(void)updateChartData:(NSArray *)data{ + self.yValues = data; + [self updateBar]; +} + +- (void)getYValueMax:(NSArray *)yLabels +{ + CGFloat max = [[yLabels valueForKeyPath:@"@max.floatValue"] floatValue]; + + //ensure max is even + _yValueMax = max ; + + if (_yValueMax == 0) { + _yValueMax = _yMinValue; + } +} + +- (void)setXLabels:(NSArray *)xLabels +{ + _xLabels = xLabels; + + if (_xChartLabels) { + [self viewCleanupForCollection:_xChartLabels]; + }else{ + _xChartLabels = [NSMutableArray new]; + } + + _xLabelWidth = (self.frame.size.width - _chartMarginLeft - _chartMarginRight) / [xLabels count]; + + if (_showLabel) { + int labelAddCount = 0; + for (int index = 0; index < _xLabels.count; index++) { + labelAddCount += 1; + + if (labelAddCount == _xLabelSkip) { + NSString *labelText = [_xLabels[index] description]; + PNChartLabel * label = [[PNChartLabel alloc] initWithFrame:CGRectMake(0, 0, _xLabelWidth, kXLabelHeight)]; + label.font = _labelFont; + label.textColor = _labelTextColor; + [label setTextAlignment:NSTextAlignmentCenter]; + label.text = labelText; + //[label sizeToFit]; + CGFloat labelXPosition; + if (_rotateForXAxisText){ + label.transform = CGAffineTransformMakeRotation(M_PI / 4); + labelXPosition = (index * _xLabelWidth + _chartMarginLeft + _xLabelWidth /1.5); + } + else{ + labelXPosition = (index * _xLabelWidth + _chartMarginLeft + _xLabelWidth /2.0 ); + } + label.center = CGPointMake(labelXPosition, + self.frame.size.height - _chartMarginTop + label.frame.size.height /2.0 + _labelMarginTop); + labelAddCount = 0; + + [_xChartLabels addObject:label]; + [self addSubview:label]; + } + } + } +} + + +- (void)setStrokeColor:(UIColor *)strokeColor +{ + _strokeColor = strokeColor; +} + +- (void)updateBar +{ + + //Add bars + CGFloat chartCavanHeight = self.frame.size.height - _chartMarginTop - _chartMarginBottom - kXLabelHeight; + NSInteger index = 0; + + for (NSNumber *valueString in _yValues) { + + PNBar *bar; + + if (_bars.count == _yValues.count) { + bar = [_bars objectAtIndex:index]; + }else{ + CGFloat barWidth; + CGFloat barXPosition; + + if (_barWidth) { + barWidth = _barWidth; + barXPosition = index * _xLabelWidth + _chartMarginLeft + _xLabelWidth /2.0 - _barWidth /2.0; + }else{ + barXPosition = index * _xLabelWidth + _chartMarginLeft + _xLabelWidth * 0.25; + if (_showLabel) { + barWidth = _xLabelWidth * 0.5; + + } + else { + barWidth = _xLabelWidth * 0.6; + + } + } + + bar = [[PNBar alloc] initWithFrame:CGRectMake(barXPosition, //Bar X position + self.frame.size.height - chartCavanHeight - kXLabelHeight - _chartMarginBottom + _chartMarginTop , //Bar Y position + barWidth, // Bar witdh + self.showLevelLine ? chartCavanHeight/2.0:chartCavanHeight)]; //Bar height + + //Change Bar Radius + bar.barRadius = _barRadius; + + //Set Bar Animation + bar.displayAnimated = self.displayAnimated; + + //Change Bar Background color + bar.backgroundColor = _barBackgroundColor; + //Bar StrokColor First + if (self.strokeColor) { + bar.barColor = self.strokeColor; + }else{ + bar.barColor = [self barColorAtIndex:index]; + } + + if (self.labelTextColor) { + bar.labelTextColor = self.labelTextColor; + } + + // Add gradient + if (self.isGradientShow) { + bar.barColorGradientStart = bar.barColor; + } + + //For Click Index + bar.tag = index; + + [_bars addObject:bar]; + [self addSubview:bar]; + } + + //Height Of Bar + float value = [valueString floatValue]; + float grade =fabsf((float)value / (float)_yValueMax); + + if (isnan(grade)) { + grade = 0; + } + bar.maxDivisor = (float)_yValueMax; + bar.grade = grade; + bar.isShowNumber = self.isShowNumbers; + CGRect originalFrame = bar.frame; + NSString *currentNumber = [NSString stringWithFormat:@"%f",value]; + + if ([[currentNumber substringToIndex:1] isEqualToString:@"-"] && self.showLevelLine) { + CGAffineTransform transform =CGAffineTransformMakeRotation(M_PI); + [bar setTransform:transform]; + originalFrame.origin.y = bar.frame.origin.y + bar.frame.size.height; + bar.frame = originalFrame; + bar.isNegative = YES; + + } + index += 1; + } +} + +- (void)strokeChart +{ + //Add Labels + + [self viewCleanupForCollection:_bars]; + + + //Update Bar + + [self updateBar]; + + //Add chart border lines + + if (_showChartBorder) { + _chartBottomLine = [CAShapeLayer layer]; + _chartBottomLine.lineCap = kCALineCapButt; + _chartBottomLine.fillColor = [[UIColor whiteColor] CGColor]; + _chartBottomLine.lineWidth = 1.0; + _chartBottomLine.strokeEnd = 0.0; + + UIBezierPath *progressline = [UIBezierPath bezierPath]; + + [progressline moveToPoint:CGPointMake(_chartMarginLeft, self.frame.size.height - kXLabelHeight - _chartMarginBottom + _chartMarginTop)]; + [progressline addLineToPoint:CGPointMake(self.frame.size.width - _chartMarginRight, self.frame.size.height - kXLabelHeight - _chartMarginBottom + _chartMarginTop)]; + + [progressline setLineWidth:1.0]; + [progressline setLineCapStyle:kCGLineCapSquare]; + _chartBottomLine.path = progressline.CGPath; + _chartBottomLine.strokeColor = [_chartBorderColor CGColor];; + _chartBottomLine.strokeEnd = 1.0; + + [self.layer addSublayer:_chartBottomLine]; + + //Add left Chart Line + + _chartLeftLine = [CAShapeLayer layer]; + _chartLeftLine.lineCap = kCALineCapButt; + _chartLeftLine.fillColor = [[UIColor whiteColor] CGColor]; + _chartLeftLine.lineWidth = 1.0; + _chartLeftLine.strokeEnd = 0.0; + + UIBezierPath *progressLeftline = [UIBezierPath bezierPath]; + + [progressLeftline moveToPoint:CGPointMake(_chartMarginLeft, self.frame.size.height - kXLabelHeight - _chartMarginBottom + _chartMarginTop)]; + [progressLeftline addLineToPoint:CGPointMake(_chartMarginLeft, _chartMarginTop)]; + + [progressLeftline setLineWidth:1.0]; + [progressLeftline setLineCapStyle:kCGLineCapSquare]; + _chartLeftLine.path = progressLeftline.CGPath; + _chartLeftLine.strokeColor = [_chartBorderColor CGColor]; + _chartLeftLine.strokeEnd = 1.0; + + [self addBorderAnimationIfNeeded]; + [self.layer addSublayer:_chartLeftLine]; + } + + // Add Level Separator Line + if (_showLevelLine) { + _chartLevelLine = [CAShapeLayer layer]; + _chartLevelLine.lineCap = kCALineCapButt; + _chartLevelLine.fillColor = [[UIColor whiteColor] CGColor]; + _chartLevelLine.lineWidth = 1.0; + _chartLevelLine.strokeEnd = 0.0; + + UIBezierPath *progressline = [UIBezierPath bezierPath]; + + [progressline moveToPoint:CGPointMake(_chartMarginLeft, (self.frame.size.height - kXLabelHeight )/2.0)]; + [progressline addLineToPoint:CGPointMake(self.frame.size.width - _chartMarginLeft - _chartMarginRight, (self.frame.size.height - kXLabelHeight )/2.0)]; + + [progressline setLineWidth:1.0]; + [progressline setLineCapStyle:kCGLineCapSquare]; + _chartLevelLine.path = progressline.CGPath; + + _chartLevelLine.strokeColor = PNLightGrey.CGColor; + + [self addSeparatorAnimationIfNeeded]; + _chartLevelLine.strokeEnd = 1.0; + + [self.layer addSublayer:_chartLevelLine]; + } else { + if (_chartLevelLine) { + [_chartLevelLine removeFromSuperlayer]; + _chartLevelLine = nil; + } + } +} + +- (void)addBorderAnimationIfNeeded +{ + if (self.displayAnimated) { + CABasicAnimation *pathAnimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"]; + pathAnimation.duration = 0.5; + pathAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; + pathAnimation.fromValue = @0.0f; + pathAnimation.toValue = @1.0f; + [_chartBottomLine addAnimation:pathAnimation forKey:@"strokeEndAnimation"]; + + CABasicAnimation *pathLeftAnimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"]; + pathLeftAnimation.duration = 0.5; + pathLeftAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; + pathLeftAnimation.fromValue = @0.0f; + pathLeftAnimation.toValue = @1.0f; + [_chartLeftLine addAnimation:pathLeftAnimation forKey:@"strokeEndAnimation"]; + } +} + +- (void)addSeparatorAnimationIfNeeded +{ + if (self.displayAnimated) { + CABasicAnimation *pathAnimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"]; + pathAnimation.duration = 0.5; + pathAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; + pathAnimation.fromValue = @0.0f; + pathAnimation.toValue = @1.0f; + [_chartLevelLine addAnimation:pathAnimation forKey:@"strokeEndAnimation"]; + } +} + +- (void)viewCleanupForCollection:(NSMutableArray *)array +{ + if (array.count) { + [array makeObjectsPerformSelector:@selector(removeFromSuperview)]; + [array removeAllObjects]; + } +} + + +#pragma mark - Class extension methods + +- (UIColor *)barColorAtIndex:(NSUInteger)index +{ + if ([self.strokeColors count] == [self.yValues count]) { + return self.strokeColors[index]; + } + else { + return self.strokeColor; + } +} + +#pragma mark - Touch detection + +- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event +{ + [self touchPoint:touches withEvent:event]; + [super touchesBegan:touches withEvent:event]; +} + +- (void)touchPoint:(NSSet *)touches withEvent:(UIEvent *)event +{ + //Get the point user touched + UITouch *touch = [touches anyObject]; + CGPoint touchPoint = [touch locationInView:self]; + UIView *subview = [self hitTest:touchPoint withEvent:nil]; + + if ([subview isKindOfClass:[PNBar class]] && [self.delegate respondsToSelector:@selector(userClickedOnBarAtIndex:)]) { + [self.delegate userClickedOnBarAtIndex:subview.tag]; + } +} + + +@end diff --git a/Ifish/controllers/HotBar/Lib/PNChart/PNChart.h b/Ifish/controllers/HotBar/Lib/PNChart/PNChart.h new file mode 100755 index 0000000..b0962a5 --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/PNChart/PNChart.h @@ -0,0 +1,35 @@ +// +// PNChart.h +// PNChart +// +// Created by Everton Cunha on 06/03/18. +// Copyright © 2018 kevinzhow. All rights reserved. +// + +#import + +//! Project version number for PNChart. +FOUNDATION_EXPORT double PNChartVersionNumber; + +//! Project version string for PNChart. +FOUNDATION_EXPORT const unsigned char PNChartVersionString[]; + +#import "PNScatterChart.h" +#import "PNScatterChartData.h" +#import "PNScatterChartDataItem.h" +#import "PNChart.h" +#import "PNChartDelegate.h" +#import "PNChartLabel.h" +#import "PNColor.h" +#import "PNBar.h" +#import "PNBarChart.h" +#import "PNCircleChart.h" +#import "PNLineChart.h" +#import "PNLineChartData.h" +#import "PNLineChartDataItem.h" +#import "PNPieChart.h" +#import "PNPieChartDataItem.h" +#import "PNGenericChart.h" +#import "PNRadarChart.h" +#import "PNRadarChartDataItem.h" +#import "PNChart.h" diff --git a/Ifish/controllers/HotBar/Lib/PNChart/PNChartDelegate.h b/Ifish/controllers/HotBar/Lib/PNChart/PNChartDelegate.h new file mode 100755 index 0000000..6d49f7c --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/PNChart/PNChartDelegate.h @@ -0,0 +1,33 @@ +// +// PNChartDelegate.h +// PNChartDemo +// +// Created by kevinzhow on 13-12-11. +// Copyright (c) 2013年 kevinzhow. All rights reserved. +// + +#import + +@protocol PNChartDelegate +@optional +/** + * Callback method that gets invoked when the user taps on the chart line. + */ +- (void)userClickedOnLinePoint:(CGPoint)point lineIndex:(NSInteger)lineIndex; + +/** + * Callback method that gets invoked when the user taps on a chart line key point. + */ +- (void)userClickedOnLineKeyPoint:(CGPoint)point + lineIndex:(NSInteger)lineIndex + pointIndex:(NSInteger)pointIndex; + +/** + * Callback method that gets invoked when the user taps on a chart bar. + */ +- (void)userClickedOnBarAtIndex:(NSInteger)barIndex; + + +- (void)userClickedOnPieIndexItem:(NSInteger)pieIndex; +- (void)didUnselectPieItem; +@end diff --git a/Ifish/controllers/HotBar/Lib/PNChart/PNChartLabel.h b/Ifish/controllers/HotBar/Lib/PNChart/PNChartLabel.h new file mode 100755 index 0000000..9ba6afa --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/PNChart/PNChartLabel.h @@ -0,0 +1,13 @@ +// +// PNChartLabel.h +// PNChart +// +// Created by kevin on 10/3/13. +// Copyright (c) 2013年 kevinzhow. All rights reserved. +// + +#import + +@interface PNChartLabel : UILabel + +@end diff --git a/Ifish/controllers/HotBar/Lib/PNChart/PNChartLabel.m b/Ifish/controllers/HotBar/Lib/PNChart/PNChartLabel.m new file mode 100755 index 0000000..b0980d1 --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/PNChart/PNChartLabel.m @@ -0,0 +1,32 @@ +// +// PNChartLabel.m +// PNChart +// +// Created by kevin on 10/3/13. +// Copyright (c) 2013年 kevinzhow. All rights reserved. +// + +#import "PNChartLabel.h" + +@implementation PNChartLabel + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + + if (self) { + self.font = [UIFont boldSystemFontOfSize:11.0f]; + self.backgroundColor = [UIColor clearColor]; + self.textAlignment = NSTextAlignmentCenter; + self.userInteractionEnabled = YES; + self.adjustsFontSizeToFitWidth = YES; + self.numberOfLines = 0; + /* if you want to see ... in large labels un-comment this line + self.minimumScaleFactor = 0.8; + */ + } + + return self; +} + +@end diff --git a/Ifish/controllers/HotBar/Lib/PNChart/PNCircleChart.h b/Ifish/controllers/HotBar/Lib/PNChart/PNCircleChart.h new file mode 100755 index 0000000..f9fc06d --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/PNChart/PNCircleChart.h @@ -0,0 +1,74 @@ +// +// PNCircleChart.h +// PNChartDemo +// +// Created by kevinzhow on 13-11-30. +// Copyright (c) 2013年 kevinzhow. All rights reserved. +// + +#import +#import "PNColor.h" +#import "UICountingLabel.h" + +typedef NS_ENUM (NSUInteger, PNChartFormatType) { + PNChartFormatTypePercent, + PNChartFormatTypeDollar, + PNChartFormatTypeNone, + PNChartFormatTypeDecimal, + PNChartFormatTypeDecimalTwoPlaces, +}; + +#define DEGREES_TO_RADIANS(angle) ((angle) / 180.0 * M_PI) + +@interface PNCircleChart : UIView + +- (void)strokeChart; +- (void)growChartByAmount:(NSNumber *)growAmount; +- (void)updateChartByCurrent:(NSNumber *)current; +- (void)updateChartByCurrent:(NSNumber *)current byTotal:(NSNumber *)total; +- (id)initWithFrame:(CGRect)frame + total:(NSNumber *)total + current:(NSNumber *)current + clockwise:(BOOL)clockwise; + +- (id)initWithFrame:(CGRect)frame + total:(NSNumber *)total + current:(NSNumber *)current + clockwise:(BOOL)clockwise + shadow:(BOOL)hasBackgroundShadow + shadowColor:(UIColor *)backgroundShadowColor; + +- (id)initWithFrame:(CGRect)frame + total:(NSNumber *)total + current:(NSNumber *)current + clockwise:(BOOL)clockwise + shadow:(BOOL)hasBackgroundShadow + shadowColor:(UIColor *)backgroundShadowColor +displayCountingLabel:(BOOL)displayCountingLabel; + +- (id)initWithFrame:(CGRect)frame + total:(NSNumber *)total + current:(NSNumber *)current + clockwise:(BOOL)clockwise + shadow:(BOOL)hasBackgroundShadow + shadowColor:(UIColor *)backgroundShadowColor +displayCountingLabel:(BOOL)displayCountingLabel + overrideLineWidth:(NSNumber *)overrideLineWidth; + +@property (strong, nonatomic) UICountingLabel *countingLabel; +@property (nonatomic) UIColor *strokeColor; +@property (nonatomic) UIColor *strokeColorGradientStart; +@property (nonatomic) NSNumber *total; +@property (nonatomic) NSNumber *current; +@property (nonatomic) NSNumber *lineWidth; +@property (nonatomic) NSTimeInterval duration; +@property (nonatomic) PNChartFormatType chartType; + +@property (nonatomic) CAShapeLayer *circle; +@property (nonatomic) CAShapeLayer *gradientMask; +@property (nonatomic) CAShapeLayer *circleBackground; + +@property (nonatomic) BOOL displayCountingLabel; +@property (nonatomic) BOOL displayAnimated; + +@end diff --git a/Ifish/controllers/HotBar/Lib/PNChart/PNCircleChart.m b/Ifish/controllers/HotBar/Lib/PNChart/PNCircleChart.m new file mode 100755 index 0000000..2e8bb6d --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/PNChart/PNCircleChart.m @@ -0,0 +1,268 @@ +// +// PNCircleChart.m +// PNChartDemo +// +// Created by kevinzhow on 13-11-30. +// Copyright (c) 2013年 kevinzhow. All rights reserved. +// + +#import "PNCircleChart.h" + +@implementation PNCircleChart + +- (id)initWithFrame:(CGRect)frame total:(NSNumber *)total current:(NSNumber *)current clockwise:(BOOL)clockwise { + + return [self initWithFrame:frame + total:total + current:current + clockwise:clockwise + shadow:NO + shadowColor:[UIColor clearColor] + displayCountingLabel:YES + overrideLineWidth:@8.0f]; + +} + +- (id)initWithFrame:(CGRect)frame total:(NSNumber *)total current:(NSNumber *)current clockwise:(BOOL)clockwise shadow:(BOOL)hasBackgroundShadow shadowColor:(UIColor *)backgroundShadowColor { + + return [self initWithFrame:frame + total:total + current:current + clockwise:clockwise + shadow:shadow + shadowColor:backgroundShadowColor + displayCountingLabel:YES + overrideLineWidth:@8.0f]; + +} + +- (id)initWithFrame:(CGRect)frame total:(NSNumber *)total current:(NSNumber *)current clockwise:(BOOL)clockwise shadow:(BOOL)hasBackgroundShadow shadowColor:(UIColor *)backgroundShadowColor displayCountingLabel:(BOOL)displayCountingLabel { + + return [self initWithFrame:frame + total:total + current:current + clockwise:clockwise + shadow:shadow + shadowColor:backgroundShadowColor + displayCountingLabel:displayCountingLabel + overrideLineWidth:@8.0f]; + +} + +- (id)initWithFrame:(CGRect)frame + total:(NSNumber *)total + current:(NSNumber *)current + clockwise:(BOOL)clockwise + shadow:(BOOL)hasBackgroundShadow + shadowColor:(UIColor *)backgroundShadowColor +displayCountingLabel:(BOOL)displayCountingLabel + overrideLineWidth:(NSNumber *)overrideLineWidth +{ + self = [super initWithFrame:frame]; + + if (self) { + _total = total; + _current = current; + _strokeColor = PNFreshGreen; + _duration = 1.0; + _chartType = PNChartFormatTypePercent; + _displayAnimated = YES; + + _displayCountingLabel = displayCountingLabel; + + CGFloat startAngle = clockwise ? -90.0f : 270.0f; + CGFloat endAngle = clockwise ? -90.01f : 270.01f; + + _lineWidth = overrideLineWidth; + + UIBezierPath *circlePath = [UIBezierPath bezierPathWithArcCenter:CGPointMake(self.frame.size.width/2.0f, self.frame.size.height/2.0f) + radius:(self.frame.size.height * 0.5) - ([_lineWidth floatValue]/2.0f) + startAngle:DEGREES_TO_RADIANS(startAngle) + endAngle:DEGREES_TO_RADIANS(endAngle) + clockwise:clockwise]; + + _circle = [CAShapeLayer layer]; + _circle.path = circlePath.CGPath; + _circle.lineCap = kCALineCapRound; + _circle.fillColor = [UIColor clearColor].CGColor; + _circle.lineWidth = [_lineWidth floatValue]; + _circle.zPosition = 1; + + _circleBackground = [CAShapeLayer layer]; + _circleBackground.path = circlePath.CGPath; + _circleBackground.lineCap = kCALineCapRound; + _circleBackground.fillColor = [UIColor clearColor].CGColor; + _circleBackground.lineWidth = [_lineWidth floatValue]; + _circleBackground.strokeColor = (hasBackgroundShadow ? backgroundShadowColor.CGColor : [UIColor clearColor].CGColor); + _circleBackground.strokeEnd = 1.0; + _circleBackground.zPosition = -1; + + [self.layer addSublayer:_circle]; + [self.layer addSublayer:_circleBackground]; + + _countingLabel = [[UICountingLabel alloc] initWithFrame:CGRectMake(0, 0, 100.0, 50.0)]; + [_countingLabel setTextAlignment:NSTextAlignmentCenter]; + [_countingLabel setFont:[UIFont boldSystemFontOfSize:16.0f]]; + [_countingLabel setTextColor:[UIColor grayColor]]; + [_countingLabel setBackgroundColor:[UIColor clearColor]]; + [_countingLabel setCenter:CGPointMake(self.frame.size.width/2.0f, self.frame.size.height/2.0f)]; + _countingLabel.method = UILabelCountingMethodEaseInOut; + if (_displayCountingLabel) { + [self addSubview:_countingLabel]; + } + } + + return self; +} + + +- (void)strokeChart +{ + // Add counting label + + if (_displayCountingLabel) { + NSString *format; + switch (self.chartType) { + case PNChartFormatTypePercent: + format = @"%d%%"; + break; + case PNChartFormatTypeDollar: + format = @"$%d"; + break; + case PNChartFormatTypeDecimal: + format = @"%.1f"; + break; + case PNChartFormatTypeDecimalTwoPlaces: + format = @"%.2f"; + break; + case PNChartFormatTypeNone: + default: + format = @"%d"; + break; + } + self.countingLabel.format = format; + [self addSubview:self.countingLabel]; + } + + + // Add circle params + + _circle.lineWidth = [_lineWidth floatValue]; + _circleBackground.lineWidth = [_lineWidth floatValue]; + _circleBackground.strokeEnd = 1.0; + _circle.strokeColor = _strokeColor.CGColor; + _circle.strokeEnd = [_current floatValue] / [_total floatValue]; + + // Check if user wants to add a gradient from the start color to the bar color + if (_strokeColorGradientStart) { + + // Add gradient + self.gradientMask = [CAShapeLayer layer]; + self.gradientMask.fillColor = [[UIColor clearColor] CGColor]; + self.gradientMask.strokeColor = [[UIColor blackColor] CGColor]; + self.gradientMask.lineWidth = _circle.lineWidth; + self.gradientMask.lineCap = kCALineCapRound; + CGRect gradientFrame = CGRectMake(0, 0, 2*self.bounds.size.width, 2*self.bounds.size.height); + self.gradientMask.frame = gradientFrame; + self.gradientMask.path = _circle.path; + + CAGradientLayer *gradientLayer = [CAGradientLayer layer]; + gradientLayer.startPoint = CGPointMake(0.5,1.0); + gradientLayer.endPoint = CGPointMake(0.5,0.0); + gradientLayer.frame = gradientFrame; + UIColor *endColor = (_strokeColor ? _strokeColor : [UIColor greenColor]); + NSArray *colors = @[ + (id)endColor.CGColor, + (id)_strokeColorGradientStart.CGColor + ]; + gradientLayer.colors = colors; + + [gradientLayer setMask:self.gradientMask]; + + [_circle addSublayer:gradientLayer]; + + self.gradientMask.strokeEnd = [_current floatValue] / [_total floatValue]; + } + + [self addAnimationIfNeeded]; +} + + + +- (void)growChartByAmount:(NSNumber *)growAmount +{ + NSNumber *updatedValue = [NSNumber numberWithFloat:[_current floatValue] + [growAmount floatValue]]; + + // Add animation + [self updateChartByCurrent:updatedValue]; +} + + +-(void)updateChartByCurrent:(NSNumber *)current{ + + [self updateChartByCurrent:current + byTotal:_total]; + +} + +-(void)updateChartByCurrent:(NSNumber *)current byTotal:(NSNumber *)total { + double totalPercentageValue = [current floatValue]/([total floatValue]/100.0); + + if (_strokeColorGradientStart) { + self.gradientMask.strokeEnd = _circle.strokeEnd; + } + + // Add animation + if (self.displayAnimated) { + CABasicAnimation *pathAnimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"]; + pathAnimation.duration = self.duration; + pathAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; + pathAnimation.fromValue = @([_current floatValue] / [_total floatValue]); + pathAnimation.toValue = @([current floatValue] / [total floatValue]); + + if (_strokeColorGradientStart) { + [self.gradientMask addAnimation:pathAnimation forKey:@"strokeEndAnimation"]; + } + [_circle addAnimation:pathAnimation forKey:@"strokeEndAnimation"]; + + if (_displayCountingLabel) { + [self.countingLabel countFrom:fmin([_current floatValue], [_total floatValue]) to:totalPercentageValue withDuration:self.duration]; + } + + } + else if (_displayCountingLabel) { + [self.countingLabel countFrom:totalPercentageValue to:totalPercentageValue withDuration:self.duration]; + } + + _circle.strokeEnd = [current floatValue] / [total floatValue]; + _current = current; + _total = total; +} + +- (void)addAnimationIfNeeded +{ + double percentageValue = (_current.floatValue / _total.floatValue) * 100.0f; + + if (self.displayAnimated) { + CABasicAnimation *pathAnimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"]; + pathAnimation.duration = self.duration; + pathAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; + pathAnimation.fromValue = @(0.0f); + pathAnimation.toValue = @([_current floatValue] / [_total floatValue]); + [_circle addAnimation:pathAnimation forKey:@"strokeEndAnimation"]; + if(_displayCountingLabel) + { + [_countingLabel countFrom:0 to:percentageValue withDuration:self.duration]; + } + if (self.gradientMask && _strokeColorGradientStart) { + [self.gradientMask addAnimation:pathAnimation forKey:@"strokeEndAnimation"]; + } + } + else { + if (_displayCountingLabel) { + [_countingLabel countFrom:percentageValue to:percentageValue withDuration:self.duration]; + } + } +} + +@end diff --git a/Ifish/controllers/HotBar/Lib/PNChart/PNColor.h b/Ifish/controllers/HotBar/Lib/PNChart/PNColor.h new file mode 100755 index 0000000..cfd3ff8 --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/PNChart/PNColor.h @@ -0,0 +1,53 @@ +// +// PNColor.h +// PNChart +// +// Created by kevin on 13-6-8. +// Copyright (c) 2013年 kevinzhow. All rights reserved. +// + +#import +#import + +/* + * System Versioning Preprocessor Macros + */ + +#define SCREEN_WIDTH ([UIScreen mainScreen].bounds.size.width) + +#define PNGrey [UIColor colorWithRed:246.0 / 255.0 green:246.0 / 255.0 blue:246.0 / 255.0 alpha:1.0f] +#define PNLightBlue [UIColor colorWithRed:94.0 / 255.0 green:147.0 / 255.0 blue:196.0 / 255.0 alpha:1.0f] +#define PNGreen [UIColor colorWithRed:77.0 / 255.0 green:186.0 / 255.0 blue:122.0 / 255.0 alpha:1.0f] +#define PNTitleColor [UIColor colorWithRed:0.0 / 255.0 green:189.0 / 255.0 blue:113.0 / 255.0 alpha:1.0f] +#define PNButtonGrey [UIColor colorWithRed:141.0 / 255.0 green:141.0 / 255.0 blue:141.0 / 255.0 alpha:1.0f] +#define PNLightGreen [UIColor colorWithRed:77.0 / 255.0 green:216.0 / 255.0 blue:122.0 / 255.0 alpha:1.0f] +#define PNFreshGreen [UIColor colorWithRed:77.0 / 255.0 green:196.0 / 255.0 blue:122.0 / 255.0 alpha:1.0f] +#define PNDeepGreen [UIColor colorWithRed:77.0 / 255.0 green:176.0 / 255.0 blue:122.0 / 255.0 alpha:1.0f] +#define PNRed [UIColor colorWithRed:245.0 / 255.0 green:94.0 / 255.0 blue:78.0 / 255.0 alpha:1.0f] +#define PNMauve [UIColor colorWithRed:88.0 / 255.0 green:75.0 / 255.0 blue:103.0 / 255.0 alpha:1.0f] +#define PNBrown [UIColor colorWithRed:119.0 / 255.0 green:107.0 / 255.0 blue:95.0 / 255.0 alpha:1.0f] +#define PNBlue [UIColor colorWithRed:82.0 / 255.0 green:116.0 / 255.0 blue:188.0 / 255.0 alpha:1.0f] +#define PNDarkBlue [UIColor colorWithRed:121.0 / 255.0 green:134.0 / 255.0 blue:142.0 / 255.0 alpha:1.0f] +#define PNYellow [UIColor colorWithRed:242.0 / 255.0 green:197.0 / 255.0 blue:117.0 / 255.0 alpha:1.0f] +#define PNWhite [UIColor colorWithRed:255.0 / 255.0 green:255.0 / 255.0 blue:255.0 / 255.0 alpha:1.0f] +#define PNDeepGrey [UIColor colorWithRed:99.0 / 255.0 green:99.0 / 255.0 blue:99.0 / 255.0 alpha:1.0f] +#define PNPinkGrey [UIColor colorWithRed:200.0 / 255.0 green:193.0 / 255.0 blue:193.0 / 255.0 alpha:1.0f] +#define PNHealYellow [UIColor colorWithRed:245.0 / 255.0 green:242.0 / 255.0 blue:238.0 / 255.0 alpha:1.0f] +#define PNLightGrey [UIColor colorWithRed:225.0 / 255.0 green:225.0 / 255.0 blue:225.0 / 255.0 alpha:1.0f] +#define PNCleanGrey [UIColor colorWithRed:251.0 / 255.0 green:251.0 / 255.0 blue:251.0 / 255.0 alpha:1.0f] +#define PNLightYellow [UIColor colorWithRed:241.0 / 255.0 green:240.0 / 255.0 blue:240.0 / 255.0 alpha:1.0f] +#define PNDarkYellow [UIColor colorWithRed:152.0 / 255.0 green:150.0 / 255.0 blue:159.0 / 255.0 alpha:1.0f] +#define PNPinkDark [UIColor colorWithRed:170.0 / 255.0 green:165.0 / 255.0 blue:165.0 / 255.0 alpha:1.0f] +#define PNCloudWhite [UIColor colorWithRed:244.0 / 255.0 green:244.0 / 255.0 blue:244.0 / 255.0 alpha:1.0f] +#define PNBlack [UIColor colorWithRed:45.0 / 255.0 green:45.0 / 255.0 blue:45.0 / 255.0 alpha:1.0f] +#define PNStarYellow [UIColor colorWithRed:252.0 / 255.0 green:223.0 / 255.0 blue:101.0 / 255.0 alpha:1.0f] +#define PNTwitterColor [UIColor colorWithRed:0.0 / 255.0 green:171.0 / 255.0 blue:243.0 / 255.0 alpha:1.0] +#define PNWeiboColor [UIColor colorWithRed:250.0 / 255.0 green:0.0 / 255.0 blue:33.0 / 255.0 alpha:1.0] +#define PNiOSGreenColor [UIColor colorWithRed:98.0 / 255.0 green:247.0 / 255.0 blue:77.0 / 255.0 alpha:1.0] + + +@interface PNColor : NSObject + +- (UIImage *)imageFromColor:(UIColor *)color; + +@end diff --git a/Ifish/controllers/HotBar/Lib/PNChart/PNColor.m b/Ifish/controllers/HotBar/Lib/PNChart/PNColor.m new file mode 100755 index 0000000..2ebc8c0 --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/PNChart/PNColor.m @@ -0,0 +1,29 @@ +// +// PNColor.m +// PNChart +// +// Created by kevin on 13-6-8. +// Copyright (c) 2013年 kevinzhow. All rights reserved. +// + +#import "PNColor.h" +#import + +@implementation PNColor + +- (UIImage *)imageFromColor:(UIColor *)color +{ + CGRect rect = CGRectMake(0, 0, 1, 1); + + UIGraphicsBeginImageContext(rect.size); + CGContextRef context = UIGraphicsGetCurrentContext(); + CGContextSetFillColorWithColor(context, [color CGColor]); + CGContextFillRect(context, rect); + UIImage *img = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); + + return img; +} + + +@end diff --git a/Ifish/controllers/HotBar/Lib/PNChart/PNGenericChart.h b/Ifish/controllers/HotBar/Lib/PNChart/PNGenericChart.h new file mode 100755 index 0000000..829d84a --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/PNChart/PNGenericChart.h @@ -0,0 +1,48 @@ +// +// PNGenericChart.h +// PNChartDemo +// +// Created by Andi Palo on 26/02/15. +// Copyright (c) 2015 kevinzhow. All rights reserved. +// + +#import + +typedef NS_ENUM(NSUInteger, PNLegendPosition) { + PNLegendPositionTop = 0, + PNLegendPositionBottom = 1, + PNLegendPositionLeft = 2, + PNLegendPositionRight = 3 +}; + +typedef NS_ENUM(NSUInteger, PNLegendItemStyle) { + PNLegendItemStyleStacked = 0, + PNLegendItemStyleSerial = 1 +}; + +@interface PNGenericChart : UIView + +@property (assign, nonatomic) BOOL hasLegend; +@property (assign, nonatomic) PNLegendPosition legendPosition; +@property (assign, nonatomic) PNLegendItemStyle legendStyle; + +@property (assign, nonatomic) UIFont *legendFont; +@property (assign, nonatomic) UIColor *legendFontColor; +@property (assign, nonatomic) NSUInteger labelRowsInSerialMode; + +/** Display the chart with or without animation. Default is YES. **/ +@property (nonatomic) BOOL displayAnimated; + +/** + * returns the Legend View, or nil if no chart data is present. + * The origin of the legend frame is 0,0 but you can set it with setFrame:(CGRect) + * + * @param mWidth Maximum width of legend. Height will depend on this and font size + * + * @return UIView of Legend + */ +- (UIView*) getLegendWithMaxWidth:(CGFloat)mWidth; + + +- (void) setupDefaultValues; +@end diff --git a/Ifish/controllers/HotBar/Lib/PNChart/PNGenericChart.m b/Ifish/controllers/HotBar/Lib/PNChart/PNGenericChart.m new file mode 100755 index 0000000..c54ac37 --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/PNChart/PNGenericChart.m @@ -0,0 +1,54 @@ +// +// PNGenericChart.m +// PNChartDemo +// +// Created by Andi Palo on 26/02/15. +// Copyright (c) 2015 kevinzhow. All rights reserved. +// + +#import "PNGenericChart.h" + +@interface PNGenericChart () + + + +@end + +@implementation PNGenericChart + +/* +// Only override drawRect: if you perform custom drawing. +// An empty implementation adversely affects performance during animation. +- (void)drawRect:(CGRect)rect { + // Drawing code +} +*/ + +- (void) setupDefaultValues{ + self.hasLegend = YES; + self.legendPosition = PNLegendPositionBottom; + self.legendStyle = PNLegendItemStyleStacked; + self.labelRowsInSerialMode = 1; + self.displayAnimated = YES; +} + + + +/** + * to be implemented in subclass + */ +- (UIView*) getLegendWithMaxWidth:(CGFloat)mWidth{ + [self doesNotRecognizeSelector:_cmd]; + return nil; +} + +- (void) setLabelRowsInSerialMode:(NSUInteger)num{ + if (self.legendStyle == PNLegendItemStyleSerial) { + _labelRowsInSerialMode = num; + }else{ + _labelRowsInSerialMode = 1; + } +} + + +@end diff --git a/Ifish/controllers/HotBar/Lib/PNChart/PNLineChart.h b/Ifish/controllers/HotBar/Lib/PNChart/PNLineChart.h new file mode 100755 index 0000000..b30878a --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/PNChart/PNLineChart.h @@ -0,0 +1,110 @@ +// +// PNLineChart.h +// PNChartDemo +// +// Created by kevin on 11/7/13. +// Copyright (c) 2013年 kevinzhow. All rights reserved. +// + +#import +#import +#import "PNChartDelegate.h" +#import "PNGenericChart.h" + +@interface PNLineChart : PNGenericChart + +/** + * Draws the chart in an animated fashion. + */ +- (void)strokeChart; + +@property (nonatomic, weak) id delegate; + +@property (nonatomic) NSArray *xLabels; +@property (nonatomic) NSArray *yLabels; + +/** + * Array of `LineChartData` objects, one for each line. + */ +@property (nonatomic) NSArray *chartData; + +@property (nonatomic) NSMutableArray *pathPoints; +@property (nonatomic) NSMutableArray *xChartLabels; +@property (nonatomic) NSMutableArray *yChartLabels; + +@property (nonatomic) CGFloat xLabelWidth; +@property (nonatomic) UIFont *xLabelFont; +@property (nonatomic) UIColor *xLabelColor; +@property (nonatomic) CGFloat yValueMax; +@property (nonatomic) CGFloat yFixedValueMax; +@property (nonatomic) CGFloat yFixedValueMin; +@property (nonatomic) CGFloat yValueMin; +@property (nonatomic) NSInteger yLabelNum; +@property (nonatomic) CGFloat yLabelHeight; +@property (nonatomic) UIFont *yLabelFont; +@property (nonatomic) UIColor *yLabelColor; +@property (nonatomic) CGFloat chartCavanHeight; +@property (nonatomic) CGFloat chartCavanWidth; +@property (nonatomic) BOOL showLabel; +@property (nonatomic) BOOL showGenYLabels; +@property (nonatomic) BOOL showYGridLines; +@property (nonatomic) UIColor *yGridLinesColor; +@property (nonatomic) BOOL thousandsSeparator; + +@property (nonatomic) CGFloat chartMarginLeft; +@property (nonatomic) CGFloat chartMarginRight; +@property (nonatomic) CGFloat chartMarginTop; +@property (nonatomic) CGFloat chartMarginBottom; + +/** + * Controls whether to show the coordinate axis. Default is NO. + */ +@property (nonatomic, getter = isShowCoordinateAxis) BOOL showCoordinateAxis; +@property (nonatomic) UIColor *axisColor; +@property (nonatomic) CGFloat axisWidth; + +@property (nonatomic, strong) NSString *xUnit; +@property (nonatomic, strong) NSString *yUnit; + +/** + * String formatter for float values in y-axis labels. If not set, defaults to @"%1.f" + */ +@property (nonatomic, strong) NSString *yLabelFormat; + +/** + * Block formatter for custom string in y-axis labels. If not set, defaults to yLabelFormat + */ +@property (nonatomic, copy) NSString* (^yLabelBlockFormatter)(CGFloat); + + +/** + * Controls whether to curve the line chart or not + */ +@property (nonatomic) BOOL showSmoothLines; + +- (void)setXLabels:(NSArray *)xLabels withWidth:(CGFloat)width; + +/** + * Update Chart Value + */ + +- (void)updateChartData:(NSArray *)data; + + +/** + * returns the Legend View, or nil if no chart data is present. + * The origin of the legend frame is 0,0 but you can set it with setFrame:(CGRect) + * + * @param mWidth Maximum width of legend. Height will depend on this and font size + * + * @return UIView of Legend + */ +- (UIView*) getLegendWithMaxWidth:(CGFloat)mWidth; + + ++ (CGSize)sizeOfString:(NSString *)text withWidth:(float)width font:(UIFont *)font; + ++ (CGPoint)midPointBetweenPoint1:(CGPoint)point1 andPoint2:(CGPoint)point2; ++ (CGPoint)controlPointBetweenPoint1:(CGPoint)point1 andPoint2:(CGPoint)point2; + +@end diff --git a/Ifish/controllers/HotBar/Lib/PNChart/PNLineChart.m b/Ifish/controllers/HotBar/Lib/PNChart/PNLineChart.m new file mode 100755 index 0000000..89bccd8 --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/PNChart/PNLineChart.m @@ -0,0 +1,1332 @@ +// +// PNLineChart.m +// PNChartDemo +// +// Created by kevin on 11/7/13. +// Copyright (c) 2013年 kevinzhow. All rights reserved. +// + +#import "PNLineChart.h" +#import "PNColor.h" +#import "PNChartLabel.h" +#import "PNLineChartData.h" +#import "PNLineChartDataItem.h" + +@interface PNLineChart () + +@property(nonatomic) NSMutableArray *chartLineArray; // Array[CAShapeLayer] +@property(nonatomic) NSMutableArray *chartPointArray; // Array[CAShapeLayer] save the point layer + +@property(nonatomic) NSMutableArray *chartPath; // Array of line path, one for each line. +@property(nonatomic) NSMutableArray *pointPath; // Array of point path, one for each line +@property(nonatomic) NSMutableArray *endPointsOfPath; // Array of start and end points of each line path, one for each line + +@property(nonatomic) CABasicAnimation *pathAnimation; // will be set to nil if _displayAnimation is NO + +// display grade +@property(nonatomic) NSMutableArray *gradeStringPaths; +@property(nonatomic) NSMutableArray *progressLinePathsColors; //Array of colors when drawing each line.if chartData.rangeColors is set then different colors will be + +@end + +@implementation PNLineChart + +@synthesize pathAnimation = _pathAnimation; + +#pragma mark initialization + +- (id)initWithCoder:(NSCoder *)coder { + self = [super initWithCoder:coder]; + + if (self) { + [self setupDefaultValues]; + } + + return self; +} + +- (id)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + + if (self) { + [self setupDefaultValues]; + } + + return self; +} + + +#pragma mark instance methods + +- (void)setYLabels { + CGFloat yStep = (_yValueMax - _yValueMin) / _yLabelNum; + CGFloat yStepHeight = _chartCavanHeight / _yLabelNum; + + if (_yChartLabels) { + for (PNChartLabel *label in _yChartLabels) { + [label removeFromSuperview]; + } + } else { + _yChartLabels = [NSMutableArray new]; + } + + if (yStep == 0.0) { + PNChartLabel *minLabel = [[PNChartLabel alloc] initWithFrame:CGRectMake(0.0, (NSInteger) _chartCavanHeight, (NSInteger) _chartMarginBottom, (NSInteger) _yLabelHeight)]; + minLabel.text = [self formatYLabel:0.0]; + [self setCustomStyleForYLabel:minLabel]; + [self addSubview:minLabel]; + [_yChartLabels addObject:minLabel]; + + PNChartLabel *midLabel = [[PNChartLabel alloc] initWithFrame:CGRectMake(0.0, (NSInteger) (_chartCavanHeight / 2), (NSInteger) _chartMarginBottom, (NSInteger) _yLabelHeight)]; + midLabel.text = [self formatYLabel:_yValueMax]; + [self setCustomStyleForYLabel:midLabel]; + [self addSubview:midLabel]; + [_yChartLabels addObject:midLabel]; + + PNChartLabel *maxLabel = [[PNChartLabel alloc] initWithFrame:CGRectMake(0.0, 0.0, (NSInteger) _chartMarginBottom, (NSInteger) _yLabelHeight)]; + maxLabel.text = [self formatYLabel:_yValueMax * 2]; + [self setCustomStyleForYLabel:maxLabel]; + [self addSubview:maxLabel]; + [_yChartLabels addObject:maxLabel]; + + } else { + NSInteger index = 0; + NSInteger num = _yLabelNum + 1; + + while (num > 0) { + CGRect labelFrame = CGRectMake(0.0, + (NSInteger) (_chartCavanHeight + _chartMarginTop - index * yStepHeight), + (CGFloat) ((NSInteger) _chartMarginLeft * 0.9), + (NSInteger) _yLabelHeight); + PNChartLabel *label = [[PNChartLabel alloc] initWithFrame:labelFrame]; + [label setTextAlignment:NSTextAlignmentRight]; + label.text = [self formatYLabel:_yValueMin + (yStep * index)]; + [self setCustomStyleForYLabel:label]; + [self addSubview:label]; + [_yChartLabels addObject:label]; + index += 1; + num -= 1; + } + } +} + +- (void)setYLabels:(NSArray *)yLabels { + _showGenYLabels = NO; + _yLabelNum = yLabels.count; + + CGFloat yLabelHeight; + if (_showLabel) { + yLabelHeight = _chartCavanHeight / [yLabels count]; + } else { + yLabelHeight = (self.frame.size.height) / [yLabels count]; + } + + return [self setYLabels:yLabels withHeight:yLabelHeight]; +} + +- (void)setYLabels:(NSArray *)yLabels withHeight:(CGFloat)height { + _yLabels = yLabels; + _yLabelHeight = height; + if (_yChartLabels) { + for (PNChartLabel *label in _yChartLabels) { + [label removeFromSuperview]; + } + } else { + _yChartLabels = [NSMutableArray new]; + } + + NSString *labelText; + + if (_showLabel) { + CGFloat yStepHeight = _chartCavanHeight / _yLabelNum; + + for (int index = 0; index < yLabels.count; index++) { + labelText = yLabels[(NSUInteger) index]; + + NSInteger y = (NSInteger) (_chartCavanHeight + _chartMarginTop - index * yStepHeight); + + PNChartLabel *label = [[PNChartLabel alloc] initWithFrame:CGRectMake(0.0, y - (NSInteger) _chartMarginBottom / 2, (CGFloat) ((NSInteger) _chartMarginLeft * 0.9), (NSInteger) _yLabelHeight)]; + [label setTextAlignment:NSTextAlignmentRight]; + label.text = labelText; + [self setCustomStyleForYLabel:label]; + [self addSubview:label]; + [_yChartLabels addObject:label]; + } + } +} + +- (CGFloat)computeEqualWidthForXLabels:(NSArray *)xLabels { + CGFloat xLabelWidth; + + if (_showLabel) { + xLabelWidth = _chartCavanWidth / [xLabels count]; + } else { + xLabelWidth = (self.frame.size.width) / [xLabels count]; + } + + return xLabelWidth; +} + + +- (void)setXLabels:(NSArray *)xLabels { + CGFloat xLabelWidth; + + if (_showLabel) { + xLabelWidth = _chartCavanWidth / [xLabels count]; + } else { + xLabelWidth = (self.frame.size.width - _chartMarginLeft - _chartMarginRight) / [xLabels count]; + } + + return [self setXLabels:xLabels withWidth:xLabelWidth]; +} + +- (void)setXLabels:(NSArray *)xLabels withWidth:(CGFloat)width { + _xLabels = xLabels; + _xLabelWidth = width; + if (_xChartLabels) { + for (PNChartLabel *label in _xChartLabels) { + [label removeFromSuperview]; + } + } else { + _xChartLabels = [NSMutableArray new]; + } + + NSString *labelText; + + if (_showLabel) { + for (NSUInteger index = 0; index < xLabels.count; index++) { + labelText = xLabels[index]; + + NSInteger x = (NSInteger) (index * _xLabelWidth + _chartMarginLeft); + NSInteger y = (NSInteger) (_chartMarginBottom + _chartCavanHeight); + + PNChartLabel *label = [[PNChartLabel alloc] initWithFrame:CGRectMake(x, y, (NSInteger) _xLabelWidth, (NSInteger) _chartMarginBottom)]; + [label setTextAlignment:NSTextAlignmentCenter]; + label.text = labelText; + [self setCustomStyleForXLabel:label]; + [self addSubview:label]; + [_xChartLabels addObject:label]; + } + } +} + +- (void)setCustomStyleForXLabel:(UILabel *)label { + if (_xLabelFont) { + label.font = _xLabelFont; + } + + if (_xLabelColor) { + label.textColor = _xLabelColor; + } + +} + +- (void)setCustomStyleForYLabel:(UILabel *)label { + if (_yLabelFont) { + label.font = _yLabelFont; + } + + if (_yLabelColor) { + label.textColor = _yLabelColor; + } +} + +#pragma mark - Touch at point + +- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { + [self touchPoint:touches withEvent:event]; + [self touchKeyPoint:touches withEvent:event]; +} + +- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { + [self touchPoint:touches withEvent:event]; + [self touchKeyPoint:touches withEvent:event]; +} + +- (void)touchPoint:(NSSet *)touches withEvent:(UIEvent *)event { + // Get the point user touched + UITouch *touch = [touches anyObject]; + CGPoint touchPoint = [touch locationInView:self]; + + for (NSUInteger p = 0; p < _pathPoints.count; p++) { + NSArray *linePointsArray = _endPointsOfPath[p]; + + for (NSUInteger i = 0; i < (int) linePointsArray.count - 1; i += 2) { + CGPoint p1 = [linePointsArray[i] CGPointValue]; + CGPoint p2 = [linePointsArray[i + 1] CGPointValue]; + + // Closest distance from point to line + float distance = (float) fabs(((p2.x - p1.x) * (touchPoint.y - p1.y)) - ((p1.x - touchPoint.x) * (p1.y - p2.y))); + distance /= hypot(p2.x - p1.x, p1.y - p2.y); + + if (distance <= 5.0) { + // Conform to delegate parameters, figure out what bezier path this CGPoint belongs to. + NSUInteger lineIndex = 0; + for (NSArray *paths in _chartPath) { + for (UIBezierPath *path in paths) { + BOOL pointContainsPath = CGPathContainsPoint(path.CGPath, NULL, p1, NO); + if (pointContainsPath) { + [_delegate userClickedOnLinePoint:touchPoint lineIndex:lineIndex]; + return; + } + } + lineIndex++; + } + } + } + } +} + +- (void)touchKeyPoint:(NSSet *)touches withEvent:(UIEvent *)event { + // Get the point user touched + UITouch *touch = [touches anyObject]; + CGPoint touchPoint = [touch locationInView:self]; + + for (NSUInteger p = 0; p < _pathPoints.count; p++) { + NSArray *linePointsArray = _pathPoints[p]; + + for (NSUInteger i = 0; i < (int) linePointsArray.count - 1; i += 1) { + CGPoint p1 = [linePointsArray[i] CGPointValue]; + CGPoint p2 = [linePointsArray[i + 1] CGPointValue]; + + float distanceToP1 = (float) fabs(hypot(touchPoint.x - p1.x, touchPoint.y - p1.y)); + float distanceToP2 = (float) hypot(touchPoint.x - p2.x, touchPoint.y - p2.y); + + float distance = MIN(distanceToP1, distanceToP2); + + if (distance <= 10.0) { + [_delegate userClickedOnLineKeyPoint:touchPoint + lineIndex:p + pointIndex:(distance == distanceToP2 ? i + 1 : i)]; + + return; + } + } + } +} + +#pragma mark - Draw Chart + +- (void)populateChartLines { + for (NSUInteger lineIndex = 0; lineIndex < self.chartData.count; lineIndex++) { + NSArray *progressLines = self.chartPath[lineIndex]; + // each chart line can be divided into multiple paths because + // we need ot draw each path with different color + // if there is not rangeColors then there is only one progressLinePath per chart + NSArray *progressLineColors = self.progressLinePathsColors[lineIndex]; + [self.chartLineArray[lineIndex] removeAllObjects]; + NSUInteger progressLineIndex = 0;; + for (UIBezierPath *progressLinePath in progressLines) { + PNLineChartData *chartData = self.chartData[lineIndex]; + CAShapeLayer *chartLine = [CAShapeLayer layer]; + chartLine.lineCap = kCALineCapButt; + chartLine.lineJoin = kCALineJoinMiter; + chartLine.fillColor = self.backgroundColor.CGColor; + chartLine.lineWidth = chartData.lineWidth; + chartLine.path = progressLinePath.CGPath; + chartLine.strokeEnd = 0.0; + chartLine.strokeColor = progressLineColors[progressLineIndex].CGColor; + [self.layer addSublayer:chartLine]; + [self.chartLineArray[lineIndex] addObject:chartLine]; + progressLineIndex++; + } + } +} + +/* + * strokeChart should remove the previously drawn chart lines and points + * and then proceed to draw the new lines + */ +- (void)strokeChart { + [self removeLayers]; + // remove all shape layers before adding new ones + [self recreatePointLayers]; + // Cavan height and width needs to be set before + // setNeedsDisplay is invoked because setNeedsDisplay + // will invoke drawRect and if Cavan dimensions is not + // set the chart will be misplaced + [self resetCavanHeight]; + [self prepareYLabelsWithData:_chartData]; + + _chartPath = [[NSMutableArray alloc] init]; + _pointPath = [[NSMutableArray alloc] init]; + _gradeStringPaths = [NSMutableArray array]; + _progressLinePathsColors = [[NSMutableArray alloc] init]; + + [self calculateChartPath:_chartPath + andPointsPath:_pointPath + andPathKeyPoints:_pathPoints + andPathStartEndPoints:_endPointsOfPath + andProgressLinePathsColors:_progressLinePathsColors]; + [self populateChartLines]; + // Draw each line + for (NSUInteger lineIndex = 0; lineIndex < self.chartData.count; lineIndex++) { + PNLineChartData *chartData = self.chartData[lineIndex]; + NSArray *chartLines =self.chartLineArray[lineIndex]; + CAShapeLayer *pointLayer = (CAShapeLayer *) self.chartPointArray[lineIndex]; + UIGraphicsBeginImageContext(self.frame.size); + if (chartData.inflexionPointColor) { + pointLayer.strokeColor = [[chartData.inflexionPointColor + colorWithAlphaComponent:chartData.alpha] CGColor]; + } else { + pointLayer.strokeColor = [PNGreen CGColor]; + } + // setup the color of the chart line + NSArray *progressLines = _chartPath[lineIndex]; + UIBezierPath *pointPath = _pointPath[lineIndex]; + + pointLayer.path = pointPath.CGPath; + + [CATransaction begin]; + for (NSUInteger index = 0; index < progressLines.count; index++) { + CAShapeLayer *chartLine = chartLines[index]; + //chartLine strokeColor is already set. no need to override here + [chartLine addAnimation:self.pathAnimation forKey:@"strokeEndAnimation"]; + chartLine.strokeEnd = 1.0; + } + + // if you want cancel the point animation, comment this code, the point will show immediately + if (chartData.inflexionPointStyle != PNLineChartPointStyleNone) { + [pointLayer addAnimation:self.pathAnimation forKey:@"strokeEndAnimation"]; + } + + [CATransaction commit]; + + NSMutableArray *textLayerArray = self.gradeStringPaths[lineIndex]; + for (CATextLayer *textLayer in textLayerArray) { + CABasicAnimation *fadeAnimation = [self fadeAnimation]; + [textLayer addAnimation:fadeAnimation forKey:nil]; + } + + UIGraphicsEndImageContext(); + } + [self setNeedsDisplay]; +} + + +- (void)calculateChartPath:(NSMutableArray *)chartPath + andPointsPath:(NSMutableArray *)pointsPath + andPathKeyPoints:(NSMutableArray *)pathPoints + andPathStartEndPoints:(NSMutableArray *)pointsOfPath +andProgressLinePathsColors:(NSMutableArray *)progressLinePathsColors { + + // remove old point label + for (NSArray *ary in _gradeStringPaths) { + @autoreleasepool { + for (CATextLayer *textLayer in ary) { + [textLayer removeFromSuperlayer]; + } + } + } + [self.gradeStringPaths removeAllObjects]; + + + // Draw each line + + for (NSUInteger lineIndex = 0; lineIndex < self.chartData.count; lineIndex++) { + PNLineChartData *chartData = self.chartData[lineIndex]; + + CGFloat yValue; + NSMutableArray *progressLines = [NSMutableArray new]; + NSMutableArray *progressLineColors = [NSMutableArray new]; + + UIBezierPath *pointPath = [UIBezierPath bezierPath]; + + + [chartPath insertObject:progressLines atIndex:lineIndex]; + [pointsPath insertObject:pointPath atIndex:lineIndex]; + [progressLinePathsColors insertObject:progressLineColors atIndex:lineIndex]; + + + NSMutableArray *gradePathArray = [NSMutableArray array]; + [self.gradeStringPaths addObject:gradePathArray]; + + NSMutableArray *linePointsArray = [[NSMutableArray alloc] init]; + NSMutableArray *lineStartEndPointsArray = [[NSMutableArray alloc] init]; + CGFloat last_x = 0; + CGFloat last_y = 0; + NSMutableArray *> *progressLinePaths = [NSMutableArray new]; + UIColor *defaultColor = chartData.color != nil ? chartData.color : [UIColor greenColor]; + CGFloat inflexionWidth = chartData.inflexionPointWidth; + + for (NSUInteger i = 0; i < chartData.itemCount; i++) { + + NSValue *from = nil; + NSValue *to = nil; + + yValue = chartData.getData(i).y; + + CGFloat x = (i * _xLabelWidth + _chartMarginLeft + _xLabelWidth / 2.0); + CGFloat y = [self yValuePositionInLineChart:yValue]; + + // Circular point + if (chartData.inflexionPointStyle == PNLineChartPointStyleCircle) { + + CGRect circleRect = CGRectMake(x - inflexionWidth / 2, y - inflexionWidth / 2, inflexionWidth, inflexionWidth); + CGPoint circleCenter = CGPointMake(circleRect.origin.x + (circleRect.size.width / 2), circleRect.origin.y + (circleRect.size.height / 2)); + + [pointPath moveToPoint:CGPointMake(circleCenter.x + (inflexionWidth / 2), circleCenter.y)]; + [pointPath addArcWithCenter:circleCenter radius:inflexionWidth / 2 startAngle:0 endAngle:(CGFloat) (2 * M_PI) clockwise:YES]; + + //jet text display text + if (chartData.showPointLabel) { + [gradePathArray addObject:[self createPointLabelFor:chartData.getData(i).rawY pointCenter:circleCenter width:inflexionWidth withChartData:chartData]]; + } + + if (i > 0) { + + // calculate the point for line + float distance = (float) sqrt(pow(x - last_x, 2) + pow(y - last_y, 2)); + float last_x1 = last_x + (inflexionWidth / 2) / distance * (x - last_x); + float last_y1 = last_y + (inflexionWidth / 2) / distance * (y - last_y); + float x1 = x - (inflexionWidth / 2) / distance * (x - last_x); + float y1 = y - (inflexionWidth / 2) / distance * (y - last_y); + from = [NSValue valueWithCGPoint:CGPointMake(last_x1, last_y1)]; + to = [NSValue valueWithCGPoint:CGPointMake(x1, y1)]; + } + } + // Square point + else if (chartData.inflexionPointStyle == PNLineChartPointStyleSquare) { + + CGRect squareRect = CGRectMake(x - inflexionWidth / 2, y - inflexionWidth / 2, inflexionWidth, inflexionWidth); + CGPoint squareCenter = CGPointMake(squareRect.origin.x + (squareRect.size.width / 2), squareRect.origin.y + (squareRect.size.height / 2)); + + [pointPath moveToPoint:CGPointMake(squareCenter.x - (inflexionWidth / 2), squareCenter.y - (inflexionWidth / 2))]; + [pointPath addLineToPoint:CGPointMake(squareCenter.x + (inflexionWidth / 2), squareCenter.y - (inflexionWidth / 2))]; + [pointPath addLineToPoint:CGPointMake(squareCenter.x + (inflexionWidth / 2), squareCenter.y + (inflexionWidth / 2))]; + [pointPath addLineToPoint:CGPointMake(squareCenter.x - (inflexionWidth / 2), squareCenter.y + (inflexionWidth / 2))]; + [pointPath closePath]; + + // text display text + if (chartData.showPointLabel) { + [gradePathArray addObject:[self createPointLabelFor:chartData.getData(i).rawY pointCenter:squareCenter width:inflexionWidth withChartData:chartData]]; + } + + if (i > 0) { + + // calculate the point for line + float distance = (float) sqrt(pow(x - last_x, 2) + pow(y - last_y, 2)); + float last_x1 = last_x + (inflexionWidth / 2); + float last_y1 = last_y + (inflexionWidth / 2) / distance * (y - last_y); + float x1 = x - (inflexionWidth / 2); + float y1 = y - (inflexionWidth / 2) / distance * (y - last_y); + from = [NSValue valueWithCGPoint:CGPointMake(last_x1, last_y1)]; + to = [NSValue valueWithCGPoint:CGPointMake(x1, y1)]; + } + } + // Triangle point + else if (chartData.inflexionPointStyle == PNLineChartPointStyleTriangle) { + + CGRect squareRect = CGRectMake(x - inflexionWidth / 2, y - inflexionWidth / 2, inflexionWidth, inflexionWidth); + + CGPoint startPoint = CGPointMake(squareRect.origin.x, squareRect.origin.y + squareRect.size.height); + CGPoint endPoint = CGPointMake(squareRect.origin.x + (squareRect.size.width / 2), squareRect.origin.y); + CGPoint middlePoint = CGPointMake(squareRect.origin.x + (squareRect.size.width), squareRect.origin.y + squareRect.size.height); + + [pointPath moveToPoint:startPoint]; + [pointPath addLineToPoint:middlePoint]; + [pointPath addLineToPoint:endPoint]; + [pointPath closePath]; + + // text display text + if (chartData.showPointLabel) { + [gradePathArray addObject:[self createPointLabelFor:chartData.getData(i).rawY pointCenter:middlePoint width:inflexionWidth withChartData:chartData]]; + } + + if (i > 0) { + // calculate the point for triangle + float distance = (float) (sqrt(pow(x - last_x, 2) + pow(y - last_y, 2)) * 1.4); + float last_x1 = last_x + (inflexionWidth / 2) / distance * (x - last_x); + float last_y1 = last_y + (inflexionWidth / 2) / distance * (y - last_y); + float x1 = x - (inflexionWidth / 2) / distance * (x - last_x); + float y1 = y - (inflexionWidth / 2) / distance * (y - last_y); + from = [NSValue valueWithCGPoint:CGPointMake(last_x1, last_y1)]; + to = [NSValue valueWithCGPoint:CGPointMake(x1, y1)]; + } + } else { + + if (i > 0) { + from = [NSValue valueWithCGPoint:CGPointMake(last_x, last_y)]; + to = [NSValue valueWithCGPoint:CGPointMake(x, y)]; + } + } + if(from != nil && to != nil) { + [progressLinePaths addObject:@{@"from": from, @"to":to}]; + [lineStartEndPointsArray addObject:from]; + [lineStartEndPointsArray addObject:to]; + } + [linePointsArray addObject:[NSValue valueWithCGPoint:CGPointMake(x, y)]]; + last_x = x; + last_y = y; + } + + [pointsOfPath addObject:[lineStartEndPointsArray copy]]; + [pathPoints addObject:[linePointsArray copy]]; + chartData.rangeColors = [chartData.rangeColors sortedArrayUsingComparator:^NSComparisonResult(PNLineChartColorRange *a, PNLineChartColorRange *b) { + if (a.range.location > b.range.location) { + return (NSComparisonResult)NSOrderedAscending; + } else if (a.range.location < b.range.location) { + return (NSComparisonResult)NSOrderedDescending; + } + return (NSComparisonResult)NSOrderedSame; + }]; + + chartData.rangeColors = [[chartData.rangeColors reverseObjectEnumerator] allObjects]; + + // if rangeColors is not nil then it means we need to draw the chart + // with different colors. colorRangesBetweenP1.. function takes care of + // partitioning the p1->p2 into segments from which we can create UIBezierPath + if (self.showSmoothLines && chartData.itemCount >= 4) { + for (NSDictionary *item in progressLinePaths) { + NSArray *calculatedRanges = + [self colorRangesBetweenP1:[item[@"from"] CGPointValue] + P2:[item[@"to"] CGPointValue] + rangeColors:chartData.rangeColors + defaultColor:defaultColor]; + for (NSDictionary *range in calculatedRanges) { +// NSLog(@"range : %@ range: %@ color %@", range[@"from"], range[@"to"], range[@"color"]); + UIBezierPath *currentProgressLine = [UIBezierPath bezierPath]; + CGPoint segmentP1 = [range[@"from"] CGPointValue]; + CGPoint segmentP2 = [range[@"to"] CGPointValue]; + [currentProgressLine moveToPoint:segmentP1]; + CGPoint midPoint = [PNLineChart midPointBetweenPoint1:segmentP1 andPoint2:segmentP2]; + [currentProgressLine addQuadCurveToPoint:midPoint + controlPoint:[PNLineChart controlPointBetweenPoint1:midPoint andPoint2:segmentP1]]; + [currentProgressLine addQuadCurveToPoint:segmentP2 + controlPoint:[PNLineChart controlPointBetweenPoint1:midPoint andPoint2:segmentP2]]; + [progressLines addObject:currentProgressLine]; + [progressLineColors addObject:range[@"color"]]; + } + } + } else { + for (NSDictionary *item in progressLinePaths) { + NSArray *calculatedRanges = + [self colorRangesBetweenP1:[item[@"from"] CGPointValue] + P2:[item[@"to"] CGPointValue] + rangeColors:chartData.rangeColors + defaultColor:defaultColor]; + for (NSDictionary *range in calculatedRanges) { +// NSLog(@"range : %@ range: %@ color %@", range[@"from"], range[@"to"], range[@"color"]); + UIBezierPath *currentProgressLine = [UIBezierPath bezierPath]; + [currentProgressLine moveToPoint:[range[@"from"] CGPointValue]]; + [currentProgressLine addLineToPoint:[range[@"to"] CGPointValue]]; + [progressLines addObject:currentProgressLine]; + [progressLineColors addObject:range[@"color"]]; + } + } + } + } +} + +#pragma mark - Set Chart Data + +- (void)setChartData:(NSArray *)data { + if (data != _chartData) { + _chartData = data; + } +} + + +- (void)removeLayers { + for (NSArray *layers in self.chartLineArray) { + for (CALayer *layer in layers) { + [layer removeFromSuperlayer]; + } + } + for (CALayer *layer in self.chartPointArray) { + [layer removeFromSuperlayer]; + } + self.chartLineArray = [NSMutableArray arrayWithCapacity:_chartData.count]; + self.chartPointArray = [NSMutableArray arrayWithCapacity:_chartData.count]; +} + +-(void) resetCavanHeight { + _chartCavanHeight = self.frame.size.height - _chartMarginBottom - _chartMarginTop; + if (!_showLabel) { + _chartCavanHeight = self.frame.size.height - 2 * _yLabelHeight; + _chartCavanWidth = self.frame.size.width; + //_chartMargin = chartData.inflexionPointWidth; + _xLabelWidth = (_chartCavanWidth / ([_xLabels count])); + } +} + +- (void)recreatePointLayers { + for (PNLineChartData *chartData in _chartData) { + // create as many chart line layers as there are data-lines + [self.chartLineArray addObject:[NSMutableArray new]]; + + // create point + CAShapeLayer *pointLayer = [CAShapeLayer layer]; + pointLayer.strokeColor = [[chartData.color colorWithAlphaComponent:chartData.alpha] CGColor]; + pointLayer.lineCap = kCALineCapRound; + pointLayer.lineJoin = kCALineJoinBevel; + pointLayer.fillColor = nil; + pointLayer.lineWidth = chartData.lineWidth; + [self.layer addSublayer:pointLayer]; + [self.chartPointArray addObject:pointLayer]; + } +} + +- (void)prepareYLabelsWithData:(NSArray *)data { + CGFloat yMax = 0.0f; + CGFloat yMin = MAXFLOAT; + NSMutableArray *yLabelsArray = [NSMutableArray new]; + + for (PNLineChartData *chartData in data) { + // create as many chart line layers as there are data-lines + + for (NSUInteger i = 0; i < chartData.itemCount; i++) { + CGFloat yValue = chartData.getData(i).y; + [yLabelsArray addObject:[NSString stringWithFormat:@"%2f", yValue]]; + yMax = fmaxf(yMax, yValue); + yMin = fminf(yMin, yValue); + } + } + + + if (_yValueMin == -FLT_MAX) { + _yValueMin = (_yFixedValueMin > -FLT_MAX) ? _yFixedValueMin : yMin; + } + if (_yValueMax == -FLT_MAX) { + _yValueMax = (CGFloat) ((_yFixedValueMax > -FLT_MAX) ? _yFixedValueMax : yMax + yMax / 10.0); + } + + if (_showGenYLabels) { + [self setYLabels]; + } + +} + +#pragma mark - Update Chart Data + +- (void)updateChartData:(NSArray *)data { + _chartData = data; + + [self prepareYLabelsWithData:data]; + + [self calculateChartPath:_chartPath + andPointsPath:_pointPath + andPathKeyPoints:_pathPoints + andPathStartEndPoints:_endPointsOfPath + andProgressLinePathsColors:_progressLinePathsColors]; + + for (NSUInteger lineIndex = 0; lineIndex < self.chartData.count; lineIndex++) { + + CAShapeLayer *chartLine = (CAShapeLayer *) self.chartLineArray[lineIndex]; + CAShapeLayer *pointLayer = (CAShapeLayer *) self.chartPointArray[lineIndex]; + + + NSArray *progressLines = _chartPath[lineIndex]; + UIBezierPath *pointPath = _pointPath[lineIndex]; + + for(UIBezierPath *progressLine in progressLines) { + CABasicAnimation *pathAnimation = [CABasicAnimation animationWithKeyPath:@"path"]; + pathAnimation.fromValue = (id) chartLine.path; + pathAnimation.toValue = (__bridge id) [progressLine CGPath]; + pathAnimation.duration = 0.5f; + pathAnimation.autoreverses = NO; + pathAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; + [chartLine addAnimation:pathAnimation forKey:@"animationKey"]; + chartLine.path = progressLine.CGPath; + } + + CABasicAnimation *pointPathAnimation = [CABasicAnimation animationWithKeyPath:@"path"]; + pointPathAnimation.fromValue = (id) pointLayer.path; + pointPathAnimation.toValue = (__bridge id) [pointPath CGPath]; + pointPathAnimation.duration = 0.5f; + pointPathAnimation.autoreverses = NO; + pointPathAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; + [pointLayer addAnimation:pointPathAnimation forKey:@"animationKey"]; + + pointLayer.path = pointPath.CGPath; + + + } + +} + +#define IOS7_OR_LATER [[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0 + +- (void)drawRect:(CGRect)rect { + if (self.isShowCoordinateAxis) { + CGFloat yAxisOffset = 10.f; + + CGContextRef ctx = UIGraphicsGetCurrentContext(); + UIGraphicsPopContext(); + UIGraphicsPushContext(ctx); + CGContextSetLineWidth(ctx, self.axisWidth); + CGContextSetStrokeColorWithColor(ctx, [self.axisColor CGColor]); + + CGFloat xAxisWidth = CGRectGetWidth(rect) - (_chartMarginLeft + _chartMarginRight) / 2; + CGFloat yAxisHeight = _chartMarginBottom + _chartCavanHeight; + + // draw coordinate axis + CGContextMoveToPoint(ctx, _chartMarginBottom + yAxisOffset, 0); + CGContextAddLineToPoint(ctx, _chartMarginBottom + yAxisOffset, yAxisHeight); + CGContextAddLineToPoint(ctx, xAxisWidth, yAxisHeight); + CGContextStrokePath(ctx); + + // draw y axis arrow + CGContextMoveToPoint(ctx, _chartMarginBottom + yAxisOffset - 3, 6); + CGContextAddLineToPoint(ctx, _chartMarginBottom + yAxisOffset, 0); + CGContextAddLineToPoint(ctx, _chartMarginBottom + yAxisOffset + 3, 6); + CGContextStrokePath(ctx); + + // draw x axis arrow + CGContextMoveToPoint(ctx, xAxisWidth - 6, yAxisHeight - 3); + CGContextAddLineToPoint(ctx, xAxisWidth, yAxisHeight); + CGContextAddLineToPoint(ctx, xAxisWidth - 6, yAxisHeight + 3); + CGContextStrokePath(ctx); + + if (self.showLabel) { + + // draw x axis separator + CGPoint point; + for (NSUInteger i = 0; i < [self.xLabels count]; i++) { + point = CGPointMake(2 * _chartMarginLeft + (i * _xLabelWidth), _chartMarginBottom + _chartCavanHeight); + CGContextMoveToPoint(ctx, point.x, point.y - 2); + CGContextAddLineToPoint(ctx, point.x, point.y); + CGContextStrokePath(ctx); + } + + // draw y axis separator + CGFloat yStepHeight = _chartCavanHeight / _yLabelNum; + for (NSUInteger i = 0; i < [self.xLabels count]; i++) { + point = CGPointMake(_chartMarginBottom + yAxisOffset, (_chartCavanHeight - i * yStepHeight + _yLabelHeight / 2)); + CGContextMoveToPoint(ctx, point.x, point.y); + CGContextAddLineToPoint(ctx, point.x + 2, point.y); + CGContextStrokePath(ctx); + } + } + + UIFont *font = [UIFont systemFontOfSize:11]; + + // draw y unit + if ([self.yUnit length]) { + CGFloat height = [PNLineChart sizeOfString:self.yUnit withWidth:30.f font:font].height; + CGRect drawRect = CGRectMake(_chartMarginLeft + 10 + 5, 0, 30.f, height); + [self drawTextInContext:ctx text:self.yUnit inRect:drawRect font:font color:self.yLabelColor]; + } + + // draw x unit + if ([self.xUnit length]) { + CGFloat height = [PNLineChart sizeOfString:self.xUnit withWidth:30.f font:font].height; + CGRect drawRect = CGRectMake(CGRectGetWidth(rect) - _chartMarginLeft + 5, _chartMarginBottom + _chartCavanHeight - height / 2, 25.f, height); + [self drawTextInContext:ctx text:self.xUnit inRect:drawRect font:font color:self.xLabelColor]; + } + } + if (self.showYGridLines) { + CGContextRef ctx = UIGraphicsGetCurrentContext(); + CGFloat yAxisOffset = _showLabel ? 10.f : 0.0f; + CGPoint point; + CGFloat yStepHeight = _chartCavanHeight / _yLabelNum; + if (self.yGridLinesColor) { + CGContextSetStrokeColorWithColor(ctx, self.yGridLinesColor.CGColor); + } else { + CGContextSetStrokeColorWithColor(ctx, [UIColor lightGrayColor].CGColor); + } + for (NSUInteger i = 0; i < _yLabelNum; i++) { + point = CGPointMake(_chartMarginLeft + yAxisOffset, (_chartCavanHeight - i * yStepHeight + _yLabelHeight / 2)); + CGContextMoveToPoint(ctx, point.x, point.y); + // add dotted style grid + CGFloat dash[] = {6, 5}; + // dot diameter is 20 points + CGContextSetLineWidth(ctx, 0.5); + CGContextSetLineCap(ctx, kCGLineCapRound); + CGContextSetLineDash(ctx, 0.0, dash, 2); + CGContextAddLineToPoint(ctx, CGRectGetWidth(rect) - _chartMarginLeft + 5, point.y); + CGContextStrokePath(ctx); + } + } + + [super drawRect:rect]; +} + +#pragma mark private methods + +/* + * helper function that maps a y value ( from chartData) to + * a position in the chart ( between _yValueMin and _yValueMax) + */ +- (CGFloat)yValuePositionInLineChart:(CGFloat)y { + CGFloat innerGrade; + if (!(_yValueMax - _yValueMin)) { + innerGrade = 0.5; + } else { + innerGrade = ((CGFloat) y - _yValueMin) / (_yValueMax - _yValueMin); + } + CGFloat projection = _chartCavanHeight - (innerGrade * _chartCavanHeight) - (_yLabelHeight / 2) + _chartMarginTop; + return projection; +} + +/** + * return array of segments which represents the color and path + * for each segments. + * for instance if p1.y=1 and p2.y=10 + * and rangeColor = use blue for 2 *)rangeColors + defaultColor:(UIColor *)defaultColor { + PNLineChartColorRange* bestMatchColorForRangeInfo = nil; + if (rangeColors && rangeColors.count > 0 && p2.x > p1.x) { + for (PNLineChartColorRange* aColorForRangeInfo in rangeColors) { + CGFloat transformedStart = [self yValuePositionInLineChart:(CGFloat) + aColorForRangeInfo.range.location]; + CGFloat transformedEnd = [self yValuePositionInLineChart:(CGFloat) + (aColorForRangeInfo.range.location + aColorForRangeInfo.range.length)]; +// NSLog(@"transformedStart %f transformedEnd %f", transformedStart, transformedEnd); + double tfRangeMin = fmin(transformedStart, transformedEnd); + double tfRangeMax = fmax(transformedStart, transformedEnd); + double p1p2Min = fmin(p1.y, p2.y); + double p1p2Max = fmax(p1.y, p2.y); + BOOL intersects; + if (aColorForRangeInfo.inclusive) { + intersects = (tfRangeMin <= p1p2Min && p1p2Min <= tfRangeMax) || (p1p2Min <= tfRangeMin && tfRangeMin <= p1p2Max); + } else { + intersects = (tfRangeMin <= p1p2Min && p1p2Min < tfRangeMax) || (p1p2Min <= tfRangeMin && tfRangeMin <= p1p2Max); + } + if ( (tfRangeMin <= p1p2Min && p1p2Min <= tfRangeMax) || (p1p2Min <= tfRangeMin && tfRangeMin <= p1p2Max)) { + bestMatchColorForRangeInfo = aColorForRangeInfo; + CGPoint partition1EndPoint; + CGPoint partition2EndPoint; + NSArray *partition1 = @[]; + NSDictionary *partition2 = nil; + NSArray *partition3 = @[]; + if (p2.y == p1.y) { + partition1EndPoint = p1; + partition2EndPoint = p2; + } else if (p2.y > p1.y) { + partition1EndPoint = CGPointMake([PNLineChart xOfY:(CGFloat) fmax(p1.y, fmin(transformedStart, transformedEnd)) + betweenPoint1:p1 + andPoint2:p2], (CGFloat) fmax(p1.y, fmin(transformedStart, transformedEnd))); + partition2EndPoint = CGPointMake([PNLineChart xOfY:(CGFloat) fmin(p2.y, fmin(transformedStart, transformedEnd) + fabs(transformedEnd - transformedStart)) + betweenPoint1:p1 + andPoint2:p2], (CGFloat) fmin(p2.y, fmin(transformedStart, transformedEnd) + fabs(transformedEnd - transformedStart))); + } else { + partition1EndPoint = CGPointMake([PNLineChart xOfY:(CGFloat) fmin(p1.y, fmin(transformedStart, transformedEnd) + fabs(transformedEnd - transformedStart)) + betweenPoint1:p1 + andPoint2:p2], (CGFloat) fmin(p1.y, fmin(transformedStart, transformedEnd) + fabs(transformedEnd - transformedStart))); + partition2EndPoint = CGPointMake([PNLineChart xOfY:(CGFloat) fmax(p2.y, fmin(transformedStart, transformedEnd)) + betweenPoint1:p1 + andPoint2:p2], (CGFloat) fmax(p2.y, fmin(transformedStart, transformedEnd))); + } + if (p1.y != partition1EndPoint.y) { + if (p1.y <= partition1EndPoint.y) { + partition1EndPoint.y = partition1EndPoint.y - 0.001; + } else { + partition1EndPoint.y = partition1EndPoint.y + 0.001; + } + partition1 = [self colorRangesBetweenP1:p1 + P2:partition1EndPoint + rangeColors:rangeColors + defaultColor:defaultColor]; + } + partition2 = @{ + @"color": aColorForRangeInfo.color, + @"from": [NSValue valueWithCGPoint:partition1EndPoint], + @"to": [NSValue valueWithCGPoint:partition2EndPoint]}; + if (p2.y != partition2EndPoint.y) { + if (p2.y <= partition2EndPoint.y) { + partition2EndPoint.y = partition2EndPoint.y - 0.001; + } else { + partition2EndPoint.y = partition2EndPoint.y + 0.001; + } + + partition3 = [self colorRangesBetweenP1:partition2EndPoint + P2:p2 + rangeColors:rangeColors + defaultColor:defaultColor]; + } + return [[partition1 arrayByAddingObject:partition2] arrayByAddingObjectsFromArray:partition3]; + } + } + } + + return @[@{ + @"color": defaultColor, + @"from": [NSValue valueWithCGPoint:p1], + @"to": [NSValue valueWithCGPoint:p2]}]; + +} + + +- (void)setupDefaultValues { + [super setupDefaultValues]; + // Initialization code + self.backgroundColor = [UIColor whiteColor]; + self.clipsToBounds = YES; + self.chartLineArray = [NSMutableArray new]; + _showLabel = YES; + _showGenYLabels = YES; + _pathPoints = [[NSMutableArray alloc] init]; + _endPointsOfPath = [[NSMutableArray alloc] init]; + self.userInteractionEnabled = YES; + + _yFixedValueMin = -FLT_MAX; + _yFixedValueMax = -FLT_MAX; + _yValueMax = -FLT_MAX; + _yValueMin = -FLT_MAX; + _yLabelNum = 5; + _yLabelHeight = [[[[PNChartLabel alloc] init] font] pointSize]; + +// _chartMargin = 40; + + _chartMarginLeft = 25.0; + _chartMarginRight = 25.0; + _chartMarginTop = 25.0; + _chartMarginBottom = 25.0; + + _yLabelFormat = @"%1.f"; + + _chartCavanWidth = self.frame.size.width - _chartMarginLeft - _chartMarginRight; + _chartCavanHeight = self.frame.size.height - _chartMarginBottom - _chartMarginTop; + + // Coordinate Axis Default Values + _showCoordinateAxis = NO; + _axisColor = [UIColor colorWithRed:0.4f green:0.4f blue:0.4f alpha:1.f]; + _axisWidth = 1.f; + + // do not create curved line chart by default + _showSmoothLines = NO; + +} + +#pragma mark - tools + ++ (CGSize)sizeOfString:(NSString *)text withWidth:(float)width font:(UIFont *)font { + CGSize size = CGSizeMake(width, MAXFLOAT); + + if ([text respondsToSelector:@selector(boundingRectWithSize:options:attributes:context:)]) { + NSDictionary *tdic = @{NSFontAttributeName: font}; + size = [text boundingRectWithSize:size + options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading + attributes:tdic + context:nil].size; + } else { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + size = [text sizeWithFont:font constrainedToSize:size lineBreakMode:NSLineBreakByCharWrapping]; +#pragma clang diagnostic pop + } + + return size; +} + ++ (CGPoint)midPointBetweenPoint1:(CGPoint)point1 andPoint2:(CGPoint)point2 { + return CGPointMake((point1.x + point2.x) / 2, (point1.y + point2.y) / 2); +} + ++ (CGFloat)xOfY:(CGFloat)y betweenPoint1:(CGPoint)point1 andPoint2:(CGPoint)point2 { + if (point2.x != point1.x) { + CGFloat m = (point2.y - point1.y) / (point2.x - point1.x); + CGFloat a = point2.y - m * point2.x; + // y = mx + a + // y2 = mx * a : a = y2 - mx + // formulate = y - y1 = m (x - x1) = mx - mx1 -> mx = y - y1 + mx1 -> + // y = mx + a : x = (y - a)/m + // x = (y - y1 + mx1) / m + if (m == 0) { + return NAN; + } else { + return (y - a) / m; + } + } + return point1.x; +} + + ++ (CGPoint)controlPointBetweenPoint1:(CGPoint)point1 andPoint2:(CGPoint)point2 { + CGPoint controlPoint = [self midPointBetweenPoint1:point1 andPoint2:point2]; + CGFloat diffY = abs((int) (point2.y - controlPoint.y)); + if (point1.y < point2.y) + controlPoint.y += diffY; + else if (point1.y > point2.y) + controlPoint.y -= diffY; + return controlPoint; +} + +- (void)drawTextInContext:(CGContextRef)ctx text:(NSString *)text inRect:(CGRect)rect font:(UIFont *)font color:(UIColor *)color { + if (IOS7_OR_LATER) { + NSMutableParagraphStyle *priceParagraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy]; + priceParagraphStyle.lineBreakMode = NSLineBreakByTruncatingTail; + priceParagraphStyle.alignment = NSTextAlignmentLeft; + + if (color != nil) { + [text drawInRect:rect + withAttributes:@{NSParagraphStyleAttributeName: priceParagraphStyle, NSFontAttributeName: font, + NSForegroundColorAttributeName: color}]; + } else { + [text drawInRect:rect + withAttributes:@{NSParagraphStyleAttributeName: priceParagraphStyle, NSFontAttributeName: font}]; + } + } else { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + [text drawInRect:rect + withFont:font + lineBreakMode:NSLineBreakByTruncatingTail + alignment:NSTextAlignmentLeft]; +#pragma clang diagnostic pop + } +} + +- (NSString *)formatYLabel:(double)value { + + if (self.yLabelBlockFormatter) { + return self.yLabelBlockFormatter((CGFloat) value); + } else { + if (!self.thousandsSeparator) { + NSString *format = self.yLabelFormat ?: @"%1.f"; + return [NSString stringWithFormat:format, value]; + } + + NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; + [numberFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4]; + [numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle]; + return [numberFormatter stringFromNumber:@(value)]; + } +} + +- (UIView *)getLegendWithMaxWidth:(CGFloat)mWidth { + if ([self.chartData count] < 1) { + return nil; + } + + /* This is a short line that refers to the chart data */ + CGFloat legendLineWidth = 40; + + /* x and y are the coordinates of the starting point of each legend item */ + CGFloat x = 0; + CGFloat y = 0; + + /* accumulated height */ + CGFloat totalHeight = 0; + CGFloat totalWidth = 0; + + NSMutableArray *legendViews = [[NSMutableArray alloc] init]; + + /* Determine the max width of each legend item */ + CGFloat maxLabelWidth; + if (self.legendStyle == PNLegendItemStyleStacked) { + maxLabelWidth = mWidth - legendLineWidth; + } else { + maxLabelWidth = MAXFLOAT; + } + + /* this is used when labels wrap text and the line + * should be in the middle of the first row */ + CGFloat singleRowHeight = [PNLineChart sizeOfString:@"Test" + withWidth:MAXFLOAT + font:self.legendFont ? self.legendFont : [UIFont systemFontOfSize:12.0f]].height; + + NSUInteger counter = 0; + NSUInteger rowWidth = 0; + NSUInteger rowMaxHeight = 0; + + for (PNLineChartData *pdata in self.chartData) { + /* Expected label size*/ + CGSize labelsize = [PNLineChart sizeOfString:pdata.dataTitle + withWidth:maxLabelWidth + font:self.legendFont ? self.legendFont : [UIFont systemFontOfSize:12.0f]]; + + /* draw lines */ + if ((rowWidth + labelsize.width + legendLineWidth > mWidth) && (self.legendStyle == PNLegendItemStyleSerial)) { + rowWidth = 0; + x = 0; + y += rowMaxHeight; + rowMaxHeight = 0; + } + rowWidth += labelsize.width + legendLineWidth; + totalWidth = self.legendStyle == PNLegendItemStyleSerial ? fmaxf(rowWidth, totalWidth) : fmaxf(totalWidth, labelsize.width + legendLineWidth); + + /* If there is inflection decorator, the line is composed of two lines + * and this is the space that separates two lines in order to put inflection + * decorator */ + + CGFloat inflexionWidthSpacer = pdata.inflexionPointStyle == PNLineChartPointStyleTriangle ? pdata.inflexionPointWidth / 2 : pdata.inflexionPointWidth; + + CGFloat halfLineLength; + + if (pdata.inflexionPointStyle != PNLineChartPointStyleNone) { + halfLineLength = (CGFloat) ((legendLineWidth * 0.8 - inflexionWidthSpacer) / 2); + } else { + halfLineLength = (CGFloat) (legendLineWidth * 0.8); + } + + UIView *line = [[UIView alloc] initWithFrame:CGRectMake((CGFloat) (x + legendLineWidth * 0.1), y + (singleRowHeight - pdata.lineWidth) / 2, halfLineLength, pdata.lineWidth)]; + + line.backgroundColor = pdata.color; + line.alpha = pdata.alpha; + [legendViews addObject:line]; + + if (pdata.inflexionPointStyle != PNLineChartPointStyleNone) { + line = [[UIView alloc] initWithFrame:CGRectMake((CGFloat) (x + legendLineWidth * 0.1 + halfLineLength + inflexionWidthSpacer), y + (singleRowHeight - pdata.lineWidth) / 2, halfLineLength, pdata.lineWidth)]; + line.backgroundColor = pdata.color; + line.alpha = pdata.alpha; + [legendViews addObject:line]; + } + + // Add inflexion type + UIColor *inflexionPointColor = pdata.inflexionPointColor; + if (!inflexionPointColor) { + inflexionPointColor = pdata.color; + } + [legendViews addObject:[self drawInflexion:pdata.inflexionPointWidth + center:CGPointMake(x + legendLineWidth / 2, y + singleRowHeight / 2) + strokeWidth:pdata.lineWidth + inflexionStyle:pdata.inflexionPointStyle + andColor:inflexionPointColor + andAlpha:pdata.alpha]]; + + UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(x + legendLineWidth, y, labelsize.width, labelsize.height)]; + label.text = pdata.dataTitle; + label.textColor = self.legendFontColor ? self.legendFontColor : [UIColor blackColor]; + label.font = self.legendFont ? self.legendFont : [UIFont systemFontOfSize:12.0f]; + label.lineBreakMode = NSLineBreakByWordWrapping; + label.numberOfLines = 0; + + rowMaxHeight = (NSUInteger) fmaxf(rowMaxHeight, labelsize.height); + x += self.legendStyle == PNLegendItemStyleStacked ? 0 : labelsize.width + legendLineWidth; + y += self.legendStyle == PNLegendItemStyleStacked ? labelsize.height : 0; + + + totalHeight = self.legendStyle == PNLegendItemStyleSerial ? fmaxf(totalHeight, rowMaxHeight + y) : totalHeight + labelsize.height; + + [legendViews addObject:label]; + counter++; + } + + UIView *legend = [[UIView alloc] initWithFrame:CGRectMake(0, 0, mWidth, totalHeight)]; + + for (UIView *v in legendViews) { + [legend addSubview:v]; + } + return legend; +} + + +- (UIImageView *)drawInflexion:(CGFloat)size center:(CGPoint)center strokeWidth:(CGFloat)sw inflexionStyle:(PNLineChartPointStyle)type andColor:(UIColor *)color andAlpha:(CGFloat)alfa { + //Make the size a little bigger so it includes also border stroke + CGSize aSize = CGSizeMake(size + sw, size + sw); + + + UIGraphicsBeginImageContextWithOptions(aSize, NO, 0.0); + CGContextRef context = UIGraphicsGetCurrentContext(); + + + if (type == PNLineChartPointStyleCircle) { + CGContextAddArc(context, (size + sw) / 2, (size + sw) / 2, size / 2, 0, (CGFloat) (M_PI * 2), YES); + } else if (type == PNLineChartPointStyleSquare) { + CGContextAddRect(context, CGRectMake(sw / 2, sw / 2, size, size)); + } else if (type == PNLineChartPointStyleTriangle) { + CGContextMoveToPoint(context, sw / 2, size + sw / 2); + CGContextAddLineToPoint(context, size + sw / 2, size + sw / 2); + CGContextAddLineToPoint(context, size / 2 + sw / 2, sw / 2); + CGContextAddLineToPoint(context, sw / 2, size + sw / 2); + CGContextClosePath(context); + } + + //Set some stroke properties + CGContextSetLineWidth(context, sw); + CGContextSetAlpha(context, alfa); + CGContextSetStrokeColorWithColor(context, color.CGColor); + + //Finally draw + CGContextDrawPath(context, kCGPathStroke); + + //now get the image from the context + UIImage *squareImage = UIGraphicsGetImageFromCurrentImageContext(); + + UIGraphicsEndImageContext(); + + //// Translate origin + CGFloat originX = (CGFloat) (center.x - (size + sw) / 2.0); + CGFloat originY = (CGFloat) (center.y - (size + sw) / 2.0); + + UIImageView *squareImageView = [[UIImageView alloc] initWithImage:squareImage]; + [squareImageView setFrame:CGRectMake(originX, originY, size + sw, size + sw)]; + return squareImageView; +} + +#pragma mark setter and getter + +- (CATextLayer *)createPointLabelFor:(CGFloat)grade pointCenter:(CGPoint)pointCenter width:(CGFloat)width withChartData:(PNLineChartData *)chartData { + CATextLayer *textLayer = [[CATextLayer alloc] init]; + [textLayer setAlignmentMode:kCAAlignmentCenter]; + [textLayer setForegroundColor:[chartData.pointLabelColor CGColor]]; + [textLayer setBackgroundColor:self.backgroundColor.CGColor]; +// [textLayer setBackgroundColor:[self.backgroundColor colorWithAlphaComponent:0.8].CGColor]; +// [textLayer setCornerRadius:(CGFloat) (textLayer.fontSize / 8.0)]; + + if (chartData.pointLabelFont != nil) { + [textLayer setFont:(__bridge CFTypeRef) (chartData.pointLabelFont)]; + textLayer.fontSize = [chartData.pointLabelFont pointSize]; + } + + CGFloat textHeight = (CGFloat) (textLayer.fontSize * 1.1); + // FIXME: convert the grade to string and use its length instead of hardcoding 8 + CGFloat textWidth = width * 8; + CGFloat textStartPosY; + + textStartPosY = pointCenter.y - textLayer.fontSize; + + [self.layer addSublayer:textLayer]; + + if (chartData.pointLabelFormat != nil) { + [textLayer setString:[[NSString alloc] initWithFormat:chartData.pointLabelFormat, grade]]; + } else { + [textLayer setString:[[NSString alloc] initWithFormat:_yLabelFormat, grade]]; + } + + [textLayer setFrame:CGRectMake(0, 0, textWidth, textHeight)]; + [textLayer setPosition:CGPointMake(pointCenter.x, textStartPosY)]; + textLayer.contentsScale = [UIScreen mainScreen].scale; + + return textLayer; +} + +- (CABasicAnimation *)fadeAnimation { + CABasicAnimation *fadeAnimation = nil; + if (self.displayAnimated) { + fadeAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"]; + fadeAnimation.fromValue = @0.0F; + fadeAnimation.toValue = @1.0F; + fadeAnimation.duration = 2.0; + } + return fadeAnimation; +} + +- (CABasicAnimation *)pathAnimation { + if (self.displayAnimated && !_pathAnimation) { + _pathAnimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"]; + _pathAnimation.duration = 1.0; + _pathAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; + _pathAnimation.fromValue = @0.0f; + _pathAnimation.toValue = @1.0f; + } + if(!self.displayAnimated) { + _pathAnimation = nil; + } + return _pathAnimation; +} + +@end diff --git a/Ifish/controllers/HotBar/Lib/PNChart/PNLineChartData.h b/Ifish/controllers/HotBar/Lib/PNChart/PNLineChartData.h new file mode 100755 index 0000000..1f3e411 --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/PNChart/PNLineChartData.h @@ -0,0 +1,62 @@ +// +// Created by Jörg Polakowski on 14/12/13. +// Copyright (c) 2013 kevinzhow. All rights reserved. +// + +#import +#import + +typedef NS_ENUM(NSUInteger, PNLineChartPointStyle) { + PNLineChartPointStyleNone = 0, + PNLineChartPointStyleCircle = 1, + PNLineChartPointStyleSquare = 3, + PNLineChartPointStyleTriangle = 4 +}; + +@class PNLineChartDataItem; + +typedef PNLineChartDataItem *(^LCLineChartDataGetter)(NSUInteger item); + +@interface PNLineChartColorRange : NSObject + +@property(nonatomic) NSRange range; +@property(nonatomic) BOOL inclusive; +@property(nonatomic, retain) UIColor *color; + +- (id)initWithRange:(NSRange)range color:(UIColor *)color; +- (id)initWithRange:(NSRange)range color:(UIColor *)color inclusive:(BOOL)isInclusive; + +@end + +@interface PNLineChartData : NSObject + +@property (strong) UIColor *color; +@property (nonatomic) CGFloat alpha; +@property NSUInteger itemCount; +@property (copy) LCLineChartDataGetter getData; +@property (strong, nonatomic) NSString *dataTitle; + +@property (nonatomic) BOOL showPointLabel; +@property (nonatomic) UIColor *pointLabelColor; +@property (nonatomic) UIFont *pointLabelFont; +@property (nonatomic) NSString *pointLabelFormat; + +@property (nonatomic, assign) PNLineChartPointStyle inflexionPointStyle; +@property (nonatomic) UIColor *inflexionPointColor; + +/** + * if rangeColor is set and the lineChartData values are within any + * of the given range then use the rangeColor.color otherwise use + * self.color for the rest of the graph + */ +@property(strong) NSArray *rangeColors; + +/** + * If PNLineChartPointStyle is circle, this returns the circle's diameter. + * If PNLineChartPointStyle is square, each point is a square with each side equal in length to this value. + */ +@property (nonatomic, assign) CGFloat inflexionPointWidth; + +@property (nonatomic, assign) CGFloat lineWidth; + +@end diff --git a/Ifish/controllers/HotBar/Lib/PNChart/PNLineChartData.m b/Ifish/controllers/HotBar/Lib/PNChart/PNLineChartData.m new file mode 100755 index 0000000..18c0061 --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/PNChart/PNLineChartData.m @@ -0,0 +1,66 @@ +// +// Created by Jörg Polakowski on 14/12/13. +// Copyright (c) 2013 kevinzhow. All rights reserved. +// + +#import "PNLineChartData.h" + + +@implementation PNLineChartColorRange + +- (id)initWithRange:(NSRange)range color:(UIColor *)color { + self = [super init]; + if (self) { + self.range = range; + self.color = color; + self.inclusive = NO; + } + return self; +} + + +- (id)initWithRange:(NSRange)range color:(UIColor *)color inclusive:(BOOL)isInclusive { + self = [super init]; + if (self) { + self.range = range; + self.color = color; + self.inclusive = isInclusive; + } + return self; +} + + +- (id)copyWithZone:(NSZone *)zone { + PNLineChartColorRange *copy = [[self class] allocWithZone:zone]; + copy.color = self.color; + copy.range = self.range; + return copy; +} + +@end + +@implementation PNLineChartData + +- (id)init +{ + self = [super init]; + if (self) { + [self setupDefaultValues]; + } + + return self; +} + +- (void)setupDefaultValues +{ + _inflexionPointStyle = PNLineChartPointStyleNone; + _inflexionPointWidth = 6.f; + _lineWidth = 2.f; + _alpha = 1.f; + _showPointLabel = NO; + _pointLabelColor = [UIColor blackColor]; + _pointLabelFormat = @"%1.f"; + _rangeColors = nil; +} + +@end diff --git a/Ifish/controllers/HotBar/Lib/PNChart/PNLineChartDataItem.h b/Ifish/controllers/HotBar/Lib/PNChart/PNLineChartDataItem.h new file mode 100755 index 0000000..ad2d23d --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/PNChart/PNLineChartDataItem.h @@ -0,0 +1,17 @@ +// +// Created by Jörg Polakowski on 14/12/13. +// Copyright (c) 2013 kevinzhow. All rights reserved. +// + +#import +#import + +@interface PNLineChartDataItem : NSObject + ++ (PNLineChartDataItem *)dataItemWithY:(CGFloat)y; ++ (PNLineChartDataItem *)dataItemWithY:(CGFloat)y andRawY:(CGFloat)rawY; + +@property (readonly) CGFloat y; // should be within the y range +@property (readonly) CGFloat rawY; // this is the raw value, used for point label. + +@end diff --git a/Ifish/controllers/HotBar/Lib/PNChart/PNLineChartDataItem.m b/Ifish/controllers/HotBar/Lib/PNChart/PNLineChartDataItem.m new file mode 100755 index 0000000..1beea91 --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/PNChart/PNLineChartDataItem.m @@ -0,0 +1,38 @@ +// +// Created by Jörg Polakowski on 14/12/13. +// Copyright (c) 2013 kevinzhow. All rights reserved. +// + +#import "PNLineChartDataItem.h" + +@interface PNLineChartDataItem () + +- (id)initWithY:(CGFloat)y andRawY:(CGFloat)rawY; + +@property (readwrite) CGFloat y; // should be within the y range +@property (readwrite) CGFloat rawY; // this is the raw value, used for point label. + +@end + +@implementation PNLineChartDataItem + ++ (PNLineChartDataItem *)dataItemWithY:(CGFloat)y +{ + return [[PNLineChartDataItem alloc] initWithY:y andRawY:y]; +} + ++ (PNLineChartDataItem *)dataItemWithY:(CGFloat)y andRawY:(CGFloat)rawY { + return [[PNLineChartDataItem alloc] initWithY:y andRawY:rawY]; +} + +- (id)initWithY:(CGFloat)y andRawY:(CGFloat)rawY +{ + if ((self = [super init])) { + self.y = y; + self.rawY = rawY; + } + + return self; +} + +@end diff --git a/Ifish/controllers/HotBar/Lib/PNChart/PNPieChart.h b/Ifish/controllers/HotBar/Lib/PNChart/PNPieChart.h new file mode 100755 index 0000000..20c61e2 --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/PNChart/PNPieChart.h @@ -0,0 +1,72 @@ +// +// PNPieChart.h +// PNChartDemo +// +// Created by Hang Zhang on 14-5-5. +// Copyright (c) 2014年 kevinzhow. All rights reserved. +// + +#import +#import "PNPieChartDataItem.h" +#import "PNGenericChart.h" +#import "PNChartDelegate.h" + +#if __IPHONE_OS_VERSION_MAX_ALLOWED < __IPHONE_10_0 +@interface PNPieChart : PNGenericChart +#else +@interface PNPieChart : PNGenericChart +#endif + +- (id)initWithFrame:(CGRect)frame items:(NSArray *)items; + +@property (nonatomic, readonly) NSArray *items; + +/** Default is 18-point Avenir Medium. */ +@property (nonatomic) UIFont *descriptionTextFont; + +/** Default is white. */ +@property (nonatomic) UIColor *descriptionTextColor; + +/** Default is black, with an alpha of 0.4. */ +@property (nonatomic) UIColor *descriptionTextShadowColor; + +/** Default is CGSizeMake(0, 1). */ +@property (nonatomic) CGSize descriptionTextShadowOffset; + +/** Default is 1.0. */ +@property (nonatomic) NSTimeInterval duration; + +/** Show only values, this is useful when legend is present */ +@property (nonatomic) BOOL showOnlyValues; + +/** Show absolute values not relative i.e. percentages */ +@property (nonatomic) BOOL showAbsoluteValues; + +/** Hide percentage labels less than cutoff value */ +@property (nonatomic, assign) CGFloat labelPercentageCutoff; + +/** Default YES. */ +@property (nonatomic) BOOL shouldHighlightSectorOnTouch; + +/** Current outer radius. Override recompute() to change this. **/ +@property (nonatomic) CGFloat outerCircleRadius; + +/** Current inner radius. Override recompute() to change this. **/ +@property (nonatomic) CGFloat innerCircleRadius; + +@property (nonatomic, weak) id delegate; + +/** Update chart items. Does not update chart itself. */ +- (void)updateChartData:(NSArray *)data; + +/** Multiple selection */ +@property (nonatomic, assign) BOOL enableMultipleSelection; + +/** show only tiles, not values or percentage */ +@property (nonatomic) BOOL hideValues; + +- (void)strokeChart; + +- (void)recompute; + +@end diff --git a/Ifish/controllers/HotBar/Lib/PNChart/PNPieChart.m b/Ifish/controllers/HotBar/Lib/PNChart/PNPieChart.m new file mode 100755 index 0000000..94e6614 --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/PNChart/PNPieChart.m @@ -0,0 +1,511 @@ +// +// PNPieChart.m +// PNChartDemo +// +// Created by Hang Zhang on 14-5-5. +// Copyright (c) 2014年 kevinzhow. All rights reserved. +// + +#import "PNPieChart.h" +//needed for the expected label size +#import "PNLineChart.h" + +@interface PNPieChart() + +@property (nonatomic) NSArray *items; +@property (nonatomic) NSArray *endPercentages; + +@property (nonatomic) UIView *contentView; +@property (nonatomic) CAShapeLayer *pieLayer; +@property (nonatomic) NSMutableArray *descriptionLabels; +@property (strong, nonatomic) CAShapeLayer *sectorHighlight; + +@property (nonatomic, strong) NSMutableDictionary *selectedItems; + +- (void)loadDefault; + +- (UILabel *)descriptionLabelForItemAtIndex:(NSUInteger)index; +- (PNPieChartDataItem *)dataItemForIndex:(NSUInteger)index; +- (CGFloat)startPercentageForItemAtIndex:(NSUInteger)index; +- (CGFloat)endPercentageForItemAtIndex:(NSUInteger)index; +- (CGFloat)ratioForItemAtIndex:(NSUInteger)index; + +- (CAShapeLayer *)newCircleLayerWithRadius:(CGFloat)radius + borderWidth:(CGFloat)borderWidth + fillColor:(UIColor *)fillColor + borderColor:(UIColor *)borderColor + startPercentage:(CGFloat)startPercentage + endPercentage:(CGFloat)endPercentage; + + +@end + + +@implementation PNPieChart + +-(id)initWithFrame:(CGRect)frame items:(NSArray *)items{ + self = [self initWithFrame:frame]; + if(self){ + _items = [NSArray arrayWithArray:items]; + [self baseInit]; + } + + return self; +} + +- (void)awakeFromNib{ + [super awakeFromNib]; + [self baseInit]; +} + +- (void)baseInit{ + _selectedItems = [NSMutableDictionary dictionary]; + //在绘制圆形时,应当考虑矩形的宽和高的大小问题,当宽大于高时,绘制饼图时,会超出整个view的范围,因此建议在此处进行判断 + + CGFloat minimal = (CGRectGetWidth(self.bounds) < CGRectGetHeight(self.bounds)) ? CGRectGetWidth(self.bounds) : CGRectGetHeight(self.bounds); + + _outerCircleRadius = minimal / 2; + _innerCircleRadius = minimal / 6; +// _outerCircleRadius = CGRectGetWidth(self.bounds) / 2; +// _innerCircleRadius = CGRectGetWidth(self.bounds) / 6; + _descriptionTextColor = [UIColor whiteColor]; + _descriptionTextFont = [UIFont fontWithName:@"Avenir-Medium" size:18.0]; + _descriptionTextShadowColor = [[UIColor blackColor] colorWithAlphaComponent:0.4]; + _descriptionTextShadowOffset = CGSizeMake(0, 1); + _duration = 1.0; + _shouldHighlightSectorOnTouch = YES; + _enableMultipleSelection = NO; + _hideValues = NO; + + [super setupDefaultValues]; + [self loadDefault]; +} + +- (void)loadDefault{ + __block CGFloat currentTotal = 0; + CGFloat total = [[self.items valueForKeyPath:@"@sum.value"] floatValue]; + NSMutableArray *endPercentages = [NSMutableArray new]; + [_items enumerateObjectsUsingBlock:^(PNPieChartDataItem *item, NSUInteger idx, BOOL *stop) { + if (total == 0){ + [endPercentages addObject:@(1.0 / _items.count * (idx + 1))]; + }else{ + currentTotal += item.value; + [endPercentages addObject:@(currentTotal / total)]; + } + }]; + self.endPercentages = [endPercentages copy]; + + [_contentView removeFromSuperview]; + _contentView = [[UIView alloc] initWithFrame:self.bounds]; + [self addSubview:_contentView]; + _descriptionLabels = [NSMutableArray new]; + + _pieLayer = [CAShapeLayer layer]; + [_contentView.layer addSublayer:_pieLayer]; + +} + +/** Override this to change how inner attributes are computed. **/ +- (void)recompute { + + //同理 + CGFloat minimal = (CGRectGetWidth(self.bounds) < CGRectGetHeight(self.bounds)) ? CGRectGetWidth(self.bounds) : CGRectGetHeight(self.bounds); + self.outerCircleRadius = minimal / 2; + self.innerCircleRadius = minimal / 6; +} + +#pragma mark - + +- (void)strokeChart{ + [self loadDefault]; + [self recompute]; + + PNPieChartDataItem *currentItem; + for (int i = 0; i < _items.count; i++) { + currentItem = [self dataItemForIndex:i]; + + + CGFloat startPercentage = [self startPercentageForItemAtIndex:i]; + CGFloat endPercentage = [self endPercentageForItemAtIndex:i]; + + CGFloat radius = _innerCircleRadius + (_outerCircleRadius - _innerCircleRadius) / 2; + CGFloat borderWidth = _outerCircleRadius - _innerCircleRadius; + + CAShapeLayer *currentPieLayer = [self newCircleLayerWithRadius:radius + borderWidth:borderWidth + fillColor:[UIColor clearColor] + borderColor:currentItem.color + startPercentage:startPercentage + endPercentage:endPercentage]; + [_pieLayer addSublayer:currentPieLayer]; + } + + [self maskChart]; + + for (int i = 0; i < _items.count; i++) { + UILabel *descriptionLabel = [self descriptionLabelForItemAtIndex:i]; + [_contentView addSubview:descriptionLabel]; + [_descriptionLabels addObject:descriptionLabel]; + } + + [self addAnimationIfNeeded]; +} + +- (UILabel *)descriptionLabelForItemAtIndex:(NSUInteger)index{ + PNPieChartDataItem *currentDataItem = [self dataItemForIndex:index]; + CGFloat distance = _innerCircleRadius + (_outerCircleRadius - _innerCircleRadius) / 2; + CGFloat centerPercentage = ([self startPercentageForItemAtIndex:index] + [self endPercentageForItemAtIndex:index])/ 2; + CGFloat rad = centerPercentage * 2 * M_PI; + + UILabel *descriptionLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 80)]; + NSString *titleText = currentDataItem.textDescription; + + NSString *titleValue; + + if (self.showAbsoluteValues) { + titleValue = [NSString stringWithFormat:@"%.0f",currentDataItem.value]; + }else{ + titleValue = [NSString stringWithFormat:@"%.0f%%",[self ratioForItemAtIndex:index] * 100]; + } + + if (self.hideValues) + descriptionLabel.text = titleText; + else if(!titleText || self.showOnlyValues) + descriptionLabel.text = titleValue; + else { + NSString* str = [titleValue stringByAppendingString:[NSString stringWithFormat:@"\n%@",titleText]]; + descriptionLabel.text = str ; + } + + //If value is less than cutoff, show no label + if ([self ratioForItemAtIndex:index] < self.labelPercentageCutoff ) + { + descriptionLabel.text = nil; + } + + CGPoint center = CGPointMake(_outerCircleRadius + distance * sin(rad), + _outerCircleRadius - distance * cos(rad)); + + descriptionLabel.font = _descriptionTextFont; + CGSize labelSize = [descriptionLabel.text sizeWithAttributes:@{NSFontAttributeName:descriptionLabel.font}]; + descriptionLabel.frame = CGRectMake(descriptionLabel.frame.origin.x, descriptionLabel.frame.origin.y, + descriptionLabel.frame.size.width, labelSize.height); + descriptionLabel.numberOfLines = 0; + descriptionLabel.textColor = _descriptionTextColor; + descriptionLabel.shadowColor = _descriptionTextShadowColor; + descriptionLabel.shadowOffset = _descriptionTextShadowOffset; + descriptionLabel.textAlignment = NSTextAlignmentCenter; + descriptionLabel.center = center; + descriptionLabel.alpha = 0; + descriptionLabel.backgroundColor = [UIColor clearColor]; + return descriptionLabel; +} + +- (void)updateChartData:(NSArray *)items { + self.items = items; +} + +- (PNPieChartDataItem *)dataItemForIndex:(NSUInteger)index{ + return self.items[index]; +} + +- (CGFloat)startPercentageForItemAtIndex:(NSUInteger)index{ + if(index == 0){ + return 0; + } + + return [_endPercentages[index - 1] floatValue]; +} + +- (CGFloat)endPercentageForItemAtIndex:(NSUInteger)index{ + return [_endPercentages[index] floatValue]; +} + +- (CGFloat)ratioForItemAtIndex:(NSUInteger)index{ + return [self endPercentageForItemAtIndex:index] - [self startPercentageForItemAtIndex:index]; +} + +#pragma mark private methods + +- (CAShapeLayer *)newCircleLayerWithRadius:(CGFloat)radius + borderWidth:(CGFloat)borderWidth + fillColor:(UIColor *)fillColor + borderColor:(UIColor *)borderColor + startPercentage:(CGFloat)startPercentage + endPercentage:(CGFloat)endPercentage{ + CAShapeLayer *circle = [CAShapeLayer layer]; + + CGPoint center = CGPointMake(CGRectGetMidX(self.bounds),CGRectGetMidY(self.bounds)); + + UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:center + radius:radius + startAngle:-M_PI_2 + endAngle:M_PI_2 * 3 + clockwise:YES]; + + circle.fillColor = fillColor.CGColor; + circle.strokeColor = borderColor.CGColor; + circle.strokeStart = startPercentage; + circle.strokeEnd = endPercentage; + circle.lineWidth = borderWidth; + circle.path = path.CGPath; + + return circle; +} + +- (void)maskChart{ + CGFloat radius = _innerCircleRadius + (_outerCircleRadius - _innerCircleRadius) / 2; + CGFloat borderWidth = _outerCircleRadius - _innerCircleRadius; + CAShapeLayer *maskLayer = [self newCircleLayerWithRadius:radius + borderWidth:borderWidth + fillColor:[UIColor clearColor] + borderColor:[UIColor blackColor] + startPercentage:0 + endPercentage:1]; + + _pieLayer.mask = maskLayer; +} + +- (void)addAnimationIfNeeded{ + if (self.displayAnimated) { + CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"]; + animation.duration = _duration; + animation.fromValue = @0; + animation.toValue = @1; + animation.delegate = self; + animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; + animation.removedOnCompletion = YES; + [_pieLayer.mask addAnimation:animation forKey:@"circleAnimation"]; + } + else { + // Add description labels since no animation is required + [_descriptionLabels enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { + [obj setAlpha:1]; + }]; + } +} + +- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag{ + [_descriptionLabels enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { + [UIView animateWithDuration:0.2 animations:^(){ + [obj setAlpha:1]; + }]; + }]; +} + +- (void)didTouchAt:(CGPoint)touchLocation +{ + CGPoint circleCenter = CGPointMake(_contentView.bounds.size.width/2, _contentView.bounds.size.height/2); + + CGFloat distanceFromCenter = sqrtf(powf((touchLocation.y - circleCenter.y),2) + powf((touchLocation.x - circleCenter.x),2)); + + if (distanceFromCenter < _innerCircleRadius) { + if ([self.delegate respondsToSelector:@selector(didUnselectPieItem)]) { + [self.delegate didUnselectPieItem]; + } + [self.sectorHighlight removeFromSuperlayer]; + return; + } + + CGFloat percentage = [self findPercentageOfAngleInCircle:circleCenter fromPoint:touchLocation]; + int index = 0; + while (percentage > [self endPercentageForItemAtIndex:index]) { + index ++; + } + + if ([self.delegate respondsToSelector:@selector(userClickedOnPieIndexItem:)]) { + [self.delegate userClickedOnPieIndexItem:index]; + } + + if (self.shouldHighlightSectorOnTouch) + { + if (!self.enableMultipleSelection) + { + if (self.sectorHighlight) + [self.sectorHighlight removeFromSuperlayer]; + } + + PNPieChartDataItem *currentItem = [self dataItemForIndex:index]; + + CGFloat red,green,blue,alpha; + UIColor *old = currentItem.color; + [old getRed:&red green:&green blue:&blue alpha:&alpha]; + alpha /= 2; + UIColor *newColor = [UIColor colorWithRed:red green:green blue:blue alpha:alpha]; + + CGFloat startPercentage = [self startPercentageForItemAtIndex:index]; + CGFloat endPercentage = [self endPercentageForItemAtIndex:index]; + + self.sectorHighlight = [self newCircleLayerWithRadius:_outerCircleRadius + 5 + borderWidth:10 + fillColor:[UIColor clearColor] + borderColor:newColor + startPercentage:startPercentage + endPercentage:endPercentage]; + + if (self.enableMultipleSelection) + { + NSString *dictIndex = [NSString stringWithFormat:@"%d", index]; + CAShapeLayer *indexShape = [self.selectedItems valueForKey:dictIndex]; + if (indexShape) + { + [indexShape removeFromSuperlayer]; + [self.selectedItems removeObjectForKey:dictIndex]; + } + else + { + [self.selectedItems setObject:self.sectorHighlight forKey:dictIndex]; + [_contentView.layer addSublayer:self.sectorHighlight]; + } + } + else + { + [_contentView.layer addSublayer:self.sectorHighlight]; + } + } +} + +- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event +{ + for (UITouch *touch in touches) { + CGPoint touchLocation = [touch locationInView:_contentView]; + [self didTouchAt:touchLocation]; + } +} + +- (CGFloat) findPercentageOfAngleInCircle:(CGPoint)center fromPoint:(CGPoint)reference{ + //Find angle of line Passing In Reference And Center + CGFloat angleOfLine = atanf((reference.y - center.y) / (reference.x - center.x)); + CGFloat percentage = (angleOfLine + M_PI/2)/(2 * M_PI); + return (reference.x - center.x) > 0 ? percentage : percentage + .5; +} + +- (UIView*) getLegendWithMaxWidth:(CGFloat)mWidth{ + if ([self.items count] < 1) { + return nil; + } + + /* This is a small circle that refers to the chart data */ + CGFloat legendCircle = 16; + + CGFloat hSpacing = 0; + + CGFloat beforeLabel = legendCircle + hSpacing; + + /* x and y are the coordinates of the starting point of each legend item */ + CGFloat x = 0; + CGFloat y = 0; + + /* accumulated width and height */ + CGFloat totalWidth = 0; + CGFloat totalHeight = 0; + + NSMutableArray *legendViews = [[NSMutableArray alloc] init]; + + /* Determine the max width of each legend item */ + CGFloat maxLabelWidth; + if (self.legendStyle == PNLegendItemStyleStacked) { + maxLabelWidth = mWidth - beforeLabel; + }else{ + maxLabelWidth = MAXFLOAT; + } + + /* this is used when labels wrap text and the line + * should be in the middle of the first row */ + CGFloat singleRowHeight = [PNLineChart sizeOfString:@"Test" + withWidth:MAXFLOAT + font:self.legendFont ? self.legendFont : [UIFont systemFontOfSize:12.0f]].height; + + NSUInteger counter = 0; + NSUInteger rowWidth = 0; + NSUInteger rowMaxHeight = 0; + + for (PNPieChartDataItem *pdata in self.items) { + if (!pdata.textDescription) { + break; + } + /* Expected label size*/ + CGSize labelsize = [PNLineChart sizeOfString:pdata.textDescription + withWidth:maxLabelWidth + font:self.legendFont ? self.legendFont : [UIFont systemFontOfSize:12.0f]]; + + if ((rowWidth + labelsize.width + beforeLabel > mWidth)&&(self.legendStyle == PNLegendItemStyleSerial)) { + rowWidth = 0; + x = 0; + y += rowMaxHeight; + rowMaxHeight = 0; + } + rowWidth += labelsize.width + beforeLabel; + totalWidth = self.legendStyle == PNLegendItemStyleSerial ? fmaxf(rowWidth, totalWidth) : fmaxf(totalWidth, labelsize.width + beforeLabel); + // Add inflexion type + [legendViews addObject:[self drawInflexion:legendCircle * .6 + center:CGPointMake(x + legendCircle / 2, y + singleRowHeight / 2) + andColor:pdata.color]]; + + + UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(x + beforeLabel, y, labelsize.width, labelsize.height)]; + label.text = pdata.textDescription; + label.textColor = self.legendFontColor ? self.legendFontColor : [UIColor blackColor]; + label.font = self.legendFont ? self.legendFont : [UIFont systemFontOfSize:12.0f]; + label.lineBreakMode = NSLineBreakByWordWrapping; + label.numberOfLines = 0; + + + rowMaxHeight = fmaxf(rowMaxHeight, labelsize.height); + x += self.legendStyle == PNLegendItemStyleStacked ? 0 : labelsize.width + beforeLabel; + y += self.legendStyle == PNLegendItemStyleStacked ? labelsize.height : 0; + + + totalHeight = self.legendStyle == PNLegendItemStyleSerial ? fmaxf(totalHeight, rowMaxHeight + y) : totalHeight + labelsize.height; + [legendViews addObject:label]; + counter ++; + } + + UIView *legend = [[UIView alloc] initWithFrame:CGRectMake(0, 0, totalWidth, totalHeight)]; + + for (UIView* v in legendViews) { + [legend addSubview:v]; + } + return legend; +} + + +- (UIImageView*)drawInflexion:(CGFloat)size center:(CGPoint)center andColor:(UIColor*)color +{ + //Make the size a little bigger so it includes also border stroke + CGSize aSize = CGSizeMake(size, size); + + + UIGraphicsBeginImageContextWithOptions(aSize, NO, 0.0); + CGContextRef context = UIGraphicsGetCurrentContext(); + + CGContextAddArc(context, size/2, size/ 2, size/2, 0, M_PI*2, YES); + + + //Set some fill color + CGContextSetFillColorWithColor(context, color.CGColor); + + //Finally draw + CGContextDrawPath(context, kCGPathFill); + + //now get the image from the context + UIImage *squareImage = UIGraphicsGetImageFromCurrentImageContext(); + + UIGraphicsEndImageContext(); + + //// Translate origin + CGFloat originX = center.x - (size) / 2.0; + CGFloat originY = center.y - (size) / 2.0; + + UIImageView *squareImageView = [[UIImageView alloc]initWithImage:squareImage]; + [squareImageView setFrame:CGRectMake(originX, originY, size, size)]; + return squareImageView; +} + +/* Redraw the chart on autolayout */ +-(void)layoutSubviews { + [super layoutSubviews]; + [self strokeChart]; +} + +@end diff --git a/Ifish/controllers/HotBar/Lib/PNChart/PNPieChartDataItem.h b/Ifish/controllers/HotBar/Lib/PNChart/PNPieChartDataItem.h new file mode 100755 index 0000000..08d48e9 --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/PNChart/PNPieChartDataItem.h @@ -0,0 +1,25 @@ +// +// PNPieChartDataItem.h +// PNChartDemo +// +// Created by Hang Zhang on 14-5-5. +// Copyright (c) 2014年 kevinzhow. All rights reserved. +// + +#import +#import + +@interface PNPieChartDataItem : NSObject + ++ (instancetype)dataItemWithValue:(CGFloat)value + color:(UIColor*)color; + ++ (instancetype)dataItemWithValue:(CGFloat)value + color:(UIColor*)color + description:(NSString *)description; + +@property (nonatomic) CGFloat value; +@property (nonatomic) UIColor *color; +@property (nonatomic) NSString *textDescription; + +@end diff --git a/Ifish/controllers/HotBar/Lib/PNChart/PNPieChartDataItem.m b/Ifish/controllers/HotBar/Lib/PNChart/PNPieChartDataItem.m new file mode 100755 index 0000000..4bda818 --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/PNChart/PNPieChartDataItem.m @@ -0,0 +1,38 @@ +// +// PNPieChartDataItem.m +// PNChartDemo +// +// Created by Hang Zhang on 14-5-5. +// Copyright (c) 2014年 kevinzhow. All rights reserved. +// + +#import "PNPieChartDataItem.h" +#import + +@implementation PNPieChartDataItem + + ++ (instancetype)dataItemWithValue:(CGFloat)value + color:(UIColor*)color{ + PNPieChartDataItem *item = [PNPieChartDataItem new]; + item.value = value; + item.color = color; + return item; +} + ++ (instancetype)dataItemWithValue:(CGFloat)value + color:(UIColor*)color + description:(NSString *)description { + PNPieChartDataItem *item = [PNPieChartDataItem dataItemWithValue:value color:color]; + item.textDescription = description; + return item; +} + +- (void)setValue:(CGFloat)value{ + NSAssert(value >= 0, @"value should >= 0"); + if (value != _value){ + _value = value; + } +} + +@end diff --git a/Ifish/controllers/HotBar/Lib/PNChart/PNRadarChart.h b/Ifish/controllers/HotBar/Lib/PNChart/PNRadarChart.h new file mode 100755 index 0000000..9ce5f03 --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/PNChart/PNRadarChart.h @@ -0,0 +1,53 @@ +// +// PNRadarChart.h +// PNChartDemo +// +// Created by Lei on 15/7/1. +// Copyright (c) 2015年 kevinzhow. All rights reserved. +// + +#import +#import "PNGenericChart.h" +#import "PNRadarChartDataItem.h" + +#define MAXCIRCLE 20 + +typedef NS_ENUM(NSUInteger, PNRadarChartLabelStyle) { + PNRadarChartLabelStyleCircle = 0, + PNRadarChartLabelStyleHorizontal, + PNRadarChartLabelStyleHidden, +}; + +@interface PNRadarChart : PNGenericChart + +-(id)initWithFrame:(CGRect)frame items:(NSArray *)items valueDivider:(CGFloat)unitValue; + +/** + *Draws the chart in an animated fashion. + */ +-(void)strokeChart; + +/** Array of `RadarChartDataItem` objects, one for each corner. */ +@property (nonatomic) NSArray *chartData; +/** The unit of this chart ,default is 1 */ +@property (nonatomic) CGFloat valueDivider; +/** The maximum for the range of values to display on the chart */ +@property (nonatomic) CGFloat maxValue; +/** Default is gray. */ +@property (nonatomic) UIColor *webColor; +/** Default is green , with an alpha of 0.7 */ +@property (nonatomic) UIColor *plotColor; +/** Default is black */ +@property (nonatomic) UIColor *fontColor; +/** Default is orange */ +@property (nonatomic) UIColor *graduationColor; +/** Default is 15 */ +@property (nonatomic) CGFloat fontSize; +/** Controls the labels display style that around chart */ +@property (nonatomic, assign) PNRadarChartLabelStyle labelStyle; +/** Tap the label will display detail value ,default is YES. */ +@property (nonatomic, assign) BOOL isLabelTouchable; +/** is show graduation on the chart ,default is NO. */ +@property (nonatomic, assign) BOOL isShowGraduation; + +@end diff --git a/Ifish/controllers/HotBar/Lib/PNChart/PNRadarChart.m b/Ifish/controllers/HotBar/Lib/PNChart/PNRadarChart.m new file mode 100755 index 0000000..959a34c --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/PNChart/PNRadarChart.m @@ -0,0 +1,380 @@ +// +// PNRadarChart.m +// PNChartDemo +// +// Created by Lei on 15/7/1. +// Copyright (c) 2015年 kevinzhow. All rights reserved. +// + +#import "PNRadarChart.h" + +@interface PNRadarChart() + +@property (nonatomic) CGFloat centerX; +@property (nonatomic) CGFloat centerY; +@property (nonatomic) NSMutableArray *pointsToWebArrayArray; +@property (nonatomic) NSMutableArray *pointsToPlotArray; +@property (nonatomic) UILabel *detailLabel; +@property (nonatomic) CGFloat lengthUnit; +@property (nonatomic) CAShapeLayer *chartPlot; + +@end + + +@implementation PNRadarChart + +- (id)initWithFrame:(CGRect)frame items:(NSArray *)items valueDivider:(CGFloat)unitValue { + self=[super initWithFrame:frame]; + if (self) { + self.backgroundColor = [UIColor clearColor]; + self.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; + + //Public iVar + if ([items count]< 3)//At least three corners of A polygon ,If the count of items is less than 3 will add 3 default values + { + NSLog( @"At least three items!"); + NSArray *defaultArray = @[[PNRadarChartDataItem dataItemWithValue:0 description:@"Default"], + [PNRadarChartDataItem dataItemWithValue:0 description:@"Default"], + [PNRadarChartDataItem dataItemWithValue:0 description:@"Default"], + ]; + defaultArray = [defaultArray arrayByAddingObjectsFromArray:items]; + _chartData = [NSArray arrayWithArray:defaultArray]; + }else{ + _chartData = [NSArray arrayWithArray:items]; + } + _valueDivider = unitValue; + _maxValue = 1; + _webColor = [UIColor grayColor]; + _plotColor = [UIColor colorWithRed:.4 green:.8 blue:.4 alpha:.7]; + _fontColor = [UIColor blackColor]; + _graduationColor = [UIColor orangeColor]; + _fontSize = 15; + _labelStyle = PNRadarChartLabelStyleHorizontal; + _isLabelTouchable = YES; + _isShowGraduation = NO; + + //Private iVar + _centerX = frame.size.width/2; + _centerY = frame.size.height/2; + _pointsToWebArrayArray = [NSMutableArray array]; + _pointsToPlotArray = [NSMutableArray array]; + _lengthUnit = 0; + _chartPlot = [CAShapeLayer layer]; + _chartPlot.lineCap = kCALineCapButt; + _chartPlot.lineWidth = 1.0; + [self.layer addSublayer:_chartPlot]; + + [super setupDefaultValues]; + //init detailLabel + _detailLabel = [[UILabel alloc] init]; + _detailLabel.backgroundColor = [UIColor colorWithRed:.9 green:.9 blue:.1 alpha:.9]; + _detailLabel.textAlignment = NSTextAlignmentCenter; + _detailLabel.textColor = [UIColor colorWithWhite:1 alpha:1]; + _detailLabel.font = [UIFont systemFontOfSize:15]; + [_detailLabel setHidden:YES]; + [self addSubview:_detailLabel]; + + [self strokeChart]; + } + return self; +} + +#pragma mark - main +- (void)calculateChartPoints { + [_pointsToPlotArray removeAllObjects]; + [_pointsToWebArrayArray removeAllObjects]; + + //init Descriptions , Values and Angles. + NSMutableArray *descriptions = [NSMutableArray array]; + NSMutableArray *values = [NSMutableArray array]; + NSMutableArray *angles = [NSMutableArray array]; + for (int i=0;i<_chartData.count;i++) { + PNRadarChartDataItem *item = (PNRadarChartDataItem *)[_chartData objectAtIndex:i]; + [descriptions addObject:item.textDescription]; + [values addObject:[NSNumber numberWithFloat:item.value]]; + CGFloat angleValue = (float)i/(float)[_chartData count]*2*M_PI + M_PI_2 * 3; + [angles addObject:[NSNumber numberWithFloat:angleValue]]; + } + + //calculate all the lengths + _maxValue = [self getMaxValueFromArray:values]; + CGFloat margin = 0; + if (_labelStyle==PNRadarChartLabelStyleCircle) { + margin = MIN(_centerX , _centerY)*3/10; + }else if (_labelStyle==PNRadarChartLabelStyleHorizontal) { + margin = [self getMaxWidthLabelFromArray:descriptions withFontSize:_fontSize]; + } + CGFloat maxLength = ceil(MIN(_centerX, _centerY) - margin); + int plotCircles = (_maxValue/_valueDivider); + if (plotCircles > MAXCIRCLE) { + NSLog(@"Circle number is higher than max"); + plotCircles = MAXCIRCLE; + _valueDivider = _maxValue/plotCircles; + } + _lengthUnit = maxLength/plotCircles; + NSArray *lengthArray = [self getLengthArrayWithCircleNum:(int)plotCircles]; + + //get all the points and plot + for (NSNumber *lengthNumber in lengthArray) { + CGFloat length = [lengthNumber floatValue]; + [_pointsToWebArrayArray addObject:[self getWebPointWithLength:length angleArray:angles]]; + } + int section = 0; + for (id value in values) { + CGFloat valueFloat = [value floatValue]; + if (valueFloat>_maxValue) { + NSString *reason = [NSString stringWithFormat:@"Value number is higher than max -value: %f - maxValue: %f",valueFloat,_maxValue]; + @throw [NSException exceptionWithName:NSInvalidArgumentException reason:reason userInfo:nil]; + return; + } + + CGFloat length = valueFloat/_maxValue*maxLength; + CGFloat angle = [[angles objectAtIndex:section] floatValue]; + CGFloat x = _centerX +length*cos(angle); + CGFloat y = _centerY +length*sin(angle); + NSValue* point = [NSValue valueWithCGPoint:CGPointMake(x, y)]; + [_pointsToPlotArray addObject:point]; + section++; + } + //set the labels + [self drawLabelWithMaxLength:maxLength labelArray:descriptions angleArray:angles]; + + } +#pragma mark - Draw + +- (void)drawRect:(CGRect)rect { + // Drawing backgound + CGContextRef context = UIGraphicsGetCurrentContext(); + CGContextClearRect(context, rect); + int section = 0; + //circles + for(NSArray *pointArray in _pointsToWebArrayArray){ + //plot backgound + CGContextRef graphContext = UIGraphicsGetCurrentContext(); + CGContextBeginPath(graphContext); + CGPoint beginPoint = [[pointArray objectAtIndex:0] CGPointValue]; + CGContextMoveToPoint(graphContext, beginPoint.x, beginPoint.y); + for(NSValue* pointValue in pointArray){ + CGPoint point = [pointValue CGPointValue]; + CGContextAddLineToPoint(graphContext, point.x, point.y); + } + CGContextAddLineToPoint(graphContext, beginPoint.x, beginPoint.y); + CGContextSetStrokeColorWithColor(graphContext, _webColor.CGColor); + CGContextStrokePath(graphContext); + + } + //cuts + NSArray *largestPointArray = [_pointsToWebArrayArray lastObject]; + for (NSValue *pointValue in largestPointArray){ + section++; + if (section==1&&_isShowGraduation)continue; + + CGContextRef graphContext = UIGraphicsGetCurrentContext(); + CGContextBeginPath(graphContext); + CGContextMoveToPoint(graphContext, _centerX, _centerY); + CGPoint point = [pointValue CGPointValue]; + CGContextAddLineToPoint(graphContext, point.x, point.y); + CGContextSetStrokeColorWithColor(graphContext, _webColor.CGColor); + CGContextStrokePath(graphContext); + } + + +} + +- (void)strokeChart { + + [self calculateChartPoints]; + [self setNeedsDisplay]; + [_detailLabel setHidden:YES]; + + //Draw plot + [_chartPlot removeAllAnimations]; + UIBezierPath *plotline = [UIBezierPath bezierPath]; + CGPoint beginPoint = [[_pointsToPlotArray objectAtIndex:0] CGPointValue]; + [plotline moveToPoint:CGPointMake(beginPoint.x, beginPoint.y)]; + for(NSValue *pointValue in _pointsToPlotArray){ + CGPoint point = [pointValue CGPointValue]; + [plotline addLineToPoint:CGPointMake(point.x ,point.y)]; + + } + [plotline setLineWidth:1]; + [plotline setLineCapStyle:kCGLineCapButt]; + + _chartPlot.path = plotline.CGPath; + + _chartPlot.fillColor = _plotColor.CGColor; + + [self addAnimationIfNeeded]; + [self showGraduation]; + +// self.transform = CGAffineTransformMakeRotation(-M_PI_2); +} + +#pragma mark - Helper + +- (void)drawLabelWithMaxLength:(CGFloat)maxLength labelArray:(NSArray *)labelArray angleArray:(NSArray *)angleArray { + //set labels + int labelTag = 121; + while (true) { + UIView *label = [self viewWithTag:labelTag]; + if(!label)break; + [label removeFromSuperview]; + } + int section = 0; + CGFloat labelLength = maxLength + maxLength/10; + + for (NSString *labelString in labelArray) { + CGFloat angle = [[angleArray objectAtIndex:section] floatValue]; + CGFloat x = _centerX + labelLength *cos(angle); + CGFloat y = _centerY + labelLength *sin(angle); + + UILabel *label = [[UILabel alloc] init] ; + label.backgroundColor = [UIColor clearColor]; + label.font = [UIFont systemFontOfSize:_fontSize]; + label.textColor = _fontColor; + label.text = labelString; + label.tag = labelTag; + CGSize detailSize = [labelString sizeWithAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:_fontSize]}]; + + switch (_labelStyle) { + case PNRadarChartLabelStyleCircle: + label.frame = CGRectMake(x-5*_fontSize/2, y-_fontSize/2, 5*_fontSize, _fontSize); + label.transform = CGAffineTransformMakeRotation(((float)section/[labelArray count])*(2*M_PI)+M_PI_2 + M_PI_2 * 3); + label.textAlignment = NSTextAlignmentCenter; + break; + case PNRadarChartLabelStyleHorizontal: + if (x<_centerX) { + label.frame = CGRectMake(x-detailSize.width, y-detailSize.height/2, detailSize.width, detailSize.height); + label.textAlignment = NSTextAlignmentRight; + }else{ + label.frame = CGRectMake(x, y-detailSize.height/2, detailSize.width , detailSize.height); + label.textAlignment = NSTextAlignmentLeft; + } + if ((int)x == (int)_centerX) { + label.frame = CGRectMake(x - detailSize.width * 0.5, y - detailSize.height * 0.5, detailSize.width , detailSize.height); + label.textAlignment = NSTextAlignmentCenter; + } + break; + case PNRadarChartLabelStyleHidden: + [label setHidden:YES]; + break; + default: + break; + } + [label sizeToFit]; + + if (_isLabelTouchable) { + label.userInteractionEnabled = YES; + UITapGestureRecognizer *tapLabelGesture = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapLabel:)]; + [label addGestureRecognizer:tapLabelGesture]; + } + [self addSubview:label]; + + section ++; + } + +} + +- (void)tapLabel:(UITapGestureRecognizer *)recognizer { + UILabel *label=(UILabel*)recognizer.view; + _detailLabel.frame = CGRectMake(label.frame.origin.x, label.frame.origin.y-30, 50, 25); + for (PNRadarChartDataItem *item in _chartData) { + if ([label.text isEqualToString:item.textDescription]) { + _detailLabel.text = [NSString stringWithFormat:@"%.2f", item.value]; + break; + } + } + [_detailLabel setHidden:NO]; +} + +- (void)showGraduation { + int labelTag = 112; + while (true) { + UIView *label = [self viewWithTag:labelTag]; + if(!label)break; + [label removeFromSuperview]; + } + int section = 0; + for (NSArray *pointsArray in _pointsToWebArrayArray) { + section++; + CGPoint labelPoint = [[pointsArray objectAtIndex:0] CGPointValue]; + UILabel *graduationLabel = [[UILabel alloc] initWithFrame:CGRectMake(labelPoint.x-_lengthUnit, labelPoint.y-_lengthUnit*5/8, _lengthUnit*5/8, _lengthUnit)]; + graduationLabel.adjustsFontSizeToFitWidth = YES; + graduationLabel.tag = labelTag; + graduationLabel.font = [UIFont systemFontOfSize:ceil(_lengthUnit)]; + graduationLabel.textColor = _graduationColor; + graduationLabel.text = [NSString stringWithFormat:@"%.0f",_valueDivider*section]; + [self addSubview:graduationLabel]; + if (_isShowGraduation) { + [graduationLabel setHidden:NO]; + }else{ + [graduationLabel setHidden:YES];} + } + +} + +- (NSArray *)getWebPointWithLength:(CGFloat)length angleArray:(NSArray *)angleArray { + NSMutableArray *pointArray = [NSMutableArray array]; + for (NSNumber *angleNumber in angleArray) { + CGFloat angle = [angleNumber floatValue]; + CGFloat x = _centerX + length*cos(angle); + CGFloat y = _centerY + length*sin(angle); + [pointArray addObject:[NSValue valueWithCGPoint:CGPointMake(x,y)]]; + } + return pointArray; + +} + +- (NSArray *)getLengthArrayWithCircleNum:(int)plotCircles { + NSMutableArray *lengthArray = [NSMutableArray array]; + CGFloat length = 0; + for (int i = 0; i < plotCircles; i++) { + length += _lengthUnit; + [lengthArray addObject:[NSNumber numberWithFloat:length]]; + } + return lengthArray; +} + +- (CGFloat)getMaxWidthLabelFromArray:(NSArray *)keyArray withFontSize:(CGFloat)size { + CGFloat maxWidth = 0; + for (NSString *str in keyArray) { + CGSize detailSize = [str sizeWithAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:_fontSize]}]; + maxWidth = MAX(maxWidth, detailSize.width); + } + return maxWidth; +} + +- (CGFloat)getMaxValueFromArray:(NSArray *)valueArray { + CGFloat max = _maxValue; + for (NSNumber *valueNum in valueArray) { + CGFloat valueFloat = [valueNum floatValue]; + max = MAX(valueFloat, max); + } + return ceil(max); +} + +- (void)addAnimationIfNeeded +{ + if (self.displayAnimated) { + CABasicAnimation *animateScale = [CABasicAnimation animationWithKeyPath:@"transform.scale"]; + animateScale.fromValue = [NSNumber numberWithFloat:0.f]; + animateScale.toValue = [NSNumber numberWithFloat:1.0f]; + + CABasicAnimation *animateMove = [CABasicAnimation animationWithKeyPath:@"position"]; + animateMove.fromValue = [NSValue valueWithCGPoint:CGPointMake(_centerX, _centerY)]; + animateMove.toValue = [NSValue valueWithCGPoint:CGPointMake(0, 0)]; + + CABasicAnimation *animateAlpha = [CABasicAnimation animationWithKeyPath:@"opacity"]; + animateAlpha.fromValue = [NSNumber numberWithFloat:0.f]; + + CAAnimationGroup *aniGroup = [CAAnimationGroup animation]; + aniGroup.duration = 1.f; + aniGroup.repeatCount = 1; + aniGroup.animations = [NSArray arrayWithObjects:animateScale,animateMove,animateAlpha, nil]; + aniGroup.removedOnCompletion = YES; + + [_chartPlot addAnimation:aniGroup forKey:nil]; + } +} + +@end diff --git a/Ifish/controllers/HotBar/Lib/PNChart/PNRadarChartDataItem.h b/Ifish/controllers/HotBar/Lib/PNChart/PNRadarChartDataItem.h new file mode 100755 index 0000000..cca4f98 --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/PNChart/PNRadarChartDataItem.h @@ -0,0 +1,19 @@ +// +// PNRadarChartDataItem.h +// PNChartDemo +// +// Created by Lei on 15/7/1. +// Copyright (c) 2015年 kevinzhow. All rights reserved. +// + +#import +#import +@interface PNRadarChartDataItem : NSObject + ++ (instancetype)dataItemWithValue:(CGFloat)value + description:(NSString *)description; + +@property (nonatomic) CGFloat value; +@property (nonatomic,copy) NSString *textDescription; + +@end diff --git a/Ifish/controllers/HotBar/Lib/PNChart/PNRadarChartDataItem.m b/Ifish/controllers/HotBar/Lib/PNChart/PNRadarChartDataItem.m new file mode 100755 index 0000000..218ef6e --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/PNChart/PNRadarChartDataItem.m @@ -0,0 +1,29 @@ +// +// PNRadarChartDataItem.m +// PNChartDemo +// +// Created by Lei on 15/7/1. +// Copyright (c) 2015年 kevinzhow. All rights reserved. +// + +#import "PNRadarChartDataItem.h" + +@implementation PNRadarChartDataItem + ++ (instancetype)dataItemWithValue:(CGFloat)value + description:(NSString *)description { + PNRadarChartDataItem *item = [PNRadarChartDataItem new]; + item.value = value; + item.textDescription = description; + return item; +} + +- (void)setValue:(CGFloat)value { + if (value < 0) { + value = 0; + NSLog(@"Value value can not be negative"); + } + _value = value; +} + +@end diff --git a/Ifish/controllers/HotBar/Lib/PNChart/PNScatterChart.h b/Ifish/controllers/HotBar/Lib/PNChart/PNScatterChart.h new file mode 100755 index 0000000..aa4eab8 --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/PNChart/PNScatterChart.h @@ -0,0 +1,69 @@ +// +// PNScatterChart.h +// PNChartDemo +// +// Created by Alireza Arabi on 12/4/14. +// Copyright (c) 2014 kevinzhow. All rights reserved. +// + +#import +#import +#import "PNChartDelegate.h" +#import "PNGenericChart.h" +#import "PNScatterChartData.h" +#import "PNScatterChartDataItem.h" + +@interface PNScatterChart : PNGenericChart + +@property (nonatomic, retain) id delegate; + +/** Array of `ScatterChartData` objects, one for each line. */ +@property (nonatomic) NSArray *chartData; + +/** Controls whether to show the coordinate axis. Default is NO. */ +@property (nonatomic, getter = isShowCoordinateAxis) BOOL showCoordinateAxis; +@property (nonatomic) UIColor *axisColor; +@property (nonatomic) CGFloat axisWidth; + +/** String formatter for float values in x-axis/y-axis labels. If not set, defaults to @"%1.f" */ +@property (nonatomic, strong) NSString *xLabelFormat; +@property (nonatomic, strong) NSString *yLabelFormat; + +/** Default is true. */ +@property (nonatomic) BOOL showLabel; + +/** Default is 18-point Avenir Medium. */ +@property (nonatomic) UIFont *descriptionTextFont; + +/** Default is white. */ +@property (nonatomic) UIColor *descriptionTextColor; + +/** Default is black, with an alpha of 0.4. */ +@property (nonatomic) UIColor *descriptionTextShadowColor; + +/** Default is CGSizeMake(0, 1). */ +@property (nonatomic) CGSize descriptionTextShadowOffset; + +/** Default is 1.0. */ +@property (nonatomic) NSTimeInterval duration; + +@property (nonatomic) CGFloat AxisX_minValue; +@property (nonatomic) CGFloat AxisX_maxValue; + +@property (nonatomic) CGFloat AxisY_minValue; +@property (nonatomic) CGFloat AxisY_maxValue; + +- (void) setAxisXWithMinimumValue:(CGFloat)minVal andMaxValue:(CGFloat)maxVal toTicks:(int)numberOfTicks; +- (void) setAxisYWithMinimumValue:(CGFloat)minVal andMaxValue:(CGFloat)maxVal toTicks:(int)numberOfTicks; +- (void) setAxisXLabel:(NSArray *)array; +- (void) setAxisYLabel:(NSArray *)array; +- (void) setup; +- (void) drawLineFromPoint : (CGPoint) startPoint ToPoint : (CGPoint) endPoint WithLineWith : (CGFloat) lineWidth AndWithColor : (UIColor*) color; + +/** + * Update Chart Value + */ + +- (void)updateChartData:(NSArray *)data; + +@end diff --git a/Ifish/controllers/HotBar/Lib/PNChart/PNScatterChart.m b/Ifish/controllers/HotBar/Lib/PNChart/PNScatterChart.m new file mode 100755 index 0000000..a16cf85 --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/PNChart/PNScatterChart.m @@ -0,0 +1,445 @@ +// +// PNScatterChart.m +// PNChartDemo +// +// Created by Alireza Arabi on 12/4/14. +// Copyright (c) 2014 kevinzhow. All rights reserved. +// + +#import "PNScatterChart.h" +#import "PNColor.h" +#import "PNChartLabel.h" +#import "PNScatterChartData.h" +#import "PNScatterChartDataItem.h" + +@interface PNScatterChart () + +@property (nonatomic, weak) CAShapeLayer *pathLayer; +@property (nonatomic, weak) NSMutableArray *verticalLineLayer; +@property (nonatomic, weak) NSMutableArray *horizentalLinepathLayer; + +@property (nonatomic) CGPoint startPoint; + +@property (nonatomic) CGPoint startPointVectorX; +@property (nonatomic) CGPoint endPointVecotrX; + +@property (nonatomic) CGPoint startPointVectorY; +@property (nonatomic) CGPoint endPointVecotrY; + +@property (nonatomic) CGFloat vectorX_Steps; +@property (nonatomic) CGFloat vectorY_Steps; + +@property (nonatomic) CGFloat vectorX_Size; +@property (nonatomic) CGFloat vectorY_Size; + +@property (nonatomic) NSMutableArray *axisX_labels; +@property (nonatomic) NSMutableArray *axisY_labels; + +@property (nonatomic) int AxisX_partNumber ; +@property (nonatomic) int AxisY_partNumber ; + +@property (nonatomic) CGFloat AxisX_step ; +@property (nonatomic) CGFloat AxisY_step ; + +@property (nonatomic) CGFloat AxisX_Margin; +@property (nonatomic) CGFloat AxisY_Margin; + +@property (nonatomic) BOOL isForUpdate; + +@end + + +@implementation PNScatterChart + +#pragma mark initialization + +- (id)initWithCoder:(NSCoder *)coder +{ + self = [super initWithCoder:coder]; + + if (self) { + [self setupDefaultValues]; + } + return self; +} + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + + if (self) { + [self setupDefaultValues]; + } + return self; +} + +- (void) setup +{ + [self vectorXSetup]; + [self vectorYSetup]; +} + +- (void)setupDefaultValues +{ + [super setupDefaultValues]; + + // Initialization code + self.backgroundColor = [UIColor whiteColor]; + self.clipsToBounds = YES; + _showLabel = YES; + _isForUpdate = NO; + self.userInteractionEnabled = YES; + + // Coordinate Axis Default Values + _showCoordinateAxis = YES; + _axisColor = [UIColor colorWithRed:0.4f green:0.4f blue:0.4f alpha:1.f]; + _axisWidth = 1.f; + + // Initialization code + _AxisX_Margin = 30 ; + _AxisY_Margin = 30 ; + +// self.frame = CGRectMake((SCREEN_WIDTH - self.frame.size.width) / 2, 200, self.frame.size.width, self.frame.size.height) ; + self.backgroundColor = [UIColor clearColor]; + + _startPoint.y = self.frame.size.height - self.AxisY_Margin ; + _startPoint.x = self.AxisX_Margin ; + + _axisX_labels = [NSMutableArray array]; + _axisY_labels = [NSMutableArray array]; + + _descriptionTextColor = [UIColor blackColor]; + _descriptionTextFont = [UIFont fontWithName:@"Avenir-Medium" size:9.0]; + _descriptionTextShadowColor = [[UIColor blackColor] colorWithAlphaComponent:0.4]; + _descriptionTextShadowOffset = CGSizeMake(0, 1); + _duration = 1.0; + +} + +#pragma mark calculating axis + +- (void) setAxisXWithMinimumValue:(CGFloat)minVal andMaxValue:(CGFloat)maxVal toTicks:(int)numberOfTicks +{ + _AxisX_minValue = minVal ; + _AxisX_maxValue = maxVal ; + _AxisX_partNumber = numberOfTicks - 1; + _AxisX_step = (float)((maxVal - minVal)/_AxisX_partNumber); + + NSString *LabelFormat = self.xLabelFormat ? : @"%1.f"; + CGFloat tempValue = minVal ; + UILabel *label = [[UILabel alloc] init]; + label.text = [NSString stringWithFormat:LabelFormat,minVal] ; + [_axisX_labels addObject:label]; + for (int i = 0 ; i < _AxisX_partNumber; i++) { + tempValue = tempValue + _AxisX_step; + UILabel *tempLabel = [[UILabel alloc] init]; + tempLabel.text = [NSString stringWithFormat:LabelFormat,tempValue] ; + [_axisX_labels addObject:tempLabel]; + } +} + +- (void) setAxisYWithMinimumValue:(CGFloat)minVal andMaxValue:(CGFloat)maxVal toTicks:(int)numberOfTicks +{ + _AxisY_minValue = minVal ; + _AxisY_maxValue = maxVal ; + _AxisY_partNumber = numberOfTicks - 1; + _AxisY_step = (float)((maxVal - minVal)/_AxisY_partNumber); + + NSString *LabelFormat = self.yLabelFormat ? : @"%1.f"; + CGFloat tempValue = minVal ; + UILabel *label = [[UILabel alloc] init]; + label.text = [NSString stringWithFormat:LabelFormat,minVal] ; + [_axisY_labels addObject:label]; + for (int i = 0 ; i < _AxisY_partNumber; i++) { + tempValue = tempValue + _AxisY_step; + UILabel *tempLabel = [[UILabel alloc] init]; + tempLabel.text = [NSString stringWithFormat:LabelFormat,tempValue] ; + [_axisY_labels addObject:tempLabel]; + } +} + +- (NSArray*) getAxisMinMax:(NSArray*)xValues +{ + float min = [xValues[0] floatValue]; + float max = [xValues[0] floatValue]; + for (NSNumber *number in xValues) + { + if ([number floatValue] > max) + max = [number floatValue]; + + if ([number floatValue] < min) + min = [number floatValue]; + } + NSArray *result = @[[NSNumber numberWithFloat:min], [NSNumber numberWithFloat:max]]; + + + return result; +} + +- (void)setAxisXLabel:(NSArray *)array { + if(array.count == ++_AxisX_partNumber){ + [_axisX_labels removeAllObjects]; + for(int i=0;i= _AxisX_minValue && xValue <= _AxisX_maxValue) || !(yValue >= _AxisY_minValue && yValue <= _AxisY_maxValue)) { + NSLog(@"input is not in correct range."); + exit(0); + } + xFinilizeValue = [self mappingIsForAxisX:true WithValue:xValue]; + yFinilizeValue = [self mappingIsForAxisX:false WithValue:yValue]; + CAShapeLayer *shape = [self drawingPointsForChartData:chartData AndWithX:xFinilizeValue AndWithY:yFinilizeValue]; + self.pathLayer = shape ; + [self.layer addSublayer:self.pathLayer]; + + [self addAnimationIfNeeded]; + } + } + }); + }); +} + +- (void)addAnimationIfNeeded{ + + if (self.displayAnimated) { + CABasicAnimation *pathAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"]; + pathAnimation.duration = _duration; + pathAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; + pathAnimation.fromValue = @(0.0f); + pathAnimation.toValue = @(1.0f); + pathAnimation.fillMode = kCAFillModeForwards; + self.layer.opacity = 1; + [self.pathLayer addAnimation:pathAnimation forKey:@"fade"]; + } +} + +- (CGFloat) mappingIsForAxisX : (BOOL) isForAxisX WithValue : (CGFloat) value{ + + if (isForAxisX) { + float temp = _startPointVectorX.x + (_vectorX_Steps / 2) ; + CGFloat xPos = temp + (((value - _AxisX_minValue)/_AxisX_step) * _vectorX_Steps) ; + return xPos; + } + else { + float temp = _startPointVectorY.y - (_vectorY_Steps / 2) ; + CGFloat yPos = temp - (((value - _AxisY_minValue) /_AxisY_step) * _vectorY_Steps); + return yPos; + } + return 0; +} + +#pragma mark - Update Chart Data + +- (void)updateChartData:(NSArray *)data +{ + _chartData = data; + + // will be work in future. +} + +#pragma drawing methods + +- (void)drawRect:(CGRect)rect +{ + [super drawRect:rect]; + + CGContextRef context = UIGraphicsGetCurrentContext(); + if (_showCoordinateAxis) { + CGContextSetStrokeColorWithColor(context, [_axisColor CGColor]); + CGContextSetLineWidth(context, _axisWidth); + //drawing x vector + CGContextMoveToPoint(context, _startPoint.x, _startPoint.y); + CGContextAddLineToPoint(context, _endPointVecotrX.x, _endPointVecotrX.y); + //drawing y vector + CGContextMoveToPoint(context, _startPoint.x, _startPoint.y); + CGContextAddLineToPoint(context, _endPointVecotrY.x, _endPointVecotrY.y); + //drawing x arrow vector + CGContextMoveToPoint(context, _endPointVecotrX.x, _endPointVecotrX.y); + CGContextAddLineToPoint(context, _endPointVecotrX.x - 5, _endPointVecotrX.y + 3); + CGContextMoveToPoint(context, _endPointVecotrX.x, _endPointVecotrX.y); + CGContextAddLineToPoint(context, _endPointVecotrX.x - 5, _endPointVecotrX.y - 3); + //drawing y arrow vector + CGContextMoveToPoint(context, _endPointVecotrY.x, _endPointVecotrY.y); + CGContextAddLineToPoint(context, _endPointVecotrY.x - 3, _endPointVecotrY.y + 5); + CGContextMoveToPoint(context, _endPointVecotrY.x, _endPointVecotrY.y); + CGContextAddLineToPoint(context, _endPointVecotrY.x + 3, _endPointVecotrY.y + 5); + } + + if (_showLabel) { + //drawing x steps vector and putting axis x labels + float temp = _startPointVectorX.x + (_vectorX_Steps / 2) ; + for (int i = 0; i < _axisX_labels.count; i++) { + UIBezierPath *path = [UIBezierPath bezierPath]; + [path moveToPoint:CGPointMake(temp, _startPointVectorX.y - 2)]; + [path addLineToPoint:CGPointMake(temp, _startPointVectorX.y + 3)]; + CAShapeLayer *shapeLayer = [CAShapeLayer layer]; + shapeLayer.path = [path CGPath]; + shapeLayer.strokeColor = [_axisColor CGColor]; + shapeLayer.lineWidth = _axisWidth; + shapeLayer.fillColor = [_axisColor CGColor]; + [self.horizentalLinepathLayer addObject:shapeLayer]; + [self.layer addSublayer:shapeLayer]; + UILabel *lb = [_axisX_labels objectAtIndex:i] ; + [self showXLabel:lb InPosition:CGPointMake(temp - 15, _startPointVectorX.y + 10 )]; + temp = temp + _vectorX_Steps ; + } + //drawing y steps vector and putting axis x labels + temp = _startPointVectorY.y - (_vectorY_Steps / 2) ; + for (int i = 0; i < _axisY_labels.count; i++) { + UIBezierPath *path = [UIBezierPath bezierPath]; + [path moveToPoint:CGPointMake(_startPointVectorY.x - 3, temp)]; + [path addLineToPoint:CGPointMake( _startPointVectorY.x + 2, temp)]; + CAShapeLayer *shapeLayer = [CAShapeLayer layer]; + shapeLayer.path = [path CGPath]; + shapeLayer.strokeColor = [_axisColor CGColor]; + shapeLayer.lineWidth = _axisWidth; + shapeLayer.fillColor = [_axisColor CGColor]; + [self.verticalLineLayer addObject:shapeLayer]; + [self.layer addSublayer:shapeLayer]; + UILabel *lb = [_axisY_labels objectAtIndex:i]; + [self showXLabel:lb InPosition:CGPointMake(_startPointVectorY.x - 30, temp - 5)]; + temp = temp - _vectorY_Steps ; + } + } + CGContextDrawPath(context, kCGPathStroke); +} + +- (CAShapeLayer*) drawingPointsForChartData : (PNScatterChartData *) chartData AndWithX : (CGFloat) X AndWithY : (CGFloat) Y +{ + if (chartData.inflexionPointStyle == PNScatterChartPointStyleCircle) { + float radius = chartData.size; + CAShapeLayer *circle = [CAShapeLayer layer]; + // Make a circular shape + circle.path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(X - radius, Y - radius, 2.0*radius, 2.0*radius) + cornerRadius:radius].CGPath; + // Configure the appearence of the circle + circle.fillColor = [chartData.fillColor CGColor]; + circle.strokeColor = [chartData.strokeColor CGColor]; + circle.lineWidth = 1; + + // Add to parent layer + return circle; + } + else if (chartData.inflexionPointStyle == PNScatterChartPointStyleSquare) { + float side = chartData.size; + CAShapeLayer *square = [CAShapeLayer layer]; + // Make a circular shape + square.path = [UIBezierPath bezierPathWithRect:CGRectMake(X - (side/2) , Y - (side/2), side, side)].CGPath ; + // Configure the apperence of the circle + square.fillColor = [chartData.fillColor CGColor]; + square.strokeColor = [chartData.strokeColor CGColor]; + square.lineWidth = 1; + + // Add to parent layer + return square; + } + else { + // you cann add your own scatter chart point here + } + return nil ; +} + +- (void) drawLineFromPoint : (CGPoint) startPoint ToPoint : (CGPoint) endPoint WithLineWith : (CGFloat) lineWidth AndWithColor : (UIColor*) color{ + + // call the same method on a background thread + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + if (self.displayAnimated) { + [NSThread sleepForTimeInterval:2]; + } + // calculating start and end point + __block CGFloat startX = [self mappingIsForAxisX:true WithValue:startPoint.x]; + __block CGFloat startY = [self mappingIsForAxisX:false WithValue:startPoint.y]; + __block CGFloat endX = [self mappingIsForAxisX:true WithValue:endPoint.x]; + __block CGFloat endY = [self mappingIsForAxisX:false WithValue:endPoint.y]; + // update UI on the main thread + dispatch_async(dispatch_get_main_queue(), ^{ + // drawing path between two points + UIBezierPath *path = [UIBezierPath bezierPath]; + [path moveToPoint:CGPointMake(startX, startY)]; + [path addLineToPoint:CGPointMake(endX, endY)]; + CAShapeLayer *shapeLayer = [CAShapeLayer layer]; + shapeLayer.path = [path CGPath]; + shapeLayer.strokeColor = [color CGColor]; + shapeLayer.lineWidth = lineWidth; + shapeLayer.fillColor = [color CGColor]; + // adding animation to path + [self addStrokeEndAnimationIfNeededToLayer:shapeLayer]; + [self.layer addSublayer:shapeLayer]; + }); + }); +} + +- (void)addStrokeEndAnimationIfNeededToLayer:(CAShapeLayer *)shapeLayer{ + + if (self.displayAnimated) { + CABasicAnimation *animateStrokeEnd = [CABasicAnimation animationWithKeyPath:@"strokeEnd"]; + animateStrokeEnd.duration = _duration; + animateStrokeEnd.fromValue = [NSNumber numberWithFloat:0.0f]; + animateStrokeEnd.toValue = [NSNumber numberWithFloat:1.0f]; + [shapeLayer addAnimation:animateStrokeEnd forKey:nil]; + } +} + +@end diff --git a/Ifish/controllers/HotBar/Lib/PNChart/PNScatterChartData.h b/Ifish/controllers/HotBar/Lib/PNChart/PNScatterChartData.h new file mode 100755 index 0000000..40b7b0e --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/PNChart/PNScatterChartData.h @@ -0,0 +1,38 @@ +// +// PNScatterChartData.h +// PNChartDemo +// +// Created by Alireza Arabi on 12/4/14. +// Copyright (c) 2014 kevinzhow. All rights reserved. +// + +#import +#import + +typedef NS_ENUM(NSUInteger, PNScatterChartPointStyle) { + PNScatterChartPointStyleCircle = 0, + PNScatterChartPointStyleSquare = 1, +}; + +@class PNScatterChartDataItem; + +typedef PNScatterChartDataItem *(^LCScatterChartDataGetter)(NSUInteger item); + +@interface PNScatterChartData : NSObject + +@property (strong) UIColor *fillColor; +@property (strong) UIColor *strokeColor; + +@property NSUInteger itemCount; +@property (copy) LCScatterChartDataGetter getData; + +@property (nonatomic, assign) PNScatterChartPointStyle inflexionPointStyle; + +/** + * If PNLineChartPointStyle is circle, this returns the circle's diameter. + * If PNLineChartPointStyle is square, each point is a square with each side equal in length to this value. + */ +@property (nonatomic, assign) CGFloat size; + + +@end diff --git a/Ifish/controllers/HotBar/Lib/PNChart/PNScatterChartData.m b/Ifish/controllers/HotBar/Lib/PNChart/PNScatterChartData.m new file mode 100755 index 0000000..a53a5c2 --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/PNChart/PNScatterChartData.m @@ -0,0 +1,31 @@ +// +// PNScatterChartData.m +// PNChartDemo +// +// Created by Alireza Arabi on 12/4/14. +// Copyright (c) 2014 kevinzhow. All rights reserved. +// + +#import "PNScatterChartData.h" + +@implementation PNScatterChartData + +- (id)init +{ + self = [super init]; + if (self) { + [self setupDefaultValues]; + } + + return self; +} + +- (void)setupDefaultValues +{ + _inflexionPointStyle = PNScatterChartPointStyleCircle; + _fillColor = [UIColor grayColor]; + _strokeColor = [UIColor clearColor]; + _size = 3 ; +} + +@end diff --git a/Ifish/controllers/HotBar/Lib/PNChart/PNScatterChartDataItem.h b/Ifish/controllers/HotBar/Lib/PNChart/PNScatterChartDataItem.h new file mode 100755 index 0000000..f38ee4e --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/PNChart/PNScatterChartDataItem.h @@ -0,0 +1,19 @@ +// +// PNScatterChartDataItem.h +// PNChartDemo +// +// Created by Alireza Arabi on 12/4/14. +// Copyright (c) 2014 kevinzhow. All rights reserved. +// + +#import +#import + +@interface PNScatterChartDataItem : NSObject + ++ (PNScatterChartDataItem *)dataItemWithX:(CGFloat)x AndWithY:(CGFloat)y; + +@property (readonly) CGFloat x; // should be within the x range +@property (readonly) CGFloat y; // should be within the y range + +@end diff --git a/Ifish/controllers/HotBar/Lib/PNChart/PNScatterChartDataItem.m b/Ifish/controllers/HotBar/Lib/PNChart/PNScatterChartDataItem.m new file mode 100755 index 0000000..a454459 --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/PNChart/PNScatterChartDataItem.m @@ -0,0 +1,37 @@ +// +// PNScatterChartDataItem.m +// PNChartDemo +// +// Created by Alireza Arabi on 12/4/14. +// Copyright (c) 2014 kevinzhow. All rights reserved. +// + +#import "PNScatterChartDataItem.h" + +@interface PNScatterChartDataItem () + +- (id)initWithX:(CGFloat)x AndWithY:(CGFloat)y; + +@property (readwrite) CGFloat x; // should be within the x range +@property (readwrite) CGFloat y; // should be within the y range + +@end + +@implementation PNScatterChartDataItem + ++ (PNScatterChartDataItem *)dataItemWithX:(CGFloat)x AndWithY:(CGFloat)y +{ + return [[PNScatterChartDataItem alloc] initWithX:x AndWithY:y]; +} + +- (id)initWithX:(CGFloat)x AndWithY:(CGFloat)y +{ + if ((self = [super init])) { + self.x = x; + self.y = y; + } + + return self; +} + +@end diff --git a/Ifish/controllers/HotBar/Lib/PNChart/UICountingLabel.h b/Ifish/controllers/HotBar/Lib/PNChart/UICountingLabel.h new file mode 100755 index 0000000..5bb4e26 --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/PNChart/UICountingLabel.h @@ -0,0 +1,38 @@ +#import +#import + +typedef NS_ENUM(NSInteger, UILabelCountingMethod) { + UILabelCountingMethodEaseInOut, + UILabelCountingMethodEaseIn, + UILabelCountingMethodEaseOut, + UILabelCountingMethodLinear, + UILabelCountingMethodEaseInBounce, + UILabelCountingMethodEaseOutBounce +}; + +typedef NSString* (^UICountingLabelFormatBlock)(CGFloat value); +typedef NSAttributedString* (^UICountingLabelAttributedFormatBlock)(CGFloat value); + +@interface UICountingLabel : UILabel + +@property (nonatomic, strong) NSString *format; +@property (nonatomic, assign) UILabelCountingMethod method; +@property (nonatomic, assign) NSTimeInterval animationDuration; + +@property (nonatomic, copy) UICountingLabelFormatBlock formatBlock; +@property (nonatomic, copy) UICountingLabelAttributedFormatBlock attributedFormatBlock; +@property (nonatomic, copy) void (^completionBlock)(void); + +-(void)countFrom:(CGFloat)startValue to:(CGFloat)endValue; +-(void)countFrom:(CGFloat)startValue to:(CGFloat)endValue withDuration:(NSTimeInterval)duration; + +-(void)countFromCurrentValueTo:(CGFloat)endValue; +-(void)countFromCurrentValueTo:(CGFloat)endValue withDuration:(NSTimeInterval)duration; + +-(void)countFromZeroTo:(CGFloat)endValue; +-(void)countFromZeroTo:(CGFloat)endValue withDuration:(NSTimeInterval)duration; + +- (CGFloat)currentValue; + +@end + diff --git a/Ifish/controllers/HotBar/Lib/PNChart/UICountingLabel.m b/Ifish/controllers/HotBar/Lib/PNChart/UICountingLabel.m new file mode 100755 index 0000000..f8e8f1f --- /dev/null +++ b/Ifish/controllers/HotBar/Lib/PNChart/UICountingLabel.m @@ -0,0 +1,292 @@ +#import + +#import "UICountingLabel.h" + +#if !__has_feature(objc_arc) +#error UICountingLabel is ARC only. Either turn on ARC for the project or use -fobjc-arc flag +#endif + +#pragma mark - UILabelCounter + +#ifndef kUILabelCounterRate +#define kUILabelCounterRate 3.0 +#endif + +@protocol UILabelCounter + +-(CGFloat)update:(CGFloat)t; + +@end + +@interface UILabelCounterLinear : NSObject + +@end + +@interface UILabelCounterEaseIn : NSObject + +@end + +@interface UILabelCounterEaseOut : NSObject + +@end + +@interface UILabelCounterEaseInOut : NSObject + +@end + +@interface UILabelCounterEaseInBounce : NSObject + +@end + +@interface UILabelCounterEaseOutBounce : NSObject + +@end + +@implementation UILabelCounterLinear + +-(CGFloat)update:(CGFloat)t +{ + return t; +} + +@end + +@implementation UILabelCounterEaseIn + +-(CGFloat)update:(CGFloat)t +{ + return powf(t, kUILabelCounterRate); +} + +@end + +@implementation UILabelCounterEaseOut + +-(CGFloat)update:(CGFloat)t{ + return 1.0-powf((1.0-t), kUILabelCounterRate); +} + +@end + +@implementation UILabelCounterEaseInOut + +-(CGFloat) update: (CGFloat) t +{ + t *= 2; + if (t < 1) + return 0.5f * powf (t, kUILabelCounterRate); + else + return 0.5f * (2.0f - powf(2.0 - t, kUILabelCounterRate)); +} + +@end + +@implementation UILabelCounterEaseInBounce + +-(CGFloat) update: (CGFloat) t { + + if (t < 4.0 / 11.0) { + return 1.0 - (powf(11.0 / 4.0, 2) * powf(t, 2)) - t; + } + + if (t < 8.0 / 11.0) { + return 1.0 - (3.0 / 4.0 + powf(11.0 / 4.0, 2) * powf(t - 6.0 / 11.0, 2)) - t; + } + + if (t < 10.0 / 11.0) { + return 1.0 - (15.0 /16.0 + powf(11.0 / 4.0, 2) * powf(t - 9.0 / 11.0, 2)) - t; + } + + return 1.0 - (63.0 / 64.0 + powf(11.0 / 4.0, 2) * powf(t - 21.0 / 22.0, 2)) - t; + +} + +@end + +@implementation UILabelCounterEaseOutBounce + +-(CGFloat) update: (CGFloat) t { + + if (t < 4.0 / 11.0) { + return powf(11.0 / 4.0, 2) * powf(t, 2); + } + + if (t < 8.0 / 11.0) { + return 3.0 / 4.0 + powf(11.0 / 4.0, 2) * powf(t - 6.0 / 11.0, 2); + } + + if (t < 10.0 / 11.0) { + return 15.0 /16.0 + powf(11.0 / 4.0, 2) * powf(t - 9.0 / 11.0, 2); + } + + return 63.0 / 64.0 + powf(11.0 / 4.0, 2) * powf(t - 21.0 / 22.0, 2); + +} + +@end + +#pragma mark - UICountingLabel + +@interface UICountingLabel () + +@property CGFloat startingValue; +@property CGFloat destinationValue; +@property NSTimeInterval progress; +@property NSTimeInterval lastUpdate; +@property NSTimeInterval totalTime; +@property CGFloat easingRate; + +@property (nonatomic, strong) CADisplayLink *timer; +@property (nonatomic, strong) id counter; + +@end + +@implementation UICountingLabel + +-(void)countFrom:(CGFloat)value to:(CGFloat)endValue { + + if (self.animationDuration == 0.0f) { + self.animationDuration = 2.0f; + } + + [self countFrom:value to:endValue withDuration:self.animationDuration]; +} + +-(void)countFrom:(CGFloat)startValue to:(CGFloat)endValue withDuration:(NSTimeInterval)duration { + + self.startingValue = startValue; + self.destinationValue = endValue; + + // remove any (possible) old timers + [self.timer invalidate]; + self.timer = nil; + + if(self.format == nil) { + self.format = @"%f"; + } + if (duration == 0.0) { + // No animation + [self setTextValue:endValue]; + [self runCompletionBlock]; + return; + } + + self.easingRate = 3.0f; + self.progress = 0; + self.totalTime = duration; + self.lastUpdate = [NSDate timeIntervalSinceReferenceDate]; + + switch(self.method) + { + case UILabelCountingMethodLinear: + self.counter = [[UILabelCounterLinear alloc] init]; + break; + case UILabelCountingMethodEaseIn: + self.counter = [[UILabelCounterEaseIn alloc] init]; + break; + case UILabelCountingMethodEaseOut: + self.counter = [[UILabelCounterEaseOut alloc] init]; + break; + case UILabelCountingMethodEaseInOut: + self.counter = [[UILabelCounterEaseInOut alloc] init]; + break; + case UILabelCountingMethodEaseOutBounce: + self.counter = [[UILabelCounterEaseOutBounce alloc] init]; + break; + case UILabelCountingMethodEaseInBounce: + self.counter = [[UILabelCounterEaseInBounce alloc] init]; + break; + } + + CADisplayLink *timer = [CADisplayLink displayLinkWithTarget:self selector:@selector(updateValue:)]; + timer.frameInterval = 2; + [timer addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode]; + [timer addToRunLoop:[NSRunLoop mainRunLoop] forMode:UITrackingRunLoopMode]; + self.timer = timer; +} + +- (void)countFromCurrentValueTo:(CGFloat)endValue { + [self countFrom:[self currentValue] to:endValue]; +} + +- (void)countFromCurrentValueTo:(CGFloat)endValue withDuration:(NSTimeInterval)duration { + [self countFrom:[self currentValue] to:endValue withDuration:duration]; +} + +- (void)countFromZeroTo:(CGFloat)endValue { + [self countFrom:0.0f to:endValue]; +} + +- (void)countFromZeroTo:(CGFloat)endValue withDuration:(NSTimeInterval)duration { + [self countFrom:0.0f to:endValue withDuration:duration]; +} + +- (void)updateValue:(NSTimer *)timer { + + // update progress + NSTimeInterval now = [NSDate timeIntervalSinceReferenceDate]; + self.progress += now - self.lastUpdate; + self.lastUpdate = now; + + if (self.progress >= self.totalTime) { + [self.timer invalidate]; + self.timer = nil; + self.progress = self.totalTime; + } + + [self setTextValue:[self currentValue]]; + + if (self.progress == self.totalTime) { + [self runCompletionBlock]; + } +} + +- (void)setTextValue:(CGFloat)value +{ + if (self.attributedFormatBlock != nil) { + self.attributedText = self.attributedFormatBlock(value); + } + else if(self.formatBlock != nil) + { + self.text = self.formatBlock(value); + } + else + { + // check if counting with ints - cast to int + if([self.format rangeOfString:@"%(.*)d" options:NSRegularExpressionSearch].location != NSNotFound || [self.format rangeOfString:@"%(.*)i"].location != NSNotFound ) + { + self.text = [NSString stringWithFormat:self.format,(int)value]; + } + else + { + self.text = [NSString stringWithFormat:self.format,value]; + } + } +} + +- (void)setFormat:(NSString *)format { + _format = format; + // update label with new format + [self setTextValue:self.currentValue]; +} + +- (void)runCompletionBlock { + + if (self.completionBlock) { + self.completionBlock(); + self.completionBlock = nil; + } +} + +- (CGFloat)currentValue { + + if (self.progress >= self.totalTime) { + return self.destinationValue; + } + + CGFloat percent = self.progress / self.totalTime; + CGFloat updateVal = [self.counter update:percent]; + return self.startingValue + (updateVal * (self.destinationValue - self.startingValue)); +} + +@end diff --git a/Ifish/controllers/HotBar/Views/IFishHotBarCell.m b/Ifish/controllers/HotBar/Views/IFishHotBarCell.m index 6116ee6..8223ce3 100644 --- a/Ifish/controllers/HotBar/Views/IFishHotBarCell.m +++ b/Ifish/controllers/HotBar/Views/IFishHotBarCell.m @@ -35,6 +35,11 @@ self.subTitleLable.text=vo.subTitle; self.iconImgV.image=[UIImage imageNamed:vo.iconUrl]; self.arrowImgV.hidden=!vo.isShowArrow; + if (vo.phv<120&&[vo.title containsString:@"水循环"]) { + [self.subTitleLable setTextColor:[UIColor redColor]]; + }else{ + [self.subTitleLable setTextColor:[UIColor colorWithRed:109/255.0 green:109/255.0 blue:109/255.0 alpha:1.0]]; + } } diff --git a/Ifish/controllers/HotBar/Views/IFishHotBarCell.xib b/Ifish/controllers/HotBar/Views/IFishHotBarCell.xib index 5cfcbd0..590a1e2 100644 --- a/Ifish/controllers/HotBar/Views/IFishHotBarCell.xib +++ b/Ifish/controllers/HotBar/Views/IFishHotBarCell.xib @@ -11,7 +11,7 @@ - + diff --git a/Ifish/controllers/HotBar/Views/IFishWaterChangeView.h b/Ifish/controllers/HotBar/Views/IFishWaterChangeView.h index 2f08b05..6127f9b 100644 --- a/Ifish/controllers/HotBar/Views/IFishWaterChangeView.h +++ b/Ifish/controllers/HotBar/Views/IFishWaterChangeView.h @@ -7,13 +7,19 @@ // #import +#import "IfishHotBarVo.h" @protocol ChangeWaterDelegate @optional -(void)didSelectRow1:(NSString*)v andRow2:(NSString*)v2; +-(void)submitText:(NSString*)w andh:(NSString*)h andV:(NSString*)v; +-(void)didSelectTeamptrue:(NSString*)up andDown:(NSString*)down andT:(NSString*)t andWarnCode:(NSString*)code; +-(void)didSelectRemindTime:(NSString*)time; +-(void)clickWormCode:(NSString*)code; @end @interface IFishWaterChangeView : UIView @property (weak, nonatomic) IBOutlet UIPickerView *picker; @property(nonatomic,weak)id myDelegate; @property(nonatomic,assign)NSInteger viewType; +@property(nonatomic,strong)IfishHotBarVo*hotVo; @end diff --git a/Ifish/controllers/HotBar/Views/IFishWaterChangeView.m b/Ifish/controllers/HotBar/Views/IFishWaterChangeView.m index bd22e66..8582fca 100644 --- a/Ifish/controllers/HotBar/Views/IFishWaterChangeView.m +++ b/Ifish/controllers/HotBar/Views/IFishWaterChangeView.m @@ -10,49 +10,199 @@ @interface IFishWaterChangeView() -@property(nonatomic,strong)NSArray*data1; -@property(nonatomic,strong)NSArray*data2; +@property (weak, nonatomic) IBOutlet NSLayoutConstraint *pickerBottom; +@property(nonatomic,strong)NSMutableArray*data1; +@property(nonatomic,strong)NSMutableArray*data2; +@property(nonatomic,strong)NSMutableArray*templetrueArr; +@property(nonatomic,strong)NSMutableArray*dayArr; +@property(nonatomic,strong)NSMutableArray*timeArr; @property(nonatomic,copy)NSString*selectVaule1; @property(nonatomic,copy)NSString*selectVaule2; +@property(nonatomic,copy)NSString*selectVaule3; +@property(nonatomic,copy)NSString*warnCode; @property (weak, nonatomic) IBOutlet UIView *topTempPicker; @property (weak, nonatomic) IBOutlet UIView *bottomPicker; @property (weak, nonatomic) IBOutlet UIView *heightView; +@property (weak, nonatomic) IBOutlet UITextField *longTextF; +@property (weak, nonatomic) IBOutlet UITextField *widthTextF; +@property (weak, nonatomic) IBOutlet UITextField *heightTextF; +@property (weak, nonatomic) IBOutlet UIPickerView *topUiPick; +@property (weak, nonatomic) IBOutlet UIPickerView *bottomUiPicker; +@property (weak, nonatomic) IBOutlet UIButton *openBtn; +@property (weak, nonatomic) IBOutlet UILabel *bottomTextF; @end @implementation IFishWaterChangeView --(NSArray *)data1{ +-(NSMutableArray *)data1{ if (_data1==nil) { - _data1=@[@"1",@"2",@"3",@"4"]; - _data2=@[@"1:00",@"2:00",@"3:00",@"4:00"]; + _data1=[NSMutableArray array]; + _data2=[NSMutableArray array]; } return _data1; } +-(NSMutableArray *)timeArr{ + if (_timeArr==nil) { + _timeArr=[NSMutableArray array]; + for (int i=5; i<25; i++) { + NSString*day=[NSString stringWithFormat:@"%d:00",i]; + [_timeArr addObject:day]; + } + } + return _timeArr; +} + +-(NSMutableArray*)dayArr{ + if (_dayArr==nil) { + _dayArr=[NSMutableArray array]; + for (int i=1; i<31; i++) { + NSString*day=[NSString stringWithFormat:@"%d天",i]; + [_dayArr addObject:day]; + } + } + return _dayArr; +} + +-(NSMutableArray*)templetrueArr{ + if (_templetrueArr==nil) { + _templetrueArr=[NSMutableArray array]; + for (int i=20; i<41; i++) { + NSString*temp=[NSString stringWithFormat:@"%d°c",i]; + [_templetrueArr addObject:temp]; + } + } + return _templetrueArr; +} + + -(void)setViewType:(NSInteger)viewType{ _viewType=viewType; self.topTempPicker.hidden=YES; self.heightView.hidden=YES; self.bottomPicker.hidden=YES; + [self.data1 removeAllObjects]; + [self.data2 removeAllObjects]; if (viewType==0) {// 设置水温 self.topTempPicker.hidden=NO; self.bottomPicker.hidden=NO; + self.bottomTextF.text=@"请输设置预警温度"; + [self.data1 addObjectsFromArray:self.templetrueArr]; + [self.data2 addObjectsFromArray:self.templetrueArr]; + [self.topUiPick reloadAllComponents]; + [self.bottomUiPicker reloadAllComponents]; + self.openBtn.hidden=NO; + self.pickerBottom.constant=240.0; + if ([self.hotVo.wornCode isEqualToString:@"01"]) { + self.openBtn.selected=YES; + }else{ + self.openBtn.selected=NO; + } + if ( self.hotVo.heaterNum) { + self.hotVo.heaterNum=[self.hotVo.heaterNum stringByReplacingOccurrencesOfString:@"°c" withString:@""]; + NSInteger heaterNum=round([self.hotVo.heaterNum integerValue]-20) ; + [self.topUiPick selectRow:heaterNum inComponent:0 animated:NO]; + self.selectVaule1=self.hotVo.heaterNum; + } + + + if (self.hotVo.downTeamp) { + self.hotVo.downTeamp=[self.hotVo.downTeamp stringByReplacingOccurrencesOfString:@"°c" withString:@""]; + NSInteger downTeamp=round([self.hotVo.downTeamp integerValue]-20); + downTeamp=downTeamp<0?0:downTeamp; + [self.bottomUiPicker selectRow:downTeamp inComponent:0 animated:NO]; + self.selectVaule2=self.hotVo.downTeamp; + } + + if (self.hotVo.upTeamp) { + self.hotVo.upTeamp=[self.hotVo.upTeamp stringByReplacingOccurrencesOfString:@"°c" withString:@""]; + NSInteger upTeamp=round([self.hotVo.upTeamp integerValue]-20) ; + upTeamp=upTeamp>0?upTeamp:0; + [self.bottomUiPicker selectRow:upTeamp inComponent:1 animated:NO]; + self.selectVaule3=self.hotVo.upTeamp; + } + + }else if(viewType==1){//容器大小 + self.bottomTextF.text=@"请输入水体部分尺寸:"; self.heightView.hidden=NO; self.bottomPicker.hidden=NO; + self.openBtn.hidden=YES; + [self.longTextF becomeFirstResponder]; + self.pickerBottom.constant=340.0; + if (self.hotVo.heater) { + if(self.hotVo.heater.heaterLong.length){ + self.longTextF.text=self.hotVo.heater.heaterLong; + } + if(self.hotVo.heater.heaterWidth.length){ + self.widthTextF.text=self.hotVo.heater.heaterWidth; + } + if(self.hotVo.heater.heaterHeight.length){ + self.heightTextF.text=self.hotVo.heater.heaterHeight; + } + } + }else if (viewType==2){//流量 self.bottomPicker.hidden=NO; }else if (viewType==4){//换水周期 self.bottomPicker.hidden=NO; + [self.data1 addObjectsFromArray:self.dayArr]; + [self.data2 addObjectsFromArray:self.timeArr]; + [self.topUiPick reloadAllComponents]; + [self.bottomUiPicker reloadAllComponents]; + self.bottomTextF.text=@"换水周期选择:"; + self.openBtn.hidden=NO; + self.selectVaule2=self.data1[0]; + if (self.hotVo.heater.heaterCycle!=nil) { + + [self.bottomUiPicker selectRow:[self.hotVo.heater.heaterCycle integerValue]-1 inComponent:0 animated:NO]; + self.selectVaule2=self.hotVo.heater.heaterCycle; + }else{ + self.selectVaule2=@"1"; + } + self.selectVaule3=self.data2[0]; + if (self.hotVo.heater.heaterReminderTime.length&&self.hotVo.heater.heaterReminderTime!=nil) { + self.openBtn.selected=YES; + [self.bottomUiPicker selectRow:[self.hotVo.heater.heaterReminderTime integerValue]-5 inComponent:1 animated:NO]; + self.selectVaule3=self.hotVo.heater.heaterReminderTime; + }else{ + self.openBtn.selected=NO; + self.selectVaule3=@"5"; + } + + } + +// if(self.data1.count>0){ +// self.selectVaule1=self.data1[0]; +// self.selectVaule2=self.data1[0]; +// } +// if (self.data2.count>0) { +// self.selectVaule3=self.data2[0]; +// } } - (IBAction)clickSubmit:(id)sender { self.hidden=YES; if(_viewType==5){ - [self.myDelegate didSelectRow1:self.selectVaule1 andRow2:self.selectVaule2]; + [self.myDelegate didSelectRow1:self.selectVaule2 andRow2:self.selectVaule3]; + }else if (_viewType==0){ +// [self.myDelegate didSelectTeamptrue:self.selectVaule2]; + NSString*code=self.openBtn.selected?@"01":@"00"; + + [self.myDelegate didSelectTeamptrue:self.selectVaule3 andDown:self.selectVaule2 andT:self.selectVaule1 andWarnCode:code]; + }else if (_viewType==1){ + [self.myDelegate submitText:self.widthTextF.text andh:self.heightTextF.text andV:self.longTextF.text]; + }else if(_viewType==4){ +// [self.myDelegate didSelectRemindTime:self.selectVaule2]; + if(self.openBtn.selected==NO){ + [self.myDelegate didSelectRow1:self.selectVaule2 andRow2:@""]; + }else{ + [self.myDelegate didSelectRow1:self.selectVaule2 andRow2:self.selectVaule3]; + } } + } -(void)awakeFromNib{ @@ -64,6 +214,9 @@ //返回多少列 -(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{ + if (pickerView==self.topUiPick) { + return 1; + } return 2; } @@ -74,19 +227,27 @@ //每一行的数据 -(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{ - if(component==0){ + if (pickerView==self.topUiPick) { return self.data1[row]; + }else{ + if(component==0){ + return self.data1[row]; + } + return self.data2[row]; } - return self.data2[row]; } //选中时的效果 -(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{ // self.selectValue = self.data[row]; - if (component==0) { + if (pickerView==self.topUiPick) { self.selectVaule1=self.data1[row]; }else{ - self.selectVaule2=self.data2[row]; + if (component==0) { + self.selectVaule2=self.data1[row]; + }else{ + self.selectVaule3=self.data2[row]; + } } } @@ -109,6 +270,13 @@ // cellView.backgroundColor = [UIColor redColor]; // return cellView; //} +- (IBAction)clickOpenBtn:(UIButton *)sender { + sender.selected=!sender.selected; + if(self.viewType==0){ + self.hotVo.wornCode=sender.selected?@"01":@"00"; + [self.myDelegate clickWormCode:self.hotVo.wornCode]; + } +} @end diff --git a/Ifish/controllers/HotBar/Views/IFishWaterChangeView.xib b/Ifish/controllers/HotBar/Views/IFishWaterChangeView.xib index f08b178..21f1c09 100644 --- a/Ifish/controllers/HotBar/Views/IFishWaterChangeView.xib +++ b/Ifish/controllers/HotBar/Views/IFishWaterChangeView.xib @@ -15,8 +15,14 @@ + - + @@ -35,23 +41,32 @@ - + + @@ -108,35 +123,35 @@ - + - - + + - + - - + + - + - - + + - + @@ -147,11 +162,11 @@ - - + + - + @@ -159,7 +174,7 @@ - + @@ -216,28 +231,41 @@ + + - + + + + + + + + + + + - + + diff --git a/Ifish/controllers/HotBar/Views/IfishChatView.h b/Ifish/controllers/HotBar/Views/IfishChatView.h index e629d51..4db1acd 100644 --- a/Ifish/controllers/HotBar/Views/IfishChatView.h +++ b/Ifish/controllers/HotBar/Views/IfishChatView.h @@ -9,5 +9,5 @@ #import @interface IfishChatView : UIView - +@property(nonatomic,strong)NSArray*datas; @end diff --git a/Ifish/controllers/HotBar/Views/IfishChatView.m b/Ifish/controllers/HotBar/Views/IfishChatView.m index 661567b..1c36847 100644 --- a/Ifish/controllers/HotBar/Views/IfishChatView.m +++ b/Ifish/controllers/HotBar/Views/IfishChatView.m @@ -7,46 +7,134 @@ // #import "IfishChatView.h" +#import "IfishHistroyVo.h" + + @interface IfishChatView() @property(nonatomic,strong)NSMutableArray*line1; @property(nonatomic,strong)NSMutableArray*line2; +@property(nonatomic,strong)UIView *lablesView; +@property(nonatomic,strong)UILabel*numLable; @end @implementation IfishChatView +-(UILabel *)numLable{ + if (_numLable==nil) { + _numLable=[[UILabel alloc]init]; + [self addSubview:_numLable]; + } + return _numLable; +} + +-(UIView *)lablesView{ + if (_lablesView==nil) { + _lablesView=[[UIView alloc]init]; + _lablesView.frame=CGRectMake(290, 0, 28, 190); + _lablesView.backgroundColor=[UIColor clearColor]; + [self addSubview:_lablesView]; + } + return _lablesView; +} + -(NSArray *)line1{ if (_line1==nil) { _line1=[NSMutableArray array]; + } + [_line1 removeAllObjects]; + if (_datas.count) { + NSSortDescriptor *ageSD = [NSSortDescriptor sortDescriptorWithKey:@"heaterGatheringTime_int" ascending:YES]; + self.datas = [self.datas sortedArrayUsingDescriptors:@[ageSD]]; - for (int i=0; i<50; i++) { - CGFloat x=10*(i+1); - CGPoint p1=CGPointMake(x, x); +// CGFloat gapW= 357*scale*0.1; + for (int i=0; i350){ + vo.heaterWaterTemperature=@"350"; + }else if(vo.heaterWaterTemperature.integerValue<250){ + continue; + } + CGFloat y=188*(1-((vo.heaterWaterTemperature.integerValue*0.1-25)/10))+36.5;//*-1*+158; + CGPoint p1=CGPointMake(x, y); +// NSLog(@"%f-------%f--%f-",y,vo.heaterWaterTemperature.integerValue*0.1,x); [_line1 addObject:NSStringFromCGPoint(p1)]; } } + return _line1; } -(NSArray *)line2{ if (_line2==nil) { _line2=[NSMutableArray array]; + } + if (_datas.count) { + NSSortDescriptor *PhSD = [NSSortDescriptor sortDescriptorWithKey:@"heaterPh_int" ascending:YES]; + NSMutableArray*arr = [[self.datas sortedArrayUsingDescriptors:@[PhSD]] mutableCopy]; - for (int i=0; i<50; i++) { - CGFloat x=10*(i+1); - CGFloat y=sin(x)*10+5; + IfishHistroyVo*vo=arr[0]; + NSInteger miniPh=vo.heaterPh_int-50; + + IfishHistroyVo*vo1=arr[arr.count-1]; + NSInteger maxPh=vo1.heaterPh_int+50; + + NSInteger range=maxPh-miniPh; + + + [_line2 removeAllObjects]; + for (int i=0; i -@interface IfishHistoryView : UIView - +@protocol IfishHistoryViewBottomBarDelete +@optional +-(void)clickBottomBarWithIdx:(NSInteger)idx; +@end + + +@interface IfishHistoryView : UIView +@property(nonatomic,strong)NSArray*datas; +@property(nonatomic,copy)NSString*curdateStr; +@property(nonatomic,weak)idmyDeleget; @end diff --git a/Ifish/controllers/HotBar/Views/IfishHistoryView.m b/Ifish/controllers/HotBar/Views/IfishHistoryView.m index ef55ff4..857a8ed 100644 --- a/Ifish/controllers/HotBar/Views/IfishHistoryView.m +++ b/Ifish/controllers/HotBar/Views/IfishHistoryView.m @@ -7,6 +7,21 @@ // #import "IfishHistoryView.h" +#import "IfishChatView.h" +#import "IfishHistroyVo.h" +#import "PNChart.h" +#import "SVProgressHUD.h" + +@interface IfishHistoryView() +@property (strong, nonatomic)IfishChatView *chartView; +@property (weak, nonatomic) IBOutlet IfishChatView *chartHolder; + +@property (weak, nonatomic) IBOutlet NSLayoutConstraint *chartHeight; +@property (weak, nonatomic) IBOutlet NSLayoutConstraint *chartWidth; +@property (weak, nonatomic) IBOutlet NSLayoutConstraint *lableHeight; +@property (weak, nonatomic) IBOutlet UILabel *curDatetitle; +@property(nonatomic,strong)NSMutableArray*line1; +@end @implementation IfishHistoryView @@ -17,8 +32,44 @@ // Drawing code } */ + +-(IfishChatView *)chartView{ + if (_chartView==nil) { + _chartView=[[IfishChatView alloc]init]; + _chartView.frame=self.chartHolder.bounds; + _chartView.backgroundColor=[UIColor clearColor]; + [self.chartHolder addSubview:_chartView]; + } + return _chartView; +} + + + +-(void)setDatas:(NSArray *)datas{ + _datas=datas; + if (datas.count<1) { +// [SVProgressHUD showInfoWithStatus:@"暂无数据"]; + return; + } + if (self.chartView) { + [self.chartView removeFromSuperview]; + _chartView=nil; + } + self.chartView.datas=datas; + self.curDatetitle.text=self.curdateStr; + // [self initLineChart]; +} + + + - (IBAction)clickBg:(id)sender { self.hidden=YES; } + +- (IBAction)clickBottomBar:(UIButton*)sender { + [self.myDeleget clickBottomBarWithIdx:sender.tag]; +} + + @end diff --git a/Ifish/controllers/HotBar/Views/IfishHistoryView.xib b/Ifish/controllers/HotBar/Views/IfishHistoryView.xib index 5b84f52..cae0a09 100644 --- a/Ifish/controllers/HotBar/Views/IfishHistoryView.xib +++ b/Ifish/controllers/HotBar/Views/IfishHistoryView.xib @@ -21,24 +21,93 @@ - - + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + - - + - + + + + + + + + diff --git a/Ifish/controllers/HotBar/Views/IfishHotBarHeader.h b/Ifish/controllers/HotBar/Views/IfishHotBarHeader.h new file mode 100644 index 0000000..e3ef6ad --- /dev/null +++ b/Ifish/controllers/HotBar/Views/IfishHotBarHeader.h @@ -0,0 +1,14 @@ +// +// IfishHotBarHeader.h +// Ifish +// +// Created by 罗艺 on 2018/9/27. +// Copyright © 2018年 lianlian. All rights reserved. +// + +#import + +@interface IfishHotBarHeader : UIView +@property (weak, nonatomic) IBOutlet UILabel *degreeLable; + +@end diff --git a/Ifish/controllers/HotBar/Views/IfishHotBarHeader.m b/Ifish/controllers/HotBar/Views/IfishHotBarHeader.m new file mode 100644 index 0000000..72c6b1d --- /dev/null +++ b/Ifish/controllers/HotBar/Views/IfishHotBarHeader.m @@ -0,0 +1,21 @@ +// +// IfishHotBarHeader.m +// Ifish +// +// Created by 罗艺 on 2018/9/27. +// Copyright © 2018年 lianlian. All rights reserved. +// + +#import "IfishHotBarHeader.h" + +@implementation IfishHotBarHeader + +/* +// Only override drawRect: if you perform custom drawing. +// An empty implementation adversely affects performance during animation. +- (void)drawRect:(CGRect)rect { + // Drawing code +} +*/ + +@end diff --git a/Ifish/controllers/HotBar/Views/IfishHotBarHeader.xib b/Ifish/controllers/HotBar/Views/IfishHotBarHeader.xib new file mode 100644 index 0000000..5477043 --- /dev/null +++ b/Ifish/controllers/HotBar/Views/IfishHotBarHeader.xib @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Ifish/controllers/HotBar/models/IfishConfigVo.h b/Ifish/controllers/HotBar/models/IfishConfigVo.h new file mode 100644 index 0000000..910f83f --- /dev/null +++ b/Ifish/controllers/HotBar/models/IfishConfigVo.h @@ -0,0 +1,20 @@ +// +// IfishConfigVo.h +// Ifish +// +// Created by 罗艺 on 2018/9/24. +// Copyright © 2018年 lianlian. All rights reserved. +// + +#import + +@interface IfishConfigVo : NSObject +//配置tcp连接地址(39字节) 15 数据包头 +//20 tcp连接的域名 +// +//2 连接环境aaaa测试环境bbbb正式环境 +//2 CRC16校验码 +@property(nonatomic,copy)NSString*tcpAdr; +@property(nonatomic,copy)NSString*env; +@property(nonatomic,copy)NSString*crc; +@end diff --git a/Ifish/controllers/HotBar/models/IfishConfigVo.m b/Ifish/controllers/HotBar/models/IfishConfigVo.m new file mode 100644 index 0000000..1e08e2b --- /dev/null +++ b/Ifish/controllers/HotBar/models/IfishConfigVo.m @@ -0,0 +1,13 @@ +// +// IfishConfigVo.m +// Ifish +// +// Created by 罗艺 on 2018/9/24. +// Copyright © 2018年 lianlian. All rights reserved. +// + +#import "IfishConfigVo.h" + +@implementation IfishConfigVo + +@end diff --git a/Ifish/controllers/HotBar/models/IfishHeaterVo.h b/Ifish/controllers/HotBar/models/IfishHeaterVo.h new file mode 100644 index 0000000..6fa8b7b --- /dev/null +++ b/Ifish/controllers/HotBar/models/IfishHeaterVo.h @@ -0,0 +1,29 @@ +// +// IfishHeaterVo.h +// Ifish +// +// Created by 罗艺 on 2018/9/23. +// Copyright © 2018年 lianlian. All rights reserved. +// + +#import + + +//heaterId : ID +//heaterMacAddress : mac地址 +//heaterVolume : 鱼缸容积 +//heaterLong : 鱼缸长 +//heaterWidth : 鱼缸宽 +//heaterHeight : 鱼缸高 +//heaterCycle : 换水提醒周期 +//heaterReminderTime : 提醒时间 +@interface IfishHeaterVo : NSObject +@property(nonatomic,copy)NSString*heaterId; +@property(nonatomic,copy)NSString*heaterMacAddress; +@property(nonatomic,copy)NSString*heaterVolume; +@property(nonatomic,copy)NSString*heaterLong; +@property(nonatomic,copy)NSString*heaterWidth; +@property(nonatomic,copy)NSString*heaterHeight; +@property(nonatomic,copy)NSString*heaterCycle; +@property(nonatomic,copy)NSString*heaterReminderTime; +@end diff --git a/Ifish/controllers/HotBar/models/IfishHeaterVo.m b/Ifish/controllers/HotBar/models/IfishHeaterVo.m new file mode 100644 index 0000000..97d77c9 --- /dev/null +++ b/Ifish/controllers/HotBar/models/IfishHeaterVo.m @@ -0,0 +1,41 @@ +// +// IfishHeaterVo.m +// Ifish +// +// Created by 罗艺 on 2018/9/23. +// Copyright © 2018年 lianlian. All rights reserved. +// + +#import "IfishHeaterVo.h" + +@implementation IfishHeaterVo +-(NSString*)heaterReminderTime{ + if (!_heaterReminderTime.length||_heaterReminderTime==nil) { + return @""; + } + return _heaterReminderTime; +} + +-(NSString*)heaterVolume{ + if (!_heaterVolume.length||_heaterVolume==nil) { + return @""; + } + return _heaterVolume; +} + +-(NSString *)heaterCycle{ + if (!_heaterCycle.length||_heaterCycle==nil) { + return @""; + } + return _heaterCycle; +} + +-(NSString *)heaterId{ + if (!_heaterId.length||_heaterId==nil) { + return @""; + } + return _heaterId; +} + + +@end diff --git a/Ifish/controllers/HotBar/models/IfishHistroyVo.h b/Ifish/controllers/HotBar/models/IfishHistroyVo.h new file mode 100644 index 0000000..4e6653b --- /dev/null +++ b/Ifish/controllers/HotBar/models/IfishHistroyVo.h @@ -0,0 +1,23 @@ +// +// IfishHistroyVo.h +// Ifish +// +// Created by 罗艺 on 2018/9/23. +// Copyright © 2018年 lianlian. All rights reserved. +// + +#import + +//heaterWaterTemperature : 温度 +//heaterPh : 水流量 +//heaterGatheringTime : 小时 + + + +@interface IfishHistroyVo : NSObject +@property(nonatomic,copy)NSString*heaterWaterTemperature; +@property(nonatomic,copy)NSString*heaterPh; +@property(nonatomic,copy)NSString*heaterGatheringTime; +@property(nonatomic,assign)NSInteger heaterGatheringTime_int; +@property(nonatomic,assign)NSInteger heaterPh_int; +@end diff --git a/Ifish/controllers/HotBar/models/IfishHistroyVo.m b/Ifish/controllers/HotBar/models/IfishHistroyVo.m new file mode 100644 index 0000000..af2c156 --- /dev/null +++ b/Ifish/controllers/HotBar/models/IfishHistroyVo.m @@ -0,0 +1,22 @@ +// +// IfishHistroyVo.m +// Ifish +// +// Created by 罗艺 on 2018/9/23. +// Copyright © 2018年 lianlian. All rights reserved. +// + +#import "IfishHistroyVo.h" + +@implementation IfishHistroyVo +-(void)setHeaterGatheringTime:(NSString *)heaterGatheringTime{ + _heaterGatheringTime=heaterGatheringTime; + _heaterGatheringTime_int=heaterGatheringTime.integerValue; +} + +-(void)setHeaterPh:(NSString *)heaterPh{ + _heaterPh=heaterPh; + _heaterPh_int=heaterPh.integerValue; +} + +@end diff --git a/Ifish/controllers/HotBar/models/IfishHotBarPackegeVo.h b/Ifish/controllers/HotBar/models/IfishHotBarPackegeVo.h new file mode 100644 index 0000000..f884ec7 --- /dev/null +++ b/Ifish/controllers/HotBar/models/IfishHotBarPackegeVo.h @@ -0,0 +1,30 @@ +// +// IfishHotBarPackegeVo.h +// Ifish +// +// Created by 罗艺 on 2018/9/23. +// Copyright © 2018年 lianlian. All rights reserved. +// + +#import +#import "IfishPackageHeaderVo.h" + + +@interface IfishHotBarPackegeVo : IfishPackageHeaderVo + + + +//设置报警温度指令(22字节) +//15 数据包头 +//1 开启关闭报警,00关,01开 +//2 最低报警温度,关闭报警时传0 +//2 最高报警温度,关闭报警时传0 +//2 CRC16校验码 +@property(nonatomic,copy)NSString*warnCode; +@property(nonatomic,copy)NSString*downTeamptrue; +@property(nonatomic,copy)NSString*upTeamptrue; +@property(nonatomic,copy)NSString*crcCode; + + + +@end diff --git a/Ifish/controllers/HotBar/models/IfishHotBarPackegeVo.m b/Ifish/controllers/HotBar/models/IfishHotBarPackegeVo.m new file mode 100644 index 0000000..672a587 --- /dev/null +++ b/Ifish/controllers/HotBar/models/IfishHotBarPackegeVo.m @@ -0,0 +1,19 @@ +// +// IfishHotBarPackegeVo.m +// Ifish +// +// Created by 罗艺 on 2018/9/23. +// Copyright © 2018年 lianlian. All rights reserved. +// + +#import "IfishHotBarPackegeVo.h" + +@implementation IfishHotBarPackegeVo + + +-(NSString*)getPackege{ + return [NSString stringWithFormat:@"%@%@%@%@",self.warnCode,self.downTeamptrue,self.upTeamptrue,self.crcCode]; +} + + +@end diff --git a/Ifish/controllers/HotBar/models/IfishHotBarVo.h b/Ifish/controllers/HotBar/models/IfishHotBarVo.h index 53efc08..d1fb08d 100644 --- a/Ifish/controllers/HotBar/models/IfishHotBarVo.h +++ b/Ifish/controllers/HotBar/models/IfishHotBarVo.h @@ -7,10 +7,23 @@ // #import +#import "IfishHeaterVo.h" @interface IfishHotBarVo : NSObject @property(nonatomic,copy)NSString*title; @property(nonatomic,copy)NSString*subTitle; @property(nonatomic,assign)BOOL isShowArrow; @property(nonatomic,copy)NSString*iconUrl; +@property(nonatomic,strong)NSArray* phs;//历史 +@property(nonatomic,strong)IfishHeaterVo*heater ; + +@property(nonatomic,copy)NSString*heaterNum; +@property(nonatomic,copy)NSString*upTeamp; +@property(nonatomic,copy)NSString*downTeamp; +@property(nonatomic,copy)NSString*wornCode; + +@property(nonatomic,copy)NSString*remindDay; +@property(nonatomic,copy)NSString*remaindTime; +@property(nonatomic,assign)UInt64 phv; + @end diff --git a/Ifish/controllers/HotBar/models/IfishHotBarVo.m b/Ifish/controllers/HotBar/models/IfishHotBarVo.m index f0c67fd..68701a7 100644 --- a/Ifish/controllers/HotBar/models/IfishHotBarVo.m +++ b/Ifish/controllers/HotBar/models/IfishHotBarVo.m @@ -7,7 +7,13 @@ // #import "IfishHotBarVo.h" +#import "MJExtension.h" +#import "IfishHistroyVo.h" @implementation IfishHotBarVo - ++(NSDictionary*)mj_objectClassInArray{ + return @{ + @"phs":@"IfishHistroyVo" + }; +} @end diff --git a/Ifish/controllers/HotBar/models/IfishPackageHeaderVo.h b/Ifish/controllers/HotBar/models/IfishPackageHeaderVo.h new file mode 100644 index 0000000..cecc30c --- /dev/null +++ b/Ifish/controllers/HotBar/models/IfishPackageHeaderVo.h @@ -0,0 +1,26 @@ +// +// IfishPackageHeaderVo.h +// Ifish +// +// Created by 罗艺 on 2018/9/23. +// Copyright © 2018年 lianlian. All rights reserved. +// + +#import + +@interface IfishPackageHeaderVo : NSObject +//数据包头(15字节) +//1 "发送消息类型填充00,回复类型填充01 +//" +//1 功能码 +//6 发送方MAC地址 +//6 接收方MAC地址 +//1 消息长度,包长度(15+*的长度) +@property(nonatomic,copy)NSString*msgType; +@property(nonatomic,copy)NSString*funcCode; +@property(nonatomic,copy)NSString*sendAdr; +@property(nonatomic,copy)NSString*reciceAdr; +@property(nonatomic,copy)NSString*lenth; +-(NSString*)getHeader; +-(NSString*)getPackege; +@end diff --git a/Ifish/controllers/HotBar/models/IfishPackageHeaderVo.m b/Ifish/controllers/HotBar/models/IfishPackageHeaderVo.m new file mode 100644 index 0000000..7964166 --- /dev/null +++ b/Ifish/controllers/HotBar/models/IfishPackageHeaderVo.m @@ -0,0 +1,21 @@ +// +// IfishPackageHeaderVo.m +// Ifish +// +// Created by 罗艺 on 2018/9/23. +// Copyright © 2018年 lianlian. All rights reserved. +// + +#import "IfishPackageHeaderVo.h" + +@implementation IfishPackageHeaderVo +-(NSString*)getPackege{ + return @""; +} +-(NSString*)getHeader{ + return [NSString stringWithFormat:@"%@%@%@%@%@",self.msgType,self.funcCode,self.sendAdr,self.reciceAdr,self.lenth]; +} +-(NSString *)description{ + return [NSString stringWithFormat:@"%@%@",[self getHeader],[self getPackege]]; +} +@end diff --git a/Ifish/controllers/IfishTabControllers/我的/mineControllers/pushSetControllrs/IfishUDPBroadCastHelper.m b/Ifish/controllers/IfishTabControllers/我的/mineControllers/pushSetControllrs/IfishUDPBroadCastHelper.m index 594f140..57ccaa8 100644 --- a/Ifish/controllers/IfishTabControllers/我的/mineControllers/pushSetControllrs/IfishUDPBroadCastHelper.m +++ b/Ifish/controllers/IfishTabControllers/我的/mineControllers/pushSetControllrs/IfishUDPBroadCastHelper.m @@ -9,6 +9,8 @@ #import "IfishUDPBroadCastHelper.h" #import "LxGetCurrentIp.h" #import "AppDelegate.h" +#import "ConnectHotspotModel.h" + @implementation IfishUDPBroadCastHelper + (IfishUDPBroadCastHelper *)sharedInstance{ @@ -107,6 +109,21 @@ [self.loopTimer invalidate]; } +-(void)sendConnectHotspotSoketdata{ + NSString* hostS = @"120.55.190.56"; +// //120.55.190.56 服务器IP 指令中用 + ConnectHotspotModel *model = [ConnectHotspotModel new]; + model.ssidName =@""; + model.pwd = @""; + NSString *request=[NSString stringWithFormat:@"%@", model.description]; + + NSData *data=[dataContorl stringToHexData:request]; + + UInt16 port = 333; + [self.clientSocket receiveWithTimeout:-1 tag:0]; + + [self.clientSocket sendData:data toHost:hostS port:port withTimeout:-1 tag:0]; +} -(void)dealloc{ diff --git a/Ifish/controllers/IfishTabControllers/探索/AiyuYanXuan/.DS_Store b/Ifish/controllers/IfishTabControllers/探索/AiyuYanXuan/.DS_Store index 054fd8f..3b5216d 100644 Binary files a/Ifish/controllers/IfishTabControllers/探索/AiyuYanXuan/.DS_Store and b/Ifish/controllers/IfishTabControllers/探索/AiyuYanXuan/.DS_Store differ diff --git a/Ifish/controllers/IfishTabControllers/探索/FishDoctor/.DS_Store b/Ifish/controllers/IfishTabControllers/探索/FishDoctor/.DS_Store index eeaebe8..e6a3278 100644 Binary files a/Ifish/controllers/IfishTabControllers/探索/FishDoctor/.DS_Store and b/Ifish/controllers/IfishTabControllers/探索/FishDoctor/.DS_Store differ diff --git a/Ifish/controllers/IfishTabControllers/探索/IfishNewShopsFlie/IfishGoodsManage/.DS_Store b/Ifish/controllers/IfishTabControllers/探索/IfishNewShopsFlie/IfishGoodsManage/.DS_Store index 9eabbeb..fa24bd1 100644 Binary files a/Ifish/controllers/IfishTabControllers/探索/IfishNewShopsFlie/IfishGoodsManage/.DS_Store and b/Ifish/controllers/IfishTabControllers/探索/IfishNewShopsFlie/IfishGoodsManage/.DS_Store differ diff --git a/Ifish/controllers/IfishTabControllers/探索/IfishNewShopsFlie/IfishShopEdite/VController/IfishShopEditeNewViewController.m b/Ifish/controllers/IfishTabControllers/探索/IfishNewShopsFlie/IfishShopEdite/VController/IfishShopEditeNewViewController.m index bbbb3cf..090022d 100644 --- a/Ifish/controllers/IfishTabControllers/探索/IfishNewShopsFlie/IfishShopEdite/VController/IfishShopEditeNewViewController.m +++ b/Ifish/controllers/IfishTabControllers/探索/IfishNewShopsFlie/IfishShopEdite/VController/IfishShopEditeNewViewController.m @@ -9,9 +9,9 @@ #import "IfishShopEditeNewViewController.h" #import "ChinaPlckerView.h" #import "UITextField+KeyBordDoneView.h" -#import -#import -#import +//#import +//#import +//#import #import "UIImageView+WebCache.h" #import "IfishShopEdite1Cell.h" #import "IfishShopEdite2ViewCell.h" @@ -32,6 +32,7 @@ static const CGFloat rectWidth = 300; static const CGFloat rectHeight = 168; #import "CusomeCameraViewController.h" +#import @interface IfishShopEditeNewViewController () { - BMKGeoCodeSearch*_geocodesearch; +// BMKGeoCodeSearch*_geocodesearch; BOOL _isUpdate; } @property(nonatomic,strong)UITableView *tableView; @property(nonatomic,strong) NSArray *titles; @property(nonatomic,strong) NSString *address; -@property(nonatomic)BMKLocationService*locService; +//@property(nonatomic)BMKLocationService*locService; +@property (nonatomic,strong ) CLLocationManager *locationManager;//定位服务 +@property (nonatomic,copy) NSString *currentCity;//城市 @property(nonatomic,strong) NSString *privence; @property(nonatomic,strong) NSString *city; @property(nonatomic,strong) NSString *area; @@ -88,84 +91,151 @@ UIGestureRecognizerDelegate> #pragma mark 定位 -(void)getLocation{ //初始化BMKLocationService - _locService=[[BMKLocationService alloc]init]; - _locService.delegate=self; - //启动LocationService - [_locService startUserLocationService]; - _geocodesearch=[[BMKGeoCodeSearch alloc]init]; +// _locService=[[BMKLocationService alloc]init]; +// _locService.delegate=self; +// //启动LocationService +// [_locService startUserLocationService]; +// _geocodesearch=[[BMKGeoCodeSearch alloc]init]; + if ([CLLocationManager locationServicesEnabled]) { + _locationManager = [[CLLocationManager alloc]init]; + _locationManager.delegate = self; + [_locationManager requestAlwaysAuthorization]; + _currentCity = [[NSString alloc]init]; + [_locationManager requestWhenInUseAuthorization]; + _locationManager.desiredAccuracy = kCLLocationAccuracyBest; + _locationManager.distanceFilter = 5.0; + [_locationManager startUpdatingLocation]; + } } -//处理方向变更信息 -- (void)didUpdateUserHeading:(BMKUserLocation *)userLocation -{ - //NSLog(@"heading is %@",userLocation.heading); -} -//处理位置坐标更新 -- (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation -{ - //NSLog(@"didUpdateUserLocation lat %f,long %f",userLocation.location.coordinate.latitude,userLocation.location.coordinate.longitude); - [self reverseGeoCodeWithlatitude:userLocation.location.coordinate.latitude addlongitude:userLocation.location.coordinate.longitude]; - // static dispatch_once_t disOnce; - // dispatch_once(&disOnce, ^ { - // - // [self reverseGeoCodeWithlatitude:userLocation.location.coordinate.latitude addlongitude:userLocation.location.coordinate.longitude]; - // }); + +#pragma mark - 定位失败 +-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error{ + UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"提示" message:@"请在设置中打开定位" preferredStyle:UIAlertControllerStyleAlert]; + UIAlertAction *ok = [UIAlertAction actionWithTitle:@"打开定位" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { + NSURL *settingURL = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; + [[UIApplication sharedApplication]openURL:settingURL]; + }]; + UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) { + + }]; + [alert addAction:cancel]; + [alert addAction:ok]; + [self presentViewController:alert animated:YES completion:nil]; } +#pragma mark - 定位成功 +-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{ + + [_locationManager stopUpdatingLocation]; + CLLocation *currentLocation = [locations lastObject]; + CLGeocoder *geoCoder = [[CLGeocoder alloc]init]; + //当前的经纬度 + NSLog(@"当前的经纬度 %f,%f",currentLocation.coordinate.latitude,currentLocation.coordinate.longitude); + //这里的代码是为了判断didUpdateLocations调用了几次 有可能会出现多次调用 为了避免不必要的麻烦 在这里加个if判断 如果大于1.0就return + NSTimeInterval locationAge = -[currentLocation.timestamp timeIntervalSinceNow]; + if (locationAge > 1.0){//如果调用已经一次,不再执行 + return; + } + //地理反编码 可以根据坐标(经纬度)确定位置信息(街道 门牌等) + [geoCoder reverseGeocodeLocation:currentLocation completionHandler:^(NSArray * _Nullable placemarks, NSError * _Nullable error) { + if (placemarks.count >0) { + CLPlacemark *placeMark = placemarks[0]; + _currentCity = placeMark.locality; + if (!_currentCity) { + _currentCity = @"无法定位当前城市"; + } + //看需求定义一个全局变量来接收赋值 + NSLog(@"当前国家 - %@",placeMark.country);//当前国家 + NSLog(@"当前城市 - %@",_currentCity);//当前城市 + NSLog(@"当前位置 - %@",placeMark.subLocality);//当前位置 + NSLog(@"当前街道 - %@",placeMark.thoroughfare);//当前街道 + NSLog(@"具体地址 - %@",placeMark.name);//具体地址 + NSString *message = [NSString stringWithFormat:@"%@,%@,%@,%@,%@",placeMark.country,_currentCity,placeMark.subLocality,placeMark.thoroughfare,placeMark.name]; + + self.address=message; + }else if (error == nil && placemarks.count){ + + NSLog(@"NO location and error return"); + }else if (error){ + + NSLog(@"loction error:%@",error); + } + }]; +} + + +//处理方向变更信息 +//- (void)didUpdateUserHeading:(BMKUserLocation *)userLocation +//{ +// //NSLog(@"heading is %@",userLocation.heading); +//} +//处理位置坐标更新 +//- (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation +//{ +// //NSLog(@"didUpdateUserLocation lat %f,long %f",userLocation.location.coordinate.latitude,userLocation.location.coordinate.longitude); +// [self reverseGeoCodeWithlatitude:userLocation.location.coordinate.latitude addlongitude:userLocation.location.coordinate.longitude]; +// // static dispatch_once_t disOnce; +// // dispatch_once(&disOnce, ^ { +// // +// // [self reverseGeoCodeWithlatitude:userLocation.location.coordinate.latitude addlongitude:userLocation.location.coordinate.longitude]; +// // }); +// +//} /** * 地理反编码 */ --(void)reverseGeoCodeWithlatitude:(CLLocationDegrees)latitude addlongitude:(CLLocationDegrees)longitude{ - CLLocationCoordinate2D pt=(CLLocationCoordinate2D){latitude,longitude}; - BMKReverseGeoCodeOption *reverseGeocodeSearchOption = [[BMKReverseGeoCodeOption alloc]init]; - reverseGeocodeSearchOption.reverseGeoPoint=pt; - BOOL flag = [_geocodesearch reverseGeoCode:reverseGeocodeSearchOption]; - if(flag) - { - NSLog(@"反geo检索发送成功"); - } - else - { - NSLog(@"反geo检索发送失败"); - } - -} --(void)dealloc{ - - if (_geocodesearch!=nil) { - _geocodesearch=nil; - } -} +//-(void)reverseGeoCodeWithlatitude:(CLLocationDegrees)latitude addlongitude:(CLLocationDegrees)longitude{ +// CLLocationCoordinate2D pt=(CLLocationCoordinate2D){latitude,longitude}; +// BMKReverseGeoCodeOption *reverseGeocodeSearchOption = [[BMKReverseGeoCodeOption alloc]init]; +// reverseGeocodeSearchOption.reverseGeoPoint=pt; +// BOOL flag = [_geocodesearch reverseGeoCode:reverseGeocodeSearchOption]; +// if(flag) +// { +// NSLog(@"反geo检索发送成功"); +// } +// else +// { +// NSLog(@"反geo检索发送失败"); +// } +// +//} +//-(void)dealloc{ +// +// if (_geocodesearch!=nil) { +// _geocodesearch=nil; +// } +//} #pragma mark BMKGeoCodeSearchDelegate --(void)onGetReverseGeoCodeResult:(BMKGeoCodeSearch *)searcher result:(BMKReverseGeoCodeResult *)result errorCode:(BMKSearchErrorCode)error{ - NSLog(@"address%@",result.address); - self.address = result.address; - - - // IfishSHopEdite3ViewCell *cell = [self.view viewWithTag:CELL6_TAG]; - - // if (cell) { - - // cell.addressFiled.text= self.address; - - // } - - // static dispatch_once_t disOnce; - // dispatch_once(&disOnce, ^ { - - // [self.tableView reloadData]; - - // }); - - -} +//-(void)onGetReverseGeoCodeResult:(BMKGeoCodeSearch *)searcher result:(BMKReverseGeoCodeResult *)result errorCode:(BMKSearchErrorCode)error{ +// NSLog(@"address%@",result.address); +// self.address = result.address; +// +// +// // IfishSHopEdite3ViewCell *cell = [self.view viewWithTag:CELL6_TAG]; +// +// // if (cell) { +// +// // cell.addressFiled.text= self.address; +// +// // } +// +// // static dispatch_once_t disOnce; +// // dispatch_once(&disOnce, ^ { +// +// // [self.tableView reloadData]; +// +// // }); +// +// +//} -- (void)onGetGeoCodeResult:(BMKGeoCodeSearch *)searcher result:(BMKGeoCodeResult *)result errorCode:(BMKSearchErrorCode)error{ - - -} +//- (void)onGetGeoCodeResult:(BMKGeoCodeSearch *)searcher result:(BMKGeoCodeResult *)result errorCode:(BMKSearchErrorCode)error{ +// +// +//} -(void)goBackAction{ @@ -196,8 +266,8 @@ UIGestureRecognizerDelegate> -(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; - _geocodesearch.delegate=self;// 此处记得不用的时候需要置nil, - _locService.delegate=self; +// _geocodesearch.delegate=self;// 此处记得不用的时候需要置nil, +// _locService.delegate=self; } @@ -213,7 +283,7 @@ UIGestureRecognizerDelegate> -(void)viewWillDisappear:(BOOL)animated{ [super viewWillDisappear:animated]; - _locService.delegate=nil; +// _locService.delegate=nil; // 开启 if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) { self.navigationController.interactivePopGestureRecognizer.enabled = YES; diff --git a/Ifish/controllers/IfishTabControllers/探索/IfishNewShopsFlie/ShopCertificationNewFile/view/ShopCerPart1InfoViewCell.m b/Ifish/controllers/IfishTabControllers/探索/IfishNewShopsFlie/ShopCertificationNewFile/view/ShopCerPart1InfoViewCell.m index 3d623f7..b8ae8ef 100644 --- a/Ifish/controllers/IfishTabControllers/探索/IfishNewShopsFlie/ShopCertificationNewFile/view/ShopCerPart1InfoViewCell.m +++ b/Ifish/controllers/IfishTabControllers/探索/IfishNewShopsFlie/ShopCertificationNewFile/view/ShopCerPart1InfoViewCell.m @@ -15,22 +15,24 @@ #define CELLPCA_TAG 11111001 #define CELLTAGS_INFO 10000 #import "ChinaPlckerView.h" -#import -#import -#import +//#import +//#import +//#import #import "FishShopCer.h" -@interface ShopCerPart1InfoViewCell () +#import +@interface ShopCerPart1InfoViewCell () { - BMKGeoCodeSearch*_geocodesearch; + //BMKGeoCodeSearch*_geocodesearch; } @property(nonatomic,strong) NSString *privence; @property(nonatomic,strong) NSString *city; @property(nonatomic,strong) NSString *area; @property(nonatomic,strong) NSString *address; -@property(nonatomic)BMKLocationService *locService; +//@property(nonatomic)BMKLocationService *locService; +@property (nonatomic,strong ) CLLocationManager *locationManager;//定位服务 +@property (nonatomic,copy) NSString *currentCity;//城市 @end @@ -52,79 +54,152 @@ BMKGeoCodeSearchDelegate> #pragma mark 定位 -(void)getLocation{ //初始化BMKLocationService - _locService=[[BMKLocationService alloc]init]; - _locService.delegate=self; - //启动LocationService - [_locService startUserLocationService]; - _geocodesearch=[[BMKGeoCodeSearch alloc]init]; - _geocodesearch.delegate=self;// 此处记得不用的时候需要置nil, +// _locService=[[BMKLocationService alloc]init]; +// _locService.delegate=self; +// //启动LocationService +// [_locService startUserLocationService]; +// _geocodesearch=[[BMKGeoCodeSearch alloc]init]; +// _geocodesearch.delegate=self;// 此处记得不用的时候需要置nil, + if ([CLLocationManager locationServicesEnabled]) { + _locationManager = [[CLLocationManager alloc]init]; + _locationManager.delegate = self; + [_locationManager requestAlwaysAuthorization]; + _currentCity = [[NSString alloc]init]; + [_locationManager requestWhenInUseAuthorization]; + _locationManager.desiredAccuracy = kCLLocationAccuracyBest; + _locationManager.distanceFilter = 5.0; + [_locationManager startUpdatingLocation]; + } + +} + + +#pragma mark - 定位失败 +-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error{ + + UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"提示" message:@"请在设置中打开定位" preferredStyle:UIAlertControllerStyleAlert]; + UIAlertAction *ok = [UIAlertAction actionWithTitle:@"打开定位" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { + NSURL *settingURL = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; + [[UIApplication sharedApplication]openURL:settingURL]; + }]; + UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) { + + }]; + [alert addAction:cancel]; + [alert addAction:ok]; + + [self.window.rootViewController presentViewController:alert animated:YES completion:nil]; +} +#pragma mark - 定位成功 +-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{ + + [_locationManager stopUpdatingLocation]; + CLLocation *currentLocation = [locations lastObject]; + CLGeocoder *geoCoder = [[CLGeocoder alloc]init]; + //当前的经纬度 + NSLog(@"当前的经纬度 %f,%f",currentLocation.coordinate.latitude,currentLocation.coordinate.longitude); + //这里的代码是为了判断didUpdateLocations调用了几次 有可能会出现多次调用 为了避免不必要的麻烦 在这里加个if判断 如果大于1.0就return + NSTimeInterval locationAge = -[currentLocation.timestamp timeIntervalSinceNow]; + if (locationAge > 1.0){//如果调用已经一次,不再执行 + return; + } + //地理反编码 可以根据坐标(经纬度)确定位置信息(街道 门牌等) + [geoCoder reverseGeocodeLocation:currentLocation completionHandler:^(NSArray * _Nullable placemarks, NSError * _Nullable error) { + if (placemarks.count >0) { + CLPlacemark *placeMark = placemarks[0]; + _currentCity = placeMark.locality; + if (!_currentCity) { + _currentCity = @"无法定位当前城市"; + } + //看需求定义一个全局变量来接收赋值 + NSLog(@"当前国家 - %@",placeMark.country);//当前国家 + NSLog(@"当前城市 - %@",_currentCity);//当前城市 + NSLog(@"当前位置 - %@",placeMark.subLocality);//当前位置 + NSLog(@"当前街道 - %@",placeMark.thoroughfare);//当前街道 + NSLog(@"具体地址 - %@",placeMark.name);//具体地址 + NSString *message = [NSString stringWithFormat:@"%@,%@,%@,%@,%@",placeMark.country,_currentCity,placeMark.subLocality,placeMark.thoroughfare,placeMark.name]; + + self.address = message; + + + NSIndexPath *index=[NSIndexPath indexPathForRow:4 inSection:0]; + NSArray *dexArr = @[index]; + [self.firstPartTab reloadRowsAtIndexPaths:dexArr withRowAnimation:UITableViewRowAnimationNone]; + }else if (error == nil && placemarks.count){ + + NSLog(@"NO location and error return"); + }else if (error){ + + NSLog(@"loction error:%@",error); + } + }]; } //处理方向变更信息 -- (void)didUpdateUserHeading:(BMKUserLocation *)userLocation -{ - //NSLog(@"heading is %@",userLocation.heading); -} +//- (void)didUpdateUserHeading:(BMKUserLocation *)userLocation +//{ +// //NSLog(@"heading is %@",userLocation.heading); +//} //处理位置坐标更新 -- (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation -{ - //NSLog(@"didUpdateUserLocation lat %f,long %f",userLocation.location.coordinate.latitude,userLocation.location.coordinate.longitude); - [self reverseGeoCodeWithlatitude:userLocation.location.coordinate.latitude addlongitude:userLocation.location.coordinate.longitude]; - // static dispatch_once_t disOnce; - // dispatch_once(&disOnce, ^ { - // - // [self reverseGeoCodeWithlatitude:userLocation.location.coordinate.latitude addlongitude:userLocation.location.coordinate.longitude]; - // }); - -} +//- (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation +//{ +// //NSLog(@"didUpdateUserLocation lat %f,long %f",userLocation.location.coordinate.latitude,userLocation.location.coordinate.longitude); +// [self reverseGeoCodeWithlatitude:userLocation.location.coordinate.latitude addlongitude:userLocation.location.coordinate.longitude]; +// // static dispatch_once_t disOnce; +// // dispatch_once(&disOnce, ^ { +// // +// // [self reverseGeoCodeWithlatitude:userLocation.location.coordinate.latitude addlongitude:userLocation.location.coordinate.longitude]; +// // }); +// +//} /** * 地理反编码 */ --(void)reverseGeoCodeWithlatitude:(CLLocationDegrees)latitude addlongitude:(CLLocationDegrees)longitude{ - CLLocationCoordinate2D pt=(CLLocationCoordinate2D){latitude,longitude}; - BMKReverseGeoCodeOption *reverseGeocodeSearchOption = [[BMKReverseGeoCodeOption alloc]init]; - reverseGeocodeSearchOption.reverseGeoPoint=pt; - BOOL flag = [_geocodesearch reverseGeoCode:reverseGeocodeSearchOption]; - if(flag) - { - NSLog(@"反geo检索发送成功"); - } - else - { - NSLog(@"反geo检索发送失败"); - } - -} --(void)dealloc{ - - if (_geocodesearch!=nil) { - _geocodesearch=nil; - } -} +//-(void)reverseGeoCodeWithlatitude:(CLLocationDegrees)latitude addlongitude:(CLLocationDegrees)longitude{ +// CLLocationCoordinate2D pt=(CLLocationCoordinate2D){latitude,longitude}; +// BMKReverseGeoCodeOption *reverseGeocodeSearchOption = [[BMKReverseGeoCodeOption alloc]init]; +// reverseGeocodeSearchOption.reverseGeoPoint=pt; +// BOOL flag = [_geocodesearch reverseGeoCode:reverseGeocodeSearchOption]; +// if(flag) +// { +// NSLog(@"反geo检索发送成功"); +// } +// else +// { +// NSLog(@"反geo检索发送失败"); +// } +// +//} +//-(void)dealloc{ +// +// if (_geocodesearch!=nil) { +// _geocodesearch=nil; +// } +//} #pragma mark BMKGeoCodeSearchDelegate --(void)onGetReverseGeoCodeResult:(BMKGeoCodeSearch *)searcher result:(BMKReverseGeoCodeResult *)result errorCode:(BMKSearchErrorCode)error{ - NSLog(@"address%@",result.address); - self.address = result.address; - - - NSIndexPath *index=[NSIndexPath indexPathForRow:4 inSection:0]; - NSArray *dexArr = @[index]; - [self.firstPartTab reloadRowsAtIndexPaths:dexArr withRowAnimation:UITableViewRowAnimationNone]; - -// static dispatch_once_t disOnce; -// dispatch_once(&disOnce, ^ { -// -// -// }); - - -} +//-(void)onGetReverseGeoCodeResult:(BMKGeoCodeSearch *)searcher result:(BMKReverseGeoCodeResult *)result errorCode:(BMKSearchErrorCode)error{ +// NSLog(@"address%@",result.address); +// self.address = result.address; +// +// +// NSIndexPath *index=[NSIndexPath indexPathForRow:4 inSection:0]; +// NSArray *dexArr = @[index]; +// [self.firstPartTab reloadRowsAtIndexPaths:dexArr withRowAnimation:UITableViewRowAnimationNone]; +// +//// static dispatch_once_t disOnce; +//// dispatch_once(&disOnce, ^ { +//// +//// +//// }); +// +// +//} -- (void)onGetGeoCodeResult:(BMKGeoCodeSearch *)searcher result:(BMKGeoCodeResult *)result errorCode:(BMKSearchErrorCode)error{ - -} +//- (void)onGetGeoCodeResult:(BMKGeoCodeSearch *)searcher result:(BMKGeoCodeResult *)result errorCode:(BMKSearchErrorCode)error{ +// +//} -(void)layoutSubviews{ @@ -380,7 +455,7 @@ BMKGeoCodeSearchDelegate> cermod.shopAddress = detailLocation.detailLactionTextView.text; } - _locService.delegate=nil; +// _locService.delegate=nil; if (self.delegate) { [self.delegate nextBtnClickAction:cermod]; } diff --git a/Ifish/controllers/IfishTabControllers/探索/IfishNewShopsFlie/ViewController/ShopErWeiMaViewController.m b/Ifish/controllers/IfishTabControllers/探索/IfishNewShopsFlie/ViewController/ShopErWeiMaViewController.m index 3b437c0..4c7019b 100644 --- a/Ifish/controllers/IfishTabControllers/探索/IfishNewShopsFlie/ViewController/ShopErWeiMaViewController.m +++ b/Ifish/controllers/IfishTabControllers/探索/IfishNewShopsFlie/ViewController/ShopErWeiMaViewController.m @@ -28,7 +28,7 @@ self.holdBackView.layer.cornerRadius = 10; self.holdBackView.layer.shadowOffset = CGSizeZero; self.holdBackView.layer.shadowOpacity = 0.8f; - + UIBezierPath *shadowPath = [UIBezierPath bezierPathWithRect:self.holdBackView.bounds]; self.holdBackView.layer.shadowPath = shadowPath.CGPath; self.bootomLabel.textColor = RGB(153, 153, 153); diff --git a/Ifish/controllers/IfishTabControllers/探索/lookafterWorkbech/ShopEditViewController.m b/Ifish/controllers/IfishTabControllers/探索/lookafterWorkbech/ShopEditViewController.m index 419ca72..07e02a7 100644 --- a/Ifish/controllers/IfishTabControllers/探索/lookafterWorkbech/ShopEditViewController.m +++ b/Ifish/controllers/IfishTabControllers/探索/lookafterWorkbech/ShopEditViewController.m @@ -19,9 +19,12 @@ #define CELLTIJIAOBTN 6660660 #import "ChinaPlckerView.h" #import "CertifyListFourthCell.h" -#import -#import -#import +//#import +//#import +//#import +//#import +//#import +#import #import "UIImageView+WebCache.h" #import "ShopCertificationHtmlController.h" @interface ShopEditViewController () { - BMKGeoCodeSearch*_geocodesearch; +// BMKGeoCodeSearch*_geocodesearch; } @@ -44,7 +48,9 @@ @property(nonatomic,strong) NSArray *titles; @property(nonatomic,strong) NSArray *placeHolders; @property(nonatomic,strong) NSString *address; -@property(nonatomic)BMKLocationService*locService; +//@property(nonatomic)BMKLocationService*locService; +@property (nonatomic,strong ) CLLocationManager *locationManager;//定位服务 +@property (nonatomic,copy) NSString *currentCity;//城市 @property(nonatomic,strong) NSString *privence; @property(nonatomic,strong) NSString *city; @property(nonatomic,strong) NSString *area; @@ -73,86 +79,182 @@ #pragma mark 定位 -(void)getLocation{ //初始化BMKLocationService - _locService=[[BMKLocationService alloc]init]; - _locService.delegate=self; - //启动LocationService - [_locService startUserLocationService]; - _geocodesearch=[[BMKGeoCodeSearch alloc]init]; +// _locService=[[BMKLocationService alloc]init]; +// _locService.delegate=self; +// //启动LocationService +// [_locService startUserLocationService]; +// _geocodesearch=[[BMKGeoCodeSearch alloc]init]; +// _geocodesearch.delegate=self; + + if ([CLLocationManager locationServicesEnabled]) { + _locationManager = [[CLLocationManager alloc]init]; + _locationManager.delegate = self; + [_locationManager requestAlwaysAuthorization]; + _currentCity = [[NSString alloc]init]; + [_locationManager requestWhenInUseAuthorization]; + _locationManager.desiredAccuracy = kCLLocationAccuracyBest; + _locationManager.distanceFilter = 5.0; + [_locationManager startUpdatingLocation]; + } } -//处理方向变更信息 -- (void)didUpdateUserHeading:(BMKUserLocation *)userLocation -{ - //NSLog(@"heading is %@",userLocation.heading); + +#pragma mark - 定位失败 +-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error{ + + UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"提示" message:@"请在设置中打开定位" preferredStyle:UIAlertControllerStyleAlert]; + UIAlertAction *ok = [UIAlertAction actionWithTitle:@"打开定位" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { + NSURL *settingURL = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; + [[UIApplication sharedApplication]openURL:settingURL]; + }]; + UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) { + + }]; + [alert addAction:cancel]; + [alert addAction:ok]; + [self presentViewController:alert animated:YES completion:nil]; } +#pragma mark - 定位成功 +-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{ + + [_locationManager stopUpdatingLocation]; + CLLocation *currentLocation = [locations lastObject]; + CLGeocoder *geoCoder = [[CLGeocoder alloc]init]; + //当前的经纬度 + NSLog(@"当前的经纬度 %f,%f",currentLocation.coordinate.latitude,currentLocation.coordinate.longitude); + //这里的代码是为了判断didUpdateLocations调用了几次 有可能会出现多次调用 为了避免不必要的麻烦 在这里加个if判断 如果大于1.0就return + NSTimeInterval locationAge = -[currentLocation.timestamp timeIntervalSinceNow]; + if (locationAge > 1.0){//如果调用已经一次,不再执行 + return; + } + //地理反编码 可以根据坐标(经纬度)确定位置信息(街道 门牌等) + [geoCoder reverseGeocodeLocation:currentLocation completionHandler:^(NSArray * _Nullable placemarks, NSError * _Nullable error) { + if (placemarks.count >0) { + CLPlacemark *placeMark = placemarks[0]; + _currentCity = placeMark.locality; + if (!_currentCity) { + _currentCity = @"无法定位当前城市"; + } + //看需求定义一个全局变量来接收赋值 + NSLog(@"当前国家 - %@",placeMark.country);//当前国家 + NSLog(@"当前城市 - %@",_currentCity);//当前城市 + NSLog(@"当前位置 - %@",placeMark.subLocality);//当前位置 + NSLog(@"当前街道 - %@",placeMark.thoroughfare);//当前街道 + NSLog(@"具体地址 - %@",placeMark.name);//具体地址 + NSString *message = [NSString stringWithFormat:@"%@,%@,%@,%@,%@",placeMark.country,_currentCity,placeMark.subLocality,placeMark.thoroughfare,placeMark.name]; + self.address =message; + + + CertifyListSecondCell *cell = [self.view viewWithTag:CELLMODYF_LOACTON]; + + if (cell) { + + cell.loactionLabel.text= self.address; + + } + + static dispatch_once_t disOnce; + dispatch_once(&disOnce, ^ { + + [self.tableView reloadData]; + + }); +// UIAlertView *alert = [[UIAlertView alloc]initWithTitle:nil message:message delegate:self cancelButtonTitle:nil otherButtonTitles:@"好", nil]; +// [alert show]; + }else if (error == nil && placemarks.count){ + + NSLog(@"NO location and error return"); + }else if (error){ + + NSLog(@"loction error:%@",error); + } + }]; +} + + + +//处理方向变更信息 +//- (void)didUpdateUserHeading:(BMKUserLocation *)userLocation +//{ +// //NSLog(@"heading is %@",userLocation.heading); +//} //处理位置坐标更新 -- (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation -{ +//- (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation +//{ //NSLog(@"didUpdateUserLocation lat %f,long %f",userLocation.location.coordinate.latitude,userLocation.location.coordinate.longitude); - [self reverseGeoCodeWithlatitude:userLocation.location.coordinate.latitude addlongitude:userLocation.location.coordinate.longitude]; +// [self reverseGeoCodeWithlatitude:userLocation.location.coordinate.latitude addlongitude:userLocation.location.coordinate.longitude]; // static dispatch_once_t disOnce; // dispatch_once(&disOnce, ^ { // // [self reverseGeoCodeWithlatitude:userLocation.location.coordinate.latitude addlongitude:userLocation.location.coordinate.longitude]; // }); -} +//} /** * 地理反编码 */ --(void)reverseGeoCodeWithlatitude:(CLLocationDegrees)latitude addlongitude:(CLLocationDegrees)longitude{ - CLLocationCoordinate2D pt=(CLLocationCoordinate2D){latitude,longitude}; - BMKReverseGeoCodeOption *reverseGeocodeSearchOption = [[BMKReverseGeoCodeOption alloc]init]; - reverseGeocodeSearchOption.reverseGeoPoint=pt; - BOOL flag = [_geocodesearch reverseGeoCode:reverseGeocodeSearchOption]; - if(flag) - { - NSLog(@"反geo检索发送成功"); - } - else - { - NSLog(@"反geo检索发送失败"); - } - -} +//-(void)reverseGeoCodeWithlatitude:(CLLocationDegrees)latitude addlongitude:(CLLocationDegrees)longitude{ +// CLLocationCoordinate2D pt=(CLLocationCoordinate2D){latitude,longitude}; +// BMKReverseGeoCodeOption *reverseGeocodeSearchOption = [[BMKReverseGeoCodeOption alloc]init]; +// reverseGeocodeSearchOption.reverseGeoPoint=pt; +// BOOL flag = [_geocodesearch reverseGeoCode:reverseGeocodeSearchOption]; +// if(flag) +// { +// NSLog(@"反geo检索发送成功"); +// } +// else +// { +// NSLog(@"反geo检索发送失败"); +// } +// +//} -(void)dealloc{ - if (_geocodesearch!=nil) { - _geocodesearch=nil; - } +// if (_geocodesearch!=nil) { +// _geocodesearch=nil; +// } } #pragma mark BMKGeoCodeSearchDelegate --(void)onGetReverseGeoCodeResult:(BMKGeoCodeSearch *)searcher result:(BMKReverseGeoCodeResult *)result errorCode:(BMKSearchErrorCode)error{ - NSLog(@"address%@",result.address); - self.address = result.address; - - - CertifyListSecondCell *cell = [self.view viewWithTag:CELLMODYF_LOACTON]; - - if (cell) { - - cell.loactionLabel.text= self.address; - - } - - static dispatch_once_t disOnce; - dispatch_once(&disOnce, ^ { - - [self.tableView reloadData]; - - }); - - - - -} +//-(void)onGetReverseGeoCodeResult:(BMKGeoCodeSearch *)searcher result:(BMKReverseGeoCodeResult *)result errorCode:(BMKSearchErrorCode)error{ +// NSLog(@"address%@",result.address); +// self.address = result.address; +// +// +// CertifyListSecondCell *cell = [self.view viewWithTag:CELLMODYF_LOACTON]; +// +// if (cell) { +// +// cell.loactionLabel.text= self.address; +// +// } +// +// static dispatch_once_t disOnce; +// dispatch_once(&disOnce, ^ { +// +// [self.tableView reloadData]; +// +// }); +// +//} -- (void)onGetGeoCodeResult:(BMKGeoCodeSearch *)searcher result:(BMKGeoCodeResult *)result errorCode:(BMKSearchErrorCode)error{ - - -} +//返回地址信息搜索结果 +//- (void)onGetGeoCodeResult:(BMKGeoCodeSearch *)searcher result:(BMKGeoCodeResult *)result errorCode:(BMKSearchErrorCode)error { +// +// if (error == BMK_SEARCH_NO_ERROR) { +// //在此处理正常结果 +// } +// else { +// NSLog(@"抱歉,未找到结果"); +// } +//} + +// +//- (void)onGetGeoCodeResult:(BMKGeoCodeSearch *)searcher result:(BMKGeoCodeResult *)result errorCode:(BMKSearchErrorCode)error{ +// +// +//} -(void)goBackAction{ @@ -185,8 +287,8 @@ -(void)viewWillAppear:(BOOL)animated{ - _geocodesearch.delegate=self;// 此处记得不用的时候需要置nil, - _locService.delegate=self; +// _geocodesearch.delegate=self;// 此处记得不用的时候需要置nil, +// _locService.delegate=self; } @@ -201,7 +303,7 @@ } -(void)viewWillDisappear:(BOOL)animated{ - _locService.delegate=nil; +// _locService.delegate=nil; [super viewWillDisappear:animated]; diff --git a/Ifish/controllers/IfishTabControllers/探索/shopCertification/ShopCertificationViewController.m b/Ifish/controllers/IfishTabControllers/探索/shopCertification/ShopCertificationViewController.m index c8a5da0..f8d5d09 100644 --- a/Ifish/controllers/IfishTabControllers/探索/shopCertification/ShopCertificationViewController.m +++ b/Ifish/controllers/IfishTabControllers/探索/shopCertification/ShopCertificationViewController.m @@ -33,9 +33,9 @@ #import "ShopCertificationHtmlController.h" #import "ChinaPlckerView.h" -#import -#import -#import +//#import +//#import +//#import #import "UIImageView+WebCache.h" @@ -44,6 +44,7 @@ #import "CertificationShopModel.h" #import "CusomeCameraViewController.h" #import "WFPhotosViewController.h" +#import //v4.4 后更改UI 此界面废弃 @interface ShopCertificationViewController () { - BMKGeoCodeSearch*_geocodesearch; +// BMKGeoCodeSearch*_geocodesearch; } @property(nonatomic,strong)UITableView *tableView; @@ -66,13 +67,15 @@ @property(nonatomic,strong) NSArray *pictitles; @property(nonatomic,strong)UIActionSheet*photosheet; @property(nonatomic) NSInteger selectTag; -@property(nonatomic)BMKLocationService*locService; +//@property(nonatomic)BMKLocationService*locService; @property(nonatomic,strong) NSString *privence; @property(nonatomic,strong) NSString *city; @property(nonatomic,strong) NSString *area; @property(nonatomic,strong) NSString *address; @property(nonatomic,strong) NSArray *textFeildTexts; +@property (nonatomic,strong ) CLLocationManager *locationManager;//定位服务 +@property (nonatomic,copy) NSString *currentCity;//城市 @end @@ -118,9 +121,9 @@ -(void)viewWillAppear:(BOOL)animated{ - _geocodesearch.delegate=self;// 此处记得不用的时候需要置nil, - _locService.delegate=self; - +// _geocodesearch.delegate=self;// 此处记得不用的时候需要置nil, +// _locService.delegate=self; +// } @@ -135,7 +138,7 @@ } -(void)viewWillDisappear:(BOOL)animated{ - _locService.delegate=nil; +// _locService.delegate=nil; [super viewWillDisappear:animated]; @@ -149,86 +152,157 @@ #pragma mark 定位 -(void)getLocation{ //初始化BMKLocationService - _locService=[[BMKLocationService alloc]init]; - _locService.delegate=self; - //启动LocationService - [_locService startUserLocationService]; - _geocodesearch=[[BMKGeoCodeSearch alloc]init]; - +// _locService=[[BMKLocationService alloc]init]; +// _locService.delegate=self; +// //启动LocationService +// [_locService startUserLocationService]; +// _geocodesearch=[[BMKGeoCodeSearch alloc]init]; + if ([CLLocationManager locationServicesEnabled]) { + _locationManager = [[CLLocationManager alloc]init]; + _locationManager.delegate = self; + [_locationManager requestAlwaysAuthorization]; + _currentCity = [[NSString alloc]init]; + [_locationManager requestWhenInUseAuthorization]; + _locationManager.desiredAccuracy = kCLLocationAccuracyBest; + _locationManager.distanceFilter = 5.0; + [_locationManager startUpdatingLocation]; + } } -//处理方向变更信息 -- (void)didUpdateUserHeading:(BMKUserLocation *)userLocation -{ - //NSLog(@"heading is %@",userLocation.heading); -} -//处理位置坐标更新 -- (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation -{ - //NSLog(@"didUpdateUserLocation lat %f,long %f",userLocation.location.coordinate.latitude,userLocation.location.coordinate.longitude); - [self reverseGeoCodeWithlatitude:userLocation.location.coordinate.latitude addlongitude:userLocation.location.coordinate.longitude]; -// static dispatch_once_t disOnce; -// dispatch_once(&disOnce, ^ { -// -// [self reverseGeoCodeWithlatitude:userLocation.location.coordinate.latitude addlongitude:userLocation.location.coordinate.longitude]; -// }); +#pragma mark - 定位失败 +-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error{ + UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"提示" message:@"请在设置中打开定位" preferredStyle:UIAlertControllerStyleAlert]; + UIAlertAction *ok = [UIAlertAction actionWithTitle:@"打开定位" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { + NSURL *settingURL = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; + [[UIApplication sharedApplication]openURL:settingURL]; + }]; + UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) { + + }]; + [alert addAction:cancel]; + [alert addAction:ok]; + [self presentViewController:alert animated:YES completion:nil]; } +#pragma mark - 定位成功 +-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{ + + [_locationManager stopUpdatingLocation]; + CLLocation *currentLocation = [locations lastObject]; + CLGeocoder *geoCoder = [[CLGeocoder alloc]init]; + //当前的经纬度 + NSLog(@"当前的经纬度 %f,%f",currentLocation.coordinate.latitude,currentLocation.coordinate.longitude); + //这里的代码是为了判断didUpdateLocations调用了几次 有可能会出现多次调用 为了避免不必要的麻烦 在这里加个if判断 如果大于1.0就return + NSTimeInterval locationAge = -[currentLocation.timestamp timeIntervalSinceNow]; + if (locationAge > 1.0){//如果调用已经一次,不再执行 + return; + } + //地理反编码 可以根据坐标(经纬度)确定位置信息(街道 门牌等) + [geoCoder reverseGeocodeLocation:currentLocation completionHandler:^(NSArray * _Nullable placemarks, NSError * _Nullable error) { + if (placemarks.count >0) { + CLPlacemark *placeMark = placemarks[0]; + _currentCity = placeMark.locality; + if (!_currentCity) { + _currentCity = @"无法定位当前城市"; + } + //看需求定义一个全局变量来接收赋值 + NSLog(@"当前国家 - %@",placeMark.country);//当前国家 + NSLog(@"当前城市 - %@",_currentCity);//当前城市 + NSLog(@"当前位置 - %@",placeMark.subLocality);//当前位置 + NSLog(@"当前街道 - %@",placeMark.thoroughfare);//当前街道 + NSLog(@"具体地址 - %@",placeMark.name);//具体地址 + NSString *message = [NSString stringWithFormat:@"%@,%@,%@,%@,%@",placeMark.country,_currentCity,placeMark.subLocality,placeMark.thoroughfare,placeMark.name]; + self.address = message; + static dispatch_once_t disOnce; + dispatch_once(&disOnce, ^ { + + [self.tableView reloadData]; + + }); + + }else if (error == nil && placemarks.count){ + + NSLog(@"NO location and error return"); + }else if (error){ + + NSLog(@"loction error:%@",error); + } + }]; +} + + +//处理方向变更信息 +//- (void)didUpdateUserHeading:(BMKUserLocation *)userLocation +//{ +// //NSLog(@"heading is %@",userLocation.heading); +//} +//处理位置坐标更新 +//- (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation +//{ +// //NSLog(@"didUpdateUserLocation lat %f,long %f",userLocation.location.coordinate.latitude,userLocation.location.coordinate.longitude); +// [self reverseGeoCodeWithlatitude:userLocation.location.coordinate.latitude addlongitude:userLocation.location.coordinate.longitude]; +//// static dispatch_once_t disOnce; +//// dispatch_once(&disOnce, ^ { +//// +//// [self reverseGeoCodeWithlatitude:userLocation.location.coordinate.latitude addlongitude:userLocation.location.coordinate.longitude]; +//// }); +// +//} /** * 地理反编码 */ --(void)reverseGeoCodeWithlatitude:(CLLocationDegrees)latitude addlongitude:(CLLocationDegrees)longitude{ - CLLocationCoordinate2D pt=(CLLocationCoordinate2D){latitude,longitude}; - BMKReverseGeoCodeOption *reverseGeocodeSearchOption = [[BMKReverseGeoCodeOption alloc]init]; - reverseGeocodeSearchOption.reverseGeoPoint=pt; - BOOL flag = [_geocodesearch reverseGeoCode:reverseGeocodeSearchOption]; - if(flag) - { - NSLog(@"反geo检索发送成功"); - } - else - { - NSLog(@"反geo检索发送失败"); - } - -} --(void)dealloc{ - - if (_geocodesearch!=nil) { - _geocodesearch=nil; - } -} +//-(void)reverseGeoCodeWithlatitude:(CLLocationDegrees)latitude addlongitude:(CLLocationDegrees)longitude{ +// CLLocationCoordinate2D pt=(CLLocationCoordinate2D){latitude,longitude}; +// BMKReverseGeoCodeOption *reverseGeocodeSearchOption = [[BMKReverseGeoCodeOption alloc]init]; +// reverseGeocodeSearchOption.reverseGeoPoint=pt; +// BOOL flag = [_geocodesearch reverseGeoCode:reverseGeocodeSearchOption]; +// if(flag) +// { +// NSLog(@"反geo检索发送成功"); +// } +// else +// { +// NSLog(@"反geo检索发送失败"); +// } +// +//} +//-(void)dealloc{ +// +// if (_geocodesearch!=nil) { +// _geocodesearch=nil; +// } +//} #pragma mark BMKGeoCodeSearchDelegate --(void)onGetReverseGeoCodeResult:(BMKGeoCodeSearch *)searcher result:(BMKReverseGeoCodeResult *)result errorCode:(BMKSearchErrorCode)error{ - NSLog(@"address%@",result.address); - self.address = result.address; - - -// CertifyListSecondCell *cell = [self.view viewWithTag:CERTYVIEW_CELLTAGROW6]; -// -// if (cell) { -// -// cell.loactionLabel.text= result.address; -// -// } - - static dispatch_once_t disOnce; - dispatch_once(&disOnce, ^ { - - [self.tableView reloadData]; - - }); - - - - -} - -- (void)onGetGeoCodeResult:(BMKGeoCodeSearch *)searcher result:(BMKGeoCodeResult *)result errorCode:(BMKSearchErrorCode)error{ - - -} +//-(void)onGetReverseGeoCodeResult:(BMKGeoCodeSearch *)searcher result:(BMKReverseGeoCodeResult *)result errorCode:(BMKSearchErrorCode)error{ +// NSLog(@"address%@",result.address); +// self.address = result.address; +// +// +//// CertifyListSecondCell *cell = [self.view viewWithTag:CERTYVIEW_CELLTAGROW6]; +//// +//// if (cell) { +//// +//// cell.loactionLabel.text= result.address; +//// +//// } +// +// static dispatch_once_t disOnce; +// dispatch_once(&disOnce, ^ { +// +// [self.tableView reloadData]; +// +// }); +// +// +// +// +//} +// +//- (void)onGetGeoCodeResult:(BMKGeoCodeSearch *)searcher result:(BMKGeoCodeResult *)result errorCode:(BMKSearchErrorCode)error{ +// +// +//} -(void)initData{ diff --git a/Ifish/controllers/IfishTabControllers/设备/IfishDeviceSelectList/IfishBindDeviceSelectViewController.m b/Ifish/controllers/IfishTabControllers/设备/IfishDeviceSelectList/IfishBindDeviceSelectViewController.m index 6afb064..2bd390d 100644 --- a/Ifish/controllers/IfishTabControllers/设备/IfishDeviceSelectList/IfishBindDeviceSelectViewController.m +++ b/Ifish/controllers/IfishTabControllers/设备/IfishDeviceSelectList/IfishBindDeviceSelectViewController.m @@ -13,6 +13,8 @@ #import "YooseeNextConnectViewController.h" #import "SecondConnectWifiController.h" #import "IfishHotBarVc.h" +#import "HitbarWifeVc.h" +#import "SVProgressHUD.h" @interface IfishBindDeviceSelectViewController () @@ -28,21 +30,22 @@ extern BOOL isfromCameraView; // Do any additional setup after loading the view. [self addTitleViewWithTitle:@"选择设备"]; [self creatTab]; + [self loginGewell]; } -(void)viewDidAppear:(BOOL)animated{ [super viewDidAppear:animated]; - [self loginGewell]; - if( _islogInGewell){ - - NSLog(@"p2pConnect success.成功,你可以操作设备了"); - - }else{//new added - [self loginGewell]; - NSLog(@"p2pConnect failure.失败,你将不能操作设备"); - - return; - } +// [self loginGewell]; +// if( _islogInGewell){ +// +// NSLog(@"p2pConnect success.成功,你可以操作设备了"); +// +// }else{//new added +// [self loginGewell]; +// NSLog(@"p2pConnect failure.失败,你将不能操作设备"); +// +//// return; +// } } @@ -51,14 +54,14 @@ extern BOOL isfromCameraView; //CGPoint curentpoint= [self.cardScrollView contentOffsetWithIndex:[self.cardScrollView currentCard]]; //[self.cardScrollView.scrollView setContentOffset:curentpoint animated:NO]; - [self loginGewell]; + // [self loginGewell]; } #pragma mark - loginGewell -(void)loginGewell{ - + [SVProgressHUD showWithMaskType:SVProgressHUDMaskTypeBlack]; [[UDPManager sharedDefault] ScanLanDevice]; _islogInGewell = NO; @@ -88,7 +91,24 @@ extern BOOL isfromCameraView; return; } - _islogInGewell = [[P2PClient sharedClient] p2pConnectWithId:userIDName codeStr1:model.P2PVerifyCode1 codeStr2:model.P2PVerifyCode2]; + + dispatch_queue_t queue = dispatch_queue_create("net.bujige.testQueue", DISPATCH_QUEUE_CONCURRENT); + + dispatch_async(queue, ^{ + // 追加任务1 + [[P2PClient sharedClient] p2pConnectWithId:userIDName codeStr1:model.P2PVerifyCode1 codeStr2:model.P2PVerifyCode2]; + + dispatch_async(dispatch_get_main_queue(), ^{ + + [SVProgressHUD dismiss]; + + }); + + + }); + + + } @@ -129,7 +149,9 @@ extern BOOL isfromCameraView; } -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ - + if(self.view.frame.size.width<=340.0){ + return self.view.frame.size.width*0.304; + } return self.view.frame.size.width*0.504; } @@ -207,6 +229,7 @@ extern BOOL isfromCameraView; self.hidesBottomBarWhenPushed = YES; SecondConnectWifiController *wifivc=[[SecondConnectWifiController alloc]init]; + wifivc.vcTitle=@"连接水族箱"; [self.navigationController pushViewController:wifivc animated:YES]; @@ -214,10 +237,15 @@ extern BOOL isfromCameraView; break; case 2: { + + self.hidesBottomBarWhenPushed = YES; + + SecondConnectWifiController *wifivc=[[SecondConnectWifiController alloc]init]; + wifivc.vcTitle=@"连接加热器"; + [self.navigationController pushViewController:wifivc animated:YES]; +// [wifivc addTitleViewWithTitle:@"连接加热器"]; //[self.view makeToast:@"敬请期待"]; 加热棒 - IfishHotBarVc*barVc=[[IfishHotBarVc alloc]init]; - barVc.hidesBottomBarWhenPushed=YES; - [self.navigationController pushViewController:barVc animated:YES]; + } break; diff --git a/Ifish/controllers/IfishTabControllers/设备/IfishDeviceViewController.m b/Ifish/controllers/IfishTabControllers/设备/IfishDeviceViewController.m index cd0e61e..56d248d 100644 --- a/Ifish/controllers/IfishTabControllers/设备/IfishDeviceViewController.m +++ b/Ifish/controllers/IfishTabControllers/设备/IfishDeviceViewController.m @@ -79,6 +79,7 @@ @property (nonatomic,strong) NSMutableArray *goodsArr; @property (nonatomic,strong) MBProgressHUD *progressHud; @property (nonatomic,strong) UILabel *mesglabel; +@property(nonatomic,assign)NSInteger curDeviceIdx; //@property (nonatomic,strong) UIView *redView; @end @@ -100,6 +101,17 @@ [self addDataRequestQueue]; [[NIMSDK sharedSDK].systemNotificationManager addDelegate:self]; [[NIMSDK sharedSDK].conversationManager addDelegate:self]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(deleteCurDevice) name:@"DeleteCurDevice" object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateDevice) name:@"updateDevice" object:nil]; +} + +-(void)updateDevice{ + [self.tableView reloadData]; +} + +-(void)dealloc{ + [[NSNotificationCenter defaultCenter] removeObserver:self name:@"DeleteCurDevice" object:nil]; + [[NSNotificationCenter defaultCenter] removeObserver:self name:@"updateDevice" object:nil]; } -(void)addDataRequestQueue @@ -1135,7 +1147,7 @@ } FormatTankAddCamera *model =self.totalArr[indexPath.row]; - + self.curDeviceIdx=indexPath.row; if (!model) { return; @@ -1420,6 +1432,55 @@ [weakSelf.view makeToast:@"请求异常"]; }]; } + + +#pragma mark---删除当前缓存设备 +-(void)deleteCurDevice{ + FormatTankAddCamera *deviceListModel =self.totalArr[self.curDeviceIdx]; + NSMutableArray *guanxiiArr= [[DataCenter defaultDtacenter] valueForKey:@"devicamerArr"]; + + for (DeviceCameraModel *model in guanxiiArr) { + + if (deviceListModel.device.deviceId == model.deviceId ) { + + [guanxiiArr removeObject:model]; + //保存新关系数组 + [[DataCenter defaultDtacenter] setValue:guanxiiArr forKey:@"devicamerArr"]; + + } + } + + + //重置数据 + NSArray*deviceArry=[[DataCenter defaultDtacenter]valueForKey:@"deviceInfo"]; + NSMutableArray *newArr = [NSMutableArray arrayWithArray:deviceArry]; + + for (DeviceModel *model in deviceArry) { + + if ([model.deviceId isEqual:deviceListModel.device.deviceId]) { + + [newArr removeObject:model]; + } + } + + [[DataCenter defaultDtacenter] setValue: newArr forKey:@"deviceInfo"]; + [self.totalArr removeObjectAtIndex:self.curDeviceIdx]; + NSIndexPath*indexPath=[NSIndexPath indexPathForRow:self.curDeviceIdx inSection:0]; + [self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationRight]; + //GCD中的dispatch_after 实现单次的延时调用 dispatch_time的单位是纳秒,为防止用户使用时候的出现换算上的错误,Xcode在开发者打dispatch_after的时候会自动补全下面一整段代码 + //dispatch_after是延迟提交,不是延迟运行 + //NSEC:纳秒。 + //USEC:微妙。 + //SEC:秒 + //PER:每 + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [self.tableView reloadData]; + + }); + +} + + #pragma mark - 商品列表加载 -(void)loadGoodsData{ __weak typeof (self)weskSelf=self; diff --git a/Ifish/controllers/IfishTabControllers/设备/QianDao/.DS_Store b/Ifish/controllers/IfishTabControllers/设备/QianDao/.DS_Store index 9c04680..f76a80a 100644 Binary files a/Ifish/controllers/IfishTabControllers/设备/QianDao/.DS_Store and b/Ifish/controllers/IfishTabControllers/设备/QianDao/.DS_Store differ diff --git a/Ifish/controllers/IfishYooseeFile/.DS_Store b/Ifish/controllers/IfishYooseeFile/.DS_Store index b2d109b..c0123df 100644 Binary files a/Ifish/controllers/IfishYooseeFile/.DS_Store and b/Ifish/controllers/IfishYooseeFile/.DS_Store differ diff --git a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/YooseeNextConnectViewController.h b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/YooseeNextConnectViewController.h index 9d94d87..106e23a 100644 --- a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/YooseeNextConnectViewController.h +++ b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/YooseeNextConnectViewController.h @@ -33,7 +33,7 @@ enum @property(nonatomic,strong) UITextField *wifiSecFiled; - +@property(nonatomic,strong) UILabel *redTipLable; @property (nonatomic) int conectType; //1-二维码扫描 0-智能联机 @property (strong, nonatomic) NSString *lastSetPassword; diff --git a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/YooseeNextConnectViewController.mm b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/YooseeNextConnectViewController.mm index e7dd717..922221c 100644 --- a/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/YooseeNextConnectViewController.mm +++ b/Ifish/controllers/IfishYooseeFile/IfishYooseeControlller/YooseeNextConnectViewController.mm @@ -108,7 +108,21 @@ typedef NS_ENUM(NSInteger,lodingViewdissMissStyle) { [self soundInit]; _canDissMissController = YES; - + [self redTipLable]; +} + +-(UILabel *)redTipLable{ + if (_redTipLable==nil) { + _redTipLable=[[UILabel alloc]initWithFrame:CGRectMake(19, 165, 100, 10)]; + _redTipLable.text=@"(暂不支持5G网络,请使用2.4G网络)"; + _redTipLable.font=[UIFont systemFontOfSize:13]; + _redTipLable.textColor=[UIColor redColor]; + [_redTipLable sizeToFit]; +// _redTipLable.backgroundColor=[UIColor blackColor]; + [self.view addSubview:_redTipLable]; + [self.view bringSubviewToFront:_redTipLable]; + } + return _redTipLable; } #pragma mark - 声波SDK初始化 @@ -997,6 +1011,7 @@ withFilterContext:(id)filterContext self.wifiSecFiled.hidden = NO; self.sBtn.hidden = NO; self.nodImg.hidden = NO; + self.redTipLable.hidden=NO; self.connectingView.alpha = 0; @@ -1014,6 +1029,7 @@ withFilterContext:(id)filterContext self.wifiSecFiled.hidden = NO; self.sBtn.hidden = NO; self.nodImg.hidden = NO; + self.redTipLable.hidden=NO; }]; } @@ -1041,6 +1057,7 @@ withFilterContext:(id)filterContext self.wifiSecFiled.hidden = YES; self.sBtn.hidden = YES; self.nodImg.hidden = YES; + self.redTipLable.hidden=YES; } diff --git a/Ifish/controllers/IfishYooseeFile/IfishYooseeSource/.DS_Store b/Ifish/controllers/IfishYooseeFile/IfishYooseeSource/.DS_Store index 090eb4e..f3c10ed 100644 Binary files a/Ifish/controllers/IfishYooseeFile/IfishYooseeSource/.DS_Store and b/Ifish/controllers/IfishYooseeFile/IfishYooseeSource/.DS_Store differ diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/.DS_Store b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/.DS_Store old mode 100644 new mode 100755 index 23ad6fa..1959467 Binary files a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/.DS_Store and b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/.DS_Store differ diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/libAVCtrlIOS/libAVCtrl.a b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/libAVCtrlIOS/libAVCtrl.a old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/md5/.DS_Store b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/md5/.DS_Store old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/md5/MD5Manager.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/md5/MD5Manager.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/md5/libMD5Manager.a b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/md5/libMD5Manager.a old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/.DS_Store b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/.DS_Store old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/FfmpegInterface.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/FfmpegInterface.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/FfmpegInterface.m b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/FfmpegInterface.m old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/RtspInterface.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/RtspInterface.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/RtspInterface.mm b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/RtspInterface.mm old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/Rtsp_instance.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/Rtsp_instance.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavcodec/avcodec.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavcodec/avcodec.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavcodec/avfft.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavcodec/avfft.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavcodec/dxva2.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavcodec/dxva2.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavcodec/old_codec_ids.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavcodec/old_codec_ids.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavcodec/vaapi.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavcodec/vaapi.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavcodec/vda.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavcodec/vda.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavcodec/vdpau.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavcodec/vdpau.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavcodec/version.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavcodec/version.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavcodec/xvmc.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavcodec/xvmc.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavformat/avformat.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavformat/avformat.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavformat/avio.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavformat/avio.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavformat/version.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavformat/version.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/adler32.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/adler32.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/aes.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/aes.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/attributes.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/attributes.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/audio_fifo.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/audio_fifo.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/audioconvert.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/audioconvert.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/avassert.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/avassert.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/avconfig.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/avconfig.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/avstring.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/avstring.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/avutil.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/avutil.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/base64.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/base64.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/blowfish.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/blowfish.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/bprint.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/bprint.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/bswap.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/bswap.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/channel_layout.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/channel_layout.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/common.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/common.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/cpu.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/cpu.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/crc.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/crc.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/dict.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/dict.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/error.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/error.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/eval.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/eval.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/fifo.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/fifo.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/file.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/file.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/hmac.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/hmac.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/imgutils.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/imgutils.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/intfloat.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/intfloat.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/intfloat_readwrite.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/intfloat_readwrite.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/intreadwrite.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/intreadwrite.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/lfg.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/lfg.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/log.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/log.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/mathematics.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/mathematics.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/md5.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/md5.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/mem.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/mem.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/old_pix_fmts.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/old_pix_fmts.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/opt.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/opt.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/parseutils.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/parseutils.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/pixdesc.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/pixdesc.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/pixfmt.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/pixfmt.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/random_seed.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/random_seed.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/rational.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/rational.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/samplefmt.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/samplefmt.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/sha.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/sha.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/time.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/time.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/timecode.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/timecode.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/timestamp.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/timestamp.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/version.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/version.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/xtea.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libavutil/xtea.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libswscale/swscale.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libswscale/swscale.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libswscale/version.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/ffmpeg/libswscale/version.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/libRTSP.a b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/rtsp/libRTSP.a old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/wifi/.DS_Store b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/wifi/.DS_Store old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/wifi/elian.h b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/wifi/elian.h old mode 100644 new mode 100755 diff --git a/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/wifi/libelian.a b/Ifish/controllers/IfishYooseeFile/IfishYsooseeNewLib/wifi/libelian.a old mode 100644 new mode 100755 diff --git a/Ifish/controllers/erweima/ScanViewController.m b/Ifish/controllers/erweima/ScanViewController.m index 840d56b..f74e3a6 100644 --- a/Ifish/controllers/erweima/ScanViewController.m +++ b/Ifish/controllers/erweima/ScanViewController.m @@ -207,10 +207,10 @@ [readview stop]; //播放扫描二维码的声音 - SystemSoundID soundID; - NSString *strSoundFile = [[NSBundle mainBundle] pathForResource:@"noticeMusic" ofType:@"wav"]; - AudioServicesCreateSystemSoundID((__bridge CFURLRef)[NSURL fileURLWithPath:strSoundFile],&soundID); - AudioServicesPlaySystemSound(soundID); +// SystemSoundID soundID; +// NSString *strSoundFile = [[NSBundle mainBundle] pathForResource:@"noticeMusic" ofType:@"wav"]; +// AudioServicesCreateSystemSoundID((__bridge CFURLRef)[NSURL fileURLWithPath:strSoundFile],&soundID); +// AudioServicesPlaySystemSound(soundID); [self accordingQcode:result]; diff --git a/Ifish/controllers/leftcontrollers/.DS_Store b/Ifish/controllers/leftcontrollers/.DS_Store index 5008ddf..e46ae0c 100644 Binary files a/Ifish/controllers/leftcontrollers/.DS_Store and b/Ifish/controllers/leftcontrollers/.DS_Store differ diff --git a/Ifish/controllers/leftcontrollers/ConnectHotpotViewController.m b/Ifish/controllers/leftcontrollers/ConnectHotpotViewController.m index e0cfefb..d2303fd 100644 --- a/Ifish/controllers/leftcontrollers/ConnectHotpotViewController.m +++ b/Ifish/controllers/leftcontrollers/ConnectHotpotViewController.m @@ -60,6 +60,13 @@ UITapGestureRecognizer *fiveTapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(test)]; fiveTapGesture.numberOfTapsRequired = 5; [self.containerView addGestureRecognizer:fiveTapGesture]; + + UIImage *hamburger = [[UIImage imageNamed:@"back_btn"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; + self.navigationItem.leftBarButtonItem=[[UIBarButtonItem alloc]initWithImage:hamburger style:0 target:self action:@selector(clickBack)]; +} + +-(void)clickBack{ + [self.navigationController popViewControllerAnimated:YES]; } - (void)test { @@ -169,7 +176,7 @@ [self appendTrakContent:[NSString stringWithFormat:@"答复状态码:%@", backModel.result]]; [self appendTrakContent:[NSString stringWithFormat:@"答复Mac地址:%@", backModel.senderMacAddress]]; self.macAddress = backModel.senderMacAddress; - + [IFishHotpotUDPHelper sharedInstance].delegate = nil; [[IFishHotpotUDPHelper sharedInstance] broadCastRestartCommand]; self.bindTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(startBinding) userInfo:nil repeats:YES]; @@ -246,7 +253,8 @@ self.HUD.labelText = @"设备不在服务器"; }else{ - self.HUD.labelText = @"设备绑定成功"; + + self.HUD.labelText = @"设备绑定成功"; [[IfishDataUnity shareDataInstance] initAppCenterVcWith:devicemodel addWithdissMisVc:nil]; //绑定成功 加 经验值 diff --git a/Ifish/controllers/leftcontrollers/ConnectHotpotViewController.xib b/Ifish/controllers/leftcontrollers/ConnectHotpotViewController.xib index 00ed8b8..910c801 100644 --- a/Ifish/controllers/leftcontrollers/ConnectHotpotViewController.xib +++ b/Ifish/controllers/leftcontrollers/ConnectHotpotViewController.xib @@ -1,5 +1,5 @@ - + @@ -31,7 +31,7 @@ - + @@ -201,7 +201,4 @@ - - - diff --git a/Ifish/controllers/leftcontrollers/ConnectHotspotTipViewController.xib b/Ifish/controllers/leftcontrollers/ConnectHotspotTipViewController.xib index 15ebe93..883c0cb 100644 --- a/Ifish/controllers/leftcontrollers/ConnectHotspotTipViewController.xib +++ b/Ifish/controllers/leftcontrollers/ConnectHotspotTipViewController.xib @@ -1,5 +1,5 @@ - + diff --git a/Ifish/controllers/leftcontrollers/IFishHotpotUDPHelper.m b/Ifish/controllers/leftcontrollers/IFishHotpotUDPHelper.m index 960ba1c..c1870c9 100644 --- a/Ifish/controllers/leftcontrollers/IFishHotpotUDPHelper.m +++ b/Ifish/controllers/leftcontrollers/IFishHotpotUDPHelper.m @@ -118,7 +118,6 @@ -(void)sendConnectHotspotSoketdata{ NSString* hostS = @"192.168.4.1"; - //120.55.190.56 服务器IP 指令中用 ConnectHotspotModel *model = [ConnectHotspotModel new]; model.ssidName = _ssidName; diff --git a/Ifish/controllers/leftcontrollers/SecondConnectWifiController.h b/Ifish/controllers/leftcontrollers/SecondConnectWifiController.h index e4b23e7..ad58ccf 100644 --- a/Ifish/controllers/leftcontrollers/SecondConnectWifiController.h +++ b/Ifish/controllers/leftcontrollers/SecondConnectWifiController.h @@ -13,6 +13,7 @@ @property (weak, nonatomic) IBOutlet UIImageView *wifigifImgView; @property (weak, nonatomic) IBOutlet UILabel *wifiNamelabel; @property (weak, nonatomic) IBOutlet UITextField *wifiTextFiled; +@property (weak, nonatomic) IBOutlet UILabel *redTextLable; - (IBAction)makeSureButton:(id)sender; @@ -28,6 +29,7 @@ @property (weak, nonatomic) IBOutlet UIImageView *nodImg; @property (weak, nonatomic) IBOutlet UILabel *connectTipLbl; @property (weak, nonatomic) IBOutlet UIButton *connectBtn; +@property(nonatomic,copy)NSString*vcTitle; @end diff --git a/Ifish/controllers/leftcontrollers/SecondConnectWifiController.m b/Ifish/controllers/leftcontrollers/SecondConnectWifiController.m index dcb40eb..b32c98f 100644 --- a/Ifish/controllers/leftcontrollers/SecondConnectWifiController.m +++ b/Ifish/controllers/leftcontrollers/SecondConnectWifiController.m @@ -113,7 +113,7 @@ extern BOOL isfromCameraView; self.wifiTextFiled.leftView=phoneView; self.wifiTextFiled.leftViewMode=UITextFieldViewModeAlways; - [self addTitleViewWithTitle:@"连接水族箱"]; + [self addTitleViewWithTitle:self.vcTitle]; // UIBarButtonItem*rightItem=[[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"qr"] style:UIBarButtonItemStyleDone target:self action:@selector(rightButtonClickItem:)]; @@ -207,6 +207,7 @@ extern BOOL isfromCameraView; self.connectBtn.hidden = NO; self.shareButton.hidden = NO; self.nodImg.hidden = NO; + self.redTextLable.hidden=NO; }else{ @@ -224,7 +225,7 @@ extern BOOL isfromCameraView; self.connectBtn.hidden = NO; self.shareButton.hidden = NO; self.nodImg.hidden = NO; - + self.redTextLable.hidden=NO; }]; } @@ -251,6 +252,7 @@ extern BOOL isfromCameraView; self.connectBtn.hidden = YES; self.shareButton.hidden = YES; self.nodImg.hidden = YES; + self.redTextLable.hidden=YES; } @@ -418,7 +420,7 @@ extern BOOL isfromCameraView; } - (IBAction)lickHereBtnClicked:(id)sender { - ConnectHotpotViewController *vc = [[ConnectHotpotViewController alloc] initWithNibName:@"ConnectHotpotViewController" bundle:nil]; + ConnectHotpotViewController *vc = [[ConnectHotpotViewController alloc] init]; vc.ssid = self.ssid; vc.bssid = self.bssid; [self.navigationController pushViewController:vc animated:YES]; @@ -731,6 +733,10 @@ extern BOOL isfromCameraView; } +-(void)bindDeviceSus{ + +} + -(void)setRootViewBindFromCameraView{ diff --git a/Ifish/controllers/leftcontrollers/SecondConnectWifiController.xib b/Ifish/controllers/leftcontrollers/SecondConnectWifiController.xib index 8706e73..fcc5a1c 100644 --- a/Ifish/controllers/leftcontrollers/SecondConnectWifiController.xib +++ b/Ifish/controllers/leftcontrollers/SecondConnectWifiController.xib @@ -1,5 +1,5 @@ - + @@ -14,6 +14,7 @@ + @@ -28,21 +29,21 @@ - + - + + + + diff --git a/Ifish/controllers/leftcontrollers/tip.png b/Ifish/controllers/leftcontrollers/tip.png index 2d7b3ca..0b1dc42 100644 Binary files a/Ifish/controllers/leftcontrollers/tip.png and b/Ifish/controllers/leftcontrollers/tip.png differ diff --git a/Ifish/controllers/logAddRegistController/LogInViewController.h b/Ifish/controllers/logAddRegistController/LogInViewController.h index cf7c84f..7b77a0c 100644 --- a/Ifish/controllers/logAddRegistController/LogInViewController.h +++ b/Ifish/controllers/logAddRegistController/LogInViewController.h @@ -9,11 +9,12 @@ #import #import "BaseVIewContorller.h" #import "Utils.h" -#import +//#import +//#import @interface LogInViewController : BaseVIewContorller { - BMKGeoCodeSearch*_geocodesearch; +// BMKGeoCodeSearch*_geocodesearch; } @property (weak, nonatomic) IBOutlet UITextField *loginPhoneNumberTextField; @property (weak, nonatomic) IBOutlet UITextField *loginPasswordTextField; diff --git a/Ifish/controllers/logAddRegistController/LogInViewController.m b/Ifish/controllers/logAddRegistController/LogInViewController.m index e144516..3eb9c51 100644 --- a/Ifish/controllers/logAddRegistController/LogInViewController.m +++ b/Ifish/controllers/logAddRegistController/LogInViewController.m @@ -37,18 +37,20 @@ #import "Toast+UIView.h" #import "IfishNewsModel.h" -#import -#import -#import - +//#import +//#import +//#import +#import #import "IfishUserDataUnity.h" -@interface LogInViewController () +@interface LogInViewController () @property (weak, nonatomic) IBOutlet UIButton *logInButton; @property(nonatomic,strong)UIActivityIndicatorView*indicatorView; -@property(nonatomic)BMKLocationService*locService; +//@property(nonatomic)BMKLocationService*locService; @property(nonatomic) double longitude; @property(nonatomic) double latitude; @property(nonatomic,copy) NSString *adderss; +@property (nonatomic,strong ) CLLocationManager *locationManager;//定位服务 +@property (nonatomic,copy) NSString *currentCity;//城市 @end extern BOOL firstLogIn; BOOL formLogIn;// //连接页面是否来自登录界面初始化 @@ -125,22 +127,44 @@ #pragma mark 定位 -(void)getLocation{ //初始化BMKLocationService - _locService=[[BMKLocationService alloc]init]; - _locService.delegate=self; - //启动LocationService - [_locService startUserLocationService]; - _geocodesearch=[[BMKGeoCodeSearch alloc]init]; +// _locService=[[BMKLocationService alloc]init]; +// _locService.delegate=self; +// //启动LocationService +// [_locService startUserLocationService]; +// _geocodesearch=[[BMKGeoCodeSearch alloc]init]; + if ([CLLocationManager locationServicesEnabled]) { + _locationManager = [[CLLocationManager alloc]init]; + _locationManager.delegate = self; + [_locationManager requestAlwaysAuthorization]; + _currentCity = [[NSString alloc]init]; + [_locationManager requestWhenInUseAuthorization]; + _locationManager.desiredAccuracy = kCLLocationAccuracyBest; + _locationManager.distanceFilter = 5.0; + [_locationManager startUpdatingLocation]; + } + + } -(void)viewWillAppear:(BOOL)animated{ - _geocodesearch.delegate=self;// 此处记得不用的时候需要置nil,否则影响内存的释放 - _locService.delegate=self; +// _geocodesearch.delegate=self;// 此处记得不用的时候需要置nil,否则影响内存的释放 +// _locService.delegate=self; + if ([CLLocationManager locationServicesEnabled]) { + _locationManager = [[CLLocationManager alloc]init]; + _locationManager.delegate = self; + [_locationManager requestAlwaysAuthorization]; +// _currentCity = [[NSString alloc]init]; + [_locationManager requestWhenInUseAuthorization]; + _locationManager.desiredAccuracy = kCLLocationAccuracyBest; + _locationManager.distanceFilter = 5.0; + [_locationManager startUpdatingLocation]; + } } -(void)viewWillDisappear:(BOOL)animated{ - _locService.delegate=nil; +// _locService.delegate=nil; } -(void)backItemBtn{ @@ -415,63 +439,128 @@ } //处理方向变更信息 -- (void)didUpdateUserHeading:(BMKUserLocation *)userLocation -{ - //NSLog(@"heading is %@",userLocation.heading); -} -//处理位置坐标更新 -- (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation -{ - NSLog(@"didUpdateUserLocation lat %f,long %f",userLocation.location.coordinate.latitude,userLocation.location.coordinate.longitude); - self.latitude = userLocation.location.coordinate.latitude; - self.longitude = userLocation.location.coordinate.longitude; - static dispatch_once_t disOnce; - dispatch_once(&disOnce, ^ { - - [self reverseGeoCodeWithlatitude:userLocation.location.coordinate.latitude addlongitude:userLocation.location.coordinate.longitude]; - }); - -} +//- (void)didUpdateUserHeading:(BMKUserLocation *)userLocation +//{ +// //NSLog(@"heading is %@",userLocation.heading); +//} +////处理位置坐标更新 +//- (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation +//{ +// NSLog(@"didUpdateUserLocation lat %f,long %f",userLocation.location.coordinate.latitude,userLocation.location.coordinate.longitude); +// self.latitude = userLocation.location.coordinate.latitude; +// self.longitude = userLocation.location.coordinate.longitude; +// static dispatch_once_t disOnce; +// dispatch_once(&disOnce, ^ { +// +// [self reverseGeoCodeWithlatitude:userLocation.location.coordinate.latitude addlongitude:userLocation.location.coordinate.longitude]; +// }); +// +//} /** * 地理反编码 */ --(void)reverseGeoCodeWithlatitude:(CLLocationDegrees)latitude addlongitude:(CLLocationDegrees)longitude{ - CLLocationCoordinate2D pt=(CLLocationCoordinate2D){latitude,longitude}; - BMKReverseGeoCodeOption *reverseGeocodeSearchOption = [[BMKReverseGeoCodeOption alloc]init]; - reverseGeocodeSearchOption.reverseGeoPoint=pt; - BOOL flag = [_geocodesearch reverseGeoCode:reverseGeocodeSearchOption]; - if(flag) - { - NSLog(@"反geo检索发送成功"); - } - else - { - NSLog(@"反geo检索发送失败"); - } - -} +//-(void)reverseGeoCodeWithlatitude:(CLLocationDegrees)latitude addlongitude:(CLLocationDegrees)longitude{ +// CLLocationCoordinate2D pt=(CLLocationCoordinate2D){latitude,longitude}; +// BMKReverseGeoCodeOption *reverseGeocodeSearchOption = [[BMKReverseGeoCodeOption alloc]init]; +// reverseGeocodeSearchOption.reverseGeoPoint=pt; +// BOOL flag = [_geocodesearch reverseGeoCode:reverseGeocodeSearchOption]; +// if(flag) +// { +// NSLog(@"反geo检索发送成功"); +// } +// else +// { +// NSLog(@"反geo检索发送失败"); +// } +// +//} --(void)dealloc{ - - if (_geocodesearch!=nil) { - _geocodesearch=nil; - } -} +//-(void)dealloc{ +// +// if (_geocodesearch!=nil) { +// _geocodesearch=nil; +// } +//} #pragma mark BMKGeoCodeSearchDelegate --(void)onGetReverseGeoCodeResult:(BMKGeoCodeSearch *)searcher result:(BMKReverseGeoCodeResult *)result errorCode:(BMKSearchErrorCode)error{ - NSLog(@"address%@",result.address); +//-(void)onGetReverseGeoCodeResult:(BMKGeoCodeSearch *)searcher result:(BMKReverseGeoCodeResult *)result errorCode:(BMKSearchErrorCode)error{ +// NSLog(@"address%@",result.address); +// +// NSUserDefaults*userdefult=[NSUserDefaults standardUserDefaults]; +// NSString*address=result.address; +// self.adderss = address; +// [userdefult setObject:address forKey:@"address"]; +// [userdefult setDouble:self.latitude forKey:@"userlatitude"]; +// [userdefult setDouble:self.longitude forKey:@"userlongitude"]; +// [userdefult synchronize]; +// +// _geocodesearch.delegate=nil; +//} + +#pragma mark - 定位失败 +-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error{ - NSUserDefaults*userdefult=[NSUserDefaults standardUserDefaults]; - NSString*address=result.address; - self.adderss = address; - [userdefult setObject:address forKey:@"address"]; - [userdefult setDouble:self.latitude forKey:@"userlatitude"]; - [userdefult setDouble:self.longitude forKey:@"userlongitude"]; - [userdefult synchronize]; - - _geocodesearch.delegate=nil; + UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"提示" message:@"请在设置中打开定位" preferredStyle:UIAlertControllerStyleAlert]; + UIAlertAction *ok = [UIAlertAction actionWithTitle:@"打开定位" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { + NSURL *settingURL = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; + [[UIApplication sharedApplication]openURL:settingURL]; + }]; + UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) { + + }]; + [alert addAction:cancel]; + [alert addAction:ok]; + [self presentViewController:alert animated:YES completion:nil]; } +#pragma mark - 定位成功 +-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{ + + [_locationManager stopUpdatingLocation]; + CLLocation *currentLocation = [locations lastObject]; + CLGeocoder *geoCoder = [[CLGeocoder alloc]init]; + //当前的经纬度 + NSLog(@"当前的经纬度 %f,%f",currentLocation.coordinate.latitude,currentLocation.coordinate.longitude); + self.longitude=currentLocation.coordinate.longitude; + self.latitude=currentLocation.coordinate.latitude; + //这里的代码是为了判断didUpdateLocations调用了几次 有可能会出现多次调用 为了避免不必要的麻烦 在这里加个if判断 如果大于1.0就return + NSTimeInterval locationAge = -[currentLocation.timestamp timeIntervalSinceNow]; + if (locationAge > 1.0){//如果调用已经一次,不再执行 + return; + } + //地理反编码 可以根据坐标(经纬度)确定位置信息(街道 门牌等) + [geoCoder reverseGeocodeLocation:currentLocation completionHandler:^(NSArray * _Nullable placemarks, NSError * _Nullable error) { + if (placemarks.count >0) { + CLPlacemark *placeMark = placemarks[0]; + _currentCity = placeMark.locality; + if (!_currentCity) { + _currentCity = @"无法定位当前城市"; + } + //看需求定义一个全局变量来接收赋值 + NSLog(@"当前国家 - %@",placeMark.country);//当前国家 + NSLog(@"当前城市 - %@",_currentCity);//当前城市 + NSLog(@"当前位置 - %@",placeMark.subLocality);//当前位置 + NSLog(@"当前街道 - %@",placeMark.thoroughfare);//当前街道 + NSLog(@"具体地址 - %@",placeMark.name);//具体地址 + NSString *message = [NSString stringWithFormat:@"%@,%@,%@,%@,%@",placeMark.country,_currentCity,placeMark.subLocality,placeMark.thoroughfare,placeMark.name]; + NSUserDefaults*userdefult=[NSUserDefaults standardUserDefaults]; + NSString*address=message; + self.adderss = address; + [userdefult setObject:address forKey:@"address"]; + [userdefult setDouble:self.latitude forKey:@"userlatitude"]; + [userdefult setDouble:self.longitude forKey:@"userlongitude"]; + [userdefult synchronize]; + + }else if (error == nil && placemarks.count){ + + NSLog(@"NO location and error return"); + }else if (error){ + + NSLog(@"loction error:%@",error); + } + }]; +} + + @end diff --git a/Ifish/controllers/logAddRegistController/RegistViewController.h b/Ifish/controllers/logAddRegistController/RegistViewController.h index 013e190..13f82d1 100644 --- a/Ifish/controllers/logAddRegistController/RegistViewController.h +++ b/Ifish/controllers/logAddRegistController/RegistViewController.h @@ -10,11 +10,11 @@ #import "MBProgressHUD.h" #import "BaseVIewContorller.h" -#import +//#import @interface RegistViewController : UIViewController { - BMKGeoCodeSearch*_geocodesearch; +// BMKGeoCodeSearch*_geocodesearch; } @property (weak, nonatomic) IBOutlet UITextField *phoneNumberTextField; @property (weak, nonatomic) IBOutlet UITextField *verifyTextField; diff --git a/Ifish/controllers/logAddRegistController/RegistViewController.mm b/Ifish/controllers/logAddRegistController/RegistViewController.mm index 5606235..63a4231 100644 --- a/Ifish/controllers/logAddRegistController/RegistViewController.mm +++ b/Ifish/controllers/logAddRegistController/RegistViewController.mm @@ -22,9 +22,9 @@ #import "ChatroomModel.h" //#import //#import -#import -#import -#import +//#import +//#import +//#import //#import "FirstConnectWifiController.h" //#import "SelectDeviceViewController.h" //#import "IfishSelectCardViewController.h" @@ -36,7 +36,8 @@ #import #import #import "XWCountryCodeController.h" -@interface RegistViewController () +#import +@interface RegistViewController () { BOOL _showed;//显示过了 @@ -55,7 +56,9 @@ @property(nonatomic,strong)NSMutableArray*deviceArry; @property(nonatomic,strong)UIActivityIndicatorView*indicatorView; -@property(nonatomic)BMKLocationService*locService; +//@property(nonatomic)BMKLocationService*locService; +@property (nonatomic,strong ) CLLocationManager *locationManager;//定位服务 +@property (nonatomic,copy) NSString *currentCity;//城市 @property(nonatomic) double longitude; @property(nonatomic) double latitude; @property(nonatomic,copy) NSString *adderss; @@ -102,12 +105,91 @@ extern BOOL formLogIn; #pragma mark 定位 -(void)getLocation{ //初始化BMKLocationService - _locService=[[BMKLocationService alloc]init]; - _locService.delegate=self; - //启动LocationService - [_locService startUserLocationService]; - _geocodesearch=[[BMKGeoCodeSearch alloc]init]; +// _locService=[[BMKLocationService alloc]init]; +// _locService.delegate=self; +// //启动LocationService +// [_locService startUserLocationService]; +// _geocodesearch=[[BMKGeoCodeSearch alloc]init]; + if ([CLLocationManager locationServicesEnabled]) { + _locationManager = [[CLLocationManager alloc]init]; + _locationManager.delegate = self; + [_locationManager requestAlwaysAuthorization]; + _currentCity = [[NSString alloc]init]; + [_locationManager requestWhenInUseAuthorization]; + _locationManager.desiredAccuracy = kCLLocationAccuracyBest; + _locationManager.distanceFilter = 5.0; + [_locationManager startUpdatingLocation]; + } } + +#pragma mark - 定位失败 +-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error{ + + UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"提示" message:@"请在设置中打开定位" preferredStyle:UIAlertControllerStyleAlert]; + UIAlertAction *ok = [UIAlertAction actionWithTitle:@"打开定位" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { + NSURL *settingURL = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; + [[UIApplication sharedApplication]openURL:settingURL]; + }]; + UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) { + + }]; + [alert addAction:cancel]; + [alert addAction:ok]; + [self presentViewController:alert animated:YES completion:nil]; +} +#pragma mark - 定位成功 +-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{ + + [_locationManager stopUpdatingLocation]; + CLLocation *currentLocation = [locations lastObject]; + CLGeocoder *geoCoder = [[CLGeocoder alloc]init]; + //当前的经纬度 + NSLog(@"当前的经纬度 %f,%f",currentLocation.coordinate.latitude,currentLocation.coordinate.longitude); + self.latitude=currentLocation.coordinate.latitude; + self.longitude=currentLocation.coordinate.longitude; + //这里的代码是为了判断didUpdateLocations调用了几次 有可能会出现多次调用 为了避免不必要的麻烦 在这里加个if判断 如果大于1.0就return + NSTimeInterval locationAge = -[currentLocation.timestamp timeIntervalSinceNow]; + if (locationAge > 1.0){//如果调用已经一次,不再执行 + return; + } + //地理反编码 可以根据坐标(经纬度)确定位置信息(街道 门牌等) + [geoCoder reverseGeocodeLocation:currentLocation completionHandler:^(NSArray * _Nullable placemarks, NSError * _Nullable error) { + if (placemarks.count >0) { + CLPlacemark *placeMark = placemarks[0]; + _currentCity = placeMark.locality; + if (!_currentCity) { + _currentCity = @"无法定位当前城市"; + } + //看需求定义一个全局变量来接收赋值 + NSLog(@"当前国家 - %@",placeMark.country);//当前国家 + NSLog(@"当前城市 - %@",_currentCity);//当前城市 + NSLog(@"当前位置 - %@",placeMark.subLocality);//当前位置 + NSLog(@"当前街道 - %@",placeMark.thoroughfare);//当前街道 + NSLog(@"具体地址 - %@",placeMark.name);//具体地址 + NSString *message = [NSString stringWithFormat:@"%@,%@,%@,%@,%@",placeMark.country,_currentCity,placeMark.subLocality,placeMark.thoroughfare,placeMark.name]; + + NSUserDefaults*userdefult=[NSUserDefaults standardUserDefaults]; + NSString*address=message; + self.adderss = address; + [userdefult setObject:address forKey:@"address"]; + [userdefult setDouble:self.latitude forKey:@"userlatitude"]; + [userdefult setDouble:self.longitude forKey:@"userlongitude"]; + [userdefult synchronize]; + }else if (error == nil && placemarks.count){ + + NSLog(@"NO location and error return"); + }else if (error){ + + NSLog(@"loction error:%@",error); + } + }]; +} + + + + + + #pragma mark-- 获取验证(阿里) -(void)timeFire{ @@ -544,8 +626,8 @@ extern BOOL formLogIn; } #pragma mark 引导页 -(void)viewWillAppear:(BOOL)animated{ - _geocodesearch.delegate=self;// 此处记得不用的时候需要置nil,否则影响内存的释放 - _locService.delegate=self; +// _geocodesearch.delegate=self;// 此处记得不用的时候需要置nil,否则影响内存的释放 +// _locService.delegate=self; static dispatch_once_t disOnce; dispatch_once(&disOnce, ^ { if (_showed) { @@ -563,7 +645,7 @@ extern BOOL formLogIn; } -(void)viewWillDisappear:(BOOL)animated{ // _geocodesearch.delegate=nil; - _locService.delegate=nil; +// _locService.delegate=nil; } -(void)showIntroduce{ MyIntroductionViewController*introductionVC=[[MyIntroductionViewController alloc]init]; @@ -658,60 +740,60 @@ extern BOOL formLogIn; //实现相关delegate 处理位置信息更新 //处理方向变更信息 -- (void)didUpdateUserHeading:(BMKUserLocation *)userLocation -{ - //NSLog(@"heading is %@",userLocation.heading); -} +//- (void)didUpdateUserHeading:(BMKUserLocation *)userLocation +//{ +// //NSLog(@"heading is %@",userLocation.heading); +//} //处理位置坐标更新 -- (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation -{ - NSLog(@"didUpdateUserLocation lat %f,long %f",userLocation.location.coordinate.latitude,userLocation.location.coordinate.longitude); - self.latitude = userLocation.location.coordinate.latitude; - self.longitude = userLocation.location.coordinate.longitude; - static dispatch_once_t disOnce; - dispatch_once(&disOnce, ^ { - - [self reverseGeoCodeWithlatitude:userLocation.location.coordinate.latitude addlongitude:userLocation.location.coordinate.longitude]; - }); - -} +//- (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation +//{ +// NSLog(@"didUpdateUserLocation lat %f,long %f",userLocation.location.coordinate.latitude,userLocation.location.coordinate.longitude); +// self.latitude = userLocation.location.coordinate.latitude; +// self.longitude = userLocation.location.coordinate.longitude; +// static dispatch_once_t disOnce; +// dispatch_once(&disOnce, ^ { +// +// [self reverseGeoCodeWithlatitude:userLocation.location.coordinate.latitude addlongitude:userLocation.location.coordinate.longitude]; +// }); +// +//} /** * 地理反编码 */ --(void)reverseGeoCodeWithlatitude:(CLLocationDegrees)latitude addlongitude:(CLLocationDegrees)longitude{ - CLLocationCoordinate2D pt=(CLLocationCoordinate2D){latitude,longitude}; - BMKReverseGeoCodeOption *reverseGeocodeSearchOption = [[BMKReverseGeoCodeOption alloc]init]; - reverseGeocodeSearchOption.reverseGeoPoint=pt; - BOOL flag = [_geocodesearch reverseGeoCode:reverseGeocodeSearchOption]; - if(flag) - { - NSLog(@"反geo检索发送成功"); - } - else - { - NSLog(@"反geo检索发送失败"); - } - -} --(void)dealloc{ - - if (_geocodesearch!=nil) { - _geocodesearch=nil; - } -} +//-(void)reverseGeoCodeWithlatitude:(CLLocationDegrees)latitude addlongitude:(CLLocationDegrees)longitude{ +// CLLocationCoordinate2D pt=(CLLocationCoordinate2D){latitude,longitude}; +// BMKReverseGeoCodeOption *reverseGeocodeSearchOption = [[BMKReverseGeoCodeOption alloc]init]; +// reverseGeocodeSearchOption.reverseGeoPoint=pt; +// BOOL flag = [_geocodesearch reverseGeoCode:reverseGeocodeSearchOption]; +// if(flag) +// { +// NSLog(@"反geo检索发送成功"); +// } +// else +// { +// NSLog(@"反geo检索发送失败"); +// } +// +//} +//-(void)dealloc{ +// +// if (_geocodesearch!=nil) { +// _geocodesearch=nil; +// } +//} #pragma mark BMKGeoCodeSearchDelegate --(void)onGetReverseGeoCodeResult:(BMKGeoCodeSearch *)searcher result:(BMKReverseGeoCodeResult *)result errorCode:(BMKSearchErrorCode)error{ - NSLog(@"address%@",result.address); - NSUserDefaults*userdefult=[NSUserDefaults standardUserDefaults]; - NSString*address=result.address; - self.adderss = address; - [userdefult setObject:address forKey:@"address"]; - [userdefult setDouble:self.latitude forKey:@"userlatitude"]; - [userdefult setDouble:self.longitude forKey:@"userlongitude"]; - [userdefult synchronize]; - _geocodesearch.delegate=nil; -} +//-(void)onGetReverseGeoCodeResult:(BMKGeoCodeSearch *)searcher result:(BMKReverseGeoCodeResult *)result errorCode:(BMKSearchErrorCode)error{ +// NSLog(@"address%@",result.address); +// NSUserDefaults*userdefult=[NSUserDefaults standardUserDefaults]; +// NSString*address=result.address; +// self.adderss = address; +// [userdefult setObject:address forKey:@"address"]; +// [userdefult setDouble:self.latitude forKey:@"userlatitude"]; +// [userdefult setDouble:self.longitude forKey:@"userlongitude"]; +// [userdefult synchronize]; +// _geocodesearch.delegate=nil; +//} #pragma mark - countrySelectBtnAction diff --git a/Ifish/ifishImgSouce/.DS_Store b/Ifish/ifishImgSouce/.DS_Store index eb6412c..339e7f8 100644 Binary files a/Ifish/ifishImgSouce/.DS_Store and b/Ifish/ifishImgSouce/.DS_Store differ diff --git a/Ifish/ifishImgSouce/NewPiFubtn/.DS_Store b/Ifish/ifishImgSouce/NewPiFubtn/.DS_Store index 5008ddf..b69a687 100644 Binary files a/Ifish/ifishImgSouce/NewPiFubtn/.DS_Store and b/Ifish/ifishImgSouce/NewPiFubtn/.DS_Store differ diff --git a/Ifish/ifishImgSouce/switchButton/.DS_Store b/Ifish/ifishImgSouce/switchButton/.DS_Store index 5008ddf..1d5826f 100644 Binary files a/Ifish/ifishImgSouce/switchButton/.DS_Store and b/Ifish/ifishImgSouce/switchButton/.DS_Store differ diff --git a/Ifish/views/.DS_Store b/Ifish/views/.DS_Store index ca57cba..d7bd8f3 100644 Binary files a/Ifish/views/.DS_Store and b/Ifish/views/.DS_Store differ diff --git a/Ifish/views/setViewCell/TemperatureSetCell.xib b/Ifish/views/setViewCell/TemperatureSetCell.xib index e5e9bf1..c7c9ced 100644 --- a/Ifish/views/setViewCell/TemperatureSetCell.xib +++ b/Ifish/views/setViewCell/TemperatureSetCell.xib @@ -1,5 +1,5 @@ - +