diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..8befa9b722b776cc3d3ae1709ef8a62abda7a36e Binary files /dev/null and b/.DS_Store differ diff --git a/JQQY.xcodeproj/project.pbxproj b/JQQY.xcodeproj/project.pbxproj new file mode 100644 index 0000000000000000000000000000000000000000..bfdae64a134f006d1724e7ba80032db563c718ca --- /dev/null +++ b/JQQY.xcodeproj/project.pbxproj @@ -0,0 +1,5940 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 48; + objects = { + +/* Begin PBXBuildFile section */ + 1104DBA2200C46AE0020992E /* MyContentViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1104DBA0200C46AE0020992E /* MyContentViewController.m */; }; + 1104DBB5200C59020020992E /* Adagent.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1104DBA4200C59020020992E /* Adagent.a */; }; + 1104DBB6200C59020020992E /* loading.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 1104DBAF200C59020020992E /* loading.bundle */; }; + 1104DBB7200C59020020992E /* NACommentsView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1104DBB0200C59020020992E /* NACommentsView.xib */; }; + 1104DBB8200C59020020992E /* NewsAgent.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1104DBB1200C59020020992E /* NewsAgent.a */; }; + 1104DBB9200C59020020992E /* NewsAgent.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 1104DBB2200C59020020992E /* NewsAgent.bundle */; }; + 1104DBBA200C59020020992E /* magent.plist in Resources */ = {isa = PBXBuildFile; fileRef = 1104DBB4200C59020020992E /* magent.plist */; }; + 1117522F1FFF45CA001EF870 /* TopicListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1117522E1FFF45CA001EF870 /* TopicListViewController.m */; }; + 111752361FFF7463001EF870 /* yq_collect_hui@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 111752301FFF7462001EF870 /* yq_collect_hui@3x.png */; }; + 111752371FFF7463001EF870 /* yq_msg@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 111752311FFF7462001EF870 /* yq_msg@3x.png */; }; + 111752381FFF7463001EF870 /* yq_share@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 111752321FFF7462001EF870 /* yq_share@2x.png */; }; + 111752391FFF7463001EF870 /* yq_msg@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 111752331FFF7463001EF870 /* yq_msg@2x.png */; }; + 1117523A1FFF7463001EF870 /* yq_collect_hui@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 111752341FFF7463001EF870 /* yq_collect_hui@2x.png */; }; + 1117523B1FFF7463001EF870 /* yq_share@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 111752351FFF7463001EF870 /* yq_share@3x.png */; }; + 111752401FFF7548001EF870 /* yq_report@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1117523C1FFF7547001EF870 /* yq_report@3x.png */; }; + 111752411FFF7548001EF870 /* yq_concern_bai@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1117523D1FFF7547001EF870 /* yq_concern_bai@3x.png */; }; + 111752421FFF7548001EF870 /* yq_report@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1117523E1FFF7548001EF870 /* yq_report@2x.png */; }; + 111752431FFF7548001EF870 /* yq_concern_bai@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1117523F1FFF7548001EF870 /* yq_concern_bai@2x.png */; }; + 111CC5E21FFCA7B400A85682 /* YuanquanCommentCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 111CC5E11FFCA7B300A85682 /* YuanquanCommentCell.m */; }; + 111CC5E81FFCB4E700A85682 /* YuanquanDetailBottomView.m in Sources */ = {isa = PBXBuildFile; fileRef = 111CC5E71FFCB4E700A85682 /* YuanquanDetailBottomView.m */; }; + 111CC5EB1FFCC8AC00A85682 /* CommentListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 111CC5EA1FFCC8AC00A85682 /* CommentListViewController.m */; }; + 111CC5EE1FFCCC5D00A85682 /* YuanquanCommentHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 111CC5ED1FFCCC5D00A85682 /* YuanquanCommentHeaderView.m */; }; + 112599FA1FC65D40009D18E4 /* FileTool.m in Sources */ = {isa = PBXBuildFile; fileRef = 112599F91FC65D40009D18E4 /* FileTool.m */; }; + 112599FD1FC66A98009D18E4 /* FeedbackViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 112599FC1FC66A98009D18E4 /* FeedbackViewController.m */; }; + 11259A031FC6787A009D18E4 /* BindingPhoneViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 11259A021FC6787A009D18E4 /* BindingPhoneViewController.m */; }; + 11259A061FC6AB7B009D18E4 /* EventDetailsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 11259A041FC6AB7B009D18E4 /* EventDetailsViewController.m */; }; + 11259A0C1FC6ABE7009D18E4 /* EventInFnoView.m in Sources */ = {isa = PBXBuildFile; fileRef = 11259A0B1FC6ABE7009D18E4 /* EventInFnoView.m */; }; + 11259A181FC6AC77009D18E4 /* EventHeadView.m in Sources */ = {isa = PBXBuildFile; fileRef = 11259A161FC6AC76009D18E4 /* EventHeadView.m */; }; + 11259A241FC6ACE5009D18E4 /* InformationView.m in Sources */ = {isa = PBXBuildFile; fileRef = 11259A231FC6ACE4009D18E4 /* InformationView.m */; }; + 11259A271FC6ACFD009D18E4 /* BottomView.m in Sources */ = {isa = PBXBuildFile; fileRef = 11259A251FC6ACFC009D18E4 /* BottomView.m */; }; + 11259A2A1FC6AD11009D18E4 /* ImageTextButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 11259A281FC6AD11009D18E4 /* ImageTextButton.m */; }; + 11259A331FC6AD6C009D18E4 /* MessageModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 11259A321FC6AD6C009D18E4 /* MessageModel.m */; }; + 11259A361FC6AD83009D18E4 /* likeModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 11259A351FC6AD82009D18E4 /* likeModel.m */; }; + 11259A391FC6AD9B009D18E4 /* LikeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 11259A381FC6AD9B009D18E4 /* LikeViewController.m */; }; + 11259A3C1FC6ADD6009D18E4 /* JQActionSheet.m in Sources */ = {isa = PBXBuildFile; fileRef = 11259A3B1FC6ADD6009D18E4 /* JQActionSheet.m */; }; + 11259A3F1FC6ADF9009D18E4 /* BottomBtnView.m in Sources */ = {isa = PBXBuildFile; fileRef = 11259A3E1FC6ADF9009D18E4 /* BottomBtnView.m */; }; + 11259A481FC6AE58009D18E4 /* EventItemView.m in Sources */ = {isa = PBXBuildFile; fileRef = 11259A461FC6AE58009D18E4 /* EventItemView.m */; }; + 11259A4E1FC6AE8D009D18E4 /* CommentHeadView.m in Sources */ = {isa = PBXBuildFile; fileRef = 11259A4D1FC6AE8C009D18E4 /* CommentHeadView.m */; }; + 11259A511FC6B31E009D18E4 /* CommentCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 11259A501FC6B31E009D18E4 /* CommentCell.m */; }; + 11259A541FC6B335009D18E4 /* EventFooterView.m in Sources */ = {isa = PBXBuildFile; fileRef = 11259A521FC6B335009D18E4 /* EventFooterView.m */; }; + 11259A571FC6B355009D18E4 /* EventFootBtn.m in Sources */ = {isa = PBXBuildFile; fileRef = 11259A561FC6B355009D18E4 /* EventFootBtn.m */; }; + 11259A661FC6BEDD009D18E4 /* LikeCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 11259A651FC6BEDD009D18E4 /* LikeCell.m */; }; + 11259A731FC6C386009D18E4 /* LoadingView.m in Sources */ = {isa = PBXBuildFile; fileRef = 11259A711FC6C386009D18E4 /* LoadingView.m */; }; + 11259A751FC6C3A4009D18E4 /* loading.gif in Resources */ = {isa = PBXBuildFile; fileRef = 11259A741FC6C3A4009D18E4 /* loading.gif */; }; + 11259A781FC6C6BB009D18E4 /* CardModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 11259A771FC6C6BB009D18E4 /* CardModel.m */; }; + 11259A7E1FC6DCE7009D18E4 /* SignInView.m in Sources */ = {isa = PBXBuildFile; fileRef = 11259A7D1FC6DCE7009D18E4 /* SignInView.m */; }; + 11259A811FC6DD19009D18E4 /* qdcg@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11259A7F1FC6DD19009D18E4 /* qdcg@2x.png */; }; + 11259A821FC6DD19009D18E4 /* qdcg@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11259A801FC6DD19009D18E4 /* qdcg@3x.png */; }; + 112E3E661FE9032100825D7E /* DiscoverHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 112E3E651FE9032100825D7E /* DiscoverHeaderView.m */; }; + 1130F36F1FEA0740009AC59E /* YuanquanBaseCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 1130F36E1FEA0740009AC59E /* YuanquanBaseCell.m */; }; + 1130F3721FEA0852009AC59E /* YuanquanModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 1130F3711FEA0852009AC59E /* YuanquanModel.m */; }; + 1130F3751FEA0E0A009AC59E /* TextCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 1130F3741FEA0E0A009AC59E /* TextCell.m */; }; + 1130F37B1FEA0E32009AC59E /* VideoCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 1130F37A1FEA0E32009AC59E /* VideoCell.m */; }; + 1130F37E1FEA0E43009AC59E /* TextAndPicturesCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 1130F37D1FEA0E43009AC59E /* TextAndPicturesCell.m */; }; + 1130F3811FEA0E52009AC59E /* TextAndVideoCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 1130F3801FEA0E52009AC59E /* TextAndVideoCell.m */; }; + 113E4C5E1FCFDB5E00D50F17 /* FindViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 113E4C5D1FCFDB5D00D50F17 /* FindViewController.m */; }; + 113E4C611FCFDBF600D50F17 /* ConditionView.m in Sources */ = {isa = PBXBuildFile; fileRef = 113E4C601FCFDBF600D50F17 /* ConditionView.m */; }; + 113E4C641FCFDC1700D50F17 /* SpeedCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 113E4C631FCFDC1700D50F17 /* SpeedCell.m */; }; + 113E4C671FCFDC2800D50F17 /* SpeedModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 113E4C661FCFDC2800D50F17 /* SpeedModel.m */; }; + 113E4C6E1FCFE13300D50F17 /* xx@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 113E4C6C1FCFE13200D50F17 /* xx@2x.png */; }; + 113E4C6F1FCFE13300D50F17 /* xx@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 113E4C6D1FCFE13200D50F17 /* xx@3x.png */; }; + 113E4C741FCFEFFC00D50F17 /* sweep_icon@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 113E4C701FCFEFFA00D50F17 /* sweep_icon@3x.png */; }; + 113E4C751FCFEFFC00D50F17 /* search_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 113E4C711FCFEFFA00D50F17 /* search_icon@2x.png */; }; + 113E4C761FCFEFFC00D50F17 /* search_icon@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 113E4C721FCFEFFB00D50F17 /* search_icon@3x.png */; }; + 113E4C771FCFEFFC00D50F17 /* sweep_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 113E4C731FCFEFFB00D50F17 /* sweep_icon@2x.png */; }; + 1144A9E51FF37218006D6D7D /* PicturesView.m in Sources */ = {isa = PBXBuildFile; fileRef = 1144A9E41FF37218006D6D7D /* PicturesView.m */; }; + 114C96881FDFA664004F2A2B /* ZCLabelTextFieldLineView.m in Sources */ = {isa = PBXBuildFile; fileRef = 114C96871FDFA664004F2A2B /* ZCLabelTextFieldLineView.m */; }; + 114C968B1FDFBB4E004F2A2B /* EnterpriseNameViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 114C968A1FDFBB4E004F2A2B /* EnterpriseNameViewController.m */; }; + 114C968E1FDFC1DF004F2A2B /* DepartmentNameViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 114C968D1FDFC1DF004F2A2B /* DepartmentNameViewController.m */; }; + 114D23DC1FC7AB25000DC5EB /* OtherViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D23DB1FC7AB25000DC5EB /* OtherViewController.m */; }; + 114D23FA1FC7AD8C000DC5EB /* GiftView.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D23F81FC7AD8B000DC5EB /* GiftView.m */; }; + 114D23FD1FC7AD97000DC5EB /* SendGiftView.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D23FC1FC7AD97000DC5EB /* SendGiftView.m */; }; + 114D24031FC7BA0C000DC5EB /* EmotionModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D24011FC7BA0C000DC5EB /* EmotionModel.m */; }; + 114D24051FC7C69E000DC5EB /* giftImg.plist in Resources */ = {isa = PBXBuildFile; fileRef = 114D24041FC7C69E000DC5EB /* giftImg.plist */; }; + 114D24081FC7C7E3000DC5EB /* xw-dise@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114D24061FC7C7E3000DC5EB /* xw-dise@2x.png */; }; + 114D24091FC7C7E3000DC5EB /* xw-dise@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114D24071FC7C7E3000DC5EB /* xw-dise@3x.png */; }; + 114D240C1FC7C807000DC5EB /* xw-huangguan@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114D240A1FC7C807000DC5EB /* xw-huangguan@3x.png */; }; + 114D240D1FC7C807000DC5EB /* xw-huangguan@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114D240B1FC7C807000DC5EB /* xw-huangguan@2x.png */; }; + 114D24101FC7C8A5000DC5EB /* xw-shiping@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114D240E1FC7C8A4000DC5EB /* xw-shiping@2x.png */; }; + 114D24111FC7C8A5000DC5EB /* xw-shiping@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114D240F1FC7C8A4000DC5EB /* xw-shiping@3x.png */; }; + 114D24141FC7C8CA000DC5EB /* xw-shipin-hui@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114D24121FC7C8CA000DC5EB /* xw-shipin-hui@2x.png */; }; + 114D24151FC7C8CA000DC5EB /* xw-shipin-hui@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114D24131FC7C8CA000DC5EB /* xw-shipin-hui@3x.png */; }; + 114D24201FC7C961000DC5EB /* zl-sfrz-h@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114D241E1FC7C961000DC5EB /* zl-sfrz-h@3x.png */; }; + 114D24211FC7C961000DC5EB /* zl-sfrz-h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114D241F1FC7C961000DC5EB /* zl-sfrz-h@2x.png */; }; + 114D24241FC7C9EF000DC5EB /* zl-sfrz@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114D24221FC7C9EE000DC5EB /* zl-sfrz@3x.png */; }; + 114D24251FC7C9EF000DC5EB /* zl-sfrz@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114D24231FC7C9EF000DC5EB /* zl-sfrz@2x.png */; }; + 114D24301FC7CA51000DC5EB /* zl-qyuanrz-h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114D242E1FC7CA50000DC5EB /* zl-qyuanrz-h@2x.png */; }; + 114D24311FC7CA51000DC5EB /* zl-qyuanrz-h@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114D242F1FC7CA51000DC5EB /* zl-qyuanrz-h@3x.png */; }; + 114D24341FC7CA77000DC5EB /* zl-sjrz@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114D24321FC7CA76000DC5EB /* zl-sjrz@2x.png */; }; + 114D24351FC7CA77000DC5EB /* zl-sjrz@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114D24331FC7CA76000DC5EB /* zl-sjrz@3x.png */; }; + 114D24381FC7CAA2000DC5EB /* nan@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114D24361FC7CAA2000DC5EB /* nan@3x.png */; }; + 114D24391FC7CAA2000DC5EB /* nan@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114D24371FC7CAA2000DC5EB /* nan@2x.png */; }; + 114D243C1FC7CAB8000DC5EB /* nv@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114D243A1FC7CAB8000DC5EB /* nv@3x.png */; }; + 114D243D1FC7CAB8000DC5EB /* nv@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114D243B1FC7CAB8000DC5EB /* nv@2x.png */; }; + 114D24401FC7CB8B000DC5EB /* hi@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114D243E1FC7CB8A000DC5EB /* hi@2x.png */; }; + 114D24411FC7CB8B000DC5EB /* hi@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114D243F1FC7CB8B000DC5EB /* hi@3x.png */; }; + 114D24441FC7CBF2000DC5EB /* xuanxiang@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114D24421FC7CBF1000DC5EB /* xuanxiang@3x.png */; }; + 114D24451FC7CBF2000DC5EB /* xuanxiang@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114D24431FC7CBF1000DC5EB /* xuanxiang@2x.png */; }; + 114D24481FC7CC7F000DC5EB /* xw-dianzan@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114D24461FC7CC7E000DC5EB /* xw-dianzan@3x.png */; }; + 114D24491FC7CC7F000DC5EB /* xw-dianzan@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114D24471FC7CC7F000DC5EB /* xw-dianzan@2x.png */; }; + 114D244C1FC7CC8F000DC5EB /* xw-dianzan-hui@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114D244A1FC7CC8F000DC5EB /* xw-dianzan-hui@3x.png */; }; + 114D244D1FC7CC8F000DC5EB /* xw-dianzan-hui@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114D244B1FC7CC8F000DC5EB /* xw-dianzan-hui@2x.png */; }; + 114D24501FC7CCA6000DC5EB /* NOguanzhu@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114D244E1FC7CCA5000DC5EB /* NOguanzhu@2x.png */; }; + 114D24511FC7CCA6000DC5EB /* NOguanzhu@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114D244F1FC7CCA5000DC5EB /* NOguanzhu@3x.png */; }; + 114D24541FC7CCCF000DC5EB /* YESguanzhu@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114D24521FC7CCCF000DC5EB /* YESguanzhu@3x.png */; }; + 114D24551FC7CCCF000DC5EB /* YESguanzhu@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114D24531FC7CCCF000DC5EB /* YESguanzhu@2x.png */; }; + 114D24581FC7E60B000DC5EB /* card_boy@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114D24561FC7E60B000DC5EB /* card_boy@3x.png */; }; + 114D24591FC7E60B000DC5EB /* card_boy@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114D24571FC7E60B000DC5EB /* card_boy@2x.png */; }; + 114D245C1FC7E63C000DC5EB /* card_girl@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114D245A1FC7E63C000DC5EB /* card_girl@3x.png */; }; + 114D245D1FC7E63C000DC5EB /* card_girl@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114D245B1FC7E63C000DC5EB /* card_girl@2x.png */; }; + 114D25881FC7FA32000DC5EB /* HyphenateLite.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 114D24601FC7FA30000DC5EB /* HyphenateLite.framework */; }; + 114D25891FC7FA32000DC5EB /* EaseUI.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D24631FC7FA32000DC5EB /* EaseUI.m */; }; + 114D258A1FC7FA32000DC5EB /* EaseUI.podspec in Resources */ = {isa = PBXBuildFile; fileRef = 114D24641FC7FA32000DC5EB /* EaseUI.podspec */; }; + 114D258B1FC7FA32000DC5EB /* EMAudioPlayerUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D246E1FC7FA32000DC5EB /* EMAudioPlayerUtil.m */; }; + 114D258C1FC7FA32000DC5EB /* EMAudioRecorderUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D24701FC7FA32000DC5EB /* EMAudioRecorderUtil.m */; }; + 114D258D1FC7FA32000DC5EB /* EMCDDeviceManager+Media.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D24721FC7FA32000DC5EB /* EMCDDeviceManager+Media.m */; }; + 114D258E1FC7FA32000DC5EB /* EMCDDeviceManager+Microphone.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D24741FC7FA32000DC5EB /* EMCDDeviceManager+Microphone.m */; }; + 114D258F1FC7FA32000DC5EB /* EMCDDeviceManager+ProximitySensor.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D24761FC7FA32000DC5EB /* EMCDDeviceManager+ProximitySensor.m */; }; + 114D25901FC7FA32000DC5EB /* EMCDDeviceManager+Remind.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D24781FC7FA32000DC5EB /* EMCDDeviceManager+Remind.m */; }; + 114D25911FC7FA32000DC5EB /* EMCDDeviceManagerBase.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D247B1FC7FA32000DC5EB /* EMCDDeviceManagerBase.m */; }; + 114D25921FC7FA32000DC5EB /* amrFileCodec.mm in Sources */ = {isa = PBXBuildFile; fileRef = 114D247F1FC7FA32000DC5EB /* amrFileCodec.mm */; }; + 114D25931FC7FA32000DC5EB /* wav.mm in Sources */ = {isa = PBXBuildFile; fileRef = 114D24811FC7FA32000DC5EB /* wav.mm */; }; + 114D25941FC7FA32000DC5EB /* EMVoiceConverter.mm in Sources */ = {isa = PBXBuildFile; fileRef = 114D24831FC7FA32000DC5EB /* EMVoiceConverter.mm */; }; + 114D25951FC7FA32000DC5EB /* libopencore-amrnb.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 114D24871FC7FA32000DC5EB /* libopencore-amrnb.a */; }; + 114D25961FC7FA32000DC5EB /* libopencore-amrwb.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 114D248B1FC7FA32000DC5EB /* libopencore-amrwb.a */; }; + 114D25AC1FC7FA32000DC5EB /* MWCaptionView.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D24C11FC7FA32000DC5EB /* MWCaptionView.m */; }; + 114D25AD1FC7FA32000DC5EB /* MWGridCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D24C41FC7FA32000DC5EB /* MWGridCell.m */; }; + 114D25AE1FC7FA32000DC5EB /* MWGridViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D24C61FC7FA32000DC5EB /* MWGridViewController.m */; }; + 114D25AF1FC7FA32000DC5EB /* MWPhoto.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D24C81FC7FA32000DC5EB /* MWPhoto.m */; }; + 114D25B01FC7FA32000DC5EB /* MWPhotoBrowser.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D24CA1FC7FA32000DC5EB /* MWPhotoBrowser.m */; }; + 114D25B11FC7FA32000DC5EB /* MWTapDetectingImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D24CE1FC7FA32000DC5EB /* MWTapDetectingImageView.m */; }; + 114D25B21FC7FA32000DC5EB /* MWTapDetectingView.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D24D01FC7FA32000DC5EB /* MWTapDetectingView.m */; }; + 114D25B31FC7FA32000DC5EB /* MWZoomingScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D24D21FC7FA32000DC5EB /* MWZoomingScrollView.m */; }; + 114D25B41FC7FA32000DC5EB /* DACircularProgressView.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D24D61FC7FA32000DC5EB /* DACircularProgressView.m */; }; + 114D25C51FC7FA32000DC5EB /* NSIndexPath+PSTCollectionViewAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D24FB1FC7FA32000DC5EB /* NSIndexPath+PSTCollectionViewAdditions.m */; }; + 114D25C61FC7FA32000DC5EB /* PSTCollectionView.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D24FD1FC7FA32000DC5EB /* PSTCollectionView.m */; }; + 114D25C71FC7FA32000DC5EB /* PSTCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D24FF1FC7FA32000DC5EB /* PSTCollectionViewCell.m */; }; + 114D25C81FC7FA32000DC5EB /* PSTCollectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D25021FC7FA32000DC5EB /* PSTCollectionViewController.m */; }; + 114D25C91FC7FA32000DC5EB /* PSTCollectionViewData.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D25041FC7FA32000DC5EB /* PSTCollectionViewData.m */; }; + 114D25CA1FC7FA32000DC5EB /* PSTCollectionViewFlowLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D25061FC7FA32000DC5EB /* PSTCollectionViewFlowLayout.m */; }; + 114D25CB1FC7FA32000DC5EB /* PSTCollectionViewItemKey.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D25081FC7FA32000DC5EB /* PSTCollectionViewItemKey.m */; }; + 114D25CC1FC7FA32000DC5EB /* PSTCollectionViewLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D250B1FC7FA32000DC5EB /* PSTCollectionViewLayout.m */; }; + 114D25CD1FC7FA32000DC5EB /* PSTCollectionViewUpdateItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D250D1FC7FA32000DC5EB /* PSTCollectionViewUpdateItem.m */; }; + 114D25CE1FC7FA32000DC5EB /* PSTGridLayoutInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D250F1FC7FA32000DC5EB /* PSTGridLayoutInfo.m */; }; + 114D25CF1FC7FA32000DC5EB /* PSTGridLayoutItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D25111FC7FA32000DC5EB /* PSTGridLayoutItem.m */; }; + 114D25D01FC7FA32000DC5EB /* PSTGridLayoutRow.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D25131FC7FA32000DC5EB /* PSTGridLayoutRow.m */; }; + 114D25D11FC7FA32000DC5EB /* PSTGridLayoutSection.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D25151FC7FA32000DC5EB /* PSTGridLayoutSection.m */; }; + 114D25D21FC7FA32000DC5EB /* MWPhotoBrowser.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 114D25161FC7FA32000DC5EB /* MWPhotoBrowser.bundle */; }; + 114D25D31FC7FA32000DC5EB /* EaseSDKHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D25191FC7FA32000DC5EB /* EaseSDKHelper.m */; }; + 114D25D41FC7FA32000DC5EB /* EaseConversationModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D251C1FC7FA32000DC5EB /* EaseConversationModel.m */; }; + 114D25D51FC7FA32000DC5EB /* EaseMessageModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D251E1FC7FA32000DC5EB /* EaseMessageModel.m */; }; + 114D25D61FC7FA32000DC5EB /* EaseUserModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D25201FC7FA32000DC5EB /* EaseUserModel.m */; }; + 114D25D71FC7FA32000DC5EB /* NSDate+Category.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D25291FC7FA32000DC5EB /* NSDate+Category.m */; }; + 114D25D81FC7FA32000DC5EB /* NSDateFormatter+Category.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D252B1FC7FA32000DC5EB /* NSDateFormatter+Category.m */; }; + 114D25D91FC7FA32000DC5EB /* NSString+Valid.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D252D1FC7FA32000DC5EB /* NSString+Valid.m */; }; + 114D25DA1FC7FA32000DC5EB /* UIViewController+DismissKeyboard.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D252F1FC7FA32000DC5EB /* UIViewController+DismissKeyboard.m */; }; + 114D25DB1FC7FA32000DC5EB /* UIViewController+HUD.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D25311FC7FA32000DC5EB /* UIViewController+HUD.m */; }; + 114D25DC1FC7FA32000DC5EB /* EaseChineseToPinyin.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D25331FC7FA32000DC5EB /* EaseChineseToPinyin.m */; }; + 114D25DD1FC7FA32000DC5EB /* EaseConvertToCommonEmoticonsHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D25351FC7FA32000DC5EB /* EaseConvertToCommonEmoticonsHelper.m */; }; + 114D25DE1FC7FA32000DC5EB /* EaseMessageReadManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D25381FC7FA32000DC5EB /* EaseMessageReadManager.m */; }; + 114D25DF1FC7FA32000DC5EB /* EaseEmoji.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D253B1FC7FA32000DC5EB /* EaseEmoji.m */; }; + 114D25E01FC7FA32000DC5EB /* EaseEmojiEmoticons.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D253D1FC7FA32000DC5EB /* EaseEmojiEmoticons.m */; }; + 114D25E11FC7FA32000DC5EB /* EaseEmotionEscape.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D253F1FC7FA32000DC5EB /* EaseEmotionEscape.m */; }; + 114D25E21FC7FA32000DC5EB /* EaseEmotionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D25411FC7FA32000DC5EB /* EaseEmotionManager.m */; }; + 114D25E31FC7FA32000DC5EB /* FixFopen.c in Sources */ = {isa = PBXBuildFile; fileRef = 114D25421FC7FA32000DC5EB /* FixFopen.c */; }; + 114D25E41FC7FA32000DC5EB /* EaseConversationListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D25451FC7FA32000DC5EB /* EaseConversationListViewController.m */; }; + 114D25E51FC7FA32000DC5EB /* EaseLocationViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D25471FC7FA32000DC5EB /* EaseLocationViewController.m */; }; + 114D25E61FC7FA32000DC5EB /* EaseMessageViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D25491FC7FA32000DC5EB /* EaseMessageViewController.m */; }; + 114D25E71FC7FA32000DC5EB /* EaseRefreshTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D254B1FC7FA32000DC5EB /* EaseRefreshTableViewController.m */; }; + 114D25E81FC7FA32000DC5EB /* EaseUsersListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D254D1FC7FA32000DC5EB /* EaseUsersListViewController.m */; }; + 114D25E91FC7FA32000DC5EB /* EaseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D254F1FC7FA32000DC5EB /* EaseViewController.m */; }; + 114D25EA1FC7FA32000DC5EB /* EaseUserCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D25531FC7FA32000DC5EB /* EaseUserCell.m */; }; + 114D25EB1FC7FA32000DC5EB /* EaseBaseMessageCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D25571FC7FA32000DC5EB /* EaseBaseMessageCell.m */; }; + 114D25EC1FC7FA32000DC5EB /* EaseCustomMessageCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D25591FC7FA32000DC5EB /* EaseCustomMessageCell.m */; }; + 114D25ED1FC7FA32000DC5EB /* EaseMessageCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D255B1FC7FA32000DC5EB /* EaseMessageCell.m */; }; + 114D25EE1FC7FA32000DC5EB /* EaseMessageTimeCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D255D1FC7FA32000DC5EB /* EaseMessageTimeCell.m */; }; + 114D25EF1FC7FA32000DC5EB /* EaseBubbleView+File.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D25601FC7FA32000DC5EB /* EaseBubbleView+File.m */; }; + 114D25F01FC7FA32000DC5EB /* EaseBubbleView+Gif.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D25621FC7FA32000DC5EB /* EaseBubbleView+Gif.m */; }; + 114D25F11FC7FA32000DC5EB /* EaseBubbleView+Image.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D25641FC7FA32000DC5EB /* EaseBubbleView+Image.m */; }; + 114D25F21FC7FA32000DC5EB /* EaseBubbleView+Location.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D25661FC7FA32000DC5EB /* EaseBubbleView+Location.m */; }; + 114D25F31FC7FA32000DC5EB /* EaseBubbleView+Text.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D25681FC7FA32000DC5EB /* EaseBubbleView+Text.m */; }; + 114D25F41FC7FA32000DC5EB /* EaseBubbleView+Video.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D256A1FC7FA32000DC5EB /* EaseBubbleView+Video.m */; }; + 114D25F51FC7FA32000DC5EB /* EaseBubbleView+Voice.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D256C1FC7FA32000DC5EB /* EaseBubbleView+Voice.m */; }; + 114D25F61FC7FA32000DC5EB /* EaseBubbleView.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D256E1FC7FA32000DC5EB /* EaseBubbleView.m */; }; + 114D25F71FC7FA32000DC5EB /* EaseChatToolbar.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D25711FC7FA32000DC5EB /* EaseChatToolbar.m */; }; + 114D25F81FC7FA32000DC5EB /* EaseChatToolbarItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D25731FC7FA32000DC5EB /* EaseChatToolbarItem.m */; }; + 114D25F91FC7FA32000DC5EB /* EaseImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D25751FC7FA32000DC5EB /* EaseImageView.m */; }; + 114D25FA1FC7FA32000DC5EB /* EaseTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D25771FC7FA32000DC5EB /* EaseTextView.m */; }; + 114D25FB1FC7FA32000DC5EB /* EaseFaceView.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D257A1FC7FA32000DC5EB /* EaseFaceView.m */; }; + 114D25FC1FC7FA32000DC5EB /* EaseFacialView.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D257C1FC7FA32000DC5EB /* EaseFacialView.m */; }; + 114D25FD1FC7FA32000DC5EB /* EaseChatBarMoreView.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D257F1FC7FA32000DC5EB /* EaseChatBarMoreView.m */; }; + 114D25FE1FC7FA32000DC5EB /* EaseRecordView.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D25821FC7FA32000DC5EB /* EaseRecordView.m */; }; + 114D25FF1FC7FA32000DC5EB /* EaseConversationCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D25851FC7FA32000DC5EB /* EaseConversationCell.m */; }; + 114D26001FC7FA32000DC5EB /* EaseUIResource.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 114D25871FC7FA32000DC5EB /* EaseUIResource.bundle */; }; + 114D26021FC7FA9A000DC5EB /* CoreMedia.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 114D26011FC7FA81000DC5EB /* CoreMedia.framework */; }; + 114D26041FC7FABE000DC5EB /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 114D26031FC7FAAD000DC5EB /* AudioToolbox.framework */; }; + 114D26061FC7FAF8000DC5EB /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 114D26051FC7FAF3000DC5EB /* MobileCoreServices.framework */; }; + 114D26081FC7FB0F000DC5EB /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 114D26071FC7FB09000DC5EB /* ImageIO.framework */; }; + 114D260A1FC7FB21000DC5EB /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 114D26091FC7FB21000DC5EB /* libc++.tbd */; }; + 114D260C1FC7FB30000DC5EB /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 114D260B1FC7FB30000DC5EB /* libz.tbd */; }; + 114D260D1FC7FB89000DC5EB /* HyphenateLite.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 114D24601FC7FA30000DC5EB /* HyphenateLite.framework */; }; + 114D260E1FC7FB89000DC5EB /* HyphenateLite.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 114D24601FC7FA30000DC5EB /* HyphenateLite.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 114D26151FC801AC000DC5EB /* ChatViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D26141FC801AC000DC5EB /* ChatViewController.m */; }; + 114D26181FC801CB000DC5EB /* ChatDemoHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 114D26161FC801CB000DC5EB /* ChatDemoHelper.m */; }; + 114ED9FC1FC3B850008BAE09 /* MyWalletViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 114ED9FA1FC3B84F008BAE09 /* MyWalletViewController.m */; }; + 114ED9FD1FC3B850008BAE09 /* MyTicketViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 114ED9FB1FC3B850008BAE09 /* MyTicketViewController.m */; }; + 114EDA021FC3B86D008BAE09 /* MyTicketCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 114EDA001FC3B86D008BAE09 /* MyTicketCell.m */; }; + 114EDA031FC3B86D008BAE09 /* SyceeCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 114EDA011FC3B86D008BAE09 /* SyceeCell.m */; }; + 114EDA061FC3B87E008BAE09 /* MyTicketModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 114EDA041FC3B87E008BAE09 /* MyTicketModel.m */; }; + 114EDA091FC3D1BB008BAE09 /* ZCAlertController.m in Sources */ = {isa = PBXBuildFile; fileRef = 114EDA081FC3D1BB008BAE09 /* ZCAlertController.m */; }; + 114EDA1D1FC3D8ED008BAE09 /* GiftCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 114EDA191FC3D8EC008BAE09 /* GiftCell.m */; }; + 114EDA1E1FC3D8ED008BAE09 /* PeopleOfGiftCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 114EDA1B1FC3D8EC008BAE09 /* PeopleOfGiftCell.m */; }; + 114EDA231FC3D983008BAE09 /* MyGiftViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 114EDA211FC3D983008BAE09 /* MyGiftViewController.m */; }; + 114EDA241FC3D983008BAE09 /* PeopleOfGiftViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 114EDA221FC3D983008BAE09 /* PeopleOfGiftViewController.m */; }; + 114EDA271FC3DB95008BAE09 /* NSString+transform.m in Sources */ = {isa = PBXBuildFile; fileRef = 114EDA261FC3DB95008BAE09 /* NSString+transform.m */; }; + 114EDA2A1FC3E470008BAE09 /* lw-as@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114EDA281FC3E470008BAE09 /* lw-as@2x.png */; }; + 114EDA2B1FC3E470008BAE09 /* lw-as@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114EDA291FC3E470008BAE09 /* lw-as@3x.png */; }; + 114EDA2E1FC3E47B008BAE09 /* lw-bbt@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114EDA2C1FC3E47A008BAE09 /* lw-bbt@3x.png */; }; + 114EDA2F1FC3E47B008BAE09 /* lw-bbt@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114EDA2D1FC3E47A008BAE09 /* lw-bbt@2x.png */; }; + 114EDA321FC3E487008BAE09 /* lw-cjd@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114EDA301FC3E486008BAE09 /* lw-cjd@2x.png */; }; + 114EDA331FC3E487008BAE09 /* lw-cjd@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114EDA311FC3E487008BAE09 /* lw-cjd@3x.png */; }; + 114EDA361FC3E491008BAE09 /* lw-dg@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114EDA341FC3E491008BAE09 /* lw-dg@2x.png */; }; + 114EDA371FC3E491008BAE09 /* lw-dg@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114EDA351FC3E491008BAE09 /* lw-dg@3x.png */; }; + 114EDA3A1FC3E49C008BAE09 /* lw-dsg@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114EDA381FC3E49B008BAE09 /* lw-dsg@2x.png */; }; + 114EDA3B1FC3E49C008BAE09 /* lw-dsg@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114EDA391FC3E49B008BAE09 /* lw-dsg@3x.png */; }; + 114EDA3E1FC3E4AD008BAE09 /* lw-dz@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114EDA3C1FC3E4AD008BAE09 /* lw-dz@3x.png */; }; + 114EDA3F1FC3E4AD008BAE09 /* lw-dz@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114EDA3D1FC3E4AD008BAE09 /* lw-dz@2x.png */; }; + 114EDA421FC3E4BA008BAE09 /* lw-fj@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114EDA401FC3E4BA008BAE09 /* lw-fj@2x.png */; }; + 114EDA431FC3E4BA008BAE09 /* lw-fj@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114EDA411FC3E4BA008BAE09 /* lw-fj@3x.png */; }; + 114EDA461FC3E4C3008BAE09 /* lw-fw@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114EDA441FC3E4C2008BAE09 /* lw-fw@3x.png */; }; + 114EDA471FC3E4C3008BAE09 /* lw-fw@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114EDA451FC3E4C2008BAE09 /* lw-fw@2x.png */; }; + 114EDA4A1FC3E4D7008BAE09 /* lw-jz@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114EDA481FC3E4D7008BAE09 /* lw-jz@2x.png */; }; + 114EDA4B1FC3E4D7008BAE09 /* lw-jz@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114EDA491FC3E4D7008BAE09 /* lw-jz@3x.png */; }; + 114EDA4E1FC3E4EB008BAE09 /* lw-kh@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114EDA4C1FC3E4EB008BAE09 /* lw-kh@2x.png */; }; + 114EDA4F1FC3E4EB008BAE09 /* lw-kh@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114EDA4D1FC3E4EB008BAE09 /* lw-kh@3x.png */; }; + 114EDA521FC3E4FC008BAE09 /* lw-mg1@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114EDA501FC3E4FC008BAE09 /* lw-mg1@2x.png */; }; + 114EDA531FC3E4FC008BAE09 /* lw-mg1@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114EDA511FC3E4FC008BAE09 /* lw-mg1@3x.png */; }; + 114EDA561FC3E52C008BAE09 /* lw-mg3@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114EDA541FC3E52B008BAE09 /* lw-mg3@2x.png */; }; + 114EDA571FC3E52C008BAE09 /* lw-mg3@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114EDA551FC3E52B008BAE09 /* lw-mg3@3x.png */; }; + 114EDA5A1FC3E542008BAE09 /* lw-mg99@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114EDA581FC3E541008BAE09 /* lw-mg99@2x.png */; }; + 114EDA5B1FC3E542008BAE09 /* lw-mg99@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114EDA591FC3E541008BAE09 /* lw-mg99@3x.png */; }; + 114EDA5E1FC3E54F008BAE09 /* lw-pj@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114EDA5C1FC3E54F008BAE09 /* lw-pj@3x.png */; }; + 114EDA5F1FC3E54F008BAE09 /* lw-pj@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114EDA5D1FC3E54F008BAE09 /* lw-pj@2x.png */; }; + 114EDA621FC3E55A008BAE09 /* lw-qkl@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114EDA601FC3E559008BAE09 /* lw-qkl@3x.png */; }; + 114EDA631FC3E55A008BAE09 /* lw-qkl@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114EDA611FC3E559008BAE09 /* lw-qkl@2x.png */; }; + 114EDA661FC3E567008BAE09 /* lw-yb@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114EDA641FC3E567008BAE09 /* lw-yb@2x.png */; }; + 114EDA671FC3E567008BAE09 /* lw-yb@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114EDA651FC3E567008BAE09 /* lw-yb@3x.png */; }; + 114EDA6A1FC3E575008BAE09 /* lw-yt@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114EDA681FC3E575008BAE09 /* lw-yt@3x.png */; }; + 114EDA6B1FC3E575008BAE09 /* lw-yt@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114EDA691FC3E575008BAE09 /* lw-yt@2x.png */; }; + 114EDA6E1FC3E593008BAE09 /* slw-lwh@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114EDA6C1FC3E593008BAE09 /* slw-lwh@2x.png */; }; + 114EDA6F1FC3E593008BAE09 /* slw-lwh@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 114EDA6D1FC3E593008BAE09 /* slw-lwh@3x.png */; }; + 114EDA971FC3FA0E008BAE09 /* PersonalInfoModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 114EDA951FC3FA0E008BAE09 /* PersonalInfoModel.m */; }; + 114EDA9A1FC3FA39008BAE09 /* UIButtonListView.m in Sources */ = {isa = PBXBuildFile; fileRef = 114EDA991FC3FA39008BAE09 /* UIButtonListView.m */; }; + 114EDA9D1FC3FA90008BAE09 /* delteButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 114EDA9C1FC3FA90008BAE09 /* delteButton.m */; }; + 114EDAA01FC3FADC008BAE09 /* NSString+Ext.m in Sources */ = {isa = PBXBuildFile; fileRef = 114EDA9F1FC3FADC008BAE09 /* NSString+Ext.m */; }; + 114EDAA31FC3FBEA008BAE09 /* ZCTools.m in Sources */ = {isa = PBXBuildFile; fileRef = 114EDAA11FC3FBEA008BAE09 /* ZCTools.m */; }; + 114EDAB81FC4041F008BAE09 /* HobbyAndMarkViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 114EDAB71FC4041F008BAE09 /* HobbyAndMarkViewController.m */; }; + 114EDAC41FC40818008BAE09 /* UserBarView.m in Sources */ = {isa = PBXBuildFile; fileRef = 114EDAC21FC40817008BAE09 /* UserBarView.m */; }; + 114EDACC1FC40F2A008BAE09 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 114EDACB1FC40E0A008BAE09 /* AVFoundation.framework */; }; + 114EDACF1FC41079008BAE09 /* TapGestureRecognizer.m in Sources */ = {isa = PBXBuildFile; fileRef = 114EDACE1FC41079008BAE09 /* TapGestureRecognizer.m */; }; + 114EDAD21FC42D83008BAE09 /* IntroduceViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 114EDAD01FC42D82008BAE09 /* IntroduceViewController.m */; }; + 114EDAD51FC42DAA008BAE09 /* MyPhotoAlbumViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 114EDAD31FC42DAA008BAE09 /* MyPhotoAlbumViewController.m */; }; + 114EDADA1FC42DC5008BAE09 /* VideoViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 114EDAD61FC42DC4008BAE09 /* VideoViewController.m */; }; + 114EDADE1FC42E24008BAE09 /* MapCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 114EDADD1FC42E24008BAE09 /* MapCell.m */; }; + 114EDAE91FC431E8008BAE09 /* PhotoModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 114EDAE71FC431E7008BAE09 /* PhotoModel.m */; }; + 115C3E1F1FD8EBA400370D92 /* launch_X_3.png in Resources */ = {isa = PBXBuildFile; fileRef = 115C3E1B1FD8EBA400370D92 /* launch_X_3.png */; }; + 115C3E201FD8EBA400370D92 /* launch_X_2.png in Resources */ = {isa = PBXBuildFile; fileRef = 115C3E1C1FD8EBA400370D92 /* launch_X_2.png */; }; + 115C3E211FD8EBA400370D92 /* launch_X_1.png in Resources */ = {isa = PBXBuildFile; fileRef = 115C3E1D1FD8EBA400370D92 /* launch_X_1.png */; }; + 115C3E221FD8EBA400370D92 /* launch_X_4.png in Resources */ = {isa = PBXBuildFile; fileRef = 115C3E1E1FD8EBA400370D92 /* launch_X_4.png */; }; + 115C3E251FD90E4C00370D92 /* picture_default@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 115C3E231FD90E4B00370D92 /* picture_default@2x.png */; }; + 115C3E261FD90E4C00370D92 /* picture_default@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 115C3E241FD90E4C00370D92 /* picture_default@3x.png */; }; + 115C3E391FD9309300370D92 /* cameraSelected@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 115C3E331FD9309200370D92 /* cameraSelected@2x.png */; }; + 115C3E3A1FD9309300370D92 /* phoneSelected@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 115C3E341FD9309300370D92 /* phoneSelected@2x.png */; }; + 115C3E3B1FD9309300370D92 /* locationSelected@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 115C3E351FD9309300370D92 /* locationSelected@3x.png */; }; + 115C3E3C1FD9309300370D92 /* locationSelected@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 115C3E361FD9309300370D92 /* locationSelected@2x.png */; }; + 115C3E3D1FD9309300370D92 /* cameraSelected@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 115C3E371FD9309300370D92 /* cameraSelected@3x.png */; }; + 115C3E3E1FD9309300370D92 /* phoneSelected@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 115C3E381FD9309300370D92 /* phoneSelected@3x.png */; }; + 11625BA81FD7A80200E156E5 /* wdqb-rcq-h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11625BA61FD7A80100E156E5 /* wdqb-rcq-h@2x.png */; }; + 11625BA91FD7A80200E156E5 /* wdqb-rcq-h@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11625BA71FD7A80100E156E5 /* wdqb-rcq-h@3x.png */; }; + 11625BAC1FD7A81E00E156E5 /* wdqb-rcq@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11625BAA1FD7A81E00E156E5 /* wdqb-rcq@2x.png */; }; + 11625BAD1FD7A81E00E156E5 /* wdqb-rcq@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11625BAB1FD7A81E00E156E5 /* wdqb-rcq@3x.png */; }; + 11625BB01FD7A85800E156E5 /* wdqb-ysy@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11625BAE1FD7A85800E156E5 /* wdqb-ysy@2x.png */; }; + 11625BB11FD7A85800E156E5 /* wdqb-ysy@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11625BAF1FD7A85800E156E5 /* wdqb-ysy@3x.png */; }; + 11625BB41FD7A8A700E156E5 /* wdqb-gq@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11625BB21FD7A8A600E156E5 /* wdqb-gq@3x.png */; }; + 11625BB51FD7A8A700E156E5 /* wdqb-gq@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11625BB31FD7A8A700E156E5 /* wdqb-gq@2x.png */; }; + 11625BB81FD7A8D200E156E5 /* wdqb-xjq-h@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11625BB61FD7A8D200E156E5 /* wdqb-xjq-h@3x.png */; }; + 11625BB91FD7A8D200E156E5 /* wdqb-xjq-h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11625BB71FD7A8D200E156E5 /* wdqb-xjq-h@2x.png */; }; + 11625BBC1FD7A8FE00E156E5 /* wdqb-xjq@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11625BBA1FD7A8FD00E156E5 /* wdqb-xjq@3x.png */; }; + 11625BBD1FD7A8FE00E156E5 /* wdqb-xjq@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11625BBB1FD7A8FD00E156E5 /* wdqb-xjq@2x.png */; }; + 1166A6441FC12B9800CCA010 /* NewsListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1166A6431FC12B9800CCA010 /* NewsListViewController.m */; }; + 1166A6B41FC1366700CCA010 /* RelationAndOptionView.m in Sources */ = {isa = PBXBuildFile; fileRef = 1166A6B31FC1366700CCA010 /* RelationAndOptionView.m */; }; + 1166A6B71FC136AF00CCA010 /* LikeAndCommentBtnView.m in Sources */ = {isa = PBXBuildFile; fileRef = 1166A6B61FC136AF00CCA010 /* LikeAndCommentBtnView.m */; }; + 1166A6DA1FC1376900CCA010 /* MKAnnotationView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 1166A6BA1FC1376900CCA010 /* MKAnnotationView+WebCache.m */; }; + 1166A6DB1FC1376900CCA010 /* NSData+ImageContentType.m in Sources */ = {isa = PBXBuildFile; fileRef = 1166A6BC1FC1376900CCA010 /* NSData+ImageContentType.m */; }; + 1166A6DC1FC1376900CCA010 /* SDImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 1166A6BE1FC1376900CCA010 /* SDImageCache.m */; }; + 1166A6DD1FC1376900CCA010 /* SDWebImageCompat.m in Sources */ = {isa = PBXBuildFile; fileRef = 1166A6C01FC1376900CCA010 /* SDWebImageCompat.m */; }; + 1166A6DE1FC1376900CCA010 /* SDWebImageDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 1166A6C21FC1376900CCA010 /* SDWebImageDecoder.m */; }; + 1166A6DF1FC1376900CCA010 /* SDWebImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = 1166A6C41FC1376900CCA010 /* SDWebImageDownloader.m */; }; + 1166A6E01FC1376900CCA010 /* SDWebImageDownloaderOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 1166A6C61FC1376900CCA010 /* SDWebImageDownloaderOperation.m */; }; + 1166A6E11FC1376900CCA010 /* SDWebImageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 1166A6C81FC1376900CCA010 /* SDWebImageManager.m */; }; + 1166A6E21FC1376900CCA010 /* SDWebImagePrefetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 1166A6CB1FC1376900CCA010 /* SDWebImagePrefetcher.m */; }; + 1166A6E31FC1376900CCA010 /* UIButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 1166A6CD1FC1376900CCA010 /* UIButton+WebCache.m */; }; + 1166A6E41FC1376900CCA010 /* UIImage+GIF.m in Sources */ = {isa = PBXBuildFile; fileRef = 1166A6CF1FC1376900CCA010 /* UIImage+GIF.m */; }; + 1166A6E51FC1376900CCA010 /* UIImage+MultiFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 1166A6D11FC1376900CCA010 /* UIImage+MultiFormat.m */; }; + 1166A6E61FC1376900CCA010 /* UIImage+WebP.m in Sources */ = {isa = PBXBuildFile; fileRef = 1166A6D31FC1376900CCA010 /* UIImage+WebP.m */; }; + 1166A6E71FC1376900CCA010 /* UIImageView+HighlightedWebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 1166A6D51FC1376900CCA010 /* UIImageView+HighlightedWebCache.m */; }; + 1166A6E81FC1376900CCA010 /* UIImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 1166A6D71FC1376900CCA010 /* UIImageView+WebCache.m */; }; + 1166A6E91FC1376900CCA010 /* UIView+WebCacheOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 1166A6D91FC1376900CCA010 /* UIView+WebCacheOperation.m */; }; + 1166A6EC1FC1395200CCA010 /* PlayVideoView.m in Sources */ = {isa = PBXBuildFile; fileRef = 1166A6EA1FC1395200CCA010 /* PlayVideoView.m */; }; + 1166A6EF1FC139FB00CCA010 /* UIView+FirstViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1166A6ED1FC139FB00CCA010 /* UIView+FirstViewController.m */; }; + 1166A7021FC13F4A00CCA010 /* AFHTTPSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 1166A6F21FC13F4A00CCA010 /* AFHTTPSessionManager.m */; }; + 1166A7031FC13F4A00CCA010 /* AFNetworkReachabilityManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 1166A6F51FC13F4A00CCA010 /* AFNetworkReachabilityManager.m */; }; + 1166A7041FC13F4A00CCA010 /* AFSecurityPolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = 1166A6F71FC13F4A00CCA010 /* AFSecurityPolicy.m */; }; + 1166A7051FC13F4A00CCA010 /* AFURLRequestSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 1166A6F91FC13F4A00CCA010 /* AFURLRequestSerialization.m */; }; + 1166A7061FC13F4A00CCA010 /* AFURLResponseSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 1166A6FB1FC13F4A00CCA010 /* AFURLResponseSerialization.m */; }; + 1166A7071FC13F4A00CCA010 /* AFURLSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 1166A6FD1FC13F4A00CCA010 /* AFURLSessionManager.m */; }; + 1166A7081FC13F4A00CCA010 /* JSONKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 1166A6FF1FC13F4A00CCA010 /* JSONKit.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 1166A7091FC13F4A00CCA010 /* Reachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 1166A7011FC13F4A00CCA010 /* Reachability.m */; }; + 1166A70D1FC1413200CCA010 /* ZCNetRequestManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 1166A70C1FC1413200CCA010 /* ZCNetRequestManager.m */; }; + 116ACEAE1FCCF02D00E12ACA /* noData@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 116ACEAC1FCCF02C00E12ACA /* noData@2x.png */; }; + 116ACEAF1FCCF02D00E12ACA /* noData@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 116ACEAD1FCCF02C00E12ACA /* noData@3x.png */; }; + 116ACEB51FCD327900E12ACA /* LaunchIntroductionView.m in Sources */ = {isa = PBXBuildFile; fileRef = 116ACEB41FCD327900E12ACA /* LaunchIntroductionView.m */; }; + 116ACEE01FCD4D6C00E12ACA /* zl-shipin@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 116ACEDE1FCD4D6C00E12ACA /* zl-shipin@2x.png */; }; + 116ACEE11FCD4D6C00E12ACA /* zl-shipin@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 116ACEDF1FCD4D6C00E12ACA /* zl-shipin@3x.png */; }; + 116ACEE41FCD4D8B00E12ACA /* zl-shiping@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 116ACEE21FCD4D8B00E12ACA /* zl-shiping@2x.png */; }; + 116ACEE51FCD4D8B00E12ACA /* zl-shiping@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 116ACEE31FCD4D8B00E12ACA /* zl-shiping@3x.png */; }; + 116ACEE81FCD52BB00E12ACA /* luzhi@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 116ACEE61FCD52BB00E12ACA /* luzhi@2x.png */; }; + 116ACEE91FCD52BB00E12ACA /* luzhi@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 116ACEE71FCD52BB00E12ACA /* luzhi@3x.png */; }; + 116ACEEB1FCD609500E12ACA /* nation.plist in Resources */ = {isa = PBXBuildFile; fileRef = 116ACEEA1FCD609400E12ACA /* nation.plist */; }; + 116ACEEE1FCD63BB00E12ACA /* addMark@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 116ACEEC1FCD63BB00E12ACA /* addMark@2x.png */; }; + 116ACEEF1FCD63BB00E12ACA /* addMark@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 116ACEED1FCD63BB00E12ACA /* addMark@3x.png */; }; + 117700FB1FEB57180038D4E1 /* PublicYuanquanViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 117700FA1FEB57180038D4E1 /* PublicYuanquanViewController.m */; }; + 117700FE1FEB5C9D0038D4E1 /* YuanquanDetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 117700FD1FEB5C9D0038D4E1 /* YuanquanDetailViewController.m */; }; + 1178FCA62003376900162248 /* home_background@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1178FCA42003376900162248 /* home_background@3x.png */; }; + 1178FCA72003376900162248 /* home_background@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1178FCA52003376900162248 /* home_background@2x.png */; }; + 1178FCAC2003384400162248 /* message@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1178FCA82003384300162248 /* message@3x.png */; }; + 1178FCAD2003384400162248 /* near@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1178FCA92003384300162248 /* near@3x.png */; }; + 1178FCAE2003384400162248 /* near@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1178FCAA2003384300162248 /* near@2x.png */; }; + 1178FCAF2003384400162248 /* message@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1178FCAB2003384400162248 /* message@2x.png */; }; + 1178FCB8200371C600162248 /* new_realname_icon@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1178FCB0200371C400162248 /* new_realname_icon@3x.png */; }; + 1178FCB9200371C600162248 /* new_tuan_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1178FCB1200371C400162248 /* new_tuan_icon@2x.png */; }; + 1178FCBA200371C600162248 /* new_enterprise_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1178FCB2200371C500162248 /* new_enterprise_icon@2x.png */; }; + 1178FCBB200371C600162248 /* new_tuan_icon@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1178FCB3200371C500162248 /* new_tuan_icon@3x.png */; }; + 1178FCBC200371C600162248 /* new_phone_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1178FCB4200371C500162248 /* new_phone_icon@2x.png */; }; + 1178FCBD200371C600162248 /* new_realname_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1178FCB5200371C600162248 /* new_realname_icon@2x.png */; }; + 1178FCBE200371C600162248 /* new_enterprise_icon@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1178FCB6200371C600162248 /* new_enterprise_icon@3x.png */; }; + 1178FCBF200371C600162248 /* new_phone_icon@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1178FCB7200371C600162248 /* new_phone_icon@3x.png */; }; + 117B0C881FDE81A6000C9E21 /* enterprise_hui_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 117B0C861FDE81A5000C9E21 /* enterprise_hui_icon@2x.png */; }; + 117B0C891FDE81A6000C9E21 /* enterprise_hui_icon@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 117B0C871FDE81A5000C9E21 /* enterprise_hui_icon@3x.png */; }; + 117B0C8C1FDE81AF000C9E21 /* enterprise_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 117B0C8A1FDE81AF000C9E21 /* enterprise_icon@2x.png */; }; + 117B0C8D1FDE81AF000C9E21 /* enterprise_icon@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 117B0C8B1FDE81AF000C9E21 /* enterprise_icon@3x.png */; }; + 118069BD1FC50A4500893BE7 /* ForgetPwdViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 118069BC1FC50A4500893BE7 /* ForgetPwdViewController.m */; }; + 118069E01FC54D0D00893BE7 /* delete_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 118069DE1FC54D0C00893BE7 /* delete_icon@2x.png */; }; + 118069E11FC54D0D00893BE7 /* delete_icon@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 118069DF1FC54D0C00893BE7 /* delete_icon@3x.png */; }; + 118069F41FC560CC00893BE7 /* qq_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 118069F21FC560CB00893BE7 /* qq_icon@2x.png */; }; + 118069F51FC560CC00893BE7 /* qq_icon@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 118069F31FC560CB00893BE7 /* qq_icon@3x.png */; }; + 118069F81FC5612200893BE7 /* weibo_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 118069F61FC5612200893BE7 /* weibo_icon@2x.png */; }; + 118069F91FC5612200893BE7 /* weibo_icon@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 118069F71FC5612200893BE7 /* weibo_icon@3x.png */; }; + 118069FC1FC5617300893BE7 /* weixin_icon@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 118069FA1FC5617300893BE7 /* weixin_icon@3x.png */; }; + 118069FD1FC5617300893BE7 /* weixin_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 118069FB1FC5617300893BE7 /* weixin_icon@2x.png */; }; + 11806A391FC5652000893BE7 /* UMMobClick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 118069FF1FC5651F00893BE7 /* UMMobClick.framework */; }; + 11806A3A1FC5652000893BE7 /* UMSocialLocalizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 11806A011FC5651F00893BE7 /* UMSocialLocalizable.strings */; }; + 11806A3B1FC5652000893BE7 /* libUMSocial_Sdk_5.2.1.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 11806A0F1FC5652000893BE7 /* libUMSocial_Sdk_5.2.1.a */; }; + 11806A3C1FC5652000893BE7 /* UMSCommentDetailController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 11806A111FC5652000893BE7 /* UMSCommentDetailController.xib */; }; + 11806A3D1FC5652000893BE7 /* UMSCommentInputController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 11806A121FC5652000893BE7 /* UMSCommentInputController.xib */; }; + 11806A3E1FC5652000893BE7 /* UMSCommentInputControlleriPad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 11806A131FC5652000893BE7 /* UMSCommentInputControlleriPad.xib */; }; + 11806A3F1FC5652000893BE7 /* UMShareEditViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 11806A141FC5652000893BE7 /* UMShareEditViewController.xib */; }; + 11806A401FC5652000893BE7 /* UMShareEditViewControlleriPad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 11806A151FC5652000893BE7 /* UMShareEditViewControlleriPad.xib */; }; + 11806A411FC5652000893BE7 /* UMSLoginViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 11806A161FC5652000893BE7 /* UMSLoginViewController.xib */; }; + 11806A421FC5652000893BE7 /* UMSnsAccountViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 11806A171FC5652000893BE7 /* UMSnsAccountViewController.xib */; }; + 11806A431FC5652000893BE7 /* UMSShareListController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 11806A181FC5652000893BE7 /* UMSShareListController.xib */; }; + 11806A441FC5652000893BE7 /* UMSocialSDKResourcesNew.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 11806A191FC5652000893BE7 /* UMSocialSDKResourcesNew.bundle */; }; + 11806A451FC5652000893BE7 /* libSocialSinaSSO.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 11806A1D1FC5652000893BE7 /* libSocialSinaSSO.a */; }; + 11806A461FC5652000893BE7 /* libWeiboSDK.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 11806A1E1FC5652000893BE7 /* libWeiboSDK.a */; }; + 11806A471FC5652000893BE7 /* WeiboSDK.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 11806A291FC5652000893BE7 /* WeiboSDK.bundle */; }; + 11806A481FC5652000893BE7 /* libSocialQQ.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 11806A2D1FC5652000893BE7 /* libSocialQQ.a */; }; + 11806A491FC5652000893BE7 /* TencentOpenAPI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 11806A2E1FC5652000893BE7 /* TencentOpenAPI.framework */; }; + 11806A4A1FC5652000893BE7 /* TencentOpenApi_IOS_Bundle.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 11806A2F1FC5652000893BE7 /* TencentOpenApi_IOS_Bundle.bundle */; }; + 11806A4B1FC5652000893BE7 /* libSocialWechat.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 11806A321FC5652000893BE7 /* libSocialWechat.a */; }; + 11806A4C1FC5652000893BE7 /* libWeChatSDK.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 11806A331FC5652000893BE7 /* libWeChatSDK.a */; }; + 11806A4D1FC5652000893BE7 /* README.txt in Resources */ = {isa = PBXBuildFile; fileRef = 11806A341FC5652000893BE7 /* README.txt */; }; + 11806A4F1FC570A900893BE7 /* libsqlite3.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 11806A4E1FC570A900893BE7 /* libsqlite3.tbd */; }; + 11806A521FC581FF00893BE7 /* selectDuigou@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11806A501FC581FE00893BE7 /* selectDuigou@2x.png */; }; + 11806A531FC581FF00893BE7 /* selectDuigou@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11806A511FC581FF00893BE7 /* selectDuigou@3x.png */; }; + 11806A561FC5823100893BE7 /* norDuigou@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11806A541FC5823100893BE7 /* norDuigou@3x.png */; }; + 11806A571FC5823100893BE7 /* norDuigou@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11806A551FC5823100893BE7 /* norDuigou@2x.png */; }; + 118CC1B81FFB50A1004CC0D5 /* TopicDetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 118CC1B71FFB50A1004CC0D5 /* TopicDetailViewController.m */; }; + 118CC1BB1FFB50CF004CC0D5 /* TopicDetailHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 118CC1BA1FFB50CF004CC0D5 /* TopicDetailHeaderView.m */; }; + 118CC1C21FFB6DAC004CC0D5 /* fire@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 118CC1C01FFB6DAC004CC0D5 /* fire@3x.png */; }; + 118CC1C31FFB6DAC004CC0D5 /* fire@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 118CC1C11FFB6DAC004CC0D5 /* fire@2x.png */; }; + 118CC1C61FFB7494004CC0D5 /* YuanquanDetailHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 118CC1C51FFB7494004CC0D5 /* YuanquanDetailHeaderView.m */; }; + 118CDDEC1FC0077C00E41475 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 118CDDEB1FC0077C00E41475 /* Assets.xcassets */; }; + 118CDDF21FC0077C00E41475 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 118CDDF11FC0077C00E41475 /* main.m */; }; + 118CDE771FC007BF00E41475 /* UIView+ZCExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = 118CDDFD1FC007BE00E41475 /* UIView+ZCExtension.m */; }; + 118CDE781FC007BF00E41475 /* CustomNavigationView.m in Sources */ = {isa = PBXBuildFile; fileRef = 118CDE001FC007BE00E41475 /* CustomNavigationView.m */; }; + 118CDE791FC007BF00E41475 /* MJRefreshAutoFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 118CDE091FC007BE00E41475 /* MJRefreshAutoFooter.m */; }; + 118CDE7A1FC007BF00E41475 /* MJRefreshBackFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 118CDE0B1FC007BE00E41475 /* MJRefreshBackFooter.m */; }; + 118CDE7B1FC007BF00E41475 /* MJRefreshComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = 118CDE0D1FC007BE00E41475 /* MJRefreshComponent.m */; }; + 118CDE7C1FC007BF00E41475 /* MJRefreshFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 118CDE0F1FC007BE00E41475 /* MJRefreshFooter.m */; }; + 118CDE7D1FC007BF00E41475 /* MJRefreshHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 118CDE111FC007BE00E41475 /* MJRefreshHeader.m */; }; + 118CDE7E1FC007BF00E41475 /* MJRefreshAutoGifFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 118CDE161FC007BE00E41475 /* MJRefreshAutoGifFooter.m */; }; + 118CDE7F1FC007BF00E41475 /* MJRefreshAutoNormalFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 118CDE181FC007BE00E41475 /* MJRefreshAutoNormalFooter.m */; }; + 118CDE801FC007BF00E41475 /* MJRefreshAutoStateFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 118CDE1A1FC007BE00E41475 /* MJRefreshAutoStateFooter.m */; }; + 118CDE811FC007BF00E41475 /* MJRefreshBackGifFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 118CDE1D1FC007BE00E41475 /* MJRefreshBackGifFooter.m */; }; + 118CDE821FC007BF00E41475 /* MJRefreshBackNormalFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 118CDE1F1FC007BE00E41475 /* MJRefreshBackNormalFooter.m */; }; + 118CDE831FC007BF00E41475 /* MJRefreshBackStateFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 118CDE211FC007BE00E41475 /* MJRefreshBackStateFooter.m */; }; + 118CDE841FC007BF00E41475 /* MJRefreshGifHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 118CDE241FC007BE00E41475 /* MJRefreshGifHeader.m */; }; + 118CDE851FC007BF00E41475 /* MJRefreshNormalHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 118CDE261FC007BE00E41475 /* MJRefreshNormalHeader.m */; }; + 118CDE861FC007BF00E41475 /* MJRefreshStateHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 118CDE281FC007BE00E41475 /* MJRefreshStateHeader.m */; }; + 118CDE871FC007BF00E41475 /* MJRefresh.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 118CDE291FC007BE00E41475 /* MJRefresh.bundle */; }; + 118CDE881FC007BF00E41475 /* MJRefreshConst.m in Sources */ = {isa = PBXBuildFile; fileRef = 118CDE2C1FC007BE00E41475 /* MJRefreshConst.m */; }; + 118CDE891FC007BF00E41475 /* NSBundle+MJRefresh.m in Sources */ = {isa = PBXBuildFile; fileRef = 118CDE2E1FC007BE00E41475 /* NSBundle+MJRefresh.m */; }; + 118CDE8A1FC007BF00E41475 /* UIScrollView+MJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = 118CDE301FC007BE00E41475 /* UIScrollView+MJExtension.m */; }; + 118CDE8B1FC007BF00E41475 /* UIScrollView+MJRefresh.m in Sources */ = {isa = PBXBuildFile; fileRef = 118CDE321FC007BE00E41475 /* UIScrollView+MJRefresh.m */; }; + 118CDE8C1FC007BF00E41475 /* UIView+MJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = 118CDE341FC007BE00E41475 /* UIView+MJExtension.m */; }; + 118CDE8D1FC007BF00E41475 /* back_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 118CDE361FC007BE00E41475 /* back_icon@2x.png */; }; + 118CDE8E1FC007BF00E41475 /* back_icon@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 118CDE371FC007BE00E41475 /* back_icon@3x.png */; }; + 118CDE8F1FC007BF00E41475 /* close_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 118CDE381FC007BE00E41475 /* close_icon@2x.png */; }; + 118CDE901FC007BF00E41475 /* close_icon@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 118CDE391FC007BE00E41475 /* close_icon@3x.png */; }; + 118CDE911FC007BF00E41475 /* ActivityViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 118CDE3E1FC007BE00E41475 /* ActivityViewController.m */; }; + 118CDE921FC007BF00E41475 /* DiscoverViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 118CDE441FC007BE00E41475 /* DiscoverViewController.m */; }; + 118CDE931FC007BF00E41475 /* HomeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 118CDE4A1FC007BE00E41475 /* HomeViewController.m */; }; + 118CDE941FC007BF00E41475 /* MineViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 118CDE501FC007BE00E41475 /* MineViewController.m */; }; + 118CDE951FC007BF00E41475 /* MineTopView.m in Sources */ = {isa = PBXBuildFile; fileRef = 118CDE541FC007BE00E41475 /* MineTopView.m */; }; + 118CDE971FC007BF00E41475 /* RegisterViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 118CDE5A1FC007BE00E41475 /* RegisterViewController.m */; }; + 118CDE9C1FC007BF00E41475 /* InputTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 118CDE631FC007BE00E41475 /* InputTextView.m */; }; + 118CDE9D1FC007BF00E41475 /* RootNavigationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 118CDE681FC007BF00E41475 /* RootNavigationController.m */; }; + 118CDE9E1FC007BF00E41475 /* RootViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 118CDE6B1FC007BF00E41475 /* RootViewController.m */; }; + 118CDE9F1FC007BF00E41475 /* ZCRefreshTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 118CDE6D1FC007BF00E41475 /* ZCRefreshTableViewController.m */; }; + 118CDEA01FC007BF00E41475 /* MainTabBarController.m in Sources */ = {isa = PBXBuildFile; fileRef = 118CDE701FC007BF00E41475 /* MainTabBarController.m */; }; + 118CDEA11FC007BF00E41475 /* AppDelegate+AppService.m in Sources */ = {isa = PBXBuildFile; fileRef = 118CDE731FC007BF00E41475 /* AppDelegate+AppService.m */; }; + 118CDEA21FC007BF00E41475 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 118CDE751FC007BF00E41475 /* AppDelegate.m */; }; + 118CDEA51FC0093B00E41475 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 118CDEA31FC0093B00E41475 /* Main.storyboard */; }; + 118CDEA61FC0093B00E41475 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 118CDEA41FC0093B00E41475 /* LaunchScreen.storyboard */; }; + 118CDEAB1FC0142100E41475 /* ThirdLoginView.m in Sources */ = {isa = PBXBuildFile; fileRef = 118CDEAA1FC0142100E41475 /* ThirdLoginView.m */; }; + 118CDEAF1FC0286900E41475 /* PhoneCodeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 118CDEAE1FC0286900E41475 /* PhoneCodeViewController.m */; }; + 118CDEB21FC02BA200E41475 /* VerifyCodeButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 118CDEB11FC02BA200E41475 /* VerifyCodeButton.m */; }; + 118CDEB51FC02C0F00E41475 /* ZCTextFieldLineView.m in Sources */ = {isa = PBXBuildFile; fileRef = 118CDEB31FC02C0F00E41475 /* ZCTextFieldLineView.m */; }; + 118DA3451FD514BD00246522 /* launch_5_1.png in Resources */ = {isa = PBXBuildFile; fileRef = 118DA3321FD514BC00246522 /* launch_5_1.png */; }; + 118DA3461FD514BD00246522 /* launch_5_2.png in Resources */ = {isa = PBXBuildFile; fileRef = 118DA3331FD514BC00246522 /* launch_5_2.png */; }; + 118DA3471FD514BD00246522 /* launch_5_3.png in Resources */ = {isa = PBXBuildFile; fileRef = 118DA3341FD514BC00246522 /* launch_5_3.png */; }; + 118DA3481FD514BD00246522 /* launch_5_4.png in Resources */ = {isa = PBXBuildFile; fileRef = 118DA3351FD514BC00246522 /* launch_5_4.png */; }; + 118DA3491FD514BD00246522 /* launch_6_1.png in Resources */ = {isa = PBXBuildFile; fileRef = 118DA3371FD514BD00246522 /* launch_6_1.png */; }; + 118DA34A1FD514BD00246522 /* launch_6_2.png in Resources */ = {isa = PBXBuildFile; fileRef = 118DA3381FD514BD00246522 /* launch_6_2.png */; }; + 118DA34B1FD514BD00246522 /* launch_6_3.png in Resources */ = {isa = PBXBuildFile; fileRef = 118DA3391FD514BD00246522 /* launch_6_3.png */; }; + 118DA34C1FD514BD00246522 /* launch_6_4.png in Resources */ = {isa = PBXBuildFile; fileRef = 118DA33A1FD514BD00246522 /* launch_6_4.png */; }; + 118DA34D1FD514BD00246522 /* launch_4_1.png in Resources */ = {isa = PBXBuildFile; fileRef = 118DA33C1FD514BD00246522 /* launch_4_1.png */; }; + 118DA34E1FD514BD00246522 /* launch_4_2.png in Resources */ = {isa = PBXBuildFile; fileRef = 118DA33D1FD514BD00246522 /* launch_4_2.png */; }; + 118DA34F1FD514BD00246522 /* launch_4_3.png in Resources */ = {isa = PBXBuildFile; fileRef = 118DA33E1FD514BD00246522 /* launch_4_3.png */; }; + 118DA3501FD514BD00246522 /* launch_4_4.png in Resources */ = {isa = PBXBuildFile; fileRef = 118DA33F1FD514BD00246522 /* launch_4_4.png */; }; + 118DA3511FD514BD00246522 /* launch_6p_1.png in Resources */ = {isa = PBXBuildFile; fileRef = 118DA3411FD514BD00246522 /* launch_6p_1.png */; }; + 118DA3521FD514BD00246522 /* launch_6p_2.png in Resources */ = {isa = PBXBuildFile; fileRef = 118DA3421FD514BD00246522 /* launch_6p_2.png */; }; + 118DA3531FD514BD00246522 /* launch_6p_3.png in Resources */ = {isa = PBXBuildFile; fileRef = 118DA3431FD514BD00246522 /* launch_6p_3.png */; }; + 118DA3541FD514BD00246522 /* launch_6p_4.png in Resources */ = {isa = PBXBuildFile; fileRef = 118DA3441FD514BD00246522 /* launch_6p_4.png */; }; + 11908D941FCE9B0C00B8569F /* share_white_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11908D921FCE9B0B00B8569F /* share_white_icon@2x.png */; }; + 11908D951FCE9B0C00B8569F /* share_white_icon@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11908D931FCE9B0C00B8569F /* share_white_icon@3x.png */; }; + 11908DA71FCEB2B400B8569F /* home_hui@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11908D971FCEB2B200B8569F /* home_hui@3x.png */; }; + 11908DA81FCEB2B400B8569F /* mine@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11908D981FCEB2B300B8569F /* mine@2x.png */; }; + 11908DA91FCEB2B400B8569F /* home_hui@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11908D991FCEB2B300B8569F /* home_hui@2x.png */; }; + 11908DAA1FCEB2B400B8569F /* home@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11908D9A1FCEB2B300B8569F /* home@2x.png */; }; + 11908DAB1FCEB2B400B8569F /* home@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11908D9B1FCEB2B300B8569F /* home@3x.png */; }; + 11908DAC1FCEB2B400B8569F /* mine_hui@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11908D9C1FCEB2B300B8569F /* mine_hui@2x.png */; }; + 11908DAD1FCEB2B400B8569F /* mine_hui@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11908D9D1FCEB2B300B8569F /* mine_hui@3x.png */; }; + 11908DAE1FCEB2B400B8569F /* activity@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11908D9E1FCEB2B300B8569F /* activity@2x.png */; }; + 11908DAF1FCEB2B400B8569F /* activity_hui@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11908D9F1FCEB2B300B8569F /* activity_hui@2x.png */; }; + 11908DB01FCEB2B400B8569F /* activity@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11908DA01FCEB2B300B8569F /* activity@3x.png */; }; + 11908DB11FCEB2B400B8569F /* discover@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11908DA11FCEB2B400B8569F /* discover@3x.png */; }; + 11908DB21FCEB2B400B8569F /* mine@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11908DA21FCEB2B400B8569F /* mine@3x.png */; }; + 11908DB31FCEB2B400B8569F /* discover_hui@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11908DA31FCEB2B400B8569F /* discover_hui@2x.png */; }; + 11908DB41FCEB2B400B8569F /* discover@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11908DA41FCEB2B400B8569F /* discover@2x.png */; }; + 11908DB51FCEB2B400B8569F /* activity_hui@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11908DA51FCEB2B400B8569F /* activity_hui@3x.png */; }; + 11908DB61FCEB2B400B8569F /* discover_hui@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11908DA61FCEB2B400B8569F /* discover_hui@3x.png */; }; + 11908DC61FCEB5C000B8569F /* mine_2_0@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11908DB81FCEB5BE00B8569F /* mine_2_0@3x.png */; }; + 11908DC71FCEB5C000B8569F /* mine_2_1@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11908DB91FCEB5BE00B8569F /* mine_2_1@3x.png */; }; + 11908DC81FCEB5C000B8569F /* mine_2_1@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11908DBA1FCEB5BE00B8569F /* mine_2_1@2x.png */; }; + 11908DC91FCEB5C000B8569F /* mine_2_0@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11908DBB1FCEB5BE00B8569F /* mine_2_0@2x.png */; }; + 11908DCA1FCEB5C000B8569F /* mine_0_1@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11908DBC1FCEB5BE00B8569F /* mine_0_1@2x.png */; }; + 11908DCB1FCEB5C000B8569F /* mine_1_0@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11908DBD1FCEB5BE00B8569F /* mine_1_0@3x.png */; }; + 11908DCC1FCEB5C000B8569F /* mine_0_0@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11908DBE1FCEB5BF00B8569F /* mine_0_0@2x.png */; }; + 11908DCD1FCEB5C000B8569F /* mine_1_0@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11908DBF1FCEB5BF00B8569F /* mine_1_0@2x.png */; }; + 11908DCE1FCEB5C000B8569F /* mine_0_1@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11908DC01FCEB5BF00B8569F /* mine_0_1@3x.png */; }; + 11908DCF1FCEB5C000B8569F /* mine_0_0@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11908DC11FCEB5BF00B8569F /* mine_0_0@3x.png */; }; + 11908DD01FCEB5C000B8569F /* mine_1_2@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11908DC21FCEB5BF00B8569F /* mine_1_2@2x.png */; }; + 11908DD11FCEB5C000B8569F /* mine_1_2@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11908DC31FCEB5BF00B8569F /* mine_1_2@3x.png */; }; + 11908DD21FCEB5C000B8569F /* mine_1_1@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11908DC41FCEB5BF00B8569F /* mine_1_1@2x.png */; }; + 11908DD31FCEB5C000B8569F /* mine_1_1@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11908DC51FCEB5C000B8569F /* mine_1_1@3x.png */; }; + 11908DDA1FCEB84300B8569F /* realname_icon@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11908DD41FCEB84100B8569F /* realname_icon@3x.png */; }; + 11908DDB1FCEB84300B8569F /* phone_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11908DD51FCEB84100B8569F /* phone_icon@2x.png */; }; + 11908DDC1FCEB84300B8569F /* tuan_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11908DD61FCEB84100B8569F /* tuan_icon@2x.png */; }; + 11908DDD1FCEB84300B8569F /* phone_icon@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11908DD71FCEB84200B8569F /* phone_icon@3x.png */; }; + 11908DDE1FCEB84300B8569F /* tuan_icon@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11908DD81FCEB84200B8569F /* tuan_icon@3x.png */; }; + 11908DDF1FCEB84300B8569F /* realname_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11908DD91FCEB84300B8569F /* realname_icon@2x.png */; }; + 11908DE61FCEBE8400B8569F /* tuan_hui_icon@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11908DE01FCEBE8200B8569F /* tuan_hui_icon@3x.png */; }; + 11908DE71FCEBE8400B8569F /* phone_hui_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11908DE11FCEBE8200B8569F /* phone_hui_icon@2x.png */; }; + 11908DE81FCEBE8400B8569F /* tuan_hui_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11908DE21FCEBE8200B8569F /* tuan_hui_icon@2x.png */; }; + 11908DE91FCEBE8400B8569F /* phone_hui_icon@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11908DE31FCEBE8200B8569F /* phone_hui_icon@3x.png */; }; + 11908DEA1FCEBE8400B8569F /* realname_hui_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11908DE41FCEBE8300B8569F /* realname_hui_icon@2x.png */; }; + 11908DEB1FCEBE8400B8569F /* realname_hui_icon@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11908DE51FCEBE8300B8569F /* realname_hui_icon@3x.png */; }; + 11908DF21FCEBF5F00B8569F /* password_icon@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11908DEC1FCEBF5E00B8569F /* password_icon@3x.png */; }; + 11908DF31FCEBF5F00B8569F /* password_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11908DED1FCEBF5E00B8569F /* password_icon@2x.png */; }; + 11908DF41FCEBF5F00B8569F /* loginphone_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11908DEE1FCEBF5E00B8569F /* loginphone_icon@2x.png */; }; + 11908DF51FCEBF5F00B8569F /* loginphone_icon@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11908DEF1FCEBF5E00B8569F /* loginphone_icon@3x.png */; }; + 11908DF61FCEBF5F00B8569F /* sex_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11908DF01FCEBF5F00B8569F /* sex_icon@2x.png */; }; + 11908DF71FCEBF5F00B8569F /* sex_icon@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11908DF11FCEBF5F00B8569F /* sex_icon@3x.png */; }; + 11A1D9371FCBDD3D005CA3E8 /* act_time@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11A1D9351FCBDD3D005CA3E8 /* act_time@3x.png */; }; + 11A1D9381FCBDD3D005CA3E8 /* act_time@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11A1D9361FCBDD3D005CA3E8 /* act_time@2x.png */; }; + 11A1D93B1FCBDD61005CA3E8 /* act_place@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11A1D9391FCBDD61005CA3E8 /* act_place@2x.png */; }; + 11A1D93C1FCBDD61005CA3E8 /* act_place@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11A1D93A1FCBDD61005CA3E8 /* act_place@3x.png */; }; + 11A1D93F1FCBDD86005CA3E8 /* act_renshu@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11A1D93D1FCBDD86005CA3E8 /* act_renshu@3x.png */; }; + 11A1D9401FCBDD86005CA3E8 /* act_renshu@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11A1D93E1FCBDD86005CA3E8 /* act_renshu@2x.png */; }; + 11A1D9431FCBDDB8005CA3E8 /* act_money@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11A1D9411FCBDDB8005CA3E8 /* act_money@3x.png */; }; + 11A1D9441FCBDDB8005CA3E8 /* act_money@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11A1D9421FCBDDB8005CA3E8 /* act_money@2x.png */; }; + 11A1D9471FCBDDE8005CA3E8 /* act_phone@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11A1D9451FCBDDE8005CA3E8 /* act_phone@3x.png */; }; + 11A1D9481FCBDDE8005CA3E8 /* act_phone@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11A1D9461FCBDDE8005CA3E8 /* act_phone@2x.png */; }; + 11A1D94B1FCBDE3D005CA3E8 /* xiaosanjiao_up@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11A1D9491FCBDE3D005CA3E8 /* xiaosanjiao_up@3x.png */; }; + 11A1D94C1FCBDE3D005CA3E8 /* xiaosanjiao_up@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11A1D94A1FCBDE3D005CA3E8 /* xiaosanjiao_up@2x.png */; }; + 11A1D94F1FCBDE66005CA3E8 /* xiaosanjiao_down@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11A1D94D1FCBDE66005CA3E8 /* xiaosanjiao_down@3x.png */; }; + 11A1D9501FCBDE66005CA3E8 /* xiaosanjiao_down@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11A1D94E1FCBDE66005CA3E8 /* xiaosanjiao_down@2x.png */; }; + 11A1D9531FCBE082005CA3E8 /* msg@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11A1D9511FCBE081005CA3E8 /* msg@3x.png */; }; + 11A1D9541FCBE082005CA3E8 /* msg@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11A1D9521FCBE082005CA3E8 /* msg@2x.png */; }; + 11A1D9571FCBE175005CA3E8 /* clickLike@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11A1D9551FCBE174005CA3E8 /* clickLike@2x.png */; }; + 11A1D9581FCBE175005CA3E8 /* clickLike@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11A1D9561FCBE174005CA3E8 /* clickLike@3x.png */; }; + 11A1D95B1FCBE1AB005CA3E8 /* like@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11A1D9591FCBE1AA005CA3E8 /* like@2x.png */; }; + 11A1D95C1FCBE1AB005CA3E8 /* like@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11A1D95A1FCBE1AA005CA3E8 /* like@3x.png */; }; + 11A1D95F1FCBE1EB005CA3E8 /* Brenshu@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11A1D95D1FCBE1EB005CA3E8 /* Brenshu@3x.png */; }; + 11A1D9601FCBE1EB005CA3E8 /* Brenshu@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11A1D95E1FCBE1EB005CA3E8 /* Brenshu@2x.png */; }; + 11A1D9631FCBE23C005CA3E8 /* icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11A1D9611FCBE23C005CA3E8 /* icon@2x.png */; }; + 11A1D9641FCBE23C005CA3E8 /* icon@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11A1D9621FCBE23C005CA3E8 /* icon@3x.png */; }; + 11A1D9671FCBE267005CA3E8 /* act_look@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11A1D9651FCBE266005CA3E8 /* act_look@2x.png */; }; + 11A1D9681FCBE267005CA3E8 /* act_look@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11A1D9661FCBE267005CA3E8 /* act_look@3x.png */; }; + 11A1D96B1FCBE28B005CA3E8 /* act_share@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11A1D9691FCBE28B005CA3E8 /* act_share@2x.png */; }; + 11A1D96C1FCBE28B005CA3E8 /* act_share@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11A1D96A1FCBE28B005CA3E8 /* act_share@3x.png */; }; + 11A1D96F1FCBE2CE005CA3E8 /* act_message@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11A1D96D1FCBE2CE005CA3E8 /* act_message@3x.png */; }; + 11A1D9701FCBE2CE005CA3E8 /* act_message@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11A1D96E1FCBE2CE005CA3E8 /* act_message@2x.png */; }; + 11A1D9731FCBE2F3005CA3E8 /* act_baoming@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11A1D9711FCBE2F3005CA3E8 /* act_baoming@3x.png */; }; + 11A1D9741FCBE2F3005CA3E8 /* act_baoming@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11A1D9721FCBE2F3005CA3E8 /* act_baoming@2x.png */; }; + 11A1D9771FCBE31C005CA3E8 /* Newpinglun@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11A1D9751FCBE31C005CA3E8 /* Newpinglun@3x.png */; }; + 11A1D9781FCBE31C005CA3E8 /* Newpinglun@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11A1D9761FCBE31C005CA3E8 /* Newpinglun@2x.png */; }; + 11A1D97B1FCC0DCD005CA3E8 /* icon2_1@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11A1D9791FCC0DCD005CA3E8 /* icon2_1@3x.png */; }; + 11A1D97C1FCC0DCD005CA3E8 /* icon2_1@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11A1D97A1FCC0DCD005CA3E8 /* icon2_1@2x.png */; }; + 11A1D97F1FCC0E04005CA3E8 /* icon2_2@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11A1D97D1FCC0E03005CA3E8 /* icon2_2@3x.png */; }; + 11A1D9801FCC0E04005CA3E8 /* icon2_2@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11A1D97E1FCC0E03005CA3E8 /* icon2_2@2x.png */; }; + 11A1D9831FCC0E25005CA3E8 /* icon2_3@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11A1D9811FCC0E24005CA3E8 /* icon2_3@3x.png */; }; + 11A1D9841FCC0E25005CA3E8 /* icon2_3@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11A1D9821FCC0E25005CA3E8 /* icon2_3@2x.png */; }; + 11A1D9871FCC0E76005CA3E8 /* icon2_4@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11A1D9851FCC0E75005CA3E8 /* icon2_4@3x.png */; }; + 11A1D9881FCC0E76005CA3E8 /* icon2_4@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11A1D9861FCC0E76005CA3E8 /* icon2_4@2x.png */; }; + 11A1D98B1FCC0E9C005CA3E8 /* icon2_5@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11A1D9891FCC0E9B005CA3E8 /* icon2_5@2x.png */; }; + 11A1D98C1FCC0E9C005CA3E8 /* icon2_5@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11A1D98A1FCC0E9C005CA3E8 /* icon2_5@3x.png */; }; + 11A1D98F1FCC27A1005CA3E8 /* redLike@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11A1D98D1FCC27A1005CA3E8 /* redLike@3x.png */; }; + 11A1D9901FCC27A1005CA3E8 /* redLike@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11A1D98E1FCC27A1005CA3E8 /* redLike@2x.png */; }; + 11A767C11FF1EF8C0039ABEC /* ImgTextImg.m in Sources */ = {isa = PBXBuildFile; fileRef = 11A767C01FF1EF8C0039ABEC /* ImgTextImg.m */; }; + 11A767C41FF1FA550039ABEC /* ZCTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 11A767C31FF1FA550039ABEC /* ZCTextView.m */; }; + 11A963ED1FFF0EBD00094A09 /* YuanquanCommentModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 11A963EC1FFF0EBD00094A09 /* YuanquanCommentModel.m */; }; + 11B4ED43200EDF0D00A67D35 /* UIImage+ImgSize.m in Sources */ = {isa = PBXBuildFile; fileRef = 11B4ED42200EDF0D00A67D35 /* UIImage+ImgSize.m */; }; + 11CCD1BC1FFDF57100668A7A /* yfcs@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11CCD1AE1FFDF56E00668A7A /* yfcs@2x.png */; }; + 11CCD1BD1FFDF57100668A7A /* qyzx@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11CCD1AF1FFDF56E00668A7A /* qyzx@3x.png */; }; + 11CCD1BE1FFDF57100668A7A /* topic_public@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11CCD1B01FFDF56F00668A7A /* topic_public@2x.png */; }; + 11CCD1BF1FFDF57100668A7A /* yq_video@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11CCD1B11FFDF56F00668A7A /* yq_video@3x.png */; }; + 11CCD1C01FFDF57100668A7A /* topic_public@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11CCD1B21FFDF56F00668A7A /* topic_public@3x.png */; }; + 11CCD1C11FFDF57100668A7A /* xttj@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11CCD1B31FFDF56F00668A7A /* xttj@2x.png */; }; + 11CCD1C21FFDF57100668A7A /* xttj@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11CCD1B41FFDF56F00668A7A /* xttj@3x.png */; }; + 11CCD1C31FFDF57100668A7A /* yq_like_no@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11CCD1B51FFDF57000668A7A /* yq_like_no@2x.png */; }; + 11CCD1C41FFDF57100668A7A /* yfcs@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11CCD1B61FFDF57000668A7A /* yfcs@3x.png */; }; + 11CCD1C51FFDF57100668A7A /* yq_comment@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11CCD1B71FFDF57000668A7A /* yq_comment@2x.png */; }; + 11CCD1C61FFDF57100668A7A /* yq_comment@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11CCD1B81FFDF57000668A7A /* yq_comment@3x.png */; }; + 11CCD1C71FFDF57100668A7A /* yq_like_no@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11CCD1B91FFDF57000668A7A /* yq_like_no@3x.png */; }; + 11CCD1C81FFDF57100668A7A /* qyzx@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11CCD1BA1FFDF57100668A7A /* qyzx@2x.png */; }; + 11CCD1C91FFDF57100668A7A /* yq_video@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11CCD1BB1FFDF57100668A7A /* yq_video@2x.png */; }; + 11CFFD372004AFC6007D169D /* new_enterprise_hui_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11CFFD2F2004AFC3007D169D /* new_enterprise_hui_icon@2x.png */; }; + 11CFFD382004AFC6007D169D /* new_realname_hui_icon@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11CFFD302004AFC3007D169D /* new_realname_hui_icon@3x.png */; }; + 11CFFD392004AFC6007D169D /* new_realname_hui_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11CFFD312004AFC4007D169D /* new_realname_hui_icon@2x.png */; }; + 11CFFD3A2004AFC6007D169D /* new_enterprise_hui_icon@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11CFFD322004AFC4007D169D /* new_enterprise_hui_icon@3x.png */; }; + 11CFFD3B2004AFC6007D169D /* new_phone_hui_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11CFFD332004AFC4007D169D /* new_phone_hui_icon@2x.png */; }; + 11CFFD3C2004AFC6007D169D /* new_phone_hui_icon@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11CFFD342004AFC5007D169D /* new_phone_hui_icon@3x.png */; }; + 11CFFD3D2004AFC6007D169D /* new_tuan_hui_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11CFFD352004AFC5007D169D /* new_tuan_hui_icon@2x.png */; }; + 11CFFD3E2004AFC6007D169D /* new_tuan_hui_icon@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11CFFD362004AFC5007D169D /* new_tuan_hui_icon@3x.png */; }; + 11CFFD412004C682007D169D /* yq_collect@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11CFFD3F2004C681007D169D /* yq_collect@3x.png */; }; + 11CFFD422004C682007D169D /* yq_collect@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11CFFD402004C682007D169D /* yq_collect@2x.png */; }; + 11CFFD452004C7B1007D169D /* yq_concern@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11CFFD432004C7B0007D169D /* yq_concern@2x.png */; }; + 11CFFD462004C7B1007D169D /* yq_concern@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11CFFD442004C7B0007D169D /* yq_concern@3x.png */; }; + 11CFFD492004CE5C007D169D /* yq_like_yes@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11CFFD472004CE5B007D169D /* yq_like_yes@3x.png */; }; + 11CFFD4A2004CE5C007D169D /* yq_like_yes@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11CFFD482004CE5C007D169D /* yq_like_yes@2x.png */; }; + 11DA8C3C1FE0D2CE003B0728 /* phone_editor@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11DA8C3B1FE0D2CE003B0728 /* phone_editor@3x.png */; }; + 11DA8C3F1FE106D7003B0728 /* arrow_up@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11DA8C3D1FE106D6003B0728 /* arrow_up@2x.png */; }; + 11DA8C401FE106D7003B0728 /* arrow_up@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11DA8C3E1FE106D7003B0728 /* arrow_up@3x.png */; }; + 11DA8C431FE1070C003B0728 /* arrow_down@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11DA8C411FE1070B003B0728 /* arrow_down@2x.png */; }; + 11DA8C441FE1070C003B0728 /* arrow_down@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11DA8C421FE1070C003B0728 /* arrow_down@3x.png */; }; + 11E2A9DE1FE794D800E3A4B2 /* XLCard.m in Sources */ = {isa = PBXBuildFile; fileRef = 11E2A9D71FE794D800E3A4B2 /* XLCard.m */; }; + 11E2A9DF1FE794D800E3A4B2 /* XLCardItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 11E2A9D91FE794D800E3A4B2 /* XLCardItem.m */; }; + 11E2A9E01FE794D800E3A4B2 /* XLCardSwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = 11E2A9DB1FE794D800E3A4B2 /* XLCardSwitch.m */; }; + 11E2A9E11FE794D800E3A4B2 /* XLCardSwitchFlowLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 11E2A9DD1FE794D800E3A4B2 /* XLCardSwitchFlowLayout.m */; }; + 11E2B8F41FC2837D00CE9FF3 /* avatar_default@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11E2B8F21FC2837D00CE9FF3 /* avatar_default@3x.png */; }; + 11E2B8F51FC2837D00CE9FF3 /* avatar_default@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11E2B8F31FC2837D00CE9FF3 /* avatar_default@2x.png */; }; + 11E2B9001FC2843200CE9FF3 /* LoginViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 11E2B8FF1FC2843100CE9FF3 /* LoginViewController.m */; }; + 11E2B9141FC2848900CE9FF3 /* huifu@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11E2B9021FC2848900CE9FF3 /* huifu@2x.png */; }; + 11E2B9151FC2848900CE9FF3 /* huifu@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11E2B9031FC2848900CE9FF3 /* huifu@3x.png */; }; + 11E2B9161FC2848900CE9FF3 /* PYQ-dz@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11E2B9041FC2848900CE9FF3 /* PYQ-dz@2x.png */; }; + 11E2B9171FC2848900CE9FF3 /* PYQ-dz@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11E2B9051FC2848900CE9FF3 /* PYQ-dz@3x.png */; }; + 11E2B9181FC2848900CE9FF3 /* PYQ-hx@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11E2B9061FC2848900CE9FF3 /* PYQ-hx@2x.png */; }; + 11E2B9191FC2848900CE9FF3 /* PYQ-hx@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11E2B9071FC2848900CE9FF3 /* PYQ-hx@3x.png */; }; + 11E2B91A1FC2848900CE9FF3 /* PYQ-jt@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11E2B9081FC2848900CE9FF3 /* PYQ-jt@2x.png */; }; + 11E2B91B1FC2848900CE9FF3 /* PYQ-jt@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11E2B9091FC2848900CE9FF3 /* PYQ-jt@3x.png */; }; + 11E2B91C1FC2848900CE9FF3 /* PYQ-pjds@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11E2B90A1FC2848900CE9FF3 /* PYQ-pjds@2x.png */; }; + 11E2B91D1FC2848900CE9FF3 /* PYQ-pjds@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11E2B90B1FC2848900CE9FF3 /* PYQ-pjds@3x.png */; }; + 11E2B91E1FC2848900CE9FF3 /* PYQ-pl@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11E2B90C1FC2848900CE9FF3 /* PYQ-pl@2x.png */; }; + 11E2B91F1FC2848900CE9FF3 /* PYQ-pl@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11E2B90D1FC2848900CE9FF3 /* PYQ-pl@3x.png */; }; + 11E2B9201FC2848900CE9FF3 /* PYQ-xj@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11E2B90E1FC2848900CE9FF3 /* PYQ-xj@2x.png */; }; + 11E2B9211FC2848900CE9FF3 /* PYQ-xj@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11E2B90F1FC2848900CE9FF3 /* PYQ-xj@3x.png */; }; + 11E2B9221FC2848900CE9FF3 /* SDS-dd@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11E2B9101FC2848900CE9FF3 /* SDS-dd@2x.png */; }; + 11E2B9231FC2848900CE9FF3 /* SDS-dd@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11E2B9111FC2848900CE9FF3 /* SDS-dd@3x.png */; }; + 11E2B9241FC2848900CE9FF3 /* video_play@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11E2B9121FC2848900CE9FF3 /* video_play@2x.png */; }; + 11E2B9251FC2848900CE9FF3 /* video_play@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11E2B9131FC2848900CE9FF3 /* video_play@3x.png */; }; + 11E2B92E1FC2A47F00CE9FF3 /* EventDetailView.m in Sources */ = {isa = PBXBuildFile; fileRef = 11E2B92D1FC2A47F00CE9FF3 /* EventDetailView.m */; }; + 11E2B9311FC2A72A00CE9FF3 /* UIPlaceHolderTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 11E2B9301FC2A72A00CE9FF3 /* UIPlaceHolderTextView.m */; }; + 11E2B9341FC2A76000CE9FF3 /* PicImageVIew.m in Sources */ = {isa = PBXBuildFile; fileRef = 11E2B9321FC2A76000CE9FF3 /* PicImageVIew.m */; }; + 11E2B9371FC2A92300CE9FF3 /* ZCSelectPhotosViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 11E2B9361FC2A92300CE9FF3 /* ZCSelectPhotosViewController.m */; }; + 11E2B9541FC2A94B00CE9FF3 /* NSBundle+TZImagePicker.m in Sources */ = {isa = PBXBuildFile; fileRef = 11E2B93A1FC2A94A00CE9FF3 /* NSBundle+TZImagePicker.m */; }; + 11E2B9551FC2A94B00CE9FF3 /* TZAssetCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 11E2B93C1FC2A94A00CE9FF3 /* TZAssetCell.m */; }; + 11E2B9561FC2A94B00CE9FF3 /* TZAssetModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 11E2B93E1FC2A94A00CE9FF3 /* TZAssetModel.m */; }; + 11E2B9571FC2A94B00CE9FF3 /* TZGifPhotoPreviewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 11E2B9401FC2A94A00CE9FF3 /* TZGifPhotoPreviewController.m */; }; + 11E2B9581FC2A94B00CE9FF3 /* TZImageCropManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 11E2B9421FC2A94A00CE9FF3 /* TZImageCropManager.m */; }; + 11E2B9591FC2A94B00CE9FF3 /* TZImageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 11E2B9441FC2A94A00CE9FF3 /* TZImageManager.m */; }; + 11E2B95A1FC2A94B00CE9FF3 /* TZImagePickerController.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 11E2B9451FC2A94A00CE9FF3 /* TZImagePickerController.bundle */; }; + 11E2B95B1FC2A94B00CE9FF3 /* TZImagePickerController.m in Sources */ = {isa = PBXBuildFile; fileRef = 11E2B9471FC2A94A00CE9FF3 /* TZImagePickerController.m */; }; + 11E2B95C1FC2A94B00CE9FF3 /* TZPhotoPickerController.m in Sources */ = {isa = PBXBuildFile; fileRef = 11E2B9491FC2A94A00CE9FF3 /* TZPhotoPickerController.m */; }; + 11E2B95D1FC2A94B00CE9FF3 /* TZPhotoPreviewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 11E2B94B1FC2A94B00CE9FF3 /* TZPhotoPreviewCell.m */; }; + 11E2B95E1FC2A94B00CE9FF3 /* TZPhotoPreviewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 11E2B94D1FC2A94B00CE9FF3 /* TZPhotoPreviewController.m */; }; + 11E2B95F1FC2A94B00CE9FF3 /* TZProgressView.m in Sources */ = {isa = PBXBuildFile; fileRef = 11E2B94F1FC2A94B00CE9FF3 /* TZProgressView.m */; }; + 11E2B9601FC2A94B00CE9FF3 /* TZVideoPlayerController.m in Sources */ = {isa = PBXBuildFile; fileRef = 11E2B9511FC2A94B00CE9FF3 /* TZVideoPlayerController.m */; }; + 11E2B9611FC2A94B00CE9FF3 /* UIView+Layout.m in Sources */ = {isa = PBXBuildFile; fileRef = 11E2B9531FC2A94B00CE9FF3 /* UIView+Layout.m */; }; + 11E2B9681FC2A9B300CE9FF3 /* PlayViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 11E2B9651FC2A9B200CE9FF3 /* PlayViewController.m */; }; + 11E2B96D1FC2AA4500CE9FF3 /* LookVideoViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 11E2B96C1FC2AA4500CE9FF3 /* LookVideoViewController.m */; }; + 11E2B9801FC2AB5300CE9FF3 /* MJPhoto.m in Sources */ = {isa = PBXBuildFile; fileRef = 11E2B9701FC2AB5200CE9FF3 /* MJPhoto.m */; }; + 11E2B9811FC2AB5300CE9FF3 /* MJPhotoBrowser.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 11E2B9711FC2AB5200CE9FF3 /* MJPhotoBrowser.bundle */; }; + 11E2B9821FC2AB5300CE9FF3 /* MJPhotoBrowser.m in Sources */ = {isa = PBXBuildFile; fileRef = 11E2B9731FC2AB5200CE9FF3 /* MJPhotoBrowser.m */; }; + 11E2B9831FC2AB5300CE9FF3 /* MJPhotoLoadingView.m in Sources */ = {isa = PBXBuildFile; fileRef = 11E2B9751FC2AB5200CE9FF3 /* MJPhotoLoadingView.m */; }; + 11E2B9841FC2AB5300CE9FF3 /* MJPhotoProgressView.m in Sources */ = {isa = PBXBuildFile; fileRef = 11E2B9771FC2AB5200CE9FF3 /* MJPhotoProgressView.m */; }; + 11E2B9851FC2AB5300CE9FF3 /* MJPhotoToolbar.m in Sources */ = {isa = PBXBuildFile; fileRef = 11E2B9791FC2AB5200CE9FF3 /* MJPhotoToolbar.m */; }; + 11E2B9861FC2AB5300CE9FF3 /* MJPhotoView.m in Sources */ = {isa = PBXBuildFile; fileRef = 11E2B97B1FC2AB5200CE9FF3 /* MJPhotoView.m */; }; + 11E2B9871FC2AB5300CE9FF3 /* SDWebImageManager+MJ.m in Sources */ = {isa = PBXBuildFile; fileRef = 11E2B97D1FC2AB5200CE9FF3 /* SDWebImageManager+MJ.m */; }; + 11E2B9881FC2AB5300CE9FF3 /* UIImageView+MJWebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 11E2B97F1FC2AB5200CE9FF3 /* UIImageView+MJWebCache.m */; }; + 11E2B98B1FC2AB7F00CE9FF3 /* ShowBigIVViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 11E2B9891FC2AB7F00CE9FF3 /* ShowBigIVViewController.m */; }; + 11E2B98E1FC2AB9200CE9FF3 /* ShowBigViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 11E2B98D1FC2AB9200CE9FF3 /* ShowBigViewCell.m */; }; + 11E2B9941FC2AE8300CE9FF3 /* MBProgressHUD+Add.m in Sources */ = {isa = PBXBuildFile; fileRef = 11E2B9911FC2AE8300CE9FF3 /* MBProgressHUD+Add.m */; }; + 11E2B9951FC2AE8300CE9FF3 /* MBProgressHUD.m in Sources */ = {isa = PBXBuildFile; fileRef = 11E2B9931FC2AE8300CE9FF3 /* MBProgressHUD.m */; }; + 11E2B9981FC2B02600CE9FF3 /* ItemImageBtn.m in Sources */ = {isa = PBXBuildFile; fileRef = 11E2B9971FC2B02600CE9FF3 /* ItemImageBtn.m */; }; + 11E2B99B1FC2B04200CE9FF3 /* SexView.m in Sources */ = {isa = PBXBuildFile; fileRef = 11E2B9991FC2B04200CE9FF3 /* SexView.m */; }; + 11E2B99E1FC2B62200CE9FF3 /* UploadMethod.m in Sources */ = {isa = PBXBuildFile; fileRef = 11E2B99C1FC2B62100CE9FF3 /* UploadMethod.m */; }; + 11E2B9A11FC2B65000CE9FF3 /* AliyunOSSiOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 11E2B9A01FC2B65000CE9FF3 /* AliyunOSSiOS.framework */; }; + 11E2B9A41FC2B83400CE9FF3 /* NearbyPlaceViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 11E2B9A31FC2B83400CE9FF3 /* NearbyPlaceViewController.m */; }; + 11E2B9A71FC2BD4D00CE9FF3 /* girl@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11E2B9A51FC2BD4D00CE9FF3 /* girl@2x.png */; }; + 11E2B9A81FC2BD4D00CE9FF3 /* girl@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11E2B9A61FC2BD4D00CE9FF3 /* girl@3x.png */; }; + 11E2B9AB1FC2BD9000CE9FF3 /* boy@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11E2B9A91FC2BD9000CE9FF3 /* boy@2x.png */; }; + 11E2B9AC1FC2BD9000CE9FF3 /* boy@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11E2B9AA1FC2BD9000CE9FF3 /* boy@3x.png */; }; + 11E2B9AE1FC2BDCD00CE9FF3 /* Arrow-pointing@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11E2B9AD1FC2BDCD00CE9FF3 /* Arrow-pointing@2x.png */; }; + 11E2B9B11FC2BE2100CE9FF3 /* add_image@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11E2B9AF1FC2BE2000CE9FF3 /* add_image@3x.png */; }; + 11E2B9B21FC2BE2100CE9FF3 /* add_image@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11E2B9B01FC2BE2000CE9FF3 /* add_image@2x.png */; }; + 11E2B9B51FC2BE7100CE9FF3 /* set_video@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11E2B9B31FC2BE7100CE9FF3 /* set_video@3x.png */; }; + 11E2B9B61FC2BE7100CE9FF3 /* set_video@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11E2B9B41FC2BE7100CE9FF3 /* set_video@2x.png */; }; + 11E2B9B91FC2C71500CE9FF3 /* VisitorViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 11E2B9B71FC2C71500CE9FF3 /* VisitorViewController.m */; }; + 11E2B9BC1FC2C74300CE9FF3 /* SeeOrLikeCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 11E2B9BA1FC2C74300CE9FF3 /* SeeOrLikeCell.m */; }; + 11E2B9BF1FC2CB3500CE9FF3 /* ActivityListCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 11E2B9BD1FC2CB3500CE9FF3 /* ActivityListCell.m */; }; + 11E2B9C21FC2CB5300CE9FF3 /* ActivityListModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 11E2B9C01FC2CB5300CE9FF3 /* ActivityListModel.m */; }; + 11E2B9C51FC2CB6A00CE9FF3 /* MoreEventCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 11E2B9C31FC2CB6A00CE9FF3 /* MoreEventCell.m */; }; + 11E2B9C91FC2CE6700CE9FF3 /* setting_icon@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11E2B9C71FC2CE6700CE9FF3 /* setting_icon@3x.png */; }; + 11E2B9CA1FC2CE6700CE9FF3 /* setting_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 11E2B9C81FC2CE6700CE9FF3 /* setting_icon@2x.png */; }; + 11E2B9D31FC2E68200CE9FF3 /* SettingView.m in Sources */ = {isa = PBXBuildFile; fileRef = 11E2B9D21FC2E68200CE9FF3 /* SettingView.m */; }; + 4601FD0B1FE90F080084296E /* QYLinkLable.m in Sources */ = {isa = PBXBuildFile; fileRef = 4601FD0A1FE90F080084296E /* QYLinkLable.m */; }; + 4601FD0E1FEB5C1E0084296E /* CameraManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 4601FD0D1FEB5C1E0084296E /* CameraManager.m */; }; + 46091A771FFF0BBF00F626D5 /* CHTCollectionViewWaterfallLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 46091A6E1FFF0BBE00F626D5 /* CHTCollectionViewWaterfallLayout.m */; }; + 46091A781FFF0BBF00F626D5 /* JQwaveView.m in Sources */ = {isa = PBXBuildFile; fileRef = 46091A721FFF0BBF00F626D5 /* JQwaveView.m */; }; + 46091A7A1FFF0BBF00F626D5 /* YYWeakProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 46091A761FFF0BBF00F626D5 /* YYWeakProxy.m */; }; + 46091A7D1FFF0C5100F626D5 /* UIImageView+LBBlurredImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 46091A7C1FFF0C5100F626D5 /* UIImageView+LBBlurredImage.m */; }; + 46091A801FFF0D1900F626D5 /* UIImage+ImageEffects.m in Sources */ = {isa = PBXBuildFile; fileRef = 46091A7E1FFF0D1800F626D5 /* UIImage+ImageEffects.m */; }; + 46091A861FFF0D2800F626D5 /* PhotoCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 46091A811FFF0D2600F626D5 /* PhotoCollectionViewCell.m */; }; + 46091A871FFF0D2800F626D5 /* PhotoFooterView.m in Sources */ = {isa = PBXBuildFile; fileRef = 46091A831FFF0D2600F626D5 /* PhotoFooterView.m */; }; + 46091A881FFF0D2800F626D5 /* PhotoCollectionViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 46091A851FFF0D2700F626D5 /* PhotoCollectionViewCell.xib */; }; + 46091A941FFF460700F626D5 /* n_allday@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 46091A8A1FFF460600F626D5 /* n_allday@2x.png */; }; + 46091A951FFF460700F626D5 /* n_allday@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 46091A8B1FFF460600F626D5 /* n_allday@3x.png */; }; + 46091A961FFF460700F626D5 /* n_inter@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 46091A8C1FFF460600F626D5 /* n_inter@2x.png */; }; + 46091A971FFF460700F626D5 /* n_inter@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 46091A8D1FFF460600F626D5 /* n_inter@3x.png */; }; + 46091A981FFF460700F626D5 /* n_label@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 46091A8E1FFF460600F626D5 /* n_label@2x.png */; }; + 46091A991FFF460700F626D5 /* n_label@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 46091A8F1FFF460600F626D5 /* n_label@3x.png */; }; + 46091A9A1FFF460700F626D5 /* n_today@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 46091A901FFF460600F626D5 /* n_today@2x.png */; }; + 46091A9B1FFF460700F626D5 /* n_today@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 46091A911FFF460600F626D5 /* n_today@3x.png */; }; + 46091A9C1FFF460700F626D5 /* n_video@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 46091A921FFF460600F626D5 /* n_video@2x.png */; }; + 46091A9D1FFF460700F626D5 /* n_video@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 46091A931FFF460600F626D5 /* n_video@3x.png */; }; + 46091AA01FFF4C7100F626D5 /* ImageLabelView.m in Sources */ = {isa = PBXBuildFile; fileRef = 46091A9F1FFF4C7100F626D5 /* ImageLabelView.m */; }; + 46091AA51FFF5F3E00F626D5 /* n_down@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 46091AA11FFF5F3D00F626D5 /* n_down@2x.png */; }; + 46091AA61FFF5F3E00F626D5 /* n_down@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 46091AA21FFF5F3E00F626D5 /* n_down@3x.png */; }; + 46091AA71FFF5F3E00F626D5 /* n_up@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 46091AA31FFF5F3E00F626D5 /* n_up@3x.png */; }; + 46091AA81FFF5F3E00F626D5 /* n_up@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 46091AA41FFF5F3E00F626D5 /* n_up@2x.png */; }; + 462024D41FCE4B8000079C21 /* UploadAvatarView.m in Sources */ = {isa = PBXBuildFile; fileRef = 462024D21FCE4B7F00079C21 /* UploadAvatarView.m */; }; + 462024E21FCE56E700079C21 /* Bitmap2@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 462024D61FCE56E600079C21 /* Bitmap2@2x.png */; }; + 462024E31FCE56E700079C21 /* Bitmap2@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 462024D71FCE56E600079C21 /* Bitmap2@3x.png */; }; + 462024E41FCE56E700079C21 /* Bitmap1@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 462024D81FCE56E600079C21 /* Bitmap1@2x.png */; }; + 462024E51FCE56E700079C21 /* Bitmap1@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 462024D91FCE56E600079C21 /* Bitmap1@3x.png */; }; + 462024E61FCE56E700079C21 /* Bitmap3@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 462024DA1FCE56E600079C21 /* Bitmap3@2x.png */; }; + 462024E71FCE56E700079C21 /* Bitmap3@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 462024DB1FCE56E600079C21 /* Bitmap3@3x.png */; }; + 462024E81FCE56E700079C21 /* Bitmap4@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 462024DC1FCE56E600079C21 /* Bitmap4@2x.png */; }; + 462024E91FCE56E700079C21 /* Bitmap4@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 462024DD1FCE56E600079C21 /* Bitmap4@3x.png */; }; + 462024EA1FCE56E700079C21 /* Bitmap5@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 462024DE1FCE56E600079C21 /* Bitmap5@2x.png */; }; + 462024EB1FCE56E700079C21 /* Bitmap5@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 462024DF1FCE56E600079C21 /* Bitmap5@3x.png */; }; + 462024EC1FCE56E700079C21 /* Bitmap6@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 462024E01FCE56E600079C21 /* Bitmap6@2x.png */; }; + 462024ED1FCE56E700079C21 /* Bitmap6@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 462024E11FCE56E600079C21 /* Bitmap6@3x.png */; }; + 462024F01FCE64D000079C21 /* QYShareView.m in Sources */ = {isa = PBXBuildFile; fileRef = 462024EE1FCE64CF00079C21 /* QYShareView.m */; }; + 462024F31FCEC17400079C21 /* idnorm@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 462024F11FCEC17300079C21 /* idnorm@2x.png */; }; + 462024F41FCEC17400079C21 /* idnorm@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 462024F21FCEC17400079C21 /* idnorm@3x.png */; }; + 46212CFC1FC25D6500E89A57 /* BaiduMapAPI_Base.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 46212CF41FC25D6500E89A57 /* BaiduMapAPI_Base.framework */; }; + 46212CFD1FC25D6500E89A57 /* BaiduMapAPI_Location.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 46212CF51FC25D6500E89A57 /* BaiduMapAPI_Location.framework */; }; + 46212CFE1FC25D6500E89A57 /* BaiduMapAPI_Map.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 46212CF61FC25D6500E89A57 /* BaiduMapAPI_Map.framework */; }; + 46212CFF1FC25D6500E89A57 /* BaiduMapAPI_Search.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 46212CF71FC25D6500E89A57 /* BaiduMapAPI_Search.framework */; }; + 46212D001FC25D6500E89A57 /* mapapi.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 46212CF81FC25D6500E89A57 /* mapapi.bundle */; }; + 46212D011FC25D6500E89A57 /* libcrypto.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 46212CFA1FC25D6500E89A57 /* libcrypto.a */; }; + 46212D021FC25D6500E89A57 /* libssl.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 46212CFB1FC25D6500E89A57 /* libssl.a */; }; + 46212D051FC25D9900E89A57 /* MapManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 46212D041FC25D9900E89A57 /* MapManager.m */; }; + 46212D071FC260A100E89A57 /* mapapi.bundle in Frameworks */ = {isa = PBXBuildFile; fileRef = 46212CF81FC25D6500E89A57 /* mapapi.bundle */; }; + 46212D0A1FC2613A00E89A57 /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 46212D081FC260BC00E89A57 /* CoreTelephony.framework */; }; + 46212D0B1FC2614700E89A57 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 46212D091FC260D100E89A57 /* Security.framework */; }; + 46212D0D1FC2616B00E89A57 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 46212D0C1FC2616300E89A57 /* CoreGraphics.framework */; }; + 46212D0F1FC2618500E89A57 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 46212D0E1FC2617900E89A57 /* OpenGLES.framework */; }; + 46212D111FC2619800E89A57 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 46212D101FC2619100E89A57 /* QuartzCore.framework */; }; + 46212D131FC261AF00E89A57 /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 46212D121FC261A500E89A57 /* CoreLocation.framework */; }; + 46212D151FC261C200E89A57 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 46212D141FC261BC00E89A57 /* SystemConfiguration.framework */; }; + 46212D171FC261DC00E89A57 /* libstdc++.6.0.9.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 46212D161FC261DC00E89A57 /* libstdc++.6.0.9.tbd */; }; + 46212D191FC261E900E89A57 /* libsqlite3.0.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 46212D181FC261E900E89A57 /* libsqlite3.0.tbd */; }; + 46212D1C1FC2625000E89A57 /* MapViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 46212D1B1FC2625000E89A57 /* MapViewController.m */; }; + 46212D1F1FC2630600E89A57 /* AppDelegate+AppTripartite.mm in Sources */ = {isa = PBXBuildFile; fileRef = 46212D1E1FC2630600E89A57 /* AppDelegate+AppTripartite.mm */; }; + 462BC0D9200DD645009A1C6F /* gudge_arrow.png in Resources */ = {isa = PBXBuildFile; fileRef = 462BC0D8200DD645009A1C6F /* gudge_arrow.png */; }; + 462BC0DC200EEFB2009A1C6F /* TopicAndTextCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 462BC0DB200EEFB2009A1C6F /* TopicAndTextCell.m */; }; + 462BC0E2200EF5C0009A1C6F /* TopicTextModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 462BC0E1200EF5C0009A1C6F /* TopicTextModel.m */; }; + 462BC0E5200EFB0A009A1C6F /* ZanAndReportCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 462BC0E4200EFB0A009A1C6F /* ZanAndReportCell.m */; }; + 462BC0EF200F3BEE009A1C6F /* XHWebImageAutoSizeConst.m in Sources */ = {isa = PBXBuildFile; fileRef = 462BC0E8200F3BED009A1C6F /* XHWebImageAutoSizeConst.m */; }; + 462BC0F0200F3BEE009A1C6F /* XHWebImageAutoSize.m in Sources */ = {isa = PBXBuildFile; fileRef = 462BC0E9200F3BED009A1C6F /* XHWebImageAutoSize.m */; }; + 462BC0F1200F3BEE009A1C6F /* XHWebImageAutoSizeCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 462BC0EC200F3BED009A1C6F /* XHWebImageAutoSizeCache.m */; }; + 462BC0F2200F3BEE009A1C6F /* UITableView+XHWebImageAutoSize.m in Sources */ = {isa = PBXBuildFile; fileRef = 462BC0EE200F3BEE009A1C6F /* UITableView+XHWebImageAutoSize.m */; }; + 462BC0F6200F4657009A1C6F /* YuanQuanPicCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 462BC0F4200F4657009A1C6F /* YuanQuanPicCell.m */; }; + 462BC0F7200F4657009A1C6F /* YuanQuanPicCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 462BC0F5200F4657009A1C6F /* YuanQuanPicCell.xib */; }; + 462BC0FA200F4CE0009A1C6F /* QYVideoCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 462BC0F9200F4CE0009A1C6F /* QYVideoCell.m */; }; + 4635F2121FD1600000804833 /* BaiduMapAPI_Utils.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4635F2111FD15FFF00804833 /* BaiduMapAPI_Utils.framework */; }; + 4635F21C1FD1640800804833 /* BMKClusterAlgorithm.m in Sources */ = {isa = PBXBuildFile; fileRef = 4635F2151FD1640800804833 /* BMKClusterAlgorithm.m */; }; + 4635F21D1FD1640800804833 /* BMKClusterItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 4635F2171FD1640800804833 /* BMKClusterItem.m */; }; + 4635F21E1FD1640800804833 /* BMKClusterManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 4635F2191FD1640800804833 /* BMKClusterManager.m */; }; + 4635F21F1FD1640800804833 /* BMKClusterQuadtree.m in Sources */ = {isa = PBXBuildFile; fileRef = 4635F21B1FD1640800804833 /* BMKClusterQuadtree.m */; }; + 4635F2221FD4DFEE00804833 /* QYCluster.m in Sources */ = {isa = PBXBuildFile; fileRef = 4635F2211FD4DFEE00804833 /* QYCluster.m */; }; + 4635F2251FD4E9FA00804833 /* qipao@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4635F2231FD4E9F900804833 /* qipao@3x.png */; }; + 4635F2261FD4E9FA00804833 /* qipao@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4635F2241FD4E9FA00804833 /* qipao@2x.png */; }; + 4637359A1FC7EC650062416E /* SyStemNewsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 463735971FC7EC650062416E /* SyStemNewsViewController.m */; }; + 4637359D1FC7ED5B0062416E /* SetpushViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4637359B1FC7ED5A0062416E /* SetpushViewController.m */; }; + 463735A41FC7EDE10062416E /* SetPushCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 463735A21FC7EDE00062416E /* SetPushCell.m */; }; + 463735AD1FC7F06D0062416E /* xx-huodong@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 463735A61FC7F06C0062416E /* xx-huodong@2x.png */; }; + 463735B01FC7F06D0062416E /* xx-tongzhi@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 463735A91FC7F06D0062416E /* xx-tongzhi@3x.png */; }; + 463735B11FC7F06D0062416E /* xx-huodong@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 463735AA1FC7F06D0062416E /* xx-huodong@3x.png */; }; + 463735B21FC7F06D0062416E /* xx-tongzhi@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 463735AB1FC7F06D0062416E /* xx-tongzhi@2x.png */; }; + 463735B51FC7F59A0062416E /* SysCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 463735B41FC7F59A0062416E /* SysCell.m */; }; + 463735B81FC7F8140062416E /* InFnoModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 463735B71FC7F8140062416E /* InFnoModel.m */; }; + 463735C51FC802370062416E /* swich_open@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 463735C11FC802360062416E /* swich_open@2x.png */; }; + 463735C61FC802370062416E /* swich_close@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 463735C21FC802360062416E /* swich_close@3x.png */; }; + 463735C71FC802370062416E /* swich_close@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 463735C31FC802370062416E /* swich_close@2x.png */; }; + 463735C81FC802370062416E /* swich_open@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 463735C41FC802370062416E /* swich_open@3x.png */; }; + 463735CB1FC804150062416E /* systemMsg@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 463735C91FC804140062416E /* systemMsg@2x.png */; }; + 463735CC1FC804150062416E /* systemMsg@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 463735CA1FC804140062416E /* systemMsg@3x.png */; }; + 463735CF1FC8192E0062416E /* AdModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 463735CE1FC8192E0062416E /* AdModel.m */; }; + 463735D21FCBA8A10062416E /* name@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 463735D01FCBA8A00062416E /* name@2x.png */; }; + 463735D31FCBA8A10062416E /* my_card@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 463735D11FCBA8A10062416E /* my_card@3x.png */; }; + 463735D61FCBAA8F0062416E /* id@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 463735D41FCBAA8F0062416E /* id@2x.png */; }; + 463735D71FCBAA8F0062416E /* id@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 463735D51FCBAA8F0062416E /* id@3x.png */; }; + 463735E11FCBB8A30062416E /* CordialViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 463735DF1FCBB8A30062416E /* CordialViewController.m */; }; + 463735E41FCBB9660062416E /* CordialNewTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 463735E21FCBB9650062416E /* CordialNewTableViewCell.m */; }; + 463735E71FCBBA360062416E /* CordiaFooterView.m in Sources */ = {isa = PBXBuildFile; fileRef = 463735E51FCBBA350062416E /* CordiaFooterView.m */; }; + 463735EE1FCBBD290062416E /* MySpoorViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 463735ED1FCBBD290062416E /* MySpoorViewController.m */; }; + 463CE5C21FE0BA840068A31C /* phone_editor@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 463CE5C11FE0BA840068A31C /* phone_editor@2x.png */; }; + 4651CF101FFB25D700A937F6 /* ProfileViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4651CF0F1FFB25D700A937F6 /* ProfileViewController.m */; }; + 4651CF191FFB2A9700A937F6 /* ProfileHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4651CF171FFB2A9600A937F6 /* ProfileHeaderView.m */; }; + 4651CF1D1FFB5E6800A937F6 /* SpouseView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4651CF1C1FFB5E6800A937F6 /* SpouseView.m */; }; + 4651CF231FFC7BE800A937F6 /* UIButton+Ext.m in Sources */ = {isa = PBXBuildFile; fileRef = 4651CF221FFC7BE800A937F6 /* UIButton+Ext.m */; }; + 4651CF261FFC828200A937F6 /* EditProfileViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4651CF251FFC828200A937F6 /* EditProfileViewController.m */; }; + 4651CF291FFCBAC500A937F6 /* PersonView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4651CF281FFCBAC500A937F6 /* PersonView.m */; }; + 4651CF2C1FFCC59A00A937F6 /* PersonPhotoView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4651CF2B1FFCC59A00A937F6 /* PersonPhotoView.m */; }; + 4651CF2F1FFCCB2900A937F6 /* SectionView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4651CF2E1FFCCB2900A937F6 /* SectionView.m */; }; + 4651CF321FFCE06D00A937F6 /* DeclarationView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4651CF311FFCE06D00A937F6 /* DeclarationView.m */; }; + 46579D661FDA925200FF8586 /* QuCore-ThirdParty.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 46579D631FDA925100FF8586 /* QuCore-ThirdParty.framework */; }; + 46579D671FDA925200FF8586 /* AliyunVideoSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 46579D641FDA925200FF8586 /* AliyunVideoSDK.framework */; }; + 46579D681FDA925200FF8586 /* AliyunVideoCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 46579D651FDA925200FF8586 /* AliyunVideoCore.framework */; }; + 46579D691FDA967000FF8586 /* QuCore-ThirdParty.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 46579D631FDA925100FF8586 /* QuCore-ThirdParty.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 46579D6A1FDA96C700FF8586 /* AliyunVideoSDK.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 46579D641FDA925200FF8586 /* AliyunVideoSDK.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 46579D6C1FDA9BBA00FF8586 /* QPSDK.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 46579D6B1FDA9BBA00FF8586 /* QPSDK.bundle */; }; + 4657B90520030DB900609928 /* OtherPhotoView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4657B90420030DB900609928 /* OtherPhotoView.m */; }; + 4657B908200324A000609928 /* OtherGiftView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4657B907200324A000609928 /* OtherGiftView.m */; }; + 4657B90B20045A0500609928 /* OtherFooterView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4657B90A20045A0500609928 /* OtherFooterView.m */; }; + 4657B912200460F000609928 /* other_say@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4657B90C200460EE00609928 /* other_say@2x.png */; }; + 4657B914200460F000609928 /* other_say@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4657B90E200460EF00609928 /* other_say@3x.png */; }; + 4657B916200460F000609928 /* other_gift@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4657B910200460EF00609928 /* other_gift@3x.png */; }; + 4657B917200460F000609928 /* other_gift@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4657B911200460F000609928 /* other_gift@2x.png */; }; + 4657B91C20046C8A00609928 /* other_y_att@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4657B91820046C8900609928 /* other_y_att@3x.png */; }; + 4657B91D20046C8A00609928 /* other_n_att@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4657B91920046C8900609928 /* other_n_att@2x.png */; }; + 4657B91E20046C8A00609928 /* other_y_att@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4657B91A20046C8A00609928 /* other_y_att@2x.png */; }; + 4657B91F20046C8A00609928 /* other_n_att@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 4657B91B20046C8A00609928 /* other_n_att@3x.png */; }; + 466105171FC2773C008E89E8 /* QYRoundAnnotationView.m in Sources */ = {isa = PBXBuildFile; fileRef = 466105161FC2773C008E89E8 /* QYRoundAnnotationView.m */; }; + 4661051A1FC2788E008E89E8 /* QYActionPaopaoView.m in Sources */ = {isa = PBXBuildFile; fileRef = 466105191FC2788E008E89E8 /* QYActionPaopaoView.m */; }; + 46617E2620295B2400BBC610 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 46617E2520295B2400BBC610 /* StoreKit.framework */; }; + 466333F41FC3B442000BE9EE /* ALLWebViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 466333F31FC3B442000BE9EE /* ALLWebViewController.m */; }; + 466333F81FC3C6E6000BE9EE /* CardViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 466333F71FC3C6E6000BE9EE /* CardViewController.m */; }; + 466333FB1FC3D3B8000BE9EE /* UIView+RadiusView.m in Sources */ = {isa = PBXBuildFile; fileRef = 466333FA1FC3D3B8000BE9EE /* UIView+RadiusView.m */; }; + 466333FE1FC3DAB5000BE9EE /* CommonCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 466333FD1FC3DAB5000BE9EE /* CommonCell.m */; }; + 466334091FC3FB02000BE9EE /* MyCardModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 466334081FC3FB02000BE9EE /* MyCardModel.m */; }; + 4663340F1FC40DB5000BE9EE /* QYStarView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4663340E1FC40DB5000BE9EE /* QYStarView.m */; }; + 466334181FC42AAE000BE9EE /* ModifyPwdViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 466334151FC42AAE000BE9EE /* ModifyPwdViewController.m */; }; + 466334191FC42AAE000BE9EE /* SettingViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 466334171FC42AAE000BE9EE /* SettingViewController.m */; }; + 466334201FC514C4000BE9EE /* TextFieldViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4663341F1FC514C4000BE9EE /* TextFieldViewController.m */; }; + 466334341FC55D43000BE9EE /* TAAbstractDotView.m in Sources */ = {isa = PBXBuildFile; fileRef = 466334271FC55D43000BE9EE /* TAAbstractDotView.m */; }; + 466334351FC55D43000BE9EE /* TAAnimatedDotView.m in Sources */ = {isa = PBXBuildFile; fileRef = 466334291FC55D43000BE9EE /* TAAnimatedDotView.m */; }; + 466334361FC55D43000BE9EE /* TADotView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4663342B1FC55D43000BE9EE /* TADotView.m */; }; + 466334371FC55D43000BE9EE /* TAPageControl.m in Sources */ = {isa = PBXBuildFile; fileRef = 4663342D1FC55D43000BE9EE /* TAPageControl.m */; }; + 466334381FC55D43000BE9EE /* SDCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 4663342F1FC55D43000BE9EE /* SDCollectionViewCell.m */; }; + 466334391FC55D43000BE9EE /* SDCycleScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = 466334311FC55D43000BE9EE /* SDCycleScrollView.m */; }; + 466334521FC5926A000BE9EE /* area.json in Resources */ = {isa = PBXBuildFile; fileRef = 4663344D1FC5926A000BE9EE /* area.json */; }; + 466334531FC5926A000BE9EE /* city.json in Resources */ = {isa = PBXBuildFile; fileRef = 4663344E1FC5926A000BE9EE /* city.json */; }; + 466334541FC5926A000BE9EE /* province.json in Resources */ = {isa = PBXBuildFile; fileRef = 4663344F1FC5926A000BE9EE /* province.json */; }; + 466334551FC5926A000BE9EE /* QYPickerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 466334501FC5926A000BE9EE /* QYPickerView.m */; }; + 466F1BDE1FECB6DC0045EB09 /* PicturesCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 1130F3771FEA0E24009AC59E /* PicturesCell.m */; }; + 46712F9B1FD6306600EECDC2 /* ConversationListController.m in Sources */ = {isa = PBXBuildFile; fileRef = 46712F991FD6306500EECDC2 /* ConversationListController.m */; }; + 46712F9E1FD637CD00EECDC2 /* login_logo@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 46712F9C1FD637CD00EECDC2 /* login_logo@3x.png */; }; + 46712F9F1FD637CD00EECDC2 /* login_logo@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 46712F9D1FD637CD00EECDC2 /* login_logo@2x.png */; }; + 46712FA11FD784C700EECDC2 /* UITabBar+badge.m in Sources */ = {isa = PBXBuildFile; fileRef = 46712FA01FD784C600EECDC2 /* UITabBar+badge.m */; }; + 46712FA41FD7F35D00EECDC2 /* xx_gift@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 46712FA21FD7F35D00EECDC2 /* xx_gift@2x.png */; }; + 46712FA51FD7F35D00EECDC2 /* xx_gift@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 46712FA31FD7F35D00EECDC2 /* xx_gift@3x.png */; }; + 46785D081FCFFA8B009E9B30 /* starBackImage@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 46785D031FCFFA8A009E9B30 /* starBackImage@2x.png */; }; + 46785D091FCFFA8B009E9B30 /* starBackImage@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 46785D041FCFFA8B009E9B30 /* starBackImage@3x.png */; }; + 46785D0A1FCFFA8B009E9B30 /* starImage@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 46785D051FCFFA8B009E9B30 /* starImage@2x.png */; }; + 46785D0B1FCFFA8B009E9B30 /* name@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 46785D061FCFFA8B009E9B30 /* name@3x.png */; }; + 46785D0C1FCFFA8B009E9B30 /* starImage@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 46785D071FCFFA8B009E9B30 /* starImage@3x.png */; }; + 4691BE181FCD31FA0077237C /* ApplyView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4691BE161FCD31F90077237C /* ApplyView.m */; }; + 4691BE1B1FCD42740077237C /* ApplyPersonView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4691BE191FCD42730077237C /* ApplyPersonView.m */; }; + 4693F3141FECE89300E510C6 /* QYInputToolbar.m in Sources */ = {isa = PBXBuildFile; fileRef = 4693F3131FECE89300E510C6 /* QYInputToolbar.m */; }; + 46A4D988201185FE0036D7BD /* home_refre@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 46A4D986201185FD0036D7BD /* home_refre@2x.png */; }; + 46A4D989201185FE0036D7BD /* home_refre@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 46A4D987201185FD0036D7BD /* home_refre@3x.png */; }; + 46B52A541FD5325D00F22888 /* refresh@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 46B52A531FD5325C00F22888 /* refresh@2x.png */; }; + 46B52A561FD533AD00F22888 /* refresh@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 46B52A551FD533AC00F22888 /* refresh@3x.png */; }; + 46B52A581FD5351700F22888 /* add_map@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 46B52A571FD5351700F22888 /* add_map@2x.png */; }; + 46B52A5C1FD535F800F22888 /* det_map@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 46B52A591FD535F700F22888 /* det_map@2x.png */; }; + 46B52A5D1FD535F800F22888 /* add_map@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 46B52A5A1FD535F800F22888 /* add_map@3x.png */; }; + 46B52A5E1FD535F800F22888 /* det_map@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 46B52A5B1FD535F800F22888 /* det_map@3x.png */; }; + 46B52A601FD53BF700F22888 /* refresh_ding@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 46B52A5F1FD53BF700F22888 /* refresh_ding@2x.png */; }; + 46B52A621FD53C7200F22888 /* refresh_ding@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 46B52A611FD53C7100F22888 /* refresh_ding@3x.png */; }; + 46C0CF341FC69C9600F1472C /* my_dingwei@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 46C0CF321FC69C9500F1472C /* my_dingwei@3x.png */; }; + 46C0CF351FC69C9600F1472C /* my_dingwei@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 46C0CF331FC69C9500F1472C /* my_dingwei@2x.png */; }; + 46C0CF381FC6A53400F1472C /* wenhao@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 46C0CF361FC6A53300F1472C /* wenhao@3x.png */; }; + 46C0CF391FC6A53400F1472C /* wenhao@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 46C0CF371FC6A53300F1472C /* wenhao@2x.png */; }; + 46C0CF3D1FC6AC4F00F1472C /* my_card@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 46C0CF3C1FC6AC4F00F1472C /* my_card@2x.png */; }; + 46C0CF471FC6C12200F1472C /* FriendViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 46C0CF461FC6C12200F1472C /* FriendViewController.m */; }; + 46C0CF4A1FC6C22C00F1472C /* TopBtnView.m in Sources */ = {isa = PBXBuildFile; fileRef = 46C0CF491FC6C22C00F1472C /* TopBtnView.m */; }; + 46C0CF521FC6C65900F1472C /* MyPeopleViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 46C0CF501FC6C65900F1472C /* MyPeopleViewController.m */; }; + 46C0CF551FC6C6E100F1472C /* MyPeopleCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 46C0CF531FC6C6E000F1472C /* MyPeopleCell.m */; }; + 46E03DED1FC2A2FB00F55A8E /* AvatarImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 46E03DEB1FC2A2FA00F55A8E /* AvatarImageView.m */; }; + 46E03DF01FC2B2F200F55A8E /* QYPointAnnotation.m in Sources */ = {isa = PBXBuildFile; fileRef = 46E03DEF1FC2B2F200F55A8E /* QYPointAnnotation.m */; }; + 46E400001FDF8316003B26C8 /* EnterpriseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 46E4FFFF1FDF8316003B26C8 /* EnterpriseViewController.m */; }; + 46E4FFFA1FDF6D03003B26C8 /* IdentyViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 46E4FFF91FDF6D03003B26C8 /* IdentyViewController.m */; }; + 46E4FFFD1FDF6D73003B26C8 /* IdentyListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 46E4FFFC1FDF6D73003B26C8 /* IdentyListViewController.m */; }; + 46E9D07D1FC7AFFF00F7A344 /* FriendModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 46E9D07C1FC7AFFF00F7A344 /* FriendModel.m */; }; + 46E9D0871FC7C1F300F7A344 /* UserNotifications.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 46E9D0861FC7C1E600F7A344 /* UserNotifications.framework */; }; + 46EAB9D71FCC09CD00BC9B12 /* CordiaModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 46EAB9D61FCC09CD00BC9B12 /* CordiaModel.m */; }; + 46EB82251FF37A96004D7652 /* QYGuideView.m in Sources */ = {isa = PBXBuildFile; fileRef = 46EB82241FF37A96004D7652 /* QYGuideView.m */; }; + 46EC257B1FC66F1E00EF730D /* my_activity@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 46EC25791FC66F1E00EF730D /* my_activity@2x.png */; }; + 46EC257C1FC66F1E00EF730D /* my_activity@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 46EC257A1FC66F1E00EF730D /* my_activity@3x.png */; }; + 46EC257F1FC66FF500EF730D /* MyActivityViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 46EC257E1FC66FF500EF730D /* MyActivityViewController.m */; }; + 46EC25821FC6730F00EF730D /* MyActivityCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 46EC25811FC6730F00EF730D /* MyActivityCell.m */; }; + 46F2881C2029577C004835CF /* BuyBeanController.m in Sources */ = {isa = PBXBuildFile; fileRef = 46F2881B2029577C004835CF /* BuyBeanController.m */; }; + 46FA4D3F1FFDB93D00F3DC4E /* EduView.m in Sources */ = {isa = PBXBuildFile; fileRef = 46FA4D3E1FFDB93D00F3DC4E /* EduView.m */; }; + 46FA4D421FFDBF7400F3DC4E /* WorkView.m in Sources */ = {isa = PBXBuildFile; fileRef = 46FA4D411FFDBF7400F3DC4E /* WorkView.m */; }; + 46FA4D461FFDD20100F3DC4E /* provinceSchool.json in Resources */ = {isa = PBXBuildFile; fileRef = 46FA4D451FFDD20100F3DC4E /* provinceSchool.json */; }; + 46FA4D491FFDD27A00F3DC4E /* ItemViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 46FA4D481FFDD27A00F3DC4E /* ItemViewController.m */; }; + 46FA4D4C1FFDD28F00F3DC4E /* SchoolViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 46FA4D4B1FFDD28F00F3DC4E /* SchoolViewController.m */; }; + 46FA4D4F1FFDF9F200F3DC4E /* ApproveView.m in Sources */ = {isa = PBXBuildFile; fileRef = 46FA4D4E1FFDF9F200F3DC4E /* ApproveView.m */; }; + 46FA4D521FFDFEAF00F3DC4E /* QYTagView.m in Sources */ = {isa = PBXBuildFile; fileRef = 46FA4D511FFDFEAF00F3DC4E /* QYTagView.m */; }; + 46FA4D551FFE14DC00F3DC4E /* DetailView.m in Sources */ = {isa = PBXBuildFile; fileRef = 46FA4D541FFE14DC00F3DC4E /* DetailView.m */; }; + 46FA4D5B1FFE2B4200F3DC4E /* InterestView.m in Sources */ = {isa = PBXBuildFile; fileRef = 46FA4D5A1FFE2B4100F3DC4E /* InterestView.m */; }; + 46FA4D5E1FFE30F700F3DC4E /* VideoView.m in Sources */ = {isa = PBXBuildFile; fileRef = 46FA4D5D1FFE30F700F3DC4E /* VideoView.m */; }; + 46FA4D621FFE3B6B00F3DC4E /* HobbyAndMarkItemView.m in Sources */ = {isa = PBXBuildFile; fileRef = 46FA4D611FFE3B6A00F3DC4E /* HobbyAndMarkItemView.m */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 114D260F1FC7FB89000DC5EB /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 46579D6A1FDA96C700FF8586 /* AliyunVideoSDK.framework in Embed Frameworks */, + 46579D691FDA967000FF8586 /* QuCore-ThirdParty.framework in Embed Frameworks */, + 114D260E1FC7FB89000DC5EB /* HyphenateLite.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 1104DBA0200C46AE0020992E /* MyContentViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MyContentViewController.m; sourceTree = ""; }; + 1104DBA1200C46AE0020992E /* MyContentViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MyContentViewController.h; sourceTree = ""; }; + 1104DBA4200C59020020992E /* Adagent.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = Adagent.a; sourceTree = ""; }; + 1104DBA6200C59020020992E /* MAgent+HeiniuMAgent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MAgent+HeiniuMAgent.h"; sourceTree = ""; }; + 1104DBA7200C59020020992E /* MAgent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MAgent.h; sourceTree = ""; }; + 1104DBA8200C59020020992E /* NACollectionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NACollectionViewController.h; sourceTree = ""; }; + 1104DBA9200C59020020992E /* NACommentsView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NACommentsView.h; sourceTree = ""; }; + 1104DBAA200C59020020992E /* NAContentView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NAContentView.h; sourceTree = ""; }; + 1104DBAB200C59020020992E /* NAContentViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NAContentViewController.h; sourceTree = ""; }; + 1104DBAC200C59020020992E /* NAContentViewControllerPlus.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NAContentViewControllerPlus.h; sourceTree = ""; }; + 1104DBAD200C59020020992E /* NARecomViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NARecomViewController.h; sourceTree = ""; }; + 1104DBAE200C59020020992E /* NewsAgent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NewsAgent.h; sourceTree = ""; }; + 1104DBAF200C59020020992E /* loading.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = loading.bundle; sourceTree = ""; }; + 1104DBB0200C59020020992E /* NACommentsView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NACommentsView.xib; sourceTree = ""; }; + 1104DBB1200C59020020992E /* NewsAgent.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = NewsAgent.a; sourceTree = ""; }; + 1104DBB2200C59020020992E /* NewsAgent.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = NewsAgent.bundle; sourceTree = ""; }; + 1104DBB4200C59020020992E /* magent.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = magent.plist; sourceTree = ""; }; + 1117522D1FFF45CA001EF870 /* TopicListViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TopicListViewController.h; sourceTree = ""; }; + 1117522E1FFF45CA001EF870 /* TopicListViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TopicListViewController.m; sourceTree = ""; }; + 111752301FFF7462001EF870 /* yq_collect_hui@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "yq_collect_hui@3x.png"; sourceTree = ""; }; + 111752311FFF7462001EF870 /* yq_msg@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "yq_msg@3x.png"; sourceTree = ""; }; + 111752321FFF7462001EF870 /* yq_share@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "yq_share@2x.png"; sourceTree = ""; }; + 111752331FFF7463001EF870 /* yq_msg@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "yq_msg@2x.png"; sourceTree = ""; }; + 111752341FFF7463001EF870 /* yq_collect_hui@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "yq_collect_hui@2x.png"; sourceTree = ""; }; + 111752351FFF7463001EF870 /* yq_share@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "yq_share@3x.png"; sourceTree = ""; }; + 1117523C1FFF7547001EF870 /* yq_report@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "yq_report@3x.png"; sourceTree = ""; }; + 1117523D1FFF7547001EF870 /* yq_concern_bai@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "yq_concern_bai@3x.png"; sourceTree = ""; }; + 1117523E1FFF7548001EF870 /* yq_report@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "yq_report@2x.png"; sourceTree = ""; }; + 1117523F1FFF7548001EF870 /* yq_concern_bai@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "yq_concern_bai@2x.png"; sourceTree = ""; }; + 111CC5E01FFCA7B300A85682 /* YuanquanCommentCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YuanquanCommentCell.h; sourceTree = ""; }; + 111CC5E11FFCA7B300A85682 /* YuanquanCommentCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YuanquanCommentCell.m; sourceTree = ""; }; + 111CC5E61FFCB4E700A85682 /* YuanquanDetailBottomView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = YuanquanDetailBottomView.h; sourceTree = ""; }; + 111CC5E71FFCB4E700A85682 /* YuanquanDetailBottomView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = YuanquanDetailBottomView.m; sourceTree = ""; }; + 111CC5E91FFCC8AC00A85682 /* CommentListViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CommentListViewController.h; sourceTree = ""; }; + 111CC5EA1FFCC8AC00A85682 /* CommentListViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CommentListViewController.m; sourceTree = ""; }; + 111CC5EC1FFCCC5D00A85682 /* YuanquanCommentHeaderView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = YuanquanCommentHeaderView.h; sourceTree = ""; }; + 111CC5ED1FFCCC5D00A85682 /* YuanquanCommentHeaderView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = YuanquanCommentHeaderView.m; sourceTree = ""; }; + 112599F81FC65D40009D18E4 /* FileTool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FileTool.h; sourceTree = ""; }; + 112599F91FC65D40009D18E4 /* FileTool.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FileTool.m; sourceTree = ""; }; + 112599FB1FC66A98009D18E4 /* FeedbackViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FeedbackViewController.h; sourceTree = ""; }; + 112599FC1FC66A98009D18E4 /* FeedbackViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FeedbackViewController.m; sourceTree = ""; }; + 11259A011FC6787A009D18E4 /* BindingPhoneViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BindingPhoneViewController.h; sourceTree = ""; }; + 11259A021FC6787A009D18E4 /* BindingPhoneViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BindingPhoneViewController.m; sourceTree = ""; }; + 11259A041FC6AB7B009D18E4 /* EventDetailsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EventDetailsViewController.m; sourceTree = ""; }; + 11259A051FC6AB7B009D18E4 /* EventDetailsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EventDetailsViewController.h; sourceTree = ""; }; + 11259A0A1FC6ABE6009D18E4 /* EventInFnoView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EventInFnoView.h; sourceTree = ""; }; + 11259A0B1FC6ABE7009D18E4 /* EventInFnoView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EventInFnoView.m; sourceTree = ""; }; + 11259A161FC6AC76009D18E4 /* EventHeadView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EventHeadView.m; sourceTree = ""; }; + 11259A171FC6AC76009D18E4 /* EventHeadView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EventHeadView.h; sourceTree = ""; }; + 11259A221FC6ACE4009D18E4 /* InformationView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InformationView.h; sourceTree = ""; }; + 11259A231FC6ACE4009D18E4 /* InformationView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = InformationView.m; sourceTree = ""; }; + 11259A251FC6ACFC009D18E4 /* BottomView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BottomView.m; sourceTree = ""; }; + 11259A261FC6ACFD009D18E4 /* BottomView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BottomView.h; sourceTree = ""; }; + 11259A281FC6AD11009D18E4 /* ImageTextButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ImageTextButton.m; sourceTree = ""; }; + 11259A291FC6AD11009D18E4 /* ImageTextButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageTextButton.h; sourceTree = ""; }; + 11259A311FC6AD6C009D18E4 /* MessageModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MessageModel.h; sourceTree = ""; }; + 11259A321FC6AD6C009D18E4 /* MessageModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MessageModel.m; sourceTree = ""; }; + 11259A341FC6AD82009D18E4 /* likeModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = likeModel.h; sourceTree = ""; }; + 11259A351FC6AD82009D18E4 /* likeModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = likeModel.m; sourceTree = ""; }; + 11259A371FC6AD9A009D18E4 /* LikeViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LikeViewController.h; sourceTree = ""; }; + 11259A381FC6AD9B009D18E4 /* LikeViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LikeViewController.m; sourceTree = ""; }; + 11259A3A1FC6ADD6009D18E4 /* JQActionSheet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JQActionSheet.h; sourceTree = ""; }; + 11259A3B1FC6ADD6009D18E4 /* JQActionSheet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JQActionSheet.m; sourceTree = ""; }; + 11259A3D1FC6ADF9009D18E4 /* BottomBtnView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BottomBtnView.h; sourceTree = ""; }; + 11259A3E1FC6ADF9009D18E4 /* BottomBtnView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BottomBtnView.m; sourceTree = ""; }; + 11259A461FC6AE58009D18E4 /* EventItemView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EventItemView.m; sourceTree = ""; }; + 11259A471FC6AE58009D18E4 /* EventItemView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EventItemView.h; sourceTree = ""; }; + 11259A4C1FC6AE8C009D18E4 /* CommentHeadView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CommentHeadView.h; sourceTree = ""; }; + 11259A4D1FC6AE8C009D18E4 /* CommentHeadView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CommentHeadView.m; sourceTree = ""; }; + 11259A4F1FC6B31E009D18E4 /* CommentCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CommentCell.h; sourceTree = ""; }; + 11259A501FC6B31E009D18E4 /* CommentCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CommentCell.m; sourceTree = ""; }; + 11259A521FC6B335009D18E4 /* EventFooterView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EventFooterView.m; sourceTree = ""; }; + 11259A531FC6B335009D18E4 /* EventFooterView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EventFooterView.h; sourceTree = ""; }; + 11259A551FC6B354009D18E4 /* EventFootBtn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EventFootBtn.h; sourceTree = ""; }; + 11259A561FC6B355009D18E4 /* EventFootBtn.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EventFootBtn.m; sourceTree = ""; }; + 11259A641FC6BEDD009D18E4 /* LikeCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LikeCell.h; sourceTree = ""; }; + 11259A651FC6BEDD009D18E4 /* LikeCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LikeCell.m; sourceTree = ""; }; + 11259A711FC6C386009D18E4 /* LoadingView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LoadingView.m; sourceTree = ""; }; + 11259A721FC6C386009D18E4 /* LoadingView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LoadingView.h; sourceTree = ""; }; + 11259A741FC6C3A4009D18E4 /* loading.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = loading.gif; sourceTree = ""; }; + 11259A761FC6C6BA009D18E4 /* CardModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CardModel.h; sourceTree = ""; }; + 11259A771FC6C6BB009D18E4 /* CardModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CardModel.m; sourceTree = ""; }; + 11259A7C1FC6DCE7009D18E4 /* SignInView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SignInView.h; sourceTree = ""; }; + 11259A7D1FC6DCE7009D18E4 /* SignInView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SignInView.m; sourceTree = ""; }; + 11259A7F1FC6DD19009D18E4 /* qdcg@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "qdcg@2x.png"; sourceTree = ""; }; + 11259A801FC6DD19009D18E4 /* qdcg@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "qdcg@3x.png"; sourceTree = ""; }; + 112E3E641FE9032100825D7E /* DiscoverHeaderView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DiscoverHeaderView.h; sourceTree = ""; }; + 112E3E651FE9032100825D7E /* DiscoverHeaderView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DiscoverHeaderView.m; sourceTree = ""; }; + 1130F36D1FEA0740009AC59E /* YuanquanBaseCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = YuanquanBaseCell.h; sourceTree = ""; }; + 1130F36E1FEA0740009AC59E /* YuanquanBaseCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = YuanquanBaseCell.m; sourceTree = ""; }; + 1130F3701FEA0852009AC59E /* YuanquanModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = YuanquanModel.h; sourceTree = ""; }; + 1130F3711FEA0852009AC59E /* YuanquanModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = YuanquanModel.m; sourceTree = ""; }; + 1130F3731FEA0E0A009AC59E /* TextCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TextCell.h; sourceTree = ""; }; + 1130F3741FEA0E0A009AC59E /* TextCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TextCell.m; sourceTree = ""; }; + 1130F3761FEA0E24009AC59E /* PicturesCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PicturesCell.h; sourceTree = ""; }; + 1130F3771FEA0E24009AC59E /* PicturesCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PicturesCell.m; sourceTree = ""; }; + 1130F3791FEA0E32009AC59E /* VideoCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VideoCell.h; sourceTree = ""; }; + 1130F37A1FEA0E32009AC59E /* VideoCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = VideoCell.m; sourceTree = ""; }; + 1130F37C1FEA0E43009AC59E /* TextAndPicturesCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TextAndPicturesCell.h; sourceTree = ""; }; + 1130F37D1FEA0E43009AC59E /* TextAndPicturesCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TextAndPicturesCell.m; sourceTree = ""; }; + 1130F37F1FEA0E52009AC59E /* TextAndVideoCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TextAndVideoCell.h; sourceTree = ""; }; + 1130F3801FEA0E52009AC59E /* TextAndVideoCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TextAndVideoCell.m; sourceTree = ""; }; + 113E4C5C1FCFDB5D00D50F17 /* FindViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FindViewController.h; sourceTree = ""; }; + 113E4C5D1FCFDB5D00D50F17 /* FindViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FindViewController.m; sourceTree = ""; }; + 113E4C5F1FCFDBF600D50F17 /* ConditionView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConditionView.h; sourceTree = ""; }; + 113E4C601FCFDBF600D50F17 /* ConditionView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ConditionView.m; sourceTree = ""; }; + 113E4C621FCFDC1600D50F17 /* SpeedCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpeedCell.h; sourceTree = ""; }; + 113E4C631FCFDC1700D50F17 /* SpeedCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SpeedCell.m; sourceTree = ""; }; + 113E4C651FCFDC2800D50F17 /* SpeedModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpeedModel.h; sourceTree = ""; }; + 113E4C661FCFDC2800D50F17 /* SpeedModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SpeedModel.m; sourceTree = ""; }; + 113E4C6C1FCFE13200D50F17 /* xx@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "xx@2x.png"; sourceTree = ""; }; + 113E4C6D1FCFE13200D50F17 /* xx@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "xx@3x.png"; sourceTree = ""; }; + 113E4C701FCFEFFA00D50F17 /* sweep_icon@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sweep_icon@3x.png"; sourceTree = ""; }; + 113E4C711FCFEFFA00D50F17 /* search_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "search_icon@2x.png"; sourceTree = ""; }; + 113E4C721FCFEFFB00D50F17 /* search_icon@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "search_icon@3x.png"; sourceTree = ""; }; + 113E4C731FCFEFFB00D50F17 /* sweep_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sweep_icon@2x.png"; sourceTree = ""; }; + 1144A9E31FF37218006D6D7D /* PicturesView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PicturesView.h; sourceTree = ""; }; + 1144A9E41FF37218006D6D7D /* PicturesView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PicturesView.m; sourceTree = ""; }; + 114C96861FDFA664004F2A2B /* ZCLabelTextFieldLineView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ZCLabelTextFieldLineView.h; sourceTree = ""; }; + 114C96871FDFA664004F2A2B /* ZCLabelTextFieldLineView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ZCLabelTextFieldLineView.m; sourceTree = ""; }; + 114C96891FDFBB4E004F2A2B /* EnterpriseNameViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = EnterpriseNameViewController.h; sourceTree = ""; }; + 114C968A1FDFBB4E004F2A2B /* EnterpriseNameViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = EnterpriseNameViewController.m; sourceTree = ""; }; + 114C968C1FDFC1DF004F2A2B /* DepartmentNameViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DepartmentNameViewController.h; sourceTree = ""; }; + 114C968D1FDFC1DF004F2A2B /* DepartmentNameViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DepartmentNameViewController.m; sourceTree = ""; }; + 114D23DA1FC7AB25000DC5EB /* OtherViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OtherViewController.h; sourceTree = ""; }; + 114D23DB1FC7AB25000DC5EB /* OtherViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = OtherViewController.m; sourceTree = ""; }; + 114D23F81FC7AD8B000DC5EB /* GiftView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GiftView.m; sourceTree = ""; }; + 114D23F91FC7AD8B000DC5EB /* GiftView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiftView.h; sourceTree = ""; }; + 114D23FB1FC7AD97000DC5EB /* SendGiftView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SendGiftView.h; sourceTree = ""; }; + 114D23FC1FC7AD97000DC5EB /* SendGiftView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SendGiftView.m; sourceTree = ""; }; + 114D24011FC7BA0C000DC5EB /* EmotionModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EmotionModel.m; sourceTree = ""; }; + 114D24021FC7BA0C000DC5EB /* EmotionModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EmotionModel.h; sourceTree = ""; }; + 114D24041FC7C69E000DC5EB /* giftImg.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = giftImg.plist; sourceTree = ""; }; + 114D24061FC7C7E3000DC5EB /* xw-dise@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "xw-dise@2x.png"; sourceTree = ""; }; + 114D24071FC7C7E3000DC5EB /* xw-dise@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "xw-dise@3x.png"; sourceTree = ""; }; + 114D240A1FC7C807000DC5EB /* xw-huangguan@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "xw-huangguan@3x.png"; sourceTree = ""; }; + 114D240B1FC7C807000DC5EB /* xw-huangguan@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "xw-huangguan@2x.png"; sourceTree = ""; }; + 114D240E1FC7C8A4000DC5EB /* xw-shiping@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "xw-shiping@2x.png"; sourceTree = ""; }; + 114D240F1FC7C8A4000DC5EB /* xw-shiping@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "xw-shiping@3x.png"; sourceTree = ""; }; + 114D24121FC7C8CA000DC5EB /* xw-shipin-hui@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "xw-shipin-hui@2x.png"; sourceTree = ""; }; + 114D24131FC7C8CA000DC5EB /* xw-shipin-hui@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "xw-shipin-hui@3x.png"; sourceTree = ""; }; + 114D241E1FC7C961000DC5EB /* zl-sfrz-h@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "zl-sfrz-h@3x.png"; sourceTree = ""; }; + 114D241F1FC7C961000DC5EB /* zl-sfrz-h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "zl-sfrz-h@2x.png"; sourceTree = ""; }; + 114D24221FC7C9EE000DC5EB /* zl-sfrz@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "zl-sfrz@3x.png"; sourceTree = ""; }; + 114D24231FC7C9EF000DC5EB /* zl-sfrz@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "zl-sfrz@2x.png"; sourceTree = ""; }; + 114D242E1FC7CA50000DC5EB /* zl-qyuanrz-h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "zl-qyuanrz-h@2x.png"; sourceTree = ""; }; + 114D242F1FC7CA51000DC5EB /* zl-qyuanrz-h@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "zl-qyuanrz-h@3x.png"; sourceTree = ""; }; + 114D24321FC7CA76000DC5EB /* zl-sjrz@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "zl-sjrz@2x.png"; sourceTree = ""; }; + 114D24331FC7CA76000DC5EB /* zl-sjrz@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "zl-sjrz@3x.png"; sourceTree = ""; }; + 114D24361FC7CAA2000DC5EB /* nan@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "nan@3x.png"; sourceTree = ""; }; + 114D24371FC7CAA2000DC5EB /* nan@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "nan@2x.png"; sourceTree = ""; }; + 114D243A1FC7CAB8000DC5EB /* nv@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "nv@3x.png"; sourceTree = ""; }; + 114D243B1FC7CAB8000DC5EB /* nv@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "nv@2x.png"; sourceTree = ""; }; + 114D243E1FC7CB8A000DC5EB /* hi@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "hi@2x.png"; sourceTree = ""; }; + 114D243F1FC7CB8B000DC5EB /* hi@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "hi@3x.png"; sourceTree = ""; }; + 114D24421FC7CBF1000DC5EB /* xuanxiang@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "xuanxiang@3x.png"; sourceTree = ""; }; + 114D24431FC7CBF1000DC5EB /* xuanxiang@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "xuanxiang@2x.png"; sourceTree = ""; }; + 114D24461FC7CC7E000DC5EB /* xw-dianzan@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "xw-dianzan@3x.png"; sourceTree = ""; }; + 114D24471FC7CC7F000DC5EB /* xw-dianzan@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "xw-dianzan@2x.png"; sourceTree = ""; }; + 114D244A1FC7CC8F000DC5EB /* xw-dianzan-hui@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "xw-dianzan-hui@3x.png"; sourceTree = ""; }; + 114D244B1FC7CC8F000DC5EB /* xw-dianzan-hui@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "xw-dianzan-hui@2x.png"; sourceTree = ""; }; + 114D244E1FC7CCA5000DC5EB /* NOguanzhu@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "NOguanzhu@2x.png"; sourceTree = ""; }; + 114D244F1FC7CCA5000DC5EB /* NOguanzhu@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "NOguanzhu@3x.png"; sourceTree = ""; }; + 114D24521FC7CCCF000DC5EB /* YESguanzhu@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "YESguanzhu@3x.png"; sourceTree = ""; }; + 114D24531FC7CCCF000DC5EB /* YESguanzhu@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "YESguanzhu@2x.png"; sourceTree = ""; }; + 114D24561FC7E60B000DC5EB /* card_boy@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "card_boy@3x.png"; sourceTree = ""; }; + 114D24571FC7E60B000DC5EB /* card_boy@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "card_boy@2x.png"; sourceTree = ""; }; + 114D245A1FC7E63C000DC5EB /* card_girl@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "card_girl@3x.png"; sourceTree = ""; }; + 114D245B1FC7E63C000DC5EB /* card_girl@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "card_girl@2x.png"; sourceTree = ""; }; + 114D24601FC7FA30000DC5EB /* HyphenateLite.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = HyphenateLite.framework; sourceTree = ""; }; + 114D24621FC7FA32000DC5EB /* EaseUI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EaseUI.h; sourceTree = ""; }; + 114D24631FC7FA32000DC5EB /* EaseUI.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EaseUI.m; sourceTree = ""; }; + 114D24641FC7FA32000DC5EB /* EaseUI.podspec */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = EaseUI.podspec; sourceTree = ""; }; + 114D24691FC7FA32000DC5EB /* EMCDDeviceManagerDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EMCDDeviceManagerDelegate.h; sourceTree = ""; }; + 114D246A1FC7FA32000DC5EB /* EMCDDeviceManagerProximitySensorDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EMCDDeviceManagerProximitySensorDelegate.h; sourceTree = ""; }; + 114D246C1FC7FA32000DC5EB /* DemoErrorCode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoErrorCode.h; sourceTree = ""; }; + 114D246D1FC7FA32000DC5EB /* EMAudioPlayerUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EMAudioPlayerUtil.h; sourceTree = ""; }; + 114D246E1FC7FA32000DC5EB /* EMAudioPlayerUtil.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EMAudioPlayerUtil.m; sourceTree = ""; }; + 114D246F1FC7FA32000DC5EB /* EMAudioRecorderUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EMAudioRecorderUtil.h; sourceTree = ""; }; + 114D24701FC7FA32000DC5EB /* EMAudioRecorderUtil.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EMAudioRecorderUtil.m; sourceTree = ""; }; + 114D24711FC7FA32000DC5EB /* EMCDDeviceManager+Media.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "EMCDDeviceManager+Media.h"; sourceTree = ""; }; + 114D24721FC7FA32000DC5EB /* EMCDDeviceManager+Media.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "EMCDDeviceManager+Media.m"; sourceTree = ""; }; + 114D24731FC7FA32000DC5EB /* EMCDDeviceManager+Microphone.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "EMCDDeviceManager+Microphone.h"; sourceTree = ""; }; + 114D24741FC7FA32000DC5EB /* EMCDDeviceManager+Microphone.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "EMCDDeviceManager+Microphone.m"; sourceTree = ""; }; + 114D24751FC7FA32000DC5EB /* EMCDDeviceManager+ProximitySensor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "EMCDDeviceManager+ProximitySensor.h"; sourceTree = ""; }; + 114D24761FC7FA32000DC5EB /* EMCDDeviceManager+ProximitySensor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "EMCDDeviceManager+ProximitySensor.m"; sourceTree = ""; }; + 114D24771FC7FA32000DC5EB /* EMCDDeviceManager+Remind.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "EMCDDeviceManager+Remind.h"; sourceTree = ""; }; + 114D24781FC7FA32000DC5EB /* EMCDDeviceManager+Remind.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "EMCDDeviceManager+Remind.m"; sourceTree = ""; }; + 114D24791FC7FA32000DC5EB /* EMCDDeviceManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EMCDDeviceManager.h; sourceTree = ""; }; + 114D247A1FC7FA32000DC5EB /* EMCDDeviceManagerBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EMCDDeviceManagerBase.h; sourceTree = ""; }; + 114D247B1FC7FA32000DC5EB /* EMCDDeviceManagerBase.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EMCDDeviceManagerBase.m; sourceTree = ""; }; + 114D247E1FC7FA32000DC5EB /* amrFileCodec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = amrFileCodec.h; sourceTree = ""; }; + 114D247F1FC7FA32000DC5EB /* amrFileCodec.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = amrFileCodec.mm; sourceTree = ""; }; + 114D24801FC7FA32000DC5EB /* wav.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wav.h; sourceTree = ""; }; + 114D24811FC7FA32000DC5EB /* wav.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = wav.mm; sourceTree = ""; }; + 114D24821FC7FA32000DC5EB /* EMVoiceConverter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EMVoiceConverter.h; sourceTree = ""; }; + 114D24831FC7FA32000DC5EB /* EMVoiceConverter.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = EMVoiceConverter.mm; sourceTree = ""; }; + 114D24851FC7FA32000DC5EB /* interf_dec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = interf_dec.h; sourceTree = ""; }; + 114D24861FC7FA32000DC5EB /* interf_enc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = interf_enc.h; sourceTree = ""; }; + 114D24871FC7FA32000DC5EB /* libopencore-amrnb.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libopencore-amrnb.a"; sourceTree = ""; }; + 114D24891FC7FA32000DC5EB /* dec_if.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dec_if.h; sourceTree = ""; }; + 114D248A1FC7FA32000DC5EB /* if_rom.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = if_rom.h; sourceTree = ""; }; + 114D248B1FC7FA32000DC5EB /* libopencore-amrwb.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libopencore-amrwb.a"; sourceTree = ""; }; + 114D24C01FC7FA32000DC5EB /* MWCaptionView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWCaptionView.h; sourceTree = ""; }; + 114D24C11FC7FA32000DC5EB /* MWCaptionView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MWCaptionView.m; sourceTree = ""; }; + 114D24C21FC7FA32000DC5EB /* MWCommon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWCommon.h; sourceTree = ""; }; + 114D24C31FC7FA32000DC5EB /* MWGridCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWGridCell.h; sourceTree = ""; }; + 114D24C41FC7FA32000DC5EB /* MWGridCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MWGridCell.m; sourceTree = ""; }; + 114D24C51FC7FA32000DC5EB /* MWGridViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWGridViewController.h; sourceTree = ""; }; + 114D24C61FC7FA32000DC5EB /* MWGridViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MWGridViewController.m; sourceTree = ""; }; + 114D24C71FC7FA32000DC5EB /* MWPhoto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWPhoto.h; sourceTree = ""; }; + 114D24C81FC7FA32000DC5EB /* MWPhoto.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MWPhoto.m; sourceTree = ""; }; + 114D24C91FC7FA32000DC5EB /* MWPhotoBrowser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWPhotoBrowser.h; sourceTree = ""; }; + 114D24CA1FC7FA32000DC5EB /* MWPhotoBrowser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MWPhotoBrowser.m; sourceTree = ""; }; + 114D24CB1FC7FA32000DC5EB /* MWPhotoBrowserPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWPhotoBrowserPrivate.h; sourceTree = ""; }; + 114D24CC1FC7FA32000DC5EB /* MWPhotoProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWPhotoProtocol.h; sourceTree = ""; }; + 114D24CD1FC7FA32000DC5EB /* MWTapDetectingImageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWTapDetectingImageView.h; sourceTree = ""; }; + 114D24CE1FC7FA32000DC5EB /* MWTapDetectingImageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MWTapDetectingImageView.m; sourceTree = ""; }; + 114D24CF1FC7FA32000DC5EB /* MWTapDetectingView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWTapDetectingView.h; sourceTree = ""; }; + 114D24D01FC7FA32000DC5EB /* MWTapDetectingView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MWTapDetectingView.m; sourceTree = ""; }; + 114D24D11FC7FA32000DC5EB /* MWZoomingScrollView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWZoomingScrollView.h; sourceTree = ""; }; + 114D24D21FC7FA32000DC5EB /* MWZoomingScrollView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MWZoomingScrollView.m; sourceTree = ""; }; + 114D24D51FC7FA32000DC5EB /* DACircularProgressView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DACircularProgressView.h; sourceTree = ""; }; + 114D24D61FC7FA32000DC5EB /* DACircularProgressView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DACircularProgressView.m; sourceTree = ""; }; + 114D24FA1FC7FA32000DC5EB /* NSIndexPath+PSTCollectionViewAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSIndexPath+PSTCollectionViewAdditions.h"; sourceTree = ""; }; + 114D24FB1FC7FA32000DC5EB /* NSIndexPath+PSTCollectionViewAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSIndexPath+PSTCollectionViewAdditions.m"; sourceTree = ""; }; + 114D24FC1FC7FA32000DC5EB /* PSTCollectionView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PSTCollectionView.h; sourceTree = ""; }; + 114D24FD1FC7FA32000DC5EB /* PSTCollectionView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PSTCollectionView.m; sourceTree = ""; }; + 114D24FE1FC7FA32000DC5EB /* PSTCollectionViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PSTCollectionViewCell.h; sourceTree = ""; }; + 114D24FF1FC7FA32000DC5EB /* PSTCollectionViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PSTCollectionViewCell.m; sourceTree = ""; }; + 114D25001FC7FA32000DC5EB /* PSTCollectionViewCommon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PSTCollectionViewCommon.h; sourceTree = ""; }; + 114D25011FC7FA32000DC5EB /* PSTCollectionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PSTCollectionViewController.h; sourceTree = ""; }; + 114D25021FC7FA32000DC5EB /* PSTCollectionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PSTCollectionViewController.m; sourceTree = ""; }; + 114D25031FC7FA32000DC5EB /* PSTCollectionViewData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PSTCollectionViewData.h; sourceTree = ""; }; + 114D25041FC7FA32000DC5EB /* PSTCollectionViewData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PSTCollectionViewData.m; sourceTree = ""; }; + 114D25051FC7FA32000DC5EB /* PSTCollectionViewFlowLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PSTCollectionViewFlowLayout.h; sourceTree = ""; }; + 114D25061FC7FA32000DC5EB /* PSTCollectionViewFlowLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PSTCollectionViewFlowLayout.m; sourceTree = ""; }; + 114D25071FC7FA32000DC5EB /* PSTCollectionViewItemKey.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PSTCollectionViewItemKey.h; sourceTree = ""; }; + 114D25081FC7FA32000DC5EB /* PSTCollectionViewItemKey.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PSTCollectionViewItemKey.m; sourceTree = ""; }; + 114D25091FC7FA32000DC5EB /* PSTCollectionViewLayout+Internals.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "PSTCollectionViewLayout+Internals.h"; sourceTree = ""; }; + 114D250A1FC7FA32000DC5EB /* PSTCollectionViewLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PSTCollectionViewLayout.h; sourceTree = ""; }; + 114D250B1FC7FA32000DC5EB /* PSTCollectionViewLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PSTCollectionViewLayout.m; sourceTree = ""; }; + 114D250C1FC7FA32000DC5EB /* PSTCollectionViewUpdateItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PSTCollectionViewUpdateItem.h; sourceTree = ""; }; + 114D250D1FC7FA32000DC5EB /* PSTCollectionViewUpdateItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PSTCollectionViewUpdateItem.m; sourceTree = ""; }; + 114D250E1FC7FA32000DC5EB /* PSTGridLayoutInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PSTGridLayoutInfo.h; sourceTree = ""; }; + 114D250F1FC7FA32000DC5EB /* PSTGridLayoutInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PSTGridLayoutInfo.m; sourceTree = ""; }; + 114D25101FC7FA32000DC5EB /* PSTGridLayoutItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PSTGridLayoutItem.h; sourceTree = ""; }; + 114D25111FC7FA32000DC5EB /* PSTGridLayoutItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PSTGridLayoutItem.m; sourceTree = ""; }; + 114D25121FC7FA32000DC5EB /* PSTGridLayoutRow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PSTGridLayoutRow.h; sourceTree = ""; }; + 114D25131FC7FA32000DC5EB /* PSTGridLayoutRow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PSTGridLayoutRow.m; sourceTree = ""; }; + 114D25141FC7FA32000DC5EB /* PSTGridLayoutSection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PSTGridLayoutSection.h; sourceTree = ""; }; + 114D25151FC7FA32000DC5EB /* PSTGridLayoutSection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PSTGridLayoutSection.m; sourceTree = ""; }; + 114D25161FC7FA32000DC5EB /* MWPhotoBrowser.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = MWPhotoBrowser.bundle; sourceTree = ""; }; + 114D25181FC7FA32000DC5EB /* EaseSDKHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EaseSDKHelper.h; sourceTree = ""; }; + 114D25191FC7FA32000DC5EB /* EaseSDKHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EaseSDKHelper.m; sourceTree = ""; }; + 114D251B1FC7FA32000DC5EB /* EaseConversationModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EaseConversationModel.h; sourceTree = ""; }; + 114D251C1FC7FA32000DC5EB /* EaseConversationModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EaseConversationModel.m; sourceTree = ""; }; + 114D251D1FC7FA32000DC5EB /* EaseMessageModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EaseMessageModel.h; sourceTree = ""; }; + 114D251E1FC7FA32000DC5EB /* EaseMessageModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EaseMessageModel.m; sourceTree = ""; }; + 114D251F1FC7FA32000DC5EB /* EaseUserModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EaseUserModel.h; sourceTree = ""; }; + 114D25201FC7FA32000DC5EB /* EaseUserModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EaseUserModel.m; sourceTree = ""; }; + 114D25211FC7FA32000DC5EB /* IConversationModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IConversationModel.h; sourceTree = ""; }; + 114D25221FC7FA32000DC5EB /* IMessageModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IMessageModel.h; sourceTree = ""; }; + 114D25231FC7FA32000DC5EB /* IModelCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IModelCell.h; sourceTree = ""; }; + 114D25241FC7FA32000DC5EB /* IModelChatCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IModelChatCell.h; sourceTree = ""; }; + 114D25251FC7FA32000DC5EB /* IUserModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IUserModel.h; sourceTree = ""; }; + 114D25281FC7FA32000DC5EB /* NSDate+Category.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSDate+Category.h"; sourceTree = ""; }; + 114D25291FC7FA32000DC5EB /* NSDate+Category.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSDate+Category.m"; sourceTree = ""; }; + 114D252A1FC7FA32000DC5EB /* NSDateFormatter+Category.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSDateFormatter+Category.h"; sourceTree = ""; }; + 114D252B1FC7FA32000DC5EB /* NSDateFormatter+Category.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSDateFormatter+Category.m"; sourceTree = ""; }; + 114D252C1FC7FA32000DC5EB /* NSString+Valid.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+Valid.h"; sourceTree = ""; }; + 114D252D1FC7FA32000DC5EB /* NSString+Valid.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+Valid.m"; sourceTree = ""; }; + 114D252E1FC7FA32000DC5EB /* UIViewController+DismissKeyboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIViewController+DismissKeyboard.h"; sourceTree = ""; }; + 114D252F1FC7FA32000DC5EB /* UIViewController+DismissKeyboard.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIViewController+DismissKeyboard.m"; sourceTree = ""; }; + 114D25301FC7FA32000DC5EB /* UIViewController+HUD.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIViewController+HUD.h"; sourceTree = ""; }; + 114D25311FC7FA32000DC5EB /* UIViewController+HUD.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIViewController+HUD.m"; sourceTree = ""; }; + 114D25321FC7FA32000DC5EB /* EaseChineseToPinyin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EaseChineseToPinyin.h; sourceTree = ""; }; + 114D25331FC7FA32000DC5EB /* EaseChineseToPinyin.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EaseChineseToPinyin.m; sourceTree = ""; }; + 114D25341FC7FA32000DC5EB /* EaseConvertToCommonEmoticonsHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EaseConvertToCommonEmoticonsHelper.h; sourceTree = ""; }; + 114D25351FC7FA32000DC5EB /* EaseConvertToCommonEmoticonsHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EaseConvertToCommonEmoticonsHelper.m; sourceTree = ""; }; + 114D25361FC7FA32000DC5EB /* EaseLocalDefine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EaseLocalDefine.h; sourceTree = ""; }; + 114D25371FC7FA32000DC5EB /* EaseMessageReadManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EaseMessageReadManager.h; sourceTree = ""; }; + 114D25381FC7FA32000DC5EB /* EaseMessageReadManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EaseMessageReadManager.m; sourceTree = ""; }; + 114D253A1FC7FA32000DC5EB /* EaseEmoji.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EaseEmoji.h; sourceTree = ""; }; + 114D253B1FC7FA32000DC5EB /* EaseEmoji.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EaseEmoji.m; sourceTree = ""; }; + 114D253C1FC7FA32000DC5EB /* EaseEmojiEmoticons.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EaseEmojiEmoticons.h; sourceTree = ""; }; + 114D253D1FC7FA32000DC5EB /* EaseEmojiEmoticons.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EaseEmojiEmoticons.m; sourceTree = ""; }; + 114D253E1FC7FA32000DC5EB /* EaseEmotionEscape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EaseEmotionEscape.h; sourceTree = ""; }; + 114D253F1FC7FA32000DC5EB /* EaseEmotionEscape.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EaseEmotionEscape.m; sourceTree = ""; }; + 114D25401FC7FA32000DC5EB /* EaseEmotionManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EaseEmotionManager.h; sourceTree = ""; }; + 114D25411FC7FA32000DC5EB /* EaseEmotionManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EaseEmotionManager.m; sourceTree = ""; }; + 114D25421FC7FA32000DC5EB /* FixFopen.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = FixFopen.c; sourceTree = ""; }; + 114D25441FC7FA32000DC5EB /* EaseConversationListViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EaseConversationListViewController.h; sourceTree = ""; }; + 114D25451FC7FA32000DC5EB /* EaseConversationListViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EaseConversationListViewController.m; sourceTree = ""; }; + 114D25461FC7FA32000DC5EB /* EaseLocationViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EaseLocationViewController.h; sourceTree = ""; }; + 114D25471FC7FA32000DC5EB /* EaseLocationViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EaseLocationViewController.m; sourceTree = ""; }; + 114D25481FC7FA32000DC5EB /* EaseMessageViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EaseMessageViewController.h; sourceTree = ""; }; + 114D25491FC7FA32000DC5EB /* EaseMessageViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EaseMessageViewController.m; sourceTree = ""; }; + 114D254A1FC7FA32000DC5EB /* EaseRefreshTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EaseRefreshTableViewController.h; sourceTree = ""; }; + 114D254B1FC7FA32000DC5EB /* EaseRefreshTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EaseRefreshTableViewController.m; sourceTree = ""; }; + 114D254C1FC7FA32000DC5EB /* EaseUsersListViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EaseUsersListViewController.h; sourceTree = ""; }; + 114D254D1FC7FA32000DC5EB /* EaseUsersListViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EaseUsersListViewController.m; sourceTree = ""; }; + 114D254E1FC7FA32000DC5EB /* EaseViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EaseViewController.h; sourceTree = ""; }; + 114D254F1FC7FA32000DC5EB /* EaseViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EaseViewController.m; sourceTree = ""; }; + 114D25521FC7FA32000DC5EB /* EaseUserCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EaseUserCell.h; sourceTree = ""; }; + 114D25531FC7FA32000DC5EB /* EaseUserCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EaseUserCell.m; sourceTree = ""; }; + 114D25561FC7FA32000DC5EB /* EaseBaseMessageCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EaseBaseMessageCell.h; sourceTree = ""; }; + 114D25571FC7FA32000DC5EB /* EaseBaseMessageCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EaseBaseMessageCell.m; sourceTree = ""; }; + 114D25581FC7FA32000DC5EB /* EaseCustomMessageCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EaseCustomMessageCell.h; sourceTree = ""; }; + 114D25591FC7FA32000DC5EB /* EaseCustomMessageCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EaseCustomMessageCell.m; sourceTree = ""; }; + 114D255A1FC7FA32000DC5EB /* EaseMessageCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EaseMessageCell.h; sourceTree = ""; }; + 114D255B1FC7FA32000DC5EB /* EaseMessageCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EaseMessageCell.m; sourceTree = ""; }; + 114D255C1FC7FA32000DC5EB /* EaseMessageTimeCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EaseMessageTimeCell.h; sourceTree = ""; }; + 114D255D1FC7FA32000DC5EB /* EaseMessageTimeCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EaseMessageTimeCell.m; sourceTree = ""; }; + 114D255F1FC7FA32000DC5EB /* EaseBubbleView+File.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "EaseBubbleView+File.h"; sourceTree = ""; }; + 114D25601FC7FA32000DC5EB /* EaseBubbleView+File.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "EaseBubbleView+File.m"; sourceTree = ""; }; + 114D25611FC7FA32000DC5EB /* EaseBubbleView+Gif.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "EaseBubbleView+Gif.h"; sourceTree = ""; }; + 114D25621FC7FA32000DC5EB /* EaseBubbleView+Gif.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "EaseBubbleView+Gif.m"; sourceTree = ""; }; + 114D25631FC7FA32000DC5EB /* EaseBubbleView+Image.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "EaseBubbleView+Image.h"; sourceTree = ""; }; + 114D25641FC7FA32000DC5EB /* EaseBubbleView+Image.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "EaseBubbleView+Image.m"; sourceTree = ""; }; + 114D25651FC7FA32000DC5EB /* EaseBubbleView+Location.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "EaseBubbleView+Location.h"; sourceTree = ""; }; + 114D25661FC7FA32000DC5EB /* EaseBubbleView+Location.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "EaseBubbleView+Location.m"; sourceTree = ""; }; + 114D25671FC7FA32000DC5EB /* EaseBubbleView+Text.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "EaseBubbleView+Text.h"; sourceTree = ""; }; + 114D25681FC7FA32000DC5EB /* EaseBubbleView+Text.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "EaseBubbleView+Text.m"; sourceTree = ""; }; + 114D25691FC7FA32000DC5EB /* EaseBubbleView+Video.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "EaseBubbleView+Video.h"; sourceTree = ""; }; + 114D256A1FC7FA32000DC5EB /* EaseBubbleView+Video.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "EaseBubbleView+Video.m"; sourceTree = ""; }; + 114D256B1FC7FA32000DC5EB /* EaseBubbleView+Voice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "EaseBubbleView+Voice.h"; sourceTree = ""; }; + 114D256C1FC7FA32000DC5EB /* EaseBubbleView+Voice.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "EaseBubbleView+Voice.m"; sourceTree = ""; }; + 114D256D1FC7FA32000DC5EB /* EaseBubbleView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EaseBubbleView.h; sourceTree = ""; }; + 114D256E1FC7FA32000DC5EB /* EaseBubbleView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EaseBubbleView.m; sourceTree = ""; }; + 114D25701FC7FA32000DC5EB /* EaseChatToolbar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EaseChatToolbar.h; sourceTree = ""; }; + 114D25711FC7FA32000DC5EB /* EaseChatToolbar.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EaseChatToolbar.m; sourceTree = ""; }; + 114D25721FC7FA32000DC5EB /* EaseChatToolbarItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EaseChatToolbarItem.h; sourceTree = ""; }; + 114D25731FC7FA32000DC5EB /* EaseChatToolbarItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EaseChatToolbarItem.m; sourceTree = ""; }; + 114D25741FC7FA32000DC5EB /* EaseImageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EaseImageView.h; sourceTree = ""; }; + 114D25751FC7FA32000DC5EB /* EaseImageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EaseImageView.m; sourceTree = ""; }; + 114D25761FC7FA32000DC5EB /* EaseTextView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EaseTextView.h; sourceTree = ""; }; + 114D25771FC7FA32000DC5EB /* EaseTextView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EaseTextView.m; sourceTree = ""; }; + 114D25791FC7FA32000DC5EB /* EaseFaceView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EaseFaceView.h; sourceTree = ""; }; + 114D257A1FC7FA32000DC5EB /* EaseFaceView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EaseFaceView.m; sourceTree = ""; }; + 114D257B1FC7FA32000DC5EB /* EaseFacialView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EaseFacialView.h; sourceTree = ""; }; + 114D257C1FC7FA32000DC5EB /* EaseFacialView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EaseFacialView.m; sourceTree = ""; }; + 114D257E1FC7FA32000DC5EB /* EaseChatBarMoreView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EaseChatBarMoreView.h; sourceTree = ""; }; + 114D257F1FC7FA32000DC5EB /* EaseChatBarMoreView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EaseChatBarMoreView.m; sourceTree = ""; }; + 114D25811FC7FA32000DC5EB /* EaseRecordView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EaseRecordView.h; sourceTree = ""; }; + 114D25821FC7FA32000DC5EB /* EaseRecordView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EaseRecordView.m; sourceTree = ""; }; + 114D25841FC7FA32000DC5EB /* EaseConversationCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EaseConversationCell.h; sourceTree = ""; }; + 114D25851FC7FA32000DC5EB /* EaseConversationCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EaseConversationCell.m; sourceTree = ""; }; + 114D25871FC7FA32000DC5EB /* EaseUIResource.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = EaseUIResource.bundle; sourceTree = ""; }; + 114D26011FC7FA81000DC5EB /* CoreMedia.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMedia.framework; path = System/Library/Frameworks/CoreMedia.framework; sourceTree = SDKROOT; }; + 114D26031FC7FAAD000DC5EB /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; + 114D26051FC7FAF3000DC5EB /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = System/Library/Frameworks/MobileCoreServices.framework; sourceTree = SDKROOT; }; + 114D26071FC7FB09000DC5EB /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = System/Library/Frameworks/ImageIO.framework; sourceTree = SDKROOT; }; + 114D26091FC7FB21000DC5EB /* libc++.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libc++.tbd"; path = "usr/lib/libc++.tbd"; sourceTree = SDKROOT; }; + 114D260B1FC7FB30000DC5EB /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; + 114D26131FC801AB000DC5EB /* ChatViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ChatViewController.h; sourceTree = ""; }; + 114D26141FC801AC000DC5EB /* ChatViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ChatViewController.m; sourceTree = ""; }; + 114D26161FC801CB000DC5EB /* ChatDemoHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ChatDemoHelper.m; sourceTree = ""; }; + 114D26171FC801CB000DC5EB /* ChatDemoHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ChatDemoHelper.h; sourceTree = ""; }; + 114ED9F81FC3B84F008BAE09 /* MyWalletViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MyWalletViewController.h; sourceTree = ""; }; + 114ED9F91FC3B84F008BAE09 /* MyTicketViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MyTicketViewController.h; sourceTree = ""; }; + 114ED9FA1FC3B84F008BAE09 /* MyWalletViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MyWalletViewController.m; sourceTree = ""; }; + 114ED9FB1FC3B850008BAE09 /* MyTicketViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MyTicketViewController.m; sourceTree = ""; }; + 114ED9FE1FC3B86C008BAE09 /* MyTicketCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MyTicketCell.h; sourceTree = ""; }; + 114ED9FF1FC3B86C008BAE09 /* SyceeCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SyceeCell.h; sourceTree = ""; }; + 114EDA001FC3B86D008BAE09 /* MyTicketCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MyTicketCell.m; sourceTree = ""; }; + 114EDA011FC3B86D008BAE09 /* SyceeCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SyceeCell.m; sourceTree = ""; }; + 114EDA041FC3B87E008BAE09 /* MyTicketModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MyTicketModel.m; sourceTree = ""; }; + 114EDA051FC3B87E008BAE09 /* MyTicketModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MyTicketModel.h; sourceTree = ""; }; + 114EDA071FC3D1BB008BAE09 /* ZCAlertController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZCAlertController.h; sourceTree = ""; }; + 114EDA081FC3D1BB008BAE09 /* ZCAlertController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ZCAlertController.m; sourceTree = ""; }; + 114EDA191FC3D8EC008BAE09 /* GiftCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GiftCell.m; sourceTree = ""; }; + 114EDA1A1FC3D8EC008BAE09 /* PeopleOfGiftCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PeopleOfGiftCell.h; sourceTree = ""; }; + 114EDA1B1FC3D8EC008BAE09 /* PeopleOfGiftCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PeopleOfGiftCell.m; sourceTree = ""; }; + 114EDA1C1FC3D8ED008BAE09 /* GiftCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiftCell.h; sourceTree = ""; }; + 114EDA1F1FC3D982008BAE09 /* MyGiftViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MyGiftViewController.h; sourceTree = ""; }; + 114EDA201FC3D982008BAE09 /* PeopleOfGiftViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PeopleOfGiftViewController.h; sourceTree = ""; }; + 114EDA211FC3D983008BAE09 /* MyGiftViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MyGiftViewController.m; sourceTree = ""; }; + 114EDA221FC3D983008BAE09 /* PeopleOfGiftViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PeopleOfGiftViewController.m; sourceTree = ""; }; + 114EDA251FC3DB95008BAE09 /* NSString+transform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+transform.h"; sourceTree = ""; }; + 114EDA261FC3DB95008BAE09 /* NSString+transform.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+transform.m"; sourceTree = ""; }; + 114EDA281FC3E470008BAE09 /* lw-as@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "lw-as@2x.png"; sourceTree = ""; }; + 114EDA291FC3E470008BAE09 /* lw-as@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "lw-as@3x.png"; sourceTree = ""; }; + 114EDA2C1FC3E47A008BAE09 /* lw-bbt@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "lw-bbt@3x.png"; sourceTree = ""; }; + 114EDA2D1FC3E47A008BAE09 /* lw-bbt@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "lw-bbt@2x.png"; sourceTree = ""; }; + 114EDA301FC3E486008BAE09 /* lw-cjd@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "lw-cjd@2x.png"; sourceTree = ""; }; + 114EDA311FC3E487008BAE09 /* lw-cjd@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "lw-cjd@3x.png"; sourceTree = ""; }; + 114EDA341FC3E491008BAE09 /* lw-dg@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "lw-dg@2x.png"; sourceTree = ""; }; + 114EDA351FC3E491008BAE09 /* lw-dg@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "lw-dg@3x.png"; sourceTree = ""; }; + 114EDA381FC3E49B008BAE09 /* lw-dsg@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "lw-dsg@2x.png"; sourceTree = ""; }; + 114EDA391FC3E49B008BAE09 /* lw-dsg@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "lw-dsg@3x.png"; sourceTree = ""; }; + 114EDA3C1FC3E4AD008BAE09 /* lw-dz@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "lw-dz@3x.png"; sourceTree = ""; }; + 114EDA3D1FC3E4AD008BAE09 /* lw-dz@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "lw-dz@2x.png"; sourceTree = ""; }; + 114EDA401FC3E4BA008BAE09 /* lw-fj@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "lw-fj@2x.png"; sourceTree = ""; }; + 114EDA411FC3E4BA008BAE09 /* lw-fj@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "lw-fj@3x.png"; sourceTree = ""; }; + 114EDA441FC3E4C2008BAE09 /* lw-fw@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "lw-fw@3x.png"; sourceTree = ""; }; + 114EDA451FC3E4C2008BAE09 /* lw-fw@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "lw-fw@2x.png"; sourceTree = ""; }; + 114EDA481FC3E4D7008BAE09 /* lw-jz@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "lw-jz@2x.png"; sourceTree = ""; }; + 114EDA491FC3E4D7008BAE09 /* lw-jz@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "lw-jz@3x.png"; sourceTree = ""; }; + 114EDA4C1FC3E4EB008BAE09 /* lw-kh@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "lw-kh@2x.png"; sourceTree = ""; }; + 114EDA4D1FC3E4EB008BAE09 /* lw-kh@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "lw-kh@3x.png"; sourceTree = ""; }; + 114EDA501FC3E4FC008BAE09 /* lw-mg1@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "lw-mg1@2x.png"; sourceTree = ""; }; + 114EDA511FC3E4FC008BAE09 /* lw-mg1@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "lw-mg1@3x.png"; sourceTree = ""; }; + 114EDA541FC3E52B008BAE09 /* lw-mg3@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "lw-mg3@2x.png"; sourceTree = ""; }; + 114EDA551FC3E52B008BAE09 /* lw-mg3@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "lw-mg3@3x.png"; sourceTree = ""; }; + 114EDA581FC3E541008BAE09 /* lw-mg99@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "lw-mg99@2x.png"; sourceTree = ""; }; + 114EDA591FC3E541008BAE09 /* lw-mg99@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "lw-mg99@3x.png"; sourceTree = ""; }; + 114EDA5C1FC3E54F008BAE09 /* lw-pj@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "lw-pj@3x.png"; sourceTree = ""; }; + 114EDA5D1FC3E54F008BAE09 /* lw-pj@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "lw-pj@2x.png"; sourceTree = ""; }; + 114EDA601FC3E559008BAE09 /* lw-qkl@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "lw-qkl@3x.png"; sourceTree = ""; }; + 114EDA611FC3E559008BAE09 /* lw-qkl@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "lw-qkl@2x.png"; sourceTree = ""; }; + 114EDA641FC3E567008BAE09 /* lw-yb@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "lw-yb@2x.png"; sourceTree = ""; }; + 114EDA651FC3E567008BAE09 /* lw-yb@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "lw-yb@3x.png"; sourceTree = ""; }; + 114EDA681FC3E575008BAE09 /* lw-yt@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "lw-yt@3x.png"; sourceTree = ""; }; + 114EDA691FC3E575008BAE09 /* lw-yt@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "lw-yt@2x.png"; sourceTree = ""; }; + 114EDA6C1FC3E593008BAE09 /* slw-lwh@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "slw-lwh@2x.png"; sourceTree = ""; }; + 114EDA6D1FC3E593008BAE09 /* slw-lwh@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "slw-lwh@3x.png"; sourceTree = ""; }; + 114EDA951FC3FA0E008BAE09 /* PersonalInfoModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PersonalInfoModel.m; sourceTree = ""; }; + 114EDA961FC3FA0E008BAE09 /* PersonalInfoModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PersonalInfoModel.h; sourceTree = ""; }; + 114EDA981FC3FA39008BAE09 /* UIButtonListView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIButtonListView.h; sourceTree = ""; }; + 114EDA991FC3FA39008BAE09 /* UIButtonListView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIButtonListView.m; sourceTree = ""; }; + 114EDA9B1FC3FA90008BAE09 /* delteButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = delteButton.h; sourceTree = ""; }; + 114EDA9C1FC3FA90008BAE09 /* delteButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = delteButton.m; sourceTree = ""; }; + 114EDA9E1FC3FADC008BAE09 /* NSString+Ext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+Ext.h"; sourceTree = ""; }; + 114EDA9F1FC3FADC008BAE09 /* NSString+Ext.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+Ext.m"; sourceTree = ""; }; + 114EDAA11FC3FBEA008BAE09 /* ZCTools.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ZCTools.m; sourceTree = ""; }; + 114EDAA21FC3FBEA008BAE09 /* ZCTools.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZCTools.h; sourceTree = ""; }; + 114EDAB61FC4041F008BAE09 /* HobbyAndMarkViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HobbyAndMarkViewController.h; sourceTree = ""; }; + 114EDAB71FC4041F008BAE09 /* HobbyAndMarkViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HobbyAndMarkViewController.m; sourceTree = ""; }; + 114EDAC21FC40817008BAE09 /* UserBarView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UserBarView.m; sourceTree = ""; }; + 114EDAC31FC40817008BAE09 /* UserBarView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserBarView.h; sourceTree = ""; }; + 114EDACB1FC40E0A008BAE09 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; }; + 114EDACD1FC41079008BAE09 /* TapGestureRecognizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TapGestureRecognizer.h; sourceTree = ""; }; + 114EDACE1FC41079008BAE09 /* TapGestureRecognizer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TapGestureRecognizer.m; sourceTree = ""; }; + 114EDAD01FC42D82008BAE09 /* IntroduceViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IntroduceViewController.m; sourceTree = ""; }; + 114EDAD31FC42DAA008BAE09 /* MyPhotoAlbumViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MyPhotoAlbumViewController.m; sourceTree = ""; }; + 114EDAD41FC42DAA008BAE09 /* MyPhotoAlbumViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MyPhotoAlbumViewController.h; sourceTree = ""; }; + 114EDAD61FC42DC4008BAE09 /* VideoViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VideoViewController.m; sourceTree = ""; }; + 114EDAD91FC42DC5008BAE09 /* VideoViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VideoViewController.h; sourceTree = ""; }; + 114EDADC1FC42E23008BAE09 /* MapCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MapCell.h; sourceTree = ""; }; + 114EDADD1FC42E24008BAE09 /* MapCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MapCell.m; sourceTree = ""; }; + 114EDAE71FC431E7008BAE09 /* PhotoModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PhotoModel.m; sourceTree = ""; }; + 114EDAE81FC431E7008BAE09 /* PhotoModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PhotoModel.h; sourceTree = ""; }; + 115C3E1B1FD8EBA400370D92 /* launch_X_3.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = launch_X_3.png; sourceTree = ""; }; + 115C3E1C1FD8EBA400370D92 /* launch_X_2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = launch_X_2.png; sourceTree = ""; }; + 115C3E1D1FD8EBA400370D92 /* launch_X_1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = launch_X_1.png; sourceTree = ""; }; + 115C3E1E1FD8EBA400370D92 /* launch_X_4.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = launch_X_4.png; sourceTree = ""; }; + 115C3E231FD90E4B00370D92 /* picture_default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "picture_default@2x.png"; sourceTree = ""; }; + 115C3E241FD90E4C00370D92 /* picture_default@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "picture_default@3x.png"; sourceTree = ""; }; + 115C3E331FD9309200370D92 /* cameraSelected@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "cameraSelected@2x.png"; sourceTree = ""; }; + 115C3E341FD9309300370D92 /* phoneSelected@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "phoneSelected@2x.png"; sourceTree = ""; }; + 115C3E351FD9309300370D92 /* locationSelected@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "locationSelected@3x.png"; sourceTree = ""; }; + 115C3E361FD9309300370D92 /* locationSelected@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "locationSelected@2x.png"; sourceTree = ""; }; + 115C3E371FD9309300370D92 /* cameraSelected@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "cameraSelected@3x.png"; sourceTree = ""; }; + 115C3E381FD9309300370D92 /* phoneSelected@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "phoneSelected@3x.png"; sourceTree = ""; }; + 11625BA61FD7A80100E156E5 /* wdqb-rcq-h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "wdqb-rcq-h@2x.png"; sourceTree = ""; }; + 11625BA71FD7A80100E156E5 /* wdqb-rcq-h@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "wdqb-rcq-h@3x.png"; sourceTree = ""; }; + 11625BAA1FD7A81E00E156E5 /* wdqb-rcq@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "wdqb-rcq@2x.png"; sourceTree = ""; }; + 11625BAB1FD7A81E00E156E5 /* wdqb-rcq@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "wdqb-rcq@3x.png"; sourceTree = ""; }; + 11625BAE1FD7A85800E156E5 /* wdqb-ysy@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "wdqb-ysy@2x.png"; sourceTree = ""; }; + 11625BAF1FD7A85800E156E5 /* wdqb-ysy@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "wdqb-ysy@3x.png"; sourceTree = ""; }; + 11625BB21FD7A8A600E156E5 /* wdqb-gq@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "wdqb-gq@3x.png"; sourceTree = ""; }; + 11625BB31FD7A8A700E156E5 /* wdqb-gq@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "wdqb-gq@2x.png"; sourceTree = ""; }; + 11625BB61FD7A8D200E156E5 /* wdqb-xjq-h@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "wdqb-xjq-h@3x.png"; sourceTree = ""; }; + 11625BB71FD7A8D200E156E5 /* wdqb-xjq-h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "wdqb-xjq-h@2x.png"; sourceTree = ""; }; + 11625BBA1FD7A8FD00E156E5 /* wdqb-xjq@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "wdqb-xjq@3x.png"; sourceTree = ""; }; + 11625BBB1FD7A8FD00E156E5 /* wdqb-xjq@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "wdqb-xjq@2x.png"; sourceTree = ""; }; + 1166A6421FC12B9800CCA010 /* NewsListViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NewsListViewController.h; sourceTree = ""; }; + 1166A6431FC12B9800CCA010 /* NewsListViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NewsListViewController.m; sourceTree = ""; }; + 1166A6B21FC1366700CCA010 /* RelationAndOptionView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RelationAndOptionView.h; sourceTree = ""; }; + 1166A6B31FC1366700CCA010 /* RelationAndOptionView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RelationAndOptionView.m; sourceTree = ""; }; + 1166A6B51FC136AF00CCA010 /* LikeAndCommentBtnView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LikeAndCommentBtnView.h; sourceTree = ""; }; + 1166A6B61FC136AF00CCA010 /* LikeAndCommentBtnView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LikeAndCommentBtnView.m; sourceTree = ""; }; + 1166A6B91FC1376900CCA010 /* MKAnnotationView+WebCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MKAnnotationView+WebCache.h"; sourceTree = ""; }; + 1166A6BA1FC1376900CCA010 /* MKAnnotationView+WebCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "MKAnnotationView+WebCache.m"; sourceTree = ""; }; + 1166A6BB1FC1376900CCA010 /* NSData+ImageContentType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSData+ImageContentType.h"; sourceTree = ""; }; + 1166A6BC1FC1376900CCA010 /* NSData+ImageContentType.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSData+ImageContentType.m"; sourceTree = ""; }; + 1166A6BD1FC1376900CCA010 /* SDImageCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDImageCache.h; sourceTree = ""; }; + 1166A6BE1FC1376900CCA010 /* SDImageCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDImageCache.m; sourceTree = ""; }; + 1166A6BF1FC1376900CCA010 /* SDWebImageCompat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDWebImageCompat.h; sourceTree = ""; }; + 1166A6C01FC1376900CCA010 /* SDWebImageCompat.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDWebImageCompat.m; sourceTree = ""; }; + 1166A6C11FC1376900CCA010 /* SDWebImageDecoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDWebImageDecoder.h; sourceTree = ""; }; + 1166A6C21FC1376900CCA010 /* SDWebImageDecoder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDWebImageDecoder.m; sourceTree = ""; }; + 1166A6C31FC1376900CCA010 /* SDWebImageDownloader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDWebImageDownloader.h; sourceTree = ""; }; + 1166A6C41FC1376900CCA010 /* SDWebImageDownloader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDWebImageDownloader.m; sourceTree = ""; }; + 1166A6C51FC1376900CCA010 /* SDWebImageDownloaderOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDWebImageDownloaderOperation.h; sourceTree = ""; }; + 1166A6C61FC1376900CCA010 /* SDWebImageDownloaderOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDWebImageDownloaderOperation.m; sourceTree = ""; }; + 1166A6C71FC1376900CCA010 /* SDWebImageManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDWebImageManager.h; sourceTree = ""; }; + 1166A6C81FC1376900CCA010 /* SDWebImageManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDWebImageManager.m; sourceTree = ""; }; + 1166A6C91FC1376900CCA010 /* SDWebImageOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDWebImageOperation.h; sourceTree = ""; }; + 1166A6CA1FC1376900CCA010 /* SDWebImagePrefetcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDWebImagePrefetcher.h; sourceTree = ""; }; + 1166A6CB1FC1376900CCA010 /* SDWebImagePrefetcher.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDWebImagePrefetcher.m; sourceTree = ""; }; + 1166A6CC1FC1376900CCA010 /* UIButton+WebCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIButton+WebCache.h"; sourceTree = ""; }; + 1166A6CD1FC1376900CCA010 /* UIButton+WebCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIButton+WebCache.m"; sourceTree = ""; }; + 1166A6CE1FC1376900CCA010 /* UIImage+GIF.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+GIF.h"; sourceTree = ""; }; + 1166A6CF1FC1376900CCA010 /* UIImage+GIF.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+GIF.m"; sourceTree = ""; }; + 1166A6D01FC1376900CCA010 /* UIImage+MultiFormat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+MultiFormat.h"; sourceTree = ""; }; + 1166A6D11FC1376900CCA010 /* UIImage+MultiFormat.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+MultiFormat.m"; sourceTree = ""; }; + 1166A6D21FC1376900CCA010 /* UIImage+WebP.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+WebP.h"; sourceTree = ""; }; + 1166A6D31FC1376900CCA010 /* UIImage+WebP.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+WebP.m"; sourceTree = ""; }; + 1166A6D41FC1376900CCA010 /* UIImageView+HighlightedWebCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImageView+HighlightedWebCache.h"; sourceTree = ""; }; + 1166A6D51FC1376900CCA010 /* UIImageView+HighlightedWebCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImageView+HighlightedWebCache.m"; sourceTree = ""; }; + 1166A6D61FC1376900CCA010 /* UIImageView+WebCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImageView+WebCache.h"; sourceTree = ""; }; + 1166A6D71FC1376900CCA010 /* UIImageView+WebCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImageView+WebCache.m"; sourceTree = ""; }; + 1166A6D81FC1376900CCA010 /* UIView+WebCacheOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+WebCacheOperation.h"; sourceTree = ""; }; + 1166A6D91FC1376900CCA010 /* UIView+WebCacheOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+WebCacheOperation.m"; sourceTree = ""; }; + 1166A6EA1FC1395200CCA010 /* PlayVideoView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PlayVideoView.m; sourceTree = ""; }; + 1166A6EB1FC1395200CCA010 /* PlayVideoView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PlayVideoView.h; sourceTree = ""; }; + 1166A6ED1FC139FB00CCA010 /* UIView+FirstViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+FirstViewController.m"; sourceTree = ""; }; + 1166A6EE1FC139FB00CCA010 /* UIView+FirstViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+FirstViewController.h"; sourceTree = ""; }; + 1166A6F11FC13F4A00CCA010 /* AFHTTPSessionManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFHTTPSessionManager.h; sourceTree = ""; }; + 1166A6F21FC13F4A00CCA010 /* AFHTTPSessionManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFHTTPSessionManager.m; sourceTree = ""; }; + 1166A6F31FC13F4A00CCA010 /* AFNetworking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFNetworking.h; sourceTree = ""; }; + 1166A6F41FC13F4A00CCA010 /* AFNetworkReachabilityManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFNetworkReachabilityManager.h; sourceTree = ""; }; + 1166A6F51FC13F4A00CCA010 /* AFNetworkReachabilityManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFNetworkReachabilityManager.m; sourceTree = ""; }; + 1166A6F61FC13F4A00CCA010 /* AFSecurityPolicy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFSecurityPolicy.h; sourceTree = ""; }; + 1166A6F71FC13F4A00CCA010 /* AFSecurityPolicy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFSecurityPolicy.m; sourceTree = ""; }; + 1166A6F81FC13F4A00CCA010 /* AFURLRequestSerialization.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFURLRequestSerialization.h; sourceTree = ""; }; + 1166A6F91FC13F4A00CCA010 /* AFURLRequestSerialization.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFURLRequestSerialization.m; sourceTree = ""; }; + 1166A6FA1FC13F4A00CCA010 /* AFURLResponseSerialization.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFURLResponseSerialization.h; sourceTree = ""; }; + 1166A6FB1FC13F4A00CCA010 /* AFURLResponseSerialization.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFURLResponseSerialization.m; sourceTree = ""; }; + 1166A6FC1FC13F4A00CCA010 /* AFURLSessionManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFURLSessionManager.h; sourceTree = ""; }; + 1166A6FD1FC13F4A00CCA010 /* AFURLSessionManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFURLSessionManager.m; sourceTree = ""; }; + 1166A6FE1FC13F4A00CCA010 /* JSONKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSONKit.h; sourceTree = ""; }; + 1166A6FF1FC13F4A00CCA010 /* JSONKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JSONKit.m; sourceTree = ""; }; + 1166A7001FC13F4A00CCA010 /* Reachability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Reachability.h; sourceTree = ""; }; + 1166A7011FC13F4A00CCA010 /* Reachability.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Reachability.m; sourceTree = ""; }; + 1166A70B1FC1413100CCA010 /* ZCNetRequestManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZCNetRequestManager.h; sourceTree = ""; }; + 1166A70C1FC1413200CCA010 /* ZCNetRequestManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ZCNetRequestManager.m; sourceTree = ""; }; + 116ACEAC1FCCF02C00E12ACA /* noData@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "noData@2x.png"; sourceTree = ""; }; + 116ACEAD1FCCF02C00E12ACA /* noData@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "noData@3x.png"; sourceTree = ""; }; + 116ACEB31FCD327900E12ACA /* LaunchIntroductionView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LaunchIntroductionView.h; sourceTree = ""; }; + 116ACEB41FCD327900E12ACA /* LaunchIntroductionView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LaunchIntroductionView.m; sourceTree = ""; }; + 116ACEDE1FCD4D6C00E12ACA /* zl-shipin@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "zl-shipin@2x.png"; sourceTree = ""; }; + 116ACEDF1FCD4D6C00E12ACA /* zl-shipin@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "zl-shipin@3x.png"; sourceTree = ""; }; + 116ACEE21FCD4D8B00E12ACA /* zl-shiping@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "zl-shiping@2x.png"; sourceTree = ""; }; + 116ACEE31FCD4D8B00E12ACA /* zl-shiping@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "zl-shiping@3x.png"; sourceTree = ""; }; + 116ACEE61FCD52BB00E12ACA /* luzhi@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "luzhi@2x.png"; sourceTree = ""; }; + 116ACEE71FCD52BB00E12ACA /* luzhi@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "luzhi@3x.png"; sourceTree = ""; }; + 116ACEEA1FCD609400E12ACA /* nation.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = nation.plist; sourceTree = ""; }; + 116ACEEC1FCD63BB00E12ACA /* addMark@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "addMark@2x.png"; sourceTree = ""; }; + 116ACEED1FCD63BB00E12ACA /* addMark@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "addMark@3x.png"; sourceTree = ""; }; + 117700F91FEB57180038D4E1 /* PublicYuanquanViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PublicYuanquanViewController.h; sourceTree = ""; }; + 117700FA1FEB57180038D4E1 /* PublicYuanquanViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PublicYuanquanViewController.m; sourceTree = ""; }; + 117700FC1FEB5C9D0038D4E1 /* YuanquanDetailViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = YuanquanDetailViewController.h; sourceTree = ""; }; + 117700FD1FEB5C9D0038D4E1 /* YuanquanDetailViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = YuanquanDetailViewController.m; sourceTree = ""; }; + 1178FCA42003376900162248 /* home_background@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "home_background@3x.png"; sourceTree = ""; }; + 1178FCA52003376900162248 /* home_background@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "home_background@2x.png"; sourceTree = ""; }; + 1178FCA82003384300162248 /* message@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "message@3x.png"; sourceTree = ""; }; + 1178FCA92003384300162248 /* near@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "near@3x.png"; sourceTree = ""; }; + 1178FCAA2003384300162248 /* near@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "near@2x.png"; sourceTree = ""; }; + 1178FCAB2003384400162248 /* message@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "message@2x.png"; sourceTree = ""; }; + 1178FCB0200371C400162248 /* new_realname_icon@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "new_realname_icon@3x.png"; sourceTree = ""; }; + 1178FCB1200371C400162248 /* new_tuan_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "new_tuan_icon@2x.png"; sourceTree = ""; }; + 1178FCB2200371C500162248 /* new_enterprise_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "new_enterprise_icon@2x.png"; sourceTree = ""; }; + 1178FCB3200371C500162248 /* new_tuan_icon@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "new_tuan_icon@3x.png"; sourceTree = ""; }; + 1178FCB4200371C500162248 /* new_phone_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "new_phone_icon@2x.png"; sourceTree = ""; }; + 1178FCB5200371C600162248 /* new_realname_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "new_realname_icon@2x.png"; sourceTree = ""; }; + 1178FCB6200371C600162248 /* new_enterprise_icon@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "new_enterprise_icon@3x.png"; sourceTree = ""; }; + 1178FCB7200371C600162248 /* new_phone_icon@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "new_phone_icon@3x.png"; sourceTree = ""; }; + 117B0C861FDE81A5000C9E21 /* enterprise_hui_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "enterprise_hui_icon@2x.png"; sourceTree = ""; }; + 117B0C871FDE81A5000C9E21 /* enterprise_hui_icon@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "enterprise_hui_icon@3x.png"; sourceTree = ""; }; + 117B0C8A1FDE81AF000C9E21 /* enterprise_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "enterprise_icon@2x.png"; sourceTree = ""; }; + 117B0C8B1FDE81AF000C9E21 /* enterprise_icon@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "enterprise_icon@3x.png"; sourceTree = ""; }; + 118069BB1FC50A4500893BE7 /* ForgetPwdViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ForgetPwdViewController.h; sourceTree = ""; }; + 118069BC1FC50A4500893BE7 /* ForgetPwdViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ForgetPwdViewController.m; sourceTree = ""; }; + 118069DE1FC54D0C00893BE7 /* delete_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "delete_icon@2x.png"; sourceTree = ""; }; + 118069DF1FC54D0C00893BE7 /* delete_icon@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "delete_icon@3x.png"; sourceTree = ""; }; + 118069F21FC560CB00893BE7 /* qq_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "qq_icon@2x.png"; sourceTree = ""; }; + 118069F31FC560CB00893BE7 /* qq_icon@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "qq_icon@3x.png"; sourceTree = ""; }; + 118069F61FC5612200893BE7 /* weibo_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "weibo_icon@2x.png"; sourceTree = ""; }; + 118069F71FC5612200893BE7 /* weibo_icon@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "weibo_icon@3x.png"; sourceTree = ""; }; + 118069FA1FC5617300893BE7 /* weixin_icon@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "weixin_icon@3x.png"; sourceTree = ""; }; + 118069FB1FC5617300893BE7 /* weixin_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "weixin_icon@2x.png"; sourceTree = ""; }; + 118069FF1FC5651F00893BE7 /* UMMobClick.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = UMMobClick.framework; sourceTree = ""; }; + 11806A021FC5651F00893BE7 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/UMSocialLocalizable.strings; sourceTree = ""; }; + 11806A041FC5652000893BE7 /* UMSocial.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UMSocial.h; sourceTree = ""; }; + 11806A051FC5652000893BE7 /* UMSocialAccountManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UMSocialAccountManager.h; sourceTree = ""; }; + 11806A061FC5652000893BE7 /* UMSocialBar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UMSocialBar.h; sourceTree = ""; }; + 11806A071FC5652000893BE7 /* UMSocialConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UMSocialConfig.h; sourceTree = ""; }; + 11806A081FC5652000893BE7 /* UMSocialControllerService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UMSocialControllerService.h; sourceTree = ""; }; + 11806A091FC5652000893BE7 /* UMSocialControllerServiceComment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UMSocialControllerServiceComment.h; sourceTree = ""; }; + 11806A0A1FC5652000893BE7 /* UMSocialData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UMSocialData.h; sourceTree = ""; }; + 11806A0B1FC5652000893BE7 /* UMSocialDataService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UMSocialDataService.h; sourceTree = ""; }; + 11806A0C1FC5652000893BE7 /* UMSocialSnsData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UMSocialSnsData.h; sourceTree = ""; }; + 11806A0D1FC5652000893BE7 /* UMSocialSnsPlatformManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UMSocialSnsPlatformManager.h; sourceTree = ""; }; + 11806A0E1FC5652000893BE7 /* UMSocialSnsService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UMSocialSnsService.h; sourceTree = ""; }; + 11806A0F1FC5652000893BE7 /* libUMSocial_Sdk_5.2.1.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libUMSocial_Sdk_5.2.1.a; sourceTree = ""; }; + 11806A111FC5652000893BE7 /* UMSCommentDetailController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = UMSCommentDetailController.xib; sourceTree = ""; }; + 11806A121FC5652000893BE7 /* UMSCommentInputController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = UMSCommentInputController.xib; sourceTree = ""; }; + 11806A131FC5652000893BE7 /* UMSCommentInputControlleriPad.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = UMSCommentInputControlleriPad.xib; sourceTree = ""; }; + 11806A141FC5652000893BE7 /* UMShareEditViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = UMShareEditViewController.xib; sourceTree = ""; }; + 11806A151FC5652000893BE7 /* UMShareEditViewControlleriPad.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = UMShareEditViewControlleriPad.xib; sourceTree = ""; }; + 11806A161FC5652000893BE7 /* UMSLoginViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = UMSLoginViewController.xib; sourceTree = ""; }; + 11806A171FC5652000893BE7 /* UMSnsAccountViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = UMSnsAccountViewController.xib; sourceTree = ""; }; + 11806A181FC5652000893BE7 /* UMSShareListController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = UMSShareListController.xib; sourceTree = ""; }; + 11806A191FC5652000893BE7 /* UMSocialSDKResourcesNew.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = UMSocialSDKResourcesNew.bundle; sourceTree = ""; }; + 11806A1A1FC5652000893BE7 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/UMSocialLocalizable.strings"; sourceTree = ""; }; + 11806A1D1FC5652000893BE7 /* libSocialSinaSSO.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libSocialSinaSSO.a; sourceTree = ""; }; + 11806A1E1FC5652000893BE7 /* libWeiboSDK.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libWeiboSDK.a; sourceTree = ""; }; + 11806A1F1FC5652000893BE7 /* UMSocialSinaSSOHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UMSocialSinaSSOHandler.h; sourceTree = ""; }; + 11806A201FC5652000893BE7 /* WBHttpRequest+WeiboGame.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "WBHttpRequest+WeiboGame.h"; sourceTree = ""; }; + 11806A211FC5652000893BE7 /* WBHttpRequest+WeiboShare.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "WBHttpRequest+WeiboShare.h"; sourceTree = ""; }; + 11806A221FC5652000893BE7 /* WBHttpRequest+WeiboToken.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "WBHttpRequest+WeiboToken.h"; sourceTree = ""; }; + 11806A231FC5652000893BE7 /* WBHttpRequest+WeiboUser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "WBHttpRequest+WeiboUser.h"; sourceTree = ""; }; + 11806A241FC5652000893BE7 /* WBHttpRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WBHttpRequest.h; sourceTree = ""; }; + 11806A251FC5652000893BE7 /* WBSDKBasicButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WBSDKBasicButton.h; sourceTree = ""; }; + 11806A261FC5652000893BE7 /* WBSDKCommentButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WBSDKCommentButton.h; sourceTree = ""; }; + 11806A271FC5652000893BE7 /* WBSDKRelationshipButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WBSDKRelationshipButton.h; sourceTree = ""; }; + 11806A281FC5652000893BE7 /* WeiboSDK+Statistics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "WeiboSDK+Statistics.h"; sourceTree = ""; }; + 11806A291FC5652000893BE7 /* WeiboSDK.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = WeiboSDK.bundle; sourceTree = ""; }; + 11806A2A1FC5652000893BE7 /* WeiboSDK.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WeiboSDK.h; sourceTree = ""; }; + 11806A2B1FC5652000893BE7 /* WeiboUser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WeiboUser.h; sourceTree = ""; }; + 11806A2D1FC5652000893BE7 /* libSocialQQ.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libSocialQQ.a; sourceTree = ""; }; + 11806A2E1FC5652000893BE7 /* TencentOpenAPI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = TencentOpenAPI.framework; sourceTree = ""; }; + 11806A2F1FC5652000893BE7 /* TencentOpenApi_IOS_Bundle.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = TencentOpenApi_IOS_Bundle.bundle; sourceTree = ""; }; + 11806A301FC5652000893BE7 /* UMSocialQQHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UMSocialQQHandler.h; sourceTree = ""; }; + 11806A321FC5652000893BE7 /* libSocialWechat.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libSocialWechat.a; sourceTree = ""; }; + 11806A331FC5652000893BE7 /* libWeChatSDK.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libWeChatSDK.a; sourceTree = ""; }; + 11806A341FC5652000893BE7 /* README.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.txt; sourceTree = ""; }; + 11806A351FC5652000893BE7 /* UMSocialWechatHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UMSocialWechatHandler.h; sourceTree = ""; }; + 11806A361FC5652000893BE7 /* WechatAuthSDK.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WechatAuthSDK.h; sourceTree = ""; }; + 11806A371FC5652000893BE7 /* WXApi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WXApi.h; sourceTree = ""; }; + 11806A381FC5652000893BE7 /* WXApiObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WXApiObject.h; sourceTree = ""; }; + 11806A4E1FC570A900893BE7 /* libsqlite3.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libsqlite3.tbd; path = usr/lib/libsqlite3.tbd; sourceTree = SDKROOT; }; + 11806A501FC581FE00893BE7 /* selectDuigou@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "selectDuigou@2x.png"; sourceTree = ""; }; + 11806A511FC581FF00893BE7 /* selectDuigou@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "selectDuigou@3x.png"; sourceTree = ""; }; + 11806A541FC5823100893BE7 /* norDuigou@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "norDuigou@3x.png"; sourceTree = ""; }; + 11806A551FC5823100893BE7 /* norDuigou@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "norDuigou@2x.png"; sourceTree = ""; }; + 118CC1B61FFB50A1004CC0D5 /* TopicDetailViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TopicDetailViewController.h; sourceTree = ""; }; + 118CC1B71FFB50A1004CC0D5 /* TopicDetailViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TopicDetailViewController.m; sourceTree = ""; }; + 118CC1B91FFB50CF004CC0D5 /* TopicDetailHeaderView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TopicDetailHeaderView.h; sourceTree = ""; }; + 118CC1BA1FFB50CF004CC0D5 /* TopicDetailHeaderView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TopicDetailHeaderView.m; sourceTree = ""; }; + 118CC1C01FFB6DAC004CC0D5 /* fire@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "fire@3x.png"; sourceTree = ""; }; + 118CC1C11FFB6DAC004CC0D5 /* fire@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "fire@2x.png"; sourceTree = ""; }; + 118CC1C41FFB7494004CC0D5 /* YuanquanDetailHeaderView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = YuanquanDetailHeaderView.h; sourceTree = ""; }; + 118CC1C51FFB7494004CC0D5 /* YuanquanDetailHeaderView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = YuanquanDetailHeaderView.m; sourceTree = ""; }; + 118CDDDF1FC0077C00E41475 /* JQQY.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = JQQY.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 118CDDEB1FC0077C00E41475 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 118CDDF01FC0077C00E41475 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 118CDDF11FC0077C00E41475 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + 118CDDFC1FC007BE00E41475 /* UIView+ZCExtension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+ZCExtension.h"; sourceTree = ""; }; + 118CDDFD1FC007BE00E41475 /* UIView+ZCExtension.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+ZCExtension.m"; sourceTree = ""; }; + 118CDDFF1FC007BE00E41475 /* CustomNavigationView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CustomNavigationView.h; sourceTree = ""; }; + 118CDE001FC007BE00E41475 /* CustomNavigationView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CustomNavigationView.m; sourceTree = ""; }; + 118CDE081FC007BE00E41475 /* MJRefreshAutoFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshAutoFooter.h; sourceTree = ""; }; + 118CDE091FC007BE00E41475 /* MJRefreshAutoFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshAutoFooter.m; sourceTree = ""; }; + 118CDE0A1FC007BE00E41475 /* MJRefreshBackFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshBackFooter.h; sourceTree = ""; }; + 118CDE0B1FC007BE00E41475 /* MJRefreshBackFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshBackFooter.m; sourceTree = ""; }; + 118CDE0C1FC007BE00E41475 /* MJRefreshComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshComponent.h; sourceTree = ""; }; + 118CDE0D1FC007BE00E41475 /* MJRefreshComponent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshComponent.m; sourceTree = ""; }; + 118CDE0E1FC007BE00E41475 /* MJRefreshFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshFooter.h; sourceTree = ""; }; + 118CDE0F1FC007BE00E41475 /* MJRefreshFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshFooter.m; sourceTree = ""; }; + 118CDE101FC007BE00E41475 /* MJRefreshHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshHeader.h; sourceTree = ""; }; + 118CDE111FC007BE00E41475 /* MJRefreshHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshHeader.m; sourceTree = ""; }; + 118CDE151FC007BE00E41475 /* MJRefreshAutoGifFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshAutoGifFooter.h; sourceTree = ""; }; + 118CDE161FC007BE00E41475 /* MJRefreshAutoGifFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshAutoGifFooter.m; sourceTree = ""; }; + 118CDE171FC007BE00E41475 /* MJRefreshAutoNormalFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshAutoNormalFooter.h; sourceTree = ""; }; + 118CDE181FC007BE00E41475 /* MJRefreshAutoNormalFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshAutoNormalFooter.m; sourceTree = ""; }; + 118CDE191FC007BE00E41475 /* MJRefreshAutoStateFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshAutoStateFooter.h; sourceTree = ""; }; + 118CDE1A1FC007BE00E41475 /* MJRefreshAutoStateFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshAutoStateFooter.m; sourceTree = ""; }; + 118CDE1C1FC007BE00E41475 /* MJRefreshBackGifFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshBackGifFooter.h; sourceTree = ""; }; + 118CDE1D1FC007BE00E41475 /* MJRefreshBackGifFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshBackGifFooter.m; sourceTree = ""; }; + 118CDE1E1FC007BE00E41475 /* MJRefreshBackNormalFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshBackNormalFooter.h; sourceTree = ""; }; + 118CDE1F1FC007BE00E41475 /* MJRefreshBackNormalFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshBackNormalFooter.m; sourceTree = ""; }; + 118CDE201FC007BE00E41475 /* MJRefreshBackStateFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshBackStateFooter.h; sourceTree = ""; }; + 118CDE211FC007BE00E41475 /* MJRefreshBackStateFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshBackStateFooter.m; sourceTree = ""; }; + 118CDE231FC007BE00E41475 /* MJRefreshGifHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshGifHeader.h; sourceTree = ""; }; + 118CDE241FC007BE00E41475 /* MJRefreshGifHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshGifHeader.m; sourceTree = ""; }; + 118CDE251FC007BE00E41475 /* MJRefreshNormalHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshNormalHeader.h; sourceTree = ""; }; + 118CDE261FC007BE00E41475 /* MJRefreshNormalHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshNormalHeader.m; sourceTree = ""; }; + 118CDE271FC007BE00E41475 /* MJRefreshStateHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshStateHeader.h; sourceTree = ""; }; + 118CDE281FC007BE00E41475 /* MJRefreshStateHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshStateHeader.m; sourceTree = ""; }; + 118CDE291FC007BE00E41475 /* MJRefresh.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = MJRefresh.bundle; sourceTree = ""; }; + 118CDE2A1FC007BE00E41475 /* MJRefresh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefresh.h; sourceTree = ""; }; + 118CDE2B1FC007BE00E41475 /* MJRefreshConst.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshConst.h; sourceTree = ""; }; + 118CDE2C1FC007BE00E41475 /* MJRefreshConst.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshConst.m; sourceTree = ""; }; + 118CDE2D1FC007BE00E41475 /* NSBundle+MJRefresh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSBundle+MJRefresh.h"; sourceTree = ""; }; + 118CDE2E1FC007BE00E41475 /* NSBundle+MJRefresh.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSBundle+MJRefresh.m"; sourceTree = ""; }; + 118CDE2F1FC007BE00E41475 /* UIScrollView+MJExtension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIScrollView+MJExtension.h"; sourceTree = ""; }; + 118CDE301FC007BE00E41475 /* UIScrollView+MJExtension.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIScrollView+MJExtension.m"; sourceTree = ""; }; + 118CDE311FC007BE00E41475 /* UIScrollView+MJRefresh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIScrollView+MJRefresh.h"; sourceTree = ""; }; + 118CDE321FC007BE00E41475 /* UIScrollView+MJRefresh.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIScrollView+MJRefresh.m"; sourceTree = ""; }; + 118CDE331FC007BE00E41475 /* UIView+MJExtension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+MJExtension.h"; sourceTree = ""; }; + 118CDE341FC007BE00E41475 /* UIView+MJExtension.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+MJExtension.m"; sourceTree = ""; }; + 118CDE361FC007BE00E41475 /* back_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "back_icon@2x.png"; sourceTree = ""; }; + 118CDE371FC007BE00E41475 /* back_icon@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "back_icon@3x.png"; sourceTree = ""; }; + 118CDE381FC007BE00E41475 /* close_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "close_icon@2x.png"; sourceTree = ""; }; + 118CDE391FC007BE00E41475 /* close_icon@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "close_icon@3x.png"; sourceTree = ""; }; + 118CDE3D1FC007BE00E41475 /* ActivityViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ActivityViewController.h; sourceTree = ""; }; + 118CDE3E1FC007BE00E41475 /* ActivityViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ActivityViewController.m; sourceTree = ""; }; + 118CDE431FC007BE00E41475 /* DiscoverViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DiscoverViewController.h; sourceTree = ""; }; + 118CDE441FC007BE00E41475 /* DiscoverViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DiscoverViewController.m; sourceTree = ""; }; + 118CDE491FC007BE00E41475 /* HomeViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HomeViewController.h; sourceTree = ""; }; + 118CDE4A1FC007BE00E41475 /* HomeViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HomeViewController.m; sourceTree = ""; }; + 118CDE4F1FC007BE00E41475 /* MineViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MineViewController.h; sourceTree = ""; }; + 118CDE501FC007BE00E41475 /* MineViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MineViewController.m; sourceTree = ""; }; + 118CDE531FC007BE00E41475 /* MineTopView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MineTopView.h; sourceTree = ""; }; + 118CDE541FC007BE00E41475 /* MineTopView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MineTopView.m; sourceTree = ""; }; + 118CDE591FC007BE00E41475 /* RegisterViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RegisterViewController.h; sourceTree = ""; }; + 118CDE5A1FC007BE00E41475 /* RegisterViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RegisterViewController.m; sourceTree = ""; }; + 118CDE621FC007BE00E41475 /* InputTextView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InputTextView.h; sourceTree = ""; }; + 118CDE631FC007BE00E41475 /* InputTextView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = InputTextView.m; sourceTree = ""; }; + 118CDE641FC007BF00E41475 /* PrefixHeader.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PrefixHeader.pch; sourceTree = ""; }; + 118CDE671FC007BF00E41475 /* RootNavigationController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RootNavigationController.h; sourceTree = ""; }; + 118CDE681FC007BF00E41475 /* RootNavigationController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RootNavigationController.m; sourceTree = ""; }; + 118CDE6A1FC007BF00E41475 /* RootViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RootViewController.h; sourceTree = ""; }; + 118CDE6B1FC007BF00E41475 /* RootViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RootViewController.m; sourceTree = ""; }; + 118CDE6C1FC007BF00E41475 /* ZCRefreshTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZCRefreshTableViewController.h; sourceTree = ""; }; + 118CDE6D1FC007BF00E41475 /* ZCRefreshTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ZCRefreshTableViewController.m; sourceTree = ""; }; + 118CDE6F1FC007BF00E41475 /* MainTabBarController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MainTabBarController.h; sourceTree = ""; }; + 118CDE701FC007BF00E41475 /* MainTabBarController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MainTabBarController.m; sourceTree = ""; }; + 118CDE721FC007BF00E41475 /* AppDelegate+AppService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "AppDelegate+AppService.h"; sourceTree = ""; }; + 118CDE731FC007BF00E41475 /* AppDelegate+AppService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "AppDelegate+AppService.m"; sourceTree = ""; }; + 118CDE741FC007BF00E41475 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; + 118CDE751FC007BF00E41475 /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; + 118CDEA31FC0093B00E41475 /* Main.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Main.storyboard; sourceTree = ""; }; + 118CDEA41FC0093B00E41475 /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = ""; }; + 118CDEA91FC0142100E41475 /* ThirdLoginView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ThirdLoginView.h; sourceTree = ""; }; + 118CDEAA1FC0142100E41475 /* ThirdLoginView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ThirdLoginView.m; sourceTree = ""; }; + 118CDEAD1FC0286900E41475 /* PhoneCodeViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PhoneCodeViewController.h; sourceTree = ""; }; + 118CDEAE1FC0286900E41475 /* PhoneCodeViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PhoneCodeViewController.m; sourceTree = ""; }; + 118CDEB01FC02BA200E41475 /* VerifyCodeButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VerifyCodeButton.h; sourceTree = ""; }; + 118CDEB11FC02BA200E41475 /* VerifyCodeButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VerifyCodeButton.m; sourceTree = ""; }; + 118CDEB31FC02C0F00E41475 /* ZCTextFieldLineView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ZCTextFieldLineView.m; sourceTree = ""; }; + 118CDEB41FC02C0F00E41475 /* ZCTextFieldLineView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZCTextFieldLineView.h; sourceTree = ""; }; + 118DA3321FD514BC00246522 /* launch_5_1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = launch_5_1.png; sourceTree = ""; }; + 118DA3331FD514BC00246522 /* launch_5_2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = launch_5_2.png; sourceTree = ""; }; + 118DA3341FD514BC00246522 /* launch_5_3.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = launch_5_3.png; sourceTree = ""; }; + 118DA3351FD514BC00246522 /* launch_5_4.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = launch_5_4.png; sourceTree = ""; }; + 118DA3371FD514BD00246522 /* launch_6_1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = launch_6_1.png; sourceTree = ""; }; + 118DA3381FD514BD00246522 /* launch_6_2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = launch_6_2.png; sourceTree = ""; }; + 118DA3391FD514BD00246522 /* launch_6_3.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = launch_6_3.png; sourceTree = ""; }; + 118DA33A1FD514BD00246522 /* launch_6_4.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = launch_6_4.png; sourceTree = ""; }; + 118DA33C1FD514BD00246522 /* launch_4_1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = launch_4_1.png; sourceTree = ""; }; + 118DA33D1FD514BD00246522 /* launch_4_2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = launch_4_2.png; sourceTree = ""; }; + 118DA33E1FD514BD00246522 /* launch_4_3.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = launch_4_3.png; sourceTree = ""; }; + 118DA33F1FD514BD00246522 /* launch_4_4.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = launch_4_4.png; sourceTree = ""; }; + 118DA3411FD514BD00246522 /* launch_6p_1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = launch_6p_1.png; sourceTree = ""; }; + 118DA3421FD514BD00246522 /* launch_6p_2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = launch_6p_2.png; sourceTree = ""; }; + 118DA3431FD514BD00246522 /* launch_6p_3.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = launch_6p_3.png; sourceTree = ""; }; + 118DA3441FD514BD00246522 /* launch_6p_4.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = launch_6p_4.png; sourceTree = ""; }; + 11908D921FCE9B0B00B8569F /* share_white_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "share_white_icon@2x.png"; sourceTree = ""; }; + 11908D931FCE9B0C00B8569F /* share_white_icon@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "share_white_icon@3x.png"; sourceTree = ""; }; + 11908D971FCEB2B200B8569F /* home_hui@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "home_hui@3x.png"; sourceTree = ""; }; + 11908D981FCEB2B300B8569F /* mine@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "mine@2x.png"; sourceTree = ""; }; + 11908D991FCEB2B300B8569F /* home_hui@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "home_hui@2x.png"; sourceTree = ""; }; + 11908D9A1FCEB2B300B8569F /* home@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "home@2x.png"; sourceTree = ""; }; + 11908D9B1FCEB2B300B8569F /* home@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "home@3x.png"; sourceTree = ""; }; + 11908D9C1FCEB2B300B8569F /* mine_hui@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "mine_hui@2x.png"; sourceTree = ""; }; + 11908D9D1FCEB2B300B8569F /* mine_hui@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "mine_hui@3x.png"; sourceTree = ""; }; + 11908D9E1FCEB2B300B8569F /* activity@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "activity@2x.png"; sourceTree = ""; }; + 11908D9F1FCEB2B300B8569F /* activity_hui@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "activity_hui@2x.png"; sourceTree = ""; }; + 11908DA01FCEB2B300B8569F /* activity@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "activity@3x.png"; sourceTree = ""; }; + 11908DA11FCEB2B400B8569F /* discover@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "discover@3x.png"; sourceTree = ""; }; + 11908DA21FCEB2B400B8569F /* mine@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "mine@3x.png"; sourceTree = ""; }; + 11908DA31FCEB2B400B8569F /* discover_hui@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "discover_hui@2x.png"; sourceTree = ""; }; + 11908DA41FCEB2B400B8569F /* discover@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "discover@2x.png"; sourceTree = ""; }; + 11908DA51FCEB2B400B8569F /* activity_hui@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "activity_hui@3x.png"; sourceTree = ""; }; + 11908DA61FCEB2B400B8569F /* discover_hui@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "discover_hui@3x.png"; sourceTree = ""; }; + 11908DB81FCEB5BE00B8569F /* mine_2_0@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "mine_2_0@3x.png"; sourceTree = ""; }; + 11908DB91FCEB5BE00B8569F /* mine_2_1@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "mine_2_1@3x.png"; sourceTree = ""; }; + 11908DBA1FCEB5BE00B8569F /* mine_2_1@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "mine_2_1@2x.png"; sourceTree = ""; }; + 11908DBB1FCEB5BE00B8569F /* mine_2_0@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "mine_2_0@2x.png"; sourceTree = ""; }; + 11908DBC1FCEB5BE00B8569F /* mine_0_1@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "mine_0_1@2x.png"; sourceTree = ""; }; + 11908DBD1FCEB5BE00B8569F /* mine_1_0@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "mine_1_0@3x.png"; sourceTree = ""; }; + 11908DBE1FCEB5BF00B8569F /* mine_0_0@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "mine_0_0@2x.png"; sourceTree = ""; }; + 11908DBF1FCEB5BF00B8569F /* mine_1_0@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "mine_1_0@2x.png"; sourceTree = ""; }; + 11908DC01FCEB5BF00B8569F /* mine_0_1@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "mine_0_1@3x.png"; sourceTree = ""; }; + 11908DC11FCEB5BF00B8569F /* mine_0_0@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "mine_0_0@3x.png"; sourceTree = ""; }; + 11908DC21FCEB5BF00B8569F /* mine_1_2@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "mine_1_2@2x.png"; sourceTree = ""; }; + 11908DC31FCEB5BF00B8569F /* mine_1_2@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "mine_1_2@3x.png"; sourceTree = ""; }; + 11908DC41FCEB5BF00B8569F /* mine_1_1@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "mine_1_1@2x.png"; sourceTree = ""; }; + 11908DC51FCEB5C000B8569F /* mine_1_1@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "mine_1_1@3x.png"; sourceTree = ""; }; + 11908DD41FCEB84100B8569F /* realname_icon@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "realname_icon@3x.png"; sourceTree = ""; }; + 11908DD51FCEB84100B8569F /* phone_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "phone_icon@2x.png"; sourceTree = ""; }; + 11908DD61FCEB84100B8569F /* tuan_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "tuan_icon@2x.png"; sourceTree = ""; }; + 11908DD71FCEB84200B8569F /* phone_icon@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "phone_icon@3x.png"; sourceTree = ""; }; + 11908DD81FCEB84200B8569F /* tuan_icon@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "tuan_icon@3x.png"; sourceTree = ""; }; + 11908DD91FCEB84300B8569F /* realname_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "realname_icon@2x.png"; sourceTree = ""; }; + 11908DE01FCEBE8200B8569F /* tuan_hui_icon@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "tuan_hui_icon@3x.png"; sourceTree = ""; }; + 11908DE11FCEBE8200B8569F /* phone_hui_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "phone_hui_icon@2x.png"; sourceTree = ""; }; + 11908DE21FCEBE8200B8569F /* tuan_hui_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "tuan_hui_icon@2x.png"; sourceTree = ""; }; + 11908DE31FCEBE8200B8569F /* phone_hui_icon@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "phone_hui_icon@3x.png"; sourceTree = ""; }; + 11908DE41FCEBE8300B8569F /* realname_hui_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "realname_hui_icon@2x.png"; sourceTree = ""; }; + 11908DE51FCEBE8300B8569F /* realname_hui_icon@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "realname_hui_icon@3x.png"; sourceTree = ""; }; + 11908DEC1FCEBF5E00B8569F /* password_icon@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "password_icon@3x.png"; sourceTree = ""; }; + 11908DED1FCEBF5E00B8569F /* password_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "password_icon@2x.png"; sourceTree = ""; }; + 11908DEE1FCEBF5E00B8569F /* loginphone_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "loginphone_icon@2x.png"; sourceTree = ""; }; + 11908DEF1FCEBF5E00B8569F /* loginphone_icon@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "loginphone_icon@3x.png"; sourceTree = ""; }; + 11908DF01FCEBF5F00B8569F /* sex_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sex_icon@2x.png"; sourceTree = ""; }; + 11908DF11FCEBF5F00B8569F /* sex_icon@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sex_icon@3x.png"; sourceTree = ""; }; + 11A1D9351FCBDD3D005CA3E8 /* act_time@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "act_time@3x.png"; sourceTree = ""; }; + 11A1D9361FCBDD3D005CA3E8 /* act_time@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "act_time@2x.png"; sourceTree = ""; }; + 11A1D9391FCBDD61005CA3E8 /* act_place@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "act_place@2x.png"; sourceTree = ""; }; + 11A1D93A1FCBDD61005CA3E8 /* act_place@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "act_place@3x.png"; sourceTree = ""; }; + 11A1D93D1FCBDD86005CA3E8 /* act_renshu@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "act_renshu@3x.png"; sourceTree = ""; }; + 11A1D93E1FCBDD86005CA3E8 /* act_renshu@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "act_renshu@2x.png"; sourceTree = ""; }; + 11A1D9411FCBDDB8005CA3E8 /* act_money@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "act_money@3x.png"; sourceTree = ""; }; + 11A1D9421FCBDDB8005CA3E8 /* act_money@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "act_money@2x.png"; sourceTree = ""; }; + 11A1D9451FCBDDE8005CA3E8 /* act_phone@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "act_phone@3x.png"; sourceTree = ""; }; + 11A1D9461FCBDDE8005CA3E8 /* act_phone@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "act_phone@2x.png"; sourceTree = ""; }; + 11A1D9491FCBDE3D005CA3E8 /* xiaosanjiao_up@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "xiaosanjiao_up@3x.png"; sourceTree = ""; }; + 11A1D94A1FCBDE3D005CA3E8 /* xiaosanjiao_up@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "xiaosanjiao_up@2x.png"; sourceTree = ""; }; + 11A1D94D1FCBDE66005CA3E8 /* xiaosanjiao_down@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "xiaosanjiao_down@3x.png"; sourceTree = ""; }; + 11A1D94E1FCBDE66005CA3E8 /* xiaosanjiao_down@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "xiaosanjiao_down@2x.png"; sourceTree = ""; }; + 11A1D9511FCBE081005CA3E8 /* msg@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "msg@3x.png"; sourceTree = ""; }; + 11A1D9521FCBE082005CA3E8 /* msg@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "msg@2x.png"; sourceTree = ""; }; + 11A1D9551FCBE174005CA3E8 /* clickLike@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "clickLike@2x.png"; sourceTree = ""; }; + 11A1D9561FCBE174005CA3E8 /* clickLike@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "clickLike@3x.png"; sourceTree = ""; }; + 11A1D9591FCBE1AA005CA3E8 /* like@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "like@2x.png"; sourceTree = ""; }; + 11A1D95A1FCBE1AA005CA3E8 /* like@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "like@3x.png"; sourceTree = ""; }; + 11A1D95D1FCBE1EB005CA3E8 /* Brenshu@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Brenshu@3x.png"; sourceTree = ""; }; + 11A1D95E1FCBE1EB005CA3E8 /* Brenshu@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Brenshu@2x.png"; sourceTree = ""; }; + 11A1D9611FCBE23C005CA3E8 /* icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon@2x.png"; sourceTree = ""; }; + 11A1D9621FCBE23C005CA3E8 /* icon@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon@3x.png"; sourceTree = ""; }; + 11A1D9651FCBE266005CA3E8 /* act_look@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "act_look@2x.png"; sourceTree = ""; }; + 11A1D9661FCBE267005CA3E8 /* act_look@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "act_look@3x.png"; sourceTree = ""; }; + 11A1D9691FCBE28B005CA3E8 /* act_share@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "act_share@2x.png"; sourceTree = ""; }; + 11A1D96A1FCBE28B005CA3E8 /* act_share@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "act_share@3x.png"; sourceTree = ""; }; + 11A1D96D1FCBE2CE005CA3E8 /* act_message@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "act_message@3x.png"; sourceTree = ""; }; + 11A1D96E1FCBE2CE005CA3E8 /* act_message@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "act_message@2x.png"; sourceTree = ""; }; + 11A1D9711FCBE2F3005CA3E8 /* act_baoming@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "act_baoming@3x.png"; sourceTree = ""; }; + 11A1D9721FCBE2F3005CA3E8 /* act_baoming@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "act_baoming@2x.png"; sourceTree = ""; }; + 11A1D9751FCBE31C005CA3E8 /* Newpinglun@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Newpinglun@3x.png"; sourceTree = ""; }; + 11A1D9761FCBE31C005CA3E8 /* Newpinglun@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Newpinglun@2x.png"; sourceTree = ""; }; + 11A1D9791FCC0DCD005CA3E8 /* icon2_1@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon2_1@3x.png"; sourceTree = ""; }; + 11A1D97A1FCC0DCD005CA3E8 /* icon2_1@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon2_1@2x.png"; sourceTree = ""; }; + 11A1D97D1FCC0E03005CA3E8 /* icon2_2@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon2_2@3x.png"; sourceTree = ""; }; + 11A1D97E1FCC0E03005CA3E8 /* icon2_2@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon2_2@2x.png"; sourceTree = ""; }; + 11A1D9811FCC0E24005CA3E8 /* icon2_3@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon2_3@3x.png"; sourceTree = ""; }; + 11A1D9821FCC0E25005CA3E8 /* icon2_3@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon2_3@2x.png"; sourceTree = ""; }; + 11A1D9851FCC0E75005CA3E8 /* icon2_4@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon2_4@3x.png"; sourceTree = ""; }; + 11A1D9861FCC0E76005CA3E8 /* icon2_4@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon2_4@2x.png"; sourceTree = ""; }; + 11A1D9891FCC0E9B005CA3E8 /* icon2_5@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon2_5@2x.png"; sourceTree = ""; }; + 11A1D98A1FCC0E9C005CA3E8 /* icon2_5@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "icon2_5@3x.png"; sourceTree = ""; }; + 11A1D98D1FCC27A1005CA3E8 /* redLike@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "redLike@3x.png"; sourceTree = ""; }; + 11A1D98E1FCC27A1005CA3E8 /* redLike@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "redLike@2x.png"; sourceTree = ""; }; + 11A767BF1FF1EF8C0039ABEC /* ImgTextImg.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ImgTextImg.h; sourceTree = ""; }; + 11A767C01FF1EF8C0039ABEC /* ImgTextImg.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ImgTextImg.m; sourceTree = ""; }; + 11A767C21FF1FA550039ABEC /* ZCTextView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZCTextView.h; sourceTree = ""; }; + 11A767C31FF1FA550039ABEC /* ZCTextView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ZCTextView.m; sourceTree = ""; }; + 11A963EB1FFF0EBD00094A09 /* YuanquanCommentModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = YuanquanCommentModel.h; sourceTree = ""; }; + 11A963EC1FFF0EBD00094A09 /* YuanquanCommentModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = YuanquanCommentModel.m; sourceTree = ""; }; + 11B4ED41200EDF0C00A67D35 /* UIImage+ImgSize.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+ImgSize.h"; sourceTree = ""; }; + 11B4ED42200EDF0D00A67D35 /* UIImage+ImgSize.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+ImgSize.m"; sourceTree = ""; }; + 11CCD1AE1FFDF56E00668A7A /* yfcs@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "yfcs@2x.png"; sourceTree = ""; }; + 11CCD1AF1FFDF56E00668A7A /* qyzx@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "qyzx@3x.png"; sourceTree = ""; }; + 11CCD1B01FFDF56F00668A7A /* topic_public@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "topic_public@2x.png"; sourceTree = ""; }; + 11CCD1B11FFDF56F00668A7A /* yq_video@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "yq_video@3x.png"; sourceTree = ""; }; + 11CCD1B21FFDF56F00668A7A /* topic_public@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "topic_public@3x.png"; sourceTree = ""; }; + 11CCD1B31FFDF56F00668A7A /* xttj@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "xttj@2x.png"; sourceTree = ""; }; + 11CCD1B41FFDF56F00668A7A /* xttj@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "xttj@3x.png"; sourceTree = ""; }; + 11CCD1B51FFDF57000668A7A /* yq_like_no@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "yq_like_no@2x.png"; sourceTree = ""; }; + 11CCD1B61FFDF57000668A7A /* yfcs@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "yfcs@3x.png"; sourceTree = ""; }; + 11CCD1B71FFDF57000668A7A /* yq_comment@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "yq_comment@2x.png"; sourceTree = ""; }; + 11CCD1B81FFDF57000668A7A /* yq_comment@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "yq_comment@3x.png"; sourceTree = ""; }; + 11CCD1B91FFDF57000668A7A /* yq_like_no@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "yq_like_no@3x.png"; sourceTree = ""; }; + 11CCD1BA1FFDF57100668A7A /* qyzx@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "qyzx@2x.png"; sourceTree = ""; }; + 11CCD1BB1FFDF57100668A7A /* yq_video@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "yq_video@2x.png"; sourceTree = ""; }; + 11CFFD2F2004AFC3007D169D /* new_enterprise_hui_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "new_enterprise_hui_icon@2x.png"; sourceTree = ""; }; + 11CFFD302004AFC3007D169D /* new_realname_hui_icon@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "new_realname_hui_icon@3x.png"; sourceTree = ""; }; + 11CFFD312004AFC4007D169D /* new_realname_hui_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "new_realname_hui_icon@2x.png"; sourceTree = ""; }; + 11CFFD322004AFC4007D169D /* new_enterprise_hui_icon@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "new_enterprise_hui_icon@3x.png"; sourceTree = ""; }; + 11CFFD332004AFC4007D169D /* new_phone_hui_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "new_phone_hui_icon@2x.png"; sourceTree = ""; }; + 11CFFD342004AFC5007D169D /* new_phone_hui_icon@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "new_phone_hui_icon@3x.png"; sourceTree = ""; }; + 11CFFD352004AFC5007D169D /* new_tuan_hui_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "new_tuan_hui_icon@2x.png"; sourceTree = ""; }; + 11CFFD362004AFC5007D169D /* new_tuan_hui_icon@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "new_tuan_hui_icon@3x.png"; sourceTree = ""; }; + 11CFFD3F2004C681007D169D /* yq_collect@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "yq_collect@3x.png"; sourceTree = ""; }; + 11CFFD402004C682007D169D /* yq_collect@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "yq_collect@2x.png"; sourceTree = ""; }; + 11CFFD432004C7B0007D169D /* yq_concern@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "yq_concern@2x.png"; sourceTree = ""; }; + 11CFFD442004C7B0007D169D /* yq_concern@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "yq_concern@3x.png"; sourceTree = ""; }; + 11CFFD472004CE5B007D169D /* yq_like_yes@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "yq_like_yes@3x.png"; sourceTree = ""; }; + 11CFFD482004CE5C007D169D /* yq_like_yes@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "yq_like_yes@2x.png"; sourceTree = ""; }; + 11DA8C3B1FE0D2CE003B0728 /* phone_editor@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "phone_editor@3x.png"; sourceTree = ""; }; + 11DA8C3D1FE106D6003B0728 /* arrow_up@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "arrow_up@2x.png"; sourceTree = ""; }; + 11DA8C3E1FE106D7003B0728 /* arrow_up@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "arrow_up@3x.png"; sourceTree = ""; }; + 11DA8C411FE1070B003B0728 /* arrow_down@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "arrow_down@2x.png"; sourceTree = ""; }; + 11DA8C421FE1070C003B0728 /* arrow_down@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "arrow_down@3x.png"; sourceTree = ""; }; + 11E2A9D61FE794D800E3A4B2 /* XLCard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XLCard.h; sourceTree = ""; }; + 11E2A9D71FE794D800E3A4B2 /* XLCard.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XLCard.m; sourceTree = ""; }; + 11E2A9D81FE794D800E3A4B2 /* XLCardItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XLCardItem.h; sourceTree = ""; }; + 11E2A9D91FE794D800E3A4B2 /* XLCardItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XLCardItem.m; sourceTree = ""; }; + 11E2A9DA1FE794D800E3A4B2 /* XLCardSwitch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XLCardSwitch.h; sourceTree = ""; }; + 11E2A9DB1FE794D800E3A4B2 /* XLCardSwitch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XLCardSwitch.m; sourceTree = ""; }; + 11E2A9DC1FE794D800E3A4B2 /* XLCardSwitchFlowLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XLCardSwitchFlowLayout.h; sourceTree = ""; }; + 11E2A9DD1FE794D800E3A4B2 /* XLCardSwitchFlowLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XLCardSwitchFlowLayout.m; sourceTree = ""; }; + 11E2B8F21FC2837D00CE9FF3 /* avatar_default@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "avatar_default@3x.png"; sourceTree = ""; }; + 11E2B8F31FC2837D00CE9FF3 /* avatar_default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "avatar_default@2x.png"; sourceTree = ""; }; + 11E2B8F71FC283BC00CE9FF3 /* URLMacros.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = URLMacros.h; sourceTree = ""; }; + 11E2B8F81FC283BC00CE9FF3 /* UserInfoMacros.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UserInfoMacros.h; sourceTree = ""; }; + 11E2B8F91FC283BC00CE9FF3 /* FontAndColorMacros.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FontAndColorMacros.h; sourceTree = ""; }; + 11E2B8FA1FC283BD00CE9FF3 /* UtilsMacros.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UtilsMacros.h; sourceTree = ""; }; + 11E2B8FE1FC2843100CE9FF3 /* LoginViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LoginViewController.h; sourceTree = ""; }; + 11E2B8FF1FC2843100CE9FF3 /* LoginViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LoginViewController.m; sourceTree = ""; }; + 11E2B9021FC2848900CE9FF3 /* huifu@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "huifu@2x.png"; sourceTree = ""; }; + 11E2B9031FC2848900CE9FF3 /* huifu@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "huifu@3x.png"; sourceTree = ""; }; + 11E2B9041FC2848900CE9FF3 /* PYQ-dz@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "PYQ-dz@2x.png"; sourceTree = ""; }; + 11E2B9051FC2848900CE9FF3 /* PYQ-dz@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "PYQ-dz@3x.png"; sourceTree = ""; }; + 11E2B9061FC2848900CE9FF3 /* PYQ-hx@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "PYQ-hx@2x.png"; sourceTree = ""; }; + 11E2B9071FC2848900CE9FF3 /* PYQ-hx@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "PYQ-hx@3x.png"; sourceTree = ""; }; + 11E2B9081FC2848900CE9FF3 /* PYQ-jt@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "PYQ-jt@2x.png"; sourceTree = ""; }; + 11E2B9091FC2848900CE9FF3 /* PYQ-jt@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "PYQ-jt@3x.png"; sourceTree = ""; }; + 11E2B90A1FC2848900CE9FF3 /* PYQ-pjds@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "PYQ-pjds@2x.png"; sourceTree = ""; }; + 11E2B90B1FC2848900CE9FF3 /* PYQ-pjds@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "PYQ-pjds@3x.png"; sourceTree = ""; }; + 11E2B90C1FC2848900CE9FF3 /* PYQ-pl@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "PYQ-pl@2x.png"; sourceTree = ""; }; + 11E2B90D1FC2848900CE9FF3 /* PYQ-pl@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "PYQ-pl@3x.png"; sourceTree = ""; }; + 11E2B90E1FC2848900CE9FF3 /* PYQ-xj@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "PYQ-xj@2x.png"; sourceTree = ""; }; + 11E2B90F1FC2848900CE9FF3 /* PYQ-xj@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "PYQ-xj@3x.png"; sourceTree = ""; }; + 11E2B9101FC2848900CE9FF3 /* SDS-dd@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "SDS-dd@2x.png"; sourceTree = ""; }; + 11E2B9111FC2848900CE9FF3 /* SDS-dd@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "SDS-dd@3x.png"; sourceTree = ""; }; + 11E2B9121FC2848900CE9FF3 /* video_play@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "video_play@2x.png"; sourceTree = ""; }; + 11E2B9131FC2848900CE9FF3 /* video_play@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "video_play@3x.png"; sourceTree = ""; }; + 11E2B92C1FC2A47F00CE9FF3 /* EventDetailView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EventDetailView.h; sourceTree = ""; }; + 11E2B92D1FC2A47F00CE9FF3 /* EventDetailView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EventDetailView.m; sourceTree = ""; }; + 11E2B92F1FC2A72A00CE9FF3 /* UIPlaceHolderTextView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIPlaceHolderTextView.h; sourceTree = ""; }; + 11E2B9301FC2A72A00CE9FF3 /* UIPlaceHolderTextView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIPlaceHolderTextView.m; sourceTree = ""; }; + 11E2B9321FC2A76000CE9FF3 /* PicImageVIew.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PicImageVIew.m; sourceTree = ""; }; + 11E2B9331FC2A76000CE9FF3 /* PicImageVIew.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PicImageVIew.h; sourceTree = ""; }; + 11E2B9351FC2A92300CE9FF3 /* ZCSelectPhotosViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZCSelectPhotosViewController.h; sourceTree = ""; }; + 11E2B9361FC2A92300CE9FF3 /* ZCSelectPhotosViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ZCSelectPhotosViewController.m; sourceTree = ""; }; + 11E2B9391FC2A94A00CE9FF3 /* NSBundle+TZImagePicker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSBundle+TZImagePicker.h"; sourceTree = ""; }; + 11E2B93A1FC2A94A00CE9FF3 /* NSBundle+TZImagePicker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSBundle+TZImagePicker.m"; sourceTree = ""; }; + 11E2B93B1FC2A94A00CE9FF3 /* TZAssetCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TZAssetCell.h; sourceTree = ""; }; + 11E2B93C1FC2A94A00CE9FF3 /* TZAssetCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TZAssetCell.m; sourceTree = ""; }; + 11E2B93D1FC2A94A00CE9FF3 /* TZAssetModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TZAssetModel.h; sourceTree = ""; }; + 11E2B93E1FC2A94A00CE9FF3 /* TZAssetModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TZAssetModel.m; sourceTree = ""; }; + 11E2B93F1FC2A94A00CE9FF3 /* TZGifPhotoPreviewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TZGifPhotoPreviewController.h; sourceTree = ""; }; + 11E2B9401FC2A94A00CE9FF3 /* TZGifPhotoPreviewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TZGifPhotoPreviewController.m; sourceTree = ""; }; + 11E2B9411FC2A94A00CE9FF3 /* TZImageCropManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TZImageCropManager.h; sourceTree = ""; }; + 11E2B9421FC2A94A00CE9FF3 /* TZImageCropManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TZImageCropManager.m; sourceTree = ""; }; + 11E2B9431FC2A94A00CE9FF3 /* TZImageManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TZImageManager.h; sourceTree = ""; }; + 11E2B9441FC2A94A00CE9FF3 /* TZImageManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TZImageManager.m; sourceTree = ""; }; + 11E2B9451FC2A94A00CE9FF3 /* TZImagePickerController.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = TZImagePickerController.bundle; sourceTree = ""; }; + 11E2B9461FC2A94A00CE9FF3 /* TZImagePickerController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TZImagePickerController.h; sourceTree = ""; }; + 11E2B9471FC2A94A00CE9FF3 /* TZImagePickerController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TZImagePickerController.m; sourceTree = ""; }; + 11E2B9481FC2A94A00CE9FF3 /* TZPhotoPickerController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TZPhotoPickerController.h; sourceTree = ""; }; + 11E2B9491FC2A94A00CE9FF3 /* TZPhotoPickerController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TZPhotoPickerController.m; sourceTree = ""; }; + 11E2B94A1FC2A94B00CE9FF3 /* TZPhotoPreviewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TZPhotoPreviewCell.h; sourceTree = ""; }; + 11E2B94B1FC2A94B00CE9FF3 /* TZPhotoPreviewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TZPhotoPreviewCell.m; sourceTree = ""; }; + 11E2B94C1FC2A94B00CE9FF3 /* TZPhotoPreviewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TZPhotoPreviewController.h; sourceTree = ""; }; + 11E2B94D1FC2A94B00CE9FF3 /* TZPhotoPreviewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TZPhotoPreviewController.m; sourceTree = ""; }; + 11E2B94E1FC2A94B00CE9FF3 /* TZProgressView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TZProgressView.h; sourceTree = ""; }; + 11E2B94F1FC2A94B00CE9FF3 /* TZProgressView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TZProgressView.m; sourceTree = ""; }; + 11E2B9501FC2A94B00CE9FF3 /* TZVideoPlayerController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TZVideoPlayerController.h; sourceTree = ""; }; + 11E2B9511FC2A94B00CE9FF3 /* TZVideoPlayerController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TZVideoPlayerController.m; sourceTree = ""; }; + 11E2B9521FC2A94B00CE9FF3 /* UIView+Layout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+Layout.h"; sourceTree = ""; }; + 11E2B9531FC2A94B00CE9FF3 /* UIView+Layout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+Layout.m"; sourceTree = ""; }; + 11E2B9641FC2A9B200CE9FF3 /* PlayViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PlayViewController.h; sourceTree = ""; }; + 11E2B9651FC2A9B200CE9FF3 /* PlayViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PlayViewController.m; sourceTree = ""; }; + 11E2B96B1FC2AA4500CE9FF3 /* LookVideoViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LookVideoViewController.h; sourceTree = ""; }; + 11E2B96C1FC2AA4500CE9FF3 /* LookVideoViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LookVideoViewController.m; sourceTree = ""; }; + 11E2B96F1FC2AB5200CE9FF3 /* MJPhoto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJPhoto.h; sourceTree = ""; }; + 11E2B9701FC2AB5200CE9FF3 /* MJPhoto.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJPhoto.m; sourceTree = ""; }; + 11E2B9711FC2AB5200CE9FF3 /* MJPhotoBrowser.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = MJPhotoBrowser.bundle; sourceTree = ""; }; + 11E2B9721FC2AB5200CE9FF3 /* MJPhotoBrowser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJPhotoBrowser.h; sourceTree = ""; }; + 11E2B9731FC2AB5200CE9FF3 /* MJPhotoBrowser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJPhotoBrowser.m; sourceTree = ""; }; + 11E2B9741FC2AB5200CE9FF3 /* MJPhotoLoadingView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJPhotoLoadingView.h; sourceTree = ""; }; + 11E2B9751FC2AB5200CE9FF3 /* MJPhotoLoadingView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJPhotoLoadingView.m; sourceTree = ""; }; + 11E2B9761FC2AB5200CE9FF3 /* MJPhotoProgressView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJPhotoProgressView.h; sourceTree = ""; }; + 11E2B9771FC2AB5200CE9FF3 /* MJPhotoProgressView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJPhotoProgressView.m; sourceTree = ""; }; + 11E2B9781FC2AB5200CE9FF3 /* MJPhotoToolbar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJPhotoToolbar.h; sourceTree = ""; }; + 11E2B9791FC2AB5200CE9FF3 /* MJPhotoToolbar.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJPhotoToolbar.m; sourceTree = ""; }; + 11E2B97A1FC2AB5200CE9FF3 /* MJPhotoView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJPhotoView.h; sourceTree = ""; }; + 11E2B97B1FC2AB5200CE9FF3 /* MJPhotoView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJPhotoView.m; sourceTree = ""; }; + 11E2B97C1FC2AB5200CE9FF3 /* SDWebImageManager+MJ.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "SDWebImageManager+MJ.h"; sourceTree = ""; }; + 11E2B97D1FC2AB5200CE9FF3 /* SDWebImageManager+MJ.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "SDWebImageManager+MJ.m"; sourceTree = ""; }; + 11E2B97E1FC2AB5200CE9FF3 /* UIImageView+MJWebCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImageView+MJWebCache.h"; sourceTree = ""; }; + 11E2B97F1FC2AB5200CE9FF3 /* UIImageView+MJWebCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImageView+MJWebCache.m"; sourceTree = ""; }; + 11E2B9891FC2AB7F00CE9FF3 /* ShowBigIVViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ShowBigIVViewController.m; sourceTree = ""; }; + 11E2B98A1FC2AB7F00CE9FF3 /* ShowBigIVViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ShowBigIVViewController.h; sourceTree = ""; }; + 11E2B98C1FC2AB9200CE9FF3 /* ShowBigViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ShowBigViewCell.h; sourceTree = ""; }; + 11E2B98D1FC2AB9200CE9FF3 /* ShowBigViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ShowBigViewCell.m; sourceTree = ""; }; + 11E2B9901FC2AE8300CE9FF3 /* MBProgressHUD+Add.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MBProgressHUD+Add.h"; sourceTree = ""; }; + 11E2B9911FC2AE8300CE9FF3 /* MBProgressHUD+Add.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "MBProgressHUD+Add.m"; sourceTree = ""; }; + 11E2B9921FC2AE8300CE9FF3 /* MBProgressHUD.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MBProgressHUD.h; sourceTree = ""; }; + 11E2B9931FC2AE8300CE9FF3 /* MBProgressHUD.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MBProgressHUD.m; sourceTree = ""; }; + 11E2B9961FC2B02600CE9FF3 /* ItemImageBtn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ItemImageBtn.h; sourceTree = ""; }; + 11E2B9971FC2B02600CE9FF3 /* ItemImageBtn.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ItemImageBtn.m; sourceTree = ""; }; + 11E2B9991FC2B04200CE9FF3 /* SexView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SexView.m; sourceTree = ""; }; + 11E2B99A1FC2B04200CE9FF3 /* SexView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SexView.h; sourceTree = ""; }; + 11E2B99C1FC2B62100CE9FF3 /* UploadMethod.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UploadMethod.m; sourceTree = ""; }; + 11E2B99D1FC2B62200CE9FF3 /* UploadMethod.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UploadMethod.h; sourceTree = ""; }; + 11E2B9A01FC2B65000CE9FF3 /* AliyunOSSiOS.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = AliyunOSSiOS.framework; sourceTree = ""; }; + 11E2B9A21FC2B83400CE9FF3 /* NearbyPlaceViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NearbyPlaceViewController.h; sourceTree = ""; }; + 11E2B9A31FC2B83400CE9FF3 /* NearbyPlaceViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NearbyPlaceViewController.m; sourceTree = ""; }; + 11E2B9A51FC2BD4D00CE9FF3 /* girl@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "girl@2x.png"; sourceTree = ""; }; + 11E2B9A61FC2BD4D00CE9FF3 /* girl@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "girl@3x.png"; sourceTree = ""; }; + 11E2B9A91FC2BD9000CE9FF3 /* boy@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "boy@2x.png"; sourceTree = ""; }; + 11E2B9AA1FC2BD9000CE9FF3 /* boy@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "boy@3x.png"; sourceTree = ""; }; + 11E2B9AD1FC2BDCD00CE9FF3 /* Arrow-pointing@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Arrow-pointing@2x.png"; sourceTree = ""; }; + 11E2B9AF1FC2BE2000CE9FF3 /* add_image@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "add_image@3x.png"; sourceTree = ""; }; + 11E2B9B01FC2BE2000CE9FF3 /* add_image@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "add_image@2x.png"; sourceTree = ""; }; + 11E2B9B31FC2BE7100CE9FF3 /* set_video@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "set_video@3x.png"; sourceTree = ""; }; + 11E2B9B41FC2BE7100CE9FF3 /* set_video@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "set_video@2x.png"; sourceTree = ""; }; + 11E2B9B71FC2C71500CE9FF3 /* VisitorViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VisitorViewController.m; sourceTree = ""; }; + 11E2B9B81FC2C71500CE9FF3 /* VisitorViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VisitorViewController.h; sourceTree = ""; }; + 11E2B9BA1FC2C74300CE9FF3 /* SeeOrLikeCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SeeOrLikeCell.m; sourceTree = ""; }; + 11E2B9BB1FC2C74300CE9FF3 /* SeeOrLikeCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SeeOrLikeCell.h; sourceTree = ""; }; + 11E2B9BD1FC2CB3500CE9FF3 /* ActivityListCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ActivityListCell.m; sourceTree = ""; }; + 11E2B9BE1FC2CB3500CE9FF3 /* ActivityListCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ActivityListCell.h; sourceTree = ""; }; + 11E2B9C01FC2CB5300CE9FF3 /* ActivityListModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ActivityListModel.m; sourceTree = ""; }; + 11E2B9C11FC2CB5300CE9FF3 /* ActivityListModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ActivityListModel.h; sourceTree = ""; }; + 11E2B9C31FC2CB6A00CE9FF3 /* MoreEventCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MoreEventCell.m; sourceTree = ""; }; + 11E2B9C41FC2CB6A00CE9FF3 /* MoreEventCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MoreEventCell.h; sourceTree = ""; }; + 11E2B9C71FC2CE6700CE9FF3 /* setting_icon@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "setting_icon@3x.png"; sourceTree = ""; }; + 11E2B9C81FC2CE6700CE9FF3 /* setting_icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "setting_icon@2x.png"; sourceTree = ""; }; + 11E2B9D11FC2E68100CE9FF3 /* SettingView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SettingView.h; sourceTree = ""; }; + 11E2B9D21FC2E68200CE9FF3 /* SettingView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SettingView.m; sourceTree = ""; }; + 4601FD091FE90F080084296E /* QYLinkLable.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = QYLinkLable.h; sourceTree = ""; }; + 4601FD0A1FE90F080084296E /* QYLinkLable.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = QYLinkLable.m; sourceTree = ""; }; + 4601FD0C1FEB5C1E0084296E /* CameraManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CameraManager.h; sourceTree = ""; }; + 4601FD0D1FEB5C1E0084296E /* CameraManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CameraManager.m; sourceTree = ""; }; + 46091A6D1FFF0BBE00F626D5 /* CHTCollectionViewWaterfallLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CHTCollectionViewWaterfallLayout.h; sourceTree = ""; }; + 46091A6E1FFF0BBE00F626D5 /* CHTCollectionViewWaterfallLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CHTCollectionViewWaterfallLayout.m; sourceTree = ""; }; + 46091A711FFF0BBF00F626D5 /* JQwaveView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JQwaveView.h; sourceTree = ""; }; + 46091A721FFF0BBF00F626D5 /* JQwaveView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JQwaveView.m; sourceTree = ""; }; + 46091A751FFF0BBF00F626D5 /* YYWeakProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YYWeakProxy.h; sourceTree = ""; }; + 46091A761FFF0BBF00F626D5 /* YYWeakProxy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YYWeakProxy.m; sourceTree = ""; }; + 46091A7B1FFF0C5100F626D5 /* UIImageView+LBBlurredImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImageView+LBBlurredImage.h"; sourceTree = ""; }; + 46091A7C1FFF0C5100F626D5 /* UIImageView+LBBlurredImage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImageView+LBBlurredImage.m"; sourceTree = ""; }; + 46091A7E1FFF0D1800F626D5 /* UIImage+ImageEffects.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+ImageEffects.m"; sourceTree = ""; }; + 46091A7F1FFF0D1900F626D5 /* UIImage+ImageEffects.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+ImageEffects.h"; sourceTree = ""; }; + 46091A811FFF0D2600F626D5 /* PhotoCollectionViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PhotoCollectionViewCell.m; sourceTree = ""; }; + 46091A821FFF0D2600F626D5 /* PhotoCollectionViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PhotoCollectionViewCell.h; sourceTree = ""; }; + 46091A831FFF0D2600F626D5 /* PhotoFooterView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PhotoFooterView.m; sourceTree = ""; }; + 46091A841FFF0D2700F626D5 /* PhotoFooterView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PhotoFooterView.h; sourceTree = ""; }; + 46091A851FFF0D2700F626D5 /* PhotoCollectionViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = PhotoCollectionViewCell.xib; sourceTree = ""; }; + 46091A8A1FFF460600F626D5 /* n_allday@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "n_allday@2x.png"; sourceTree = ""; }; + 46091A8B1FFF460600F626D5 /* n_allday@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "n_allday@3x.png"; sourceTree = ""; }; + 46091A8C1FFF460600F626D5 /* n_inter@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "n_inter@2x.png"; sourceTree = ""; }; + 46091A8D1FFF460600F626D5 /* n_inter@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "n_inter@3x.png"; sourceTree = ""; }; + 46091A8E1FFF460600F626D5 /* n_label@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "n_label@2x.png"; sourceTree = ""; }; + 46091A8F1FFF460600F626D5 /* n_label@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "n_label@3x.png"; sourceTree = ""; }; + 46091A901FFF460600F626D5 /* n_today@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "n_today@2x.png"; sourceTree = ""; }; + 46091A911FFF460600F626D5 /* n_today@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "n_today@3x.png"; sourceTree = ""; }; + 46091A921FFF460600F626D5 /* n_video@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "n_video@2x.png"; sourceTree = ""; }; + 46091A931FFF460600F626D5 /* n_video@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "n_video@3x.png"; sourceTree = ""; }; + 46091A9E1FFF4C7100F626D5 /* ImageLabelView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ImageLabelView.h; sourceTree = ""; }; + 46091A9F1FFF4C7100F626D5 /* ImageLabelView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ImageLabelView.m; sourceTree = ""; }; + 46091AA11FFF5F3D00F626D5 /* n_down@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "n_down@2x.png"; sourceTree = ""; }; + 46091AA21FFF5F3E00F626D5 /* n_down@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "n_down@3x.png"; sourceTree = ""; }; + 46091AA31FFF5F3E00F626D5 /* n_up@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "n_up@3x.png"; sourceTree = ""; }; + 46091AA41FFF5F3E00F626D5 /* n_up@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "n_up@2x.png"; sourceTree = ""; }; + 462024D21FCE4B7F00079C21 /* UploadAvatarView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UploadAvatarView.m; sourceTree = ""; }; + 462024D31FCE4B8000079C21 /* UploadAvatarView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UploadAvatarView.h; sourceTree = ""; }; + 462024D61FCE56E600079C21 /* Bitmap2@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Bitmap2@2x.png"; sourceTree = ""; }; + 462024D71FCE56E600079C21 /* Bitmap2@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Bitmap2@3x.png"; sourceTree = ""; }; + 462024D81FCE56E600079C21 /* Bitmap1@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Bitmap1@2x.png"; sourceTree = ""; }; + 462024D91FCE56E600079C21 /* Bitmap1@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Bitmap1@3x.png"; sourceTree = ""; }; + 462024DA1FCE56E600079C21 /* Bitmap3@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Bitmap3@2x.png"; sourceTree = ""; }; + 462024DB1FCE56E600079C21 /* Bitmap3@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Bitmap3@3x.png"; sourceTree = ""; }; + 462024DC1FCE56E600079C21 /* Bitmap4@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Bitmap4@2x.png"; sourceTree = ""; }; + 462024DD1FCE56E600079C21 /* Bitmap4@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Bitmap4@3x.png"; sourceTree = ""; }; + 462024DE1FCE56E600079C21 /* Bitmap5@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Bitmap5@2x.png"; sourceTree = ""; }; + 462024DF1FCE56E600079C21 /* Bitmap5@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Bitmap5@3x.png"; sourceTree = ""; }; + 462024E01FCE56E600079C21 /* Bitmap6@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Bitmap6@2x.png"; sourceTree = ""; }; + 462024E11FCE56E600079C21 /* Bitmap6@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Bitmap6@3x.png"; sourceTree = ""; }; + 462024EE1FCE64CF00079C21 /* QYShareView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QYShareView.m; sourceTree = ""; }; + 462024EF1FCE64D000079C21 /* QYShareView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QYShareView.h; sourceTree = ""; }; + 462024F11FCEC17300079C21 /* idnorm@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "idnorm@2x.png"; sourceTree = ""; }; + 462024F21FCEC17400079C21 /* idnorm@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "idnorm@3x.png"; sourceTree = ""; }; + 46212CF41FC25D6500E89A57 /* BaiduMapAPI_Base.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = BaiduMapAPI_Base.framework; sourceTree = ""; }; + 46212CF51FC25D6500E89A57 /* BaiduMapAPI_Location.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = BaiduMapAPI_Location.framework; sourceTree = ""; }; + 46212CF61FC25D6500E89A57 /* BaiduMapAPI_Map.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = BaiduMapAPI_Map.framework; sourceTree = ""; }; + 46212CF71FC25D6500E89A57 /* BaiduMapAPI_Search.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = BaiduMapAPI_Search.framework; sourceTree = ""; }; + 46212CF81FC25D6500E89A57 /* mapapi.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = mapapi.bundle; sourceTree = ""; }; + 46212CFA1FC25D6500E89A57 /* libcrypto.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libcrypto.a; sourceTree = ""; }; + 46212CFB1FC25D6500E89A57 /* libssl.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libssl.a; sourceTree = ""; }; + 46212D031FC25D9800E89A57 /* MapManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MapManager.h; sourceTree = ""; }; + 46212D041FC25D9900E89A57 /* MapManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MapManager.m; sourceTree = ""; }; + 46212D081FC260BC00E89A57 /* CoreTelephony.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreTelephony.framework; path = System/Library/Frameworks/CoreTelephony.framework; sourceTree = SDKROOT; }; + 46212D091FC260D100E89A57 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; + 46212D0C1FC2616300E89A57 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; + 46212D0E1FC2617900E89A57 /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; }; + 46212D101FC2619100E89A57 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; + 46212D121FC261A500E89A57 /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = System/Library/Frameworks/CoreLocation.framework; sourceTree = SDKROOT; }; + 46212D141FC261BC00E89A57 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; }; + 46212D161FC261DC00E89A57 /* 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; }; + 46212D181FC261E900E89A57 /* libsqlite3.0.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libsqlite3.0.tbd; path = usr/lib/libsqlite3.0.tbd; sourceTree = SDKROOT; }; + 46212D1A1FC2625000E89A57 /* MapViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MapViewController.h; sourceTree = ""; }; + 46212D1B1FC2625000E89A57 /* MapViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MapViewController.m; sourceTree = ""; }; + 46212D1D1FC2630600E89A57 /* AppDelegate+AppTripartite.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "AppDelegate+AppTripartite.h"; sourceTree = ""; }; + 46212D1E1FC2630600E89A57 /* AppDelegate+AppTripartite.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "AppDelegate+AppTripartite.mm"; sourceTree = ""; }; + 462BC0D8200DD645009A1C6F /* gudge_arrow.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = gudge_arrow.png; sourceTree = ""; }; + 462BC0DA200EEFB2009A1C6F /* TopicAndTextCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TopicAndTextCell.h; sourceTree = ""; }; + 462BC0DB200EEFB2009A1C6F /* TopicAndTextCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TopicAndTextCell.m; sourceTree = ""; }; + 462BC0E0200EF5C0009A1C6F /* TopicTextModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TopicTextModel.h; sourceTree = ""; }; + 462BC0E1200EF5C0009A1C6F /* TopicTextModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TopicTextModel.m; sourceTree = ""; }; + 462BC0E3200EFB0A009A1C6F /* ZanAndReportCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ZanAndReportCell.h; sourceTree = ""; }; + 462BC0E4200EFB0A009A1C6F /* ZanAndReportCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ZanAndReportCell.m; sourceTree = ""; }; + 462BC0E7200F3BEC009A1C6F /* XHWebImageAutoSizeCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHWebImageAutoSizeCache.h; sourceTree = ""; }; + 462BC0E8200F3BED009A1C6F /* XHWebImageAutoSizeConst.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHWebImageAutoSizeConst.m; sourceTree = ""; }; + 462BC0E9200F3BED009A1C6F /* XHWebImageAutoSize.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHWebImageAutoSize.m; sourceTree = ""; }; + 462BC0EA200F3BED009A1C6F /* XHWebImageAutoSizeConst.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHWebImageAutoSizeConst.h; sourceTree = ""; }; + 462BC0EB200F3BED009A1C6F /* UITableView+XHWebImageAutoSize.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UITableView+XHWebImageAutoSize.h"; sourceTree = ""; }; + 462BC0EC200F3BED009A1C6F /* XHWebImageAutoSizeCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHWebImageAutoSizeCache.m; sourceTree = ""; }; + 462BC0ED200F3BEE009A1C6F /* XHWebImageAutoSize.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHWebImageAutoSize.h; sourceTree = ""; }; + 462BC0EE200F3BEE009A1C6F /* UITableView+XHWebImageAutoSize.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UITableView+XHWebImageAutoSize.m"; sourceTree = ""; }; + 462BC0F3200F4657009A1C6F /* YuanQuanPicCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = YuanQuanPicCell.h; sourceTree = ""; }; + 462BC0F4200F4657009A1C6F /* YuanQuanPicCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = YuanQuanPicCell.m; sourceTree = ""; }; + 462BC0F5200F4657009A1C6F /* YuanQuanPicCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = YuanQuanPicCell.xib; sourceTree = ""; }; + 462BC0F8200F4CDF009A1C6F /* QYVideoCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QYVideoCell.h; sourceTree = ""; }; + 462BC0F9200F4CE0009A1C6F /* QYVideoCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QYVideoCell.m; sourceTree = ""; }; + 4635F2111FD15FFF00804833 /* BaiduMapAPI_Utils.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = BaiduMapAPI_Utils.framework; sourceTree = ""; }; + 4635F2141FD1640800804833 /* BMKClusterAlgorithm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BMKClusterAlgorithm.h; sourceTree = ""; }; + 4635F2151FD1640800804833 /* BMKClusterAlgorithm.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BMKClusterAlgorithm.m; sourceTree = ""; }; + 4635F2161FD1640800804833 /* BMKClusterItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BMKClusterItem.h; sourceTree = ""; }; + 4635F2171FD1640800804833 /* BMKClusterItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BMKClusterItem.m; sourceTree = ""; }; + 4635F2181FD1640800804833 /* BMKClusterManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BMKClusterManager.h; sourceTree = ""; }; + 4635F2191FD1640800804833 /* BMKClusterManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BMKClusterManager.m; sourceTree = ""; }; + 4635F21A1FD1640800804833 /* BMKClusterQuadtree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BMKClusterQuadtree.h; sourceTree = ""; }; + 4635F21B1FD1640800804833 /* BMKClusterQuadtree.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BMKClusterQuadtree.m; sourceTree = ""; }; + 4635F2201FD4DFEE00804833 /* QYCluster.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = QYCluster.h; sourceTree = ""; }; + 4635F2211FD4DFEE00804833 /* QYCluster.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = QYCluster.m; sourceTree = ""; }; + 4635F2231FD4E9F900804833 /* qipao@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "qipao@3x.png"; sourceTree = ""; }; + 4635F2241FD4E9FA00804833 /* qipao@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "qipao@2x.png"; sourceTree = ""; }; + 463735951FC7EC650062416E /* SyStemNewsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SyStemNewsViewController.h; sourceTree = ""; }; + 463735971FC7EC650062416E /* SyStemNewsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SyStemNewsViewController.m; sourceTree = ""; }; + 4637359B1FC7ED5A0062416E /* SetpushViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SetpushViewController.m; sourceTree = ""; }; + 4637359C1FC7ED5A0062416E /* SetpushViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SetpushViewController.h; sourceTree = ""; }; + 463735A11FC7EDE00062416E /* SetPushCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SetPushCell.h; sourceTree = ""; }; + 463735A21FC7EDE00062416E /* SetPushCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SetPushCell.m; sourceTree = ""; }; + 463735A61FC7F06C0062416E /* xx-huodong@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "xx-huodong@2x.png"; sourceTree = ""; }; + 463735A91FC7F06D0062416E /* xx-tongzhi@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "xx-tongzhi@3x.png"; sourceTree = ""; }; + 463735AA1FC7F06D0062416E /* xx-huodong@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "xx-huodong@3x.png"; sourceTree = ""; }; + 463735AB1FC7F06D0062416E /* xx-tongzhi@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "xx-tongzhi@2x.png"; sourceTree = ""; }; + 463735B31FC7F59A0062416E /* SysCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SysCell.h; sourceTree = ""; }; + 463735B41FC7F59A0062416E /* SysCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SysCell.m; sourceTree = ""; }; + 463735B61FC7F8140062416E /* InFnoModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InFnoModel.h; sourceTree = ""; }; + 463735B71FC7F8140062416E /* InFnoModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = InFnoModel.m; sourceTree = ""; }; + 463735C11FC802360062416E /* swich_open@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "swich_open@2x.png"; sourceTree = ""; }; + 463735C21FC802360062416E /* swich_close@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "swich_close@3x.png"; sourceTree = ""; }; + 463735C31FC802370062416E /* swich_close@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "swich_close@2x.png"; sourceTree = ""; }; + 463735C41FC802370062416E /* swich_open@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "swich_open@3x.png"; sourceTree = ""; }; + 463735C91FC804140062416E /* systemMsg@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "systemMsg@2x.png"; sourceTree = ""; }; + 463735CA1FC804140062416E /* systemMsg@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "systemMsg@3x.png"; sourceTree = ""; }; + 463735CD1FC8192E0062416E /* AdModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AdModel.h; sourceTree = ""; }; + 463735CE1FC8192E0062416E /* AdModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AdModel.m; sourceTree = ""; }; + 463735D01FCBA8A00062416E /* name@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "name@2x.png"; sourceTree = ""; }; + 463735D11FCBA8A10062416E /* my_card@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "my_card@3x.png"; sourceTree = ""; }; + 463735D41FCBAA8F0062416E /* id@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "id@2x.png"; sourceTree = ""; }; + 463735D51FCBAA8F0062416E /* id@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "id@3x.png"; sourceTree = ""; }; + 463735DF1FCBB8A30062416E /* CordialViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CordialViewController.m; sourceTree = ""; }; + 463735E01FCBB8A30062416E /* CordialViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CordialViewController.h; sourceTree = ""; }; + 463735E21FCBB9650062416E /* CordialNewTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CordialNewTableViewCell.m; sourceTree = ""; }; + 463735E31FCBB9650062416E /* CordialNewTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CordialNewTableViewCell.h; sourceTree = ""; }; + 463735E51FCBBA350062416E /* CordiaFooterView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CordiaFooterView.m; sourceTree = ""; }; + 463735E61FCBBA350062416E /* CordiaFooterView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CordiaFooterView.h; sourceTree = ""; }; + 463735EC1FCBBD290062416E /* MySpoorViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MySpoorViewController.h; sourceTree = ""; }; + 463735ED1FCBBD290062416E /* MySpoorViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MySpoorViewController.m; sourceTree = ""; }; + 463CE5C11FE0BA840068A31C /* phone_editor@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "phone_editor@2x.png"; sourceTree = ""; }; + 4651CF0E1FFB25D700A937F6 /* ProfileViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ProfileViewController.h; sourceTree = ""; }; + 4651CF0F1FFB25D700A937F6 /* ProfileViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ProfileViewController.m; sourceTree = ""; }; + 4651CF171FFB2A9600A937F6 /* ProfileHeaderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ProfileHeaderView.m; sourceTree = ""; }; + 4651CF1A1FFB2B4400A937F6 /* ProfileHeaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProfileHeaderView.h; sourceTree = ""; }; + 4651CF1B1FFB5E6800A937F6 /* SpouseView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SpouseView.h; sourceTree = ""; }; + 4651CF1C1FFB5E6800A937F6 /* SpouseView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SpouseView.m; sourceTree = ""; }; + 4651CF211FFC7BE800A937F6 /* UIButton+Ext.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UIButton+Ext.h"; sourceTree = ""; }; + 4651CF221FFC7BE800A937F6 /* UIButton+Ext.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UIButton+Ext.m"; sourceTree = ""; }; + 4651CF241FFC828200A937F6 /* EditProfileViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = EditProfileViewController.h; sourceTree = ""; }; + 4651CF251FFC828200A937F6 /* EditProfileViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = EditProfileViewController.m; sourceTree = ""; }; + 4651CF271FFCBAC500A937F6 /* PersonView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PersonView.h; sourceTree = ""; }; + 4651CF281FFCBAC500A937F6 /* PersonView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PersonView.m; sourceTree = ""; }; + 4651CF2A1FFCC59A00A937F6 /* PersonPhotoView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PersonPhotoView.h; sourceTree = ""; }; + 4651CF2B1FFCC59A00A937F6 /* PersonPhotoView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PersonPhotoView.m; sourceTree = ""; }; + 4651CF2D1FFCCB2900A937F6 /* SectionView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SectionView.h; sourceTree = ""; }; + 4651CF2E1FFCCB2900A937F6 /* SectionView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SectionView.m; sourceTree = ""; }; + 4651CF301FFCE06D00A937F6 /* DeclarationView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DeclarationView.h; sourceTree = ""; }; + 4651CF311FFCE06D00A937F6 /* DeclarationView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DeclarationView.m; sourceTree = ""; }; + 46579D631FDA925100FF8586 /* QuCore-ThirdParty.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = "QuCore-ThirdParty.framework"; sourceTree = ""; }; + 46579D641FDA925200FF8586 /* AliyunVideoSDK.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = AliyunVideoSDK.framework; sourceTree = ""; }; + 46579D651FDA925200FF8586 /* AliyunVideoCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = AliyunVideoCore.framework; sourceTree = ""; }; + 46579D6B1FDA9BBA00FF8586 /* QPSDK.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = QPSDK.bundle; sourceTree = ""; }; + 4657B90320030DB900609928 /* OtherPhotoView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OtherPhotoView.h; sourceTree = ""; }; + 4657B90420030DB900609928 /* OtherPhotoView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = OtherPhotoView.m; sourceTree = ""; }; + 4657B906200324A000609928 /* OtherGiftView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OtherGiftView.h; sourceTree = ""; }; + 4657B907200324A000609928 /* OtherGiftView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = OtherGiftView.m; sourceTree = ""; }; + 4657B90920045A0500609928 /* OtherFooterView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OtherFooterView.h; sourceTree = ""; }; + 4657B90A20045A0500609928 /* OtherFooterView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = OtherFooterView.m; sourceTree = ""; }; + 4657B90C200460EE00609928 /* other_say@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "other_say@2x.png"; sourceTree = ""; }; + 4657B90E200460EF00609928 /* other_say@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "other_say@3x.png"; sourceTree = ""; }; + 4657B910200460EF00609928 /* other_gift@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "other_gift@3x.png"; sourceTree = ""; }; + 4657B911200460F000609928 /* other_gift@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "other_gift@2x.png"; sourceTree = ""; }; + 4657B91820046C8900609928 /* other_y_att@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "other_y_att@3x.png"; sourceTree = ""; }; + 4657B91920046C8900609928 /* other_n_att@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "other_n_att@2x.png"; sourceTree = ""; }; + 4657B91A20046C8A00609928 /* other_y_att@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "other_y_att@2x.png"; sourceTree = ""; }; + 4657B91B20046C8A00609928 /* other_n_att@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "other_n_att@3x.png"; sourceTree = ""; }; + 466105151FC2773C008E89E8 /* QYRoundAnnotationView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = QYRoundAnnotationView.h; sourceTree = ""; }; + 466105161FC2773C008E89E8 /* QYRoundAnnotationView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = QYRoundAnnotationView.m; sourceTree = ""; }; + 466105181FC2788E008E89E8 /* QYActionPaopaoView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = QYActionPaopaoView.h; sourceTree = ""; }; + 466105191FC2788E008E89E8 /* QYActionPaopaoView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = QYActionPaopaoView.m; sourceTree = ""; }; + 46617E2520295B2400BBC610 /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = System/Library/Frameworks/StoreKit.framework; sourceTree = SDKROOT; }; + 466333F21FC3B442000BE9EE /* ALLWebViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ALLWebViewController.h; sourceTree = ""; }; + 466333F31FC3B442000BE9EE /* ALLWebViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ALLWebViewController.m; sourceTree = ""; }; + 466333F61FC3C6E6000BE9EE /* CardViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CardViewController.h; sourceTree = ""; }; + 466333F71FC3C6E6000BE9EE /* CardViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CardViewController.m; sourceTree = ""; }; + 466333F91FC3D3B8000BE9EE /* UIView+RadiusView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+RadiusView.h"; sourceTree = ""; }; + 466333FA1FC3D3B8000BE9EE /* UIView+RadiusView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+RadiusView.m"; sourceTree = ""; }; + 466333FC1FC3DAB5000BE9EE /* CommonCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CommonCell.h; sourceTree = ""; }; + 466333FD1FC3DAB5000BE9EE /* CommonCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CommonCell.m; sourceTree = ""; }; + 466334071FC3FB02000BE9EE /* MyCardModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MyCardModel.h; sourceTree = ""; }; + 466334081FC3FB02000BE9EE /* MyCardModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MyCardModel.m; sourceTree = ""; }; + 4663340D1FC40DB5000BE9EE /* QYStarView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = QYStarView.h; sourceTree = ""; }; + 4663340E1FC40DB5000BE9EE /* QYStarView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = QYStarView.m; sourceTree = ""; }; + 466334141FC42AAD000BE9EE /* ModifyPwdViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ModifyPwdViewController.h; sourceTree = ""; }; + 466334151FC42AAE000BE9EE /* ModifyPwdViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ModifyPwdViewController.m; sourceTree = ""; }; + 466334161FC42AAE000BE9EE /* SettingViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SettingViewController.h; sourceTree = ""; }; + 466334171FC42AAE000BE9EE /* SettingViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SettingViewController.m; sourceTree = ""; }; + 4663341E1FC514C4000BE9EE /* TextFieldViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TextFieldViewController.h; sourceTree = ""; }; + 4663341F1FC514C4000BE9EE /* TextFieldViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TextFieldViewController.m; sourceTree = ""; }; + 466334261FC55D43000BE9EE /* TAAbstractDotView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TAAbstractDotView.h; sourceTree = ""; }; + 466334271FC55D43000BE9EE /* TAAbstractDotView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TAAbstractDotView.m; sourceTree = ""; }; + 466334281FC55D43000BE9EE /* TAAnimatedDotView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TAAnimatedDotView.h; sourceTree = ""; }; + 466334291FC55D43000BE9EE /* TAAnimatedDotView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TAAnimatedDotView.m; sourceTree = ""; }; + 4663342A1FC55D43000BE9EE /* TADotView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TADotView.h; sourceTree = ""; }; + 4663342B1FC55D43000BE9EE /* TADotView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TADotView.m; sourceTree = ""; }; + 4663342C1FC55D43000BE9EE /* TAPageControl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TAPageControl.h; sourceTree = ""; }; + 4663342D1FC55D43000BE9EE /* TAPageControl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TAPageControl.m; sourceTree = ""; }; + 4663342E1FC55D43000BE9EE /* SDCollectionViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDCollectionViewCell.h; sourceTree = ""; }; + 4663342F1FC55D43000BE9EE /* SDCollectionViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDCollectionViewCell.m; sourceTree = ""; }; + 466334301FC55D43000BE9EE /* SDCycleScrollView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDCycleScrollView.h; sourceTree = ""; }; + 466334311FC55D43000BE9EE /* SDCycleScrollView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDCycleScrollView.m; sourceTree = ""; }; + 4663344D1FC5926A000BE9EE /* area.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = area.json; sourceTree = ""; }; + 4663344E1FC5926A000BE9EE /* city.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = city.json; sourceTree = ""; }; + 4663344F1FC5926A000BE9EE /* province.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = province.json; sourceTree = ""; }; + 466334501FC5926A000BE9EE /* QYPickerView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QYPickerView.m; sourceTree = ""; }; + 466334511FC5926A000BE9EE /* QYPickerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QYPickerView.h; sourceTree = ""; }; + 46712F991FD6306500EECDC2 /* ConversationListController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ConversationListController.m; path = "JQQY/ThirdParty/环信/ConversationListController.m"; sourceTree = SOURCE_ROOT; }; + 46712F9A1FD6306500EECDC2 /* ConversationListController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ConversationListController.h; path = "JQQY/ThirdParty/环信/ConversationListController.h"; sourceTree = SOURCE_ROOT; }; + 46712F9C1FD637CD00EECDC2 /* login_logo@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "login_logo@3x.png"; sourceTree = ""; }; + 46712F9D1FD637CD00EECDC2 /* login_logo@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "login_logo@2x.png"; sourceTree = ""; }; + 46712FA01FD784C600EECDC2 /* UITabBar+badge.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UITabBar+badge.m"; sourceTree = ""; }; + 46712FA21FD7F35D00EECDC2 /* xx_gift@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "xx_gift@2x.png"; sourceTree = ""; }; + 46712FA31FD7F35D00EECDC2 /* xx_gift@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "xx_gift@3x.png"; sourceTree = ""; }; + 46785D031FCFFA8A009E9B30 /* starBackImage@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "starBackImage@2x.png"; sourceTree = ""; }; + 46785D041FCFFA8B009E9B30 /* starBackImage@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "starBackImage@3x.png"; sourceTree = ""; }; + 46785D051FCFFA8B009E9B30 /* starImage@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "starImage@2x.png"; sourceTree = ""; }; + 46785D061FCFFA8B009E9B30 /* name@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "name@3x.png"; sourceTree = ""; }; + 46785D071FCFFA8B009E9B30 /* starImage@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "starImage@3x.png"; sourceTree = ""; }; + 4691BE161FCD31F90077237C /* ApplyView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ApplyView.m; sourceTree = ""; }; + 4691BE171FCD31F90077237C /* ApplyView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ApplyView.h; sourceTree = ""; }; + 4691BE191FCD42730077237C /* ApplyPersonView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ApplyPersonView.m; sourceTree = ""; }; + 4691BE1A1FCD42730077237C /* ApplyPersonView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ApplyPersonView.h; sourceTree = ""; }; + 4693F3121FECE89300E510C6 /* QYInputToolbar.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = QYInputToolbar.h; sourceTree = ""; }; + 4693F3131FECE89300E510C6 /* QYInputToolbar.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = QYInputToolbar.m; sourceTree = ""; }; + 46A4D986201185FD0036D7BD /* home_refre@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "home_refre@2x.png"; sourceTree = ""; }; + 46A4D987201185FD0036D7BD /* home_refre@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "home_refre@3x.png"; sourceTree = ""; }; + 46B52A531FD5325C00F22888 /* refresh@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "refresh@2x.png"; sourceTree = ""; }; + 46B52A551FD533AC00F22888 /* refresh@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "refresh@3x.png"; sourceTree = ""; }; + 46B52A571FD5351700F22888 /* add_map@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "add_map@2x.png"; sourceTree = ""; }; + 46B52A591FD535F700F22888 /* det_map@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "det_map@2x.png"; sourceTree = ""; }; + 46B52A5A1FD535F800F22888 /* add_map@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "add_map@3x.png"; sourceTree = ""; }; + 46B52A5B1FD535F800F22888 /* det_map@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "det_map@3x.png"; sourceTree = ""; }; + 46B52A5F1FD53BF700F22888 /* refresh_ding@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "refresh_ding@2x.png"; sourceTree = ""; }; + 46B52A611FD53C7100F22888 /* refresh_ding@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "refresh_ding@3x.png"; sourceTree = ""; }; + 46C0CF321FC69C9500F1472C /* my_dingwei@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "my_dingwei@3x.png"; sourceTree = ""; }; + 46C0CF331FC69C9500F1472C /* my_dingwei@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "my_dingwei@2x.png"; sourceTree = ""; }; + 46C0CF361FC6A53300F1472C /* wenhao@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "wenhao@3x.png"; sourceTree = ""; }; + 46C0CF371FC6A53300F1472C /* wenhao@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "wenhao@2x.png"; sourceTree = ""; }; + 46C0CF3C1FC6AC4F00F1472C /* my_card@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "my_card@2x.png"; sourceTree = ""; }; + 46C0CF451FC6C12200F1472C /* FriendViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FriendViewController.h; sourceTree = ""; }; + 46C0CF461FC6C12200F1472C /* FriendViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FriendViewController.m; sourceTree = ""; }; + 46C0CF481FC6C22C00F1472C /* TopBtnView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TopBtnView.h; sourceTree = ""; }; + 46C0CF491FC6C22C00F1472C /* TopBtnView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TopBtnView.m; sourceTree = ""; }; + 46C0CF501FC6C65900F1472C /* MyPeopleViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MyPeopleViewController.m; sourceTree = ""; }; + 46C0CF511FC6C65900F1472C /* MyPeopleViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MyPeopleViewController.h; sourceTree = ""; }; + 46C0CF531FC6C6E000F1472C /* MyPeopleCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MyPeopleCell.m; sourceTree = ""; }; + 46C0CF541FC6C6E000F1472C /* MyPeopleCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MyPeopleCell.h; sourceTree = ""; }; + 46E03DEB1FC2A2FA00F55A8E /* AvatarImageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AvatarImageView.m; sourceTree = ""; }; + 46E03DEC1FC2A2FA00F55A8E /* AvatarImageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AvatarImageView.h; sourceTree = ""; }; + 46E03DEE1FC2B2F200F55A8E /* QYPointAnnotation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = QYPointAnnotation.h; sourceTree = ""; }; + 46E03DEF1FC2B2F200F55A8E /* QYPointAnnotation.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = QYPointAnnotation.m; sourceTree = ""; }; + 46E4FFF81FDF6D03003B26C8 /* IdentyViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IdentyViewController.h; sourceTree = ""; }; + 46E4FFF91FDF6D03003B26C8 /* IdentyViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = IdentyViewController.m; sourceTree = ""; }; + 46E4FFFB1FDF6D73003B26C8 /* IdentyListViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IdentyListViewController.h; sourceTree = ""; }; + 46E4FFFC1FDF6D73003B26C8 /* IdentyListViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = IdentyListViewController.m; sourceTree = ""; }; + 46E4FFFE1FDF8316003B26C8 /* EnterpriseViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = EnterpriseViewController.h; sourceTree = ""; }; + 46E4FFFF1FDF8316003B26C8 /* EnterpriseViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = EnterpriseViewController.m; sourceTree = ""; }; + 46E9D07B1FC7AFFF00F7A344 /* FriendModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FriendModel.h; sourceTree = ""; }; + 46E9D07C1FC7AFFF00F7A344 /* FriendModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FriendModel.m; sourceTree = ""; }; + 46E9D0851FC7C01700F7A344 /* JQQY.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = JQQY.entitlements; sourceTree = ""; }; + 46E9D0861FC7C1E600F7A344 /* UserNotifications.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UserNotifications.framework; path = System/Library/Frameworks/UserNotifications.framework; sourceTree = SDKROOT; }; + 46EAB9D21FCBFF1000BC9B12 /* UITabBar+badge.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UITabBar+badge.h"; sourceTree = ""; }; + 46EAB9D51FCC09CD00BC9B12 /* CordiaModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CordiaModel.h; sourceTree = ""; }; + 46EAB9D61FCC09CD00BC9B12 /* CordiaModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CordiaModel.m; sourceTree = ""; }; + 46EB82231FF37A96004D7652 /* QYGuideView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = QYGuideView.h; sourceTree = ""; }; + 46EB82241FF37A96004D7652 /* QYGuideView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = QYGuideView.m; sourceTree = ""; }; + 46EC25791FC66F1E00EF730D /* my_activity@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "my_activity@2x.png"; sourceTree = ""; }; + 46EC257A1FC66F1E00EF730D /* my_activity@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "my_activity@3x.png"; sourceTree = ""; }; + 46EC257D1FC66FF500EF730D /* MyActivityViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MyActivityViewController.h; sourceTree = ""; }; + 46EC257E1FC66FF500EF730D /* MyActivityViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MyActivityViewController.m; sourceTree = ""; }; + 46EC25801FC6730F00EF730D /* MyActivityCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MyActivityCell.h; sourceTree = ""; }; + 46EC25811FC6730F00EF730D /* MyActivityCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MyActivityCell.m; sourceTree = ""; }; + 46F2881A2029577C004835CF /* BuyBeanController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BuyBeanController.h; sourceTree = ""; }; + 46F2881B2029577C004835CF /* BuyBeanController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BuyBeanController.m; sourceTree = ""; }; + 46FA4D3D1FFDB93D00F3DC4E /* EduView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = EduView.h; sourceTree = ""; }; + 46FA4D3E1FFDB93D00F3DC4E /* EduView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = EduView.m; sourceTree = ""; }; + 46FA4D401FFDBF7400F3DC4E /* WorkView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WorkView.h; sourceTree = ""; }; + 46FA4D411FFDBF7400F3DC4E /* WorkView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = WorkView.m; sourceTree = ""; }; + 46FA4D451FFDD20100F3DC4E /* provinceSchool.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = provinceSchool.json; sourceTree = ""; }; + 46FA4D471FFDD27A00F3DC4E /* ItemViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ItemViewController.h; sourceTree = ""; }; + 46FA4D481FFDD27A00F3DC4E /* ItemViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ItemViewController.m; sourceTree = ""; }; + 46FA4D4A1FFDD28F00F3DC4E /* SchoolViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SchoolViewController.h; sourceTree = ""; }; + 46FA4D4B1FFDD28F00F3DC4E /* SchoolViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SchoolViewController.m; sourceTree = ""; }; + 46FA4D4D1FFDF9F200F3DC4E /* ApproveView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ApproveView.h; sourceTree = ""; }; + 46FA4D4E1FFDF9F200F3DC4E /* ApproveView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ApproveView.m; sourceTree = ""; }; + 46FA4D501FFDFEAF00F3DC4E /* QYTagView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = QYTagView.h; sourceTree = ""; }; + 46FA4D511FFDFEAF00F3DC4E /* QYTagView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = QYTagView.m; sourceTree = ""; }; + 46FA4D531FFE14DC00F3DC4E /* DetailView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DetailView.h; sourceTree = ""; }; + 46FA4D541FFE14DC00F3DC4E /* DetailView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DetailView.m; sourceTree = ""; }; + 46FA4D591FFE2B4100F3DC4E /* InterestView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InterestView.h; sourceTree = ""; }; + 46FA4D5A1FFE2B4100F3DC4E /* InterestView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = InterestView.m; sourceTree = ""; }; + 46FA4D5C1FFE30F700F3DC4E /* VideoView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VideoView.h; sourceTree = ""; }; + 46FA4D5D1FFE30F700F3DC4E /* VideoView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = VideoView.m; sourceTree = ""; }; + 46FA4D5F1FFE3AF000F3DC4E /* IntroduceViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IntroduceViewController.h; sourceTree = ""; }; + 46FA4D601FFE3B6A00F3DC4E /* HobbyAndMarkItemView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HobbyAndMarkItemView.h; sourceTree = ""; }; + 46FA4D611FFE3B6A00F3DC4E /* HobbyAndMarkItemView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HobbyAndMarkItemView.m; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 118CDDDC1FC0077C00E41475 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 4635F2121FD1600000804833 /* BaiduMapAPI_Utils.framework in Frameworks */, + 46212D171FC261DC00E89A57 /* libstdc++.6.0.9.tbd in Frameworks */, + 114D26081FC7FB0F000DC5EB /* ImageIO.framework in Frameworks */, + 114D26061FC7FAF8000DC5EB /* MobileCoreServices.framework in Frameworks */, + 114D26041FC7FABE000DC5EB /* AudioToolbox.framework in Frameworks */, + 114D260A1FC7FB21000DC5EB /* libc++.tbd in Frameworks */, + 114D26021FC7FA9A000DC5EB /* CoreMedia.framework in Frameworks */, + 46E9D0871FC7C1F300F7A344 /* UserNotifications.framework in Frameworks */, + 46212D0D1FC2616B00E89A57 /* CoreGraphics.framework in Frameworks */, + 114EDACC1FC40F2A008BAE09 /* AVFoundation.framework in Frameworks */, + 46212D151FC261C200E89A57 /* SystemConfiguration.framework in Frameworks */, + 114D260C1FC7FB30000DC5EB /* libz.tbd in Frameworks */, + 11806A3B1FC5652000893BE7 /* libUMSocial_Sdk_5.2.1.a in Frameworks */, + 114D260D1FC7FB89000DC5EB /* HyphenateLite.framework in Frameworks */, + 46212D131FC261AF00E89A57 /* CoreLocation.framework in Frameworks */, + 11806A391FC5652000893BE7 /* UMMobClick.framework in Frameworks */, + 46579D671FDA925200FF8586 /* AliyunVideoSDK.framework in Frameworks */, + 114D25881FC7FA32000DC5EB /* HyphenateLite.framework in Frameworks */, + 46212D111FC2619800E89A57 /* QuartzCore.framework in Frameworks */, + 46212D0F1FC2618500E89A57 /* OpenGLES.framework in Frameworks */, + 11806A4F1FC570A900893BE7 /* libsqlite3.tbd in Frameworks */, + 11E2B9A11FC2B65000CE9FF3 /* AliyunOSSiOS.framework in Frameworks */, + 46212D0B1FC2614700E89A57 /* Security.framework in Frameworks */, + 11806A481FC5652000893BE7 /* libSocialQQ.a in Frameworks */, + 46212D191FC261E900E89A57 /* libsqlite3.0.tbd in Frameworks */, + 46212D0A1FC2613A00E89A57 /* CoreTelephony.framework in Frameworks */, + 46212D071FC260A100E89A57 /* mapapi.bundle in Frameworks */, + 46617E2620295B2400BBC610 /* StoreKit.framework in Frameworks */, + 11806A4C1FC5652000893BE7 /* libWeChatSDK.a in Frameworks */, + 46212CFF1FC25D6500E89A57 /* BaiduMapAPI_Search.framework in Frameworks */, + 46579D681FDA925200FF8586 /* AliyunVideoCore.framework in Frameworks */, + 46579D661FDA925200FF8586 /* QuCore-ThirdParty.framework in Frameworks */, + 11806A451FC5652000893BE7 /* libSocialSinaSSO.a in Frameworks */, + 114D25951FC7FA32000DC5EB /* libopencore-amrnb.a in Frameworks */, + 11806A491FC5652000893BE7 /* TencentOpenAPI.framework in Frameworks */, + 46212D021FC25D6500E89A57 /* libssl.a in Frameworks */, + 46212D011FC25D6500E89A57 /* libcrypto.a in Frameworks */, + 114D25961FC7FA32000DC5EB /* libopencore-amrwb.a in Frameworks */, + 1104DBB5200C59020020992E /* Adagent.a in Frameworks */, + 46212CFD1FC25D6500E89A57 /* BaiduMapAPI_Location.framework in Frameworks */, + 11806A461FC5652000893BE7 /* libWeiboSDK.a in Frameworks */, + 46212CFC1FC25D6500E89A57 /* BaiduMapAPI_Base.framework in Frameworks */, + 46212CFE1FC25D6500E89A57 /* BaiduMapAPI_Map.framework in Frameworks */, + 1104DBB8200C59020020992E /* NewsAgent.a in Frameworks */, + 11806A4B1FC5652000893BE7 /* libSocialWechat.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 1104DBA3200C59020020992E /* NewsAgent */ = { + isa = PBXGroup; + children = ( + 1104DBA4200C59020020992E /* Adagent.a */, + 1104DBA5200C59020020992E /* include */, + 1104DBAF200C59020020992E /* loading.bundle */, + 1104DBB0200C59020020992E /* NACommentsView.xib */, + 1104DBB1200C59020020992E /* NewsAgent.a */, + 1104DBB2200C59020020992E /* NewsAgent.bundle */, + 1104DBB3200C59020020992E /* plist */, + ); + path = NewsAgent; + sourceTree = ""; + }; + 1104DBA5200C59020020992E /* include */ = { + isa = PBXGroup; + children = ( + 1104DBA6200C59020020992E /* MAgent+HeiniuMAgent.h */, + 1104DBA7200C59020020992E /* MAgent.h */, + 1104DBA8200C59020020992E /* NACollectionViewController.h */, + 1104DBA9200C59020020992E /* NACommentsView.h */, + 1104DBAA200C59020020992E /* NAContentView.h */, + 1104DBAB200C59020020992E /* NAContentViewController.h */, + 1104DBAC200C59020020992E /* NAContentViewControllerPlus.h */, + 1104DBAD200C59020020992E /* NARecomViewController.h */, + 1104DBAE200C59020020992E /* NewsAgent.h */, + ); + path = include; + sourceTree = ""; + }; + 1104DBB3200C59020020992E /* plist */ = { + isa = PBXGroup; + children = ( + 1104DBB4200C59020020992E /* magent.plist */, + ); + path = plist; + sourceTree = ""; + }; + 112599F71FC65D24009D18E4 /* Other */ = { + isa = PBXGroup; + children = ( + 112599F81FC65D40009D18E4 /* FileTool.h */, + 112599F91FC65D40009D18E4 /* FileTool.m */, + ); + path = Other; + sourceTree = ""; + }; + 11259A791FC6C7E2009D18E4 /* Resource */ = { + isa = PBXGroup; + children = ( + 46A4D986201185FD0036D7BD /* home_refre@2x.png */, + 46A4D987201185FD0036D7BD /* home_refre@3x.png */, + 4657B91920046C8900609928 /* other_n_att@2x.png */, + 4657B91B20046C8A00609928 /* other_n_att@3x.png */, + 4657B91A20046C8A00609928 /* other_y_att@2x.png */, + 4657B91820046C8900609928 /* other_y_att@3x.png */, + 4657B911200460F000609928 /* other_gift@2x.png */, + 4657B910200460EF00609928 /* other_gift@3x.png */, + 4657B90C200460EE00609928 /* other_say@2x.png */, + 4657B90E200460EF00609928 /* other_say@3x.png */, + 1178FCAB2003384400162248 /* message@2x.png */, + 1178FCA82003384300162248 /* message@3x.png */, + 1178FCAA2003384300162248 /* near@2x.png */, + 1178FCA92003384300162248 /* near@3x.png */, + 1178FCA52003376900162248 /* home_background@2x.png */, + 1178FCA42003376900162248 /* home_background@3x.png */, + 46712FA21FD7F35D00EECDC2 /* xx_gift@2x.png */, + 46712FA31FD7F35D00EECDC2 /* xx_gift@3x.png */, + 463735C91FC804140062416E /* systemMsg@2x.png */, + 463735CA1FC804140062416E /* systemMsg@3x.png */, + 463735C31FC802370062416E /* swich_close@2x.png */, + 463735C21FC802360062416E /* swich_close@3x.png */, + 463735C11FC802360062416E /* swich_open@2x.png */, + 463735C41FC802370062416E /* swich_open@3x.png */, + 463735A61FC7F06C0062416E /* xx-huodong@2x.png */, + 463735AA1FC7F06D0062416E /* xx-huodong@3x.png */, + 463735AB1FC7F06D0062416E /* xx-tongzhi@2x.png */, + 463735A91FC7F06D0062416E /* xx-tongzhi@3x.png */, + 114D24041FC7C69E000DC5EB /* giftImg.plist */, + 11259A741FC6C3A4009D18E4 /* loading.gif */, + 114D24061FC7C7E3000DC5EB /* xw-dise@2x.png */, + 114D24071FC7C7E3000DC5EB /* xw-dise@3x.png */, + 114D240B1FC7C807000DC5EB /* xw-huangguan@2x.png */, + 114D240A1FC7C807000DC5EB /* xw-huangguan@3x.png */, + 114D240E1FC7C8A4000DC5EB /* xw-shiping@2x.png */, + 114D240F1FC7C8A4000DC5EB /* xw-shiping@3x.png */, + 114D24121FC7C8CA000DC5EB /* xw-shipin-hui@2x.png */, + 114D24131FC7C8CA000DC5EB /* xw-shipin-hui@3x.png */, + 114D241F1FC7C961000DC5EB /* zl-sfrz-h@2x.png */, + 114D241E1FC7C961000DC5EB /* zl-sfrz-h@3x.png */, + 114D24231FC7C9EF000DC5EB /* zl-sfrz@2x.png */, + 114D24221FC7C9EE000DC5EB /* zl-sfrz@3x.png */, + 114D242E1FC7CA50000DC5EB /* zl-qyuanrz-h@2x.png */, + 114D242F1FC7CA51000DC5EB /* zl-qyuanrz-h@3x.png */, + 114D24321FC7CA76000DC5EB /* zl-sjrz@2x.png */, + 114D24331FC7CA76000DC5EB /* zl-sjrz@3x.png */, + 114D24371FC7CAA2000DC5EB /* nan@2x.png */, + 114D24361FC7CAA2000DC5EB /* nan@3x.png */, + 114D243B1FC7CAB8000DC5EB /* nv@2x.png */, + 114D243A1FC7CAB8000DC5EB /* nv@3x.png */, + 114D243E1FC7CB8A000DC5EB /* hi@2x.png */, + 114D243F1FC7CB8B000DC5EB /* hi@3x.png */, + 114D24431FC7CBF1000DC5EB /* xuanxiang@2x.png */, + 114D24421FC7CBF1000DC5EB /* xuanxiang@3x.png */, + 114D24471FC7CC7F000DC5EB /* xw-dianzan@2x.png */, + 114D24461FC7CC7E000DC5EB /* xw-dianzan@3x.png */, + 114D244B1FC7CC8F000DC5EB /* xw-dianzan-hui@2x.png */, + 114D244A1FC7CC8F000DC5EB /* xw-dianzan-hui@3x.png */, + 114D244E1FC7CCA5000DC5EB /* NOguanzhu@2x.png */, + 114D244F1FC7CCA5000DC5EB /* NOguanzhu@3x.png */, + 114D24531FC7CCCF000DC5EB /* YESguanzhu@2x.png */, + 114D24521FC7CCCF000DC5EB /* YESguanzhu@3x.png */, + 114D24571FC7E60B000DC5EB /* card_boy@2x.png */, + 114D24561FC7E60B000DC5EB /* card_boy@3x.png */, + 114D245B1FC7E63C000DC5EB /* card_girl@2x.png */, + 114D245A1FC7E63C000DC5EB /* card_girl@3x.png */, + ); + path = Resource; + sourceTree = ""; + }; + 1130F36C1FEA06BA009AC59E /* Cell */ = { + isa = PBXGroup; + children = ( + 462BC0F8200F4CDF009A1C6F /* QYVideoCell.h */, + 462BC0F9200F4CE0009A1C6F /* QYVideoCell.m */, + 462BC0E6200F3BC3009A1C6F /* 图片加载 */, + 1130F36D1FEA0740009AC59E /* YuanquanBaseCell.h */, + 1130F36E1FEA0740009AC59E /* YuanquanBaseCell.m */, + 1130F3731FEA0E0A009AC59E /* TextCell.h */, + 1130F3741FEA0E0A009AC59E /* TextCell.m */, + 1130F3761FEA0E24009AC59E /* PicturesCell.h */, + 1130F3771FEA0E24009AC59E /* PicturesCell.m */, + 1130F3791FEA0E32009AC59E /* VideoCell.h */, + 1130F37A1FEA0E32009AC59E /* VideoCell.m */, + 1130F37C1FEA0E43009AC59E /* TextAndPicturesCell.h */, + 1130F37D1FEA0E43009AC59E /* TextAndPicturesCell.m */, + 1130F37F1FEA0E52009AC59E /* TextAndVideoCell.h */, + 1130F3801FEA0E52009AC59E /* TextAndVideoCell.m */, + 111CC5E01FFCA7B300A85682 /* YuanquanCommentCell.h */, + 111CC5E11FFCA7B300A85682 /* YuanquanCommentCell.m */, + 462BC0DA200EEFB2009A1C6F /* TopicAndTextCell.h */, + 462BC0DB200EEFB2009A1C6F /* TopicAndTextCell.m */, + 462BC0E3200EFB0A009A1C6F /* ZanAndReportCell.h */, + 462BC0E4200EFB0A009A1C6F /* ZanAndReportCell.m */, + 462BC0F3200F4657009A1C6F /* YuanQuanPicCell.h */, + 462BC0F4200F4657009A1C6F /* YuanQuanPicCell.m */, + 462BC0F5200F4657009A1C6F /* YuanQuanPicCell.xib */, + ); + path = Cell; + sourceTree = ""; + }; + 114D245E1FC7F9EE000DC5EB /* 环信 */ = { + isa = PBXGroup; + children = ( + 114D26171FC801CB000DC5EB /* ChatDemoHelper.h */, + 114D26161FC801CB000DC5EB /* ChatDemoHelper.m */, + 114D26131FC801AB000DC5EB /* ChatViewController.h */, + 114D26141FC801AC000DC5EB /* ChatViewController.m */, + 114D24611FC7FA32000DC5EB /* EaseUI */, + 114D245F1FC7FA30000DC5EB /* HyphenateSDK */, + ); + path = "环信"; + sourceTree = ""; + }; + 114D245F1FC7FA30000DC5EB /* HyphenateSDK */ = { + isa = PBXGroup; + children = ( + 114D24601FC7FA30000DC5EB /* HyphenateLite.framework */, + ); + path = HyphenateSDK; + sourceTree = ""; + }; + 114D24611FC7FA32000DC5EB /* EaseUI */ = { + isa = PBXGroup; + children = ( + 114D24621FC7FA32000DC5EB /* EaseUI.h */, + 114D24631FC7FA32000DC5EB /* EaseUI.m */, + 114D24641FC7FA32000DC5EB /* EaseUI.podspec */, + 114D24651FC7FA32000DC5EB /* EMUIKit */, + 114D25861FC7FA32000DC5EB /* resources */, + ); + path = EaseUI; + sourceTree = ""; + }; + 114D24651FC7FA32000DC5EB /* EMUIKit */ = { + isa = PBXGroup; + children = ( + 114D24661FC7FA32000DC5EB /* 3rdparty */, + 114D25171FC7FA32000DC5EB /* Helper */, + 114D251A1FC7FA32000DC5EB /* Model */, + 114D25261FC7FA32000DC5EB /* Util */, + 114D25431FC7FA32000DC5EB /* ViewController */, + 114D25501FC7FA32000DC5EB /* Views */, + ); + path = EMUIKit; + sourceTree = ""; + }; + 114D24661FC7FA32000DC5EB /* 3rdparty */ = { + isa = PBXGroup; + children = ( + 114D24671FC7FA32000DC5EB /* DeviceHelper */, + 114D24BE1FC7FA32000DC5EB /* MWPhotoBrowser */, + ); + path = 3rdparty; + sourceTree = ""; + }; + 114D24671FC7FA32000DC5EB /* DeviceHelper */ = { + isa = PBXGroup; + children = ( + 114D24681FC7FA32000DC5EB /* delegates */, + 114D246B1FC7FA32000DC5EB /* internal */, + 114D247C1FC7FA32000DC5EB /* VoiceConvert */, + ); + path = DeviceHelper; + sourceTree = ""; + }; + 114D24681FC7FA32000DC5EB /* delegates */ = { + isa = PBXGroup; + children = ( + 114D24691FC7FA32000DC5EB /* EMCDDeviceManagerDelegate.h */, + 114D246A1FC7FA32000DC5EB /* EMCDDeviceManagerProximitySensorDelegate.h */, + ); + path = delegates; + sourceTree = ""; + }; + 114D246B1FC7FA32000DC5EB /* internal */ = { + isa = PBXGroup; + children = ( + 114D246C1FC7FA32000DC5EB /* DemoErrorCode.h */, + 114D246D1FC7FA32000DC5EB /* EMAudioPlayerUtil.h */, + 114D246E1FC7FA32000DC5EB /* EMAudioPlayerUtil.m */, + 114D246F1FC7FA32000DC5EB /* EMAudioRecorderUtil.h */, + 114D24701FC7FA32000DC5EB /* EMAudioRecorderUtil.m */, + 114D24711FC7FA32000DC5EB /* EMCDDeviceManager+Media.h */, + 114D24721FC7FA32000DC5EB /* EMCDDeviceManager+Media.m */, + 114D24731FC7FA32000DC5EB /* EMCDDeviceManager+Microphone.h */, + 114D24741FC7FA32000DC5EB /* EMCDDeviceManager+Microphone.m */, + 114D24751FC7FA32000DC5EB /* EMCDDeviceManager+ProximitySensor.h */, + 114D24761FC7FA32000DC5EB /* EMCDDeviceManager+ProximitySensor.m */, + 114D24771FC7FA32000DC5EB /* EMCDDeviceManager+Remind.h */, + 114D24781FC7FA32000DC5EB /* EMCDDeviceManager+Remind.m */, + 114D24791FC7FA32000DC5EB /* EMCDDeviceManager.h */, + 114D247A1FC7FA32000DC5EB /* EMCDDeviceManagerBase.h */, + 114D247B1FC7FA32000DC5EB /* EMCDDeviceManagerBase.m */, + ); + path = internal; + sourceTree = ""; + }; + 114D247C1FC7FA32000DC5EB /* VoiceConvert */ = { + isa = PBXGroup; + children = ( + 114D247D1FC7FA32000DC5EB /* amrwapper */, + 114D24821FC7FA32000DC5EB /* EMVoiceConverter.h */, + 114D24831FC7FA32000DC5EB /* EMVoiceConverter.mm */, + 114D24841FC7FA32000DC5EB /* opencore-amrnb */, + 114D24881FC7FA32000DC5EB /* opencore-amrwb */, + ); + path = VoiceConvert; + sourceTree = ""; + }; + 114D247D1FC7FA32000DC5EB /* amrwapper */ = { + isa = PBXGroup; + children = ( + 114D247E1FC7FA32000DC5EB /* amrFileCodec.h */, + 114D247F1FC7FA32000DC5EB /* amrFileCodec.mm */, + 114D24801FC7FA32000DC5EB /* wav.h */, + 114D24811FC7FA32000DC5EB /* wav.mm */, + ); + path = amrwapper; + sourceTree = ""; + }; + 114D24841FC7FA32000DC5EB /* opencore-amrnb */ = { + isa = PBXGroup; + children = ( + 114D24851FC7FA32000DC5EB /* interf_dec.h */, + 114D24861FC7FA32000DC5EB /* interf_enc.h */, + 114D24871FC7FA32000DC5EB /* libopencore-amrnb.a */, + ); + path = "opencore-amrnb"; + sourceTree = ""; + }; + 114D24881FC7FA32000DC5EB /* opencore-amrwb */ = { + isa = PBXGroup; + children = ( + 114D24891FC7FA32000DC5EB /* dec_if.h */, + 114D248A1FC7FA32000DC5EB /* if_rom.h */, + 114D248B1FC7FA32000DC5EB /* libopencore-amrwb.a */, + ); + path = "opencore-amrwb"; + sourceTree = ""; + }; + 114D24BE1FC7FA32000DC5EB /* MWPhotoBrowser */ = { + isa = PBXGroup; + children = ( + 114D24BF1FC7FA32000DC5EB /* Classes */, + 114D24D31FC7FA32000DC5EB /* Libraries */, + 114D25161FC7FA32000DC5EB /* MWPhotoBrowser.bundle */, + ); + path = MWPhotoBrowser; + sourceTree = ""; + }; + 114D24BF1FC7FA32000DC5EB /* Classes */ = { + isa = PBXGroup; + children = ( + 114D24C01FC7FA32000DC5EB /* MWCaptionView.h */, + 114D24C11FC7FA32000DC5EB /* MWCaptionView.m */, + 114D24C21FC7FA32000DC5EB /* MWCommon.h */, + 114D24C31FC7FA32000DC5EB /* MWGridCell.h */, + 114D24C41FC7FA32000DC5EB /* MWGridCell.m */, + 114D24C51FC7FA32000DC5EB /* MWGridViewController.h */, + 114D24C61FC7FA32000DC5EB /* MWGridViewController.m */, + 114D24C71FC7FA32000DC5EB /* MWPhoto.h */, + 114D24C81FC7FA32000DC5EB /* MWPhoto.m */, + 114D24C91FC7FA32000DC5EB /* MWPhotoBrowser.h */, + 114D24CA1FC7FA32000DC5EB /* MWPhotoBrowser.m */, + 114D24CB1FC7FA32000DC5EB /* MWPhotoBrowserPrivate.h */, + 114D24CC1FC7FA32000DC5EB /* MWPhotoProtocol.h */, + 114D24CD1FC7FA32000DC5EB /* MWTapDetectingImageView.h */, + 114D24CE1FC7FA32000DC5EB /* MWTapDetectingImageView.m */, + 114D24CF1FC7FA32000DC5EB /* MWTapDetectingView.h */, + 114D24D01FC7FA32000DC5EB /* MWTapDetectingView.m */, + 114D24D11FC7FA32000DC5EB /* MWZoomingScrollView.h */, + 114D24D21FC7FA32000DC5EB /* MWZoomingScrollView.m */, + ); + path = Classes; + sourceTree = ""; + }; + 114D24D31FC7FA32000DC5EB /* Libraries */ = { + isa = PBXGroup; + children = ( + 114D24D41FC7FA32000DC5EB /* DACircularProgress */, + 114D24F91FC7FA32000DC5EB /* PSTCollectionView */, + ); + path = Libraries; + sourceTree = ""; + }; + 114D24D41FC7FA32000DC5EB /* DACircularProgress */ = { + isa = PBXGroup; + children = ( + 114D24D51FC7FA32000DC5EB /* DACircularProgressView.h */, + 114D24D61FC7FA32000DC5EB /* DACircularProgressView.m */, + ); + path = DACircularProgress; + sourceTree = ""; + }; + 114D24F91FC7FA32000DC5EB /* PSTCollectionView */ = { + isa = PBXGroup; + children = ( + 114D24FA1FC7FA32000DC5EB /* NSIndexPath+PSTCollectionViewAdditions.h */, + 114D24FB1FC7FA32000DC5EB /* NSIndexPath+PSTCollectionViewAdditions.m */, + 114D24FC1FC7FA32000DC5EB /* PSTCollectionView.h */, + 114D24FD1FC7FA32000DC5EB /* PSTCollectionView.m */, + 114D24FE1FC7FA32000DC5EB /* PSTCollectionViewCell.h */, + 114D24FF1FC7FA32000DC5EB /* PSTCollectionViewCell.m */, + 114D25001FC7FA32000DC5EB /* PSTCollectionViewCommon.h */, + 114D25011FC7FA32000DC5EB /* PSTCollectionViewController.h */, + 114D25021FC7FA32000DC5EB /* PSTCollectionViewController.m */, + 114D25031FC7FA32000DC5EB /* PSTCollectionViewData.h */, + 114D25041FC7FA32000DC5EB /* PSTCollectionViewData.m */, + 114D25051FC7FA32000DC5EB /* PSTCollectionViewFlowLayout.h */, + 114D25061FC7FA32000DC5EB /* PSTCollectionViewFlowLayout.m */, + 114D25071FC7FA32000DC5EB /* PSTCollectionViewItemKey.h */, + 114D25081FC7FA32000DC5EB /* PSTCollectionViewItemKey.m */, + 114D25091FC7FA32000DC5EB /* PSTCollectionViewLayout+Internals.h */, + 114D250A1FC7FA32000DC5EB /* PSTCollectionViewLayout.h */, + 114D250B1FC7FA32000DC5EB /* PSTCollectionViewLayout.m */, + 114D250C1FC7FA32000DC5EB /* PSTCollectionViewUpdateItem.h */, + 114D250D1FC7FA32000DC5EB /* PSTCollectionViewUpdateItem.m */, + 114D250E1FC7FA32000DC5EB /* PSTGridLayoutInfo.h */, + 114D250F1FC7FA32000DC5EB /* PSTGridLayoutInfo.m */, + 114D25101FC7FA32000DC5EB /* PSTGridLayoutItem.h */, + 114D25111FC7FA32000DC5EB /* PSTGridLayoutItem.m */, + 114D25121FC7FA32000DC5EB /* PSTGridLayoutRow.h */, + 114D25131FC7FA32000DC5EB /* PSTGridLayoutRow.m */, + 114D25141FC7FA32000DC5EB /* PSTGridLayoutSection.h */, + 114D25151FC7FA32000DC5EB /* PSTGridLayoutSection.m */, + ); + path = PSTCollectionView; + sourceTree = ""; + }; + 114D25171FC7FA32000DC5EB /* Helper */ = { + isa = PBXGroup; + children = ( + 114D25181FC7FA32000DC5EB /* EaseSDKHelper.h */, + 114D25191FC7FA32000DC5EB /* EaseSDKHelper.m */, + ); + path = Helper; + sourceTree = ""; + }; + 114D251A1FC7FA32000DC5EB /* Model */ = { + isa = PBXGroup; + children = ( + 114D251B1FC7FA32000DC5EB /* EaseConversationModel.h */, + 114D251C1FC7FA32000DC5EB /* EaseConversationModel.m */, + 114D251D1FC7FA32000DC5EB /* EaseMessageModel.h */, + 114D251E1FC7FA32000DC5EB /* EaseMessageModel.m */, + 114D251F1FC7FA32000DC5EB /* EaseUserModel.h */, + 114D25201FC7FA32000DC5EB /* EaseUserModel.m */, + 114D25211FC7FA32000DC5EB /* IConversationModel.h */, + 114D25221FC7FA32000DC5EB /* IMessageModel.h */, + 114D25231FC7FA32000DC5EB /* IModelCell.h */, + 114D25241FC7FA32000DC5EB /* IModelChatCell.h */, + 114D25251FC7FA32000DC5EB /* IUserModel.h */, + ); + path = Model; + sourceTree = ""; + }; + 114D25261FC7FA32000DC5EB /* Util */ = { + isa = PBXGroup; + children = ( + 114D25271FC7FA32000DC5EB /* Category */, + 114D25321FC7FA32000DC5EB /* EaseChineseToPinyin.h */, + 114D25331FC7FA32000DC5EB /* EaseChineseToPinyin.m */, + 114D25341FC7FA32000DC5EB /* EaseConvertToCommonEmoticonsHelper.h */, + 114D25351FC7FA32000DC5EB /* EaseConvertToCommonEmoticonsHelper.m */, + 114D25361FC7FA32000DC5EB /* EaseLocalDefine.h */, + 114D25371FC7FA32000DC5EB /* EaseMessageReadManager.h */, + 114D25381FC7FA32000DC5EB /* EaseMessageReadManager.m */, + 114D25391FC7FA32000DC5EB /* Emoji */, + 114D25421FC7FA32000DC5EB /* FixFopen.c */, + ); + path = Util; + sourceTree = ""; + }; + 114D25271FC7FA32000DC5EB /* Category */ = { + isa = PBXGroup; + children = ( + 114D25281FC7FA32000DC5EB /* NSDate+Category.h */, + 114D25291FC7FA32000DC5EB /* NSDate+Category.m */, + 114D252A1FC7FA32000DC5EB /* NSDateFormatter+Category.h */, + 114D252B1FC7FA32000DC5EB /* NSDateFormatter+Category.m */, + 114D252C1FC7FA32000DC5EB /* NSString+Valid.h */, + 114D252D1FC7FA32000DC5EB /* NSString+Valid.m */, + 114D252E1FC7FA32000DC5EB /* UIViewController+DismissKeyboard.h */, + 114D252F1FC7FA32000DC5EB /* UIViewController+DismissKeyboard.m */, + 114D25301FC7FA32000DC5EB /* UIViewController+HUD.h */, + 114D25311FC7FA32000DC5EB /* UIViewController+HUD.m */, + ); + path = Category; + sourceTree = ""; + }; + 114D25391FC7FA32000DC5EB /* Emoji */ = { + isa = PBXGroup; + children = ( + 114D253A1FC7FA32000DC5EB /* EaseEmoji.h */, + 114D253B1FC7FA32000DC5EB /* EaseEmoji.m */, + 114D253C1FC7FA32000DC5EB /* EaseEmojiEmoticons.h */, + 114D253D1FC7FA32000DC5EB /* EaseEmojiEmoticons.m */, + 114D253E1FC7FA32000DC5EB /* EaseEmotionEscape.h */, + 114D253F1FC7FA32000DC5EB /* EaseEmotionEscape.m */, + 114D25401FC7FA32000DC5EB /* EaseEmotionManager.h */, + 114D25411FC7FA32000DC5EB /* EaseEmotionManager.m */, + ); + path = Emoji; + sourceTree = ""; + }; + 114D25431FC7FA32000DC5EB /* ViewController */ = { + isa = PBXGroup; + children = ( + 114D25441FC7FA32000DC5EB /* EaseConversationListViewController.h */, + 114D25451FC7FA32000DC5EB /* EaseConversationListViewController.m */, + 114D25461FC7FA32000DC5EB /* EaseLocationViewController.h */, + 114D25471FC7FA32000DC5EB /* EaseLocationViewController.m */, + 114D25481FC7FA32000DC5EB /* EaseMessageViewController.h */, + 114D25491FC7FA32000DC5EB /* EaseMessageViewController.m */, + 114D254A1FC7FA32000DC5EB /* EaseRefreshTableViewController.h */, + 114D254B1FC7FA32000DC5EB /* EaseRefreshTableViewController.m */, + 114D254C1FC7FA32000DC5EB /* EaseUsersListViewController.h */, + 114D254D1FC7FA32000DC5EB /* EaseUsersListViewController.m */, + 114D254E1FC7FA32000DC5EB /* EaseViewController.h */, + 114D254F1FC7FA32000DC5EB /* EaseViewController.m */, + ); + path = ViewController; + sourceTree = ""; + }; + 114D25501FC7FA32000DC5EB /* Views */ = { + isa = PBXGroup; + children = ( + 114D25511FC7FA32000DC5EB /* contact */, + 114D25541FC7FA32000DC5EB /* conversation */, + 114D25831FC7FA32000DC5EB /* conversationList */, + ); + path = Views; + sourceTree = ""; + }; + 114D25511FC7FA32000DC5EB /* contact */ = { + isa = PBXGroup; + children = ( + 114D25521FC7FA32000DC5EB /* EaseUserCell.h */, + 114D25531FC7FA32000DC5EB /* EaseUserCell.m */, + ); + path = contact; + sourceTree = ""; + }; + 114D25541FC7FA32000DC5EB /* conversation */ = { + isa = PBXGroup; + children = ( + 114D25551FC7FA32000DC5EB /* MessageCell */, + 114D255E1FC7FA32000DC5EB /* MessageCellBubbleView */, + 114D256F1FC7FA32000DC5EB /* toolbar */, + ); + path = conversation; + sourceTree = ""; + }; + 114D25551FC7FA32000DC5EB /* MessageCell */ = { + isa = PBXGroup; + children = ( + 114D25561FC7FA32000DC5EB /* EaseBaseMessageCell.h */, + 114D25571FC7FA32000DC5EB /* EaseBaseMessageCell.m */, + 114D25581FC7FA32000DC5EB /* EaseCustomMessageCell.h */, + 114D25591FC7FA32000DC5EB /* EaseCustomMessageCell.m */, + 114D255A1FC7FA32000DC5EB /* EaseMessageCell.h */, + 114D255B1FC7FA32000DC5EB /* EaseMessageCell.m */, + 114D255C1FC7FA32000DC5EB /* EaseMessageTimeCell.h */, + 114D255D1FC7FA32000DC5EB /* EaseMessageTimeCell.m */, + ); + path = MessageCell; + sourceTree = ""; + }; + 114D255E1FC7FA32000DC5EB /* MessageCellBubbleView */ = { + isa = PBXGroup; + children = ( + 114D255F1FC7FA32000DC5EB /* EaseBubbleView+File.h */, + 114D25601FC7FA32000DC5EB /* EaseBubbleView+File.m */, + 114D25611FC7FA32000DC5EB /* EaseBubbleView+Gif.h */, + 114D25621FC7FA32000DC5EB /* EaseBubbleView+Gif.m */, + 114D25631FC7FA32000DC5EB /* EaseBubbleView+Image.h */, + 114D25641FC7FA32000DC5EB /* EaseBubbleView+Image.m */, + 114D25651FC7FA32000DC5EB /* EaseBubbleView+Location.h */, + 114D25661FC7FA32000DC5EB /* EaseBubbleView+Location.m */, + 114D25671FC7FA32000DC5EB /* EaseBubbleView+Text.h */, + 114D25681FC7FA32000DC5EB /* EaseBubbleView+Text.m */, + 114D25691FC7FA32000DC5EB /* EaseBubbleView+Video.h */, + 114D256A1FC7FA32000DC5EB /* EaseBubbleView+Video.m */, + 114D256B1FC7FA32000DC5EB /* EaseBubbleView+Voice.h */, + 114D256C1FC7FA32000DC5EB /* EaseBubbleView+Voice.m */, + 114D256D1FC7FA32000DC5EB /* EaseBubbleView.h */, + 114D256E1FC7FA32000DC5EB /* EaseBubbleView.m */, + ); + path = MessageCellBubbleView; + sourceTree = ""; + }; + 114D256F1FC7FA32000DC5EB /* toolbar */ = { + isa = PBXGroup; + children = ( + 114D25701FC7FA32000DC5EB /* EaseChatToolbar.h */, + 114D25711FC7FA32000DC5EB /* EaseChatToolbar.m */, + 114D25721FC7FA32000DC5EB /* EaseChatToolbarItem.h */, + 114D25731FC7FA32000DC5EB /* EaseChatToolbarItem.m */, + 114D25741FC7FA32000DC5EB /* EaseImageView.h */, + 114D25751FC7FA32000DC5EB /* EaseImageView.m */, + 114D25761FC7FA32000DC5EB /* EaseTextView.h */, + 114D25771FC7FA32000DC5EB /* EaseTextView.m */, + 114D25781FC7FA32000DC5EB /* FaceView */, + 114D257D1FC7FA32000DC5EB /* MoreView */, + 114D25801FC7FA32000DC5EB /* RecordView */, + ); + path = toolbar; + sourceTree = ""; + }; + 114D25781FC7FA32000DC5EB /* FaceView */ = { + isa = PBXGroup; + children = ( + 114D25791FC7FA32000DC5EB /* EaseFaceView.h */, + 114D257A1FC7FA32000DC5EB /* EaseFaceView.m */, + 114D257B1FC7FA32000DC5EB /* EaseFacialView.h */, + 114D257C1FC7FA32000DC5EB /* EaseFacialView.m */, + ); + path = FaceView; + sourceTree = ""; + }; + 114D257D1FC7FA32000DC5EB /* MoreView */ = { + isa = PBXGroup; + children = ( + 114D257E1FC7FA32000DC5EB /* EaseChatBarMoreView.h */, + 114D257F1FC7FA32000DC5EB /* EaseChatBarMoreView.m */, + ); + path = MoreView; + sourceTree = ""; + }; + 114D25801FC7FA32000DC5EB /* RecordView */ = { + isa = PBXGroup; + children = ( + 114D25811FC7FA32000DC5EB /* EaseRecordView.h */, + 114D25821FC7FA32000DC5EB /* EaseRecordView.m */, + ); + path = RecordView; + sourceTree = ""; + }; + 114D25831FC7FA32000DC5EB /* conversationList */ = { + isa = PBXGroup; + children = ( + 114D25841FC7FA32000DC5EB /* EaseConversationCell.h */, + 114D25851FC7FA32000DC5EB /* EaseConversationCell.m */, + ); + path = conversationList; + sourceTree = ""; + }; + 114D25861FC7FA32000DC5EB /* resources */ = { + isa = PBXGroup; + children = ( + 115C3E331FD9309200370D92 /* cameraSelected@2x.png */, + 115C3E371FD9309300370D92 /* cameraSelected@3x.png */, + 115C3E361FD9309300370D92 /* locationSelected@2x.png */, + 115C3E351FD9309300370D92 /* locationSelected@3x.png */, + 115C3E341FD9309300370D92 /* phoneSelected@2x.png */, + 115C3E381FD9309300370D92 /* phoneSelected@3x.png */, + 114D25871FC7FA32000DC5EB /* EaseUIResource.bundle */, + ); + path = resources; + sourceTree = ""; + }; + 114EDA121FC3D817008BAE09 /* 我的礼物 */ = { + isa = PBXGroup; + children = ( + 114EDA1F1FC3D982008BAE09 /* MyGiftViewController.h */, + 114EDA211FC3D983008BAE09 /* MyGiftViewController.m */, + 114EDA201FC3D982008BAE09 /* PeopleOfGiftViewController.h */, + 114EDA221FC3D983008BAE09 /* PeopleOfGiftViewController.m */, + ); + path = "我的礼物"; + sourceTree = ""; + }; + 114EDA141FC3D82A008BAE09 /* 我的钱包 */ = { + isa = PBXGroup; + children = ( + 114ED9F81FC3B84F008BAE09 /* MyWalletViewController.h */, + 114ED9FA1FC3B84F008BAE09 /* MyWalletViewController.m */, + 114ED9F91FC3B84F008BAE09 /* MyTicketViewController.h */, + 114ED9FB1FC3B850008BAE09 /* MyTicketViewController.m */, + ); + path = "我的钱包"; + sourceTree = ""; + }; + 114EDA171FC3D86C008BAE09 /* 我的资料 */ = { + isa = PBXGroup; + children = ( + 4651CF161FFB2A9600A937F6 /* ProfileView */, + 4651CF0E1FFB25D700A937F6 /* ProfileViewController.h */, + 4651CF0F1FFB25D700A937F6 /* ProfileViewController.m */, + 4651CF241FFC828200A937F6 /* EditProfileViewController.h */, + 4651CF251FFC828200A937F6 /* EditProfileViewController.m */, + 114EDA731FC3F8EB008BAE09 /* View */, + 466333F61FC3C6E6000BE9EE /* CardViewController.h */, + 466333F71FC3C6E6000BE9EE /* CardViewController.m */, + 114EDAB61FC4041F008BAE09 /* HobbyAndMarkViewController.h */, + 114EDAB71FC4041F008BAE09 /* HobbyAndMarkViewController.m */, + 114EDAD01FC42D82008BAE09 /* IntroduceViewController.m */, + 46FA4D5F1FFE3AF000F3DC4E /* IntroduceViewController.h */, + 114EDAD41FC42DAA008BAE09 /* MyPhotoAlbumViewController.h */, + 114EDAD31FC42DAA008BAE09 /* MyPhotoAlbumViewController.m */, + 114EDAD91FC42DC5008BAE09 /* VideoViewController.h */, + 114EDAD61FC42DC4008BAE09 /* VideoViewController.m */, + ); + path = "我的资料"; + sourceTree = ""; + }; + 114EDA181FC3D896008BAE09 /* 设置 */ = { + isa = PBXGroup; + children = ( + 466334161FC42AAE000BE9EE /* SettingViewController.h */, + 466334171FC42AAE000BE9EE /* SettingViewController.m */, + 466334141FC42AAD000BE9EE /* ModifyPwdViewController.h */, + 466334151FC42AAE000BE9EE /* ModifyPwdViewController.m */, + 112599FB1FC66A98009D18E4 /* FeedbackViewController.h */, + 112599FC1FC66A98009D18E4 /* FeedbackViewController.m */, + 11259A011FC6787A009D18E4 /* BindingPhoneViewController.h */, + 11259A021FC6787A009D18E4 /* BindingPhoneViewController.m */, + ); + path = "设置"; + sourceTree = ""; + }; + 114EDA731FC3F8EB008BAE09 /* View */ = { + isa = PBXGroup; + children = ( + 46091A6F1FFF0BBE00F626D5 /* 毛玻璃 */, + 46091A701FFF0BBF00F626D5 /* 水波纹 */, + 46091A6C1FFF0BBE00F626D5 /* 相册 */, + 46FA4D601FFE3B6A00F3DC4E /* HobbyAndMarkItemView.h */, + 46FA4D611FFE3B6A00F3DC4E /* HobbyAndMarkItemView.m */, + 462024D31FCE4B8000079C21 /* UploadAvatarView.h */, + 462024D21FCE4B7F00079C21 /* UploadAvatarView.m */, + 114EDADC1FC42E23008BAE09 /* MapCell.h */, + 114EDADD1FC42E24008BAE09 /* MapCell.m */, + 114EDA981FC3FA39008BAE09 /* UIButtonListView.h */, + 114EDA991FC3FA39008BAE09 /* UIButtonListView.m */, + 114EDA9B1FC3FA90008BAE09 /* delteButton.h */, + 114EDA9C1FC3FA90008BAE09 /* delteButton.m */, + 114EDAC31FC40817008BAE09 /* UserBarView.h */, + 114EDAC21FC40817008BAE09 /* UserBarView.m */, + ); + name = View; + sourceTree = ""; + }; + 115C3E1A1FD8EB9100370D92 /* X */ = { + isa = PBXGroup; + children = ( + 115C3E1D1FD8EBA400370D92 /* launch_X_1.png */, + 115C3E1C1FD8EBA400370D92 /* launch_X_2.png */, + 115C3E1B1FD8EBA400370D92 /* launch_X_3.png */, + 115C3E1E1FD8EBA400370D92 /* launch_X_4.png */, + ); + path = X; + sourceTree = ""; + }; + 1166A6B81FC1376900CCA010 /* SDWebImage */ = { + isa = PBXGroup; + children = ( + 1166A6B91FC1376900CCA010 /* MKAnnotationView+WebCache.h */, + 1166A6BA1FC1376900CCA010 /* MKAnnotationView+WebCache.m */, + 1166A6BB1FC1376900CCA010 /* NSData+ImageContentType.h */, + 1166A6BC1FC1376900CCA010 /* NSData+ImageContentType.m */, + 1166A6BD1FC1376900CCA010 /* SDImageCache.h */, + 1166A6BE1FC1376900CCA010 /* SDImageCache.m */, + 1166A6BF1FC1376900CCA010 /* SDWebImageCompat.h */, + 1166A6C01FC1376900CCA010 /* SDWebImageCompat.m */, + 1166A6C11FC1376900CCA010 /* SDWebImageDecoder.h */, + 1166A6C21FC1376900CCA010 /* SDWebImageDecoder.m */, + 1166A6C31FC1376900CCA010 /* SDWebImageDownloader.h */, + 1166A6C41FC1376900CCA010 /* SDWebImageDownloader.m */, + 1166A6C51FC1376900CCA010 /* SDWebImageDownloaderOperation.h */, + 1166A6C61FC1376900CCA010 /* SDWebImageDownloaderOperation.m */, + 1166A6C71FC1376900CCA010 /* SDWebImageManager.h */, + 1166A6C81FC1376900CCA010 /* SDWebImageManager.m */, + 1166A6C91FC1376900CCA010 /* SDWebImageOperation.h */, + 1166A6CA1FC1376900CCA010 /* SDWebImagePrefetcher.h */, + 1166A6CB1FC1376900CCA010 /* SDWebImagePrefetcher.m */, + 1166A6CC1FC1376900CCA010 /* UIButton+WebCache.h */, + 1166A6CD1FC1376900CCA010 /* UIButton+WebCache.m */, + 1166A6CE1FC1376900CCA010 /* UIImage+GIF.h */, + 1166A6CF1FC1376900CCA010 /* UIImage+GIF.m */, + 1166A6D01FC1376900CCA010 /* UIImage+MultiFormat.h */, + 1166A6D11FC1376900CCA010 /* UIImage+MultiFormat.m */, + 1166A6D21FC1376900CCA010 /* UIImage+WebP.h */, + 1166A6D31FC1376900CCA010 /* UIImage+WebP.m */, + 1166A6D41FC1376900CCA010 /* UIImageView+HighlightedWebCache.h */, + 1166A6D51FC1376900CCA010 /* UIImageView+HighlightedWebCache.m */, + 1166A6D61FC1376900CCA010 /* UIImageView+WebCache.h */, + 1166A6D71FC1376900CCA010 /* UIImageView+WebCache.m */, + 1166A6D81FC1376900CCA010 /* UIView+WebCacheOperation.h */, + 1166A6D91FC1376900CCA010 /* UIView+WebCacheOperation.m */, + ); + path = SDWebImage; + sourceTree = ""; + }; + 1166A6F01FC13F4A00CCA010 /* AFNetworking */ = { + isa = PBXGroup; + children = ( + 1166A6F11FC13F4A00CCA010 /* AFHTTPSessionManager.h */, + 1166A6F21FC13F4A00CCA010 /* AFHTTPSessionManager.m */, + 1166A6F31FC13F4A00CCA010 /* AFNetworking.h */, + 1166A6F41FC13F4A00CCA010 /* AFNetworkReachabilityManager.h */, + 1166A6F51FC13F4A00CCA010 /* AFNetworkReachabilityManager.m */, + 1166A6F61FC13F4A00CCA010 /* AFSecurityPolicy.h */, + 1166A6F71FC13F4A00CCA010 /* AFSecurityPolicy.m */, + 1166A6F81FC13F4A00CCA010 /* AFURLRequestSerialization.h */, + 1166A6F91FC13F4A00CCA010 /* AFURLRequestSerialization.m */, + 1166A6FA1FC13F4A00CCA010 /* AFURLResponseSerialization.h */, + 1166A6FB1FC13F4A00CCA010 /* AFURLResponseSerialization.m */, + 1166A6FC1FC13F4A00CCA010 /* AFURLSessionManager.h */, + 1166A6FD1FC13F4A00CCA010 /* AFURLSessionManager.m */, + 1166A6FE1FC13F4A00CCA010 /* JSONKit.h */, + 1166A6FF1FC13F4A00CCA010 /* JSONKit.m */, + 1166A7001FC13F4A00CCA010 /* Reachability.h */, + 1166A7011FC13F4A00CCA010 /* Reachability.m */, + ); + path = AFNetworking; + sourceTree = ""; + }; + 1166A70A1FC1412800CCA010 /* ZC */ = { + isa = PBXGroup; + children = ( + 114EDAA21FC3FBEA008BAE09 /* ZCTools.h */, + 114EDAA11FC3FBEA008BAE09 /* ZCTools.m */, + 114EDA071FC3D1BB008BAE09 /* ZCAlertController.h */, + 114EDA081FC3D1BB008BAE09 /* ZCAlertController.m */, + 1166A70B1FC1413100CCA010 /* ZCNetRequestManager.h */, + 1166A70C1FC1413200CCA010 /* ZCNetRequestManager.m */, + 11E2B9351FC2A92300CE9FF3 /* ZCSelectPhotosViewController.h */, + 11E2B9361FC2A92300CE9FF3 /* ZCSelectPhotosViewController.m */, + 118CDEB41FC02C0F00E41475 /* ZCTextFieldLineView.h */, + 118CDEB31FC02C0F00E41475 /* ZCTextFieldLineView.m */, + 114C96861FDFA664004F2A2B /* ZCLabelTextFieldLineView.h */, + 114C96871FDFA664004F2A2B /* ZCLabelTextFieldLineView.m */, + 11A767C21FF1FA550039ABEC /* ZCTextView.h */, + 11A767C31FF1FA550039ABEC /* ZCTextView.m */, + ); + path = ZC; + sourceTree = ""; + }; + 116ACEB21FCD327900E12ACA /* 引导页 */ = { + isa = PBXGroup; + children = ( + 116ACEB31FCD327900E12ACA /* LaunchIntroductionView.h */, + 116ACEB41FCD327900E12ACA /* LaunchIntroductionView.m */, + ); + path = "引导页"; + sourceTree = ""; + }; + 118069FE1FC5651F00893BE7 /* 友盟 */ = { + isa = PBXGroup; + children = ( + 118069FF1FC5651F00893BE7 /* UMMobClick.framework */, + 11806A001FC5651F00893BE7 /* UMSocial_Sdk_5.2.1 */, + 11806A1B1FC5652000893BE7 /* UMSocial_Sdk_Extra_Frameworks */, + ); + path = "友盟"; + sourceTree = ""; + }; + 11806A001FC5651F00893BE7 /* UMSocial_Sdk_5.2.1 */ = { + isa = PBXGroup; + children = ( + 11806A011FC5651F00893BE7 /* UMSocialLocalizable.strings */, + 11806A031FC5652000893BE7 /* Header */, + 11806A0F1FC5652000893BE7 /* libUMSocial_Sdk_5.2.1.a */, + 11806A101FC5652000893BE7 /* SocialSDKXib */, + 11806A191FC5652000893BE7 /* UMSocialSDKResourcesNew.bundle */, + ); + path = UMSocial_Sdk_5.2.1; + sourceTree = ""; + }; + 11806A031FC5652000893BE7 /* Header */ = { + isa = PBXGroup; + children = ( + 11806A041FC5652000893BE7 /* UMSocial.h */, + 11806A051FC5652000893BE7 /* UMSocialAccountManager.h */, + 11806A061FC5652000893BE7 /* UMSocialBar.h */, + 11806A071FC5652000893BE7 /* UMSocialConfig.h */, + 11806A081FC5652000893BE7 /* UMSocialControllerService.h */, + 11806A091FC5652000893BE7 /* UMSocialControllerServiceComment.h */, + 11806A0A1FC5652000893BE7 /* UMSocialData.h */, + 11806A0B1FC5652000893BE7 /* UMSocialDataService.h */, + 11806A0C1FC5652000893BE7 /* UMSocialSnsData.h */, + 11806A0D1FC5652000893BE7 /* UMSocialSnsPlatformManager.h */, + 11806A0E1FC5652000893BE7 /* UMSocialSnsService.h */, + ); + path = Header; + sourceTree = ""; + }; + 11806A101FC5652000893BE7 /* SocialSDKXib */ = { + isa = PBXGroup; + children = ( + 11806A111FC5652000893BE7 /* UMSCommentDetailController.xib */, + 11806A121FC5652000893BE7 /* UMSCommentInputController.xib */, + 11806A131FC5652000893BE7 /* UMSCommentInputControlleriPad.xib */, + 11806A141FC5652000893BE7 /* UMShareEditViewController.xib */, + 11806A151FC5652000893BE7 /* UMShareEditViewControlleriPad.xib */, + 11806A161FC5652000893BE7 /* UMSLoginViewController.xib */, + 11806A171FC5652000893BE7 /* UMSnsAccountViewController.xib */, + 11806A181FC5652000893BE7 /* UMSShareListController.xib */, + ); + path = SocialSDKXib; + sourceTree = ""; + }; + 11806A1B1FC5652000893BE7 /* UMSocial_Sdk_Extra_Frameworks */ = { + isa = PBXGroup; + children = ( + 11806A1C1FC5652000893BE7 /* SinaSSO */, + 11806A2C1FC5652000893BE7 /* TencentOpenAPI */, + 11806A311FC5652000893BE7 /* Wechat */, + ); + path = UMSocial_Sdk_Extra_Frameworks; + sourceTree = ""; + }; + 11806A1C1FC5652000893BE7 /* SinaSSO */ = { + isa = PBXGroup; + children = ( + 11806A1D1FC5652000893BE7 /* libSocialSinaSSO.a */, + 11806A1E1FC5652000893BE7 /* libWeiboSDK.a */, + 11806A1F1FC5652000893BE7 /* UMSocialSinaSSOHandler.h */, + 11806A201FC5652000893BE7 /* WBHttpRequest+WeiboGame.h */, + 11806A211FC5652000893BE7 /* WBHttpRequest+WeiboShare.h */, + 11806A221FC5652000893BE7 /* WBHttpRequest+WeiboToken.h */, + 11806A231FC5652000893BE7 /* WBHttpRequest+WeiboUser.h */, + 11806A241FC5652000893BE7 /* WBHttpRequest.h */, + 11806A251FC5652000893BE7 /* WBSDKBasicButton.h */, + 11806A261FC5652000893BE7 /* WBSDKCommentButton.h */, + 11806A271FC5652000893BE7 /* WBSDKRelationshipButton.h */, + 11806A281FC5652000893BE7 /* WeiboSDK+Statistics.h */, + 11806A291FC5652000893BE7 /* WeiboSDK.bundle */, + 11806A2A1FC5652000893BE7 /* WeiboSDK.h */, + 11806A2B1FC5652000893BE7 /* WeiboUser.h */, + ); + path = SinaSSO; + sourceTree = ""; + }; + 11806A2C1FC5652000893BE7 /* TencentOpenAPI */ = { + isa = PBXGroup; + children = ( + 11806A2D1FC5652000893BE7 /* libSocialQQ.a */, + 11806A2E1FC5652000893BE7 /* TencentOpenAPI.framework */, + 11806A2F1FC5652000893BE7 /* TencentOpenApi_IOS_Bundle.bundle */, + 11806A301FC5652000893BE7 /* UMSocialQQHandler.h */, + ); + path = TencentOpenAPI; + sourceTree = ""; + }; + 11806A311FC5652000893BE7 /* Wechat */ = { + isa = PBXGroup; + children = ( + 11806A321FC5652000893BE7 /* libSocialWechat.a */, + 11806A331FC5652000893BE7 /* libWeChatSDK.a */, + 11806A341FC5652000893BE7 /* README.txt */, + 11806A351FC5652000893BE7 /* UMSocialWechatHandler.h */, + 11806A361FC5652000893BE7 /* WechatAuthSDK.h */, + 11806A371FC5652000893BE7 /* WXApi.h */, + 11806A381FC5652000893BE7 /* WXApiObject.h */, + ); + path = Wechat; + sourceTree = ""; + }; + 118CDDD61FC0077C00E41475 = { + isa = PBXGroup; + children = ( + 118CDDE11FC0077C00E41475 /* JQQY */, + 118CDDE01FC0077C00E41475 /* Products */, + 46212D061FC260A100E89A57 /* Frameworks */, + ); + sourceTree = ""; + }; + 118CDDE01FC0077C00E41475 /* Products */ = { + isa = PBXGroup; + children = ( + 118CDDDF1FC0077C00E41475 /* JQQY.app */, + ); + name = Products; + sourceTree = ""; + }; + 118CDDE11FC0077C00E41475 /* JQQY */ = { + isa = PBXGroup; + children = ( + 46E9D0851FC7C01700F7A344 /* JQQY.entitlements */, + 118CDE711FC007BF00E41475 /* AppDelegate */, + 118CDE3A1FC007BE00E41475 /* Modules */, + 118CDE041FC007BE00E41475 /* Manager */, + 118CDDF81FC007BE00E41475 /* Utils */, + 118CDE651FC007BF00E41475 /* Base */, + 118CDE051FC007BE00E41475 /* ThirdParty */, + 118CDE011FC007BE00E41475 /* Define */, + 118CDE351FC007BE00E41475 /* Resource */, + 118CDEA81FC0098300E41475 /* Supporting Files */, + 118CDDEB1FC0077C00E41475 /* Assets.xcassets */, + ); + path = JQQY; + sourceTree = ""; + }; + 118CDDF81FC007BE00E41475 /* Utils */ = { + isa = PBXGroup; + children = ( + 112599F71FC65D24009D18E4 /* Other */, + 1166A70A1FC1412800CCA010 /* ZC */, + 118CDDF91FC007BE00E41475 /* Category */, + 118CDEAC1FC0282100E41475 /* Controller */, + 118CDDFE1FC007BE00E41475 /* View */, + ); + path = Utils; + sourceTree = ""; + }; + 118CDDF91FC007BE00E41475 /* Category */ = { + isa = PBXGroup; + children = ( + 466333F91FC3D3B8000BE9EE /* UIView+RadiusView.h */, + 466333FA1FC3D3B8000BE9EE /* UIView+RadiusView.m */, + 114EDA9E1FC3FADC008BAE09 /* NSString+Ext.h */, + 114EDA9F1FC3FADC008BAE09 /* NSString+Ext.m */, + 114EDA251FC3DB95008BAE09 /* NSString+transform.h */, + 114EDA261FC3DB95008BAE09 /* NSString+transform.m */, + 118CDDFC1FC007BE00E41475 /* UIView+ZCExtension.h */, + 118CDDFD1FC007BE00E41475 /* UIView+ZCExtension.m */, + 1166A6EE1FC139FB00CCA010 /* UIView+FirstViewController.h */, + 1166A6ED1FC139FB00CCA010 /* UIView+FirstViewController.m */, + 4651CF211FFC7BE800A937F6 /* UIButton+Ext.h */, + 4651CF221FFC7BE800A937F6 /* UIButton+Ext.m */, + 11B4ED41200EDF0C00A67D35 /* UIImage+ImgSize.h */, + 11B4ED42200EDF0D00A67D35 /* UIImage+ImgSize.m */, + ); + path = Category; + sourceTree = ""; + }; + 118CDDFE1FC007BE00E41475 /* View */ = { + isa = PBXGroup; + children = ( + 462BC0D8200DD645009A1C6F /* gudge_arrow.png */, + 46FA4D441FFDD1DE00F3DC4E /* 学校 */, + 462024EF1FCE64D000079C21 /* QYShareView.h */, + 462024EE1FCE64CF00079C21 /* QYShareView.m */, + 4663344C1FC5926A000BE9EE /* 地区 */, + 466334511FC5926A000BE9EE /* QYPickerView.h */, + 466334501FC5926A000BE9EE /* QYPickerView.m */, + 46E03DEC1FC2A2FA00F55A8E /* AvatarImageView.h */, + 46E03DEB1FC2A2FA00F55A8E /* AvatarImageView.m */, + 118CDEB01FC02BA200E41475 /* VerifyCodeButton.h */, + 118CDEB11FC02BA200E41475 /* VerifyCodeButton.m */, + 118CDDFF1FC007BE00E41475 /* CustomNavigationView.h */, + 118CDE001FC007BE00E41475 /* CustomNavigationView.m */, + 46C0CF481FC6C22C00F1472C /* TopBtnView.h */, + 46C0CF491FC6C22C00F1472C /* TopBtnView.m */, + 4601FD091FE90F080084296E /* QYLinkLable.h */, + 4601FD0A1FE90F080084296E /* QYLinkLable.m */, + 4693F3121FECE89300E510C6 /* QYInputToolbar.h */, + 4693F3131FECE89300E510C6 /* QYInputToolbar.m */, + 46EB82231FF37A96004D7652 /* QYGuideView.h */, + 46EB82241FF37A96004D7652 /* QYGuideView.m */, + 46FA4D501FFDFEAF00F3DC4E /* QYTagView.h */, + 46FA4D511FFDFEAF00F3DC4E /* QYTagView.m */, + ); + path = View; + sourceTree = ""; + }; + 118CDE011FC007BE00E41475 /* Define */ = { + isa = PBXGroup; + children = ( + 11E2B8F91FC283BC00CE9FF3 /* FontAndColorMacros.h */, + 11E2B8F71FC283BC00CE9FF3 /* URLMacros.h */, + 11E2B8F81FC283BC00CE9FF3 /* UserInfoMacros.h */, + 11E2B8FA1FC283BD00CE9FF3 /* UtilsMacros.h */, + ); + path = Define; + sourceTree = ""; + }; + 118CDE041FC007BE00E41475 /* Manager */ = { + isa = PBXGroup; + children = ( + 11E2B99D1FC2B62200CE9FF3 /* UploadMethod.h */, + 11E2B99C1FC2B62100CE9FF3 /* UploadMethod.m */, + 46212D031FC25D9800E89A57 /* MapManager.h */, + 46212D041FC25D9900E89A57 /* MapManager.m */, + 4601FD0C1FEB5C1E0084296E /* CameraManager.h */, + 4601FD0D1FEB5C1E0084296E /* CameraManager.m */, + ); + path = Manager; + sourceTree = ""; + }; + 118CDE051FC007BE00E41475 /* ThirdParty */ = { + isa = PBXGroup; + children = ( + 1104DBA3200C59020020992E /* NewsAgent */, + 116ACEB21FCD327900E12ACA /* 引导页 */, + 11E2B9621FC2A9B200CE9FF3 /* 视频 */, + 11E2B99F1FC2B65000CE9FF3 /* 阿里云 */, + 118069FE1FC5651F00893BE7 /* 友盟 */, + 114D245E1FC7F9EE000DC5EB /* 环信 */, + 466334241FC55D43000BE9EE /* SDCycleScrollView */, + 11E2B98F1FC2AE8300CE9FF3 /* MBProgressHUD */, + 11E2B96E1FC2AB5200CE9FF3 /* MJPhotoBrowser */, + 11E2B9381FC2A94A00CE9FF3 /* TZImagePickerController */, + 46212CF31FC25D6500E89A57 /* BaiduMap_IOSSDK_v3 */, + 1166A6F01FC13F4A00CCA010 /* AFNetworking */, + 1166A6B81FC1376900CCA010 /* SDWebImage */, + 118CDE061FC007BE00E41475 /* MJRefresh */, + ); + path = ThirdParty; + sourceTree = ""; + }; + 118CDE061FC007BE00E41475 /* MJRefresh */ = { + isa = PBXGroup; + children = ( + 118CDE071FC007BE00E41475 /* Base */, + 118CDE121FC007BE00E41475 /* Custom */, + 118CDE291FC007BE00E41475 /* MJRefresh.bundle */, + 118CDE2A1FC007BE00E41475 /* MJRefresh.h */, + 118CDE2B1FC007BE00E41475 /* MJRefreshConst.h */, + 118CDE2C1FC007BE00E41475 /* MJRefreshConst.m */, + 118CDE2D1FC007BE00E41475 /* NSBundle+MJRefresh.h */, + 118CDE2E1FC007BE00E41475 /* NSBundle+MJRefresh.m */, + 118CDE2F1FC007BE00E41475 /* UIScrollView+MJExtension.h */, + 118CDE301FC007BE00E41475 /* UIScrollView+MJExtension.m */, + 118CDE311FC007BE00E41475 /* UIScrollView+MJRefresh.h */, + 118CDE321FC007BE00E41475 /* UIScrollView+MJRefresh.m */, + 118CDE331FC007BE00E41475 /* UIView+MJExtension.h */, + 118CDE341FC007BE00E41475 /* UIView+MJExtension.m */, + ); + path = MJRefresh; + sourceTree = ""; + }; + 118CDE071FC007BE00E41475 /* Base */ = { + isa = PBXGroup; + children = ( + 118CDE081FC007BE00E41475 /* MJRefreshAutoFooter.h */, + 118CDE091FC007BE00E41475 /* MJRefreshAutoFooter.m */, + 118CDE0A1FC007BE00E41475 /* MJRefreshBackFooter.h */, + 118CDE0B1FC007BE00E41475 /* MJRefreshBackFooter.m */, + 118CDE0C1FC007BE00E41475 /* MJRefreshComponent.h */, + 118CDE0D1FC007BE00E41475 /* MJRefreshComponent.m */, + 118CDE0E1FC007BE00E41475 /* MJRefreshFooter.h */, + 118CDE0F1FC007BE00E41475 /* MJRefreshFooter.m */, + 118CDE101FC007BE00E41475 /* MJRefreshHeader.h */, + 118CDE111FC007BE00E41475 /* MJRefreshHeader.m */, + ); + path = Base; + sourceTree = ""; + }; + 118CDE121FC007BE00E41475 /* Custom */ = { + isa = PBXGroup; + children = ( + 118CDE131FC007BE00E41475 /* Footer */, + 118CDE221FC007BE00E41475 /* Header */, + ); + path = Custom; + sourceTree = ""; + }; + 118CDE131FC007BE00E41475 /* Footer */ = { + isa = PBXGroup; + children = ( + 118CDE141FC007BE00E41475 /* Auto */, + 118CDE1B1FC007BE00E41475 /* Back */, + ); + path = Footer; + sourceTree = ""; + }; + 118CDE141FC007BE00E41475 /* Auto */ = { + isa = PBXGroup; + children = ( + 118CDE151FC007BE00E41475 /* MJRefreshAutoGifFooter.h */, + 118CDE161FC007BE00E41475 /* MJRefreshAutoGifFooter.m */, + 118CDE171FC007BE00E41475 /* MJRefreshAutoNormalFooter.h */, + 118CDE181FC007BE00E41475 /* MJRefreshAutoNormalFooter.m */, + 118CDE191FC007BE00E41475 /* MJRefreshAutoStateFooter.h */, + 118CDE1A1FC007BE00E41475 /* MJRefreshAutoStateFooter.m */, + ); + path = Auto; + sourceTree = ""; + }; + 118CDE1B1FC007BE00E41475 /* Back */ = { + isa = PBXGroup; + children = ( + 118CDE1C1FC007BE00E41475 /* MJRefreshBackGifFooter.h */, + 118CDE1D1FC007BE00E41475 /* MJRefreshBackGifFooter.m */, + 118CDE1E1FC007BE00E41475 /* MJRefreshBackNormalFooter.h */, + 118CDE1F1FC007BE00E41475 /* MJRefreshBackNormalFooter.m */, + 118CDE201FC007BE00E41475 /* MJRefreshBackStateFooter.h */, + 118CDE211FC007BE00E41475 /* MJRefreshBackStateFooter.m */, + ); + path = Back; + sourceTree = ""; + }; + 118CDE221FC007BE00E41475 /* Header */ = { + isa = PBXGroup; + children = ( + 118CDE231FC007BE00E41475 /* MJRefreshGifHeader.h */, + 118CDE241FC007BE00E41475 /* MJRefreshGifHeader.m */, + 118CDE251FC007BE00E41475 /* MJRefreshNormalHeader.h */, + 118CDE261FC007BE00E41475 /* MJRefreshNormalHeader.m */, + 118CDE271FC007BE00E41475 /* MJRefreshStateHeader.h */, + 118CDE281FC007BE00E41475 /* MJRefreshStateHeader.m */, + ); + path = Header; + sourceTree = ""; + }; + 118CDE351FC007BE00E41475 /* Resource */ = { + isa = PBXGroup; + children = ( + 118DA3301FD513BC00246522 /* 引导页 */, + 11908D961FCEB28A00B8569F /* tabbar */, + 118CDE361FC007BE00E41475 /* back_icon@2x.png */, + 118CDE371FC007BE00E41475 /* back_icon@3x.png */, + 118CDE381FC007BE00E41475 /* close_icon@2x.png */, + 118CDE391FC007BE00E41475 /* close_icon@3x.png */, + 11E2B8F31FC2837D00CE9FF3 /* avatar_default@2x.png */, + 11E2B8F21FC2837D00CE9FF3 /* avatar_default@3x.png */, + 115C3E231FD90E4B00370D92 /* picture_default@2x.png */, + 115C3E241FD90E4C00370D92 /* picture_default@3x.png */, + 11A1D97A1FCC0DCD005CA3E8 /* icon2_1@2x.png */, + 11A1D9791FCC0DCD005CA3E8 /* icon2_1@3x.png */, + 11A1D97E1FCC0E03005CA3E8 /* icon2_2@2x.png */, + 11A1D97D1FCC0E03005CA3E8 /* icon2_2@3x.png */, + 11A1D9821FCC0E25005CA3E8 /* icon2_3@2x.png */, + 11A1D9811FCC0E24005CA3E8 /* icon2_3@3x.png */, + 11A1D9861FCC0E76005CA3E8 /* icon2_4@2x.png */, + 11A1D9851FCC0E75005CA3E8 /* icon2_4@3x.png */, + 11A1D9891FCC0E9B005CA3E8 /* icon2_5@2x.png */, + 11A1D98A1FCC0E9C005CA3E8 /* icon2_5@3x.png */, + 116ACEAC1FCCF02C00E12ACA /* noData@2x.png */, + 116ACEAD1FCCF02C00E12ACA /* noData@3x.png */, + 113E4C6C1FCFE13200D50F17 /* xx@2x.png */, + 113E4C6D1FCFE13200D50F17 /* xx@3x.png */, + 11908D921FCE9B0B00B8569F /* share_white_icon@2x.png */, + 11908D931FCE9B0C00B8569F /* share_white_icon@3x.png */, + 11908DD51FCEB84100B8569F /* phone_icon@2x.png */, + 11908DD71FCEB84200B8569F /* phone_icon@3x.png */, + 11908DD91FCEB84300B8569F /* realname_icon@2x.png */, + 11908DD41FCEB84100B8569F /* realname_icon@3x.png */, + 117B0C8A1FDE81AF000C9E21 /* enterprise_icon@2x.png */, + 117B0C8B1FDE81AF000C9E21 /* enterprise_icon@3x.png */, + 11908DD61FCEB84100B8569F /* tuan_icon@2x.png */, + 11908DD81FCEB84200B8569F /* tuan_icon@3x.png */, + 11908DE11FCEBE8200B8569F /* phone_hui_icon@2x.png */, + 11908DE31FCEBE8200B8569F /* phone_hui_icon@3x.png */, + 11908DE41FCEBE8300B8569F /* realname_hui_icon@2x.png */, + 11908DE51FCEBE8300B8569F /* realname_hui_icon@3x.png */, + 117B0C861FDE81A5000C9E21 /* enterprise_hui_icon@2x.png */, + 117B0C871FDE81A5000C9E21 /* enterprise_hui_icon@3x.png */, + 11908DE21FCEBE8200B8569F /* tuan_hui_icon@2x.png */, + 11908DE01FCEBE8200B8569F /* tuan_hui_icon@3x.png */, + 1178FCB2200371C500162248 /* new_enterprise_icon@2x.png */, + 1178FCB6200371C600162248 /* new_enterprise_icon@3x.png */, + 1178FCB4200371C500162248 /* new_phone_icon@2x.png */, + 1178FCB7200371C600162248 /* new_phone_icon@3x.png */, + 1178FCB5200371C600162248 /* new_realname_icon@2x.png */, + 1178FCB0200371C400162248 /* new_realname_icon@3x.png */, + 1178FCB1200371C400162248 /* new_tuan_icon@2x.png */, + 1178FCB3200371C500162248 /* new_tuan_icon@3x.png */, + 11CFFD2F2004AFC3007D169D /* new_enterprise_hui_icon@2x.png */, + 11CFFD322004AFC4007D169D /* new_enterprise_hui_icon@3x.png */, + 11CFFD332004AFC4007D169D /* new_phone_hui_icon@2x.png */, + 11CFFD342004AFC5007D169D /* new_phone_hui_icon@3x.png */, + 11CFFD312004AFC4007D169D /* new_realname_hui_icon@2x.png */, + 11CFFD302004AFC3007D169D /* new_realname_hui_icon@3x.png */, + 11CFFD352004AFC5007D169D /* new_tuan_hui_icon@2x.png */, + 11CFFD362004AFC5007D169D /* new_tuan_hui_icon@3x.png */, + ); + path = Resource; + sourceTree = ""; + }; + 118CDE3A1FC007BE00E41475 /* Modules */ = { + isa = PBXGroup; + children = ( + 46F28819202955B1004835CF /* 内购 */, + 118CDE471FC007BE00E41475 /* Home(首页) */, + 118CDE3B1FC007BE00E41475 /* Activity(活动) */, + 118CDE411FC007BE00E41475 /* Discover(发现) */, + 118CDE4D1FC007BE00E41475 /* Mine(我的) */, + 118CDE551FC007BE00E41475 /* RegisterAndLogin(注册和登录) */, + ); + path = Modules; + sourceTree = ""; + }; + 118CDE3B1FC007BE00E41475 /* Activity(活动) */ = { + isa = PBXGroup; + children = ( + 118CDE3F1FC007BE00E41475 /* Model */, + 118CDE401FC007BE00E41475 /* View */, + 118CDE3C1FC007BE00E41475 /* Controller */, + 46EC25781FC66F0E00EF730D /* Resource */, + ); + path = "Activity(活动)"; + sourceTree = ""; + }; + 118CDE3C1FC007BE00E41475 /* Controller */ = { + isa = PBXGroup; + children = ( + 118CDE3D1FC007BE00E41475 /* ActivityViewController.h */, + 118CDE3E1FC007BE00E41475 /* ActivityViewController.m */, + 11259A051FC6AB7B009D18E4 /* EventDetailsViewController.h */, + 11259A041FC6AB7B009D18E4 /* EventDetailsViewController.m */, + 11259A371FC6AD9A009D18E4 /* LikeViewController.h */, + 11259A381FC6AD9B009D18E4 /* LikeViewController.m */, + 46EC257D1FC66FF500EF730D /* MyActivityViewController.h */, + 46EC257E1FC66FF500EF730D /* MyActivityViewController.m */, + ); + path = Controller; + sourceTree = ""; + }; + 118CDE3F1FC007BE00E41475 /* Model */ = { + isa = PBXGroup; + children = ( + 11259A311FC6AD6C009D18E4 /* MessageModel.h */, + 11259A321FC6AD6C009D18E4 /* MessageModel.m */, + 11E2B9C11FC2CB5300CE9FF3 /* ActivityListModel.h */, + 11E2B9C01FC2CB5300CE9FF3 /* ActivityListModel.m */, + 11259A341FC6AD82009D18E4 /* likeModel.h */, + 11259A351FC6AD82009D18E4 /* likeModel.m */, + ); + path = Model; + sourceTree = ""; + }; + 118CDE401FC007BE00E41475 /* View */ = { + isa = PBXGroup; + children = ( + 4691BE1A1FCD42730077237C /* ApplyPersonView.h */, + 4691BE191FCD42730077237C /* ApplyPersonView.m */, + 4691BE171FCD31F90077237C /* ApplyView.h */, + 4691BE161FCD31F90077237C /* ApplyView.m */, + 11259A0A1FC6ABE6009D18E4 /* EventInFnoView.h */, + 11259A0B1FC6ABE7009D18E4 /* EventInFnoView.m */, + 11E2B9BE1FC2CB3500CE9FF3 /* ActivityListCell.h */, + 11E2B9BD1FC2CB3500CE9FF3 /* ActivityListCell.m */, + 11E2B9C41FC2CB6A00CE9FF3 /* MoreEventCell.h */, + 11E2B9C31FC2CB6A00CE9FF3 /* MoreEventCell.m */, + 11259A171FC6AC76009D18E4 /* EventHeadView.h */, + 11259A161FC6AC76009D18E4 /* EventHeadView.m */, + 11259A221FC6ACE4009D18E4 /* InformationView.h */, + 11259A231FC6ACE4009D18E4 /* InformationView.m */, + 11259A261FC6ACFD009D18E4 /* BottomView.h */, + 11259A251FC6ACFC009D18E4 /* BottomView.m */, + 11259A291FC6AD11009D18E4 /* ImageTextButton.h */, + 11259A281FC6AD11009D18E4 /* ImageTextButton.m */, + 11259A3A1FC6ADD6009D18E4 /* JQActionSheet.h */, + 11259A3B1FC6ADD6009D18E4 /* JQActionSheet.m */, + 11259A3D1FC6ADF9009D18E4 /* BottomBtnView.h */, + 11259A3E1FC6ADF9009D18E4 /* BottomBtnView.m */, + 11259A471FC6AE58009D18E4 /* EventItemView.h */, + 11259A461FC6AE58009D18E4 /* EventItemView.m */, + 11259A4C1FC6AE8C009D18E4 /* CommentHeadView.h */, + 11259A4D1FC6AE8C009D18E4 /* CommentHeadView.m */, + 11259A4F1FC6B31E009D18E4 /* CommentCell.h */, + 11259A501FC6B31E009D18E4 /* CommentCell.m */, + 11259A531FC6B335009D18E4 /* EventFooterView.h */, + 11259A521FC6B335009D18E4 /* EventFooterView.m */, + 11259A551FC6B354009D18E4 /* EventFootBtn.h */, + 11259A561FC6B355009D18E4 /* EventFootBtn.m */, + 11259A641FC6BEDD009D18E4 /* LikeCell.h */, + 11259A651FC6BEDD009D18E4 /* LikeCell.m */, + 46EC25801FC6730F00EF730D /* MyActivityCell.h */, + 46EC25811FC6730F00EF730D /* MyActivityCell.m */, + ); + path = View; + sourceTree = ""; + }; + 118CDE411FC007BE00E41475 /* Discover(发现) */ = { + isa = PBXGroup; + children = ( + 46E9D07E1FC7B00B00F7A344 /* Model */, + 118CDE461FC007BE00E41475 /* View */, + 118CDE421FC007BE00E41475 /* Controller */, + 11E2B9011FC2848900CE9FF3 /* Resource */, + ); + path = "Discover(发现)"; + sourceTree = ""; + }; + 118CDE421FC007BE00E41475 /* Controller */ = { + isa = PBXGroup; + children = ( + 118CDE431FC007BE00E41475 /* DiscoverViewController.h */, + 118CDE441FC007BE00E41475 /* DiscoverViewController.m */, + 113E4C5C1FCFDB5D00D50F17 /* FindViewController.h */, + 113E4C5D1FCFDB5D00D50F17 /* FindViewController.m */, + 463735D81FCBB3E50062416E /* 系统推荐 */, + 46C0CF4D1FC6C53600F1472C /* 资讯 */, + 46C0CF4E1FC6C56000F1472C /* 缘圈 */, + 46C0CF4F1FC6C57F00F1472C /* 好友 */, + ); + path = Controller; + sourceTree = ""; + }; + 118CDE461FC007BE00E41475 /* View */ = { + isa = PBXGroup; + children = ( + 113E4C621FCFDC1600D50F17 /* SpeedCell.h */, + 113E4C631FCFDC1700D50F17 /* SpeedCell.m */, + 113E4C5F1FCFDBF600D50F17 /* ConditionView.h */, + 113E4C601FCFDBF600D50F17 /* ConditionView.m */, + 463735E61FCBBA350062416E /* CordiaFooterView.h */, + 463735E51FCBBA350062416E /* CordiaFooterView.m */, + 463735E31FCBB9650062416E /* CordialNewTableViewCell.h */, + 463735E21FCBB9650062416E /* CordialNewTableViewCell.m */, + 46C0CF541FC6C6E000F1472C /* MyPeopleCell.h */, + 46C0CF531FC6C6E000F1472C /* MyPeopleCell.m */, + 1166A6B21FC1366700CCA010 /* RelationAndOptionView.h */, + 1166A6B31FC1366700CCA010 /* RelationAndOptionView.m */, + 1166A6B51FC136AF00CCA010 /* LikeAndCommentBtnView.h */, + 1166A6B61FC136AF00CCA010 /* LikeAndCommentBtnView.m */, + 1166A6EB1FC1395200CCA010 /* PlayVideoView.h */, + 1166A6EA1FC1395200CCA010 /* PlayVideoView.m */, + 11E2B92F1FC2A72A00CE9FF3 /* UIPlaceHolderTextView.h */, + 11E2B9301FC2A72A00CE9FF3 /* UIPlaceHolderTextView.m */, + 11E2B9331FC2A76000CE9FF3 /* PicImageVIew.h */, + 11E2B9321FC2A76000CE9FF3 /* PicImageVIew.m */, + 11E2B98C1FC2AB9200CE9FF3 /* ShowBigViewCell.h */, + 11E2B98D1FC2AB9200CE9FF3 /* ShowBigViewCell.m */, + 11E2B9961FC2B02600CE9FF3 /* ItemImageBtn.h */, + 11E2B9971FC2B02600CE9FF3 /* ItemImageBtn.m */, + 11E2B99A1FC2B04200CE9FF3 /* SexView.h */, + 11E2B9991FC2B04200CE9FF3 /* SexView.m */, + 11E2B92C1FC2A47F00CE9FF3 /* EventDetailView.h */, + 11E2B92D1FC2A47F00CE9FF3 /* EventDetailView.m */, + 11E2B9BB1FC2C74300CE9FF3 /* SeeOrLikeCell.h */, + 11E2B9BA1FC2C74300CE9FF3 /* SeeOrLikeCell.m */, + 1130F36C1FEA06BA009AC59E /* Cell */, + 11A767BF1FF1EF8C0039ABEC /* ImgTextImg.h */, + 11A767C01FF1EF8C0039ABEC /* ImgTextImg.m */, + 1144A9E31FF37218006D6D7D /* PicturesView.h */, + 1144A9E41FF37218006D6D7D /* PicturesView.m */, + 112E3E641FE9032100825D7E /* DiscoverHeaderView.h */, + 112E3E651FE9032100825D7E /* DiscoverHeaderView.m */, + 118CC1B91FFB50CF004CC0D5 /* TopicDetailHeaderView.h */, + 118CC1BA1FFB50CF004CC0D5 /* TopicDetailHeaderView.m */, + 118CC1C41FFB7494004CC0D5 /* YuanquanDetailHeaderView.h */, + 118CC1C51FFB7494004CC0D5 /* YuanquanDetailHeaderView.m */, + 111CC5E61FFCB4E700A85682 /* YuanquanDetailBottomView.h */, + 111CC5E71FFCB4E700A85682 /* YuanquanDetailBottomView.m */, + 111CC5EC1FFCCC5D00A85682 /* YuanquanCommentHeaderView.h */, + 111CC5ED1FFCCC5D00A85682 /* YuanquanCommentHeaderView.m */, + ); + path = View; + sourceTree = ""; + }; + 118CDE471FC007BE00E41475 /* Home(首页) */ = { + isa = PBXGroup; + children = ( + 118CDE4B1FC007BE00E41475 /* Model */, + 466105111FC2768E008E89E8 /* View */, + 118CDE481FC007BE00E41475 /* Controller */, + 11259A791FC6C7E2009D18E4 /* Resource */, + ); + path = "Home(首页)"; + sourceTree = ""; + }; + 118CDE481FC007BE00E41475 /* Controller */ = { + isa = PBXGroup; + children = ( + 4657B90220030D0F00609928 /* otherView */, + 463735941FC7E7AF0062416E /* 消息 */, + 46212D1A1FC2625000E89A57 /* MapViewController.h */, + 46212D1B1FC2625000E89A57 /* MapViewController.m */, + 118CDE491FC007BE00E41475 /* HomeViewController.h */, + 118CDE4A1FC007BE00E41475 /* HomeViewController.m */, + 114D23DA1FC7AB25000DC5EB /* OtherViewController.h */, + 114D23DB1FC7AB25000DC5EB /* OtherViewController.m */, + ); + path = Controller; + sourceTree = ""; + }; + 118CDE4B1FC007BE00E41475 /* Model */ = { + isa = PBXGroup; + children = ( + 463735B61FC7F8140062416E /* InFnoModel.h */, + 463735B71FC7F8140062416E /* InFnoModel.m */, + 114D24021FC7BA0C000DC5EB /* EmotionModel.h */, + 114D24011FC7BA0C000DC5EB /* EmotionModel.m */, + 11259A761FC6C6BA009D18E4 /* CardModel.h */, + 11259A771FC6C6BB009D18E4 /* CardModel.m */, + ); + path = Model; + sourceTree = ""; + }; + 118CDE4D1FC007BE00E41475 /* Mine(我的) */ = { + isa = PBXGroup; + children = ( + 466334061FC3FB02000BE9EE /* Model */, + 118CDE521FC007BE00E41475 /* View */, + 118CDE4E1FC007BE00E41475 /* Controller */, + 11E2B9C61FC2CE2F00CE9FF3 /* Resource */, + ); + path = "Mine(我的)"; + sourceTree = ""; + }; + 118CDE4E1FC007BE00E41475 /* Controller */ = { + isa = PBXGroup; + children = ( + 114EDA171FC3D86C008BAE09 /* 我的资料 */, + 118CDE4F1FC007BE00E41475 /* MineViewController.h */, + 118CDE501FC007BE00E41475 /* MineViewController.m */, + 114EDA181FC3D896008BAE09 /* 设置 */, + 463735EB1FCBBCDC0062416E /* 我的足迹 */, + 4663341A1FC42B10000BE9EE /* 我的认证 */, + 114EDA141FC3D82A008BAE09 /* 我的钱包 */, + 114EDA121FC3D817008BAE09 /* 我的礼物 */, + ); + path = Controller; + sourceTree = ""; + }; + 118CDE521FC007BE00E41475 /* View */ = { + isa = PBXGroup; + children = ( + 118CDE531FC007BE00E41475 /* MineTopView.h */, + 118CDE541FC007BE00E41475 /* MineTopView.m */, + 114ED9FE1FC3B86C008BAE09 /* MyTicketCell.h */, + 114EDA001FC3B86D008BAE09 /* MyTicketCell.m */, + 114ED9FF1FC3B86C008BAE09 /* SyceeCell.h */, + 114EDA011FC3B86D008BAE09 /* SyceeCell.m */, + 11E2B9D11FC2E68100CE9FF3 /* SettingView.h */, + 11E2B9D21FC2E68200CE9FF3 /* SettingView.m */, + 466333FC1FC3DAB5000BE9EE /* CommonCell.h */, + 466333FD1FC3DAB5000BE9EE /* CommonCell.m */, + 4663340D1FC40DB5000BE9EE /* QYStarView.h */, + 4663340E1FC40DB5000BE9EE /* QYStarView.m */, + 114EDA1C1FC3D8ED008BAE09 /* GiftCell.h */, + 114EDA191FC3D8EC008BAE09 /* GiftCell.m */, + 114EDA1A1FC3D8EC008BAE09 /* PeopleOfGiftCell.h */, + 114EDA1B1FC3D8EC008BAE09 /* PeopleOfGiftCell.m */, + 11259A7C1FC6DCE7009D18E4 /* SignInView.h */, + 11259A7D1FC6DCE7009D18E4 /* SignInView.m */, + ); + path = View; + sourceTree = ""; + }; + 118CDE551FC007BE00E41475 /* RegisterAndLogin(注册和登录) */ = { + isa = PBXGroup; + children = ( + 118CDE5B1FC007BE00E41475 /* Model */, + 118CDE611FC007BE00E41475 /* View */, + 118CDE561FC007BE00E41475 /* Controller */, + 118CDE5C1FC007BE00E41475 /* Resource */, + ); + path = "RegisterAndLogin(注册和登录)"; + sourceTree = ""; + }; + 118CDE561FC007BE00E41475 /* Controller */ = { + isa = PBXGroup; + children = ( + 11E2B8FE1FC2843100CE9FF3 /* LoginViewController.h */, + 11E2B8FF1FC2843100CE9FF3 /* LoginViewController.m */, + 118CDE591FC007BE00E41475 /* RegisterViewController.h */, + 118CDE5A1FC007BE00E41475 /* RegisterViewController.m */, + 118069BB1FC50A4500893BE7 /* ForgetPwdViewController.h */, + 118069BC1FC50A4500893BE7 /* ForgetPwdViewController.m */, + ); + path = Controller; + sourceTree = ""; + }; + 118CDE5B1FC007BE00E41475 /* Model */ = { + isa = PBXGroup; + children = ( + ); + path = Model; + sourceTree = ""; + }; + 118CDE5C1FC007BE00E41475 /* Resource */ = { + isa = PBXGroup; + children = ( + 46712F9D1FD637CD00EECDC2 /* login_logo@2x.png */, + 46712F9C1FD637CD00EECDC2 /* login_logo@3x.png */, + 11908DEE1FCEBF5E00B8569F /* loginphone_icon@2x.png */, + 11908DEF1FCEBF5E00B8569F /* loginphone_icon@3x.png */, + 11908DED1FCEBF5E00B8569F /* password_icon@2x.png */, + 11908DEC1FCEBF5E00B8569F /* password_icon@3x.png */, + 11908DF01FCEBF5F00B8569F /* sex_icon@2x.png */, + 11908DF11FCEBF5F00B8569F /* sex_icon@3x.png */, + 118069FB1FC5617300893BE7 /* weixin_icon@2x.png */, + 118069FA1FC5617300893BE7 /* weixin_icon@3x.png */, + 118069F21FC560CB00893BE7 /* qq_icon@2x.png */, + 118069F31FC560CB00893BE7 /* qq_icon@3x.png */, + 118069F61FC5612200893BE7 /* weibo_icon@2x.png */, + 118069F71FC5612200893BE7 /* weibo_icon@3x.png */, + ); + path = Resource; + sourceTree = ""; + }; + 118CDE611FC007BE00E41475 /* View */ = { + isa = PBXGroup; + children = ( + 118CDE621FC007BE00E41475 /* InputTextView.h */, + 118CDE631FC007BE00E41475 /* InputTextView.m */, + 118CDEA91FC0142100E41475 /* ThirdLoginView.h */, + 118CDEAA1FC0142100E41475 /* ThirdLoginView.m */, + ); + path = View; + sourceTree = ""; + }; + 118CDE651FC007BF00E41475 /* Base */ = { + isa = PBXGroup; + children = ( + 118CDE661FC007BF00E41475 /* NavigationController */, + 118CDE691FC007BF00E41475 /* RootViewController */, + 118CDE6E1FC007BF00E41475 /* TabbarController */, + 466333F51FC3B455000BE9EE /* QYweb */, + ); + path = Base; + sourceTree = ""; + }; + 118CDE661FC007BF00E41475 /* NavigationController */ = { + isa = PBXGroup; + children = ( + 118CDE671FC007BF00E41475 /* RootNavigationController.h */, + 118CDE681FC007BF00E41475 /* RootNavigationController.m */, + ); + path = NavigationController; + sourceTree = ""; + }; + 118CDE691FC007BF00E41475 /* RootViewController */ = { + isa = PBXGroup; + children = ( + 118CDE6A1FC007BF00E41475 /* RootViewController.h */, + 118CDE6B1FC007BF00E41475 /* RootViewController.m */, + 118CDE6C1FC007BF00E41475 /* ZCRefreshTableViewController.h */, + 118CDE6D1FC007BF00E41475 /* ZCRefreshTableViewController.m */, + ); + path = RootViewController; + sourceTree = ""; + }; + 118CDE6E1FC007BF00E41475 /* TabbarController */ = { + isa = PBXGroup; + children = ( + 46712FA01FD784C600EECDC2 /* UITabBar+badge.m */, + 118CDE6F1FC007BF00E41475 /* MainTabBarController.h */, + 118CDE701FC007BF00E41475 /* MainTabBarController.m */, + 46EAB9D21FCBFF1000BC9B12 /* UITabBar+badge.h */, + ); + path = TabbarController; + sourceTree = ""; + }; + 118CDE711FC007BF00E41475 /* AppDelegate */ = { + isa = PBXGroup; + children = ( + 118CDE741FC007BF00E41475 /* AppDelegate.h */, + 118CDE751FC007BF00E41475 /* AppDelegate.m */, + 118CDE721FC007BF00E41475 /* AppDelegate+AppService.h */, + 118CDE731FC007BF00E41475 /* AppDelegate+AppService.m */, + 46212D1D1FC2630600E89A57 /* AppDelegate+AppTripartite.h */, + 46212D1E1FC2630600E89A57 /* AppDelegate+AppTripartite.mm */, + ); + path = AppDelegate; + sourceTree = ""; + }; + 118CDEA81FC0098300E41475 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 118CDEA41FC0093B00E41475 /* LaunchScreen.storyboard */, + 118CDEA31FC0093B00E41475 /* Main.storyboard */, + 118CDDF01FC0077C00E41475 /* Info.plist */, + 118CDDF11FC0077C00E41475 /* main.m */, + 118CDE641FC007BF00E41475 /* PrefixHeader.pch */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + 118CDEAC1FC0282100E41475 /* Controller */ = { + isa = PBXGroup; + children = ( + 114EDACD1FC41079008BAE09 /* TapGestureRecognizer.h */, + 114EDACE1FC41079008BAE09 /* TapGestureRecognizer.m */, + 118CDEAD1FC0286900E41475 /* PhoneCodeViewController.h */, + 118CDEAE1FC0286900E41475 /* PhoneCodeViewController.m */, + 4663341E1FC514C4000BE9EE /* TextFieldViewController.h */, + 4663341F1FC514C4000BE9EE /* TextFieldViewController.m */, + ); + path = Controller; + sourceTree = ""; + }; + 118DA3301FD513BC00246522 /* 引导页 */ = { + isa = PBXGroup; + children = ( + 118DA33B1FD514BD00246522 /* 4 */, + 118DA3311FD514BC00246522 /* 5 */, + 118DA3361FD514BD00246522 /* 6 */, + 118DA3401FD514BD00246522 /* 6p */, + 115C3E1A1FD8EB9100370D92 /* X */, + ); + path = "引导页"; + sourceTree = ""; + }; + 118DA3311FD514BC00246522 /* 5 */ = { + isa = PBXGroup; + children = ( + 118DA3321FD514BC00246522 /* launch_5_1.png */, + 118DA3331FD514BC00246522 /* launch_5_2.png */, + 118DA3341FD514BC00246522 /* launch_5_3.png */, + 118DA3351FD514BC00246522 /* launch_5_4.png */, + ); + path = 5; + sourceTree = ""; + }; + 118DA3361FD514BD00246522 /* 6 */ = { + isa = PBXGroup; + children = ( + 118DA3371FD514BD00246522 /* launch_6_1.png */, + 118DA3381FD514BD00246522 /* launch_6_2.png */, + 118DA3391FD514BD00246522 /* launch_6_3.png */, + 118DA33A1FD514BD00246522 /* launch_6_4.png */, + ); + path = 6; + sourceTree = ""; + }; + 118DA33B1FD514BD00246522 /* 4 */ = { + isa = PBXGroup; + children = ( + 118DA33C1FD514BD00246522 /* launch_4_1.png */, + 118DA33D1FD514BD00246522 /* launch_4_2.png */, + 118DA33E1FD514BD00246522 /* launch_4_3.png */, + 118DA33F1FD514BD00246522 /* launch_4_4.png */, + ); + path = 4; + sourceTree = ""; + }; + 118DA3401FD514BD00246522 /* 6p */ = { + isa = PBXGroup; + children = ( + 118DA3411FD514BD00246522 /* launch_6p_1.png */, + 118DA3421FD514BD00246522 /* launch_6p_2.png */, + 118DA3431FD514BD00246522 /* launch_6p_3.png */, + 118DA3441FD514BD00246522 /* launch_6p_4.png */, + ); + path = 6p; + sourceTree = ""; + }; + 11908D961FCEB28A00B8569F /* tabbar */ = { + isa = PBXGroup; + children = ( + 11908D991FCEB2B300B8569F /* home_hui@2x.png */, + 11908D971FCEB2B200B8569F /* home_hui@3x.png */, + 11908D9A1FCEB2B300B8569F /* home@2x.png */, + 11908D9B1FCEB2B300B8569F /* home@3x.png */, + 11908D9F1FCEB2B300B8569F /* activity_hui@2x.png */, + 11908DA51FCEB2B400B8569F /* activity_hui@3x.png */, + 11908D9E1FCEB2B300B8569F /* activity@2x.png */, + 11908DA01FCEB2B300B8569F /* activity@3x.png */, + 11908DA31FCEB2B400B8569F /* discover_hui@2x.png */, + 11908DA61FCEB2B400B8569F /* discover_hui@3x.png */, + 11908DA41FCEB2B400B8569F /* discover@2x.png */, + 11908DA11FCEB2B400B8569F /* discover@3x.png */, + 11908D9C1FCEB2B300B8569F /* mine_hui@2x.png */, + 11908D9D1FCEB2B300B8569F /* mine_hui@3x.png */, + 11908D981FCEB2B300B8569F /* mine@2x.png */, + 11908DA21FCEB2B400B8569F /* mine@3x.png */, + ); + path = tabbar; + sourceTree = ""; + }; + 11908DB71FCEB55400B8569F /* 我的 */ = { + isa = PBXGroup; + children = ( + 11908DBE1FCEB5BF00B8569F /* mine_0_0@2x.png */, + 11908DC11FCEB5BF00B8569F /* mine_0_0@3x.png */, + 11908DBC1FCEB5BE00B8569F /* mine_0_1@2x.png */, + 11908DC01FCEB5BF00B8569F /* mine_0_1@3x.png */, + 11908DBF1FCEB5BF00B8569F /* mine_1_0@2x.png */, + 11908DBD1FCEB5BE00B8569F /* mine_1_0@3x.png */, + 11908DC41FCEB5BF00B8569F /* mine_1_1@2x.png */, + 11908DC51FCEB5C000B8569F /* mine_1_1@3x.png */, + 11908DC21FCEB5BF00B8569F /* mine_1_2@2x.png */, + 11908DC31FCEB5BF00B8569F /* mine_1_2@3x.png */, + 11908DBB1FCEB5BE00B8569F /* mine_2_0@2x.png */, + 11908DB81FCEB5BE00B8569F /* mine_2_0@3x.png */, + 11908DBA1FCEB5BE00B8569F /* mine_2_1@2x.png */, + 11908DB91FCEB5BE00B8569F /* mine_2_1@3x.png */, + ); + path = "我的"; + sourceTree = ""; + }; + 11E2A9D51FE794D800E3A4B2 /* XLCardSwitch */ = { + isa = PBXGroup; + children = ( + 11E2A9D61FE794D800E3A4B2 /* XLCard.h */, + 11E2A9D71FE794D800E3A4B2 /* XLCard.m */, + 11E2A9D81FE794D800E3A4B2 /* XLCardItem.h */, + 11E2A9D91FE794D800E3A4B2 /* XLCardItem.m */, + 11E2A9DA1FE794D800E3A4B2 /* XLCardSwitch.h */, + 11E2A9DB1FE794D800E3A4B2 /* XLCardSwitch.m */, + 11E2A9DC1FE794D800E3A4B2 /* XLCardSwitchFlowLayout.h */, + 11E2A9DD1FE794D800E3A4B2 /* XLCardSwitchFlowLayout.m */, + ); + path = XLCardSwitch; + sourceTree = ""; + }; + 11E2B9011FC2848900CE9FF3 /* Resource */ = { + isa = PBXGroup; + children = ( + 118CC1C11FFB6DAC004CC0D5 /* fire@2x.png */, + 118CC1C01FFB6DAC004CC0D5 /* fire@3x.png */, + 113E4C711FCFEFFA00D50F17 /* search_icon@2x.png */, + 113E4C721FCFEFFB00D50F17 /* search_icon@3x.png */, + 113E4C731FCFEFFB00D50F17 /* sweep_icon@2x.png */, + 113E4C701FCFEFFA00D50F17 /* sweep_icon@3x.png */, + 11A1D98E1FCC27A1005CA3E8 /* redLike@2x.png */, + 11A1D98D1FCC27A1005CA3E8 /* redLike@3x.png */, + 11E2B9021FC2848900CE9FF3 /* huifu@2x.png */, + 11E2B9031FC2848900CE9FF3 /* huifu@3x.png */, + 11E2B9041FC2848900CE9FF3 /* PYQ-dz@2x.png */, + 11E2B9051FC2848900CE9FF3 /* PYQ-dz@3x.png */, + 11E2B9061FC2848900CE9FF3 /* PYQ-hx@2x.png */, + 11E2B9071FC2848900CE9FF3 /* PYQ-hx@3x.png */, + 11E2B9081FC2848900CE9FF3 /* PYQ-jt@2x.png */, + 11E2B9091FC2848900CE9FF3 /* PYQ-jt@3x.png */, + 11E2B90A1FC2848900CE9FF3 /* PYQ-pjds@2x.png */, + 11E2B90B1FC2848900CE9FF3 /* PYQ-pjds@3x.png */, + 11E2B90C1FC2848900CE9FF3 /* PYQ-pl@2x.png */, + 11E2B90D1FC2848900CE9FF3 /* PYQ-pl@3x.png */, + 11E2B90E1FC2848900CE9FF3 /* PYQ-xj@2x.png */, + 11E2B90F1FC2848900CE9FF3 /* PYQ-xj@3x.png */, + 11E2B9101FC2848900CE9FF3 /* SDS-dd@2x.png */, + 11E2B9111FC2848900CE9FF3 /* SDS-dd@3x.png */, + 11E2B9121FC2848900CE9FF3 /* video_play@2x.png */, + 11E2B9131FC2848900CE9FF3 /* video_play@3x.png */, + 11E2B9A51FC2BD4D00CE9FF3 /* girl@2x.png */, + 11E2B9A61FC2BD4D00CE9FF3 /* girl@3x.png */, + 11E2B9A91FC2BD9000CE9FF3 /* boy@2x.png */, + 11E2B9AA1FC2BD9000CE9FF3 /* boy@3x.png */, + 11E2B9AD1FC2BDCD00CE9FF3 /* Arrow-pointing@2x.png */, + 11E2B9B01FC2BE2000CE9FF3 /* add_image@2x.png */, + 11E2B9AF1FC2BE2000CE9FF3 /* add_image@3x.png */, + 11E2B9B41FC2BE7100CE9FF3 /* set_video@2x.png */, + 11E2B9B31FC2BE7100CE9FF3 /* set_video@3x.png */, + 118069DE1FC54D0C00893BE7 /* delete_icon@2x.png */, + 118069DF1FC54D0C00893BE7 /* delete_icon@3x.png */, + 11CCD1BA1FFDF57100668A7A /* qyzx@2x.png */, + 11CCD1AF1FFDF56E00668A7A /* qyzx@3x.png */, + 11CCD1B31FFDF56F00668A7A /* xttj@2x.png */, + 11CCD1B41FFDF56F00668A7A /* xttj@3x.png */, + 11CCD1AE1FFDF56E00668A7A /* yfcs@2x.png */, + 11CCD1B61FFDF57000668A7A /* yfcs@3x.png */, + 11CCD1B01FFDF56F00668A7A /* topic_public@2x.png */, + 11CCD1B21FFDF56F00668A7A /* topic_public@3x.png */, + 11CCD1B71FFDF57000668A7A /* yq_comment@2x.png */, + 11CCD1B81FFDF57000668A7A /* yq_comment@3x.png */, + 11CCD1B51FFDF57000668A7A /* yq_like_no@2x.png */, + 11CCD1B91FFDF57000668A7A /* yq_like_no@3x.png */, + 11CFFD482004CE5C007D169D /* yq_like_yes@2x.png */, + 11CFFD472004CE5B007D169D /* yq_like_yes@3x.png */, + 11CCD1BB1FFDF57100668A7A /* yq_video@2x.png */, + 11CCD1B11FFDF56F00668A7A /* yq_video@3x.png */, + 111752331FFF7463001EF870 /* yq_msg@2x.png */, + 111752311FFF7462001EF870 /* yq_msg@3x.png */, + 111752321FFF7462001EF870 /* yq_share@2x.png */, + 111752351FFF7463001EF870 /* yq_share@3x.png */, + 111752341FFF7463001EF870 /* yq_collect_hui@2x.png */, + 111752301FFF7462001EF870 /* yq_collect_hui@3x.png */, + 11CFFD402004C682007D169D /* yq_collect@2x.png */, + 11CFFD3F2004C681007D169D /* yq_collect@3x.png */, + 1117523F1FFF7548001EF870 /* yq_concern_bai@2x.png */, + 1117523D1FFF7547001EF870 /* yq_concern_bai@3x.png */, + 11CFFD432004C7B0007D169D /* yq_concern@2x.png */, + 11CFFD442004C7B0007D169D /* yq_concern@3x.png */, + 1117523E1FFF7548001EF870 /* yq_report@2x.png */, + 1117523C1FFF7547001EF870 /* yq_report@3x.png */, + ); + path = Resource; + sourceTree = ""; + }; + 11E2B9381FC2A94A00CE9FF3 /* TZImagePickerController */ = { + isa = PBXGroup; + children = ( + 11E2B9391FC2A94A00CE9FF3 /* NSBundle+TZImagePicker.h */, + 11E2B93A1FC2A94A00CE9FF3 /* NSBundle+TZImagePicker.m */, + 11E2B93B1FC2A94A00CE9FF3 /* TZAssetCell.h */, + 11E2B93C1FC2A94A00CE9FF3 /* TZAssetCell.m */, + 11E2B93D1FC2A94A00CE9FF3 /* TZAssetModel.h */, + 11E2B93E1FC2A94A00CE9FF3 /* TZAssetModel.m */, + 11E2B93F1FC2A94A00CE9FF3 /* TZGifPhotoPreviewController.h */, + 11E2B9401FC2A94A00CE9FF3 /* TZGifPhotoPreviewController.m */, + 11E2B9411FC2A94A00CE9FF3 /* TZImageCropManager.h */, + 11E2B9421FC2A94A00CE9FF3 /* TZImageCropManager.m */, + 11E2B9431FC2A94A00CE9FF3 /* TZImageManager.h */, + 11E2B9441FC2A94A00CE9FF3 /* TZImageManager.m */, + 11E2B9451FC2A94A00CE9FF3 /* TZImagePickerController.bundle */, + 11E2B9461FC2A94A00CE9FF3 /* TZImagePickerController.h */, + 11E2B9471FC2A94A00CE9FF3 /* TZImagePickerController.m */, + 11E2B9481FC2A94A00CE9FF3 /* TZPhotoPickerController.h */, + 11E2B9491FC2A94A00CE9FF3 /* TZPhotoPickerController.m */, + 11E2B94A1FC2A94B00CE9FF3 /* TZPhotoPreviewCell.h */, + 11E2B94B1FC2A94B00CE9FF3 /* TZPhotoPreviewCell.m */, + 11E2B94C1FC2A94B00CE9FF3 /* TZPhotoPreviewController.h */, + 11E2B94D1FC2A94B00CE9FF3 /* TZPhotoPreviewController.m */, + 11E2B94E1FC2A94B00CE9FF3 /* TZProgressView.h */, + 11E2B94F1FC2A94B00CE9FF3 /* TZProgressView.m */, + 11E2B9501FC2A94B00CE9FF3 /* TZVideoPlayerController.h */, + 11E2B9511FC2A94B00CE9FF3 /* TZVideoPlayerController.m */, + 11E2B9521FC2A94B00CE9FF3 /* UIView+Layout.h */, + 11E2B9531FC2A94B00CE9FF3 /* UIView+Layout.m */, + ); + path = TZImagePickerController; + sourceTree = ""; + }; + 11E2B9621FC2A9B200CE9FF3 /* 视频 */ = { + isa = PBXGroup; + children = ( + 46579D6B1FDA9BBA00FF8586 /* QPSDK.bundle */, + 46579D651FDA925200FF8586 /* AliyunVideoCore.framework */, + 46579D641FDA925200FF8586 /* AliyunVideoSDK.framework */, + 46579D631FDA925100FF8586 /* QuCore-ThirdParty.framework */, + 11E2B9631FC2A9B200CE9FF3 /* PlayerViewController */, + ); + path = "视频"; + sourceTree = ""; + }; + 11E2B9631FC2A9B200CE9FF3 /* PlayerViewController */ = { + isa = PBXGroup; + children = ( + 11E2B9641FC2A9B200CE9FF3 /* PlayViewController.h */, + 11E2B9651FC2A9B200CE9FF3 /* PlayViewController.m */, + ); + path = PlayerViewController; + sourceTree = ""; + }; + 11E2B96E1FC2AB5200CE9FF3 /* MJPhotoBrowser */ = { + isa = PBXGroup; + children = ( + 11E2B96F1FC2AB5200CE9FF3 /* MJPhoto.h */, + 11E2B9701FC2AB5200CE9FF3 /* MJPhoto.m */, + 11E2B9711FC2AB5200CE9FF3 /* MJPhotoBrowser.bundle */, + 11E2B9721FC2AB5200CE9FF3 /* MJPhotoBrowser.h */, + 11E2B9731FC2AB5200CE9FF3 /* MJPhotoBrowser.m */, + 11E2B9741FC2AB5200CE9FF3 /* MJPhotoLoadingView.h */, + 11E2B9751FC2AB5200CE9FF3 /* MJPhotoLoadingView.m */, + 11E2B9761FC2AB5200CE9FF3 /* MJPhotoProgressView.h */, + 11E2B9771FC2AB5200CE9FF3 /* MJPhotoProgressView.m */, + 11E2B9781FC2AB5200CE9FF3 /* MJPhotoToolbar.h */, + 11E2B9791FC2AB5200CE9FF3 /* MJPhotoToolbar.m */, + 11E2B97A1FC2AB5200CE9FF3 /* MJPhotoView.h */, + 11E2B97B1FC2AB5200CE9FF3 /* MJPhotoView.m */, + 11E2B97C1FC2AB5200CE9FF3 /* SDWebImageManager+MJ.h */, + 11E2B97D1FC2AB5200CE9FF3 /* SDWebImageManager+MJ.m */, + 11E2B97E1FC2AB5200CE9FF3 /* UIImageView+MJWebCache.h */, + 11E2B97F1FC2AB5200CE9FF3 /* UIImageView+MJWebCache.m */, + ); + path = MJPhotoBrowser; + sourceTree = ""; + }; + 11E2B98F1FC2AE8300CE9FF3 /* MBProgressHUD */ = { + isa = PBXGroup; + children = ( + 11E2B9901FC2AE8300CE9FF3 /* MBProgressHUD+Add.h */, + 11E2B9911FC2AE8300CE9FF3 /* MBProgressHUD+Add.m */, + 11E2B9921FC2AE8300CE9FF3 /* MBProgressHUD.h */, + 11E2B9931FC2AE8300CE9FF3 /* MBProgressHUD.m */, + ); + path = MBProgressHUD; + sourceTree = ""; + }; + 11E2B99F1FC2B65000CE9FF3 /* 阿里云 */ = { + isa = PBXGroup; + children = ( + 11E2B9A01FC2B65000CE9FF3 /* AliyunOSSiOS.framework */, + ); + path = "阿里云"; + sourceTree = ""; + }; + 11E2B9C61FC2CE2F00CE9FF3 /* Resource */ = { + isa = PBXGroup; + children = ( + 11DA8C411FE1070B003B0728 /* arrow_down@2x.png */, + 11DA8C421FE1070C003B0728 /* arrow_down@3x.png */, + 11DA8C3D1FE106D6003B0728 /* arrow_up@2x.png */, + 11DA8C3E1FE106D7003B0728 /* arrow_up@3x.png */, + 463CE5C11FE0BA840068A31C /* phone_editor@2x.png */, + 11DA8C3B1FE0D2CE003B0728 /* phone_editor@3x.png */, + 11625BBB1FD7A8FD00E156E5 /* wdqb-xjq@2x.png */, + 11625BBA1FD7A8FD00E156E5 /* wdqb-xjq@3x.png */, + 11625BB71FD7A8D200E156E5 /* wdqb-xjq-h@2x.png */, + 11625BB61FD7A8D200E156E5 /* wdqb-xjq-h@3x.png */, + 11625BB31FD7A8A700E156E5 /* wdqb-gq@2x.png */, + 11625BB21FD7A8A600E156E5 /* wdqb-gq@3x.png */, + 11625BAE1FD7A85800E156E5 /* wdqb-ysy@2x.png */, + 11625BAF1FD7A85800E156E5 /* wdqb-ysy@3x.png */, + 11625BAA1FD7A81E00E156E5 /* wdqb-rcq@2x.png */, + 11625BAB1FD7A81E00E156E5 /* wdqb-rcq@3x.png */, + 11625BA61FD7A80100E156E5 /* wdqb-rcq-h@2x.png */, + 11625BA71FD7A80100E156E5 /* wdqb-rcq-h@3x.png */, + 46785D061FCFFA8B009E9B30 /* name@3x.png */, + 46785D031FCFFA8A009E9B30 /* starBackImage@2x.png */, + 46785D041FCFFA8B009E9B30 /* starBackImage@3x.png */, + 46785D051FCFFA8B009E9B30 /* starImage@2x.png */, + 46785D071FCFFA8B009E9B30 /* starImage@3x.png */, + 462024F11FCEC17300079C21 /* idnorm@2x.png */, + 462024F21FCEC17400079C21 /* idnorm@3x.png */, + 11908DB71FCEB55400B8569F /* 我的 */, + 462024D51FCE56E600079C21 /* 认证 */, + 116ACEEC1FCD63BB00E12ACA /* addMark@2x.png */, + 116ACEED1FCD63BB00E12ACA /* addMark@3x.png */, + 116ACEEA1FCD609400E12ACA /* nation.plist */, + 116ACEE61FCD52BB00E12ACA /* luzhi@2x.png */, + 116ACEE71FCD52BB00E12ACA /* luzhi@3x.png */, + 116ACEE21FCD4D8B00E12ACA /* zl-shiping@2x.png */, + 116ACEE31FCD4D8B00E12ACA /* zl-shiping@3x.png */, + 116ACEDE1FCD4D6C00E12ACA /* zl-shipin@2x.png */, + 116ACEDF1FCD4D6C00E12ACA /* zl-shipin@3x.png */, + 463735D41FCBAA8F0062416E /* id@2x.png */, + 463735D51FCBAA8F0062416E /* id@3x.png */, + 463735D11FCBA8A10062416E /* my_card@3x.png */, + 463735D01FCBA8A00062416E /* name@2x.png */, + 46C0CF3C1FC6AC4F00F1472C /* my_card@2x.png */, + 46C0CF371FC6A53300F1472C /* wenhao@2x.png */, + 46C0CF361FC6A53300F1472C /* wenhao@3x.png */, + 11E2B9C81FC2CE6700CE9FF3 /* setting_icon@2x.png */, + 11E2B9C71FC2CE6700CE9FF3 /* setting_icon@3x.png */, + 114EDA281FC3E470008BAE09 /* lw-as@2x.png */, + 114EDA291FC3E470008BAE09 /* lw-as@3x.png */, + 114EDA2D1FC3E47A008BAE09 /* lw-bbt@2x.png */, + 114EDA2C1FC3E47A008BAE09 /* lw-bbt@3x.png */, + 114EDA301FC3E486008BAE09 /* lw-cjd@2x.png */, + 114EDA311FC3E487008BAE09 /* lw-cjd@3x.png */, + 114EDA341FC3E491008BAE09 /* lw-dg@2x.png */, + 114EDA351FC3E491008BAE09 /* lw-dg@3x.png */, + 114EDA381FC3E49B008BAE09 /* lw-dsg@2x.png */, + 114EDA391FC3E49B008BAE09 /* lw-dsg@3x.png */, + 114EDA3D1FC3E4AD008BAE09 /* lw-dz@2x.png */, + 114EDA3C1FC3E4AD008BAE09 /* lw-dz@3x.png */, + 114EDA401FC3E4BA008BAE09 /* lw-fj@2x.png */, + 114EDA411FC3E4BA008BAE09 /* lw-fj@3x.png */, + 114EDA451FC3E4C2008BAE09 /* lw-fw@2x.png */, + 114EDA441FC3E4C2008BAE09 /* lw-fw@3x.png */, + 114EDA481FC3E4D7008BAE09 /* lw-jz@2x.png */, + 114EDA491FC3E4D7008BAE09 /* lw-jz@3x.png */, + 114EDA4C1FC3E4EB008BAE09 /* lw-kh@2x.png */, + 114EDA4D1FC3E4EB008BAE09 /* lw-kh@3x.png */, + 114EDA501FC3E4FC008BAE09 /* lw-mg1@2x.png */, + 114EDA511FC3E4FC008BAE09 /* lw-mg1@3x.png */, + 114EDA541FC3E52B008BAE09 /* lw-mg3@2x.png */, + 114EDA551FC3E52B008BAE09 /* lw-mg3@3x.png */, + 114EDA581FC3E541008BAE09 /* lw-mg99@2x.png */, + 114EDA591FC3E541008BAE09 /* lw-mg99@3x.png */, + 114EDA5D1FC3E54F008BAE09 /* lw-pj@2x.png */, + 114EDA5C1FC3E54F008BAE09 /* lw-pj@3x.png */, + 114EDA611FC3E559008BAE09 /* lw-qkl@2x.png */, + 114EDA601FC3E559008BAE09 /* lw-qkl@3x.png */, + 114EDA641FC3E567008BAE09 /* lw-yb@2x.png */, + 114EDA651FC3E567008BAE09 /* lw-yb@3x.png */, + 114EDA691FC3E575008BAE09 /* lw-yt@2x.png */, + 114EDA681FC3E575008BAE09 /* lw-yt@3x.png */, + 114EDA6C1FC3E593008BAE09 /* slw-lwh@2x.png */, + 114EDA6D1FC3E593008BAE09 /* slw-lwh@3x.png */, + 11806A501FC581FE00893BE7 /* selectDuigou@2x.png */, + 11806A511FC581FF00893BE7 /* selectDuigou@3x.png */, + 11806A551FC5823100893BE7 /* norDuigou@2x.png */, + 11806A541FC5823100893BE7 /* norDuigou@3x.png */, + 11259A7F1FC6DD19009D18E4 /* qdcg@2x.png */, + 11259A801FC6DD19009D18E4 /* qdcg@3x.png */, + ); + path = Resource; + sourceTree = ""; + }; + 46091A6C1FFF0BBE00F626D5 /* 相册 */ = { + isa = PBXGroup; + children = ( + 46091A821FFF0D2600F626D5 /* PhotoCollectionViewCell.h */, + 46091A811FFF0D2600F626D5 /* PhotoCollectionViewCell.m */, + 46091A851FFF0D2700F626D5 /* PhotoCollectionViewCell.xib */, + 46091A841FFF0D2700F626D5 /* PhotoFooterView.h */, + 46091A831FFF0D2600F626D5 /* PhotoFooterView.m */, + 46091A6D1FFF0BBE00F626D5 /* CHTCollectionViewWaterfallLayout.h */, + 46091A6E1FFF0BBE00F626D5 /* CHTCollectionViewWaterfallLayout.m */, + ); + path = "相册"; + sourceTree = ""; + }; + 46091A6F1FFF0BBE00F626D5 /* 毛玻璃 */ = { + isa = PBXGroup; + children = ( + 46091A7F1FFF0D1900F626D5 /* UIImage+ImageEffects.h */, + 46091A7E1FFF0D1800F626D5 /* UIImage+ImageEffects.m */, + 46091A7B1FFF0C5100F626D5 /* UIImageView+LBBlurredImage.h */, + 46091A7C1FFF0C5100F626D5 /* UIImageView+LBBlurredImage.m */, + ); + path = "毛玻璃"; + sourceTree = ""; + }; + 46091A701FFF0BBF00F626D5 /* 水波纹 */ = { + isa = PBXGroup; + children = ( + 46091A711FFF0BBF00F626D5 /* JQwaveView.h */, + 46091A721FFF0BBF00F626D5 /* JQwaveView.m */, + 46091A751FFF0BBF00F626D5 /* YYWeakProxy.h */, + 46091A761FFF0BBF00F626D5 /* YYWeakProxy.m */, + ); + path = "水波纹"; + sourceTree = ""; + }; + 46091A891FFF460600F626D5 /* images */ = { + isa = PBXGroup; + children = ( + 46091AA11FFF5F3D00F626D5 /* n_down@2x.png */, + 46091AA21FFF5F3E00F626D5 /* n_down@3x.png */, + 46091AA41FFF5F3E00F626D5 /* n_up@2x.png */, + 46091AA31FFF5F3E00F626D5 /* n_up@3x.png */, + 46091A8A1FFF460600F626D5 /* n_allday@2x.png */, + 46091A8B1FFF460600F626D5 /* n_allday@3x.png */, + 46091A8C1FFF460600F626D5 /* n_inter@2x.png */, + 46091A8D1FFF460600F626D5 /* n_inter@3x.png */, + 46091A8E1FFF460600F626D5 /* n_label@2x.png */, + 46091A8F1FFF460600F626D5 /* n_label@3x.png */, + 46091A901FFF460600F626D5 /* n_today@2x.png */, + 46091A911FFF460600F626D5 /* n_today@3x.png */, + 46091A921FFF460600F626D5 /* n_video@2x.png */, + 46091A931FFF460600F626D5 /* n_video@3x.png */, + ); + path = images; + sourceTree = ""; + }; + 462024D51FCE56E600079C21 /* 认证 */ = { + isa = PBXGroup; + children = ( + 462024D61FCE56E600079C21 /* Bitmap2@2x.png */, + 462024D71FCE56E600079C21 /* Bitmap2@3x.png */, + 462024D81FCE56E600079C21 /* Bitmap1@2x.png */, + 462024D91FCE56E600079C21 /* Bitmap1@3x.png */, + 462024DA1FCE56E600079C21 /* Bitmap3@2x.png */, + 462024DB1FCE56E600079C21 /* Bitmap3@3x.png */, + 462024DC1FCE56E600079C21 /* Bitmap4@2x.png */, + 462024DD1FCE56E600079C21 /* Bitmap4@3x.png */, + 462024DE1FCE56E600079C21 /* Bitmap5@2x.png */, + 462024DF1FCE56E600079C21 /* Bitmap5@3x.png */, + 462024E01FCE56E600079C21 /* Bitmap6@2x.png */, + 462024E11FCE56E600079C21 /* Bitmap6@3x.png */, + ); + path = "认证"; + sourceTree = ""; + }; + 46212CF31FC25D6500E89A57 /* BaiduMap_IOSSDK_v3 */ = { + isa = PBXGroup; + children = ( + 4635F2131FD1640800804833 /* Cluster */, + 4635F2111FD15FFF00804833 /* BaiduMapAPI_Utils.framework */, + 46212CF41FC25D6500E89A57 /* BaiduMapAPI_Base.framework */, + 46212CF51FC25D6500E89A57 /* BaiduMapAPI_Location.framework */, + 46212CF61FC25D6500E89A57 /* BaiduMapAPI_Map.framework */, + 46212CF71FC25D6500E89A57 /* BaiduMapAPI_Search.framework */, + 46212CF81FC25D6500E89A57 /* mapapi.bundle */, + 46212CF91FC25D6500E89A57 /* thirdlibs */, + ); + path = BaiduMap_IOSSDK_v3; + sourceTree = ""; + }; + 46212CF91FC25D6500E89A57 /* thirdlibs */ = { + isa = PBXGroup; + children = ( + 46212CFA1FC25D6500E89A57 /* libcrypto.a */, + 46212CFB1FC25D6500E89A57 /* libssl.a */, + ); + path = thirdlibs; + sourceTree = ""; + }; + 46212D061FC260A100E89A57 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 46617E2520295B2400BBC610 /* StoreKit.framework */, + 114D260B1FC7FB30000DC5EB /* libz.tbd */, + 114D26091FC7FB21000DC5EB /* libc++.tbd */, + 114D26071FC7FB09000DC5EB /* ImageIO.framework */, + 114D26051FC7FAF3000DC5EB /* MobileCoreServices.framework */, + 114D26031FC7FAAD000DC5EB /* AudioToolbox.framework */, + 114D26011FC7FA81000DC5EB /* CoreMedia.framework */, + 46E9D0861FC7C1E600F7A344 /* UserNotifications.framework */, + 11806A4E1FC570A900893BE7 /* libsqlite3.tbd */, + 114EDACB1FC40E0A008BAE09 /* AVFoundation.framework */, + 46212D181FC261E900E89A57 /* libsqlite3.0.tbd */, + 46212D161FC261DC00E89A57 /* libstdc++.6.0.9.tbd */, + 46212D141FC261BC00E89A57 /* SystemConfiguration.framework */, + 46212D121FC261A500E89A57 /* CoreLocation.framework */, + 46212D101FC2619100E89A57 /* QuartzCore.framework */, + 46212D0E1FC2617900E89A57 /* OpenGLES.framework */, + 46212D0C1FC2616300E89A57 /* CoreGraphics.framework */, + 46212D091FC260D100E89A57 /* Security.framework */, + 46212D081FC260BC00E89A57 /* CoreTelephony.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 462BC0E6200F3BC3009A1C6F /* 图片加载 */ = { + isa = PBXGroup; + children = ( + 462BC0EB200F3BED009A1C6F /* UITableView+XHWebImageAutoSize.h */, + 462BC0EE200F3BEE009A1C6F /* UITableView+XHWebImageAutoSize.m */, + 462BC0ED200F3BEE009A1C6F /* XHWebImageAutoSize.h */, + 462BC0E9200F3BED009A1C6F /* XHWebImageAutoSize.m */, + 462BC0E7200F3BEC009A1C6F /* XHWebImageAutoSizeCache.h */, + 462BC0EC200F3BED009A1C6F /* XHWebImageAutoSizeCache.m */, + 462BC0EA200F3BED009A1C6F /* XHWebImageAutoSizeConst.h */, + 462BC0E8200F3BED009A1C6F /* XHWebImageAutoSizeConst.m */, + ); + path = "图片加载"; + sourceTree = ""; + }; + 4635F2131FD1640800804833 /* Cluster */ = { + isa = PBXGroup; + children = ( + 4635F2141FD1640800804833 /* BMKClusterAlgorithm.h */, + 4635F2151FD1640800804833 /* BMKClusterAlgorithm.m */, + 4635F2161FD1640800804833 /* BMKClusterItem.h */, + 4635F2171FD1640800804833 /* BMKClusterItem.m */, + 4635F2181FD1640800804833 /* BMKClusterManager.h */, + 4635F2191FD1640800804833 /* BMKClusterManager.m */, + 4635F21A1FD1640800804833 /* BMKClusterQuadtree.h */, + 4635F21B1FD1640800804833 /* BMKClusterQuadtree.m */, + ); + path = Cluster; + sourceTree = ""; + }; + 463735941FC7E7AF0062416E /* 消息 */ = { + isa = PBXGroup; + children = ( + 46712F9A1FD6306500EECDC2 /* ConversationListController.h */, + 46712F991FD6306500EECDC2 /* ConversationListController.m */, + 4637359C1FC7ED5A0062416E /* SetpushViewController.h */, + 4637359B1FC7ED5A0062416E /* SetpushViewController.m */, + 463735951FC7EC650062416E /* SyStemNewsViewController.h */, + 463735971FC7EC650062416E /* SyStemNewsViewController.m */, + ); + path = "消息"; + sourceTree = ""; + }; + 4637359E1FC7EDE00062416E /* messageView */ = { + isa = PBXGroup; + children = ( + 463735A11FC7EDE00062416E /* SetPushCell.h */, + 463735A21FC7EDE00062416E /* SetPushCell.m */, + 463735B31FC7F59A0062416E /* SysCell.h */, + 463735B41FC7F59A0062416E /* SysCell.m */, + ); + path = messageView; + sourceTree = ""; + }; + 463735D81FCBB3E50062416E /* 系统推荐 */ = { + isa = PBXGroup; + children = ( + 463735E01FCBB8A30062416E /* CordialViewController.h */, + 463735DF1FCBB8A30062416E /* CordialViewController.m */, + ); + path = "系统推荐"; + sourceTree = ""; + }; + 463735EB1FCBBCDC0062416E /* 我的足迹 */ = { + isa = PBXGroup; + children = ( + 463735EC1FCBBD290062416E /* MySpoorViewController.h */, + 463735ED1FCBBD290062416E /* MySpoorViewController.m */, + ); + name = "我的足迹"; + sourceTree = ""; + }; + 4651CF161FFB2A9600A937F6 /* ProfileView */ = { + isa = PBXGroup; + children = ( + 46091A891FFF460600F626D5 /* images */, + 46FA4D591FFE2B4100F3DC4E /* InterestView.h */, + 46FA4D5A1FFE2B4100F3DC4E /* InterestView.m */, + 4651CF1A1FFB2B4400A937F6 /* ProfileHeaderView.h */, + 4651CF171FFB2A9600A937F6 /* ProfileHeaderView.m */, + 4651CF1B1FFB5E6800A937F6 /* SpouseView.h */, + 4651CF1C1FFB5E6800A937F6 /* SpouseView.m */, + 4651CF271FFCBAC500A937F6 /* PersonView.h */, + 4651CF281FFCBAC500A937F6 /* PersonView.m */, + 4651CF2A1FFCC59A00A937F6 /* PersonPhotoView.h */, + 4651CF2B1FFCC59A00A937F6 /* PersonPhotoView.m */, + 4651CF2D1FFCCB2900A937F6 /* SectionView.h */, + 4651CF2E1FFCCB2900A937F6 /* SectionView.m */, + 4651CF301FFCE06D00A937F6 /* DeclarationView.h */, + 4651CF311FFCE06D00A937F6 /* DeclarationView.m */, + 46FA4D3D1FFDB93D00F3DC4E /* EduView.h */, + 46FA4D3E1FFDB93D00F3DC4E /* EduView.m */, + 46FA4D401FFDBF7400F3DC4E /* WorkView.h */, + 46FA4D411FFDBF7400F3DC4E /* WorkView.m */, + 46FA4D4D1FFDF9F200F3DC4E /* ApproveView.h */, + 46FA4D4E1FFDF9F200F3DC4E /* ApproveView.m */, + 46FA4D531FFE14DC00F3DC4E /* DetailView.h */, + 46FA4D541FFE14DC00F3DC4E /* DetailView.m */, + 46FA4D5C1FFE30F700F3DC4E /* VideoView.h */, + 46FA4D5D1FFE30F700F3DC4E /* VideoView.m */, + 46091A9E1FFF4C7100F626D5 /* ImageLabelView.h */, + 46091A9F1FFF4C7100F626D5 /* ImageLabelView.m */, + ); + path = ProfileView; + sourceTree = ""; + }; + 4657B90220030D0F00609928 /* otherView */ = { + isa = PBXGroup; + children = ( + 4657B90320030DB900609928 /* OtherPhotoView.h */, + 4657B90420030DB900609928 /* OtherPhotoView.m */, + 4657B906200324A000609928 /* OtherGiftView.h */, + 4657B907200324A000609928 /* OtherGiftView.m */, + 4657B90920045A0500609928 /* OtherFooterView.h */, + 4657B90A20045A0500609928 /* OtherFooterView.m */, + ); + path = otherView; + sourceTree = ""; + }; + 466105111FC2768E008E89E8 /* View */ = { + isa = PBXGroup; + children = ( + 11E2A9D51FE794D800E3A4B2 /* XLCardSwitch */, + 4637359E1FC7EDE00062416E /* messageView */, + 11259A721FC6C386009D18E4 /* LoadingView.h */, + 11259A711FC6C386009D18E4 /* LoadingView.m */, + 114D23F91FC7AD8B000DC5EB /* GiftView.h */, + 114D23F81FC7AD8B000DC5EB /* GiftView.m */, + 114D23FB1FC7AD97000DC5EB /* SendGiftView.h */, + 114D23FC1FC7AD97000DC5EB /* SendGiftView.m */, + 46E03E161FC2C88000F55A8E /* mapView */, + ); + path = View; + sourceTree = ""; + }; + 466333F51FC3B455000BE9EE /* QYweb */ = { + isa = PBXGroup; + children = ( + 466333F21FC3B442000BE9EE /* ALLWebViewController.h */, + 466333F31FC3B442000BE9EE /* ALLWebViewController.m */, + ); + path = QYweb; + sourceTree = ""; + }; + 466334061FC3FB02000BE9EE /* Model */ = { + isa = PBXGroup; + children = ( + 114EDA961FC3FA0E008BAE09 /* PersonalInfoModel.h */, + 114EDA951FC3FA0E008BAE09 /* PersonalInfoModel.m */, + 114EDA051FC3B87E008BAE09 /* MyTicketModel.h */, + 114EDA041FC3B87E008BAE09 /* MyTicketModel.m */, + 114EDAE81FC431E7008BAE09 /* PhotoModel.h */, + 114EDAE71FC431E7008BAE09 /* PhotoModel.m */, + 466334071FC3FB02000BE9EE /* MyCardModel.h */, + 466334081FC3FB02000BE9EE /* MyCardModel.m */, + ); + path = Model; + sourceTree = ""; + }; + 4663341A1FC42B10000BE9EE /* 我的认证 */ = { + isa = PBXGroup; + children = ( + 46E4FFF81FDF6D03003B26C8 /* IdentyViewController.h */, + 46E4FFF91FDF6D03003B26C8 /* IdentyViewController.m */, + 46E4FFFB1FDF6D73003B26C8 /* IdentyListViewController.h */, + 46E4FFFC1FDF6D73003B26C8 /* IdentyListViewController.m */, + 46E4FFFE1FDF8316003B26C8 /* EnterpriseViewController.h */, + 46E4FFFF1FDF8316003B26C8 /* EnterpriseViewController.m */, + 114C96891FDFBB4E004F2A2B /* EnterpriseNameViewController.h */, + 114C968A1FDFBB4E004F2A2B /* EnterpriseNameViewController.m */, + 114C968C1FDFC1DF004F2A2B /* DepartmentNameViewController.h */, + 114C968D1FDFC1DF004F2A2B /* DepartmentNameViewController.m */, + ); + path = "我的认证"; + sourceTree = ""; + }; + 466334241FC55D43000BE9EE /* SDCycleScrollView */ = { + isa = PBXGroup; + children = ( + 466334251FC55D43000BE9EE /* PageControl */, + 4663342E1FC55D43000BE9EE /* SDCollectionViewCell.h */, + 4663342F1FC55D43000BE9EE /* SDCollectionViewCell.m */, + 466334301FC55D43000BE9EE /* SDCycleScrollView.h */, + 466334311FC55D43000BE9EE /* SDCycleScrollView.m */, + ); + path = SDCycleScrollView; + sourceTree = ""; + }; + 466334251FC55D43000BE9EE /* PageControl */ = { + isa = PBXGroup; + children = ( + 466334261FC55D43000BE9EE /* TAAbstractDotView.h */, + 466334271FC55D43000BE9EE /* TAAbstractDotView.m */, + 466334281FC55D43000BE9EE /* TAAnimatedDotView.h */, + 466334291FC55D43000BE9EE /* TAAnimatedDotView.m */, + 4663342A1FC55D43000BE9EE /* TADotView.h */, + 4663342B1FC55D43000BE9EE /* TADotView.m */, + 4663342C1FC55D43000BE9EE /* TAPageControl.h */, + 4663342D1FC55D43000BE9EE /* TAPageControl.m */, + ); + path = PageControl; + sourceTree = ""; + }; + 4663344C1FC5926A000BE9EE /* 地区 */ = { + isa = PBXGroup; + children = ( + 4663344D1FC5926A000BE9EE /* area.json */, + 4663344E1FC5926A000BE9EE /* city.json */, + 4663344F1FC5926A000BE9EE /* province.json */, + ); + path = "地区"; + sourceTree = ""; + }; + 46C0CF4D1FC6C53600F1472C /* 资讯 */ = { + isa = PBXGroup; + children = ( + 1166A6421FC12B9800CCA010 /* NewsListViewController.h */, + 1166A6431FC12B9800CCA010 /* NewsListViewController.m */, + 1104DBA1200C46AE0020992E /* MyContentViewController.h */, + 1104DBA0200C46AE0020992E /* MyContentViewController.m */, + ); + path = "资讯"; + sourceTree = ""; + }; + 46C0CF4E1FC6C56000F1472C /* 缘圈 */ = { + isa = PBXGroup; + children = ( + 11E2B96B1FC2AA4500CE9FF3 /* LookVideoViewController.h */, + 11E2B96C1FC2AA4500CE9FF3 /* LookVideoViewController.m */, + 11E2B98A1FC2AB7F00CE9FF3 /* ShowBigIVViewController.h */, + 11E2B9891FC2AB7F00CE9FF3 /* ShowBigIVViewController.m */, + 11E2B9A21FC2B83400CE9FF3 /* NearbyPlaceViewController.h */, + 11E2B9A31FC2B83400CE9FF3 /* NearbyPlaceViewController.m */, + 117700F91FEB57180038D4E1 /* PublicYuanquanViewController.h */, + 117700FA1FEB57180038D4E1 /* PublicYuanquanViewController.m */, + 117700FC1FEB5C9D0038D4E1 /* YuanquanDetailViewController.h */, + 117700FD1FEB5C9D0038D4E1 /* YuanquanDetailViewController.m */, + 118CC1B61FFB50A1004CC0D5 /* TopicDetailViewController.h */, + 118CC1B71FFB50A1004CC0D5 /* TopicDetailViewController.m */, + 1117522D1FFF45CA001EF870 /* TopicListViewController.h */, + 1117522E1FFF45CA001EF870 /* TopicListViewController.m */, + 111CC5E91FFCC8AC00A85682 /* CommentListViewController.h */, + 111CC5EA1FFCC8AC00A85682 /* CommentListViewController.m */, + ); + path = "缘圈"; + sourceTree = ""; + }; + 46C0CF4F1FC6C57F00F1472C /* 好友 */ = { + isa = PBXGroup; + children = ( + 46C0CF511FC6C65900F1472C /* MyPeopleViewController.h */, + 46C0CF501FC6C65900F1472C /* MyPeopleViewController.m */, + 46C0CF451FC6C12200F1472C /* FriendViewController.h */, + 46C0CF461FC6C12200F1472C /* FriendViewController.m */, + 11E2B9B81FC2C71500CE9FF3 /* VisitorViewController.h */, + 11E2B9B71FC2C71500CE9FF3 /* VisitorViewController.m */, + ); + path = "好友"; + sourceTree = ""; + }; + 46E03E161FC2C88000F55A8E /* mapView */ = { + isa = PBXGroup; + children = ( + 46B52A611FD53C7100F22888 /* refresh_ding@3x.png */, + 46B52A5F1FD53BF700F22888 /* refresh_ding@2x.png */, + 46B52A5A1FD535F800F22888 /* add_map@3x.png */, + 46B52A591FD535F700F22888 /* det_map@2x.png */, + 46B52A5B1FD535F800F22888 /* det_map@3x.png */, + 46B52A571FD5351700F22888 /* add_map@2x.png */, + 46B52A551FD533AC00F22888 /* refresh@3x.png */, + 46B52A531FD5325C00F22888 /* refresh@2x.png */, + 4635F2241FD4E9FA00804833 /* qipao@2x.png */, + 4635F2231FD4E9F900804833 /* qipao@3x.png */, + 466105151FC2773C008E89E8 /* QYRoundAnnotationView.h */, + 466105161FC2773C008E89E8 /* QYRoundAnnotationView.m */, + 466105181FC2788E008E89E8 /* QYActionPaopaoView.h */, + 466105191FC2788E008E89E8 /* QYActionPaopaoView.m */, + 46E03DEE1FC2B2F200F55A8E /* QYPointAnnotation.h */, + 46E03DEF1FC2B2F200F55A8E /* QYPointAnnotation.m */, + 4635F2201FD4DFEE00804833 /* QYCluster.h */, + 4635F2211FD4DFEE00804833 /* QYCluster.m */, + ); + path = mapView; + sourceTree = ""; + }; + 46E9D07E1FC7B00B00F7A344 /* Model */ = { + isa = PBXGroup; + children = ( + 113E4C651FCFDC2800D50F17 /* SpeedModel.h */, + 113E4C661FCFDC2800D50F17 /* SpeedModel.m */, + 46EAB9D51FCC09CD00BC9B12 /* CordiaModel.h */, + 46EAB9D61FCC09CD00BC9B12 /* CordiaModel.m */, + 46E9D07B1FC7AFFF00F7A344 /* FriendModel.h */, + 46E9D07C1FC7AFFF00F7A344 /* FriendModel.m */, + 463735CD1FC8192E0062416E /* AdModel.h */, + 463735CE1FC8192E0062416E /* AdModel.m */, + 1130F3701FEA0852009AC59E /* YuanquanModel.h */, + 1130F3711FEA0852009AC59E /* YuanquanModel.m */, + 11A963EB1FFF0EBD00094A09 /* YuanquanCommentModel.h */, + 11A963EC1FFF0EBD00094A09 /* YuanquanCommentModel.m */, + 462BC0E0200EF5C0009A1C6F /* TopicTextModel.h */, + 462BC0E1200EF5C0009A1C6F /* TopicTextModel.m */, + ); + path = Model; + sourceTree = ""; + }; + 46EC25781FC66F0E00EF730D /* Resource */ = { + isa = PBXGroup; + children = ( + 11A1D9761FCBE31C005CA3E8 /* Newpinglun@2x.png */, + 11A1D9751FCBE31C005CA3E8 /* Newpinglun@3x.png */, + 11A1D9721FCBE2F3005CA3E8 /* act_baoming@2x.png */, + 11A1D9711FCBE2F3005CA3E8 /* act_baoming@3x.png */, + 11A1D96E1FCBE2CE005CA3E8 /* act_message@2x.png */, + 11A1D96D1FCBE2CE005CA3E8 /* act_message@3x.png */, + 11A1D9691FCBE28B005CA3E8 /* act_share@2x.png */, + 11A1D96A1FCBE28B005CA3E8 /* act_share@3x.png */, + 11A1D9651FCBE266005CA3E8 /* act_look@2x.png */, + 11A1D9661FCBE267005CA3E8 /* act_look@3x.png */, + 11A1D9611FCBE23C005CA3E8 /* icon@2x.png */, + 11A1D9621FCBE23C005CA3E8 /* icon@3x.png */, + 11A1D95E1FCBE1EB005CA3E8 /* Brenshu@2x.png */, + 11A1D95D1FCBE1EB005CA3E8 /* Brenshu@3x.png */, + 11A1D9551FCBE174005CA3E8 /* clickLike@2x.png */, + 11A1D9561FCBE174005CA3E8 /* clickLike@3x.png */, + 11A1D95A1FCBE1AA005CA3E8 /* like@3x.png */, + 11A1D9591FCBE1AA005CA3E8 /* like@2x.png */, + 11A1D9521FCBE082005CA3E8 /* msg@2x.png */, + 11A1D9511FCBE081005CA3E8 /* msg@3x.png */, + 46C0CF331FC69C9500F1472C /* my_dingwei@2x.png */, + 46C0CF321FC69C9500F1472C /* my_dingwei@3x.png */, + 46EC25791FC66F1E00EF730D /* my_activity@2x.png */, + 46EC257A1FC66F1E00EF730D /* my_activity@3x.png */, + 11A1D9361FCBDD3D005CA3E8 /* act_time@2x.png */, + 11A1D9351FCBDD3D005CA3E8 /* act_time@3x.png */, + 11A1D9391FCBDD61005CA3E8 /* act_place@2x.png */, + 11A1D93A1FCBDD61005CA3E8 /* act_place@3x.png */, + 11A1D93E1FCBDD86005CA3E8 /* act_renshu@2x.png */, + 11A1D93D1FCBDD86005CA3E8 /* act_renshu@3x.png */, + 11A1D9421FCBDDB8005CA3E8 /* act_money@2x.png */, + 11A1D9411FCBDDB8005CA3E8 /* act_money@3x.png */, + 11A1D9461FCBDDE8005CA3E8 /* act_phone@2x.png */, + 11A1D9451FCBDDE8005CA3E8 /* act_phone@3x.png */, + 11A1D94A1FCBDE3D005CA3E8 /* xiaosanjiao_up@2x.png */, + 11A1D9491FCBDE3D005CA3E8 /* xiaosanjiao_up@3x.png */, + 11A1D94E1FCBDE66005CA3E8 /* xiaosanjiao_down@2x.png */, + 11A1D94D1FCBDE66005CA3E8 /* xiaosanjiao_down@3x.png */, + ); + path = Resource; + sourceTree = ""; + }; + 46F28819202955B1004835CF /* 内购 */ = { + isa = PBXGroup; + children = ( + 46F2881A2029577C004835CF /* BuyBeanController.h */, + 46F2881B2029577C004835CF /* BuyBeanController.m */, + ); + path = "内购"; + sourceTree = ""; + }; + 46FA4D441FFDD1DE00F3DC4E /* 学校 */ = { + isa = PBXGroup; + children = ( + 46FA4D451FFDD20100F3DC4E /* provinceSchool.json */, + 46FA4D471FFDD27A00F3DC4E /* ItemViewController.h */, + 46FA4D481FFDD27A00F3DC4E /* ItemViewController.m */, + 46FA4D4A1FFDD28F00F3DC4E /* SchoolViewController.h */, + 46FA4D4B1FFDD28F00F3DC4E /* SchoolViewController.m */, + ); + path = "学校"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 118CDDDE1FC0077C00E41475 /* JQQY */ = { + isa = PBXNativeTarget; + buildConfigurationList = 118CDDF51FC0077C00E41475 /* Build configuration list for PBXNativeTarget "JQQY" */; + buildPhases = ( + 118CDDDB1FC0077C00E41475 /* Sources */, + 118CDDDC1FC0077C00E41475 /* Frameworks */, + 118CDDDD1FC0077C00E41475 /* Resources */, + 114D260F1FC7FB89000DC5EB /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = JQQY; + productName = JQQY; + productReference = 118CDDDF1FC0077C00E41475 /* JQQY.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 118CDDD71FC0077C00E41475 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0910; + ORGANIZATIONNAME = jiuqi; + TargetAttributes = { + 118CDDDE1FC0077C00E41475 = { + CreatedOnToolsVersion = 9.1; + ProvisioningStyle = Automatic; + SystemCapabilities = { + com.apple.BackgroundModes = { + enabled = 1; + }; + com.apple.InAppPurchase = { + enabled = 1; + }; + com.apple.Push = { + enabled = 1; + }; + }; + }; + }; + }; + buildConfigurationList = 118CDDDA1FC0077C00E41475 /* Build configuration list for PBXProject "JQQY" */; + compatibilityVersion = "Xcode 8.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + "zh-Hans", + ); + mainGroup = 118CDDD61FC0077C00E41475; + productRefGroup = 118CDDE01FC0077C00E41475 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 118CDDDE1FC0077C00E41475 /* JQQY */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 118CDDDD1FC0077C00E41475 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 11625BB51FD7A8A700E156E5 /* wdqb-gq@2x.png in Resources */, + 115C3E1F1FD8EBA400370D92 /* launch_X_3.png in Resources */, + 11908DB31FCEB2B400B8569F /* discover_hui@2x.png in Resources */, + 114EDA6A1FC3E575008BAE09 /* lw-yt@3x.png in Resources */, + 114D24441FC7CBF2000DC5EB /* xuanxiang@3x.png in Resources */, + 11908DC71FCEB5C000B8569F /* mine_2_1@3x.png in Resources */, + 113E4C761FCFEFFC00D50F17 /* search_icon@3x.png in Resources */, + 463735D71FCBAA8F0062416E /* id@3x.png in Resources */, + 116ACEEF1FCD63BB00E12ACA /* addMark@3x.png in Resources */, + 11E2B8F41FC2837D00CE9FF3 /* avatar_default@3x.png in Resources */, + 115C3E391FD9309300370D92 /* cameraSelected@2x.png in Resources */, + 11A1D94F1FCBDE66005CA3E8 /* xiaosanjiao_down@3x.png in Resources */, + 11CFFD412004C682007D169D /* yq_collect@3x.png in Resources */, + 46FA4D461FFDD20100F3DC4E /* provinceSchool.json in Resources */, + 11806A411FC5652000893BE7 /* UMSLoginViewController.xib in Resources */, + 11A1D97F1FCC0E04005CA3E8 /* icon2_2@3x.png in Resources */, + 118069E01FC54D0D00893BE7 /* delete_icon@2x.png in Resources */, + 11A1D9881FCC0E76005CA3E8 /* icon2_4@2x.png in Resources */, + 11625BBD1FD7A8FE00E156E5 /* wdqb-xjq@2x.png in Resources */, + 11908DF61FCEBF5F00B8569F /* sex_icon@2x.png in Resources */, + 114D24151FC7C8CA000DC5EB /* xw-shipin-hui@3x.png in Resources */, + 11908DA81FCEB2B400B8569F /* mine@2x.png in Resources */, + 11E2B9161FC2848900CE9FF3 /* PYQ-dz@2x.png in Resources */, + 46091AA81FFF5F3E00F626D5 /* n_up@2x.png in Resources */, + 463735D31FCBA8A10062416E /* my_card@3x.png in Resources */, + 463735D21FCBA8A10062416E /* name@2x.png in Resources */, + 11CCD1BF1FFDF57100668A7A /* yq_video@3x.png in Resources */, + 11CFFD372004AFC6007D169D /* new_enterprise_hui_icon@2x.png in Resources */, + 11806A471FC5652000893BE7 /* WeiboSDK.bundle in Resources */, + 113E4C771FCFEFFC00D50F17 /* sweep_icon@2x.png in Resources */, + 463735C51FC802370062416E /* swich_open@2x.png in Resources */, + 11625BA81FD7A80200E156E5 /* wdqb-rcq-h@2x.png in Resources */, + 114D24351FC7CA77000DC5EB /* zl-sjrz@3x.png in Resources */, + 118DA3491FD514BD00246522 /* launch_6_1.png in Resources */, + 463735CC1FC804150062416E /* systemMsg@3x.png in Resources */, + 114EDA3A1FC3E49C008BAE09 /* lw-dsg@2x.png in Resources */, + 46C0CF381FC6A53400F1472C /* wenhao@3x.png in Resources */, + 111752391FFF7463001EF870 /* yq_msg@2x.png in Resources */, + 114D244D1FC7CC8F000DC5EB /* xw-dianzan-hui@2x.png in Resources */, + 11E2B9151FC2848900CE9FF3 /* huifu@3x.png in Resources */, + 114D245C1FC7E63C000DC5EB /* card_girl@3x.png in Resources */, + 114D24241FC7C9EF000DC5EB /* zl-sfrz@3x.png in Resources */, + 118069F41FC560CC00893BE7 /* qq_icon@2x.png in Resources */, + 118DA34D1FD514BD00246522 /* launch_4_1.png in Resources */, + 118CDE8F1FC007BF00E41475 /* close_icon@2x.png in Resources */, + 114D24481FC7CC7F000DC5EB /* xw-dianzan@3x.png in Resources */, + 111752421FFF7548001EF870 /* yq_report@2x.png in Resources */, + 11806A441FC5652000893BE7 /* UMSocialSDKResourcesNew.bundle in Resources */, + 11CFFD3A2004AFC6007D169D /* new_enterprise_hui_icon@3x.png in Resources */, + 462024E51FCE56E700079C21 /* Bitmap1@3x.png in Resources */, + 118069FD1FC5617300893BE7 /* weixin_icon@2x.png in Resources */, + 462024F31FCEC17400079C21 /* idnorm@2x.png in Resources */, + 46091A9A1FFF460700F626D5 /* n_today@2x.png in Resources */, + 114EDA2A1FC3E470008BAE09 /* lw-as@2x.png in Resources */, + 1178FCAF2003384400162248 /* message@2x.png in Resources */, + 11CFFD3D2004AFC6007D169D /* new_tuan_hui_icon@2x.png in Resources */, + 11CFFD382004AFC6007D169D /* new_realname_hui_icon@3x.png in Resources */, + 46091AA61FFF5F3E00F626D5 /* n_down@3x.png in Resources */, + 114EDA5A1FC3E542008BAE09 /* lw-mg99@2x.png in Resources */, + 11A1D9731FCBE2F3005CA3E8 /* act_baoming@3x.png in Resources */, + 11DA8C401FE106D7003B0728 /* arrow_up@3x.png in Resources */, + 114EDA421FC3E4BA008BAE09 /* lw-fj@2x.png in Resources */, + 11E2B9201FC2848900CE9FF3 /* PYQ-xj@2x.png in Resources */, + 1117523A1FFF7463001EF870 /* yq_collect_hui@2x.png in Resources */, + 1178FCAD2003384400162248 /* near@3x.png in Resources */, + 11A1D9571FCBE175005CA3E8 /* clickLike@2x.png in Resources */, + 462BC0F7200F4657009A1C6F /* YuanQuanPicCell.xib in Resources */, + 118CC1C21FFB6DAC004CC0D5 /* fire@3x.png in Resources */, + 11908DF71FCEBF5F00B8569F /* sex_icon@3x.png in Resources */, + 11908DDB1FCEB84300B8569F /* phone_icon@2x.png in Resources */, + 11806A3D1FC5652000893BE7 /* UMSCommentInputController.xib in Resources */, + 114EDA4A1FC3E4D7008BAE09 /* lw-jz@2x.png in Resources */, + 11E2B9221FC2848900CE9FF3 /* SDS-dd@2x.png in Resources */, + 11A1D9381FCBDD3D005CA3E8 /* act_time@2x.png in Resources */, + 116ACEE01FCD4D6C00E12ACA /* zl-shipin@2x.png in Resources */, + 118CDE8D1FC007BF00E41475 /* back_icon@2x.png in Resources */, + 11A1D9501FCBDE66005CA3E8 /* xiaosanjiao_down@2x.png in Resources */, + 11625BA91FD7A80200E156E5 /* wdqb-rcq-h@3x.png in Resources */, + 11A1D93C1FCBDD61005CA3E8 /* act_place@3x.png in Resources */, + 462024E41FCE56E700079C21 /* Bitmap1@2x.png in Resources */, + 114EDA321FC3E487008BAE09 /* lw-cjd@2x.png in Resources */, + 11908DF21FCEBF5F00B8569F /* password_icon@3x.png in Resources */, + 46B52A5C1FD535F800F22888 /* det_map@2x.png in Resources */, + 11908DDF1FCEB84300B8569F /* realname_icon@2x.png in Resources */, + 11908DE91FCEBE8400B8569F /* phone_hui_icon@3x.png in Resources */, + 11CCD1C01FFDF57100668A7A /* topic_public@3x.png in Resources */, + 11908DDA1FCEB84300B8569F /* realname_icon@3x.png in Resources */, + 11E2B95A1FC2A94B00CE9FF3 /* TZImagePickerController.bundle in Resources */, + 46B52A561FD533AD00F22888 /* refresh@3x.png in Resources */, + 114EDA2B1FC3E470008BAE09 /* lw-as@3x.png in Resources */, + 46091A961FFF460700F626D5 /* n_inter@2x.png in Resources */, + 118CDDEC1FC0077C00E41475 /* Assets.xcassets in Resources */, + 466334531FC5926A000BE9EE /* city.json in Resources */, + 11E2B9AE1FC2BDCD00CE9FF3 /* Arrow-pointing@2x.png in Resources */, + 11A1D9441FCBDDB8005CA3E8 /* act_money@2x.png in Resources */, + 46B52A541FD5325D00F22888 /* refresh@2x.png in Resources */, + 46EC257B1FC66F1E00EF730D /* my_activity@2x.png in Resources */, + 11625BB11FD7A85800E156E5 /* wdqb-ysy@3x.png in Resources */, + 11908DD21FCEB5C000B8569F /* mine_1_1@2x.png in Resources */, + 46091A881FFF0D2800F626D5 /* PhotoCollectionViewCell.xib in Resources */, + 1178FCBE200371C600162248 /* new_enterprise_icon@3x.png in Resources */, + 11E2B91F1FC2848900CE9FF3 /* PYQ-pl@3x.png in Resources */, + 11908D941FCE9B0C00B8569F /* share_white_icon@2x.png in Resources */, + 11DA8C3C1FE0D2CE003B0728 /* phone_editor@3x.png in Resources */, + 11908DAD1FCEB2B400B8569F /* mine_hui@3x.png in Resources */, + 46785D0C1FCFFA8B009E9B30 /* starImage@3x.png in Resources */, + 1178FCAE2003384400162248 /* near@2x.png in Resources */, + 11A1D95C1FCBE1AB005CA3E8 /* like@3x.png in Resources */, + 11E2B9A71FC2BD4D00CE9FF3 /* girl@2x.png in Resources */, + 11908DDE1FCEB84300B8569F /* tuan_icon@3x.png in Resources */, + 118DA3451FD514BD00246522 /* launch_5_1.png in Resources */, + 462024E21FCE56E700079C21 /* Bitmap2@2x.png in Resources */, + 11908DB41FCEB2B400B8569F /* discover@2x.png in Resources */, + 114D24341FC7CA77000DC5EB /* zl-sjrz@2x.png in Resources */, + 11908DDC1FCEB84300B8569F /* tuan_icon@2x.png in Resources */, + 116ACEAF1FCCF02D00E12ACA /* noData@3x.png in Resources */, + 11908DDD1FCEB84300B8569F /* phone_icon@3x.png in Resources */, + 11CCD1C11FFDF57100668A7A /* xttj@2x.png in Resources */, + 114EDA631FC3E55A008BAE09 /* lw-qkl@2x.png in Resources */, + 11806A3E1FC5652000893BE7 /* UMSCommentInputControlleriPad.xib in Resources */, + 114D243C1FC7CAB8000DC5EB /* nv@3x.png in Resources */, + 11259A821FC6DD19009D18E4 /* qdcg@3x.png in Resources */, + 115C3E211FD8EBA400370D92 /* launch_X_1.png in Resources */, + 11806A421FC5652000893BE7 /* UMSnsAccountViewController.xib in Resources */, + 11CFFD4A2004CE5C007D169D /* yq_like_yes@2x.png in Resources */, + 11CFFD3E2004AFC6007D169D /* new_tuan_hui_icon@3x.png in Resources */, + 114D240C1FC7C807000DC5EB /* xw-huangguan@3x.png in Resources */, + 11A1D9641FCBE23C005CA3E8 /* icon@3x.png in Resources */, + 11908DCF1FCEB5C000B8569F /* mine_0_0@3x.png in Resources */, + 11DA8C431FE1070C003B0728 /* arrow_down@2x.png in Resources */, + 46B52A621FD53C7200F22888 /* refresh_ding@3x.png in Resources */, + 118DA34C1FD514BD00246522 /* launch_6_4.png in Resources */, + 11A1D9371FCBDD3D005CA3E8 /* act_time@3x.png in Resources */, + 11A1D9431FCBDDB8005CA3E8 /* act_money@3x.png in Resources */, + 118069E11FC54D0D00893BE7 /* delete_icon@3x.png in Resources */, + 114D24301FC7CA51000DC5EB /* zl-qyuanrz-h@2x.png in Resources */, + 118DA34A1FD514BD00246522 /* launch_6_2.png in Resources */, + 11A1D94C1FCBDE3D005CA3E8 /* xiaosanjiao_up@2x.png in Resources */, + 11E2B9B51FC2BE7100CE9FF3 /* set_video@3x.png in Resources */, + 114D24211FC7C961000DC5EB /* zl-sfrz-h@2x.png in Resources */, + 11CFFD452004C7B1007D169D /* yq_concern@2x.png in Resources */, + 11A1D9471FCBDDE8005CA3E8 /* act_phone@3x.png in Resources */, + 11908DE71FCEBE8400B8569F /* phone_hui_icon@2x.png in Resources */, + 11A1D9871FCC0E76005CA3E8 /* icon2_4@3x.png in Resources */, + 1178FCA72003376900162248 /* home_background@2x.png in Resources */, + 11908DE61FCEBE8400B8569F /* tuan_hui_icon@3x.png in Resources */, + 11CCD1C91FFDF57100668A7A /* yq_video@2x.png in Resources */, + 11CCD1C31FFDF57100668A7A /* yq_like_no@2x.png in Resources */, + 11A1D9531FCBE082005CA3E8 /* msg@3x.png in Resources */, + 114EDA4B1FC3E4D7008BAE09 /* lw-jz@3x.png in Resources */, + 11E2B9241FC2848900CE9FF3 /* video_play@2x.png in Resources */, + 114D24491FC7CC7F000DC5EB /* xw-dianzan@2x.png in Resources */, + 114EDA431FC3E4BA008BAE09 /* lw-fj@3x.png in Resources */, + 114D258A1FC7FA32000DC5EB /* EaseUI.podspec in Resources */, + 114D24411FC7CB8B000DC5EB /* hi@3x.png in Resources */, + 116ACEE81FCD52BB00E12ACA /* luzhi@2x.png in Resources */, + 11908DEA1FCEBE8400B8569F /* realname_hui_icon@2x.png in Resources */, + 11CCD1C41FFDF57100668A7A /* yfcs@3x.png in Resources */, + 118DA3521FD514BD00246522 /* launch_6p_2.png in Resources */, + 114D24051FC7C69E000DC5EB /* giftImg.plist in Resources */, + 4635F2251FD4E9FA00804833 /* qipao@3x.png in Resources */, + 463735B11FC7F06D0062416E /* xx-huodong@3x.png in Resources */, + 11625BB01FD7A85800E156E5 /* wdqb-ysy@2x.png in Resources */, + 111752431FFF7548001EF870 /* yq_concern_bai@2x.png in Resources */, + 11A1D97B1FCC0DCD005CA3E8 /* icon2_1@3x.png in Resources */, + 11625BAC1FD7A81E00E156E5 /* wdqb-rcq@2x.png in Resources */, + 118DA34B1FD514BD00246522 /* launch_6_3.png in Resources */, + 11A1D96B1FCBE28B005CA3E8 /* act_share@2x.png in Resources */, + 114EDA461FC3E4C3008BAE09 /* lw-fw@3x.png in Resources */, + 11E2B8F51FC2837D00CE9FF3 /* avatar_default@2x.png in Resources */, + 11A1D98B1FCC0E9C005CA3E8 /* icon2_5@2x.png in Resources */, + 114EDA621FC3E55A008BAE09 /* lw-qkl@3x.png in Resources */, + 118CDE871FC007BF00E41475 /* MJRefresh.bundle in Resources */, + 116ACEE11FCD4D6C00E12ACA /* zl-shipin@3x.png in Resources */, + 1178FCBA200371C600162248 /* new_enterprise_icon@2x.png in Resources */, + 11908DA71FCEB2B400B8569F /* home_hui@3x.png in Resources */, + 46B52A5E1FD535F800F22888 /* det_map@3x.png in Resources */, + 114EDA521FC3E4FC008BAE09 /* lw-mg1@2x.png in Resources */, + 46091AA71FFF5F3E00F626D5 /* n_up@3x.png in Resources */, + 1104DBB6200C59020020992E /* loading.bundle in Resources */, + 115C3E3A1FD9309300370D92 /* phoneSelected@2x.png in Resources */, + 46B52A581FD5351700F22888 /* add_map@2x.png in Resources */, + 11CFFD492004CE5C007D169D /* yq_like_yes@3x.png in Resources */, + 118CC1C31FFB6DAC004CC0D5 /* fire@2x.png in Resources */, + 11908DB01FCEB2B400B8569F /* activity@3x.png in Resources */, + 466334541FC5926A000BE9EE /* province.json in Resources */, + 113E4C6F1FCFE13300D50F17 /* xx@3x.png in Resources */, + 11A1D9901FCC27A1005CA3E8 /* redLike@2x.png in Resources */, + 46091A9B1FFF460700F626D5 /* n_today@3x.png in Resources */, + 11E2B9811FC2AB5300CE9FF3 /* MJPhotoBrowser.bundle in Resources */, + 11CFFD3B2004AFC6007D169D /* new_phone_hui_icon@2x.png in Resources */, + 117B0C881FDE81A6000C9E21 /* enterprise_hui_icon@2x.png in Resources */, + 114EDA5B1FC3E542008BAE09 /* lw-mg99@3x.png in Resources */, + 11CCD1BC1FFDF57100668A7A /* yfcs@2x.png in Resources */, + 118DA3471FD514BD00246522 /* launch_5_3.png in Resources */, + 116ACEE51FCD4D8B00E12ACA /* zl-shiping@3x.png in Resources */, + 463735CB1FC804150062416E /* systemMsg@2x.png in Resources */, + 1104DBB9200C59020020992E /* NewsAgent.bundle in Resources */, + 46C0CF351FC69C9600F1472C /* my_dingwei@2x.png in Resources */, + 11A1D9771FCBE31C005CA3E8 /* Newpinglun@3x.png in Resources */, + 118DA3461FD514BD00246522 /* launch_5_2.png in Resources */, + 11A1D96F1FCBE2CE005CA3E8 /* act_message@3x.png in Resources */, + 46712FA51FD7F35D00EECDC2 /* xx_gift@3x.png in Resources */, + 11806A401FC5652000893BE7 /* UMShareEditViewControlleriPad.xib in Resources */, + 1178FCBB200371C600162248 /* new_tuan_icon@3x.png in Resources */, + 463735B01FC7F06D0062416E /* xx-tongzhi@3x.png in Resources */, + 46B52A5D1FD535F800F22888 /* add_map@3x.png in Resources */, + 115C3E251FD90E4C00370D92 /* picture_default@2x.png in Resources */, + 463735C61FC802370062416E /* swich_close@3x.png in Resources */, + 11806A431FC5652000893BE7 /* UMSShareListController.xib in Resources */, + 11806A531FC581FF00893BE7 /* selectDuigou@3x.png in Resources */, + 111752371FFF7463001EF870 /* yq_msg@3x.png in Resources */, + 11A1D96C1FCBE28B005CA3E8 /* act_share@3x.png in Resources */, + 114EDA4E1FC3E4EB008BAE09 /* lw-kh@2x.png in Resources */, + 11E2B9CA1FC2CE6700CE9FF3 /* setting_icon@2x.png in Resources */, + 11E2B9AB1FC2BD9000CE9FF3 /* boy@2x.png in Resources */, + 115C3E3E1FD9309300370D92 /* phoneSelected@3x.png in Resources */, + 11CFFD392004AFC6007D169D /* new_realname_hui_icon@2x.png in Resources */, + 113E4C6E1FCFE13300D50F17 /* xx@2x.png in Resources */, + 46579D6C1FDA9BBA00FF8586 /* QPSDK.bundle in Resources */, + 11806A3A1FC5652000893BE7 /* UMSocialLocalizable.strings in Resources */, + 117B0C891FDE81A6000C9E21 /* enterprise_hui_icon@3x.png in Resources */, + 1117523B1FFF7463001EF870 /* yq_share@3x.png in Resources */, + 11A1D93F1FCBDD86005CA3E8 /* act_renshu@3x.png in Resources */, + 463CE5C21FE0BA840068A31C /* phone_editor@2x.png in Resources */, + 114D25D21FC7FA32000DC5EB /* MWPhotoBrowser.bundle in Resources */, + 114D244C1FC7CC8F000DC5EB /* xw-dianzan-hui@3x.png in Resources */, + 114EDA561FC3E52C008BAE09 /* lw-mg3@2x.png in Resources */, + 46091A951FFF460700F626D5 /* n_allday@3x.png in Resources */, + 11908DCA1FCEB5C000B8569F /* mine_0_1@2x.png in Resources */, + 114EDA6E1FC3E593008BAE09 /* slw-lwh@2x.png in Resources */, + 11908DF51FCEBF5F00B8569F /* loginphone_icon@3x.png in Resources */, + 114D24381FC7CAA2000DC5EB /* nan@3x.png in Resources */, + 115C3E3B1FD9309300370D92 /* locationSelected@3x.png in Resources */, + 4657B91C20046C8A00609928 /* other_y_att@3x.png in Resources */, + 114D24311FC7CA51000DC5EB /* zl-qyuanrz-h@3x.png in Resources */, + 11A1D9681FCBE267005CA3E8 /* act_look@3x.png in Resources */, + 11806A3F1FC5652000893BE7 /* UMShareEditViewController.xib in Resources */, + 46A4D989201185FE0036D7BD /* home_refre@3x.png in Resources */, + 11908DEB1FCEBE8400B8569F /* realname_hui_icon@3x.png in Resources */, + 462024ED1FCE56E700079C21 /* Bitmap6@3x.png in Resources */, + 11908DB51FCEB2B400B8569F /* activity_hui@3x.png in Resources */, + 4657B917200460F000609928 /* other_gift@2x.png in Resources */, + 118DA34F1FD514BD00246522 /* launch_4_3.png in Resources */, + 114EDA3E1FC3E4AD008BAE09 /* lw-dz@3x.png in Resources */, + 11A1D94B1FCBDE3D005CA3E8 /* xiaosanjiao_up@3x.png in Resources */, + 4657B912200460F000609928 /* other_say@2x.png in Resources */, + 114D24251FC7C9EF000DC5EB /* zl-sfrz@2x.png in Resources */, + 11E2B9B21FC2BE2100CE9FF3 /* add_image@2x.png in Resources */, + 1178FCBF200371C600162248 /* new_phone_icon@3x.png in Resources */, + 46712F9E1FD637CD00EECDC2 /* login_logo@3x.png in Resources */, + 11625BB41FD7A8A700E156E5 /* wdqb-gq@3x.png in Resources */, + 11E2B9211FC2848900CE9FF3 /* PYQ-xj@3x.png in Resources */, + 11E2B9AC1FC2BD9000CE9FF3 /* boy@3x.png in Resources */, + 113E4C751FCFEFFC00D50F17 /* search_icon@2x.png in Resources */, + 463735AD1FC7F06D0062416E /* xx-huodong@2x.png in Resources */, + 11A1D95F1FCBE1EB005CA3E8 /* Brenshu@3x.png in Resources */, + 11CCD1BE1FFDF57100668A7A /* topic_public@2x.png in Resources */, + 11A1D9701FCBE2CE005CA3E8 /* act_message@2x.png in Resources */, + 118DA34E1FD514BD00246522 /* launch_4_2.png in Resources */, + 11A1D9801FCC0E04005CA3E8 /* icon2_2@2x.png in Resources */, + 118DA3531FD514BD00246522 /* launch_6p_3.png in Resources */, + 11A1D98C1FCC0E9C005CA3E8 /* icon2_5@3x.png in Resources */, + 11A1D9671FCBE267005CA3E8 /* act_look@2x.png in Resources */, + 116ACEE41FCD4D8B00E12ACA /* zl-shiping@2x.png in Resources */, + 111752401FFF7548001EF870 /* yq_report@3x.png in Resources */, + 114EDA6B1FC3E575008BAE09 /* lw-yt@2x.png in Resources */, + 4657B91F20046C8A00609928 /* other_n_att@3x.png in Resources */, + 1178FCA62003376900162248 /* home_background@3x.png in Resources */, + 114D24581FC7E60B000DC5EB /* card_boy@3x.png in Resources */, + 116ACEAE1FCCF02D00E12ACA /* noData@2x.png in Resources */, + 4657B91D20046C8A00609928 /* other_n_att@2x.png in Resources */, + 46785D081FCFFA8B009E9B30 /* starBackImage@2x.png in Resources */, + 46785D0B1FCFFA8B009E9B30 /* name@3x.png in Resources */, + 11CCD1C71FFDF57100668A7A /* yq_like_no@3x.png in Resources */, + 11E2B9A81FC2BD4D00CE9FF3 /* girl@3x.png in Resources */, + 114EDA471FC3E4C3008BAE09 /* lw-fw@2x.png in Resources */, + 46091A991FFF460700F626D5 /* n_label@3x.png in Resources */, + 463735D61FCBAA8F0062416E /* id@2x.png in Resources */, + 11E2B9231FC2848900CE9FF3 /* SDS-dd@3x.png in Resources */, + 11908DD01FCEB5C000B8569F /* mine_1_2@2x.png in Resources */, + 116ACEEE1FCD63BB00E12ACA /* addMark@2x.png in Resources */, + 11CCD1C21FFDF57100668A7A /* xttj@3x.png in Resources */, + 46C0CF341FC69C9600F1472C /* my_dingwei@3x.png in Resources */, + 1178FCAC2003384400162248 /* message@3x.png in Resources */, + 11908DB11FCEB2B400B8569F /* discover@3x.png in Resources */, + 114EDA661FC3E567008BAE09 /* lw-yb@2x.png in Resources */, + 11625BB91FD7A8D200E156E5 /* wdqb-xjq-h@2x.png in Resources */, + 11259A751FC6C3A4009D18E4 /* loading.gif in Resources */, + 4657B914200460F000609928 /* other_say@3x.png in Resources */, + 114EDA2F1FC3E47B008BAE09 /* lw-bbt@2x.png in Resources */, + 11806A571FC5823100893BE7 /* norDuigou@2x.png in Resources */, + 11908DB21FCEB2B400B8569F /* mine@3x.png in Resources */, + 114D24551FC7CCCF000DC5EB /* YESguanzhu@2x.png in Resources */, + 114EDA5F1FC3E54F008BAE09 /* lw-pj@2x.png in Resources */, + 466334521FC5926A000BE9EE /* area.json in Resources */, + 1104DBB7200C59020020992E /* NACommentsView.xib in Resources */, + 11908DAA1FCEB2B400B8569F /* home@2x.png in Resources */, + 114D24541FC7CCCF000DC5EB /* YESguanzhu@3x.png in Resources */, + 1178FCB8200371C600162248 /* new_realname_icon@3x.png in Resources */, + 11908DC81FCEB5C000B8569F /* mine_2_1@2x.png in Resources */, + 117B0C8D1FDE81AF000C9E21 /* enterprise_icon@3x.png in Resources */, + 46091AA51FFF5F3E00F626D5 /* n_down@2x.png in Resources */, + 11908DAF1FCEB2B400B8569F /* activity_hui@2x.png in Resources */, + 11E2B9191FC2848900CE9FF3 /* PYQ-hx@3x.png in Resources */, + 11E2B9B61FC2BE7100CE9FF3 /* set_video@2x.png in Resources */, + 11908DCC1FCEB5C000B8569F /* mine_0_0@2x.png in Resources */, + 46091A941FFF460700F626D5 /* n_allday@2x.png in Resources */, + 111752361FFF7463001EF870 /* yq_collect_hui@3x.png in Resources */, + 11908DAE1FCEB2B400B8569F /* activity@2x.png in Resources */, + 11A1D98F1FCC27A1005CA3E8 /* redLike@3x.png in Resources */, + 1178FCBD200371C600162248 /* new_realname_icon@2x.png in Resources */, + 46785D091FCFFA8B009E9B30 /* starBackImage@3x.png in Resources */, + 46785D0A1FCFFA8B009E9B30 /* starImage@2x.png in Resources */, + 114D24111FC7C8A5000DC5EB /* xw-shiping@3x.png in Resources */, + 11E2B9171FC2848900CE9FF3 /* PYQ-dz@3x.png in Resources */, + 462024E81FCE56E700079C21 /* Bitmap4@2x.png in Resources */, + 114EDA2E1FC3E47B008BAE09 /* lw-bbt@3x.png in Resources */, + 462024EC1FCE56E700079C21 /* Bitmap6@2x.png in Resources */, + 118069F81FC5612200893BE7 /* weibo_icon@2x.png in Resources */, + 118CDEA51FC0093B00E41475 /* Main.storyboard in Resources */, + 114EDA5E1FC3E54F008BAE09 /* lw-pj@3x.png in Resources */, + 11A1D9401FCBDD86005CA3E8 /* act_renshu@2x.png in Resources */, + 46712F9F1FD637CD00EECDC2 /* login_logo@2x.png in Resources */, + 11A1D9601FCBE1EB005CA3E8 /* Brenshu@2x.png in Resources */, + 46091A971FFF460700F626D5 /* n_inter@3x.png in Resources */, + 118DA3481FD514BD00246522 /* launch_5_4.png in Resources */, + 114D26001FC7FA32000DC5EB /* EaseUIResource.bundle in Resources */, + 11E2B91D1FC2848900CE9FF3 /* PYQ-pjds@3x.png in Resources */, + 11908DAB1FCEB2B400B8569F /* home@3x.png in Resources */, + 114EDA3B1FC3E49C008BAE09 /* lw-dsg@3x.png in Resources */, + 462024EB1FCE56E700079C21 /* Bitmap5@3x.png in Resources */, + 114EDA331FC3E487008BAE09 /* lw-cjd@3x.png in Resources */, + 11A1D9541FCBE082005CA3E8 /* msg@2x.png in Resources */, + 46C0CF3D1FC6AC4F00F1472C /* my_card@2x.png in Resources */, + 11A1D9581FCBE175005CA3E8 /* clickLike@3x.png in Resources */, + 46EC257C1FC66F1E00EF730D /* my_activity@3x.png in Resources */, + 11908DF41FCEBF5F00B8569F /* loginphone_icon@2x.png in Resources */, + 462BC0D9200DD645009A1C6F /* gudge_arrow.png in Resources */, + 111752381FFF7463001EF870 /* yq_share@2x.png in Resources */, + 1104DBBA200C59020020992E /* magent.plist in Resources */, + 115C3E3C1FD9309300370D92 /* locationSelected@2x.png in Resources */, + 462024E91FCE56E700079C21 /* Bitmap4@3x.png in Resources */, + 4635F2261FD4E9FA00804833 /* qipao@2x.png in Resources */, + 11CFFD3C2004AFC6007D169D /* new_phone_hui_icon@3x.png in Resources */, + 118CDE901FC007BF00E41475 /* close_icon@3x.png in Resources */, + 46091A981FFF460700F626D5 /* n_label@2x.png in Resources */, + 46A4D988201185FE0036D7BD /* home_refre@2x.png in Resources */, + 115C3E201FD8EBA400370D92 /* launch_X_2.png in Resources */, + 11DA8C441FE1070C003B0728 /* arrow_down@3x.png in Resources */, + 462024E61FCE56E700079C21 /* Bitmap3@2x.png in Resources */, + 113E4C741FCFEFFC00D50F17 /* sweep_icon@3x.png in Resources */, + 11806A3C1FC5652000893BE7 /* UMSCommentDetailController.xib in Resources */, + 114EDA6F1FC3E593008BAE09 /* slw-lwh@3x.png in Resources */, + 11908DD31FCEB5C000B8569F /* mine_1_1@3x.png in Resources */, + 11908DCE1FCEB5C000B8569F /* mine_0_1@3x.png in Resources */, + 463735B21FC7F06D0062416E /* xx-tongzhi@2x.png in Resources */, + 462024EA1FCE56E700079C21 /* Bitmap5@2x.png in Resources */, + 114D24451FC7CBF2000DC5EB /* xuanxiang@2x.png in Resources */, + 114D24501FC7CCA6000DC5EB /* NOguanzhu@2x.png in Resources */, + 4657B91E20046C8A00609928 /* other_y_att@2x.png in Resources */, + 114EDA3F1FC3E4AD008BAE09 /* lw-dz@2x.png in Resources */, + 11A1D9741FCBE2F3005CA3E8 /* act_baoming@2x.png in Resources */, + 462024E71FCE56E700079C21 /* Bitmap3@3x.png in Resources */, + 118CDE8E1FC007BF00E41475 /* back_icon@3x.png in Resources */, + 4657B916200460F000609928 /* other_gift@3x.png in Resources */, + 46091A9D1FFF460700F626D5 /* n_video@3x.png in Resources */, + 114D24101FC7C8A5000DC5EB /* xw-shiping@2x.png in Resources */, + 118069FC1FC5617300893BE7 /* weixin_icon@3x.png in Resources */, + 11908DCD1FCEB5C000B8569F /* mine_1_0@2x.png in Resources */, + 11908DAC1FCEB2B400B8569F /* mine_hui@2x.png in Resources */, + 118CDEA61FC0093B00E41475 /* LaunchScreen.storyboard in Resources */, + 11806A4D1FC5652000893BE7 /* README.txt in Resources */, + 117B0C8C1FDE81AF000C9E21 /* enterprise_icon@2x.png in Resources */, + 118DA3511FD514BD00246522 /* launch_6p_1.png in Resources */, + 11908DA91FCEB2B400B8569F /* home_hui@2x.png in Resources */, + 11A1D95B1FCBE1AB005CA3E8 /* like@2x.png in Resources */, + 11908DC61FCEB5C000B8569F /* mine_2_0@3x.png in Resources */, + 114D245D1FC7E63C000DC5EB /* card_girl@2x.png in Resources */, + 11CCD1C61FFDF57100668A7A /* yq_comment@3x.png in Resources */, + 114EDA671FC3E567008BAE09 /* lw-yb@3x.png in Resources */, + 118069F91FC5612200893BE7 /* weibo_icon@3x.png in Resources */, + 11CCD1BD1FFDF57100668A7A /* qyzx@3x.png in Resources */, + 115C3E261FD90E4C00370D92 /* picture_default@3x.png in Resources */, + 11E2B9181FC2848900CE9FF3 /* PYQ-hx@2x.png in Resources */, + 118DA3501FD514BD00246522 /* launch_4_4.png in Resources */, + 114D24391FC7CAA2000DC5EB /* nan@2x.png in Resources */, + 1178FCB9200371C600162248 /* new_tuan_icon@2x.png in Resources */, + 114D24401FC7CB8B000DC5EB /* hi@2x.png in Resources */, + 11E2B91B1FC2848900CE9FF3 /* PYQ-jt@3x.png in Resources */, + 11CFFD422004C682007D169D /* yq_collect@2x.png in Resources */, + 114D24511FC7CCA6000DC5EB /* NOguanzhu@3x.png in Resources */, + 463735C81FC802370062416E /* swich_open@3x.png in Resources */, + 11CFFD462004C7B1007D169D /* yq_concern@3x.png in Resources */, + 11625BBC1FD7A8FE00E156E5 /* wdqb-xjq@3x.png in Resources */, + 114EDA371FC3E491008BAE09 /* lw-dg@3x.png in Resources */, + 11806A561FC5823100893BE7 /* norDuigou@3x.png in Resources */, + 46712FA41FD7F35D00EECDC2 /* xx_gift@2x.png in Resources */, + 11806A4A1FC5652000893BE7 /* TencentOpenApi_IOS_Bundle.bundle in Resources */, + 46C0CF391FC6A53400F1472C /* wenhao@2x.png in Resources */, + 11A1D97C1FCC0DCD005CA3E8 /* icon2_1@2x.png in Resources */, + 463735C71FC802370062416E /* swich_close@2x.png in Resources */, + 11A1D9841FCC0E25005CA3E8 /* icon2_3@2x.png in Resources */, + 118069F51FC560CC00893BE7 /* qq_icon@3x.png in Resources */, + 11A1D9481FCBDDE8005CA3E8 /* act_phone@2x.png in Resources */, + 11E2B9C91FC2CE6700CE9FF3 /* setting_icon@3x.png in Resources */, + 11A1D9781FCBE31C005CA3E8 /* Newpinglun@2x.png in Resources */, + 11908DE81FCEBE8400B8569F /* tuan_hui_icon@2x.png in Resources */, + 11908DCB1FCEB5C000B8569F /* mine_1_0@3x.png in Resources */, + 114D24201FC7C961000DC5EB /* zl-sfrz-h@3x.png in Resources */, + 1178FCBC200371C600162248 /* new_phone_icon@2x.png in Resources */, + 11E2B91C1FC2848900CE9FF3 /* PYQ-pjds@2x.png in Resources */, + 11259A811FC6DD19009D18E4 /* qdcg@2x.png in Resources */, + 115C3E221FD8EBA400370D92 /* launch_X_4.png in Resources */, + 11908DB61FCEB2B400B8569F /* discover_hui@3x.png in Resources */, + 114EDA361FC3E491008BAE09 /* lw-dg@2x.png in Resources */, + 11908DF31FCEBF5F00B8569F /* password_icon@2x.png in Resources */, + 46212D001FC25D6500E89A57 /* mapapi.bundle in Resources */, + 46091A9C1FFF460700F626D5 /* n_video@2x.png in Resources */, + 114EDA4F1FC3E4EB008BAE09 /* lw-kh@3x.png in Resources */, + 11625BAD1FD7A81E00E156E5 /* wdqb-rcq@3x.png in Resources */, + 114D240D1FC7C807000DC5EB /* xw-huangguan@2x.png in Resources */, + 462024F41FCEC17400079C21 /* idnorm@3x.png in Resources */, + 11E2B9B11FC2BE2100CE9FF3 /* add_image@3x.png in Resources */, + 11DA8C3F1FE106D7003B0728 /* arrow_up@2x.png in Resources */, + 11CCD1C81FFDF57100668A7A /* qyzx@2x.png in Resources */, + 115C3E3D1FD9309300370D92 /* cameraSelected@3x.png in Resources */, + 114D24591FC7E60B000DC5EB /* card_boy@2x.png in Resources */, + 462024E31FCE56E700079C21 /* Bitmap2@3x.png in Resources */, + 118DA3541FD514BD00246522 /* launch_6p_4.png in Resources */, + 11CCD1C51FFDF57100668A7A /* yq_comment@2x.png in Resources */, + 11E2B9141FC2848900CE9FF3 /* huifu@2x.png in Resources */, + 11E2B9251FC2848900CE9FF3 /* video_play@3x.png in Resources */, + 114EDA571FC3E52C008BAE09 /* lw-mg3@3x.png in Resources */, + 116ACEE91FCD52BB00E12ACA /* luzhi@3x.png in Resources */, + 114D243D1FC7CAB8000DC5EB /* nv@2x.png in Resources */, + 11E2B91E1FC2848900CE9FF3 /* PYQ-pl@2x.png in Resources */, + 11908D951FCE9B0C00B8569F /* share_white_icon@3x.png in Resources */, + 11625BB81FD7A8D200E156E5 /* wdqb-xjq-h@3x.png in Resources */, + 11806A521FC581FF00893BE7 /* selectDuigou@2x.png in Resources */, + 46B52A601FD53BF700F22888 /* refresh_ding@2x.png in Resources */, + 111752411FFF7548001EF870 /* yq_concern_bai@3x.png in Resources */, + 11A1D93B1FCBDD61005CA3E8 /* act_place@2x.png in Resources */, + 11908DD11FCEB5C000B8569F /* mine_1_2@3x.png in Resources */, + 11A1D9831FCC0E25005CA3E8 /* icon2_3@3x.png in Resources */, + 11E2B91A1FC2848900CE9FF3 /* PYQ-jt@2x.png in Resources */, + 11A1D9631FCBE23C005CA3E8 /* icon@2x.png in Resources */, + 114D24141FC7C8CA000DC5EB /* xw-shipin-hui@2x.png in Resources */, + 114D24081FC7C7E3000DC5EB /* xw-dise@2x.png in Resources */, + 114EDA531FC3E4FC008BAE09 /* lw-mg1@3x.png in Resources */, + 116ACEEB1FCD609500E12ACA /* nation.plist in Resources */, + 11908DC91FCEB5C000B8569F /* mine_2_0@2x.png in Resources */, + 114D24091FC7C7E3000DC5EB /* xw-dise@3x.png in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 118CDDDB1FC0077C00E41475 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 11B4ED43200EDF0D00A67D35 /* UIImage+ImgSize.m in Sources */, + 4651CF2C1FFCC59A00A937F6 /* PersonPhotoView.m in Sources */, + 11A767C41FF1FA550039ABEC /* ZCTextView.m in Sources */, + 466F1BDE1FECB6DC0045EB09 /* PicturesCell.m in Sources */, + 114D25D91FC7FA32000DC5EB /* NSString+Valid.m in Sources */, + 4635F21E1FD1640800804833 /* BMKClusterManager.m in Sources */, + 4635F21F1FD1640800804833 /* BMKClusterQuadtree.m in Sources */, + 11E2B9371FC2A92300CE9FF3 /* ZCSelectPhotosViewController.m in Sources */, + 114D25B31FC7FA32000DC5EB /* MWZoomingScrollView.m in Sources */, + 466334391FC55D43000BE9EE /* SDCycleScrollView.m in Sources */, + 114D25E91FC7FA32000DC5EB /* EaseViewController.m in Sources */, + 46C0CF521FC6C65900F1472C /* MyPeopleViewController.m in Sources */, + 1130F3751FEA0E0A009AC59E /* TextCell.m in Sources */, + 462BC0E5200EFB0A009A1C6F /* ZanAndReportCell.m in Sources */, + 1166A6E91FC1376900CCA010 /* UIView+WebCacheOperation.m in Sources */, + 114D25AE1FC7FA32000DC5EB /* MWGridViewController.m in Sources */, + 11A767C11FF1EF8C0039ABEC /* ImgTextImg.m in Sources */, + 1166A6DC1FC1376900CCA010 /* SDImageCache.m in Sources */, + 46212D051FC25D9900E89A57 /* MapManager.m in Sources */, + 118CC1B81FFB50A1004CC0D5 /* TopicDetailViewController.m in Sources */, + 4661051A1FC2788E008E89E8 /* QYActionPaopaoView.m in Sources */, + 46E4FFFD1FDF6D73003B26C8 /* IdentyListViewController.m in Sources */, + 11A963ED1FFF0EBD00094A09 /* YuanquanCommentModel.m in Sources */, + 1166A6EF1FC139FB00CCA010 /* UIView+FirstViewController.m in Sources */, + 46091A781FFF0BBF00F626D5 /* JQwaveView.m in Sources */, + 114D25EB1FC7FA32000DC5EB /* EaseBaseMessageCell.m in Sources */, + 11E2B9831FC2AB5300CE9FF3 /* MJPhotoLoadingView.m in Sources */, + 114D25CC1FC7FA32000DC5EB /* PSTCollectionViewLayout.m in Sources */, + 11E2B9561FC2A94B00CE9FF3 /* TZAssetModel.m in Sources */, + 11E2B9001FC2843200CE9FF3 /* LoginViewController.m in Sources */, + 46EC257F1FC66FF500EF730D /* MyActivityViewController.m in Sources */, + 1166A6DA1FC1376900CCA010 /* MKAnnotationView+WebCache.m in Sources */, + 4693F3141FECE89300E510C6 /* QYInputToolbar.m in Sources */, + 4651CF191FFB2A9700A937F6 /* ProfileHeaderView.m in Sources */, + 114EDA9A1FC3FA39008BAE09 /* UIButtonListView.m in Sources */, + 46091A861FFF0D2800F626D5 /* PhotoCollectionViewCell.m in Sources */, + 466334381FC55D43000BE9EE /* SDCollectionViewCell.m in Sources */, + 114D25B11FC7FA32000DC5EB /* MWTapDetectingImageView.m in Sources */, + 114D25AD1FC7FA32000DC5EB /* MWGridCell.m in Sources */, + 1130F37E1FEA0E43009AC59E /* TextAndPicturesCell.m in Sources */, + 118CDEA01FC007BF00E41475 /* MainTabBarController.m in Sources */, + 117700FE1FEB5C9D0038D4E1 /* YuanquanDetailViewController.m in Sources */, + 118CDE7F1FC007BF00E41475 /* MJRefreshAutoNormalFooter.m in Sources */, + 118CDE821FC007BF00E41475 /* MJRefreshBackNormalFooter.m in Sources */, + 114EDAE91FC431E8008BAE09 /* PhotoModel.m in Sources */, + 118CDE7A1FC007BF00E41475 /* MJRefreshBackFooter.m in Sources */, + 114D25911FC7FA32000DC5EB /* EMCDDeviceManagerBase.m in Sources */, + 463735E41FCBB9660062416E /* CordialNewTableViewCell.m in Sources */, + 114D23DC1FC7AB25000DC5EB /* OtherViewController.m in Sources */, + 114EDAB81FC4041F008BAE09 /* HobbyAndMarkViewController.m in Sources */, + 4691BE181FCD31FA0077237C /* ApplyView.m in Sources */, + 46E4FFFA1FDF6D03003B26C8 /* IdentyViewController.m in Sources */, + 4657B90B20045A0500609928 /* OtherFooterView.m in Sources */, + 118CDEAF1FC0286900E41475 /* PhoneCodeViewController.m in Sources */, + 11E2B95D1FC2A94B00CE9FF3 /* TZPhotoPreviewCell.m in Sources */, + 4663340F1FC40DB5000BE9EE /* QYStarView.m in Sources */, + 118CDE8C1FC007BF00E41475 /* UIView+MJExtension.m in Sources */, + 112599FA1FC65D40009D18E4 /* FileTool.m in Sources */, + 4691BE1B1FCD42740077237C /* ApplyPersonView.m in Sources */, + 4651CF101FFB25D700A937F6 /* ProfileViewController.m in Sources */, + 46E03DF01FC2B2F200F55A8E /* QYPointAnnotation.m in Sources */, + 118CDE891FC007BF00E41475 /* NSBundle+MJRefresh.m in Sources */, + 1166A6E01FC1376900CCA010 /* SDWebImageDownloaderOperation.m in Sources */, + 118CDE881FC007BF00E41475 /* MJRefreshConst.m in Sources */, + 46712F9B1FD6306600EECDC2 /* ConversationListController.m in Sources */, + 11259A2A1FC6AD11009D18E4 /* ImageTextButton.m in Sources */, + 46FA4D3F1FFDB93D00F3DC4E /* EduView.m in Sources */, + 11E2B95C1FC2A94B00CE9FF3 /* TZPhotoPickerController.m in Sources */, + 1130F3811FEA0E52009AC59E /* TextAndVideoCell.m in Sources */, + 114D26151FC801AC000DC5EB /* ChatViewController.m in Sources */, + 11E2B9601FC2A94B00CE9FF3 /* TZVideoPlayerController.m in Sources */, + 4637359D1FC7ED5B0062416E /* SetpushViewController.m in Sources */, + 46EC25821FC6730F00EF730D /* MyActivityCell.m in Sources */, + 118CDE7C1FC007BF00E41475 /* MJRefreshFooter.m in Sources */, + 11259A4E1FC6AE8D009D18E4 /* CommentHeadView.m in Sources */, + 114EDAD21FC42D83008BAE09 /* IntroduceViewController.m in Sources */, + 46E400001FDF8316003B26C8 /* EnterpriseViewController.m in Sources */, + 114ED9FC1FC3B850008BAE09 /* MyWalletViewController.m in Sources */, + 4651CF2F1FFCCB2900A937F6 /* SectionView.m in Sources */, + 114C968E1FDFC1DF004F2A2B /* DepartmentNameViewController.m in Sources */, + 11E2B95E1FC2A94B00CE9FF3 /* TZPhotoPreviewController.m in Sources */, + 46EB82251FF37A96004D7652 /* QYGuideView.m in Sources */, + 11E2B9881FC2AB5300CE9FF3 /* UIImageView+MJWebCache.m in Sources */, + 11E2B98E1FC2AB9200CE9FF3 /* ShowBigViewCell.m in Sources */, + 11E2B9611FC2A94B00CE9FF3 /* UIView+Layout.m in Sources */, + 118CC1C61FFB7494004CC0D5 /* YuanquanDetailHeaderView.m in Sources */, + 11E2B9311FC2A72A00CE9FF3 /* UIPlaceHolderTextView.m in Sources */, + 46FA4D491FFDD27A00F3DC4E /* ItemViewController.m in Sources */, + 466334371FC55D43000BE9EE /* TAPageControl.m in Sources */, + 114D258E1FC7FA32000DC5EB /* EMCDDeviceManager+Microphone.m in Sources */, + 114D25E71FC7FA32000DC5EB /* EaseRefreshTableViewController.m in Sources */, + 114D25B01FC7FA32000DC5EB /* MWPhotoBrowser.m in Sources */, + 46FA4D421FFDBF7400F3DC4E /* WorkView.m in Sources */, + 114EDADE1FC42E24008BAE09 /* MapCell.m in Sources */, + 11E2B9571FC2A94B00CE9FF3 /* TZGifPhotoPreviewController.m in Sources */, + 114ED9FD1FC3B850008BAE09 /* MyTicketViewController.m in Sources */, + 462BC0F2200F3BEE009A1C6F /* UITableView+XHWebImageAutoSize.m in Sources */, + 114EDA021FC3B86D008BAE09 /* MyTicketCell.m in Sources */, + 4651CF231FFC7BE800A937F6 /* UIButton+Ext.m in Sources */, + 11E2A9E11FE794D800E3A4B2 /* XLCardSwitchFlowLayout.m in Sources */, + 11E2B99E1FC2B62200CE9FF3 /* UploadMethod.m in Sources */, + 466333FE1FC3DAB5000BE9EE /* CommonCell.m in Sources */, + 114D25931FC7FA32000DC5EB /* wav.mm in Sources */, + 466334351FC55D43000BE9EE /* TAAnimatedDotView.m in Sources */, + 114D25E51FC7FA32000DC5EB /* EaseLocationViewController.m in Sources */, + 114D25CF1FC7FA32000DC5EB /* PSTGridLayoutItem.m in Sources */, + 114D25EE1FC7FA32000DC5EB /* EaseMessageTimeCell.m in Sources */, + 462BC0F6200F4657009A1C6F /* YuanQuanPicCell.m in Sources */, + 112599FD1FC66A98009D18E4 /* FeedbackViewController.m in Sources */, + 11E2B9681FC2A9B300CE9FF3 /* PlayViewController.m in Sources */, + 46091A7D1FFF0C5100F626D5 /* UIImageView+LBBlurredImage.m in Sources */, + 1166A6EC1FC1395200CCA010 /* PlayVideoView.m in Sources */, + 46212D1C1FC2625000E89A57 /* MapViewController.m in Sources */, + 114D25EC1FC7FA32000DC5EB /* EaseCustomMessageCell.m in Sources */, + 114D25DA1FC7FA32000DC5EB /* UIViewController+DismissKeyboard.m in Sources */, + 114D25891FC7FA32000DC5EB /* EaseUI.m in Sources */, + 114D25DD1FC7FA32000DC5EB /* EaseConvertToCommonEmoticonsHelper.m in Sources */, + 11259A361FC6AD83009D18E4 /* likeModel.m in Sources */, + 46FA4D551FFE14DC00F3DC4E /* DetailView.m in Sources */, + 1166A6B71FC136AF00CCA010 /* LikeAndCommentBtnView.m in Sources */, + 462BC0FA200F4CE0009A1C6F /* QYVideoCell.m in Sources */, + 114D258C1FC7FA32000DC5EB /* EMAudioRecorderUtil.m in Sources */, + 11E2B9341FC2A76000CE9FF3 /* PicImageVIew.m in Sources */, + 114D25F41FC7FA32000DC5EB /* EaseBubbleView+Video.m in Sources */, + 46091AA01FFF4C7100F626D5 /* ImageLabelView.m in Sources */, + 118CDE951FC007BF00E41475 /* MineTopView.m in Sources */, + 11259A271FC6ACFD009D18E4 /* BottomView.m in Sources */, + 118CDE9C1FC007BF00E41475 /* InputTextView.m in Sources */, + 114D25E81FC7FA32000DC5EB /* EaseUsersListViewController.m in Sources */, + 463735CF1FC8192E0062416E /* AdModel.m in Sources */, + 118CDE911FC007BF00E41475 /* ActivityViewController.m in Sources */, + 46E9D07D1FC7AFFF00F7A344 /* FriendModel.m in Sources */, + 114D25DF1FC7FA32000DC5EB /* EaseEmoji.m in Sources */, + 114D25CE1FC7FA32000DC5EB /* PSTGridLayoutInfo.m in Sources */, + 11E2B9C21FC2CB5300CE9FF3 /* ActivityListModel.m in Sources */, + 118CDEA11FC007BF00E41475 /* AppDelegate+AppService.m in Sources */, + 114D25F21FC7FA32000DC5EB /* EaseBubbleView+Location.m in Sources */, + 4635F2221FD4DFEE00804833 /* QYCluster.m in Sources */, + 466334551FC5926A000BE9EE /* QYPickerView.m in Sources */, + 118CDE841FC007BF00E41475 /* MJRefreshGifHeader.m in Sources */, + 11259A781FC6C6BB009D18E4 /* CardModel.m in Sources */, + 11E2A9DE1FE794D800E3A4B2 /* XLCard.m in Sources */, + 114EDAA31FC3FBEA008BAE09 /* ZCTools.m in Sources */, + 1144A9E51FF37218006D6D7D /* PicturesView.m in Sources */, + 114D25E41FC7FA32000DC5EB /* EaseConversationListViewController.m in Sources */, + 4651CF321FFCE06D00A937F6 /* DeclarationView.m in Sources */, + 11259A031FC6787A009D18E4 /* BindingPhoneViewController.m in Sources */, + 1130F3721FEA0852009AC59E /* YuanquanModel.m in Sources */, + 114D25F11FC7FA32000DC5EB /* EaseBubbleView+Image.m in Sources */, + 114D25F61FC7FA32000DC5EB /* EaseBubbleView.m in Sources */, + 118CDE791FC007BF00E41475 /* MJRefreshAutoFooter.m in Sources */, + 111CC5EB1FFCC8AC00A85682 /* CommentListViewController.m in Sources */, + 118CDE9D1FC007BF00E41475 /* RootNavigationController.m in Sources */, + 114D25AC1FC7FA32000DC5EB /* MWCaptionView.m in Sources */, + 114D25D41FC7FA32000DC5EB /* EaseConversationModel.m in Sources */, + 46FA4D5E1FFE30F700F3DC4E /* VideoView.m in Sources */, + 4601FD0B1FE90F080084296E /* QYLinkLable.m in Sources */, + 114D25E31FC7FA32000DC5EB /* FixFopen.c in Sources */, + 1166A7041FC13F4A00CCA010 /* AFSecurityPolicy.m in Sources */, + 114D25C71FC7FA32000DC5EB /* PSTCollectionViewCell.m in Sources */, + 11259A061FC6AB7B009D18E4 /* EventDetailsViewController.m in Sources */, + 111CC5E21FFCA7B400A85682 /* YuanquanCommentCell.m in Sources */, + 11259A731FC6C386009D18E4 /* LoadingView.m in Sources */, + 118CDEB51FC02C0F00E41475 /* ZCTextFieldLineView.m in Sources */, + 46E03DED1FC2A2FB00F55A8E /* AvatarImageView.m in Sources */, + 114D25921FC7FA32000DC5EB /* amrFileCodec.mm in Sources */, + 114C96881FDFA664004F2A2B /* ZCLabelTextFieldLineView.m in Sources */, + 11E2B95F1FC2A94B00CE9FF3 /* TZProgressView.m in Sources */, + 4657B908200324A000609928 /* OtherGiftView.m in Sources */, + 114D25C91FC7FA32000DC5EB /* PSTCollectionViewData.m in Sources */, + 114D25FC1FC7FA32000DC5EB /* EaseFacialView.m in Sources */, + 114EDA971FC3FA0E008BAE09 /* PersonalInfoModel.m in Sources */, + 11E2B9B91FC2C71500CE9FF3 /* VisitorViewController.m in Sources */, + 118CDE8A1FC007BF00E41475 /* UIScrollView+MJExtension.m in Sources */, + 114EDA1E1FC3D8ED008BAE09 /* PeopleOfGiftCell.m in Sources */, + 1166A7071FC13F4A00CCA010 /* AFURLSessionManager.m in Sources */, + 11259A181FC6AC77009D18E4 /* EventHeadView.m in Sources */, + 118CDE9F1FC007BF00E41475 /* ZCRefreshTableViewController.m in Sources */, + 466333F41FC3B442000BE9EE /* ALLWebViewController.m in Sources */, + 462BC0EF200F3BEE009A1C6F /* XHWebImageAutoSizeConst.m in Sources */, + 114D25C61FC7FA32000DC5EB /* PSTCollectionView.m in Sources */, + 11E2B9581FC2A94B00CE9FF3 /* TZImageCropManager.m in Sources */, + 1166A6E31FC1376900CCA010 /* UIButton+WebCache.m in Sources */, + 1166A6E21FC1376900CCA010 /* SDWebImagePrefetcher.m in Sources */, + 1166A7051FC13F4A00CCA010 /* AFURLRequestSerialization.m in Sources */, + 117700FB1FEB57180038D4E1 /* PublicYuanquanViewController.m in Sources */, + 462BC0DC200EEFB2009A1C6F /* TopicAndTextCell.m in Sources */, + 118CDE941FC007BF00E41475 /* MineViewController.m in Sources */, + 1117522F1FFF45CA001EF870 /* TopicListViewController.m in Sources */, + 46212D1F1FC2630600E89A57 /* AppDelegate+AppTripartite.mm in Sources */, + 114D25FF1FC7FA32000DC5EB /* EaseConversationCell.m in Sources */, + 113E4C611FCFDBF600D50F17 /* ConditionView.m in Sources */, + 114D25D51FC7FA32000DC5EB /* EaseMessageModel.m in Sources */, + 4635F21D1FD1640800804833 /* BMKClusterItem.m in Sources */, + 11259A0C1FC6ABE7009D18E4 /* EventInFnoView.m in Sources */, + 11E2B9851FC2AB5300CE9FF3 /* MJPhotoToolbar.m in Sources */, + 11E2A9E01FE794D800E3A4B2 /* XLCardSwitch.m in Sources */, + 118069BD1FC50A4500893BE7 /* ForgetPwdViewController.m in Sources */, + 114D25F91FC7FA32000DC5EB /* EaseImageView.m in Sources */, + 46091A771FFF0BBF00F626D5 /* CHTCollectionViewWaterfallLayout.m in Sources */, + 462024D41FCE4B8000079C21 /* UploadAvatarView.m in Sources */, + 114D25F71FC7FA32000DC5EB /* EaseChatToolbar.m in Sources */, + 1166A6DE1FC1376900CCA010 /* SDWebImageDecoder.m in Sources */, + 11E2B9821FC2AB5300CE9FF3 /* MJPhotoBrowser.m in Sources */, + 118CDE7D1FC007BF00E41475 /* MJRefreshHeader.m in Sources */, + 1104DBA2200C46AE0020992E /* MyContentViewController.m in Sources */, + 11E2B9C51FC2CB6A00CE9FF3 /* MoreEventCell.m in Sources */, + 4651CF1D1FFB5E6800A937F6 /* SpouseView.m in Sources */, + 114D25B21FC7FA32000DC5EB /* MWTapDetectingView.m in Sources */, + 114D25EA1FC7FA32000DC5EB /* EaseUserCell.m in Sources */, + 113E4C671FCFDC2800D50F17 /* SpeedModel.m in Sources */, + 4651CF261FFC828200A937F6 /* EditProfileViewController.m in Sources */, + 114D23FD1FC7AD97000DC5EB /* SendGiftView.m in Sources */, + 114D23FA1FC7AD8C000DC5EB /* GiftView.m in Sources */, + 1166A6B41FC1366700CCA010 /* RelationAndOptionView.m in Sources */, + 11259A511FC6B31E009D18E4 /* CommentCell.m in Sources */, + 114D25F81FC7FA32000DC5EB /* EaseChatToolbarItem.m in Sources */, + 114D258F1FC7FA32000DC5EB /* EMCDDeviceManager+ProximitySensor.m in Sources */, + 11259A331FC6AD6C009D18E4 /* MessageModel.m in Sources */, + 11E2B9BF1FC2CB3500CE9FF3 /* ActivityListCell.m in Sources */, + 11E2B9871FC2AB5300CE9FF3 /* SDWebImageManager+MJ.m in Sources */, + 118CDE811FC007BF00E41475 /* MJRefreshBackGifFooter.m in Sources */, + 114D25D61FC7FA32000DC5EB /* EaseUserModel.m in Sources */, + 118CDE8B1FC007BF00E41475 /* UIScrollView+MJRefresh.m in Sources */, + 11259A241FC6ACE5009D18E4 /* InformationView.m in Sources */, + 118CDE921FC007BF00E41475 /* DiscoverViewController.m in Sources */, + 114D25E01FC7FA32000DC5EB /* EaseEmojiEmoticons.m in Sources */, + 114EDA231FC3D983008BAE09 /* MyGiftViewController.m in Sources */, + 114EDA061FC3B87E008BAE09 /* MyTicketModel.m in Sources */, + 114D25E61FC7FA32000DC5EB /* EaseMessageViewController.m in Sources */, + 466334341FC55D43000BE9EE /* TAAbstractDotView.m in Sources */, + 463735B81FC7F8140062416E /* InFnoModel.m in Sources */, + 114D25C81FC7FA32000DC5EB /* PSTCollectionViewController.m in Sources */, + 1130F36F1FEA0740009AC59E /* YuanquanBaseCell.m in Sources */, + 11E2B9841FC2AB5300CE9FF3 /* MJPhotoProgressView.m in Sources */, + 114EDA031FC3B86D008BAE09 /* SyceeCell.m in Sources */, + 114EDA9D1FC3FA90008BAE09 /* delteButton.m in Sources */, + 466334361FC55D43000BE9EE /* TADotView.m in Sources */, + 1166A7081FC13F4A00CCA010 /* JSONKit.m in Sources */, + 1166A6441FC12B9800CCA010 /* NewsListViewController.m in Sources */, + 118CDEAB1FC0142100E41475 /* ThirdLoginView.m in Sources */, + 114D25ED1FC7FA32000DC5EB /* EaseMessageCell.m in Sources */, + 11E2B96D1FC2AA4500CE9FF3 /* LookVideoViewController.m in Sources */, + 11E2B9951FC2AE8300CE9FF3 /* MBProgressHUD.m in Sources */, + 114D25D01FC7FA32000DC5EB /* PSTGridLayoutRow.m in Sources */, + 466333FB1FC3D3B8000BE9EE /* UIView+RadiusView.m in Sources */, + 46712FA11FD784C700EECDC2 /* UITabBar+badge.m in Sources */, + 114D24031FC7BA0C000DC5EB /* EmotionModel.m in Sources */, + 114D25D11FC7FA32000DC5EB /* PSTGridLayoutSection.m in Sources */, + 114EDA091FC3D1BB008BAE09 /* ZCAlertController.m in Sources */, + 1166A7091FC13F4A00CCA010 /* Reachability.m in Sources */, + 46EAB9D71FCC09CD00BC9B12 /* CordiaModel.m in Sources */, + 11E2B98B1FC2AB7F00CE9FF3 /* ShowBigIVViewController.m in Sources */, + 11259A541FC6B335009D18E4 /* EventFooterView.m in Sources */, + 118CC1BB1FFB50CF004CC0D5 /* TopicDetailHeaderView.m in Sources */, + 1166A7021FC13F4A00CCA010 /* AFHTTPSessionManager.m in Sources */, + 114D25CD1FC7FA32000DC5EB /* PSTCollectionViewUpdateItem.m in Sources */, + 114D25F01FC7FA32000DC5EB /* EaseBubbleView+Gif.m in Sources */, + 114D25AF1FC7FA32000DC5EB /* MWPhoto.m in Sources */, + 118CDDF21FC0077C00E41475 /* main.m in Sources */, + 114D25E11FC7FA32000DC5EB /* EaseEmotionEscape.m in Sources */, + 462BC0E2200EF5C0009A1C6F /* TopicTextModel.m in Sources */, + 11259A661FC6BEDD009D18E4 /* LikeCell.m in Sources */, + 46091A871FFF0D2800F626D5 /* PhotoFooterView.m in Sources */, + 114D25CB1FC7FA32000DC5EB /* PSTCollectionViewItemKey.m in Sources */, + 462BC0F1200F3BEE009A1C6F /* XHWebImageAutoSizeCache.m in Sources */, + 114D258B1FC7FA32000DC5EB /* EMAudioPlayerUtil.m in Sources */, + 466105171FC2773C008E89E8 /* QYRoundAnnotationView.m in Sources */, + 114D25C51FC7FA32000DC5EB /* NSIndexPath+PSTCollectionViewAdditions.m in Sources */, + 11E2B9591FC2A94B00CE9FF3 /* TZImageManager.m in Sources */, + 11E2B99B1FC2B04200CE9FF3 /* SexView.m in Sources */, + 11E2B95B1FC2A94B00CE9FF3 /* TZImagePickerController.m in Sources */, + 466334091FC3FB02000BE9EE /* MyCardModel.m in Sources */, + 114D25DC1FC7FA32000DC5EB /* EaseChineseToPinyin.m in Sources */, + 118CDEA21FC007BF00E41475 /* AppDelegate.m in Sources */, + 114D25EF1FC7FA32000DC5EB /* EaseBubbleView+File.m in Sources */, + 466334201FC514C4000BE9EE /* TextFieldViewController.m in Sources */, + 4651CF291FFCBAC500A937F6 /* PersonView.m in Sources */, + 114D25E21FC7FA32000DC5EB /* EaseEmotionManager.m in Sources */, + 11E2B9A41FC2B83400CE9FF3 /* NearbyPlaceViewController.m in Sources */, + 11E2A9DF1FE794D800E3A4B2 /* XLCardItem.m in Sources */, + 1166A6E71FC1376900CCA010 /* UIImageView+HighlightedWebCache.m in Sources */, + 1166A6E41FC1376900CCA010 /* UIImage+GIF.m in Sources */, + 114D25FE1FC7FA32000DC5EB /* EaseRecordView.m in Sources */, + 118CDE7B1FC007BF00E41475 /* MJRefreshComponent.m in Sources */, + 114EDAA01FC3FADC008BAE09 /* NSString+Ext.m in Sources */, + 4601FD0E1FEB5C1E0084296E /* CameraManager.m in Sources */, + 46FA4D4C1FFDD28F00F3DC4E /* SchoolViewController.m in Sources */, + 463735E11FCBB8A30062416E /* CordialViewController.m in Sources */, + 1166A6DF1FC1376900CCA010 /* SDWebImageDownloader.m in Sources */, + 118CDE801FC007BF00E41475 /* MJRefreshAutoStateFooter.m in Sources */, + 1166A6E61FC1376900CCA010 /* UIImage+WebP.m in Sources */, + 118CDE851FC007BF00E41475 /* MJRefreshNormalHeader.m in Sources */, + 4637359A1FC7EC650062416E /* SyStemNewsViewController.m in Sources */, + 1166A6E11FC1376900CCA010 /* SDWebImageManager.m in Sources */, + 46091A801FFF0D1900F626D5 /* UIImage+ImageEffects.m in Sources */, + 118CDE861FC007BF00E41475 /* MJRefreshStateHeader.m in Sources */, + 118CDE831FC007BF00E41475 /* MJRefreshBackStateFooter.m in Sources */, + 11E2B9861FC2AB5300CE9FF3 /* MJPhotoView.m in Sources */, + 11E2B9BC1FC2C74300CE9FF3 /* SeeOrLikeCell.m in Sources */, + 46FA4D5B1FFE2B4200F3DC4E /* InterestView.m in Sources */, + 118CDEB21FC02BA200E41475 /* VerifyCodeButton.m in Sources */, + 111CC5E81FFCB4E700A85682 /* YuanquanDetailBottomView.m in Sources */, + 114D25D71FC7FA32000DC5EB /* NSDate+Category.m in Sources */, + 114EDAC41FC40818008BAE09 /* UserBarView.m in Sources */, + 111CC5EE1FFCCC5D00A85682 /* YuanquanCommentHeaderView.m in Sources */, + 114D25FB1FC7FA32000DC5EB /* EaseFaceView.m in Sources */, + 114D25B41FC7FA32000DC5EB /* DACircularProgressView.m in Sources */, + 1166A6E51FC1376900CCA010 /* UIImage+MultiFormat.m in Sources */, + 114D25F31FC7FA32000DC5EB /* EaseBubbleView+Text.m in Sources */, + 1166A6DB1FC1376900CCA010 /* NSData+ImageContentType.m in Sources */, + 11E2B9551FC2A94B00CE9FF3 /* TZAssetCell.m in Sources */, + 1166A7061FC13F4A00CCA010 /* AFURLResponseSerialization.m in Sources */, + 118CDE971FC007BF00E41475 /* RegisterViewController.m in Sources */, + 11259A3F1FC6ADF9009D18E4 /* BottomBtnView.m in Sources */, + 46FA4D4F1FFDF9F200F3DC4E /* ApproveView.m in Sources */, + 1166A6E81FC1376900CCA010 /* UIImageView+WebCache.m in Sources */, + 114EDA1D1FC3D8ED008BAE09 /* GiftCell.m in Sources */, + 11259A7E1FC6DCE7009D18E4 /* SignInView.m in Sources */, + 118CDE7E1FC007BF00E41475 /* MJRefreshAutoGifFooter.m in Sources */, + 114D25D31FC7FA32000DC5EB /* EaseSDKHelper.m in Sources */, + 46091A7A1FFF0BBF00F626D5 /* YYWeakProxy.m in Sources */, + 114D26181FC801CB000DC5EB /* ChatDemoHelper.m in Sources */, + 114D25DE1FC7FA32000DC5EB /* EaseMessageReadManager.m in Sources */, + 11E2B9541FC2A94B00CE9FF3 /* NSBundle+TZImagePicker.m in Sources */, + 1166A6DD1FC1376900CCA010 /* SDWebImageCompat.m in Sources */, + 118CDE9E1FC007BF00E41475 /* RootViewController.m in Sources */, + 11259A391FC6AD9B009D18E4 /* LikeViewController.m in Sources */, + 46FA4D521FFDFEAF00F3DC4E /* QYTagView.m in Sources */, + 1166A70D1FC1413200CCA010 /* ZCNetRequestManager.m in Sources */, + 114EDA271FC3DB95008BAE09 /* NSString+transform.m in Sources */, + 46C0CF471FC6C12200F1472C /* FriendViewController.m in Sources */, + 114EDA241FC3D983008BAE09 /* PeopleOfGiftViewController.m in Sources */, + 114D25FD1FC7FA32000DC5EB /* EaseChatBarMoreView.m in Sources */, + 1166A7031FC13F4A00CCA010 /* AFNetworkReachabilityManager.m in Sources */, + 4635F21C1FD1640800804833 /* BMKClusterAlgorithm.m in Sources */, + 11259A571FC6B355009D18E4 /* EventFootBtn.m in Sources */, + 1130F37B1FEA0E32009AC59E /* VideoCell.m in Sources */, + 114D25941FC7FA32000DC5EB /* EMVoiceConverter.mm in Sources */, + 114D25FA1FC7FA32000DC5EB /* EaseTextView.m in Sources */, + 113E4C5E1FCFDB5E00D50F17 /* FindViewController.m in Sources */, + 11E2B9801FC2AB5300CE9FF3 /* MJPhoto.m in Sources */, + 114D25CA1FC7FA32000DC5EB /* PSTCollectionViewFlowLayout.m in Sources */, + 114EDAD51FC42DAA008BAE09 /* MyPhotoAlbumViewController.m in Sources */, + 113E4C641FCFDC1700D50F17 /* SpeedCell.m in Sources */, + 11E2B9D31FC2E68200CE9FF3 /* SettingView.m in Sources */, + 46F2881C2029577C004835CF /* BuyBeanController.m in Sources */, + 46C0CF4A1FC6C22C00F1472C /* TopBtnView.m in Sources */, + 114EDADA1FC42DC5008BAE09 /* VideoViewController.m in Sources */, + 463735B51FC7F59A0062416E /* SysCell.m in Sources */, + 11259A3C1FC6ADD6009D18E4 /* JQActionSheet.m in Sources */, + 11259A481FC6AE58009D18E4 /* EventItemView.m in Sources */, + 114D25F51FC7FA32000DC5EB /* EaseBubbleView+Voice.m in Sources */, + 462024F01FCE64D000079C21 /* QYShareView.m in Sources */, + 463735EE1FCBBD290062416E /* MySpoorViewController.m in Sources */, + 112E3E661FE9032100825D7E /* DiscoverHeaderView.m in Sources */, + 114EDACF1FC41079008BAE09 /* TapGestureRecognizer.m in Sources */, + 118CDE771FC007BF00E41475 /* UIView+ZCExtension.m in Sources */, + 462BC0F0200F3BEE009A1C6F /* XHWebImageAutoSize.m in Sources */, + 11E2B9941FC2AE8300CE9FF3 /* MBProgressHUD+Add.m in Sources */, + 46C0CF551FC6C6E100F1472C /* MyPeopleCell.m in Sources */, + 463735E71FCBBA360062416E /* CordiaFooterView.m in Sources */, + 114C968B1FDFBB4E004F2A2B /* EnterpriseNameViewController.m in Sources */, + 466334181FC42AAE000BE9EE /* ModifyPwdViewController.m in Sources */, + 4657B90520030DB900609928 /* OtherPhotoView.m in Sources */, + 463735A41FC7EDE10062416E /* SetPushCell.m in Sources */, + 114D25901FC7FA32000DC5EB /* EMCDDeviceManager+Remind.m in Sources */, + 114D258D1FC7FA32000DC5EB /* EMCDDeviceManager+Media.m in Sources */, + 114D25DB1FC7FA32000DC5EB /* UIViewController+HUD.m in Sources */, + 466333F81FC3C6E6000BE9EE /* CardViewController.m in Sources */, + 11E2B92E1FC2A47F00CE9FF3 /* EventDetailView.m in Sources */, + 466334191FC42AAE000BE9EE /* SettingViewController.m in Sources */, + 114D25D81FC7FA32000DC5EB /* NSDateFormatter+Category.m in Sources */, + 118CDE781FC007BF00E41475 /* CustomNavigationView.m in Sources */, + 118CDE931FC007BF00E41475 /* HomeViewController.m in Sources */, + 11E2B9981FC2B02600CE9FF3 /* ItemImageBtn.m in Sources */, + 116ACEB51FCD327900E12ACA /* LaunchIntroductionView.m in Sources */, + 46FA4D621FFE3B6B00F3DC4E /* HobbyAndMarkItemView.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 11806A011FC5651F00893BE7 /* UMSocialLocalizable.strings */ = { + isa = PBXVariantGroup; + children = ( + 11806A021FC5651F00893BE7 /* en */, + 11806A1A1FC5652000893BE7 /* zh-Hans */, + ); + name = UMSocialLocalizable.strings; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 118CDDF31FC0077C00E41475 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + 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_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + 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_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_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.1; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + }; + name = Debug; + }; + 118CDDF41FC0077C00E41475 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + 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_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + 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_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_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.1; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 118CDDF61FC0077C00E41475 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; + CLANG_WARN_STRICT_PROTOTYPES = NO; + CODE_SIGN_ENTITLEMENTS = JQQY/JQQY.entitlements; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = XRB4HUSGM8; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/JQQY/ThirdParty/BaiduMap_IOSSDK_v3", + "$(PROJECT_DIR)/JQQY/ThirdParty/视频", + "$(PROJECT_DIR)/JQQY/ThirdParty/阿里云", + "$(PROJECT_DIR)/JQQY/ThirdParty/友盟", + "$(PROJECT_DIR)/JQQY/ThirdParty/友盟/UMSocial_Sdk_Extra_Frameworks/TencentOpenAPI", + "$(PROJECT_DIR)/JQQY/ThirdParty/环信/HyphenateSDK", + ); + GCC_PREFIX_HEADER = "$(SRCROOT)/$(PRODUCT_NAME)/PrefixHeader.pch"; + INFOPLIST_FILE = JQQY/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/JQQY/ThirdParty/NewsAgent", + "$(PROJECT_DIR)/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/thirdlibs", + "$(PROJECT_DIR)/JQQY/ThirdParty/友盟/UMSocial_Sdk_5.2.1", + "$(PROJECT_DIR)/JQQY/ThirdParty/友盟/UMSocial_Sdk_Extra_Frameworks/SinaSSO", + "$(PROJECT_DIR)/JQQY/ThirdParty/友盟/UMSocial_Sdk_Extra_Frameworks/TencentOpenAPI", + "$(PROJECT_DIR)/JQQY/ThirdParty/友盟/UMSocial_Sdk_Extra_Frameworks/Wechat", + "$(PROJECT_DIR)/JQQY/ThirdParty/JPush", + "$(PROJECT_DIR)/JQQY/ThirdParty/环信/EaseUI/EMUIKit/3rdparty/DeviceHelper/VoiceConvert/opencore-amrnb", + "$(PROJECT_DIR)/JQQY/ThirdParty/环信/EaseUI/EMUIKit/3rdparty/DeviceHelper/VoiceConvert/opencore-amrwb", + "$(PROJECT_DIR)/JQQY/ThirdParty/NewsAgent/ChangyanSDK", + "$(PROJECT_DIR)/JQQY/ThirdParty/NewsAgentFull/ChangyanSDK", + "$(PROJECT_DIR)/JQQY/ThirdParty/NewsAgentFull", + "$(PROJECT_DIR)/JQQY/ThirdParty/NewsAgentFull/Files", + ); + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_BUNDLE_IDENTIFIER = com.baihunbai.jiuqi; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE = ""; + PROVISIONING_PROFILE_SPECIFIER = ""; + TARGETED_DEVICE_FAMILY = 1; + WARNING_CFLAGS = "-Wno-documentation"; + }; + name = Debug; + }; + 118CDDF71FC0077C00E41475 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; + CLANG_WARN_STRICT_PROTOTYPES = NO; + CODE_SIGN_ENTITLEMENTS = JQQY/JQQY.entitlements; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = XRB4HUSGM8; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/JQQY/ThirdParty/BaiduMap_IOSSDK_v3", + "$(PROJECT_DIR)/JQQY/ThirdParty/视频", + "$(PROJECT_DIR)/JQQY/ThirdParty/阿里云", + "$(PROJECT_DIR)/JQQY/ThirdParty/友盟", + "$(PROJECT_DIR)/JQQY/ThirdParty/友盟/UMSocial_Sdk_Extra_Frameworks/TencentOpenAPI", + "$(PROJECT_DIR)/JQQY/ThirdParty/环信/HyphenateSDK", + ); + GCC_PREFIX_HEADER = "$(SRCROOT)/$(PRODUCT_NAME)/PrefixHeader.pch"; + INFOPLIST_FILE = JQQY/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/JQQY/ThirdParty/NewsAgent", + "$(PROJECT_DIR)/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/thirdlibs", + "$(PROJECT_DIR)/JQQY/ThirdParty/友盟/UMSocial_Sdk_5.2.1", + "$(PROJECT_DIR)/JQQY/ThirdParty/友盟/UMSocial_Sdk_Extra_Frameworks/SinaSSO", + "$(PROJECT_DIR)/JQQY/ThirdParty/友盟/UMSocial_Sdk_Extra_Frameworks/TencentOpenAPI", + "$(PROJECT_DIR)/JQQY/ThirdParty/友盟/UMSocial_Sdk_Extra_Frameworks/Wechat", + "$(PROJECT_DIR)/JQQY/ThirdParty/JPush", + "$(PROJECT_DIR)/JQQY/ThirdParty/环信/EaseUI/EMUIKit/3rdparty/DeviceHelper/VoiceConvert/opencore-amrnb", + "$(PROJECT_DIR)/JQQY/ThirdParty/环信/EaseUI/EMUIKit/3rdparty/DeviceHelper/VoiceConvert/opencore-amrwb", + "$(PROJECT_DIR)/JQQY/ThirdParty/NewsAgent/ChangyanSDK", + "$(PROJECT_DIR)/JQQY/ThirdParty/NewsAgentFull/ChangyanSDK", + "$(PROJECT_DIR)/JQQY/ThirdParty/NewsAgentFull", + "$(PROJECT_DIR)/JQQY/ThirdParty/NewsAgentFull/Files", + ); + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_BUNDLE_IDENTIFIER = com.baihunbai.jiuqi; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + TARGETED_DEVICE_FAMILY = 1; + WARNING_CFLAGS = "-Wno-documentation"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 118CDDDA1FC0077C00E41475 /* Build configuration list for PBXProject "JQQY" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 118CDDF31FC0077C00E41475 /* Debug */, + 118CDDF41FC0077C00E41475 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 118CDDF51FC0077C00E41475 /* Build configuration list for PBXNativeTarget "JQQY" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 118CDDF61FC0077C00E41475 /* Debug */, + 118CDDF71FC0077C00E41475 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 118CDDD71FC0077C00E41475 /* Project object */; +} diff --git a/JQQY.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/JQQY.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000000000000000000000000000000000000..9d48a2f1db181c6902500220458a231ab051d484 --- /dev/null +++ b/JQQY.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/JQQY.xcodeproj/project.xcworkspace/xcuserdata/Shmily.xcuserdatad/UserInterfaceState.xcuserstate b/JQQY.xcodeproj/project.xcworkspace/xcuserdata/Shmily.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..3d644038cdb31e7fad44acda3ae860ef7b848ca3 Binary files /dev/null and b/JQQY.xcodeproj/project.xcworkspace/xcuserdata/Shmily.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/JQQY.xcodeproj/project.xcworkspace/xcuserdata/chason.xcuserdatad/UserInterfaceState.xcuserstate b/JQQY.xcodeproj/project.xcworkspace/xcuserdata/chason.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..0d6e7ba738fdf3628d47bd3a696a0d2f83e3b9a7 Binary files /dev/null and b/JQQY.xcodeproj/project.xcworkspace/xcuserdata/chason.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/JQQY.xcodeproj/xcuserdata/Shmily.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/JQQY.xcodeproj/xcuserdata/Shmily.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist new file mode 100644 index 0000000000000000000000000000000000000000..d9949bbe84a747b1e1fb9ab54072cfef8e41c329 --- /dev/null +++ b/JQQY.xcodeproj/xcuserdata/Shmily.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -0,0 +1,23 @@ + + + + + + + + + diff --git a/JQQY.xcodeproj/xcuserdata/Shmily.xcuserdatad/xcschemes/JQQY.xcscheme b/JQQY.xcodeproj/xcuserdata/Shmily.xcuserdatad/xcschemes/JQQY.xcscheme new file mode 100644 index 0000000000000000000000000000000000000000..bf5b84766ccf5afba5886e1441e16c9f9cc86fea --- /dev/null +++ b/JQQY.xcodeproj/xcuserdata/Shmily.xcuserdatad/xcschemes/JQQY.xcscheme @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/JQQY.xcodeproj/xcuserdata/Shmily.xcuserdatad/xcschemes/xcschememanagement.plist b/JQQY.xcodeproj/xcuserdata/Shmily.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000000000000000000000000000000000000..90d42fa7a6749d962037361d22577614951a2c82 --- /dev/null +++ b/JQQY.xcodeproj/xcuserdata/Shmily.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,22 @@ + + + + + SchemeUserState + + JQQY.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + 118CDDDE1FC0077C00E41475 + + primary + + + + + diff --git a/JQQY.xcodeproj/xcuserdata/chason.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/JQQY.xcodeproj/xcuserdata/chason.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist new file mode 100644 index 0000000000000000000000000000000000000000..fe2b45415124ec4c223006e19defd56850da95d9 --- /dev/null +++ b/JQQY.xcodeproj/xcuserdata/chason.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -0,0 +1,5 @@ + + + diff --git a/JQQY.xcodeproj/xcuserdata/chason.xcuserdatad/xcschemes/xcschememanagement.plist b/JQQY.xcodeproj/xcuserdata/chason.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000000000000000000000000000000000000..5bc0e6fd6d8e21e2a80edd6abac648013d6b8f9b --- /dev/null +++ b/JQQY.xcodeproj/xcuserdata/chason.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,14 @@ + + + + + SchemeUserState + + JQQY.xcscheme + + orderHint + 0 + + + + diff --git a/JQQY/.DS_Store b/JQQY/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..39b141c00eaa95935ead4c4507f455646a5f0bd9 Binary files /dev/null and b/JQQY/.DS_Store differ diff --git a/JQQY/AppDelegate/AppDelegate+AppService.h b/JQQY/AppDelegate/AppDelegate+AppService.h new file mode 100644 index 0000000000000000000000000000000000000000..430518d5790f6230f5c8694e786e73b53e06053e --- /dev/null +++ b/JQQY/AppDelegate/AppDelegate+AppService.h @@ -0,0 +1,19 @@ +// +// AppDelegate+AppService.h +// JQQY +// +// Created by chason on 2017/11/17. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "AppDelegate.h" + +@interface AppDelegate (AppService) + +//初始化window +- (void)initWindow; + +//初始化引导页 +- (void)initLaunchImage; + +@end diff --git a/JQQY/AppDelegate/AppDelegate+AppService.m b/JQQY/AppDelegate/AppDelegate+AppService.m new file mode 100644 index 0000000000000000000000000000000000000000..21a0759a6bac2c81a977d8244030621865bbd6e0 --- /dev/null +++ b/JQQY/AppDelegate/AppDelegate+AppService.m @@ -0,0 +1,45 @@ +// +// AppDelegate+AppService.m +// JQQY +// +// Created by chason on 2017/11/17. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "AppDelegate+AppService.h" +#import "LaunchIntroductionView.h" +#import "MainTabBarController.h" + +@implementation AppDelegate (AppService) + +#pragma mark ————— 初始化window ————— +- (void)initWindow{ + [[UIButton appearance] setExclusiveTouch:YES]; + self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; + self.window.backgroundColor = [UIColor whiteColor]; + self.mainTabBar = [MainTabBarController new]; + self.window.rootViewController = self.mainTabBar; + [self.window makeKeyAndVisible]; + [UIActivityIndicatorView appearanceWhenContainedIn:[MBProgressHUD class], nil].color = [UIColor whiteColor]; + if (@available(iOS 11.0, *)){ + [[UIScrollView appearance] setContentInsetAdjustmentBehavior:UIScrollViewContentInsetAdjustmentNever]; + } +} + +#pragma mark ————— 初始化引导页 ————— +- (void)initLaunchImage +{ + if (iPhone4) { + [LaunchIntroductionView sharedWithImages:@[@"launch_4_1",@"launch_4_2",@"launch_4_3",@"launch_4_4"]]; + }else if (iPhone5) { + [LaunchIntroductionView sharedWithImages:@[@"launch_5_1",@"launch_5_2",@"launch_5_3",@"launch_5_4"]]; + }else if (iPhone6) { + [LaunchIntroductionView sharedWithImages:@[@"launch_6_1",@"launch_6_2",@"launch_6_3",@"launch_6_4"]]; + }else if (iPhone6p) { + [LaunchIntroductionView sharedWithImages:@[@"launch_6p_1",@"launch_6p_2",@"launch_6p_3",@"launch_6p_4"]]; + }else if (iPhoneX) { + [LaunchIntroductionView sharedWithImages:@[@"launch_X_1",@"launch_X_2",@"launch_X_3",@"launch_X_4"]]; + } +} + +@end diff --git a/JQQY/AppDelegate/AppDelegate+AppTripartite.h b/JQQY/AppDelegate/AppDelegate+AppTripartite.h new file mode 100644 index 0000000000000000000000000000000000000000..76426d35ec97a02d2109bab4ba75a7748acce568 --- /dev/null +++ b/JQQY/AppDelegate/AppDelegate+AppTripartite.h @@ -0,0 +1,26 @@ +// +// AppDelegate+AppTripartite.h +// JQQY +// +// Created by Shmily on 2017/11/17. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "AppDelegate.h" + + +@interface AppDelegate (AppTripartite) + +//初始化资讯 +- (void)initNews; + +//初始化百度地图 +- (void)initBaiduMap; + +//初始化友盟 +- (void)initUMeng; + +//初始化环信 +- (void)initHX; + +@end diff --git a/JQQY/AppDelegate/AppDelegate+AppTripartite.mm b/JQQY/AppDelegate/AppDelegate+AppTripartite.mm new file mode 100755 index 0000000000000000000000000000000000000000..387a392ff5ebeb65b5f978cd230d3c0463bc88ce --- /dev/null +++ b/JQQY/AppDelegate/AppDelegate+AppTripartite.mm @@ -0,0 +1,235 @@ +// +// AppDelegate+AppTripartite.m +// JQQY +// +// Created by Shmily on 2017/11/17. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "AppDelegate+AppTripartite.h" + +#import "NARecomViewController.h" +#import "NewsListViewController.h" +#import "LoginViewController.h" +#import "MyContentViewController.h" + +#import "ChatDemoHelper.h" +#import "WXApi.h" + + +/** 百度地图 */ +#define BAIDUAPPKEY @"Tss6q5U7NWoFGqFLWNgkMgF1CvPI0Lyt" +/** 友盟 */ +#define UmengAppkey @"575fc21a67e58e5690001ad8" + +#define WXAPPID @"wxdaaa79a772bcaa5f" +#define WXSECRET @"46cc009b1aea346d9dacef931809a9b1" + +#define QQAPPKEY @"ubri5sB2HU7Rualz" +#define QQAPPID @"1106647805" + +#define WBAPPKEY @"1958884694" +#define WBSECRET @"8de029e79240497e18410e2ae75d0710" +#define WBURL @"https://api.weibo.com/oauth2/default.html" + +#define UMENGSHARE @"http://www.umeng.com/social" + +@interface AppDelegate () + +@end + + +BMKMapManager *_mapManager; + +@implementation AppDelegate (AppTripartite) + +#pragma mark ————— 初始化资讯 ————— +- (void)initNews +{ +// [NewsAgent setDebugMode:YES]; + LoginViewController *login = [[LoginViewController alloc] init]; + [NewsAgent setLoginViewController:login]; + [NewsAgent registerAppkey:@"hnews-android-key" + AppSecret:@"appsecret" + NewsSpotTag:@"hnews-android-tag001" + RecomVCName:NSStringFromClass([NewsListViewController class]) + ContentVCName:NSStringFromClass([MyContentViewController class]) + setTitleStyle:nil]; +} + +#pragma mark ————— 初始化百度地图 ————— +- (void)initBaiduMap +{ + _mapManager = [[BMKMapManager alloc]init]; + BOOL ret = [_mapManager start:BAIDUAPPKEY generalDelegate:nil]; + if (!ret) { + NSLog(@"manager start failed!"); + }else{ + [[MapManager instance] startlocation:YES locationSuccess:^(NSString * longitude, NSString * latitude,NSError *error) { + if (!error) { + [self uploadArea:longitude Lat:latitude]; + } + } addressSuccess:NULL]; + + } +} + + +- (void)onGetNetworkState:(int)iError +{ + if (0 == iError) { + NSLog(@"联网成功"); + } + else{ + NSLog(@"onGetNetworkState %d",iError); + } + +} + +- (void)onGetPermissionState:(int)iError +{ + if (0 == iError) { + NSLog(@"授权成功"); + } + else { + NSLog(@"onGetPermissionState %d",iError); + } +} + +#pragma mark ————— 初始化友盟 ————— +- (void)initUMeng +{ + [UMSocialData setAppKey:UmengAppkey]; + //设置微信AppId、appSecret,分享url + [UMSocialWechatHandler setWXAppId:WXAPPID appSecret:WXSECRET url:UMENGSHARE]; + //设置手机QQ 的AppId,Appkey,和分享URL + [UMSocialQQHandler setQQWithAppId:QQAPPID appKey:QQAPPKEY url:UMENGSHARE]; + [UMSocialQQHandler setSupportWebView:YES]; + //打开新浪微博的SSO开关,设置新浪微博回调地址,这里必须要和你在新浪微博后台设置的回调地址一致 + [UMSocialSinaSSOHandler openNewSinaSSOWithAppKey:WBAPPKEY secret:WBSECRET RedirectURL:WBURL]; + [UMSocialConfig hiddenNotInstallPlatforms:@[UMShareToQQ,UMShareToQzone,UMShareToWechatSession,UMShareToWechatTimeline]]; +} + +/** + 这里处理新浪微博SSO授权之后跳转回来,和微信分享完成之后跳转回来 + */ +- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options +{ + return [UMSocialSnsService handleOpenURL:url wxApiDelegate:nil]; +} + +#pragma mark ————— 初始化环信 ————— +- (void)initHX +{ + UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeBadge|UIUserNotificationTypeAlert|UIUserNotificationTypeSound) categories:nil]; + [[UIApplication sharedApplication] registerUserNotificationSettings:settings]; + + + EMOptions *options = [EMOptions optionsWithAppkey:@"hainanjiuqi#jiuqiqiyehongniang"]; + options.apnsCertName = @"qiyehongniang"; + [[EMClient sharedClient] initializeSDKWithOptions:options]; + [ChatDemoHelper shareHelper]; + [ChatDemoHelper shareHelper].mainVC = self.mainTabBar; + [[ChatDemoHelper shareHelper] asyncConversationFromDB]; + [[ChatDemoHelper shareHelper] asyncPushOptions]; +} + +//当有电话进来或者锁屏,这时你的应用程会挂起 +- (void)applicationWillResignActive:(UIApplication *)application { + NSLog(@"\n ===> 程序暂行 !"); + [UIApplication sharedApplication].applicationIconBadgeNumber = 0; +} + + +- (void)applicationDidEnterBackground:(UIApplication *)application { + NSLog(@"\n ===> 程序进入后台 !"); + [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0]; + [[EMClient sharedClient] applicationDidEnterBackground:application]; +} + + +- (void)applicationWillEnterForeground:(UIApplication *)application { + NSLog(@"\n ===> 程序进入前台 !"); + [application setApplicationIconBadgeNumber:0]; + [[EMClient sharedClient] applicationWillEnterForeground:application]; +} + + +- (void)applicationDidBecomeActive:(UIApplication *)application { + NSLog(@"\n ===> 程序重新激活 !"); + [UMSocialSnsService applicationDidBecomeActive]; + + if (![[EMClient sharedClient] isConnected] && ![[EMClient sharedClient] isLoggedIn]) { + [ZCTools loginHuanxin]; + } +} + + +- (void)applicationWillTerminate:(UIApplication *)application { + NSLog(@"\n ===> 程序意外暂行 !"); +} + +// 将得到的deviceToken传给SDK +- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{ + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + [[EMClient sharedClient] bindDeviceToken:deviceToken]; + }); +} +// 注册deviceToken失败 +- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error{ + NSLog(@"error -- %@",error); +} +- (void)dealloc{ + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + +- (void)application:(UIApplication *)application +didReceiveRemoteNotification:(NSDictionary *)userInfo +fetchCompletionHandler: +(void (^)(UIBackgroundFetchResult))completionHandler { + + //iOS7及以上系统,收到通知 + [[EaseSDKHelper shareHelper] hyphenateApplication:application didReceiveRemoteNotification:userInfo]; + if ([[UIDevice currentDevice].systemVersion floatValue]<10.0) { + completionHandler(UIBackgroundFetchResultNewData); + } +} + +- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings +{ + if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerForRemoteNotifications)]) { + [[UIApplication sharedApplication] registerForRemoteNotifications]; + } +} + +#pragma mark - 内存告急清楚缓存 +- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application +{ + // 赶紧清除所有的内存缓存 + [[SDImageCache sharedImageCache] clearMemory]; + + // 赶紧停止正在进行的图片下载操作 + [[SDWebImageManager sharedManager] cancelAll]; + +} + +- (void)uploadArea:(NSString *)lng Lat:(NSString *)lat{ + + if (!ISLOGIN) { + return; + } + + NSDictionary *params = @{@"userID":USER_USERID, + @"lng":lng, + @"lat":lat, + @"version":APP_VERSION}; + [ZCNetRequestManager postRequestWithParameters:params subUrl:URL_lngandlat block:^(NSDictionary *resultDic, NSError *error) { + if(resultDic){ + NSLog(@"经纬度上传成功"); + } + }]; +} + + + +@end diff --git a/JQQY/AppDelegate/AppDelegate.h b/JQQY/AppDelegate/AppDelegate.h new file mode 100644 index 0000000000000000000000000000000000000000..b152951b9161101f737da9011261a27a484c4177 --- /dev/null +++ b/JQQY/AppDelegate/AppDelegate.h @@ -0,0 +1,24 @@ +// +// AppDelegate.h +// JQQY +// +// Created by chason on 2017/11/16. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import + +@class MainTabBarController; + + +/** + 这里面只做调用,具体实现放到 AppDelegate+AppService 或者Manager里面,防止代码过多不清晰 + */ +@interface AppDelegate : UIResponder + +@property (strong, nonatomic) UIWindow *window; + +@property (strong, nonatomic) MainTabBarController *mainTabBar; + +@end + diff --git a/JQQY/AppDelegate/AppDelegate.m b/JQQY/AppDelegate/AppDelegate.m new file mode 100644 index 0000000000000000000000000000000000000000..76910a87c3938f4555101efc56d84c52901a3730 --- /dev/null +++ b/JQQY/AppDelegate/AppDelegate.m @@ -0,0 +1,67 @@ +// +// AppDelegate.m +// JQQY +// +// Created by chason on 2017/11/16. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "AppDelegate.h" + +@interface AppDelegate () + +@end + +@implementation AppDelegate + + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + NSLog(@"\n ===> 程序开始 !"); + + //初始化window + [self initWindow]; + + //初始化引导页 + [self initLaunchImage]; + + //百度地图 + [self initBaiduMap]; + + //初始化资讯 + [self initNews]; + + //初始化环信 + [self initHX]; + + //取消本地通知注册 + [[UIApplication sharedApplication] cancelAllLocalNotifications]; + + NSUserDefaults *defaults = kUserDefaults; + NSString *banned = [defaults objectForKey:@"banned"]; + if ([banned intValue] ==1) { + + UIAlertView *aletView = [[UIAlertView alloc]initWithTitle:@"启缘提示" message:@"尊敬的用户你的账户已被封禁,无法登陆,请联系启缘客服!" delegate:self cancelButtonTitle:nil otherButtonTitles:@"知道了", nil]; + [aletView show]; + } + + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + + + //初始化友盟 + [self initUMeng]; + }); + return YES; +} + +- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex +{ + [ZCTools cleanUserDefault]; + [ZCTools logoutHuanxin]; + [self initWindow]; +} + + + + + +@end diff --git a/JQQY/Assets.xcassets/.DS_Store b/JQQY/Assets.xcassets/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..2f6f0b9706d75b16479d33768b1c5cf65cae5a28 Binary files /dev/null and b/JQQY/Assets.xcassets/.DS_Store differ diff --git a/JQQY/Assets.xcassets/AppIcon.appiconset/120-1.png b/JQQY/Assets.xcassets/AppIcon.appiconset/120-1.png new file mode 100644 index 0000000000000000000000000000000000000000..25c42f6067c1ade981f42bb354dba965e00e728d Binary files /dev/null and b/JQQY/Assets.xcassets/AppIcon.appiconset/120-1.png differ diff --git a/JQQY/Assets.xcassets/AppIcon.appiconset/120.png b/JQQY/Assets.xcassets/AppIcon.appiconset/120.png new file mode 100644 index 0000000000000000000000000000000000000000..25c42f6067c1ade981f42bb354dba965e00e728d Binary files /dev/null and b/JQQY/Assets.xcassets/AppIcon.appiconset/120.png differ diff --git a/JQQY/Assets.xcassets/AppIcon.appiconset/180.png b/JQQY/Assets.xcassets/AppIcon.appiconset/180.png new file mode 100644 index 0000000000000000000000000000000000000000..6e51d4752f6ac92e4624494898cb30df3943416a Binary files /dev/null and b/JQQY/Assets.xcassets/AppIcon.appiconset/180.png differ diff --git a/JQQY/Assets.xcassets/AppIcon.appiconset/29.png b/JQQY/Assets.xcassets/AppIcon.appiconset/29.png new file mode 100644 index 0000000000000000000000000000000000000000..ae496b8d19c4500bb14f5d1338a892a0185540c1 Binary files /dev/null and b/JQQY/Assets.xcassets/AppIcon.appiconset/29.png differ diff --git a/JQQY/Assets.xcassets/AppIcon.appiconset/58.png b/JQQY/Assets.xcassets/AppIcon.appiconset/58.png new file mode 100644 index 0000000000000000000000000000000000000000..d2720a59e15bb47da365ed7ec67cbcd9ce25108b Binary files /dev/null and b/JQQY/Assets.xcassets/AppIcon.appiconset/58.png differ diff --git a/JQQY/Assets.xcassets/AppIcon.appiconset/80.png b/JQQY/Assets.xcassets/AppIcon.appiconset/80.png new file mode 100644 index 0000000000000000000000000000000000000000..2e40a18438085da108bf6273f4fd9166375ca265 Binary files /dev/null and b/JQQY/Assets.xcassets/AppIcon.appiconset/80.png differ diff --git a/JQQY/Assets.xcassets/AppIcon.appiconset/Contents.json b/JQQY/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000000000000000000000000000000000000..d81a95f1adeb1e71fc9f230b38c68acbea947098 --- /dev/null +++ b/JQQY/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,60 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "29.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "58.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "80.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "120.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "120-1.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "180.png", + "scale" : "3x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "未标题-2副本.png", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/JQQY/Assets.xcassets/AppIcon.appiconset/\346\234\252\346\240\207\351\242\230-2\345\211\257\346\234\254.png" "b/JQQY/Assets.xcassets/AppIcon.appiconset/\346\234\252\346\240\207\351\242\230-2\345\211\257\346\234\254.png" new file mode 100644 index 0000000000000000000000000000000000000000..46650dc9bdc28fabda63eeb562a65c8e9fa63781 Binary files /dev/null and "b/JQQY/Assets.xcassets/AppIcon.appiconset/\346\234\252\346\240\207\351\242\230-2\345\211\257\346\234\254.png" differ diff --git a/JQQY/Assets.xcassets/Contents.json b/JQQY/Assets.xcassets/Contents.json new file mode 100644 index 0000000000000000000000000000000000000000..da4a164c918651cdd1e11dca5cc62c333f097601 --- /dev/null +++ b/JQQY/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/JQQY/Assets.xcassets/LaunchImage.launchimage/Contents.json b/JQQY/Assets.xcassets/LaunchImage.launchimage/Contents.json new file mode 100644 index 0000000000000000000000000000000000000000..e58f0b9cac4e3f39ca34508012048cc08c77242b --- /dev/null +++ b/JQQY/Assets.xcassets/LaunchImage.launchimage/Contents.json @@ -0,0 +1,52 @@ +{ + "images" : [ + { + "extent" : "full-screen", + "idiom" : "iphone", + "subtype" : "2436h", + "filename" : "闪屏3(X).png", + "minimum-system-version" : "11.0", + "orientation" : "portrait", + "scale" : "3x" + }, + { + "extent" : "full-screen", + "idiom" : "iphone", + "subtype" : "736h", + "filename" : "闪屏3(6p).png", + "minimum-system-version" : "8.0", + "orientation" : "portrait", + "scale" : "3x" + }, + { + "extent" : "full-screen", + "idiom" : "iphone", + "subtype" : "667h", + "filename" : "闪屏3(6).png", + "minimum-system-version" : "8.0", + "orientation" : "portrait", + "scale" : "2x" + }, + { + "orientation" : "portrait", + "idiom" : "iphone", + "filename" : "闪屏3(4).png", + "extent" : "full-screen", + "minimum-system-version" : "7.0", + "scale" : "2x" + }, + { + "extent" : "full-screen", + "idiom" : "iphone", + "subtype" : "retina4", + "filename" : "闪屏3(5).png", + "minimum-system-version" : "7.0", + "orientation" : "portrait", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git "a/JQQY/Assets.xcassets/LaunchImage.launchimage/\351\227\252\345\261\2173(5).png" "b/JQQY/Assets.xcassets/LaunchImage.launchimage/\351\227\252\345\261\2173(5).png" new file mode 100644 index 0000000000000000000000000000000000000000..ef41d075db26faa1d46a90c0290899b3bdd440bf Binary files /dev/null and "b/JQQY/Assets.xcassets/LaunchImage.launchimage/\351\227\252\345\261\2173(5).png" differ diff --git "a/JQQY/Assets.xcassets/LaunchImage.launchimage/\351\227\252\345\261\2173(6p).png" "b/JQQY/Assets.xcassets/LaunchImage.launchimage/\351\227\252\345\261\2173(6p).png" new file mode 100644 index 0000000000000000000000000000000000000000..b9eb9bfc7d25d1eefe9d13dc60aedfef5c1a32b0 Binary files /dev/null and "b/JQQY/Assets.xcassets/LaunchImage.launchimage/\351\227\252\345\261\2173(6p).png" differ diff --git "a/JQQY/Assets.xcassets/LaunchImage.launchimage/\351\227\252\345\261\2173(X).png" "b/JQQY/Assets.xcassets/LaunchImage.launchimage/\351\227\252\345\261\2173(X).png" new file mode 100644 index 0000000000000000000000000000000000000000..8422fd27ad4589dd871d1107956ea1580490aa69 Binary files /dev/null and "b/JQQY/Assets.xcassets/LaunchImage.launchimage/\351\227\252\345\261\2173(X).png" differ diff --git "a/JQQY/Assets.xcassets/LaunchImage.launchimage/\351\227\252\345\261\2173\357\274\2104\357\274\211.png" "b/JQQY/Assets.xcassets/LaunchImage.launchimage/\351\227\252\345\261\2173\357\274\2104\357\274\211.png" new file mode 100644 index 0000000000000000000000000000000000000000..79aeea07997f05f88b5545fcfbddd600401c3012 Binary files /dev/null and "b/JQQY/Assets.xcassets/LaunchImage.launchimage/\351\227\252\345\261\2173\357\274\2104\357\274\211.png" differ diff --git "a/JQQY/Assets.xcassets/LaunchImage.launchimage/\351\227\252\345\261\2173\357\274\2106\357\274\211.png" "b/JQQY/Assets.xcassets/LaunchImage.launchimage/\351\227\252\345\261\2173\357\274\2106\357\274\211.png" new file mode 100644 index 0000000000000000000000000000000000000000..8d4afc2898e6d9033269f8fa643cb5c3c79721e1 Binary files /dev/null and "b/JQQY/Assets.xcassets/LaunchImage.launchimage/\351\227\252\345\261\2173\357\274\2106\357\274\211.png" differ diff --git a/JQQY/Base/.DS_Store b/JQQY/Base/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..7236166458a8a320ffd8f096694ca4e78de36442 Binary files /dev/null and b/JQQY/Base/.DS_Store differ diff --git a/JQQY/Base/NavigationController/RootNavigationController.h b/JQQY/Base/NavigationController/RootNavigationController.h new file mode 100644 index 0000000000000000000000000000000000000000..c814ccc210c49faddef162a903d603277510cdd6 --- /dev/null +++ b/JQQY/Base/NavigationController/RootNavigationController.h @@ -0,0 +1,25 @@ +// +// RootNavigationController.h +// JQQY +// +// Created by chason on 2017/11/17. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import + + +/** + 导航控制器基类 + */ +@interface RootNavigationController : UINavigationController + +/*! + * 返回到指定的类视图 + * + * @param ClassName 类名 + * @param animated 是否动画 + */ +-(BOOL)popToAppointViewController:(NSString *)ClassName animated:(BOOL)animated; + +@end diff --git a/JQQY/Base/NavigationController/RootNavigationController.m b/JQQY/Base/NavigationController/RootNavigationController.m new file mode 100644 index 0000000000000000000000000000000000000000..1d42d5d2f5a2bd6573bc378f03067f81af495706 --- /dev/null +++ b/JQQY/Base/NavigationController/RootNavigationController.m @@ -0,0 +1,101 @@ +// +// RootNavigationController.m +// JQQY +// +// Created by chason on 2017/11/17. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "RootNavigationController.h" + +@interface RootNavigationController () +@end + +@implementation RootNavigationController + +//APP生命周期中 只会执行一次 ++ (void)initialize +{ + UINavigationBar *navBar = [UINavigationBar appearance]; + //导航栏背景颜色 + [navBar setBarTintColor:PURPLECOLOUR]; + // + [navBar setTintColor:[UIColor whiteColor]]; + //导航栏标题颜色和字体大小 + [navBar setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor whiteColor], NSFontAttributeName: [UIFont systemFontOfSize:18]}]; + //去掉阴影线 + [navBar setShadowImage:[UIImage new]]; + //设置导航栏半透明为NO + [navBar setTranslucent:NO]; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + self.delegate = self; + + //默认开启系统右划返回 + self.interactivePopGestureRecognizer.enabled = YES; + self.interactivePopGestureRecognizer.delegate = self; +} + +/** + * 返回到指定的类视图 + * + * @param ClassName 类名 + * @param animated 是否动画 + */ +-(BOOL)popToAppointViewController:(NSString *)ClassName animated:(BOOL)animated +{ + id vc = [self getCurrentViewControllerClass:ClassName]; + if(vc != nil && [vc isKindOfClass:[UIViewController class]]) + { + [self popToViewController:vc animated:animated]; + return YES; + } + + return NO; +} + +/*! + * 获得当前导航器显示的视图 + * + * @param ClassName 要获取的视图的名称 + * + * @return 成功返回对应的对象,失败返回nil; + */ +-(instancetype)getCurrentViewControllerClass:(NSString *)ClassName +{ + Class classObj = NSClassFromString(ClassName); + + NSArray * szArray = self.viewControllers; + for (id vc in szArray) { + if([vc isMemberOfClass:classObj]) + { + return vc; + } + } + + return nil; +} + + +-(UIViewController *)childViewControllerForStatusBarStyle{ + return self.topViewController; +} + +- (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/JQQY/Base/QYweb/.DS_Store b/JQQY/Base/QYweb/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..3f9d164ca4d552f63a46177becb3789399a23152 Binary files /dev/null and b/JQQY/Base/QYweb/.DS_Store differ diff --git a/JQQY/Base/QYweb/ALLWebViewController.h b/JQQY/Base/QYweb/ALLWebViewController.h new file mode 100644 index 0000000000000000000000000000000000000000..9259cccca6a051da611fbd3fb1dceaaaa7b378ea --- /dev/null +++ b/JQQY/Base/QYweb/ALLWebViewController.h @@ -0,0 +1,21 @@ +// +// ALLWebViewController.h +// JQQY +// +// Created by Shmily on 2017/11/21. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "RootViewController.h" + +@interface ALLWebViewController : RootViewController + +@property (nonatomic,retain)NSString *titleName; +@property (nonatomic,retain)NSString *urlStr; + + +@property(nonatomic,copy) void(^ActitySuccessBlock)(); + + + +@end diff --git a/JQQY/Base/QYweb/ALLWebViewController.m b/JQQY/Base/QYweb/ALLWebViewController.m new file mode 100644 index 0000000000000000000000000000000000000000..cd20dc8488229129a910cc31737cc61aeb12b6fa --- /dev/null +++ b/JQQY/Base/QYweb/ALLWebViewController.m @@ -0,0 +1,222 @@ +// +// ALLWebViewController.m +// JQQY +// +// Created by Shmily on 2017/11/21. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "ALLWebViewController.h" +#import +#import "CordialViewController.h" +#import "QYShareView.h" + + +@interface ALLWebViewController () + + +@property (nonatomic,retain)WKWebView *webView; +@property (nonatomic,retain)UIButton *backBtn; +@property (nonatomic,retain)UIButton *shareBtn; + + +@end + +@implementation ALLWebViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + + if ([[UIDevice currentDevice].systemName intValue]>=9.0) { + if (@available(iOS 9.0, *)) { + NSSet *types = [NSSet setWithArray:@[WKWebsiteDataTypeCookies, + WKWebsiteDataTypeMemoryCache]]; + NSDate *dateFrom = [NSDate date]; + [[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:types modifiedSince:dateFrom completionHandler:^{ + NSLog(@"clear"); + }]; + } else { + NSString *libraryPath = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES).firstObject; + NSString *cook = [libraryPath stringByAppendingString:@"/Cookies"]; + [[NSFileManager defaultManager] removeItemAtPath:cook error:nil]; + + } + } + NSURL *url = [NSURL URLWithString:_urlStr]; + [self.webView loadRequest:[NSURLRequest requestWithURL:url]]; + [MBProgressHUD showMessag:nil toView:self.view]; + + NSLog(@"url-------------------%@",url); + + // Do any additional setup after loading the view. +} + +- (void)viewWillAppear:(BOOL)animated +{ + [super viewWillAppear:animated]; + [self.navigationController.view addSubview:self.backBtn]; + [self.navigationController.view addSubview:self.shareBtn]; + +} + +- (void)viewWillDisappear:(BOOL)animated +{ + [super viewWillDisappear:animated]; + [self.backBtn removeFromSuperview]; + [self.shareBtn removeFromSuperview]; + +} + +- (void)setTitleName:(NSString *)titleName +{ + self.title = titleName; +} +- (WKWebView *)webView +{ + if (!_webView) { + _webView = [[WKWebView alloc]initWithFrame:CGRectMake(0, 0,KSCREEN_WIDTH, KSCREEN_HEIGHT-kTopHeight)]; + _webView.UIDelegate = self; + _webView.navigationDelegate = self; + _webView.backgroundColor = [UIColor clearColor]; + [_webView setAllowsBackForwardNavigationGestures:true]; + [self.view addSubview:_webView]; + + } + return _webView; +} + +- (UIButton *)backBtn +{ + if (!_backBtn) { + _backBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _backBtn.frame = CGRectMake(40,kStatusBarHeight,44,44); + [_backBtn setImage:[UIImage imageNamed:@"xx"] forState:0]; + [_backBtn addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside]; + } + return _backBtn; +} + +- (UIButton *)shareBtn +{ + if (!_shareBtn) { + _shareBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _shareBtn.frame = CGRectMake(KSCREEN_WIDTH-50,kStatusBarHeight,44,44); + [_shareBtn setImage:[UIImage imageNamed:@"share_white_icon"] forState:0]; + [_shareBtn addTarget:self action:@selector(shareAction) forControlEvents:UIControlEventTouchUpInside]; + _shareBtn.hidden = YES; + + } + return _shareBtn; +} + +- (void)shareAction +{ + QYShareView *share = [[QYShareView alloc]init]; + share.type = @"2"; + share.toUid = USER_USERID; + [share show]; +} + + + +- (void)btnClicked:(UIButton *)b +{ + if (_webView.canGoBack) { + if (_webView.backForwardList.backList.count==2) {//情感测试接受返回首页 + [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:_urlStr]]]; + }else if (_webView.backForwardList.backList.count ==3){ + [self backBtnClicked]; + }else{ + [_webView goBack]; + } + }else{ + [self backBtnClicked]; + } +} + +- (void)backBtnClicked +{ + + [self.navigationController popViewControllerAnimated:YES]; + [self dismissViewControllerAnimated:YES completion:NULL]; +} + +#pragma mark - WKNavigationDelegate +// 页面开始加载时调用 +- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation{ + +} +// 当内容开始返回时调用 +- (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation{ + +} +// 页面加载完成之后调用 +- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation{ + [MBProgressHUD hideHUDForView:self.view animated:YES]; +} +// 页面加载失败时调用 +- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation{ + [MBProgressHUD hideHUDForView:self.view animated:YES]; + +} + + +-(void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler +{ + //如果是跳转一个新页面 + NSString *html = navigationAction.request.URL.absoluteString; + if (navigationAction.targetFrame == nil) { + [webView loadRequest:navigationAction.request]; + } + //情感测评 有分享按钮 + if ([html rangeOfString:@"resultpage"].location ==NSNotFound) { + self.shareBtn.hidden = YES; + }else{ + self.shareBtn.hidden = NO; + } + + //情感测评结束跳转 + if ([html rangeOfString:@"findLove.html"].location != NSNotFound) { + decisionHandler(WKNavigationActionPolicyCancel); + CordialViewController *cordialVC = [[CordialViewController alloc]init]; + cordialVC.name = @"有缘人"; + [self.navigationController pushViewController:cordialVC animated:YES]; + return; + } + + //活动报名成功 + if ([html rangeOfString:@"sign_up_success.html"].location != NSNotFound){ + decisionHandler(WKNavigationActionPolicyCancel); + [self dismissViewControllerAnimated:YES completion:^{ + if (self.ActitySuccessBlock) { + self.ActitySuccessBlock(); + } + }]; + return; + } + + if ([html rangeOfString:@"tel:"].location != NSNotFound) { + dispatch_async(dispatch_get_global_queue(0, 0), ^{ + [[UIApplication sharedApplication] openURL:[NSURL URLWithString:html]]; + }); + } + + decisionHandler(WKNavigationActionPolicyAllow); +} + +- (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/JQQY/Base/QYweb/xx@3x.png b/JQQY/Base/QYweb/xx@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..f0c0dbf2228cc2639204b509a6c0ba12ff635416 Binary files /dev/null and b/JQQY/Base/QYweb/xx@3x.png differ diff --git a/JQQY/Base/RootViewController/.DS_Store b/JQQY/Base/RootViewController/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..1d48cb5e7bd9554311304f61fd0efdc08d4d53c3 Binary files /dev/null and b/JQQY/Base/RootViewController/.DS_Store differ diff --git a/JQQY/Base/RootViewController/RootViewController.h b/JQQY/Base/RootViewController/RootViewController.h new file mode 100644 index 0000000000000000000000000000000000000000..b392079a49a876c50df123f6734133c37d8ba6a5 --- /dev/null +++ b/JQQY/Base/RootViewController/RootViewController.h @@ -0,0 +1,59 @@ +// +// RootViewController.h +// JQQY +// +// Created by chason on 2017/11/16. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import + +/** + 基类 + */ +@interface RootViewController : UIViewController + +/** + 修改状态栏颜色 + */ +@property (nonatomic, assign) UIStatusBarStyle statusBarStyle; + +/** + 是否显示返回按钮,默认是YES + */ +@property (nonatomic, assign) BOOL isShowLeftBack; + +/** + 是否隐藏导航栏 + */ +@property (nonatomic, assign) BOOL isHidenNaviBar; + +/** + 导航栏添加文本按钮 + + @param titles 文本数组 + @param isLeft 是否是左边 非左即右 + @param target 目标 + @param action 点击方法 + @param tags tags数组 回调区分用 + */ +- (void)addNavigationItemWithTitles:(NSArray *)titles isLeft:(BOOL)isLeft target:(id)target action:(SEL)action tags:(NSArray *)tags; + +/** + 导航栏添加图标按钮 + + @param imageNames 图标数组 + @param isLeft 是否是左边 非左即右 + @param target 目标 + @param action 点击方法 + @param tags tags数组 回调区分用 + */ +- (void)addNavigationItemWithImageNames:(NSArray *)imageNames isLeft:(BOOL)isLeft target:(id)target action:(SEL)action tags:(NSArray *)tags; + +/** + 默认返回按钮的点击事件,默认是返回,子类可重写 + */ +- (void)backBtnClicked; + + +@end diff --git a/JQQY/Base/RootViewController/RootViewController.m b/JQQY/Base/RootViewController/RootViewController.m new file mode 100644 index 0000000000000000000000000000000000000000..02685c057c3783ed51ad1b8f4f5a31f0ef14ef0e --- /dev/null +++ b/JQQY/Base/RootViewController/RootViewController.m @@ -0,0 +1,183 @@ +// +// RootViewController.m +// JQQY +// +// Created by chason on 2017/11/16. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "RootViewController.h" + +@interface RootViewController () + +@property (nonatomic,strong) UIImageView* noDataView; + +@end + +@implementation RootViewController + +- (UIStatusBarStyle)preferredStatusBarStyle +{ + return _statusBarStyle; +} + +//动态更新状态栏颜色 +- (void)setStatusBarStyle:(UIStatusBarStyle)statusBarStyle +{ + _statusBarStyle = statusBarStyle; + [self setNeedsStatusBarAppearanceUpdate]; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + self.view.backgroundColor = [UIColor whiteColor]; + //是否显示返回按钮 + self.isShowLeftBack = YES; + //设置默认状态栏颜色为白色 + self.statusBarStyle = UIStatusBarStyleLightContent; + self.automaticallyAdjustsScrollViewInsets = NO; +} + +-(void)viewWillAppear:(BOOL)animated{ + [super viewWillAppear:animated]; + if (self.isHidenNaviBar == YES) { + [self.navigationController setNavigationBarHidden:YES animated:YES]; + }else{ + [self.navigationController setNavigationBarHidden:NO animated:YES]; + if (self.navigationController) { + CGRect frame = self.view.frame; + frame.origin.y = kTopHeight; + self.view.frame = frame; + } + } +} + +-(void)viewWillDisappear:(BOOL)animated{ + [super viewWillDisappear:animated]; + [[UIApplication sharedApplication].keyWindow endEditing:YES]; +} + +/** + * 是否显示返回按钮 + */ +- (void)setIsShowLeftBack:(BOOL)isShowLeftBack +{ + _isShowLeftBack = isShowLeftBack; + NSInteger VCCount = self.navigationController.viewControllers.count; + //下面判断的意义是 当VC所在的导航控制器中的VC个数大于1 或者 是present出来的VC时,才展示返回按钮,其他情况不展示 + if (isShowLeftBack && ( VCCount > 1 || self.navigationController.presentingViewController != nil)) { + [self addNavigationItemWithImageNames:@[@"back_icon"] isLeft:YES target:self action:@selector(backBtnClicked) tags:nil]; + } else { + self.navigationItem.hidesBackButton = YES; + UIBarButtonItem * NULLBar=[[UIBarButtonItem alloc]initWithCustomView:[UIView new]]; + self.navigationItem.leftBarButtonItem = NULLBar; + } +} + +- (void)backBtnClicked +{ +// if (self.presentingViewController) { +// [self dismissViewControllerAnimated:YES completion:nil]; +// }else{ + [self.navigationController popViewControllerAnimated:YES]; +// } +} + +#pragma mark ————— 导航栏 添加图片按钮 ————— +/** + 导航栏添加图标按钮 + + @param imageNames 图标数组 + @param isLeft 是否是左边 非左即右 + @param target 目标 + @param action 点击方法 + @param tags tags数组 回调区分用 + */ +- (void)addNavigationItemWithImageNames:(NSArray *)imageNames isLeft:(BOOL)isLeft target:(id)target action:(SEL)action tags:(NSArray *)tags +{ + NSMutableArray * items = [[NSMutableArray alloc] init]; + + NSInteger i = 0; + for (NSString * imageName in imageNames) { + [[UIButton appearance] setExclusiveTouch:YES]; + UIButton * btn = [UIButton buttonWithType:UIButtonTypeCustom]; + [btn setImage:[UIImage imageNamed:imageName] forState:UIControlStateNormal]; + btn.frame = CGRectMake(0, 0, 44, 44); + [btn addTarget:target action:action forControlEvents:UIControlEventTouchUpInside]; + + if (isLeft) { + [btn setContentEdgeInsets:UIEdgeInsetsMake(0, -15, 0, 15)]; + }else{ + [btn setContentEdgeInsets:UIEdgeInsetsMake(0, 15, 0, -15)]; + } + + btn.tag = [tags[i++] integerValue]; + UIBarButtonItem * item = [[UIBarButtonItem alloc] initWithCustomView:btn]; + [items addObject:item]; + + } + if (isLeft) { + self.navigationItem.leftBarButtonItems = items; + } else { + self.navigationItem.rightBarButtonItems = items; + } +} + +#pragma mark ————— 导航栏 添加文字按钮 ————— +- (void)addNavigationItemWithTitles:(NSArray *)titles isLeft:(BOOL)isLeft target:(id)target action:(SEL)action tags:(NSArray *)tags +{ + NSMutableArray * items = [[NSMutableArray alloc] init]; + + NSInteger i = 0; + for (NSString * title in titles) { + [[UIButton appearance] setExclusiveTouch:YES]; + UIButton * btn = [UIButton buttonWithType:UIButtonTypeCustom]; + btn.frame = CGRectMake(0, 0, 44, 44); + [btn setTitle:title forState:UIControlStateNormal]; + [btn addTarget:target action:action forControlEvents:UIControlEventTouchUpInside]; + + btn.titleLabel.adjustsFontSizeToFitWidth = YES; + btn.titleLabel.font = [UIFont systemFontOfSize:13]; + [btn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; + btn.tag = [tags[i++] integerValue]; + + [btn.titleLabel sizeToFit]; + + //设置偏移 + if (isLeft) { + [btn setContentEdgeInsets:UIEdgeInsetsMake(0, -10, 0, 10)]; + }else{ + [btn setContentEdgeInsets:UIEdgeInsetsMake(0, 10, 0, -10)]; + } + + UIBarButtonItem * item = [[UIBarButtonItem alloc] initWithCustomView:btn]; + [items addObject:item]; + } + if (isLeft) { + self.navigationItem.leftBarButtonItems = items; + } else { + self.navigationItem.rightBarButtonItems = items; + } +} + +- (void)dealloc +{ + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + +- (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/JQQY/Base/RootViewController/ZCRefreshTableViewController.h b/JQQY/Base/RootViewController/ZCRefreshTableViewController.h new file mode 100644 index 0000000000000000000000000000000000000000..6059a6bee5e5213db6fa277c486bae562e9df813 --- /dev/null +++ b/JQQY/Base/RootViewController/ZCRefreshTableViewController.h @@ -0,0 +1,106 @@ +// +// ZCRefreshTableViewController.h +// qiyuan +// +// Created by chason on 2017/8/4. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import + +/** + * tabeleView的cell默认高度 + */ +#define CELL_DEFAULT_HEIGHT 50 + +@interface ZCRefreshTableViewController : RootViewController + + +/** + * 第一次 + */ +@property (nonatomic) BOOL isFirst; + +/** + * tableView + */ +@property (nonatomic, strong) UITableView *tableView; + +/** + * tableView的数据源,用户UI显示 + */ +@property (nonatomic, strong) NSMutableArray *dataArray; + +/** + * 当数据源为空的时候显示 + */ +@property (nonatomic, strong) UIImageView *tableBlankView; +@property (nonatomic, strong) UILabel *tableBlankLB; +@property (nonatomic, copy) NSString *returnmsg; +/** + * 当前加载的页数 + */ +@property (nonatomic) int curepage; + +/** + * 偏移量 每页展示 + */ +@property (nonatomic) int pageSize; + + +/** + * 是否启用下拉加载更多,默认为NO + */ +@property (nonatomic) BOOL showRefreshHeader; + +/** + * 是否启用上拉加载更多,默认为NO + */ +@property (nonatomic) BOOL showRefreshFooter; + +/** + * 初始化ViewController + * style tableView样式 + */ +- (instancetype)initWithStyle:(UITableViewStyle)style; + +/** + * 下拉刷新后执行的方法 + */ +- (void)tableViewDidTriggerHeaderRefresh; + +/** + * 上拉加载后执行的方法 + */ +- (void)tableViewDidTriggerFooterRefresh; + +/** + * 加载结束 + * 加载结束后,通过参数reload来判断是否需要调用tableView的reloadData,判断isHeader来停止加载 + * isHeader 是否结束下拉刷新(或者上拉加载)[传YES结束下拉刷新,传NO结束上拉加载] + * reload 是否需要重载TabeleView + */ +- (void)tableViewDidFinishTriggerHeader:(BOOL)isHeader reload:(BOOL)reload; + +/** + * 上拉加载结束,没有更多数据 + */ +- (void)endRefreshingWithNoMoreData; + +/** + 重置tableView的frame + + @param rect 位置 + */ +- (void)setTableViewFrame:(CGRect)rect; + +/** + * 预加载 + */ +- (void)preloadDataWithCurrentIndex:(NSInteger)currentIndex; + + +- (void)showBlankView:(BOOL)show; + + +@end diff --git a/JQQY/Base/RootViewController/ZCRefreshTableViewController.m b/JQQY/Base/RootViewController/ZCRefreshTableViewController.m new file mode 100644 index 0000000000000000000000000000000000000000..863e5f880a80e8cd6582efc72aaae282fdd572ef --- /dev/null +++ b/JQQY/Base/RootViewController/ZCRefreshTableViewController.m @@ -0,0 +1,238 @@ +// +// ZCRefreshTableViewController.m +// qiyuan +// +// Created by chason on 2017/8/4. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "ZCRefreshTableViewController.h" +#import "MJRefresh.h" +@interface ZCRefreshTableViewController () + +@property (nonatomic, readonly) UITableViewStyle style; + +@end + +@implementation ZCRefreshTableViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + _curepage = 1; + _pageSize = 10; + _showRefreshHeader = NO; + _showRefreshFooter = NO; + [self.view addSubview:self.tableView]; + [self.tableView addSubview:self.tableBlankView]; + [self.tableView addSubview:self.tableBlankLB]; + +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +- (void)viewWillAppear:(BOOL)animated{ + [super viewWillAppear:animated]; + if (@available(iOS 11.0, *)) { + self.tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; + } else { + self.automaticallyAdjustsScrollViewInsets = NO; + } +} + +- (void)viewWillDisappear:(BOOL)animated{ + [super viewWillDisappear:animated]; +} + +- (instancetype)initWithStyle:(UITableViewStyle)style +{ + self = [super init]; + if (self) { + _style = style; + } + return self; +} + +- (UIImageView *)tableBlankView +{ + if (!_tableBlankView) { + _tableBlankView = [[UIImageView alloc] initWithFrame:CGRectMake((self.tableView.width-110)/2, (self.tableView.height-110)/2-40, 110, 110)]; + _tableBlankView.image = [UIImage imageNamed:@"noData"]; + _tableBlankView.hidden = YES; + } + return _tableBlankView; +} + +- (UILabel *)tableBlankLB +{ + if (!_tableBlankLB) { + _tableBlankLB = [[UILabel alloc]initWithFrame:CGRectMake(10, _tableBlankView.bottom, KSCREEN_WIDTH-20,40)]; + _tableBlankLB.text = @"亲!没数据啦"; + _tableBlankLB.font = [UIFont systemFontOfSize:14]; + _tableBlankLB.textAlignment = NSTextAlignmentCenter; + _tableBlankLB.hidden = YES; + _tableBlankLB.textColor = UIColorFromRGB(0x9f9f9f); + } + return _tableBlankLB; +} + +- (void)setReturnmsg:(NSString *)returnmsg +{ + _tableBlankLB.text = returnmsg; +} + +- (UITableView *)tableView +{ + if (!_tableView) { + _tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:self.style]; + _tableView.delegate = self; + _tableView.dataSource = self; + _tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero]; + _tableView.backgroundColor = UIColorFromRGB(0xf3f3f3); + _tableView.showsVerticalScrollIndicator = NO; + } + return _tableView; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + return 0; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + return CELL_DEFAULT_HEIGHT; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + static NSString *CellIdentifier = @"UITableViewCell"; + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; + // Configure the cell... + + return cell; +} + + + +- (NSMutableArray *)dataArray +{ + if (_dataArray == nil) { + _dataArray = [NSMutableArray array]; + } + + return _dataArray; +} + +- (void)setShowRefreshHeader:(BOOL)showRefreshHeader +{ + if (_showRefreshHeader != showRefreshHeader) { + _showRefreshHeader = showRefreshHeader; + if (_showRefreshHeader) { + __weak ZCRefreshTableViewController *weakSelf = self; + MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{ + [weakSelf tableViewDidTriggerHeaderRefresh]; + }]; + header.lastUpdatedTimeLabel.hidden = YES; + self.tableView.mj_header = header; + self.tableView.mj_header.accessibilityIdentifier = @"refresh_header"; + }else{ + [self.tableView setMj_header:nil]; + } + } +} + +- (void)setShowRefreshFooter:(BOOL)showRefreshFooter +{ + if (_showRefreshFooter != showRefreshFooter) { + _showRefreshFooter = showRefreshFooter; + if (_showRefreshFooter) { + __weak ZCRefreshTableViewController *weakSelf = self; + MJRefreshBackNormalFooter *footer = [MJRefreshBackNormalFooter footerWithRefreshingBlock:^{ + [weakSelf tableViewDidTriggerFooterRefresh]; + }]; + self.tableView.mj_footer = footer; + self.tableView.mj_footer.accessibilityIdentifier = @"refresh_footer"; + }else{ + [self.tableView setMj_footer:nil]; + } + } +} + +- (void)tableViewDidTriggerHeaderRefresh +{ + +} + +- (void)tableViewDidTriggerFooterRefresh +{ + +} + +- (void)tableViewDidFinishTriggerHeader:(BOOL)isHeader reload:(BOOL)reload +{ + __weak ZCRefreshTableViewController *weakSelf = self; + dispatch_async(dispatch_get_main_queue(), ^{ + if (reload) { + [weakSelf.tableView reloadData]; + if (weakSelf.dataArray.count > 0) { + weakSelf.tableBlankView.hidden = YES; + weakSelf.tableBlankLB.hidden = YES; + }else{ + weakSelf.tableBlankView.hidden = NO; + weakSelf.tableBlankLB.hidden = NO; + } + } + if (isHeader) { + [weakSelf.tableView.mj_header endRefreshing]; + }else{ + [weakSelf.tableView.mj_footer endRefreshing]; + } + }); +} + +- (void)endRefreshingWithNoMoreData +{ + [self.tableView reloadData]; + [self.tableView.mj_footer endRefreshingWithNoMoreData]; +} + + +- (void)setTableViewFrame:(CGRect)rect +{ + self.tableView.frame = rect; + self.tableBlankView.frame = CGRectMake((self.tableView.width-110)/2, (self.tableView.height-110)/2-40, 110, 110); + self.tableBlankLB.frame = CGRectMake(10, _tableBlankView.bottom, KSCREEN_WIDTH-20,40); +} +//预加载 +- (void)preloadDataWithCurrentIndex:(NSInteger)currentIndex{ + NSInteger totalCount = self.dataArray.count; + if ([self isSatisfyPreloadDataWithTotalCount:totalCount currentIndex:currentIndex]) { + [self tableViewDidTriggerFooterRefresh]; + } +} + +- (BOOL)isSatisfyPreloadDataWithTotalCount:(NSInteger)totalCount currentIndex:(NSInteger)currentIndex{ + return ((currentIndex == totalCount - _pageSize) && (currentIndex >= _pageSize)); +} + + +- (void)showBlankView:(BOOL)show +{ + if (show) { + [self.tableView addSubview:self.tableBlankView]; + [self.tableView addSubview:self.tableBlankLB]; + }else{ + [self.tableBlankView removeFromSuperview]; + [self.tableBlankLB removeFromSuperview]; + } + self.tableBlankView.hidden = !show; + self.tableBlankLB.hidden = !show; + +} + + + +@end diff --git a/JQQY/Base/TabbarController/.DS_Store b/JQQY/Base/TabbarController/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..7f3a3773eb38c612b5db7ecbca1a7a89fcc12325 Binary files /dev/null and b/JQQY/Base/TabbarController/.DS_Store differ diff --git a/JQQY/Base/TabbarController/MainTabBarController.h b/JQQY/Base/TabbarController/MainTabBarController.h new file mode 100644 index 0000000000000000000000000000000000000000..7b073be02b125321761a2e133e91f95626eca843 --- /dev/null +++ b/JQQY/Base/TabbarController/MainTabBarController.h @@ -0,0 +1,33 @@ +// +// MainTabBarController.h +// JQQY +// +// Created by chason on 2017/11/16. +// Copyright © 2017年 jiuqi. All rights reserved. +// +#import +#import "EaseUI.h" + +static NSString *kMessageType = @"MessageType"; +static NSString *kConversationChatter = @"ConversationChatter"; +static const CGFloat kDefaultPlaySoundInterval = 3.0; + + + +/** + 底部 TabBar 控制器 + */ +@interface MainTabBarController : UITabBarController +{ + +} + +@property (strong, nonatomic) NSDate *lastPlaySoundDate; + +-(void)setupUnreadMessageCount; +- (void)playSoundAndVibration:(EMMessage *)message; +- (void)showNotificationWithMessage:(EMMessage *)message; + + + +@end diff --git a/JQQY/Base/TabbarController/MainTabBarController.m b/JQQY/Base/TabbarController/MainTabBarController.m new file mode 100644 index 0000000000000000000000000000000000000000..4925045e1a325127ffca3799de4db0dbc6c0a2fa --- /dev/null +++ b/JQQY/Base/TabbarController/MainTabBarController.m @@ -0,0 +1,252 @@ +// +// MainTabBarController.m +// JQQY +// +// Created by chason on 2017/11/16. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "MainTabBarController.h" + +#import "RootNavigationController.h" +#import "HomeViewController.h" +#import "ActivityViewController.h" +#import "DiscoverViewController.h" +#import "MineViewController.h" +#import "UITabBar+badge.h" + + +@interface MainTabBarController () +{ + HomeViewController *homeVC; +} +@property (nonatomic,strong) NSMutableArray * VCS;//tabbar root VC + +@end + +@implementation MainTabBarController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.delegate = self; + //添加子控制器 + [self setUpAllChildViewController]; + + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(setupUnreadMessageCount) name:logOut object:nil]; + + +} + +#pragma mark - ——————— 添加子控制器 ———————— +-(void)setUpAllChildViewController{ + _VCS = @[].mutableCopy; + + homeVC = [[HomeViewController alloc] init]; + [self setupChildViewController:homeVC title:@"首页" imageName:@"home_hui" seleceImageName:@"home"]; + + ActivityViewController *activityVC = [[ActivityViewController alloc] init]; + [self setupChildViewController:activityVC title:@"活动" imageName:@"activity_hui" seleceImageName:@"activity"]; + + DiscoverViewController *discoverVC = [[DiscoverViewController alloc] init]; + [self setupChildViewController:discoverVC title:@"发现" imageName:@"discover_hui" seleceImageName:@"discover"]; + + MineViewController *mineVC = [[MineViewController alloc] init]; + [self setupChildViewController:mineVC title:@"我的" imageName:@"mine_hui" seleceImageName:@"mine"]; + + self.viewControllers = _VCS; +} + +-(void)setupChildViewController:(UIViewController*)controller title:(NSString *)title imageName:(NSString *)imageName seleceImageName:(NSString *)selectImageName{ + controller.title = title; + controller.tabBarItem.title = title;//跟上面一样效果 + controller.tabBarItem.image = [[UIImage imageNamed:imageName] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; + controller.tabBarItem.selectedImage = [[UIImage imageNamed:selectImageName] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; + //字体颜色 + self.tabBar.tintColor = PURPLECOLOUR; + //包装导航控制器 + RootNavigationController *nav = [[RootNavigationController alloc]initWithRootViewController:controller]; + + [_VCS addObject:nav]; +} + +-(void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController{ + NSLog(@"选中 %ld",(unsigned long)tabBarController.selectedIndex); + [self animationWithIndex:tabBarController.selectedIndex]; +} + +// 动画 +- (void)animationWithIndex:(NSInteger) index { + NSMutableArray * tabbarbuttonArray = [NSMutableArray array]; + for (UIView *tabBarButton in self.tabBar.subviews) { + if ([tabBarButton isKindOfClass:NSClassFromString(@"UITabBarButton")]) { + [tabbarbuttonArray addObject:tabBarButton]; + } + } + CABasicAnimation*pulse = [CABasicAnimation animationWithKeyPath:@"transform.scale"]; + pulse.timingFunction= [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; + //动画持续时间 + pulse.duration = 0.15; + //重复次数 + pulse.repeatCount= 2; + //设定这个属性为 YES 时,在它到达目的地之后,动画的返回到开始的值,代替了直接跳转到开始的值,过渡平滑 + pulse.autoreverses= YES; + //动画初始值 + pulse.fromValue= [NSNumber numberWithFloat:1.0]; + //动画到达值 + pulse.toValue= [NSNumber numberWithFloat:0.7]; + [[tabbarbuttonArray[index] layer] addAnimation:pulse forKey:nil]; +} + +// 统计未读消息数 +-(void)setupUnreadMessageCount +{ + NSArray *conversations = [[EMClient sharedClient].chatManager getAllConversations]; + NSInteger unreadCount = 0; + for (EMConversation *conversation in conversations) { + unreadCount += conversation.unreadMessagesCount; + } + if (unreadCount>0) { + [self.tabBar showBadgeOnItemIndex:0]; + [homeVC getNewMessage:NO]; + }else{ + [homeVC getNewMessage:YES]; + [self.tabBar hideBadgeOnItemIndex:0]; + } + UIApplication *application = [UIApplication sharedApplication]; + [application setApplicationIconBadgeNumber:unreadCount]; +} + + +- (void)playSoundAndVibration:(EMMessage *)message +{ + NSDictionary *ext = message.ext; + if ([[ext allKeys] containsObject:@"action"]) { + if ([ext[@"action"] intValue] ==39) {//封号 + [self showBanned]; + } + } + + + EMPushOptions *options = [[EMClient sharedClient] pushOptions]; + if ([ext.allKeys containsObject:@"voice"]) { + int voice = [ext[@"voice"] intValue]; + if (!voice) { + [self palySound]; + } + return; + } + if (options.noDisturbStatus == EMPushNoDisturbStatusClose) { + [self palySound]; + } +} + +- (void)palySound +{ + NSTimeInterval timeInterval = [[NSDate date] timeIntervalSinceDate:self.lastPlaySoundDate]; + if (timeInterval < kDefaultPlaySoundInterval) { + //如果距离上次响铃和震动时间太短, 则跳过响铃 + NSLog(@"skip ringing & vibration %@, %@", [NSDate date], self.lastPlaySoundDate); + return; + } + //保存最后一次响铃时间 + self.lastPlaySoundDate = [NSDate date]; + // 收到消息时,播放音频 + [[EMCDDeviceManager sharedInstance] playNewMessageSound]; + // 收到消息时,震动 + [[EMCDDeviceManager sharedInstance] playVibration]; +} + +- (void)showBanned +{ + NSUserDefaults *defaults = kUserDefaults; + [defaults setObject:@"1" forKey:@"banned"]; + [defaults synchronize]; + + UIAlertView *aletView = [[UIAlertView alloc]initWithTitle:@"启缘提示" message:@"尊敬的用户你的账户已被封禁,无法登陆,请联系启缘客服!" delegate:self cancelButtonTitle:nil otherButtonTitles:@"知道了", nil]; + [aletView show]; +} + +- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex +{ + [ZCTools cleanUserDefault]; + [ZCTools logoutHuanxin]; + AppDelegate *delegate = (AppDelegate *)[UIApplication sharedApplication].delegate; + [delegate initWindow]; +} + + +- (void)showNotificationWithMessage:(EMMessage *)message +{ + NSDictionary *ext = message.ext; + if ([[ext allKeys] containsObject:@"action"]) { + if ([ext[@"action"] intValue] ==39) { + [self showBanned]; + } + } + EMPushOptions *options = [[EMClient sharedClient] pushOptions]; + + if ([ext.allKeys containsObject:@"voice"]) { + int voice = [ext[@"voice"] intValue]; + if (!voice) { + [self getPushMessage:message]; + } + return; + } + + if (options.noDisturbStatus == EMPushNoDisturbStatusClose) {//有通知声音 + [self getPushMessage:message]; + } +} + + +- (void)getPushMessage:(EMMessage *)message +{ + NSString *alertBody = @"您有一条新消息"; + + NSTimeInterval timeInterval = [[NSDate date] timeIntervalSinceDate:self.lastPlaySoundDate]; + BOOL playSound = NO; + if (!self.lastPlaySoundDate || timeInterval >= kDefaultPlaySoundInterval) { + self.lastPlaySoundDate = [NSDate date]; + playSound = YES; + } + + NSMutableDictionary *userInfo = [NSMutableDictionary dictionary]; + [userInfo setObject:[NSNumber numberWithInt:message.chatType] forKey:kMessageType]; + [userInfo setObject:message.conversationId forKey:kConversationChatter]; + + UILocalNotification *notification = [[UILocalNotification alloc] init]; + notification.fireDate = [NSDate date]; //触发通知的时间 + notification.alertBody = alertBody; + notification.timeZone = [NSTimeZone defaultTimeZone];//时区 + if (playSound) { + notification.soundName = UILocalNotificationDefaultSoundName; + } + notification.userInfo = userInfo; + //发送通知 + [[UIApplication sharedApplication] scheduleLocalNotification:notification]; +} + +- (BOOL)shouldAutorotate { + return [self.selectedViewController shouldAutorotate]; +} + +- (UIInterfaceOrientationMask)supportedInterfaceOrientations{ + return [self.selectedViewController supportedInterfaceOrientations]; +} + +- (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/JQQY/Base/TabbarController/UITabBar+badge.h b/JQQY/Base/TabbarController/UITabBar+badge.h new file mode 100644 index 0000000000000000000000000000000000000000..eaaf789967f69f2a420a32c39e592a8408e8c685 --- /dev/null +++ b/JQQY/Base/TabbarController/UITabBar+badge.h @@ -0,0 +1,19 @@ +// +// UITabBar+badge.h +// JQQY +// +// Created by Shmily on 2017/11/27. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import + +@interface UITabBar (badge) + +- (void)showBadgeOnItemIndex:(int)index; //显示小红点 + +- (void)hideBadgeOnItemIndex:(int)index; //隐藏小红点 + + + +@end diff --git a/JQQY/Base/TabbarController/UITabBar+badge.m b/JQQY/Base/TabbarController/UITabBar+badge.m new file mode 100644 index 0000000000000000000000000000000000000000..2ab6f832ab2efb79b25b5a4a9cb85aad78af7100 --- /dev/null +++ b/JQQY/Base/TabbarController/UITabBar+badge.m @@ -0,0 +1,49 @@ +// +// UITabBar+badge.m +// JQQY +// +// Created by Shmily on 2017/11/27. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "UITabBar+badge.h" + +@implementation UITabBar (badge) + +- (void)showBadgeOnItemIndex:(int)index{ + //移除之前的小红点 + [self removeBadgeOnItemIndex:index]; + + //新建小红点 + UIView *badgeView = [[UIView alloc]init]; + badgeView.tag = 888 + index; + badgeView.layer.cornerRadius = 5;//圆形 + badgeView.backgroundColor = [UIColor redColor];//颜色:红色 + CGRect tabFrame = self.frame; + + //确定小红点的位置 + float percentX = (index +0.6) / 4; + CGFloat x = ceilf(percentX * tabFrame.size.width); + CGFloat y = ceilf(0.1 * tabFrame.size.height); + badgeView.frame = CGRectMake(x, y, 10, 10);//圆形大小为10 + [self addSubview:badgeView]; +} + +//隐藏小红点 +- (void)hideBadgeOnItemIndex:(int)index{ + //移除小红点 + [self removeBadgeOnItemIndex:index]; +} + +//移除小红点 +- (void)removeBadgeOnItemIndex:(int)index{ + //按照tag值进行移除 + for (UIView *subView in self.subviews) { + if (subView.tag == 888+index) { + [subView removeFromSuperview]; + } + } +} + + +@end diff --git a/JQQY/Define/FontAndColorMacros.h b/JQQY/Define/FontAndColorMacros.h new file mode 100644 index 0000000000000000000000000000000000000000..4661a3a5652e0f8a20b8534daac787e8e559bab1 --- /dev/null +++ b/JQQY/Define/FontAndColorMacros.h @@ -0,0 +1,48 @@ +// +// FontAndColorMacros.h +// JQQY +// +// Created by chason on 2017/11/17. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#ifndef FontAndColorMacros_h +#define FontAndColorMacros_h + +#pragma mark - 颜色区 + +/** 16进制色值 0xffffff 不带alpha */ +#define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 \ +green:((float)((rgbValue & 0xFF00) >> 8))/255.0 \ +blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0] + +/** + 16进制色值 0xffffff 带alpha + */ +#define UIColorFromRGBWithAlpha(rgbValue,a) [UIColor \ +colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 \ +green:((float)((rgbValue & 0xFF00) >> 8))/255.0 \ +blue:((float)(rgbValue & 0xFF))/255.0 alpha:a] + +/** + rgb颜色 + */ +#define RGBA(r,g,b,a) [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:a] + +//主题色(旧) +#define CTHEMECOLOR UIColorFromRGB(0xfe4e77) +//紫色 +#define PURPLECOLOUR UIColorFromRGB(0x763cd3) +//主要字体颜色 +#define MAIN_TEXTCOLOR UIColorFromRGB(0x595959) +//分割线颜色 +#define LINECOLOUR UIColorFromRGB(0xdbdbdb) + +#pragma mark - 字体区 + +#define SYSTEMFONT(FONTSIZE) [UIFont systemFontOfSize:FONTSIZE] + +#define FFONT12 [UIFont systemFontOfSize:12.0f] +#define FFONT16 [UIFont systemFontOfSize:16.0f] + +#endif /* FontAndColorMacros_h */ diff --git a/JQQY/Define/URLMacros.h b/JQQY/Define/URLMacros.h new file mode 100644 index 0000000000000000000000000000000000000000..159dfc914c446e3875af2fc31133d6f211b420ef --- /dev/null +++ b/JQQY/Define/URLMacros.h @@ -0,0 +1,255 @@ +// +// URLMacros.h +// JQQY +// +// Created by chason on 2017/11/19. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#ifndef URLMacros_h +#define URLMacros_h + + +#pragma mark - ——————— 服务器地址 ———————— +/** 基地址*/ + +/** 本地*/ +// #define BASE_URL @"http://10.40.0.200/" + + /** 花生壳 */ +//#define BASE_URL @"http://15527z711x.51mypc.cn:50686/" + +/** 线上 */ +#define BASE_URL @"https://www.9qiyuan.com/" + +/** 完整接口 */ +#define SERVERURL [NSString stringWithFormat:@"%@mobile",BASE_URL] + +/** 版本号 */ +#define APP_VERSION @"2.55" + +#pragma mark - ——————— 缘圈相关 ———————— + +//缘圈列表 +#define URL_yuanquan_list @"/yuanquanList.do" +//缘圈详情 +#define URL_yuanquan_detail @"/yuanquanDetail.do" +//获取缘圈评论 +#define URL_yuanquan_comment @"/yuanquanComments" +//点赞 +#define URL_yuanquan_like @"/circle/like" +//发表评论 +#define URL_yuanquan_commentPublic @"/circle/review/publish" +//删除评论 +#define URL_yuanquan_commentDelete @"/deleteYuanquanComment" +//举报评论 +#define URL_yuanquan_commentReport @"/yuanquanCommentReport" +//发表缘圈 +#define URL_yuanquan_publish @"/addYuanquan" +//视频 +#define URL_yuanquan_video @"/returnvideo" +//举报 +#define URL_yuanquan_report @"/circle/report" +//删除 +#define URL_yuanquan_delete @"/circle/delete" +//好友,粉丝,关注,黑名单 +#define URL_CONTACT_LIST @"/contactlist" +//广告 +#define URL_rollingAd @"/rollingAd" +//系统匹配 +#define URL_myMatchs @"/myMatchs" +//话题列表 +#define URL_topic_list @"/topicList" +//话题详情 +#define URL_topic_detail @"/topicDetail" +//添加收藏 +#define URL_yuanquan_add_collection @"/addYuanquanCollection" +//删除收藏 +#define URL_yuanquan_delete_collection @"/deleteYuanquanCollection" + + + +#pragma mark - ——————— 用户相关 ———————— + +//获取验证码 +#define URL_code @"/code" +//登录 +#define URL_user_login @"/userlogin" +//访客 +#define URL_user_visitor @"/userrecode" +//修改密码 +#define URL_user_modifyPwd @"/usermodifypsw" +// +#define URL_user_wallet_trade @"/wallet/returntradenew" +// +#define URL_user_wallet_consumerlistnew @"/wallet/consumerlistnew" +// +#define URL_user_game_myticket @"/game/myticket" +// +#define URL_user_game_actticket @"/game/actticket" +// +#define URL_user_game_gamecode @"/game/gamecode" +//我的礼物 +#define URL_user_gift_mygift @"/gift/mygift" +// +#define URL_user_gift_giftsendinfo @"/gift/giftsendinfo" +//我的标签 +#define URL_user_mylabel @"/mylabel" +//我的爱好 +#define URL_user_myhobby @"/myhobby" +// +// +#define URL_user_myprofilenew @"/myprofilenew" +// +#define URL_user_myphoto @"/myphoto" +// +#define URL_user_myintroduce @"/myintroduce" +//returnvideo +#define URL_user_returnvideo @"/returnvideo" +//myphotodl +#define URL_user_myphotodl @"/myphotodl" +//重置密码 +#define URL_user_resetPwd @"/userpassword" +//注册启缘 +#define URL_user_registerQY @"/regusernew" +//三方登陆 +#define URL_user_third @"/thirdnew" +//进入设置页面请求的接口 +#define URL_user_setting @"/thirdlist" +//解除\绑定第三方 +#define URL_user_third_unwrap @"/third_unwrap" +//意见反馈 +#define URL_user_idea @"/idea" +// +#define URL_user_setting_phone @"/third" +//首页 +#define URL_homepagenew @"/homepagenew" +//签到 +#define URL_user_signin @"/signin" +//hxinfo +#define URL_user_hxinfo @"/hxinfo" +//gift/mygift +#define URL_gift_mygifto @"/gift/mygift" +//gift/giftsend +#define URL_gift_giftsend @"/gift/giftsend" +//auditinvite +#define URL_user_auditinvite @"/auditinvite" +//mainpage +#define URL_user_mainpage @"/mainpage" +//friendadd +#define URL_user_friendadd @"/friendadd" +//userlike +#define URL_user_userlike @"/userlike" +//discover/emotionresult +#define URL_emotionresult @"/discover/emotionresult" +//推送 +#define URL_jpushsetnew @"/jpushsetnew" +//经纬度 +#define URL_lngandlat @"/lngandlat" +//删除消息 +#define URL_infocenterdele @"/infocenterdele" +// +#define URL_infoCenterDelete @"/infoCenterDelete" +//消息 +#define URL_infocenternew @"/infocenternew" +//上传头像 +#define URL_user_face @"/face" +//举报用户 +#define URL_user_reportact @"/userreport" +//拉去提交审核的的信息 +#define URL_authQuery @"/authQuery" +// +#define URL_myCircle @"/myCircle" +//修改用户基本资料 +#define URL_user_updatemyprofilenew @"/updatemyprofilenew" +//获取图片上传地址 +#define URL_user_getfileupurl @"/getfileupurl" +//上传照片 +#define URL_user_myphotoup @"/myphotoup" +// +#define URL_user_auditphoto @"/auditphoto" +// +#define URL_user_video @"/video" +// +#define URL_user_useravatar @"/useravatar" +//企业认证信息查询 +#define URL_user_enterpriseAuthQuery @"/enterpriseAuthQuery" +//企业名称列表 +#define URL_user_enterpriseList @"/enterpriseList" +//部门名称列表 +#define URL_user_departmentList @"/departmentList" +//提交认证 +#define URL_user_enterpriseAuthReq @"/enterpriseAuthReq" +//我的收藏 +#define URL_user_Collection @"/listYuanquanCollection" +//我的发布 +#define URL_user_Publish @"/listYuanquanPublish" + +#pragma mark - ——————— 活动相关 ———————— + +#define URL_activity_list @"/enterpriseact/actlistnew" +//举报活动 +#define URL_activity_reportact @"/act/reportact" +// +#define URL_MYACTIVITY_List @"/enterpriseact/myApply" +//活动评论 +#define URL_activity_discusswords @"/act/discusswords" +//活动详情 +#define URL_ActityDetail @"/enterpriseact/information" +//活动的评论 +#define URL_Publishdiscuss @"/act/publishdiscuss" +//参加活动的人 +#define URL_Personlist @"/enterpriseact/prlist" +//参加活动链接 +#define URL_joint_act [NSString stringWithFormat:@"%@about/sign_up_data.html?",BASE_URL] + + +#pragma mark - ——————— 附近的人 ———————— +//附近的人 +#define URL_near_list @"/nearbyuser" +//查询名片信息 +#define URL_CARDQUERY @"/cardquery" +//提交名片 +#define URL_CARDUPDATE @"/cardupdate" +//头像校验 +#define URL_user_facecard @"/faceinfo" +//提交身份信息 +#define URL_authReq @"/authReq" +//找人 +#define URL_queryuser @"/queryuser" + + + + +#pragma mark - ——————— web相关 ———————— + +//缘分测试 +#define URL_EMOTIONTEST @"emotiontest" +//关于我们 +#define URL_ABOUT @"/about?version=" +//奖励规则 +#define UEL_AWARD @"/award/index.html" +//名片介绍 +#define URL_UER_NAME_CARD @"/about/user_name_card.html" + +#define URL_AUTHENTICATION @"/about/authentication.html" + +//公司介绍 +#define URL_ENTERPRISE @"mobilesrc/enterprise_introduce?" + +#pragma mark - ——————— 分享相关 ———————— +//活动 +#define URL_share_activity [NSString stringWithFormat:@"%@activity/actdetail.html?actid=",BASE_URL] +//名片 +#define URL_share_userInfo [NSString stringWithFormat:@"%@prouser/?id=",BASE_URL] +//情感测评 +#define URL_share_emotion [NSString stringWithFormat:@"%@qgcs/?id=",BASE_URL] +//分享数 +#define URL_share_number @"/enterpriseact/shareSuccessful" +//article/sharelove +#define URL_share_sharelove @"/article/sharelove" + + + + +#endif /* URLMacros_h */ diff --git a/JQQY/Define/UserInfoMacros.h b/JQQY/Define/UserInfoMacros.h new file mode 100644 index 0000000000000000000000000000000000000000..645e850c3b090d7d4e2ca0a37581c2c73e057e5f --- /dev/null +++ b/JQQY/Define/UserInfoMacros.h @@ -0,0 +1,35 @@ +// +// UserInfoMacros.h +// JQQY +// +// Created by chason on 2017/11/20. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#ifndef UserInfoMacros_h +#define UserInfoMacros_h + + +//默认头像 +#define USER_AVATAR_DEFAULT [UIImage imageNamed:@"avatar_default"] +//默认图片 +#define PICTURE_DEFAULT [UIImage imageNamed:@"picture_default"] + +//当前登录用户的ID +#define USER_USERID [[NSUserDefaults standardUserDefaults] objectForKey:@"userid"] +//环信ID +#define USER_HXID [[NSUserDefaults standardUserDefaults] objectForKey:@"hxid"] +//手机号 +#define USER_PHONE [[NSUserDefaults standardUserDefaults] objectForKey:@"phone"] +//加密后的手机号 +#define USER_PHONESTR [[NSUserDefaults standardUserDefaults] objectForKey:@"phonestr"] +//昵称 +#define USER_NICKNAME [[NSUserDefaults standardUserDefaults] objectForKey:@"nickname"] +//性别 +#define USER_SEX [[NSUserDefaults standardUserDefaults] objectForKey:@"sex"] +//头像 +#define USER_AVATAR [[NSUserDefaults standardUserDefaults] objectForKey:@"avatar"] +//元宝 +#define USER_INGOT [[NSUserDefaults standardUserDefaults] objectForKey:@"ingot"] + +#endif /* UserInfoMacros_h */ diff --git a/JQQY/Define/UtilsMacros.h b/JQQY/Define/UtilsMacros.h new file mode 100644 index 0000000000000000000000000000000000000000..9bbd1151a86833069f8af1e7432f3e82f9c59f58 --- /dev/null +++ b/JQQY/Define/UtilsMacros.h @@ -0,0 +1,74 @@ +// +// UtilsMacros.h +// JQQY +// +// Created by chason on 2017/11/16. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#ifndef UtilsMacros_h +#define UtilsMacros_h + +//获取系统对象 +#define kApplication [UIApplication sharedApplication] +#define kAppWindow [UIApplication sharedApplication].delegate.window +#define kAppDelegate [AppDelegate shareAppDelegate] +#define kRootViewController [UIApplication sharedApplication].delegate.window.rootViewController +#define kUserDefaults [NSUserDefaults standardUserDefaults] +#define kNotificationCenter [NSNotificationCenter defaultCenter] + +#define kStatusBarHeight [[UIApplication sharedApplication] statusBarFrame].size.height +#define kNavBarHeight 44.0 +#define kTabBarHeight ([[UIApplication sharedApplication] statusBarFrame].size.height>20?83:49) +#define kTopHeight (kStatusBarHeight + kNavBarHeight) + +#define iPhone4 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 960), [[UIScreen mainScreen] currentMode].size) : NO) +#define iPhone5 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen] currentMode].size) : NO) +#define iPhone6 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(750, 1334), [[UIScreen mainScreen] currentMode].size) : NO) +#define iPhone6p ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1242, 2208), [[UIScreen mainScreen] currentMode].size) : NO) +#define iPhoneX ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen] currentMode].size) : NO) + +//获取屏幕宽高 +#define KSCREEN_WIDTH [[UIScreen mainScreen] bounds].size.width +#define KSCREEN_HEIGHT [[UIScreen mainScreen] bounds].size.height +#define KSCREEN_BOUNDS [UIScreen mainScreen].bounds + +//判断数组不为空 +#define ARRAY_IS_NOT_EMPTY(array) (array && [array isKindOfClass:[NSArray class]] && [array count]) + +//判断字符串是否为空 +#define STR_IS_NOT_EMPTY(string) (string !=nil && [string isKindOfClass:[NSString class]] && ![string isEqualToString:@""] && ![string isKindOfClass:[NSNull class]]) + +//转换成NSString +#define ToString(key) [NSString stringWithFormat:@"%@",key] + +/** + * 转换成带单位 + */ +#define ToStringUnit(key,unit) [NSString stringWithFormat:@"%@ %@",key,unit] + + +/** + * 小数点1位 + */ +#define ToDouble(key) [NSString stringWithFormat:@"%.1f",[key doubleValue]] + + +#define HaveUserId (STR_IS_NOT_EMPTY(USER_USERID)?USER_USERID:@"") + +#define ISLOGIN STR_IS_NOT_EMPTY(USER_USERID) + +/** + * 判断数组不为空 + */ +#define ARRAY_IS_NOT_EMPTY(array) (array && [array isKindOfClass:[NSArray class]] && [array count]) + +//手机版本是否大于8 +#define IOS8 [[[UIDevice currentDevice] systemVersion] floatValue] >= 8.f + + +#define NetworkFailure @"网络异常" + +#define logOut @"out" + +#endif /* UtilsMacros_h */ diff --git a/JQQY/Info.plist b/JQQY/Info.plist new file mode 100644 index 0000000000000000000000000000000000000000..091409b26cab2cae783a481b27cbb4f44deef238 --- /dev/null +++ b/JQQY/Info.plist @@ -0,0 +1,160 @@ + + + + + CFBundleDevelopmentRegion + zh_CN + CFBundleDisplayName + 百婚百 + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 3.2.2 + CFBundleURLTypes + + + CFBundleTypeRole + Editor + CFBundleURLName + qq + CFBundleURLSchemes + + QQ41e79559 + + + + CFBundleTypeRole + Editor + CFBundleURLName + weibo + CFBundleURLSchemes + + wb1695601605 + + + + CFBundleTypeRole + Editor + CFBundleURLName + tencent + CFBundleURLSchemes + + tencent1105696089 + + + + CFBundleTypeRole + Editor + CFBundleURLName + weixin + CFBundleURLSchemes + + wxdaaa79a772bcaa5f + + + + CFBundleVersion + 3.2.2.8 + ITSAppUsesNonExemptEncryption + + LSApplicationQueriesSchemes + + wechat + weixin + sinaweibohd + sinaweibo + sinaweibosso + weibosdk + weibosdk2.5 + mqqapi + mqq + mqqOpensdkSSoLogin + mqqconnect + mqqopensdkdataline + mqqopensdkgrouptribeshare + mqqopensdkfriend + mqqopensdkapi + mqqopensdkapiV2 + mqqopensdkapiV3 + mqqopensdkapiV4 + mqzoneopensdk + wtloginmqq + wtloginmqq2 + mqqwpa + mqzone + mqzonev2 + mqzoneshare + wtloginqzone + mqzonewx + mqzoneopensdkapiV2 + mqzoneopensdkapi19 + mqzoneopensdkapi + mqqbrowser + mttbrowser + tim + timapi + timopensdkfriend + timwpa + timgamebindinggroup + timapiwallet + timOpensdkSSoLogin + wtlogintim + timopensdkgrouptribeshare + timopensdkapiV4 + timgamebindinggroup + timopensdkdataline + wtlogintimV1 + timapiV1 + + LSRequiresIPhoneOS + + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + + NSCameraUsageDescription + 启缘客户端需要使用你的相机 + NSLocationAlwaysUsageDescription + 始终访问位置 + NSLocationUsageDescription + 访问地址 + NSLocationWhenInUseDescription + + NSLocationWhenInUseUsageDescription + 启缘客户端需要使用你当前位置信息,获取周围其他用户 + NSMicrophoneUsageDescription + 访问麦克风启缘客户端需要访问你的麦克风 + NSPhotoLibraryUsageDescription + 访问麦克风启缘客户端需要访问你的相册 + UIBackgroundModes + + remote-notification + + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/JQQY/JQQY.entitlements b/JQQY/JQQY.entitlements new file mode 100644 index 0000000000000000000000000000000000000000..903def2af53062463744294d5ad4c4ef8d9a4381 --- /dev/null +++ b/JQQY/JQQY.entitlements @@ -0,0 +1,8 @@ + + + + + aps-environment + development + + diff --git a/JQQY/LaunchScreen.storyboard b/JQQY/LaunchScreen.storyboard new file mode 100644 index 0000000000000000000000000000000000000000..a8dc72f762da80a327c141407ebc77f9ec39cec2 --- /dev/null +++ b/JQQY/LaunchScreen.storyboard @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/JQQY/Main.storyboard b/JQQY/Main.storyboard new file mode 100644 index 0000000000000000000000000000000000000000..9b891dea4b2447ce05fca427c4ec65f17fed9e1c --- /dev/null +++ b/JQQY/Main.storyboard @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/JQQY/Manager/.DS_Store b/JQQY/Manager/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..c721c183e6331bd5deb4d6afd1ad164f46dc852f Binary files /dev/null and b/JQQY/Manager/.DS_Store differ diff --git a/JQQY/Manager/CameraManager.h b/JQQY/Manager/CameraManager.h new file mode 100644 index 0000000000000000000000000000000000000000..ae247d5b6341c8c320bddfaababfa2c47e1135bc --- /dev/null +++ b/JQQY/Manager/CameraManager.h @@ -0,0 +1,22 @@ +// +// CameraManager.h +// JQQY +// +// Created by Shmily on 2017/12/21. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import + +@interface CameraManager : NSObject + +- (id)initWithVC:(UIViewController *)delegateVC andShowType:(NSInteger)type; + +- (void)startCamera; +- (void)startPhoto:(NSInteger)maxPhoto; + + +@property(nonatomic,copy) void(^ImageBlock)(NSArray *imageArray); + + +@end diff --git a/JQQY/Manager/CameraManager.m b/JQQY/Manager/CameraManager.m new file mode 100644 index 0000000000000000000000000000000000000000..09ad3da81e55024e26e6db736d39f3461488b366 --- /dev/null +++ b/JQQY/Manager/CameraManager.m @@ -0,0 +1,270 @@ +// +// CameraManager.m +// JQQY +// +// Created by Shmily on 2017/12/21. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "CameraManager.h" +#import "TZImagePickerController.h" +#import "TZImageManager.h" +#import "ZCSelectPhotosViewController.h" +#import "ZCAlertController.h" +@interface CameraManager () + + +@property (nonatomic, strong) UIImagePickerController *imagePickerVc; +@property (nonatomic, assign) UIViewController *delegateVC; +@property (nonatomic, assign) NSInteger type; + +@end + + +@implementation CameraManager + +- (id)initWithVC:(UIViewController *)delegateVC andShowType:(NSInteger)type +{ + self = [super init]; + if (self) { + //type = 1头像 + _type = type; + _delegateVC = delegateVC; + } + return self; +} + +- (void)startCamera +{ + AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo]; + if ((authStatus == AVAuthorizationStatusRestricted || authStatus == AVAuthorizationStatusDenied) && iOS7Later) { + // 无相机权限 做一个友好的提示 + + ZCAlertController *alertView = [ZCAlertController initZCAlertControllerWithTitle:@"打开[定位服务]来允许[启缘]确定您的位置" message:@"请在系统设置中开启定位服务(设置>隐私>定位服务>开启)" style:@"1" titleArray:@[@"取消",@"设置"] alertAction:^(NSInteger index) { + + }]; + [alertView showZCAlert]; + + // 拍照之前还需要检查相册权限 + } else if ([TZImageManager authorizationStatus] == 2) { // 已被拒绝,没有相册权限,将无法保存拍的照片 + ZCAlertController *alertView = [ZCAlertController initZCAlertControllerWithTitle:@"打开[定位服务]来允许[启缘]确定您的位置" message:@"请在系统设置中开启定位服务(设置>隐私>定位服务>开启)" style:@"1" titleArray:@[@"取消",@"设置"] alertAction:^(NSInteger index) { + + }]; + [alertView showZCAlert]; + } else { // 调用相机 + UIImagePickerControllerSourceType sourceType = UIImagePickerControllerSourceTypeCamera; + if ([UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera]) { + self.imagePickerVc.sourceType = sourceType; + if(iOS8Later) { + _imagePickerVc.modalPresentationStyle = UIModalPresentationOverCurrentContext; + } + [_delegateVC presentViewController:_imagePickerVc animated:YES completion:nil]; + } else { + NSLog(@"模拟器中无法打开照相机,请在真机中使用"); + } + } + + +} + +- (UIImagePickerController *)imagePickerVc { + if (_imagePickerVc == nil) { + _imagePickerVc = [[UIImagePickerController alloc] init]; + _imagePickerVc.delegate = self; + if (_type ==1) {//头像 + _imagePickerVc.allowsEditing = YES; + }else{ + _imagePickerVc.allowsEditing = NO; + } + _imagePickerVc.navigationBar.barTintColor = _delegateVC.navigationController.navigationBar.barTintColor; + _imagePickerVc.navigationBar.tintColor = _delegateVC.navigationController.navigationBar.tintColor; + UIBarButtonItem *tzBarItem, *BarItem; + if (iOS9Later) { + if (@available(iOS 9.0, *)) { + tzBarItem = [UIBarButtonItem appearanceWhenContainedInInstancesOfClasses:@[[TZImagePickerController class]]]; + } else { + // Fallback on earlier versions + } + if (@available(iOS 9.0, *)) { + BarItem = [UIBarButtonItem appearanceWhenContainedInInstancesOfClasses:@[[UIImagePickerController class]]]; + } else { + // Fallback on earlier versions + } + } else { + tzBarItem = [UIBarButtonItem appearanceWhenContainedIn:[TZImagePickerController class], nil]; + BarItem = [UIBarButtonItem appearanceWhenContainedIn:[UIImagePickerController class], nil]; + } + NSDictionary *titleTextAttributes = [tzBarItem titleTextAttributesForState:UIControlStateNormal]; + [BarItem setTitleTextAttributes:titleTextAttributes forState:UIControlStateNormal]; + } + return _imagePickerVc; +} + +- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info +{ + __weak typeof(self) weakSelf = self; + UIImage *finishImage; + if(_type ==1){//头像 + finishImage = [info objectForKey:@"UIImagePickerControllerEditedImage"]; + }else{ + finishImage = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; + finishImage = [self fixOrientation:finishImage]; + + } + [picker dismissViewControllerAnimated:YES completion:^{ + if (finishImage) { + if (weakSelf.ImageBlock) { + weakSelf.ImageBlock(@[finishImage]); + } + } + }]; +} +- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{ + + [picker dismissViewControllerAnimated:YES completion:nil]; +} + + +- (void)startPhoto:(NSInteger)maxPhoto +{ + CGFloat cutboxHeight; + if (_type ==1) {//头像 + cutboxHeight = KSCREEN_WIDTH; + }else{ + cutboxHeight = 0; + } + ZCSelectPhotosViewController *imagePickerVc = [[ZCSelectPhotosViewController alloc] initWithMaxImagesCount:maxPhoto columnNumber:4 delegate:self pushPhotoPickerVc:YES cutboxHeight:cutboxHeight]; + + //图片成功回调 + __weak typeof(self) weakSelf = self; + [imagePickerVc setDidFinishPickingPhotosHandle:^(NSArray *photos, NSArray *assets, BOOL isSelectOriginalPhoto) { + + if (ARRAY_IS_NOT_EMPTY(photos)) { + if (weakSelf.ImageBlock) { + weakSelf.ImageBlock(photos); + } + } + }]; + [_delegateVC presentViewController:imagePickerVc animated:YES completion:nil]; +} + +- (UIImage *)fixOrientation:(UIImage *)aImage { + + if (aImage.imageOrientation == UIImageOrientationUp) + + return aImage; + + CGAffineTransform transform = CGAffineTransformIdentity; + switch (aImage.imageOrientation) { + + case UIImageOrientationDown: + + case UIImageOrientationDownMirrored: + + transform = CGAffineTransformTranslate(transform, aImage.size.width, aImage.size.height); + + transform = CGAffineTransformRotate(transform, M_PI); + + break; + case UIImageOrientationLeft: + + case UIImageOrientationLeftMirrored: + + transform = CGAffineTransformTranslate(transform, aImage.size.width, 0); + + transform = CGAffineTransformRotate(transform, M_PI_2); + + break; + + case UIImageOrientationRight: + + case UIImageOrientationRightMirrored: + + transform = CGAffineTransformTranslate(transform, 0, aImage.size.height); + + transform = CGAffineTransformRotate(transform, -M_PI_2); + + break; + + default: + + break; + + } + + switch (aImage.imageOrientation) { + + case UIImageOrientationUpMirrored: + + case UIImageOrientationDownMirrored: + transform = CGAffineTransformTranslate(transform, aImage.size.width, 0); + transform = CGAffineTransformScale(transform, -1, 1); + break; + + case UIImageOrientationLeftMirrored: + + case UIImageOrientationRightMirrored: + + transform = CGAffineTransformTranslate(transform, aImage.size.height, 0); + + transform = CGAffineTransformScale(transform, -1, 1); + + break; + + default: + + break; + + } + + CGContextRef ctx = CGBitmapContextCreate(NULL, aImage.size.width, aImage.size.height, + + CGImageGetBitsPerComponent(aImage.CGImage), 0, + + CGImageGetColorSpace(aImage.CGImage), + + CGImageGetBitmapInfo(aImage.CGImage)); + + CGContextConcatCTM(ctx, transform); + + switch (aImage.imageOrientation) { + + case UIImageOrientationLeft: + + case UIImageOrientationLeftMirrored: + + case UIImageOrientationRight: + + case UIImageOrientationRightMirrored: + + // Grr... + + CGContextDrawImage(ctx, CGRectMake(0,0,aImage.size.height,aImage.size.width), aImage.CGImage); + + break; + + + + default: + + CGContextDrawImage(ctx, CGRectMake(0,0,aImage.size.width,aImage.size.height), aImage.CGImage); + + break; + + } + CGImageRef cgimg = CGBitmapContextCreateImage(ctx); + + UIImage *img = [UIImage imageWithCGImage:cgimg]; + + CGContextRelease(ctx); + + CGImageRelease(cgimg); + + return img; + + +} + + + +@end diff --git a/JQQY/Manager/MapManager.h b/JQQY/Manager/MapManager.h new file mode 100644 index 0000000000000000000000000000000000000000..e5b88aefbed44d8685bfbbc2c003a8be655ba0ee --- /dev/null +++ b/JQQY/Manager/MapManager.h @@ -0,0 +1,31 @@ +// +// MapManager.h +// JQQY +// +// Created by Shmily on 2017/11/17. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import +#import +#import + + + + +@interface MapManager : NSObject +/**单例*/ ++(MapManager *)instance; + +/**定位,能得到省市街道*/ +- (void)startlocation:(BOOL)needaddress + locationSuccess:(void(^)(NSString * longitude,NSString * latitude,NSError *error)) locationSuccess + addressSuccess:(void(^)(NSString * longitude,NSString * latitude,BMKAddressComponent *address,BMKReverseGeoCodeResult *result,NSInteger error))addressSuccess; + +/**停止定位*/ +- (void)stoplocation; + +/** 检测定位是否打开 */ ++ (BOOL)judgeLocation; + +@end diff --git a/JQQY/Manager/MapManager.m b/JQQY/Manager/MapManager.m new file mode 100644 index 0000000000000000000000000000000000000000..665f8742c3f95889eb021046cc152388747b8a61 --- /dev/null +++ b/JQQY/Manager/MapManager.m @@ -0,0 +1,158 @@ +// +// MapManager.m +// JQQY +// +// Created by Shmily on 2017/11/17. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "MapManager.h" +#import "ZCAlertController.h" + +@interface MapManager () { + BMKLocationService *_locService; //定位 + BMKGeoCodeSearch *_searcher; //geo搜索服务 + BOOL _needaddress; //是否定位 + //得到经纬度 + void (^ _locationSuccess)(NSString * longitude,NSString * latitude,NSError *error); + //得到经纬度和地理位置信息 + void (^ _addressSuccess)(NSString * longitude,NSString * latitude,BMKAddressComponent *address,BMKReverseGeoCodeResult *result,NSInteger error); +} +@end + + + + +@implementation MapManager + ++(MapManager *)instance { + static MapManager *location; + @synchronized(self) { + if(!location) { + location = [[MapManager alloc] init]; + + } + } + return location; +} + +- (instancetype)init +{ + self = [super init]; + if (self) { + _needaddress=NO; + + _locService = [[BMKLocationService alloc]init]; + _locService.delegate = self; + _locService.distanceFilter = 100.f;//最小更新距离 + _locService.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;//经度 + _searcher =[[BMKGeoCodeSearch alloc]init]; + _searcher.delegate = self; + } + return self; +} + +//开始定位 +-(void)startlocation:(BOOL)needaddress locationSuccess:(void (^)(NSString *, NSString *, NSError *))locationSuccess addressSuccess:(void (^)(NSString *, NSString *, BMKAddressComponent *,BMKReverseGeoCodeResult *,NSInteger))addressSuccess{ + + _needaddress=needaddress; + _locationSuccess=locationSuccess; + _addressSuccess=addressSuccess; + + if([CLLocationManager authorizationStatus] == kCLAuthorizationStatusDenied) + { + if (_locationSuccess) { + NSError *error = [[NSError alloc] initWithDomain:NSCocoaErrorDomain code:4 userInfo:nil]; + _locationSuccess(nil,nil,error); + } + }//定位不可用 + + if (_locService!=nil) { + [_locService startUserLocationService]; + } +} + +//停止定位 +- (void)stoplocation { + if (_locService!=nil) { + [_locService stopUserLocationService]; + } +} + +// 定位成功 +-(void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation{ + [_locService stopUserLocationService]; + double longitude=userLocation.location.coordinate.longitude; + double latitude=userLocation.location.coordinate.latitude; + if (_locationSuccess) { + _locationSuccess([NSString stringWithFormat:@"%f",longitude], + [NSString stringWithFormat:@"%f",latitude],nil); + + } + NSLog(@"@%f----------",longitude); + if (_needaddress) { + //发起反向地理编码检索 + BMKReverseGeoCodeOption *reverseGeocodeSearchOption = [[BMKReverseGeoCodeOption alloc]init]; + reverseGeocodeSearchOption.reverseGeoPoint = (CLLocationCoordinate2D){latitude,longitude}; + BOOL flag = [_searcher reverseGeoCode:reverseGeocodeSearchOption]; + if(flag) + { + NSLog(@"反geo检索发送成功"); + } + else + { + NSLog(@"反geo检索发送失败"); + } + }else{ + + } +} + +- (void)didFailToLocateUserWithError:(NSError *)error +{ + if (_locationSuccess) { + _locationSuccess(nil,nil,error); + } + NSLog(@"error-----%ld",(long)error.code); +} + + +-(void)onGetReverseGeoCodeResult:(BMKGeoCodeSearch *)searcher result:(BMKReverseGeoCodeResult *)result errorCode:(BMKSearchErrorCode)error{ + if (error == BMK_SEARCH_NO_ERROR) { + if (_addressSuccess) { + NSString *lng = [NSString stringWithFormat:@"%f",result.location.longitude]; + NSString *lat = [NSString stringWithFormat:@"%f",result.location.latitude]; + + _addressSuccess(lng,lat,result.addressDetail,result,0); + } + + }else{ + if (_addressSuccess) { + _addressSuccess(nil,nil,nil,nil,1); + } + + + } +} + ++ (BOOL)judgeLocation +{ + if([CLLocationManager authorizationStatus] == kCLAuthorizationStatusDenied) + { + ZCAlertController *alertView = [ZCAlertController initZCAlertControllerWithTitle:@"打开[定位服务]来允许[启缘]确定您的位置" message:@"请在系统设置中开启定位服务(设置>隐私>定位服务>开启)" style:@"1" titleArray:@[@"取消",@"设置"] alertAction:^(NSInteger index) { + if (index == 1) { + //跳转到定位权限页面 + NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; + if( [[UIApplication sharedApplication]canOpenURL:url] ) { + [[UIApplication sharedApplication] openURL:url]; + } + } + }]; + [alertView showZCAlert]; + return NO; + } + return YES; +} + + +@end diff --git a/JQQY/Manager/UploadMethod.h b/JQQY/Manager/UploadMethod.h new file mode 100644 index 0000000000000000000000000000000000000000..3c848eaeedaa9cb59141aa43819a1644b6e193e9 --- /dev/null +++ b/JQQY/Manager/UploadMethod.h @@ -0,0 +1,25 @@ +// +// UploadMethod.h +// JQ_ELOVE +// +// Created by Shmily on 16/7/19. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import +#import + + +@interface UploadMethod : NSObject + +- (void)transformImageToData:(NSData *)imageData uploadUrl:(NSString *)url; +- (void)postImageArray:(NSArray *)array; + +@property (nonatomic, strong) void(^uploadImageBlock)(NSDictionary *imageDict); +@property (nonatomic, strong) void(^uploadVideoPath)(NSString *path); +@property int type; // 1头像 2 相册 +@property (nonatomic, strong) NSString *e_name; +@property (nonatomic, strong) NSString *name; +@property (nonatomic, strong) NSString *idcardNum; + +@end diff --git a/JQQY/Manager/UploadMethod.m b/JQQY/Manager/UploadMethod.m new file mode 100644 index 0000000000000000000000000000000000000000..b814a9fc7237eb7b29d9c5bcf735501d585dcf24 --- /dev/null +++ b/JQQY/Manager/UploadMethod.m @@ -0,0 +1,165 @@ +// +// UploadMethod.m +// JQ_ELOVE +// +// Created by Shmily on 16/7/19. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "UploadMethod.h" +#import +#import +#import "JSONKit.h" + +@interface UploadMethod () + +/** + * 讯飞头像检测 + */ +//@property (nonatomic,retain) IFlyFaceDetector * faceDetector; + + +@end + + + +@implementation UploadMethod + + +- (id)init +{ + self = [super init]; + if (self) { +// self.faceDetector=[IFlyFaceDetector sharedInstance]; + } + return self; +} + +- (void)transformImageToData:(NSData *)imageData uploadUrl:(NSString *)url +{ + __block NSString *md5 = [NSString stringWithFormat:@"%@",[OSSUtil base64Md5ForData:imageData]]; + __block NSString *size =[NSString stringWithFormat:@"%lu", (unsigned long)imageData.length]; + __weak typeof(self) weakSelf = self; + NSDictionary *params = @{ + @"md5":md5, + @"size":size, + }; + if (_type == 5 || _type == 9) {//5认证视频 9缘圈小视频 + params = @{ @"md5":md5, + @"size":size, + @"action":@"1"}; + } + [ZCNetRequestManager postRequestWithParameters:params subUrl:url block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + if ([resultDic[@"retcode"] intValue] == 1) { + [weakSelf sendHttpInfnoUrl:resultDic[@"url"] andfileKey:resultDic[@"key"] andImageData:imageData andMd5:md5]; + }else{ + NSDictionary *ImageDict = @{ + @"md5":md5, + @"size":size, + @"path":resultDic[@"key"] + }; + if (_uploadImageBlock) { + _uploadImageBlock(ImageDict); + } + } + } + }]; +} + +- (void)sendHttpInfnoUrl:(NSString *)url andfileKey:(NSString *)key andImageData:(NSData *)data andMd5:(NSString *)md5 +{ + __weak typeof(self) weakSelf = self; + [ZCNetRequestManager sendImageUrl:url fileKey:key imageData:data block:^(NSString*succeed, NSError *error) { + if (succeed) { + NSString *size = [NSString stringWithFormat:@"%lu",(unsigned long)data.length]; + if (_type == 1) {//头像 + NSDictionary *params = @{@"md5":md5, + @"size":size, + @"filePath":key, + @"userID":ToString(USER_USERID)}; + [weakSelf postImageLastStep:params api:URL_user_useravatar]; + }else if (_type ==2){//相册 + NSDictionary *ImageDict = @{@"md5":md5, + @"size":size, + @"path":key}; + if (_uploadImageBlock) { + _uploadImageBlock(ImageDict); + } + }else if (_type ==3 || _type ==4 || _type ==8){//3工作照 4名片 8身份证 + NSDictionary *ImageDict = @{@"userID":USER_USERID, + @"e_name":self.e_name, + @"name":self.name, + @"idcard":self.idcardNum, + @"md5":md5, + @"size":size, + @"path":key, + @"action":[NSString stringWithFormat:@"%d",_type-2]}; + [weakSelf postImageLastStep:ImageDict api:URL_user_auditphoto]; + }else if(_type ==5){//认证视频 + NSDictionary *params = @{@"md5":md5, + @"size":size, + @"filePath":key, + @"userID":ToString(USER_USERID)}; + [weakSelf postImageLastStep:params api:URL_user_video]; + }else if(_type ==6){//意见反馈 + NSDictionary *params = @{@"md5":md5, + @"size":size, + @"filePath":key, + @"userID":ToString(USER_USERID)}; + if (_uploadImageBlock) { + _uploadImageBlock(params); + } + }else if(_type ==7){//发布问题 + NSDictionary *params = @{@"md5":md5, + @"size":size, + @"path":key, + @"userID":ToString(USER_USERID)}; + if (_uploadImageBlock) { + _uploadImageBlock(params); + } + }else if (_type == 9){//缘圈小视频 + if (_uploadVideoPath) { + _uploadVideoPath(key); + } + } + }else{ + if (_uploadImageBlock) { + _uploadImageBlock(nil); + } + } + }]; +} + +- (void)postImageLastStep:(NSDictionary *)dict api:(NSString *)api{ + [ZCNetRequestManager postRequestWithParameters:dict subUrl:api block:^(NSDictionary *resultDic, NSError *error) { + if ([resultDic[@"retcode"] intValue] == 1) { + if (_uploadImageBlock) { + _uploadImageBlock(resultDic); + } + }else{ + if (_uploadImageBlock) { + _uploadImageBlock(nil); + } + } + }]; +} + +- (void)postImageArray:(NSArray *)array +{ + NSDictionary *params = @{@"pictures":[array JSONString], + @"userID":ToString(USER_USERID)}; + [ZCNetRequestManager postRequestWithParameters:params subUrl:URL_user_myphotoup block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + if (_uploadImageBlock) { + _uploadImageBlock(resultDic); + } + }else{ + if (_uploadImageBlock) { + _uploadImageBlock(nil); + } + } + }]; +} + +@end diff --git a/JQQY/Modules/.DS_Store b/JQQY/Modules/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..fa677adc0c05ab6c35f6ad8f75d150ae601858a9 Binary files /dev/null and b/JQQY/Modules/.DS_Store differ diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/.DS_Store" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..93742c9dc17b6a808cdfa324dea4bcd8e9f74874 Binary files /dev/null and "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/.DS_Store" differ diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Controller/ActivityViewController.h" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Controller/ActivityViewController.h" new file mode 100644 index 0000000000000000000000000000000000000000..6f7be3753a8cb41e98c2bac24d882f11a0dd0642 --- /dev/null +++ "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Controller/ActivityViewController.h" @@ -0,0 +1,13 @@ +// +// ActivityViewController.h +// JQQY +// +// Created by chason on 2017/11/16. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "ZCRefreshTableViewController.h" + +@interface ActivityViewController : ZCRefreshTableViewController + +@end diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Controller/ActivityViewController.m" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Controller/ActivityViewController.m" new file mode 100644 index 0000000000000000000000000000000000000000..34ad7d94f1a9d256f3e08cdee8c79e87d767f09f --- /dev/null +++ "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Controller/ActivityViewController.m" @@ -0,0 +1,173 @@ +// +// ActivityViewController.m +// JQQY +// +// Created by chason on 2017/11/16. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "ActivityViewController.h" +#import "ActivityListCell.h" +#import "ActivityListModel.h" +#import "MoreEventCell.h" +#import "EventDetailsViewController.h" +#import "MyActivityViewController.h" + +@interface ActivityViewController () +{ + BOOL isShow; +} +@end + +@implementation ActivityViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.navigationItem.title= @"精彩活动"; + isShow = YES; + [self setTableViewFrame:CGRectMake(0, 0, KSCREEN_WIDTH, KSCREEN_HEIGHT-kTopHeight-kTabBarHeight)]; + [self.tableView registerClass:[ActivityListCell class] forCellReuseIdentifier:@"ActivityCell_new"]; + [self.tableView registerClass:[MoreEventCell class] forCellReuseIdentifier:@"MoreEventCell"]; + self.tableView.separatorStyle =0; + self.showRefreshHeader = YES; + [self requestData]; + + [self addNavigationItemWithImageNames:@[@"my_activity"] isLeft:NO target:self action:@selector(myActivity) tags:nil]; + + +} + +- (void)myActivity +{ + if (!ISLOGIN) { + [ZCTools goLoginSelf:self SeccessBlock:NULL]; + }else{ + MyActivityViewController *myActivityVC = [[MyActivityViewController alloc]init]; + [myActivityVC setHidesBottomBarWhenPushed:YES]; + [self.navigationController pushViewController:myActivityVC animated:YES]; + } +} + + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + ActivityListModel *model=[self getPresent:indexPath]; + if (model.isMore) { + MoreEventCell * cell = [tableView dequeueReusableCellWithIdentifier:@"MoreEventCell"]; + cell.selectionStyle = 0; + + if(isShow){ + cell.triangleIV.highlighted = NO; + cell.moreLB.text = @"点击收起往期活动"; + }else{ + cell.triangleIV.highlighted = YES; + cell.moreLB.text = @"点击回顾往期活动"; + } + return cell; + }else{ + ActivityListCell * cell = [tableView dequeueReusableCellWithIdentifier:@"ActivityCell_new"]; + [cell initActivityListCell:model]; + cell.selectionStyle = 0; + return cell; + } +} +- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + if (!isShow) { + if (section){ + return 0; + } + } + return [[self.dataArray objectAtIndex:section] count]; +} + +- (NSInteger) numberOfSectionsInTableView:(UITableView *)tableView +{ + return self.dataArray.count; +} +- (ActivityListModel *)getPresent:(NSIndexPath *)p +{ + return [[self.dataArray objectAtIndex:p.section] objectAtIndex:p.row]; +} +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + return [self getPresent:indexPath].cellHeight; +} +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ + ActivityListModel *model = [self getPresent:indexPath]; + if (model.isMore) { + isShow = !isShow; + [self.tableView reloadData]; + }else{ + EventDetailsViewController *eventDetailVC =[[EventDetailsViewController alloc]init]; + [eventDetailVC setHidesBottomBarWhenPushed:YES]; + eventDetailVC.aid = model.actID; + [self.navigationController pushViewController:eventDetailVC animated:YES]; + } +} + +- (void)tableViewDidTriggerHeaderRefresh +{ + [self requestData]; +} + + +- (void)requestData{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:@"网络异常" toView:self.view]; + return; + } + [MBProgressHUD showMessag:@"" toView:self.view]; + NSDictionary *Params = @{ + @"version":APP_VERSION, + }; + [ZCNetRequestManager postRequestWithParameters:Params subUrl:URL_activity_list block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + [MBProgressHUD hideHUDForView:self.view animated:YES]; + if ([resultDic[@"retcode"] intValue] == 1) { + [self.dataArray removeAllObjects]; + NSMutableArray *recentActList = [[NSMutableArray alloc]initWithCapacity:0]; + for (NSDictionary *dict in resultDic[@"message"][@"recentActList"]) {//近期活动 + ActivityListModel *recentActModel = [[ActivityListModel alloc] init]; + [recentActModel initActivityListModel:dict]; + [recentActList addObject:recentActModel]; + } + ActivityListModel *moreModel = [[ActivityListModel alloc] init]; + moreModel.cellHeight = 49; + moreModel.isMore = YES; + [recentActList addObject:moreModel]; + + NSMutableArray *pastActList = [[NSMutableArray alloc]initWithCapacity:0]; + for (NSDictionary *dict in resultDic[@"message"][@"pastActList"]) {//往期活动 + ActivityListModel *pastActModel = [[ActivityListModel alloc] init]; + pastActModel.isPassed = YES; + [pastActModel initActivityListModel:dict]; + [pastActList addObject:pastActModel]; + } + [self.dataArray addObject:recentActList]; + [self.dataArray addObject:pastActList]; + + [self tableViewDidFinishTriggerHeader:YES reload:YES]; + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; +} + +- (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/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Controller/EventDetailsViewController.h" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Controller/EventDetailsViewController.h" new file mode 100644 index 0000000000000000000000000000000000000000..72ab0779dc64e52416208b0449ba45ab0edbfd46 --- /dev/null +++ "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Controller/EventDetailsViewController.h" @@ -0,0 +1,18 @@ +// +// EventDetailsViewController.h +// JQ_ELOVE +// +// Created by Shmily on 16/10/25. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "ZCRefreshTableViewController.h" + +@interface EventDetailsViewController : ZCRefreshTableViewController + +@property (nonatomic, strong) NSString *aid; + +- (void)login; + + +@end diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Controller/EventDetailsViewController.m" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Controller/EventDetailsViewController.m" new file mode 100644 index 0000000000000000000000000000000000000000..824fe01a209730f9f33ba1459ad9f5bfae29cbd7 --- /dev/null +++ "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Controller/EventDetailsViewController.m" @@ -0,0 +1,589 @@ +// +// EventDetailsViewController.m +// JQ_ELOVE +// +// Created by Shmily on 16/10/25. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "EventDetailsViewController.h" +#import "EventInFnoView.h" +#import "EventHeadView.h" +#import +#import "ApplyView.h" +#import "CommentHeadView.h" +#import "MessageModel.h" +#import "likeModel.h" +#import "CommentCell.h" +#import "EventFooterView.h" +#import "TapGestureRecognizer.h" +#import "QYShareView.h" +#import "IntroduceViewController.h" +#import "JQActionSheet.h" +#import "ALLWebViewController.h" +#import "QYInputToolbar.h" + +@interface EventDetailsViewController () +{ + NSString *to_uid; + int status; + + NSString *joinUrlString; + +} +@property (nonatomic, retain) UIView *DetailHeadView; +@property (nonatomic, retain) EventHeadView *headView; +@property (nonatomic, retain) EventInFnoView *infoView; +@property (nonatomic, retain) UIView *TeletextView; +@property (nonatomic, retain) WKWebView *myWebView; +@property (nonatomic, retain) ApplyView *applyView; +@property (nonatomic, retain) CommentHeadView *commentView; +@property (nonatomic, retain) EventFooterView *footerView; +@property (nonatomic, strong) QYInputToolbar *inputToolbar; +@property (nonatomic, retain) NSMutableArray *likeArray; +@property (nonatomic, strong) UIButton *rightBtn; +@property (nonatomic,retain) QYShareView *shareView; +@end + +@implementation EventDetailsViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.title = @"活动详情"; + [self addNavigationItemWithImageNames:@[@"xuanxiang"] isLeft:NO target:self action:@selector(showSheet) tags:nil]; + to_uid = @""; + + self.curepage = 1; + + [self setTableViewFrame:CGRectMake(0, 0, KSCREEN_WIDTH, KSCREEN_HEIGHT-kTopHeight-50)]; + [self.tableView registerClass:[CommentCell class] forCellReuseIdentifier:@"CommentCell"]; + self.tableView.showsHorizontalScrollIndicator =NO; + self.tableView.showsVerticalScrollIndicator =NO; + self.showRefreshHeader = YES; + self.showRefreshFooter = YES; + [self loadDataSource]; + [self.view addSubview:self.footerView]; + self.tableView.tableHeaderView = self.DetailHeadView; +} + + +- (void)showSheet{ + + if (ISLOGIN) { + UIActionSheet *actionSheet = [[UIActionSheet alloc]initWithTitle:nil + delegate:self + cancelButtonTitle:@"取消" + destructiveButtonTitle:nil + otherButtonTitles:@"分享",@"举报",nil]; + actionSheet.actionSheetStyle = UIActionSheetStyleBlackOpaque; + actionSheet.tag = 300; + [actionSheet showInView:self.view]; + }else{ + [self login]; + } +} + +- (void)actionSheet:(JQActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex +{ + if(actionSheet.tag == 300){ + if (buttonIndex == 0) { + + [self.shareView show]; + __weak typeof(self) weakSelf = self; + [_shareView setShareNumBlock:^{ + weakSelf.headView.itemView.sharesnum = @"1"; + }]; + + }else if(buttonIndex == 1){ + [self clickJubaoBtn]; + } + } +} + +- (QYShareView *)shareView +{ + if (!_shareView) { + _shareView = [[QYShareView alloc]init]; + _shareView.type = @"1"; + } + return _shareView; +} +- (void)clickJubaoBtn{ + IntroduceViewController *reasonVC = [[IntroduceViewController alloc]init]; + reasonVC.titleName = @"举报理由"; + reasonVC.reportID = self.aid; + reasonVC.type = 3; + reasonVC.actType = @"0"; + [self.navigationController pushViewController:reasonVC animated:YES]; +} + +- (EventFooterView *)footerView +{ + if (!_footerView) { + _footerView = [[EventFooterView alloc] initWithFrame:CGRectMake(0, self.tableView.bottom, KSCREEN_WIDTH, 50)]; + [_footerView.commentBtn addTarget:self action:@selector(getCommentClicked) forControlEvents:UIControlEventTouchUpInside]; + [_footerView.joinBtn addTarget:self action:@selector(joinClicked) forControlEvents:UIControlEventTouchUpInside]; + _footerView.hidden =YES; + } + return _footerView; +} + +- (UIView *)DetailHeadView +{ + if (!_DetailHeadView) { + _DetailHeadView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH, KSCREEN_HEIGHT-kTopHeight)]; + _DetailHeadView.hidden = YES; + } + return _DetailHeadView; +} + +- (EventHeadView *)headView +{ + if (!_headView) { + _headView = [[EventHeadView alloc]initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH,0)]; + [_DetailHeadView addSubview:_headView]; + } + return _headView; +} + +- (EventInFnoView *)infoView +{ + if (!_infoView) { + _infoView = [[EventInFnoView alloc]initWithFrame:CGRectMake(0, 0,KSCREEN_WIDTH, 5*45)]; + [_DetailHeadView addSubview:_infoView]; + } + return _infoView; +} + +- (UIView *)TeletextView +{ + if (!_TeletextView) { + _TeletextView = [[UIView alloc]initWithFrame:CGRectMake(0, _infoView.bottom+10, KSCREEN_WIDTH, 100)]; + _TeletextView.backgroundColor = [UIColor whiteColor]; + [_DetailHeadView addSubview:_TeletextView]; + } + return _TeletextView; +} + +- (WKWebView *)myWebView +{ + if (!_myWebView) { + _myWebView = [[WKWebView alloc] initWithFrame:self.TeletextView.bounds]; + _myWebView.navigationDelegate =self; + [_TeletextView addSubview:_myWebView]; + } + return _myWebView; +} + +// 页面开始加载时调用 +- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation +{ + NSLog(@"开始啦"); +} + +// 当内容开始返回时调用 +- (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation +{ + NSLog(@"来东西了"); +} + +// 页面加载完成之后调用 +- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation +{ + __weak typeof(self) weakSelf = self; + [webView evaluateJavaScript:@"document.body.offsetHeight" completionHandler:^(id _Nullable result, NSError * _Nullable error) { + _DetailHeadView.hidden =NO; + _TeletextView.height = [result doubleValue]; + webView.height =[result doubleValue]; + + _DetailHeadView.height = _infoView.bottom+10+[result doubleValue]+_applyView.height+10+_commentView.height+10; + _applyView.top = _TeletextView.bottom+10; + + _commentView.top = _applyView.bottom+10; + weakSelf.tableView.tableHeaderView = _DetailHeadView; + _footerView.hidden =NO; + _rightBtn.hidden = NO; + }]; +} + +// 页面加载失败时调用 +- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation +{ + NSLog(@"失败了"); +} + + +- (ApplyView *)applyView +{ + if (!_applyView) { + _applyView = [[ApplyView alloc]initWithFrame:CGRectMake(0,_TeletextView.bottom+10, KSCREEN_WIDTH,86+10)]; + [_DetailHeadView addSubview:_applyView]; + } + return _applyView; +} + +- (CommentHeadView *)commentView +{ + if (!_commentView) { + _commentView = [[CommentHeadView alloc]initWithFrame:CGRectMake(0, _applyView.bottom+10, KSCREEN_WIDTH,86+10)]; + [_commentView.commentBtn addTarget:self action:@selector(getCommentClicked) forControlEvents:UIControlEventTouchUpInside]; + [_DetailHeadView addSubview:_commentView]; + } + return _commentView; +} + +#pragma mark - UItalbeViewDelegate +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + CommentCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CommentCell"]; + cell.model = self.dataArray[indexPath.row]; + cell.selectionStyle =0; + return cell; +} + +- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + return self.dataArray.count; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + MessageModel *mode = [self.dataArray objectAtIndex:indexPath.row]; + return 58+mode.commentHeight; +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + MessageModel *mode = [self.dataArray objectAtIndex:indexPath.row]; + to_uid = mode.userid; + [self getCommentClicked]; + + [_inputToolbar startEdit:[NSString stringWithFormat:@"回复:%@",mode.pdnickname]]; +} + +#pragma mark - **************** 发消息 + +- (QYInputToolbar *)inputToolbar +{ + if (!_inputToolbar) { + _inputToolbar= [[QYInputToolbar alloc] initWithFrame:CGRectMake(0,0,KSCREEN_WIDTH, KSCREEN_HEIGHT)]; + _inputToolbar.textViewMaxLine =3; + _inputToolbar.delegate = self; + [_inputToolbar startEdit:@"我要评论"]; + } + return _inputToolbar; +} + +-(void)inputToolbar:(QYInputToolbar *)inputToolbar sendContent:(NSString *)sendContent { + // 清空输入框文字 + [_inputToolbar sendSuccessEndEditing]; + [self sentData:sendContent]; +} + +#pragma mark - **************** +- (NSMutableArray *)likeArray +{ + if (!_likeArray) { + _likeArray = [[NSMutableArray alloc]initWithCapacity:0]; + } + return _likeArray; +} + +#pragma mark - **************** btnClicked +/** + * 评论 + */ +- (void)getCommentClicked +{ + if (ISLOGIN) { + [self.inputToolbar startEdit:@"我要评论"]; + }else{ + [self login]; + } +} + +#pragma mark - **************** 报名按钮点击事件 +- (void)joinClicked +{ + if([_footerView.joinBtn.itemLB.text isEqualToString:@"我要报名"]){ + + if (ISLOGIN) { + [self requsetData]; + }else{ + [self login]; + } + } +} + +- (void)requsetData +{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:NetworkFailure toView:self.view]; + return; + } + NSDictionary *parameters = @{ + @"userID":USER_USERID, + @"version":APP_VERSION, + }; + [MBProgressHUD showMessag:@"用户资料查询中" toView:self.view]; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_authQuery block:^(NSDictionary *resultDic, NSError *error) { + [MBProgressHUD hideHUDForView:self.view animated:YES]; + + if ([resultDic[@"retcode"] intValue] ==1) { + + NSDictionary *message = resultDic[@"message"]; + status = [message[@"status"] intValue];// -1未审核 0待审核 1通过 2失败 + if (status == 1) { + ALLWebViewController *allView = [[ALLWebViewController alloc]init]; + allView.titleName = @"活动报名"; + + if (STR_IS_NOT_EMPTY(joinUrlString)) { + allView.urlStr = [NSString stringWithFormat:@"%@%@actid=%@&userid=%@",BASE_URL,joinUrlString,self.aid,USER_USERID]; + }else{ + allView.urlStr = [NSString stringWithFormat:@"%@actid=%@&userid=%@",URL_joint_act,self.aid,USER_USERID]; + } + [allView setActitySuccessBlock:^{ + [self loadDataSource]; + }]; + RootNavigationController *nav = [[RootNavigationController alloc]initWithRootViewController:allView]; + [self presentViewController:nav animated:YES completion:NULL]; + }else{ + [MBProgressHUD showError:@"您还没实名认证快去认证吧!" toView:self.view]; + } + + + }else{ + + [MBProgressHUD showSuccess:resultDic[@"explanation"] toView:self.view]; + + } + }]; +} + + + +#pragma mark - **************** 数据请求 +/** + * 发送消息 + */ +- (void)sentData:(NSString *)text +{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:@"网络异常" toView:self.view]; + return; + } + [MBProgressHUD showMessag:nil toView:self.view]; + NSDictionary *Params = @{@"userid":USER_USERID, + @"actid":self.aid, + @"rduserid":to_uid, + @"words":text, + @"version":APP_VERSION}; + __weak typeof(self) weakSelf = self; + [ZCNetRequestManager postRequestWithParameters:Params subUrl:URL_Publishdiscuss block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + [MBProgressHUD hideHUDForView:self.view animated:YES]; + if ([resultDic[@"retcode"] intValue] == 1) { + to_uid = @""; + MessageModel *model = [[MessageModel alloc]init]; + [model initDict:resultDic[@"message"]]; + [weakSelf.dataArray insertObject:model atIndex:0]; + _footerView.commentBtn.itemLB.text = [NSString stringWithFormat:@"评论(%lu)",(unsigned long)weakSelf.dataArray.count]; + _commentView.commentNum = [NSString stringWithFormat:@"%lu",(unsigned long)weakSelf.dataArray.count]; + if (weakSelf.dataArray.count ==1) { + _DetailHeadView.height = _DetailHeadView.height-53;//43 96 + _commentView.height = 43; + } + weakSelf.tableView.tableHeaderView = _DetailHeadView; + [weakSelf.tableView reloadData]; + [MBProgressHUD showSuccess:resultDic[@"explanation"] toView:self.view]; + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; +} +/** + * 请求数据 + */ +- (void)initActInfo{ + NSDictionary *Params = @{@"userid":HaveUserId, + @"actid":self.aid, + @"version":APP_VERSION}; + __weak typeof(self) weakSelf = self; + + [MBProgressHUD showMessag:nil toView:self.view]; + [ZCNetRequestManager postRequestWithParameters:Params subUrl:URL_ActityDetail block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + [MBProgressHUD hideHUDForView:self.view animated:YES]; + if ([resultDic[@"retcode"] intValue] == 1) { + [weakSelf setHeadInfnoDict:resultDic[@"message"]]; + [weakSelf setShareData:resultDic[@"message"]]; + [weakSelf bottomBtnLab:resultDic[@"message"]]; + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; +} +- (void)setShareData:(NSDictionary *)dict +{ + self.shareView.toUid = self.aid; + _shareView.toName = dict[@"title"]; + _shareView.shareImage = _headView.eventIV.image; + _shareView.actStartTimeAndPlace = [NSString stringWithFormat:@"时间:%@ 地点:%@",dict[@"start_time"],dict[@"area"]]; +} + +- (void)bottomBtnLab:(NSDictionary *)dict +{ + [_footerView setJoinState:status Signstatus:ToString(dict[@"signstatus"])]; +} +#pragma mark - **************** 参加人数数据请求 +- (void) getJoinPersons{ + + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:@"网络异常" toView:self.view]; + return; + } + NSDictionary *Params = @{@"userid":HaveUserId, + @"actid":self.aid, + @"limit":@"7", + @"offset":@"0", + @"version":APP_VERSION}; + __weak typeof(self) weakSelf = self; + [ZCNetRequestManager postRequestWithParameters:Params subUrl:URL_Personlist block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + if ([resultDic[@"retcode"] intValue] == 1) { + [weakSelf.likeArray removeAllObjects]; + for (NSDictionary *dict in resultDic[@"message"]) { + likeModel *model = [[likeModel alloc]init]; + [model initDict:dict]; + [weakSelf.likeArray addObject:model]; + } + weakSelf.applyView.aid = weakSelf.aid; + weakSelf.applyView.ApplyArray = weakSelf.likeArray; + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; +} +- (void)loadDataSource +{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:@"网络异常" toView:self.view]; + return; + } + [self initActInfo]; + [self getCommentList]; +} + + +#pragma mark - **************** 评论网络请求 +- (void)getCommentList +{ + NSDictionary *Params = @{@"userid":HaveUserId, + @"actid":self.aid, + @"limit":@"10", + @"offset":[NSString stringWithFormat:@"%d",self.curepage], + @"version":APP_VERSION}; + [ZCNetRequestManager postRequestWithParameters:Params subUrl:URL_activity_discusswords block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + if ([resultDic[@"retcode"] intValue] == 1) { + if (self.curepage==1 && ARRAY_IS_NOT_EMPTY(self.dataArray)) { + [self.dataArray removeAllObjects]; + } + + for (NSDictionary *dict in resultDic[@"message"]) { + MessageModel *model = [[MessageModel alloc]init]; + [model initDict:dict]; + [self.dataArray addObject:model]; + } + _footerView.commentBtn.itemLB.text = [NSString stringWithFormat:@"评论(%lu)",(unsigned long)self.dataArray.count]; + + [self tableViewDidFinishTriggerHeader:YES reload:YES]; + if (self.dataArray.count>=[resultDic[@"number"] intValue]) { + [self endRefreshingWithNoMoreData]; + }else{ + [self tableViewDidFinishTriggerHeader:NO reload:YES]; + } + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; +} + +- (void)tableViewDidTriggerHeaderRefresh +{ + self.curepage = 1; + [self loadDataSource]; +} + +- (void)tableViewDidTriggerFooterRefresh +{ + self.curepage += 1; + [self getCommentList]; +} + +- (void)login +{ + __weak typeof(self) weakSelf = self; + [ZCTools goLoginSelf:self SeccessBlock:^{ + [weakSelf tableViewDidTriggerHeaderRefresh]; + }]; +} + + +#pragma mark-------数据头部 +- (void)setHeadInfnoDict:(NSDictionary *)dict +{ + status = [dict[@"act_status"] intValue]; + joinUrlString = dict[@"signLink"]; + /** + * 图片的高度 + */ + CGFloat imageHeight = (KSCREEN_WIDTH*9)/16; + /** + * 标题高度 + */ + CGFloat titleHeight = [dict[@"title"] calculateSize:CGSizeMake(KSCREEN_WIDTH-25, 999) font:22].height; + self.headView.height = imageHeight+15+titleHeight+10+14+15; + [self.headView setDataReloadUI:dict ImageHeight:imageHeight TitleLB:titleHeight]; + self.infoView.top = _headView.bottom; + [self setEventDetail:dict]; +} +#pragma mark - **************** html数据 +- (void)setEventDetail:(NSDictionary *)dict +{ + [self.infoView setDataReloadUI:dict areaHeight:0]; + + if (![ToString(dict[@"apply_num"]) isEqualToString:@"0"]) { + self.applyView.height = 90+43; + [self getJoinPersons]; + } + self.applyView.applyNum = ToString(dict[@"apply_num"]);//参加人数 评论数 + + if (![ToString(dict[@"reviews"]) isEqualToString:@"0"]) { + self.commentView.height = 43; + } + self.commentView.commentNum = ToString(dict[@"reviews"]); + NSString * html = [NSString stringWithFormat:@"%@",[dict objectForKey:@"act_details"]]; + [self.myWebView loadHTMLString:html baseURL:nil]; + +} +- (void)viewDidDisappear:(BOOL)animated +{ + [super viewDidDisappear:animated]; +} + + +- (BOOL)textFieldShouldReturn:(UITextField *)textField{ + [textField resignFirstResponder]; + return YES; +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} +@end diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Controller/LikeViewController.h" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Controller/LikeViewController.h" new file mode 100644 index 0000000000000000000000000000000000000000..6627d9813952d80cf853f6f88fe4e3ba2620b6a8 --- /dev/null +++ "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Controller/LikeViewController.h" @@ -0,0 +1,17 @@ +// +// LikeViewController.h +// JQ_ELOVE +// +// Created by chason on 16/7/18. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import +#import "ZCRefreshTableViewController.h" + +@interface LikeViewController :ZCRefreshTableViewController + +@property (nonatomic,strong)NSString *actid; +@property (nonatomic,strong)NSString *type; + +@end diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Controller/LikeViewController.m" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Controller/LikeViewController.m" new file mode 100644 index 0000000000000000000000000000000000000000..4017a2bbf31ea50096ad98783c45fdb8201e33c4 --- /dev/null +++ "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Controller/LikeViewController.m" @@ -0,0 +1,132 @@ +// +// LikeViewController.m +// JQ_ELOVE +// +// Created by chason on 16/7/18. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "LikeViewController.h" +#import "LikeCell.h" + + +@interface LikeViewController () + +@end + +@implementation LikeViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.showRefreshFooter = YES; + self.showRefreshHeader = YES; + [self requestData]; + self.tableView.height = KSCREEN_HEIGHT -kTopHeight; +} + +- (void)tableViewDidTriggerHeaderRefresh +{ + self.curepage = 1; + [self requestData]; +} + +- (void)tableViewDidTriggerFooterRefresh +{ + self.curepage += 1; + [self requestData]; +} + + + +/** + * 创建UITablieViewDelegate + */ + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + static NSString *CellIdentifier = @"LikeCell"; + LikeCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; + if (!cell) { + cell = [[LikeCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; + } + + [cell initDataCell:self.dataArray[indexPath.row]]; + cell.selectionStyle =0; + return cell; +} + +- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + return self.dataArray.count; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + return 98; +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ + + if (ISLOGIN) { + NSDictionary *d = [self.dataArray objectAtIndex:indexPath.row]; + [ZCTools toPersonalHome:d[@"userid"] homeNickname: d[@"nickname"] homeSelf:self]; + }else{ + [ZCTools goLoginSelf:self SeccessBlock:NULL]; + } + +} + + +- (void)requestData{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:NetworkFailure toView:self.view]; + return; + } + [MBProgressHUD showMessag:@"" toView:self.view]; + NSDictionary *Params = @{@"userid":HaveUserId, + @"actid":self.actid, + @"limit":@"10", + @"offset":[NSString stringWithFormat:@"%d",self.curepage], + @"version":APP_VERSION}; + + [ZCNetRequestManager postRequestWithParameters:Params subUrl:URL_Personlist block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + [MBProgressHUD hideHUDForView:self.view animated:YES]; + if ([resultDic[@"retcode"] intValue] == 1) { + if (self.curepage ==1) { + [self.dataArray removeAllObjects]; + } + for (NSDictionary *dict in resultDic[@"message"]) {//近期活动 + [self.dataArray addObject:dict]; + } + self.title = [NSString stringWithFormat:@"参加活动 (%@)",ToString(resultDic[@"number"])]; + } + if ([resultDic[@"number"] intValue] <= self.dataArray.count) { + self.returnmsg = resultDic[@"explanation"]; + [self endRefreshingWithNoMoreData]; + }else{ + [self tableViewDidFinishTriggerHeader:NO reload:YES]; + } + [self tableViewDidFinishTriggerHeader:YES reload:YES]; + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + }]; +} + +- (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/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Controller/MyActivityViewController.h" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Controller/MyActivityViewController.h" new file mode 100644 index 0000000000000000000000000000000000000000..e0b6a932d8d2b25762603652fb1580fb770d582b --- /dev/null +++ "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Controller/MyActivityViewController.h" @@ -0,0 +1,13 @@ +// +// MyActivityViewController.h +// JQQY +// +// Created by Shmily on 2017/11/23. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "ZCRefreshTableViewController.h" + +@interface MyActivityViewController : ZCRefreshTableViewController + +@end diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Controller/MyActivityViewController.m" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Controller/MyActivityViewController.m" new file mode 100644 index 0000000000000000000000000000000000000000..342c3ab9b02075802d6c1427702902dc0f33bed9 --- /dev/null +++ "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Controller/MyActivityViewController.m" @@ -0,0 +1,127 @@ +// +// MyActivityViewController.m +// JQQY +// +// Created by Shmily on 2017/11/23. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "MyActivityViewController.h" +#import "MyActivityCell.h" +#import "ActivityListModel.h" +#import "EventDetailsViewController.h" +@interface MyActivityViewController () + +@end + +@implementation MyActivityViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.title = @"我的活动"; + + [self setTableViewFrame:CGRectMake(0, 0, KSCREEN_WIDTH, KSCREEN_HEIGHT-kTopHeight)]; + [self.tableView registerClass:[MyActivityCell class] forCellReuseIdentifier:@"MyActivityCell"]; + + self.tableView.separatorStyle =0; + self.showRefreshHeader = YES; + self.showRefreshFooter = YES; + [self requestData]; + // Do any additional setup after loading the view. +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + MyActivityCell * cell = [tableView dequeueReusableCellWithIdentifier:@"MyActivityCell"]; + cell.selectionStyle = 0; + cell.model = self.dataArray[indexPath.row]; + return cell; +} + +- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + return self.dataArray.count; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + return (KSCREEN_WIDTH/16*9)+60; +} +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + ActivityListModel *model = self.dataArray[indexPath.row]; + EventDetailsViewController *eventDetailVC =[[EventDetailsViewController alloc]init]; + eventDetailVC.aid = model.actID; + [self.navigationController pushViewController:eventDetailVC animated:YES]; +} + +- (void)tableViewDidTriggerHeaderRefresh +{ + self.curepage = 1; + [self requestData]; +} + +- (void)tableViewDidTriggerFooterRefresh +{ + self.curepage += 1; + [self requestData]; +} + + + +- (void)requestData{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:@"网络异常" toView:self.view]; + return; + } + [MBProgressHUD showMessag:@"" toView:self.view]; + NSDictionary *Params = @{ + @"userid":USER_USERID, + @"limit":@"10", + @"offset":[NSString stringWithFormat:@"%d",self.curepage], + @"version":APP_VERSION, + }; + + [ZCNetRequestManager postRequestWithParameters:Params subUrl:URL_MYACTIVITY_List block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + [MBProgressHUD hideHUDForView:self.view animated:YES]; + if ([resultDic[@"retcode"] intValue] == 1) { + if (self.curepage ==1) { + [self.dataArray removeAllObjects]; + } + for (NSDictionary *dict in resultDic[@"message"]) {//近期活动 + ActivityListModel *model = [[ActivityListModel alloc] init]; + [model initMyActity:dict]; + [self.dataArray addObject:model]; + } + if ([resultDic[@"number"] intValue] <= self.dataArray.count) { + self.returnmsg = resultDic[@"explanation"]; + [self endRefreshingWithNoMoreData]; + }else{ + [self tableViewDidFinishTriggerHeader:NO reload:YES]; + } + [self tableViewDidFinishTriggerHeader:YES reload:YES]; + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; +} + + +- (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/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Model/ActivityListModel.h" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Model/ActivityListModel.h" new file mode 100644 index 0000000000000000000000000000000000000000..d49805cbdb7a2e1e278160e8b5fe4eb27f853433 --- /dev/null +++ "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Model/ActivityListModel.h" @@ -0,0 +1,68 @@ +// +// ActivityListModel.h +// JQ_ELOVE +// +// Created by chason on 16/10/25. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import + +@interface ActivityListModel : NSObject +/** + * 活动id + */ +@property (nonatomic, copy) NSString *actID; +/** + * 活动海报 + */ +@property (nonatomic, copy) NSString *actPictureStr; +/** + * 活动标题 + */ +@property (nonatomic, copy) NSString *actTitleStr; +/** + * 距离报名截止时间 + */ +@property (nonatomic, copy) NSString *actTimeStr; +/** + * 活动举办地区 + */ +@property (nonatomic, copy) NSString *actPlaceStr; +/** + * 活动费用 + */ +@property (nonatomic, copy) NSString *actMoneyStr; + +/** + * cell高度 + */ +@property (nonatomic) CGFloat cellHeight; +/** + * 更多按钮 + */ +@property (nonatomic)BOOL isMore; + +/** + * 结束提示语 + */ +@property (nonatomic,retain)NSString *finishstr; + + +/** + * 是否是往期活动 + */ +@property (nonatomic) BOOL isPassed; + + +@property (nonatomic) NSInteger version; + + +@property (nonatomic,retain)NSString *actStatus; + +- (void)initActivityListModel:(NSDictionary *)activityListDict; + +- (void)initMyActity:(NSDictionary *)dict; + + +@end diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Model/ActivityListModel.m" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Model/ActivityListModel.m" new file mode 100644 index 0000000000000000000000000000000000000000..edb1b3d831e86d3efd13e91daf6900e2dfd2d498 --- /dev/null +++ "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Model/ActivityListModel.m" @@ -0,0 +1,60 @@ +// +// ActivityListModel.m +// JQ_ELOVE +// +// Created by chason on 16/10/25. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "ActivityListModel.h" + +@implementation ActivityListModel + +- (void)initActivityListModel:(NSDictionary *)activityListDict{ + self.actID = activityListDict[@"actid"]; + self.actPictureStr = activityListDict[@"poster"]; + self.actTitleStr = activityListDict[@"title"]; + if([activityListDict[@"maxNum"] intValue] == -1){ + self.actMoneyStr = @"不限人数"; + }else{ + self.actMoneyStr = [NSString stringWithFormat:@"%@人", activityListDict[@"maxNum"]]; + } + self.actPlaceStr = activityListDict[@"city"]; + self.cellHeight = KSCREEN_WIDTH/16*9; + self.isMore =NO; + double dayNum = [activityListDict[@"deadline"] doubleValue] /1000/3600/24; + if(dayNum <= 0){ + if(_isPassed){ + self.actTimeStr = @"活动已结束"; + }else{ + self.actTimeStr = @"报名已截止"; + } + }else if(dayNum >0 && dayNum<1){ + self.actTimeStr = @"报名即将截止"; + }else{ + self.actTimeStr = [NSString stringWithFormat:@"距离报名截止还有 %lld 天",[activityListDict[@"deadline"] longLongValue]/1000/3600/24]; + } + self.version = [activityListDict[@"version"] floatValue]; + +} + +- (void)initMyActity:(NSDictionary *)dict +{ + if (dict) { + self.actTitleStr = dict[@"title"]; + self.actPictureStr = dict[@"poster"]; + self.actPlaceStr = dict[@"address"]; + self.actID = dict[@"recid"]; + self.actTimeStr = dict[@"start"]; + + if ([dict[@"status"] intValue] ==2) {//0 1 2开始 3结束 + self.actStatus = @"已开始"; + }else if ([dict[@"status"] intValue] ==3){ + self.actStatus = @"已结束"; + }else{ + self.actStatus = @"未开始"; + } + } +} + +@end diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Model/MessageModel.h" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Model/MessageModel.h" new file mode 100644 index 0000000000000000000000000000000000000000..155e6ae30e5a026e81f52994815973db45ef7e71 --- /dev/null +++ "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Model/MessageModel.h" @@ -0,0 +1,28 @@ +// +// MessageModel.h +// JQ_ELOVE +// +// Created by Shmily on 16/7/19. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import +#import + +@interface MessageModel : NSObject + +@property (nonatomic, copy) NSString *avatar; +@property (nonatomic, copy) NSString *kind; +@property (nonatomic, copy) NSString *pdnickname; +@property (nonatomic, copy) NSString *recid; +@property (nonatomic, copy) NSString *time; +@property (nonatomic, copy) NSString *userid; +@property (nonatomic, copy) NSMutableAttributedString *words; +@property (nonatomic, copy) NSString *finalWords; +@property (nonatomic, copy) NSString *rdnickname; +@property CGFloat commentHeight; + + +- (void)initDict:(NSDictionary *)dict; + +@end diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Model/MessageModel.m" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Model/MessageModel.m" new file mode 100644 index 0000000000000000000000000000000000000000..5f4d467ea57acdbf740dcb1c86e2d51f52f97196 --- /dev/null +++ "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Model/MessageModel.m" @@ -0,0 +1,35 @@ +// +// MessageModel.m +// JQ_ELOVE +// +// Created by Shmily on 16/7/19. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "MessageModel.h" +#import "NSString+Ext.h" +@implementation MessageModel + +- (void)initDict:(NSDictionary *)dict +{ + self.avatar = dict[@"avatar"]; + self.kind = ToString(dict[@"kind"]); + self.pdnickname = dict[@"pdnickname"]; + self.recid = dict[@"recid"]; + self.time = dict[@"time"]; + self.userid = dict[@"userid"]; + self.rdnickname = dict[@"rdnickname"]; + self.finalWords = dict[@"words"]; + + if (STR_IS_NOT_EMPTY(self.rdnickname)) {//rdnickname + + self.words =[ZCTools attributedTextFrom:[NSString stringWithFormat:@"%@",self.rdnickname] headerStr:@"回复" footerStr:[NSString stringWithFormat:@":%@", dict[@"words"]] value:PURPLECOLOUR textFont:15]; + }else{ + self.words = [[NSMutableAttributedString alloc] initWithString:dict[@"words"] attributes:nil]; ; + } + self.commentHeight = [[self.words string] calculateSize:CGSizeMake(KSCREEN_WIDTH-75, 1000) font:15].height-18; + +} + + +@end diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Model/likeModel.h" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Model/likeModel.h" new file mode 100644 index 0000000000000000000000000000000000000000..d51a61482df29b0c42f63c34be6e37947dd7a537 --- /dev/null +++ "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Model/likeModel.h" @@ -0,0 +1,19 @@ +// +// likeModel.h +// JQ_ELOVE +// +// Created by Shmily on 16/7/20. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import + +@interface likeModel : NSObject + +@property (nonatomic, strong) NSString *avatar; +@property (nonatomic, strong) NSString *userid; +@property (nonatomic, strong) NSString *nickname; + +- (void)initDict:(NSDictionary *)dict; + +@end diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Model/likeModel.m" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Model/likeModel.m" new file mode 100644 index 0000000000000000000000000000000000000000..c7572e53f1215b63d063f4bbd0ba72752ac9e104 --- /dev/null +++ "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Model/likeModel.m" @@ -0,0 +1,23 @@ +// +// likeModel.m +// JQ_ELOVE +// +// Created by Shmily on 16/7/20. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "likeModel.h" + +@implementation likeModel + +- (void)initDict:(NSDictionary *)dict +{ + self.avatar = dict[@"avatar"]; + self.nickname = dict[@"nickname"]; + self.userid = dict[@"userid"]; + +} + + + +@end diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/.DS_Store" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..128e848609ae6382c34d9f3dfb43d2c5228ae569 Binary files /dev/null and "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/.DS_Store" differ diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/Brenshu@2x.png" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/Brenshu@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..fd2c82d446747a23a6c1e781b9353f54b3aa7276 Binary files /dev/null and "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/Brenshu@2x.png" differ diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/Brenshu@3x.png" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/Brenshu@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..271bf69894edbcaf4cf9873d2cdcd391e4c01ccc Binary files /dev/null and "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/Brenshu@3x.png" differ diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/Newpinglun@2x.png" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/Newpinglun@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..f8c6d2410acceb15efb0e6226e25234dc3a6562e Binary files /dev/null and "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/Newpinglun@2x.png" differ diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/Newpinglun@3x.png" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/Newpinglun@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..2792af2230a09ea4cfecc6e0ad9edb388e1779e2 Binary files /dev/null and "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/Newpinglun@3x.png" differ diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/act_baoming@2x.png" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/act_baoming@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..c813b7e4f788f753ddaf86524d4c48ea776c7767 Binary files /dev/null and "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/act_baoming@2x.png" differ diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/act_baoming@3x.png" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/act_baoming@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..edeba574fe29615bb54892c2a3868d672ad0fee0 Binary files /dev/null and "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/act_baoming@3x.png" differ diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/act_look@2x.png" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/act_look@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..a975efb99a118c8c65ad4e8ce64072083932e1e9 Binary files /dev/null and "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/act_look@2x.png" differ diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/act_look@3x.png" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/act_look@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..f89f882c62b63b788da470650206eaea7e355ddb Binary files /dev/null and "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/act_look@3x.png" differ diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/act_message@2x.png" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/act_message@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..6273046007f9cdf3a4412459dacec85300ddc61f Binary files /dev/null and "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/act_message@2x.png" differ diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/act_message@3x.png" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/act_message@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..6e474dddc18b7b9269cfcae55ba2c6cea7ce65d9 Binary files /dev/null and "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/act_message@3x.png" differ diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/act_money@2x.png" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/act_money@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..29624aa676c0df0346dbb5dd467c6451038312b1 Binary files /dev/null and "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/act_money@2x.png" differ diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/act_money@3x.png" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/act_money@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..ae08209426057e6e56d02998b97bccf2321d9d1e Binary files /dev/null and "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/act_money@3x.png" differ diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/act_phone@2x.png" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/act_phone@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..5e2998c922fc9a7564f4f1305c31499a04752071 Binary files /dev/null and "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/act_phone@2x.png" differ diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/act_phone@3x.png" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/act_phone@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..dbdaecf25f5ac84e5a679a051255d484d6f7ad28 Binary files /dev/null and "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/act_phone@3x.png" differ diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/act_place@2x.png" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/act_place@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..4b6e3e1b42c1886041daaf7a1d6126453e57251f Binary files /dev/null and "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/act_place@2x.png" differ diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/act_place@3x.png" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/act_place@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..9c433364be0e741566c98683325f4aa4db5a31e8 Binary files /dev/null and "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/act_place@3x.png" differ diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/act_renshu@2x.png" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/act_renshu@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..3cf9932d5d1236c403033f2be564a849c9d03244 Binary files /dev/null and "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/act_renshu@2x.png" differ diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/act_renshu@3x.png" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/act_renshu@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..b4d2df91d903180fac651c0acd3c9862418358f7 Binary files /dev/null and "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/act_renshu@3x.png" differ diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/act_share@2x.png" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/act_share@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..9e8bbe59cc49b5e5acf96d6e53feab4f34d3a148 Binary files /dev/null and "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/act_share@2x.png" differ diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/act_share@3x.png" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/act_share@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..1bc80d4be2874bc58dc8ce2fcac2a55317e590a4 Binary files /dev/null and "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/act_share@3x.png" differ diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/act_time@2x.png" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/act_time@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..7bff5870bcb5dfb0134e35a8d42719c8563e98e1 Binary files /dev/null and "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/act_time@2x.png" differ diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/act_time@3x.png" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/act_time@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..e0874901d1465ff603f187c11d16f67a1b2b4728 Binary files /dev/null and "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/act_time@3x.png" differ diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/clickLike@2x.png" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/clickLike@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..8adf0fe00f4ee2c06931cf81850d3ef1171972fc Binary files /dev/null and "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/clickLike@2x.png" differ diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/clickLike@3x.png" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/clickLike@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..06e41d8a017ed1554c023b3e273fe1241809090f Binary files /dev/null and "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/clickLike@3x.png" differ diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/icon@2x.png" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/icon@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..f8557669f5e5b1cec1db4c438e328135b07c3811 Binary files /dev/null and "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/icon@2x.png" differ diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/icon@3x.png" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/icon@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..d334d94797cb97547f030923cee8dcda7e946c7f Binary files /dev/null and "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/icon@3x.png" differ diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/like@2x.png" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/like@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..df7affede710d75662f94a1528af322f9067164e Binary files /dev/null and "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/like@2x.png" differ diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/like@3x.png" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/like@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..0574ec547699e31d6af332ccac7dfa3a30799ff5 Binary files /dev/null and "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/like@3x.png" differ diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/msg@2x.png" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/msg@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..6b1dcf38f0791b9e312fd2b6e5f42752b3d1899b Binary files /dev/null and "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/msg@2x.png" differ diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/msg@3x.png" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/msg@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..46bb3b3a65b33bffa8f2132f3cdfd6330d40ee38 Binary files /dev/null and "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/msg@3x.png" differ diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/my_activity@2x.png" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/my_activity@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..c6d2a1d8869618571dd32cf91b6e737b00bc134b Binary files /dev/null and "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/my_activity@2x.png" differ diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/my_activity@3x.png" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/my_activity@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..75e76c1e7587f60f12daf6b9f74e85091efe89f1 Binary files /dev/null and "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/my_activity@3x.png" differ diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/my_dingwei@2x.png" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/my_dingwei@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..22d7ad6093ea04f55297c8df6b594960908494df Binary files /dev/null and "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/my_dingwei@2x.png" differ diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/my_dingwei@3x.png" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/my_dingwei@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..17fb4641bb71d0e72c05c8499d1596f1262df582 Binary files /dev/null and "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/my_dingwei@3x.png" differ diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/xiaosanjiao_down@2x.png" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/xiaosanjiao_down@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..ca3aef53db3ca7ce9faf3a7c82cec0fe783f003e Binary files /dev/null and "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/xiaosanjiao_down@2x.png" differ diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/xiaosanjiao_down@3x.png" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/xiaosanjiao_down@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..1d33cfdb2973ee1665e9068b794fb4dad289ad69 Binary files /dev/null and "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/xiaosanjiao_down@3x.png" differ diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/xiaosanjiao_up@2x.png" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/xiaosanjiao_up@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..60bdd004029f00bfe76bacc92b21da2293d59a6c Binary files /dev/null and "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/xiaosanjiao_up@2x.png" differ diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/xiaosanjiao_up@3x.png" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/xiaosanjiao_up@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..18c5a1cf8981d29f85476f605d0ea64f670ae928 Binary files /dev/null and "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/Resource/xiaosanjiao_up@3x.png" differ diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/.DS_Store" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..75a5985d49609fddb38cf6d3a1865061bcd65f6c Binary files /dev/null and "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/.DS_Store" differ diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/ActivityListCell.h" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/ActivityListCell.h" new file mode 100644 index 0000000000000000000000000000000000000000..4757c98b1bee14f469c9e83a23708db33860e777 --- /dev/null +++ "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/ActivityListCell.h" @@ -0,0 +1,42 @@ +// +// ActivityListCell.h +// JQ_ELOVE +// +// Created by chason on 16/10/25. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import +@class ActivityListModel; + +@interface ActivityListCell : UITableViewCell + +@property (nonatomic, strong) UIView *actListView; +/** + * 活动海报 + */ +@property (nonatomic, strong) UIImageView *actPictureImgView; +/** + * 活动标题 + */ +@property (nonatomic, strong) UILabel *actTitleLab; +/** + * 活动开始时间 + */ +@property (nonatomic, strong) UILabel *actTimeLab; +/** + * 活动举办地区 + */ +@property (nonatomic, strong) UILabel *actPlaceLab; +/** + * 活动费用 + */ +@property (nonatomic, strong) UILabel *actMoneyLab; + +@property (nonatomic, strong) UIVisualEffectView *effectView; + + +- (void)initActivityListCell:(ActivityListModel *)activityListModel; + + +@end diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/ActivityListCell.m" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/ActivityListCell.m" new file mode 100644 index 0000000000000000000000000000000000000000..32559b33a9f61178ccefe3490768d7574ebafe8e --- /dev/null +++ "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/ActivityListCell.m" @@ -0,0 +1,136 @@ +// +// ActivityListCell.m +// JQ_ELOVE +// +// Created by chason on 16/10/25. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "ActivityListCell.h" +#import "ActivityListModel.h" + +@implementation ActivityListCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{ + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if(self){ + self.contentView.backgroundColor = UIColorFromRGB(0xf7f7f7); + [self.contentView addSubview:self.actListView]; + [self.actListView addSubview:self.actPictureImgView]; + [self.actPictureImgView addSubview:self.effectView]; + [self.effectView.contentView addSubview:self.actTitleLab]; + [self.effectView.contentView addSubview:self.actMoneyLab]; + [self.effectView.contentView addSubview:self.actPlaceLab]; + [self.effectView.contentView addSubview:self.actTimeLab]; + } + return self; +} + +- (UIView *)actListView{ + if(!_actListView){ + _actListView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH, KSCREEN_WIDTH/16*9)]; + _actListView.backgroundColor = [UIColor whiteColor]; + } + return _actListView; +} + +- (UIImageView *)actPictureImgView{ + if(!_actPictureImgView){ + _actPictureImgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH, KSCREEN_WIDTH/16*9)]; + _actPictureImgView.backgroundColor = LINECOLOUR; + } + return _actPictureImgView; +} + + +- (UIVisualEffectView *)effectView{ + /* + 毛玻璃的样式(枚举) + UIBlurEffectStyleExtraLight, + UIBlurEffectStyleLight, + UIBlurEffectStyleDark + */ + UIBlurEffect *effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]; + if(!_effectView){ + _effectView = [[UIVisualEffectView alloc] initWithEffect:effect]; + _effectView.frame = CGRectMake(0, _actPictureImgView.height/5*4+1, KSCREEN_WIDTH, _actPictureImgView.height/5); + _effectView.opaque = YES; + } + return _effectView; + + + /* + 毛玻璃的样式(枚举) + UIBlurEffectStyleExtraLight, + UIBlurEffectStyleLight, + UIBlurEffectStyleDark + */ +// UIBlurEffect *effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]; +// if(!_bottomView){ +// _bottomView = [[UIVisualEffectView alloc] initWithEffect:effect]; +// _bottomView.frame = CGRectMake(0, _pictureView.height/5*4, _pictureView.width, _pictureView.height/5); +// _bottomView.opaque = YES; +// } +// return _bottomView; +} + +- (UILabel *)actTitleLab{ + if(!_actTitleLab){ + + _actTitleLab = [[UILabel alloc] initWithFrame:CGRectMake(15, 0, KSCREEN_WIDTH-30-70, _effectView.height/2)]; + _actTitleLab.font = [UIFont systemFontOfSize:18]; + _actTitleLab.textColor = [UIColor whiteColor]; + } + return _actTitleLab; +} + +- (UILabel *)actMoneyLab{ + if(!_actMoneyLab){ + _actMoneyLab = [[UILabel alloc] initWithFrame:CGRectMake(_actTitleLab.right, 0, 70, _effectView.height/2)]; + _actMoneyLab.textAlignment = NSTextAlignmentRight; + _actMoneyLab.font = [UIFont systemFontOfSize:16]; + _actMoneyLab.textColor = [UIColor orangeColor]; + } + return _actMoneyLab; +} + +- (UILabel *)actPlaceLab{ + if(!_actPlaceLab){ + _actPlaceLab = [[UILabel alloc] initWithFrame:CGRectMake(15, _actTitleLab.bottom, KSCREEN_WIDTH/2-25, _effectView.height/2)]; + _actPlaceLab.font = [UIFont systemFontOfSize:13]; + _actPlaceLab.textColor = [UIColor whiteColor]; + } + return _actPlaceLab; +} + +- (UILabel *)actTimeLab{ + if(!_actTimeLab){ + _actTimeLab = [[UILabel alloc] initWithFrame:CGRectMake(_actPlaceLab.right, _actTitleLab.bottom, KSCREEN_WIDTH/2,_effectView.height/2)]; + _actTimeLab.textAlignment = NSTextAlignmentRight; + _actTimeLab.font = [UIFont systemFontOfSize:13]; + _actTimeLab.textColor = [UIColor whiteColor]; + } + return _actTimeLab; +} + +- (void)initActivityListCell:(ActivityListModel *)activityListModel{ + + [_actPictureImgView sd_setImageWithURL:[NSURL URLWithString:activityListModel.actPictureStr] placeholderImage:nil]; + _actTitleLab.text = activityListModel.actTitleStr; + _actMoneyLab.text = activityListModel.actMoneyStr; + _actPlaceLab.text = activityListModel.actPlaceStr; + _actTimeLab.text = activityListModel.actTimeStr; +} + +@end diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/ApplyPersonView.h" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/ApplyPersonView.h" new file mode 100644 index 0000000000000000000000000000000000000000..9fa9c6b30cf7d1595b8b597c8a37155f75a01928 --- /dev/null +++ "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/ApplyPersonView.h" @@ -0,0 +1,19 @@ +// +// ApplyPersonView.h +// JQ_ELOVE +// +// Created by Shmily on 16/10/26. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import +#import "AvatarImageView.h" + +@interface ApplyPersonView : UIView + +@property (nonatomic,retain)AvatarImageView *headImageView; +@property (nonatomic,retain)UILabel *nameLB; + +- (void)initFrame:(CGRect)rect; + +@end diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/ApplyPersonView.m" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/ApplyPersonView.m" new file mode 100644 index 0000000000000000000000000000000000000000..21476f3ea734d2b2c9121dfe29c48a838d8531c4 --- /dev/null +++ "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/ApplyPersonView.m" @@ -0,0 +1,61 @@ +// +// ApplyPersonView.m +// JQ_ELOVE +// +// Created by Shmily on 16/10/26. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "ApplyPersonView.h" + +@implementation ApplyPersonView + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + [self addSubview:self.headImageView]; + [self addSubview:self.nameLB]; + } + return self; +} +//defaultAvatar +- (AvatarImageView *)headImageView{ + if(!_headImageView){ + + _headImageView = [[AvatarImageView alloc] initWithFrame:CGRectMake((self.width-36)/2,0, 36, 36)]; + _headImageView.initialsFont = [UIFont systemFontOfSize:13]; + } + return _headImageView; +} + +- (UILabel *)nameLB +{ + if (!_nameLB) { + _nameLB = [[UILabel alloc]initWithFrame:CGRectMake(0,_headImageView.bottom+8,self.width,13)]; + _nameLB.font = [UIFont systemFontOfSize:12]; +// _nameLB.text = @"12"; + // _nameLB.backgroundColor = [UIColor orangeColor]; + _nameLB.textAlignment = NSTextAlignmentCenter; + } + return _nameLB; +} + + +- (void)initFrame:(CGRect)rect +{ + _headImageView.frame =CGRectMake((rect.size.width-45)/2,0, 45, 45); + _nameLB.frame = CGRectMake(0,_headImageView.bottom+3,self.width,rect.size.height-45); + +} + + +/* +// 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/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/ApplyView.h" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/ApplyView.h" new file mode 100644 index 0000000000000000000000000000000000000000..c24552084f63e4fa03665c1d2683d445f83df3e7 --- /dev/null +++ "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/ApplyView.h" @@ -0,0 +1,22 @@ +// +// ApplyView.h +// JQ_ELOVE +// +// Created by Shmily on 16/10/26. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import + +@interface ApplyView : UIView + +@property (nonatomic,retain)UILabel *titleLB; +@property (nonatomic,retain)UILabel *lineLB; +@property (nonatomic,retain)UILabel *noApplyLB; +@property (nonatomic,retain)UIButton *applyBtn; +@property (nonatomic,copy) NSString *applyNum; +@property (nonatomic,copy) NSString *aid; + +@property (nonatomic,retain)NSMutableArray *ApplyArray; + +@end diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/ApplyView.m" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/ApplyView.m" new file mode 100644 index 0000000000000000000000000000000000000000..195ee06b566e7a8a958555876a9aea1f46e63b74 --- /dev/null +++ "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/ApplyView.m" @@ -0,0 +1,148 @@ +// +// ApplyView.m +// JQ_ELOVE +// +// Created by Shmily on 16/10/26. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "ApplyView.h" +#import "likeModel.h" +#import "ApplyPersonView.h" +#import "TapGestureRecognizer.h" +#import "LikeViewController.h" +#import "EventDetailsViewController.h" +@implementation ApplyView + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + self.backgroundColor = [UIColor whiteColor]; + [self addSubview:self.titleLB]; + [self addSubview:self.lineLB]; + } + return self; +} + +- (UILabel *)titleLB +{ + if (!_titleLB) { + _titleLB = [[UILabel alloc]initWithFrame:CGRectMake(15,0,200,43)]; + _titleLB.font = [UIFont systemFontOfSize:16]; + _titleLB.text = @"已报名(20)"; + } + return _titleLB; +} + +- (UILabel *)lineLB +{ + if (!_lineLB) { + _lineLB = [[UILabel alloc]initWithFrame:CGRectMake(10,_titleLB.bottom-0.5, self.width-20, 0.5)]; + _lineLB.backgroundColor = LINECOLOUR; + } + return _lineLB; +} + +- (UILabel *)noApplyLB +{ + if (!_noApplyLB) { + _noApplyLB = [[UILabel alloc]initWithFrame:CGRectMake(15,_lineLB.bottom,300,43)]; + _noApplyLB.font = [UIFont systemFontOfSize:13]; + _noApplyLB.text = @"亲,还么有人报名,快来成为活动第一人吧!"; + _noApplyLB.textColor = UIColorFromRGB(0x999999); + [self addSubview:self.noApplyLB]; + } + return _noApplyLB; +} + +- (void)setApplyNum:(NSString *)applyNum +{ + _titleLB.text = [NSString stringWithFormat:@"已报名(%@)",applyNum]; + if ([applyNum isEqualToString:@"0"]) { + self.noApplyLB.hidden =NO; + }else{ + self.noApplyLB.hidden =YES; + if ([applyNum intValue] >7) { + self.applyBtn.hidden =NO; + }else{ + self.applyBtn.hidden =YES; + } + } + +} + +- (UIButton *)applyBtn +{ + if (!_applyBtn) { + _applyBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _applyBtn.frame = CGRectMake(self.width-10-70,0,70, 43); + [_applyBtn setTitle:@"更多报名" forState:0]; + [_applyBtn setTitleColor:UIColorFromRGB(0x30aee9) forState:0]; + _applyBtn.titleLabel.font = [UIFont systemFontOfSize:16]; + [_applyBtn addTarget:self action:@selector(getMorePerson) forControlEvents:UIControlEventTouchUpInside]; + [self addSubview:_applyBtn]; + + } + return _applyBtn; +} + +- (void)getMorePerson +{ + LikeViewController *likeVC = [[LikeViewController alloc]init]; + likeVC.actid = self.aid; + [self.firstViewController.navigationController pushViewController:likeVC animated:YES]; +} + + + + +- (void)setApplyArray:(NSMutableArray *)ApplyArray +{ + CGFloat side = (self.width-20)/7; + + for (UIView *v in self.subviews) { + if ([NSStringFromClass([v class]) isEqualToString:@"ApplyPersonView"]) { + [v removeFromSuperview]; + } + } + + + if (ARRAY_IS_NOT_EMPTY(ApplyArray)) { + + for (int i=0; i + +@interface BottomBtnView : UIView + +/** + * 人数图标 + */ +@property (nonatomic,strong) UIImageView *peopleNumImg; + +/** + * 人数lab + */ +@property (nonatomic,strong) UILabel *peopleNumLab; + +/** + * 分隔线 + */ +@property (nonatomic,strong) UILabel *line; + +/** + * 参加或取消按钮 + */ +@property (nonatomic,strong) UIButton *joinOrCancelBtn; + +@end diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/BottomBtnView.m" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/BottomBtnView.m" new file mode 100644 index 0000000000000000000000000000000000000000..2e1617b7d27a2a149cdeb4380b70c56afb4fd0b2 --- /dev/null +++ "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/BottomBtnView.m" @@ -0,0 +1,55 @@ +// +// BottomBtnView.m +// JQ_ELOVE +// +// Created by chason on 16/8/1. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "BottomBtnView.h" + +@implementation BottomBtnView + +- (id)initWithFrame:(CGRect)frame{ + self = [super initWithFrame:frame]; + if(self){ + [self addSubview:self.peopleNumLab]; + [self addSubview:self.peopleNumImg]; + [self addSubview:self.joinOrCancelBtn]; + [self addSubview:self.line]; + } + return self; +} + +- (UILabel *)peopleNumLab{ + if(!_peopleNumLab){ + _peopleNumLab = [[UILabel alloc]initWithFrame:CGRectMake((KSCREEN_WIDTH/2-80)/2+10, 0, 80, 44)]; + _peopleNumLab.textColor = [UIColor whiteColor]; + } + return _peopleNumLab; +} + +- (UIImageView *)peopleNumImg{ + if(!_peopleNumImg){ + _peopleNumImg = [[UIImageView alloc]initWithFrame:CGRectMake(_peopleNumLab.left-20, 11, 20, 20)]; + _peopleNumImg.image = [UIImage imageNamed:@"Brenshu"]; + } + return _peopleNumImg; +} + +- (UIButton *)joinOrCancelBtn{ + if(!_joinOrCancelBtn){ + _joinOrCancelBtn = [[UIButton alloc]initWithFrame:CGRectMake(KSCREEN_WIDTH/2, 0, KSCREEN_WIDTH/2, 44)]; + } + return _joinOrCancelBtn; +} + +- (UILabel *)line{ + if(!_line){ + _line = [[UILabel alloc]initWithFrame:CGRectMake(_joinOrCancelBtn.left, 8, 0.5, 44-16)]; + _line.backgroundColor = LINECOLOUR; + } + return _line; +} + +@end diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/BottomView.h" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/BottomView.h" new file mode 100644 index 0000000000000000000000000000000000000000..41792b4c78bda308997f18abe240a3e76b932904 --- /dev/null +++ "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/BottomView.h" @@ -0,0 +1,39 @@ +// +// BottomView.h +// JQ_ELOVE +// +// Created by chason on 16/7/19. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import +@class ImageTextButton; + +@interface BottomView : UIView + +/** + * 留言 + */ +@property (nonatomic,strong)ImageTextButton *messageBtn; + +/** + * 点赞 + */ +@property (nonatomic,strong)ImageTextButton *likeBtn; + + +/** + * 横线 + */ +@property (nonatomic,strong)UILabel *hline; + +/** + * 竖线 + */ +@property (nonatomic,strong)UILabel *vline; + + + + + +@end diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/BottomView.m" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/BottomView.m" new file mode 100644 index 0000000000000000000000000000000000000000..8be52cb9a0892ec59ed5ad644f9ee1f0378fb027 --- /dev/null +++ "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/BottomView.m" @@ -0,0 +1,60 @@ +// +// BottomView.m +// JQ_ELOVE +// +// Created by chason on 16/7/19. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "BottomView.h" +#import "ImageTextButton.h" + +@implementation BottomView + +- (id)initWithFrame:(CGRect)frame{ + self = [super initWithFrame:frame]; + if(self){ + self.backgroundColor = [UIColor whiteColor]; + [self addSubview:self.messageBtn]; + [self addSubview:self.likeBtn]; + [self addSubview:self.hline]; + [self addSubview:self.vline]; + } + return self; +} + +- (ImageTextButton *)messageBtn{ + if(!_messageBtn){ + _messageBtn = [[ImageTextButton alloc]initWithFrame:CGRectMake(0, 0, self.width/2, self.height)]; + _messageBtn.ImageView.image = [UIImage imageNamed:@"msg"]; + } + return _messageBtn; +} + +- (UILabel *)vline{ + if(!_vline){ + _vline = [[UILabel alloc]initWithFrame:CGRectMake(_messageBtn.right, 5, 0.5, 30)]; + _vline.backgroundColor = LINECOLOUR; + } + return _vline; +} + +- (ImageTextButton *)likeBtn{ + if(!_likeBtn){ + _likeBtn = [[ImageTextButton alloc]initWithFrame:CGRectMake(self.width/2, 0, self.width/2, self.height)]; + } + return _likeBtn; +} + +- (UILabel *)hline{ + if(!_hline){ + _hline = [[UILabel alloc]initWithFrame:CGRectMake(0,self.height-0.5, self.width, 0.5)]; + _hline.backgroundColor = LINECOLOUR; + } + return _hline; +} + + + + +@end diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/CommentCell.h" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/CommentCell.h" new file mode 100644 index 0000000000000000000000000000000000000000..76ffd68cc68ff3a1301c19b53bf3a4aa06652ad1 --- /dev/null +++ "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/CommentCell.h" @@ -0,0 +1,23 @@ +// +// CommentCell.h +// JQ_ELOVE +// +// Created by Shmily on 16/10/26. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import +@class MessageModel,AvatarImageView; +@interface CommentCell : UITableViewCell + + +@property (nonatomic,retain) AvatarImageView *headIV; +@property (nonatomic, strong) UILabel *nameLB; +@property (nonatomic, strong) UILabel *timeLB; +@property (nonatomic, strong) UILabel *commentLB; +@property (nonatomic, strong) UILabel *lineLB; + +@property (nonatomic, strong) MessageModel *model; + + +@end diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/CommentCell.m" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/CommentCell.m" new file mode 100644 index 0000000000000000000000000000000000000000..3c3ac9886eb211edc7ce546722c1fc5d9e398455 --- /dev/null +++ "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/CommentCell.m" @@ -0,0 +1,128 @@ +// +// CommentCell.m +// JQ_ELOVE +// +// Created by Shmily on 16/10/26. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "CommentCell.h" +#import "MessageModel.h" +#import "TapGestureRecognizer.h" +#import "UIView+FirstViewController.h" +#import "AvatarImageView.h" + +@implementation CommentCell + +- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier +{ + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + [self addSubview:self.headIV]; + [self addSubview:self.nameLB]; + [self addSubview:self.timeLB]; + [self addSubview:self.commentLB]; + [self addSubview:self.lineLB]; + } + return self; +} + +- (AvatarImageView *)headIV +{ + if (!_headIV) { + _headIV = [[AvatarImageView alloc]initWithFrame:CGRectMake(15,9,36,36)]; + _headIV.initialsFont = [UIFont systemFontOfSize:13]; + TapGestureRecognizer *tap = [[TapGestureRecognizer alloc]initWithTarget:self action:@selector(gotoUserHome)]; + [_headIV addGestureRecognizer:tap]; + } + return _headIV; +} + + + +- (UILabel *)nameLB +{ + if (!_nameLB) { + _nameLB = [[UILabel alloc]initWithFrame:CGRectMake(_headIV.right+10,_headIV.top+3, KSCREEN_WIDTH-_headIV.right-110,15)]; + //_nameLB.backgroundColor = [UIColor redColor]; + _nameLB.font = [UIFont systemFontOfSize:14]; + } + return _nameLB; +} + +- (UILabel *)timeLB +{ + if (!_timeLB) { + _timeLB = [[UILabel alloc]initWithFrame:CGRectMake(KSCREEN_WIDTH-135,_nameLB.top, 120,15)]; + _timeLB.textAlignment =NSTextAlignmentRight; + _timeLB.font = [UIFont systemFontOfSize:14]; + _timeLB.textColor = UIColorFromRGB(0x999999); + //_timeLB.backgroundColor = [UIColor orangeColor]; + } + return _timeLB; +} + + +- (UILabel *)commentLB +{ + if (!_commentLB) { + _commentLB = [[UILabel alloc]initWithFrame:CGRectMake(_headIV.right+10,_nameLB.bottom+7, KSCREEN_WIDTH-75,16)]; + _commentLB.font = [UIFont systemFontOfSize:15]; + _commentLB.numberOfLines =0; + //_commentLB.backgroundColor = [UIColor orangeColor]; + _commentLB.textColor = UIColorFromRGB(0x666666); + } + return _commentLB; +} + + +- (UILabel *)lineLB +{ + if (!_lineLB) { + _lineLB = [[UILabel alloc]initWithFrame:CGRectMake(15,58-0.5,KSCREEN_WIDTH-30,0.5)]; + _lineLB.backgroundColor = LINECOLOUR; + } + return _lineLB; + +} + + + + +- (void)setModel:(MessageModel *)model +{ + if (_model) { + _model = nil; + } + _model = model; + [_headIV setTitle:_model.pdnickname imageUrl:_model.avatar]; + _nameLB.text = _model.pdnickname; + _timeLB.text = model.time; + + _commentLB.attributedText = _model.words; + _commentLB.height =model.commentHeight+18; + _lineLB.top = 58+_model.commentHeight-0.5; +} + + +- (void)gotoUserHome +{ + if (ISLOGIN) { + [ZCTools toPersonalHome:_model.userid homeNickname:@"" homeSelf:self.firstViewController]; + }else{ + [ZCTools goLoginSelf:self.firstViewController SeccessBlock:NULL]; + + } +} + + + + + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +@end diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/CommentHeadView.h" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/CommentHeadView.h" new file mode 100644 index 0000000000000000000000000000000000000000..9ce3b71eed2b0e7a1685fde94566119743495a1a --- /dev/null +++ "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/CommentHeadView.h" @@ -0,0 +1,22 @@ +// +// CommentHeadView.h +// JQ_ELOVE +// +// Created by Shmily on 16/10/26. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import + +@interface CommentHeadView : UIView + +@property (nonatomic,retain)UILabel *titleLB; +@property (nonatomic,retain)UILabel *lineLB; +@property (nonatomic,retain)UIButton *commentBtn; +@property (nonatomic,retain)UILabel *noApplyLB; + +@property (nonatomic,copy) NSString *commentNum; + + + +@end diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/CommentHeadView.m" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/CommentHeadView.m" new file mode 100644 index 0000000000000000000000000000000000000000..a5d21bf8846e2c0acf20cddc31947d653b547f7c --- /dev/null +++ "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/CommentHeadView.m" @@ -0,0 +1,91 @@ +// +// CommentHeadView.m +// JQ_ELOVE +// +// Created by Shmily on 16/10/26. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "CommentHeadView.h" + +@implementation CommentHeadView + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + self.backgroundColor = [UIColor whiteColor]; + [self addSubview:self.titleLB]; + [self addSubview:self.lineLB]; + } + return self; +} + +- (UILabel *)titleLB +{ + if (!_titleLB) { + _titleLB = [[UILabel alloc]initWithFrame:CGRectMake(15,0,200,43)]; + _titleLB.font = [UIFont systemFontOfSize:16]; + _titleLB.text = @"评论(20)"; + } + return _titleLB; +} + +- (UILabel *)lineLB +{ + if (!_lineLB) { + _lineLB = [[UILabel alloc]initWithFrame:CGRectMake(15,_titleLB.bottom-0.5, self.width-30, 0.5)]; + _lineLB.backgroundColor = LINECOLOUR; + } + return _lineLB; +} + +- (UILabel *)noApplyLB +{ + if (!_noApplyLB) { + _noApplyLB = [[UILabel alloc]initWithFrame:CGRectMake(15,_lineLB.bottom,300,43)]; + _noApplyLB.font = [UIFont systemFontOfSize:13]; + _noApplyLB.text = @"亲,还么有人评论,快来抢个沙发吧!"; + _noApplyLB.textColor = UIColorFromRGB(0x999999); + [self addSubview:self.noApplyLB]; + } + return _noApplyLB; +} + +- (UIButton *)commentBtn +{ + if (!_commentBtn) { + _commentBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _commentBtn.frame = CGRectMake(self.width-10-70,0,70, 43); + [_commentBtn setTitle:@"我要讨论" forState:0]; + [_commentBtn setTitleColor:UIColorFromRGB(0x30aee9) forState:0]; + _commentBtn.titleLabel.font = [UIFont systemFontOfSize:16]; + // [self addSubview:self.commentBtn]; + + } + return _commentBtn; +} + +- (void)setCommentNum:(NSString *)commentNum +{ + _titleLB.text = [NSString stringWithFormat:@"评论(%@)",commentNum]; + if ([commentNum isEqualToString:@"0"]) { + self.noApplyLB.hidden =NO; + //self.commentBtn.hidden = YES; + }else{ + self.noApplyLB.hidden =YES; + //self.commentBtn.hidden =NO; + } + +} + + +/* +// 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/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/EventFootBtn.h" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/EventFootBtn.h" new file mode 100644 index 0000000000000000000000000000000000000000..3b89384568c893a21c1178abb3b7d857cfddac45 --- /dev/null +++ "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/EventFootBtn.h" @@ -0,0 +1,20 @@ +// +// EventFootBtn.h +// JQ_ELOVE +// +// Created by Shmily on 16/10/26. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import + +@interface EventFootBtn : UIButton + +- (id)initWithFrame:(CGRect)frame Style:(int)style; + +@property (nonatomic,retain)UIImageView *imageV; +@property (nonatomic,retain)UILabel *itemLB; + +- (void)setNewShangCount:(CGFloat)s_count; + +@end diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/EventFootBtn.m" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/EventFootBtn.m" new file mode 100644 index 0000000000000000000000000000000000000000..2d127eb4477a1ebfb8c03dd71bcf26c0f7e0c696 --- /dev/null +++ "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/EventFootBtn.m" @@ -0,0 +1,78 @@ +// +// EventFootBtn.m +// JQ_ELOVE +// +// Created by Shmily on 16/10/26. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "EventFootBtn.h" + +@implementation EventFootBtn + +- (id)initWithFrame:(CGRect)frame Style:(int)style +{ + self = [super initWithFrame:frame]; + if (self) { + + [self addSubview:self.imageV]; + [self addSubview:self.itemLB]; + if (style ==1) {//聊天 + self.backgroundColor = UIColorFromRGB(0xffffff); + _itemLB.font = [UIFont systemFontOfSize:13]; + _itemLB.textColor = UIColorFromRGB(0x999999); + _imageV.frame = CGRectMake((self.width-23)/2, (self.height-22-14-5)/2, 23, 22); + _itemLB.frame =CGRectMake(0, _imageV.bottom+5, self.width,14); + _itemLB.text = @"评论(0)"; + }else if (style ==2){//参加 + self.backgroundColor = UIColorFromRGB(0x079ae8); + _itemLB.font = [UIFont systemFontOfSize:16]; + _itemLB.textColor = UIColorFromRGB(0xffffff); + _imageV.frame = CGRectMake((self.width-23-7-70)/2, (self.height-25)/2, 23, 25); + _itemLB.frame =CGRectMake(_imageV.right+7,(self.height-17)/2,70,17); + _itemLB.text = @"我要报名"; + }else if (style ==3){//打赏 + self.backgroundColor = UIColorFromRGB(0xffffff); + _itemLB.font = [UIFont systemFontOfSize:12]; + _itemLB.textColor = CTHEMECOLOR; + _imageV.frame = CGRectMake(0,(self.height-14)/2,14,14); + _imageV.image = [UIImage imageNamed:@"shang"]; + + _itemLB.text = @"0"; + }else if (style ==4){//评论 + self.backgroundColor = UIColorFromRGB(0xffffff); + _itemLB.font = [UIFont systemFontOfSize:12]; + _itemLB.textColor = UIColorFromRGB(0x888888); + _imageV.image = [UIImage imageNamed:@"Newpinglun"]; + _imageV.frame = CGRectMake(0,(self.height-14)/2,15,14); + _itemLB.text = @"0"; + } + } + return self; +} + +- (UIImageView *)imageV +{ + if (!_imageV) { + _imageV = [[UIImageView alloc] init]; + } + return _imageV; +} + +- (UILabel *)itemLB +{ + if (!_itemLB) { + _itemLB = [[UILabel alloc] init]; + _itemLB.textAlignment = NSTextAlignmentCenter; + } + return _itemLB; +} + +- (void)setNewShangCount:(CGFloat)s_count +{ + _itemLB.frame = CGRectMake(_imageV.right+7,(self.height-17)/2,s_count,17); +} + + + +@end diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/EventFooterView.h" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/EventFooterView.h" new file mode 100644 index 0000000000000000000000000000000000000000..4c2292d728dc109690b6052f33d6ef3a08caddec --- /dev/null +++ "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/EventFooterView.h" @@ -0,0 +1,22 @@ +// +// EventFooterView.h +// JQ_ELOVE +// +// Created by Shmily on 16/10/26. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import +#import "EventFootBtn.h" + +@interface EventFooterView : UIView + +@property (nonatomic,retain)EventFootBtn *commentBtn; +@property (nonatomic,retain)EventFootBtn *joinBtn; + +@property (nonatomic,retain)UILabel *lineLB; + +- (void)setJoinState:(NSInteger)status Signstatus:(NSString *)signstatus; + + +@end diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/EventFooterView.m" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/EventFooterView.m" new file mode 100644 index 0000000000000000000000000000000000000000..b545061ed9f5ee7fc9c978c0188d9fdeeae72c1f --- /dev/null +++ "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/EventFooterView.m" @@ -0,0 +1,76 @@ +// +// EventFooterView.m +// JQ_ELOVE +// +// Created by Shmily on 16/10/26. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "EventFooterView.h" +@implementation EventFooterView + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + self.backgroundColor = [UIColor whiteColor]; + [self addSubview:self.commentBtn]; + [self addSubview:self.joinBtn]; + [self addSubview:self.lineLB]; + } + return self; +} +- (EventFootBtn *)commentBtn +{ + if (!_commentBtn) { + _commentBtn = [[EventFootBtn alloc]initWithFrame:CGRectMake(0, 0, self.width/2, self.height) Style:1]; + _commentBtn.imageV.image = [UIImage imageNamed:@"act_message"]; + } + return _commentBtn; +} +- (EventFootBtn *)joinBtn +{ + if (!_joinBtn) { + _joinBtn = [[EventFootBtn alloc]initWithFrame:CGRectMake(_commentBtn.right, 0, self.width/2, self.height) Style:2]; + _joinBtn.imageV.image = [UIImage imageNamed:@"act_baoming"]; + } + return _joinBtn; +} +- (UILabel *)lineLB +{ + if (!_lineLB) { + _lineLB = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, self.width, 0.5)]; + _lineLB.backgroundColor = LINECOLOUR; + } + return _lineLB; +} +- (void)setJoinState:(NSInteger)status Signstatus:(NSString *)signstatus +{ + if(status == 0){ + _joinBtn.enabled = YES; + _joinBtn.backgroundColor = UIColorFromRGB(0x079ae8); + if([signstatus isEqualToString:@"-1"]){ + _joinBtn.itemLB.text = @"我要报名"; + }else if([signstatus isEqualToString:@"1"]){ + _joinBtn.itemLB.text = @"审核中"; + }else if([signstatus isEqualToString:@"2"]){ + _joinBtn.itemLB.text = @"报名成功"; + }else if([signstatus isEqualToString:@"3"]){ + _joinBtn.itemLB.text = @"我要报名"; + }else if([signstatus isEqualToString:@"4"]){ + _joinBtn.itemLB.text = @"待付款"; + _joinBtn.backgroundColor = CTHEMECOLOR; + } + }else{ + _joinBtn.enabled = NO; + _joinBtn.backgroundColor = [UIColor lightGrayColor]; + if(status == 1){ + _joinBtn.itemLB.text = @"报名截止"; + }else if(status == 2){ + _joinBtn.itemLB.text = @"已开始"; + }else if(status == 3){ + _joinBtn.itemLB.text = @"已结束"; + } + } +} +@end diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/EventHeadView.h" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/EventHeadView.h" new file mode 100644 index 0000000000000000000000000000000000000000..56769054260bcf46625f7834386716976fceb3c1 --- /dev/null +++ "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/EventHeadView.h" @@ -0,0 +1,24 @@ +// +// EventHeadView.h +// JQ_ELOVE +// +// Created by Shmily on 16/10/25. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import +#import "EventItemView.h" +@interface EventHeadView : UIView + +@property (nonatomic,retain)UIImageView *eventIV; +@property (nonatomic,retain)UILabel *eventLB; +@property (nonatomic,retain)EventItemView *itemView; +@property (nonatomic,retain)UILabel *lineLB; + +- (void)setDataReloadUI:(NSDictionary *)tempDict ImageHeight:(CGFloat)IV_Height TitleLB:(CGFloat)LB_Height; + + + + + +@end diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/EventHeadView.m" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/EventHeadView.m" new file mode 100644 index 0000000000000000000000000000000000000000..3a8fda6abd1eb29060c598816d41f709f7fbadc2 --- /dev/null +++ "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/EventHeadView.m" @@ -0,0 +1,93 @@ +// +// EventHeadView.m +// JQ_ELOVE +// +// Created by Shmily on 16/10/25. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "EventHeadView.h" +@implementation EventHeadView + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + self.backgroundColor = [UIColor whiteColor]; + [self addSubview:self.eventIV]; + [self addSubview:self.eventLB]; + [self addSubview:self.itemView]; + [self addSubview:self.lineLB]; + } + return self; +} + +- (UIImageView *)eventIV +{ + if (!_eventIV) { + _eventIV = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH,0)]; + _eventIV.backgroundColor = [UIColor lightGrayColor]; + [_eventIV setContentScaleFactor:[[UIScreen mainScreen] scale]]; + _eventIV.contentMode = UIViewContentModeScaleAspectFill; + _eventIV.clipsToBounds = YES; + } + return _eventIV; +} + +- (UILabel *)eventLB +{ + if (!_eventLB) { + _eventLB = [[UILabel alloc]initWithFrame:CGRectMake(15,_eventIV.bottom+15,self.width-25, 20)]; +// _eventLB.backgroundColor = [UIColor orangeColor]; + _eventLB.font = [UIFont systemFontOfSize:22]; + _eventLB.numberOfLines =0; + } + return _eventLB; +} + +- (EventItemView *)itemView +{ + if (!_itemView) { + _itemView = [[EventItemView alloc]initWithFrame:CGRectMake(0, _eventLB.bottom+10, self.width,14)]; + } + return _itemView; +} + +- (UILabel *)lineLB +{ + if (!_lineLB) { + _lineLB = [[UILabel alloc]initWithFrame:CGRectMake(0, self.height-0.5, KSCREEN_WIDTH, 0.5)]; + _lineLB.backgroundColor = LINECOLOUR; + } + return _lineLB; +} + + +- (void)setDataReloadUI:(NSDictionary *)tempDict ImageHeight:(CGFloat)IV_Height TitleLB:(CGFloat)LB_Height +{ + _eventIV.height = IV_Height; + [_eventIV sd_setImageWithURL:[NSURL URLWithString:tempDict[@"picture"]] placeholderImage:NULL]; + + _eventLB.top =_eventIV.bottom+15; + _eventLB.height = LB_Height; + _eventLB.text = tempDict[@"title"]; + + _itemView.top = _eventLB.bottom+10; + _itemView.tempDict = tempDict; + _lineLB.top = _itemView.bottom+15-0.5; +} + + + + + + +/* +// 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/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/EventInFnoView.h" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/EventInFnoView.h" new file mode 100644 index 0000000000000000000000000000000000000000..db5d60b35475e9daebb8ed12d8ed70f83b9dc5ac --- /dev/null +++ "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/EventInFnoView.h" @@ -0,0 +1,29 @@ +// +// EventInFnoView.h +// JQ_ELOVE +// +// Created by Shmily on 16/10/25. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import + +#import "EventDetailView.h" + + +@interface EventInFnoView : UIView +{ + NSDictionary *tempDict; +} +@property (nonatomic,retain)EventDetailView *timeDetailView; +@property (nonatomic,retain)EventDetailView *areaDetailView; +@property (nonatomic,retain)EventDetailView *personDetailView; +@property (nonatomic,retain)EventDetailView *moneyDetailView; +@property (nonatomic,retain)EventDetailView *hosterDetailView; + +@property (nonatomic,retain)UILabel *lineLB; + +- (void)setDataReloadUI:(NSDictionary *)dict areaHeight:(NSInteger)areaHeight; + + +@end diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/EventInFnoView.m" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/EventInFnoView.m" new file mode 100644 index 0000000000000000000000000000000000000000..71cc258a4afe2376fa587d30cf6a41f505cba35f --- /dev/null +++ "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/EventInFnoView.m" @@ -0,0 +1,127 @@ +// +// EventInFnoView.m +// JQ_ELOVE +// +// Created by Shmily on 16/10/25. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "EventInFnoView.h" +#import "TapGestureRecognizer.h" + + +@implementation EventInFnoView + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + self.backgroundColor = [UIColor whiteColor]; + [self addSubview:self.timeDetailView]; + [self addSubview:self.areaDetailView]; + [self addSubview:self.personDetailView]; + [self addSubview:self.moneyDetailView]; + [self addSubview:self.hosterDetailView]; + + + } + return self; +} +- (EventDetailView *)timeDetailView +{ + if (!_timeDetailView) { + _timeDetailView = [[EventDetailView alloc]initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH, 45)]; + _timeDetailView.nextView.hidden = YES; + _timeDetailView.itemLabel.width = _timeDetailView.itemLabel.width+30; + _timeDetailView.iconView.image = [UIImage imageNamed:@"act_time"]; + } + return _timeDetailView; +} +- (EventDetailView *)areaDetailView +{ + if (!_areaDetailView) { + _areaDetailView = [[EventDetailView alloc]initWithFrame:CGRectMake(0,_timeDetailView.bottom, KSCREEN_WIDTH, 45)]; + TapGestureRecognizer *tap = [[TapGestureRecognizer alloc]initWithTarget:self action:@selector(gotoMap)]; + [_areaDetailView addGestureRecognizer:tap]; + _areaDetailView.iconView.image = [UIImage imageNamed:@"act_place"]; + } + return _areaDetailView; +} +- (EventDetailView *)personDetailView +{ + if (!_personDetailView) { + _personDetailView = [[EventDetailView alloc]initWithFrame:CGRectMake(0,_areaDetailView.bottom, KSCREEN_WIDTH, 45)]; + _personDetailView.nextView.hidden = YES; + _personDetailView.iconView.image = [UIImage imageNamed:@"act_renshu"]; + } + return _personDetailView; +} +- (EventDetailView *)moneyDetailView +{ + if (!_moneyDetailView) { + _moneyDetailView = [[EventDetailView alloc]initWithFrame:CGRectMake(0,_personDetailView.bottom, KSCREEN_WIDTH, 45)]; + _moneyDetailView.itemLabel.textColor =UIColorFromRGB(0xf8a23b); + _moneyDetailView.iconView.image = [UIImage imageNamed:@"act_money"]; + _moneyDetailView.nextView.hidden = YES; + } + return _moneyDetailView; +} +- (EventDetailView *)hosterDetailView +{ + if (!_hosterDetailView) { + _hosterDetailView = [[EventDetailView alloc]initWithFrame:CGRectMake(0,_moneyDetailView.bottom, KSCREEN_WIDTH, 45)]; + _hosterDetailView.lineLB.left = 0; + _hosterDetailView.lineLB.width = KSCREEN_WIDTH; + _hosterDetailView.iconView.image = [UIImage imageNamed:@"act_phone"]; + TapGestureRecognizer *tap = [[TapGestureRecognizer alloc]initWithTarget:self action:@selector(showHoster)]; + [_hosterDetailView addGestureRecognizer:tap]; + } + return _hosterDetailView; +} + + +- (void)setDataReloadUI:(NSDictionary *)dict areaHeight:(NSInteger)areaHeight +{ + tempDict = dict; + _timeDetailView.itemLabel.text = [NSString stringWithFormat:@"%@~%@",dict[@"start_time"],dict[@"finish_time"]]; + _areaDetailView.itemLabel.text =dict[@"area"]; + + if ([ToString(dict[@"maxnum"]) isEqualToString:@"-1"]) { + _personDetailView.itemLabel.text = [NSString stringWithFormat:@"已报名%@人/人数无限制",ToString(dict[@"apply_num"])]; + }else{ + _personDetailView.itemLabel.text = [NSString stringWithFormat:@"已报名%@人/限%@报名",ToString(dict[@"apply_num"]),ToString(dict[@"maxnum"])]; + } + _moneyDetailView.itemLabel.text = dict[@"pricerange"]; + _hosterDetailView.itemLabel.text = [NSString stringWithFormat:@"%@ - %@",dict[@"linkname"],dict[@"linkphone"]]; +} +- (void)gotoMap +{ + NSString * lat = tempDict[@"latitude"]; + NSString * lng = tempDict[@"longitude"]; + + + [[MapManager instance] startlocation:YES locationSuccess:nil addressSuccess:^(NSString *longitude, NSString *latitude, BMKAddressComponent *address, BMKReverseGeoCodeResult *result, NSInteger error) { + /** + * 跳转到百度地图App 如果没有跳转到网页百度 + */ + NSString *urlString = [NSString stringWithFormat:@"baidumap://map/direction?origin=%@,%@&destination=%@,%@&mode=driving",latitude,longitude,lat,lng]; + urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; + NSURL *aURL = [NSURL URLWithString:urlString]; + if ([[UIApplication sharedApplication] openURL:aURL]) { + [[UIApplication sharedApplication] openURL:aURL]; + }else{ + NSString *urlString = [NSString stringWithFormat:@"http://api.map.baidu.com/direction?origin=latlng:%@,%@|name:我的位置&destination=%@&mode=driving®ion=%@&output=html&src=yourCompanyName",latitude,longitude,tempDict[@"area"], address.city]; + urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; + NSURL *aURL = [NSURL URLWithString:urlString]; + [[UIApplication sharedApplication] openURL:aURL]; + } + }]; +} + +- (void)showHoster +{ + NSString *phone = [NSString stringWithFormat:@"tel://%@",tempDict[@"linkphone"]]; + [[UIApplication sharedApplication] openURL:[NSURL URLWithString:phone]]; +} + +@end diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/EventItemView.h" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/EventItemView.h" new file mode 100644 index 0000000000000000000000000000000000000000..475696780301ef01d00a2d29646c5e679a1a73e5 --- /dev/null +++ "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/EventItemView.h" @@ -0,0 +1,22 @@ +// +// EventItemView.h +// JQ_ELOVE +// +// Created by Shmily on 16/10/25. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import + + +@interface EventItemView : UIView +@property (nonatomic,retain)UILabel *PubTimeLB; +@property (nonatomic,retain)UIImageView *scanIV; +@property (nonatomic,retain)UILabel *scanNumLB; +@property (nonatomic,retain)UIImageView *shareIV; +@property (nonatomic,retain)UILabel *shareNumLB; +@property (nonatomic,retain)NSDictionary *tempDict; + +@property (nonatomic,copy)NSString *sharesnum; + +@end diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/EventItemView.m" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/EventItemView.m" new file mode 100644 index 0000000000000000000000000000000000000000..e708c4e7e7871bc1675ea64b4bf4576d95fc7059 --- /dev/null +++ "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/EventItemView.m" @@ -0,0 +1,131 @@ +// +// EventItemView.m +// JQ_ELOVE +// +// Created by Shmily on 16/10/25. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "EventItemView.h" +#import "NSString+Ext.h" + + +@implementation EventItemView + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + [self addSubview:self.PubTimeLB]; + [self addSubview:self.scanIV]; + [self addSubview:self.scanNumLB]; + [self addSubview:self.shareIV]; + [self addSubview:self.shareNumLB]; + } + return self; +} + +- (UILabel *)PubTimeLB +{ + if (!_PubTimeLB) { + _PubTimeLB = [[UILabel alloc]initWithFrame:CGRectMake(15,(self.height-14)/2,60,14)]; + _PubTimeLB.textColor = UIColorFromRGB(0x999999); + _PubTimeLB.font = [UIFont systemFontOfSize:13]; + + } + return _PubTimeLB; +} + +- (UIImageView *)scanIV +{ + if (!_scanIV) { + _scanIV = [[UIImageView alloc]initWithFrame:CGRectMake(_PubTimeLB.right+5,(self.height-14)/2, 14, 14)]; + _scanIV.image = [UIImage imageNamed:@"act_look"]; + } + return _scanIV; +} + +- (UILabel *)scanNumLB +{ + if (!_scanNumLB) { + _scanNumLB = [[UILabel alloc]initWithFrame:CGRectMake(_scanIV.right+2,(self.height-14)/2,30,14)]; + _scanNumLB.textColor = UIColorFromRGB(0x999999); + _scanNumLB.font = [UIFont systemFontOfSize:13]; + _scanNumLB.text = @"12"; + _scanNumLB.textAlignment = NSTextAlignmentCenter; + + } + return _scanNumLB; +} + +- (UIImageView *)shareIV +{ + if (!_shareIV) { + _shareIV = [[UIImageView alloc]initWithFrame:CGRectMake(_scanNumLB.right+5,(self.height-14)/2, 14, 14)]; + _shareIV.image = [UIImage imageNamed:@"act_share"]; + } + return _shareIV; +} + +- (UILabel *)shareNumLB +{ + if (!_shareNumLB) { + _shareNumLB = [[UILabel alloc]initWithFrame:CGRectMake(_shareIV.right+2,(self.height-14)/2,30,14)]; + _shareNumLB.textColor = UIColorFromRGB(0x999999); + _shareNumLB.font = [UIFont systemFontOfSize:13]; + _shareNumLB.text = @"12"; + _shareNumLB.textAlignment = NSTextAlignmentCenter; + } + return _shareNumLB; +} + + +- (void)setTempDict:(NSDictionary *)tempDict +{ + _PubTimeLB.text = tempDict[@"publish_time"]; + /** + * 活动发布时间 + */ + CGFloat pt_w = [ToString(tempDict[@"publish_time"]) calculateSize:CGSizeMake(150, 16) font:13].width; + _PubTimeLB.width = pt_w; + /** + * 浏览次数 + */ + CGFloat sc_w = [ToString(tempDict[@"scans"]) calculateSize:CGSizeMake(150, 16) font:13].width; + _scanIV.left = _PubTimeLB.right+10; + _scanNumLB.left = _scanIV.right+5; + _scanNumLB.width = sc_w; + _scanNumLB.text = ToString(tempDict[@"scans"]); + + /** + * 分享次数 + */ + CGFloat sh_w = [ToString(tempDict[@"shares"]) calculateSize:CGSizeMake(150, 16) font:13].width; + _shareIV.left = _scanNumLB.right+10; + _shareNumLB.left = _shareIV.right+5; + _shareNumLB.width = sh_w; + _shareNumLB.text =ToString(tempDict[@"shares"]); + +} + +- (void)setSharesnum:(NSString *)sharesnum +{ + NSString *newSharenum = [NSString stringWithFormat:@"%d",[_shareNumLB.text intValue]+1]; + CGFloat sh_w = [newSharenum calculateSize:CGSizeMake(150, 16) font:13].width; + _shareIV.left = _scanNumLB.right+10; + _shareNumLB.left = _shareIV.right+5; + _shareNumLB.width = sh_w; + _shareNumLB.text = newSharenum; + +} + + +/* +// 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/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/ImageTextButton.h" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/ImageTextButton.h" new file mode 100644 index 0000000000000000000000000000000000000000..56f760e0fa3484a6787d0d005efe5926313c2146 --- /dev/null +++ "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/ImageTextButton.h" @@ -0,0 +1,32 @@ +// +// ImageTextButton.h +// JQ_ELOVE +// +// Created by Shmily on 16/7/5. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import + +@interface ImageTextButton : UIButton + + +/** + * 图片 + */ +@property (nonatomic, strong) UIImageView *ImageView; +/** + * 数量 + */ +@property (nonatomic, strong) UILabel *countLB; + + +@property (nonatomic, strong) NSString *countStr; + +@property (nonatomic, strong) NSString *ifLike; + +@property (nonatomic, strong) NSString *actIfLike; + +@property (nonatomic, strong) NSString *ifattention; + +@end diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/ImageTextButton.m" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/ImageTextButton.m" new file mode 100644 index 0000000000000000000000000000000000000000..17d285dacd50945060a35cad3d23a20e49f34933 --- /dev/null +++ "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/ImageTextButton.m" @@ -0,0 +1,82 @@ +// +// ImageTextButton.m +// JQ_ELOVE +// +// Created by Shmily on 16/7/5. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "ImageTextButton.h" +#import "NSString+Ext.h" + + +@implementation ImageTextButton + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + [self addSubview:self.ImageView]; + [self addSubview:self.countLB]; + } + return self; +} + +- (UIImageView *)ImageView +{ + if (!_ImageView) { + _ImageView = [[UIImageView alloc]initWithFrame:CGRectMake(0,(self.height-20)/2,20,20)]; + } + return _ImageView; +} + +- (UILabel *)countLB +{ + if (!_countLB) { + _countLB = [[UILabel alloc]initWithFrame:CGRectMake(_ImageView.right+4,0, 0, self.height)]; + _countLB.font = [UIFont systemFontOfSize:12]; + _countLB.textColor = UIColorFromRGB(0x828282); + _countLB.textAlignment = NSTextAlignmentCenter; + } + return _countLB; +} + +- (void)setCountStr:(NSString *)countStr +{ + if (_countStr) { + _countStr =nil; + } + _countStr = [NSString stringWithFormat:@"%@",countStr]; + _countLB.text = _countStr; + + CGFloat width = [_countStr calculateSize:CGSizeMake(self.width, self.height) font:15].width; + _countLB.width = width; + _ImageView.left = (self.width-20-4-width)/2; + _countLB.left = _ImageView.right+4; +} + +- (void)setIfLike:(NSString *)ifLike{ + if([ifLike intValue] == 1){ + _ImageView.image = [UIImage imageNamed:@"clickLike"]; + }else if([ifLike intValue] == 2){ + _ImageView.image = [UIImage imageNamed:@"like"]; + } +} + +- (void)setActIfLike:(NSString *)actIfLike{ + if([actIfLike intValue] == 1){ + _ImageView.image = [UIImage imageNamed:@"clickLike"]; + }else if([actIfLike intValue] == 0){ + _ImageView.image = [UIImage imageNamed:@"like"]; + } +} + +- (void)setIfattention:(NSString *)ifattention{ + if([ifattention intValue] == 0){ + _ImageView.image = [UIImage imageNamed:@"NOguanzhu"]; + }else if([ifattention intValue] == 1){ + _ImageView.image = [UIImage imageNamed:@"YESguanzhu"]; + } +} + +@end diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/InformationView.h" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/InformationView.h" new file mode 100644 index 0000000000000000000000000000000000000000..8531fcf5e1c9e0f1efaf0cfa34ac15765f53dd1a --- /dev/null +++ "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/InformationView.h" @@ -0,0 +1,19 @@ +// +// InformationView.h +// JQ_ELOVE +// +// Created by chason on 16/7/18. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import + +@interface InformationView : UIView + +@property (nonatomic,strong)UILabel *leftTextLab; +@property (nonatomic,strong)UILabel *rightTextLab; +@property (nonatomic,strong)UIImageView *imgView; +@property (nonatomic,strong)UIImageView *arrowView; +@property (nonatomic,strong)UILabel *line; + +@end diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/InformationView.m" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/InformationView.m" new file mode 100644 index 0000000000000000000000000000000000000000..921387979595e97a248a09515cc81d36f57a6120 --- /dev/null +++ "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/InformationView.m" @@ -0,0 +1,73 @@ +// +// InformationView.m +// JQ_ELOVE +// +// Created by chason on 16/7/18. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "InformationView.h" + +@implementation InformationView + +- (id)initWithFrame:(CGRect)frame{ + self = [super initWithFrame:frame]; + if(self){ +// self.backgroundColor = [UIColor whiteColor]; + [self addSubview:self.leftTextLab]; + [self addSubview:self.imgView]; + [self addSubview:self.rightTextLab]; + [self addSubview:self.arrowView]; + [self addSubview:self.line]; + } + return self; +} + +- (UILabel *)leftTextLab{ + if(!_leftTextLab){ + _leftTextLab = [[UILabel alloc]initWithFrame:CGRectMake(10, 0, 100, 44)]; + _leftTextLab.font = [UIFont systemFontOfSize:15]; + _leftTextLab.textColor = UIColorFromRGB(0x595959); + } + return _leftTextLab; +} + +- (UIImageView *)imgView{ + if(!_imgView){ + _imgView = [[UIImageView alloc]initWithFrame:CGRectMake(_leftTextLab.right+20, 0, 20, 20)]; + _imgView.hidden = YES; + } + return _imgView; +} + +- (UILabel *)rightTextLab{ + if(!_rightTextLab){ + _rightTextLab = [[UILabel alloc]initWithFrame:CGRectMake(_imgView.right, 0, self.width-160, 44)]; + _rightTextLab.textAlignment = NSTextAlignmentRight; + _rightTextLab.font = [UIFont systemFontOfSize:15]; + _rightTextLab.textColor = UIColorFromRGB(0x9f9f9f); + _rightTextLab.userInteractionEnabled = YES; + + } + return _rightTextLab; +} + +- (UIImageView *)arrowView{ + if(!_arrowView){ + _arrowView = [[UIImageView alloc]initWithFrame:CGRectMake(_rightTextLab.right, 0, 15, 15)]; + _arrowView.hidden = YES; + _arrowView.image = [UIImage imageNamed:@"Arrow-pointing"]; +// _arrowView.backgroundColor = [UIColor greenColor]; + } + return _arrowView; +} + +- (UILabel *)line{ + if(!_line){ + _line = [[UILabel alloc]initWithFrame:CGRectMake(0, self.height-0.5, KSCREEN_WIDTH, 0.5)]; + _line.backgroundColor = LINECOLOUR; + } + return _line; +} + +@end diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/JQActionSheet.h" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/JQActionSheet.h" new file mode 100644 index 0000000000000000000000000000000000000000..a9c8b19fa7cc74a263853531c769ba8243aa77e0 --- /dev/null +++ "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/JQActionSheet.h" @@ -0,0 +1,15 @@ +// +// JQActionSheet.h +// JQ_ELOVE +// +// Created by Shmily on 16/7/20. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import + +@interface JQActionSheet : UIActionSheet + +@property (nonatomic, strong) NSString *pdnickname; +@property (nonatomic, strong) NSString *uid; +@end diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/JQActionSheet.m" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/JQActionSheet.m" new file mode 100644 index 0000000000000000000000000000000000000000..1bd7ca60a57895c922a53dd8fcdb9c34fd6ddaba --- /dev/null +++ "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/JQActionSheet.m" @@ -0,0 +1,21 @@ +// +// JQActionSheet.m +// JQ_ELOVE +// +// Created by Shmily on 16/7/20. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "JQActionSheet.h" + +@implementation JQActionSheet + +/* +// 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/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/LikeCell.h" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/LikeCell.h" new file mode 100644 index 0000000000000000000000000000000000000000..ebc6c329ef611637eef36ace28705a395b6361a7 --- /dev/null +++ "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/LikeCell.h" @@ -0,0 +1,45 @@ +// +// LikeCell.h +// JQ_ELOVE +// +// Created by chason on 16/7/18. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import +@class AvatarImageView; + +@interface LikeCell : UITableViewCell{ + NSString *otherID; +} + + + +/** + * 背景图 + */ +@property (nonatomic, strong) UIView *bgView; + +/** + * 头像 + */ +@property (nonatomic, strong) AvatarImageView *headImageView; + +/** + * 昵称 + */ +@property (nonatomic, strong) UILabel *nickName; + +/** + * 日期时间 + */ +@property (nonatomic, strong) UILabel *dateTime; + +/** + * 线 + */ +@property (nonatomic, strong) UILabel *line; + +- (void)initDataCell:(NSDictionary *)dataDict; + +@end diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/LikeCell.m" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/LikeCell.m" new file mode 100644 index 0000000000000000000000000000000000000000..ac203dd85f056965f0f8455d30346de8707731cd --- /dev/null +++ "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/LikeCell.m" @@ -0,0 +1,85 @@ +// +// LikeCell.m +// JQ_ELOVE +// +// Created by chason on 16/7/18. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "LikeCell.h" + +#import "AvatarImageView.h" + +@implementation LikeCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{ + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if(self){ + [self.contentView addSubview:self.bgView]; + [self.bgView addSubview:self.headImageView]; + [self.bgView addSubview:self.nickName]; + [self.bgView addSubview:self.dateTime]; + [self.bgView addSubview:self.line]; + } + return self; +} + +- (UIView *)bgView{ + if(!_bgView){ + _bgView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH, 98)]; + _bgView.backgroundColor = [UIColor whiteColor]; + } + return _bgView; +} + +- (AvatarImageView *)headImageView{ + if(!_headImageView){ + _headImageView = [[AvatarImageView alloc]initWithFrame:CGRectMake(20,(_bgView.height-77)/2,77,77)]; + } + return _headImageView; +} + +- (UILabel *)nickName{ + if(!_nickName){ + _nickName = [[UILabel alloc]initWithFrame:CGRectMake(_headImageView.right+10, (_bgView.height-30)/2, 130, 30)]; + _nickName.font = [UIFont systemFontOfSize:15]; + } + return _nickName; +} + +- (UILabel *)dateTime{ + if(!_dateTime){ + _dateTime = [[UILabel alloc]initWithFrame:CGRectMake(_nickName.right+10, (_bgView.height-30)/2, KSCREEN_WIDTH-_headImageView.right-_nickName.width-30, 30)]; + _dateTime.textAlignment = NSTextAlignmentRight; + _dateTime.font = [UIFont systemFontOfSize:13]; +// _dateTime.backgroundColor = [UIColor redColor]; + } + return _dateTime; +} + +- (UILabel *)line{ + if(!_line){ + _line = [[UILabel alloc]initWithFrame:CGRectMake(0, _bgView.height-0.5, KSCREEN_WIDTH, 0.5)]; + _line.backgroundColor = LINECOLOUR; + } + return _line; +} + +- (void)initDataCell:(NSDictionary *)dataDict{ + + [_headImageView setTitle:dataDict[@"nickname"] imageUrl:dataDict[@"avatar"]]; + _nickName.text = dataDict[@"nickname"]; + otherID = dataDict[@"userid"]; +} +@end diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/MoreEventCell.h" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/MoreEventCell.h" new file mode 100644 index 0000000000000000000000000000000000000000..a74fc2fb50c4b4b711d8cf10e7494afac4ba6667 --- /dev/null +++ "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/MoreEventCell.h" @@ -0,0 +1,16 @@ +// +// MoreEventCell.h +// JQ_ELOVE +// +// Created by Shmily on 16/10/27. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import + +@interface MoreEventCell : UITableViewCell + +@property (nonatomic,retain)UILabel *moreLB; +@property (nonatomic,retain)UIImageView *triangleIV; + +@end diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/MoreEventCell.m" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/MoreEventCell.m" new file mode 100644 index 0000000000000000000000000000000000000000..9015bfd4cd76b0491d4a76522da5237bed9be952 --- /dev/null +++ "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/MoreEventCell.m" @@ -0,0 +1,54 @@ +// +// MoreEventCell.m +// JQ_ELOVE +// +// Created by Shmily on 16/10/27. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "MoreEventCell.h" + +@implementation MoreEventCell + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier +{ + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + self.contentView.backgroundColor = UIColorFromRGB(0x2a292f); + [self.contentView addSubview:self.moreLB]; + [self.contentView addSubview:self.triangleIV]; + } + return self; +} + +- (UILabel *)moreLB +{ + if (!_moreLB) { + _moreLB = [[UILabel alloc]initWithFrame:CGRectMake((KSCREEN_WIDTH-138-5-12)/2,(49-30)/2, 138,30)]; + _moreLB.textAlignment =NSTextAlignmentRight; + _moreLB.font = [UIFont systemFontOfSize:16]; + _moreLB.text = @"点击收起往期活动"; + _moreLB.textAlignment = NSTextAlignmentCenter; + _moreLB.textColor = UIColorFromRGB(0x86858b); + } + return _moreLB; +} + +- (UIImageView *)triangleIV +{ + if (!_triangleIV) { + _triangleIV = [[UIImageView alloc]initWithFrame:CGRectMake(_moreLB.right+5,_moreLB.center.y-6,12,12)]; + _triangleIV.image = [UIImage imageNamed:@"xiaosanjiao_up"]; + _triangleIV.highlightedImage = [UIImage imageNamed:@"xiaosanjiao_down"]; + } + return _triangleIV; +} + + +@end diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/MyActivityCell.h" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/MyActivityCell.h" new file mode 100644 index 0000000000000000000000000000000000000000..65ef0f512feaa27156046225890726d7ef265a84 --- /dev/null +++ "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/MyActivityCell.h" @@ -0,0 +1,42 @@ +// +// MyActivityCell.h +// JQQY +// +// Created by Shmily on 2017/11/23. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import +@class ActivityListModel; + +@interface MyActivityCell : UITableViewCell + +/** + * 活动海报 + */ +@property (nonatomic, strong) UIImageView *actPictureImgView; +/** + * 活动标题 + */ +@property (nonatomic, strong) UILabel *actTitleLab; +/** + * 活动开始时间 + */ +@property (nonatomic, strong) UILabel *actTimeLab; +/** + * 活动举办地区 + */ +@property (nonatomic, strong) UILabel *actPlaceLab; + + +@property (nonatomic,retain)UIView *itemView; + +@property (nonatomic,retain)UIImageView *diIV; + +@property (nonatomic,retain)ActivityListModel *model; + +@property (nonatomic,retain)UILabel *lineLB; + +@property (nonatomic,retain)UILabel *actStatusLB; + +@end diff --git "a/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/MyActivityCell.m" "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/MyActivityCell.m" new file mode 100644 index 0000000000000000000000000000000000000000..d462d013bb2d900e21914a0b53723a97228d0572 --- /dev/null +++ "b/JQQY/Modules/Activity\357\274\210\346\264\273\345\212\250\357\274\211/View/MyActivityCell.m" @@ -0,0 +1,132 @@ +// +// MyActivityCell.m +// JQQY +// +// Created by Shmily on 2017/11/23. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "MyActivityCell.h" +#import "ActivityListModel.h" + +@implementation MyActivityCell + +- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier +{ + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + self.contentView.backgroundColor = UIColorFromRGB(0xf4f4f4); + [self.contentView addSubview:self.actPictureImgView]; + [self.actPictureImgView addSubview:self.itemView]; + [self.itemView addSubview:self.diIV]; + [self.itemView addSubview:self.actPlaceLab]; + [self.contentView addSubview:self.actTitleLab]; + [self.contentView addSubview:self.actTimeLab]; + [self.contentView addSubview:self.lineLB]; + [self.contentView addSubview:self.actStatusLB]; + + + } + return self; +} + +- (UIImageView *)actPictureImgView{ + if(!_actPictureImgView){ + _actPictureImgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH, KSCREEN_WIDTH/16*9)]; + _actPictureImgView.backgroundColor = LINECOLOUR; + } + return _actPictureImgView; +} + +- (UIView *)itemView +{ + if (!_itemView) { + _itemView = [[UIView alloc]initWithFrame:CGRectMake(0,_actPictureImgView.height-30, KSCREEN_WIDTH, 30)]; + _itemView.backgroundColor = UIColorFromRGBWithAlpha(0x000000,.3); + } + return _itemView; +} + +- (UIImageView *)diIV +{ + if (!_diIV) { + _diIV = [[UIImageView alloc]initWithFrame:CGRectMake(7,(_itemView.height-24)/2,24,24)]; + _diIV.image = [UIImage imageNamed:@"my_dingwei"]; + } + return _diIV; +} + + +- (UILabel *)actPlaceLab{ + if(!_actPlaceLab){ + _actPlaceLab = [[UILabel alloc] initWithFrame:CGRectMake(_diIV.right+2,5,KSCREEN_WIDTH-40,20)]; + _actPlaceLab.font = [UIFont systemFontOfSize:14]; + _actPlaceLab.textColor = [UIColor whiteColor]; + //_actPlaceLab.backgroundColor = [UIColor redColor]; + } + return _actPlaceLab; +} + + + +- (UILabel *)actTitleLab{ + if(!_actTitleLab){ + _actTitleLab = [[UILabel alloc] initWithFrame:CGRectMake(7,_actPictureImgView.bottom, KSCREEN_WIDTH-14,30)]; + _actTitleLab.font = [UIFont systemFontOfSize:16]; + _actTitleLab.textColor = UIColorFromRGB(0x666666); + } + return _actTitleLab; +} + +- (UILabel *)lineLB +{ + if (!_lineLB) { + _lineLB = [[UILabel alloc]initWithFrame:CGRectMake(7, _actTitleLab.bottom-.5,KSCREEN_WIDTH-77, 1)]; + _lineLB.backgroundColor = LINECOLOUR; + } + return _lineLB; +} + +- (UILabel *)actTimeLab{ + if(!_actTimeLab){ + _actTimeLab = [[UILabel alloc] initWithFrame:CGRectMake(7, _actTitleLab.bottom, (KSCREEN_WIDTH-14)*.6,30)]; + _actTimeLab.font = [UIFont systemFontOfSize:16]; + _actTimeLab.textColor = UIColorFromRGB(0x666666); + } + return _actTimeLab; +} + +- (UILabel *)actStatusLB{ + if(!_actStatusLB){ + _actStatusLB = [[UILabel alloc] initWithFrame:CGRectMake(_actTimeLab.right, _actTitleLab.bottom, (KSCREEN_WIDTH-14)*.4,30)]; + _actStatusLB.textAlignment = NSTextAlignmentRight; + _actStatusLB.font = [UIFont systemFontOfSize:18]; + _actStatusLB.textColor = UIColorFromRGB(0x000000); + } + return _actStatusLB; +} + + + +- (void)setModel:(ActivityListModel *)model +{ + [_actPictureImgView sd_setImageWithURL:[NSURL URLWithString:model.actPictureStr] placeholderImage:nil]; + _actTitleLab.text = model.actTitleStr; + _actPlaceLab.text = model.actPlaceStr; + _actTimeLab.text = model.actTimeStr; + _actStatusLB.text = model.actStatus; +} + + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/.DS_Store" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..d0b8e161babbab4efadd4bdb33e30f3524d558e7 Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/.DS_Store" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/.DS_Store" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..aec193f22e3154676c0febf0fa7988de5dc87928 Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/.DS_Store" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/DiscoverViewController.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/DiscoverViewController.h" new file mode 100644 index 0000000000000000000000000000000000000000..0cad688b5022c6efe85dc1a9416b988b7b2a5955 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/DiscoverViewController.h" @@ -0,0 +1,13 @@ +// +// DiscoverViewController.h +// JQQY +// +// Created by chason on 2017/11/16. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "ZCRefreshTableViewController.h" + +@interface DiscoverViewController : ZCRefreshTableViewController + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/DiscoverViewController.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/DiscoverViewController.m" new file mode 100644 index 0000000000000000000000000000000000000000..edf449296914e461ce0529e14d657c1c35cd91a5 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/DiscoverViewController.m" @@ -0,0 +1,344 @@ +// +// DiscoverViewController.m +// JQQY +// +// Created by chason on 2017/11/16. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "DiscoverViewController.h" +#import "DiscoverHeaderView.h" +#import "AdModel.h" +#import "MJRefresh.h" +#import "YuanquanBaseCell.h" +#import "TextCell.h" +#import "PicturesCell.h" +#import "VideoCell.h" +#import "TextAndPicturesCell.h" +#import "TextAndVideoCell.h" +#import "YuanquanModel.h" +#import "PublicYuanquanViewController.h" +#import "YuanquanDetailViewController.h" +#import "TopicDetailViewController.h" + +@interface DiscoverViewController () + +@property (nonatomic, strong) DiscoverHeaderView *discoverHeaderView; +@property (nonatomic, strong) NSMutableArray *AdArray; + +@end + +@implementation DiscoverViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + [self addNavigationItemWithImageNames:@[@"PYQ-xj"] isLeft:NO target:self action:@selector(rightBtnClicked) tags:nil]; + [self setTableViewFrame:CGRectMake(0, 0, KSCREEN_WIDTH, KSCREEN_HEIGHT-kTopHeight-kTabBarHeight)]; + self.tableView.tableHeaderView = self.discoverHeaderView; + self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; + [self registerCell]; + self.showRefreshHeader = YES; + self.showRefreshFooter = YES; + self.tableView.backgroundColor = UIColorFromRGB(0xf3f3f3); + self.curepage = 1; + + [self tableViewDidTriggerHeaderRefresh]; + +} + +- (void)tableViewDidTriggerHeaderRefresh +{ + __weak typeof(self) weakSelf = self; + [[MapManager instance] startlocation:NO locationSuccess:^(NSString * longitude, NSString * latitude,NSError *error) { + if (!error) { + [weakSelf requestData:latitude Lng:longitude]; + }else{ + [weakSelf requestData:@"" Lng:@""]; + + } + } addressSuccess:NULL]; + self.curepage = 1; + [self requestYuanquanList]; +} + +- (void)tableViewDidTriggerFooterRefresh +{ + self.curepage += 1; + [self requestYuanquanList]; +} + +- (DiscoverHeaderView *)discoverHeaderView +{ + if (!_discoverHeaderView) { + _discoverHeaderView = [[DiscoverHeaderView alloc] initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH, KSCREEN_WIDTH/16*9+100)]; +// _discoverHeaderView.backgroundColor = [UIColor redColor]; + } + return _discoverHeaderView; +} + +- (NSMutableArray *)AdArray +{ + if (!_AdArray) { + _AdArray = [NSMutableArray arrayWithCapacity:0]; + } + return _AdArray; +} + +- (void)registerCell +{ + [self.tableView registerClass:[TextCell class] forCellReuseIdentifier:NSStringFromClass([TextCell class])]; + [self.tableView registerClass:[PicturesCell class] forCellReuseIdentifier:NSStringFromClass([PicturesCell class])]; + [self.tableView registerClass:[VideoCell class] forCellReuseIdentifier:NSStringFromClass([VideoCell class])]; + [self.tableView registerClass:[TextAndPicturesCell class] forCellReuseIdentifier:NSStringFromClass([TextAndPicturesCell class])]; + [self.tableView registerClass:[TextAndVideoCell class] forCellReuseIdentifier:NSStringFromClass([TextAndVideoCell class])]; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + return self.dataArray.count; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + YuanquanModel *model = self.dataArray[indexPath.row]; + return model.cellHeight; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + YuanquanModel *model = self.dataArray[indexPath.row]; + YuanquanBaseCell *cell; + NSString *cellIdentifier; + cellIdentifier = model.cellIdentifier; + cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath]; + cell.delegate = self; + cell.tag = indexPath.row; + cell.selectionStyle = 0; + [cell setYuanquanModel:model]; + return cell; +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + if (!ISLOGIN) { + [self toLogin]; + return; + } + + YuanquanModel *model = self.dataArray[indexPath.row]; + YuanquanDetailViewController *yuanquanDetailVC = [[YuanquanDetailViewController alloc] init]; + [yuanquanDetailVC setHidesBottomBarWhenPushed:YES]; + yuanquanDetailVC.yuanquanid = model.yuanquanid; + [self.navigationController pushViewController:yuanquanDetailVC animated:YES]; +} + +#pragma mark ———————— 点击头像 ———————— + +- (void)clickAvatar:(id)cell +{ + if (!ISLOGIN) { + [self toLogin]; + return; + } + YuanquanBaseCell *baseCell = (YuanquanBaseCell *)cell; + YuanquanModel *model = self.dataArray[baseCell.tag]; + [ZCTools toPersonalHome:model.userid homeNickname:model.nickname homeSelf:self]; +} + +#pragma mark ———————— 点击话题 ———————— + +- (void)clickTopicLab:(id)cell +{ + if (!ISLOGIN) { + [self toLogin]; + return; + } + YuanquanBaseCell *baseCell = (YuanquanBaseCell *)cell; + YuanquanModel *model = self.dataArray[baseCell.tag]; + TopicDetailViewController *topicDetailVC = [[TopicDetailViewController alloc] init]; + topicDetailVC.hidesBottomBarWhenPushed = YES; + topicDetailVC.titleStr = model.topic; + topicDetailVC.topicid = model.topicid; + [self.navigationController pushViewController:topicDetailVC animated:YES]; +} + +#pragma mark ———————— 点赞 ———————— + +- (void)clickLikeBtn:(id)cell +{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:NetworkFailure toView:self.view]; + return; + } + + if (!ISLOGIN) { + [self toLogin]; + return; + } + + YuanquanBaseCell *baseCell = (YuanquanBaseCell *)cell; + NSIndexPath *indexPath = [self.tableView indexPathForCell:baseCell]; + YuanquanModel *model = self.dataArray[indexPath.row]; + + NSString *action;//1赞 2取消 + if ([model.islike intValue] == 0) { + action = @"1"; + model.islike = @"1"; + model.likeNum = [NSString stringWithFormat:@"%d", [model.likeNum intValue]+1]; + }else{ + action = @"2"; + model.islike = @"0"; + model.likeNum = [NSString stringWithFormat:@"%d", [model.likeNum intValue]-1]; + } + + [UIView performWithoutAnimation:^{ + [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone]; + }]; + + NSDictionary *parameters = @{ + @"userid":USER_USERID, + @"titleid":model.yuanquanid, + @"action":action, + @"version":APP_VERSION, + }; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_yuanquan_like block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + if ([resultDic[@"retcode"] intValue] == 1) { + + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; +} + +#pragma mark ———————— 评论 ———————— + +- (void)clickCommentBtn:(id)cell +{ + if (!ISLOGIN) { + [self toLogin]; + return; + } + YuanquanBaseCell *baseCell = (YuanquanBaseCell *)cell; + YuanquanModel *model = self.dataArray[baseCell.tag]; + YuanquanDetailViewController *yuanquanDetailVC = [[YuanquanDetailViewController alloc] init]; + [yuanquanDetailVC setHidesBottomBarWhenPushed:YES]; + yuanquanDetailVC.yuanquanid = model.yuanquanid; + [self.navigationController pushViewController:yuanquanDetailVC animated:YES]; +} + +#pragma mark ———————— 去登录 ———————— + +- (void)toLogin +{ + [ZCTools goLoginSelf:self SeccessBlock:NULL]; +} + +#pragma mark ———————— 发缘圈 ———————— +- (void)rightBtnClicked +{ + PublicYuanquanViewController *publicYuanquanVC = [[PublicYuanquanViewController alloc] init]; + [publicYuanquanVC setHidesBottomBarWhenPushed:YES]; + publicYuanquanVC.delegte = self; + [self.navigationController pushViewController:publicYuanquanVC animated:YES]; +} + +- (void)reloadYuanQuan:(YuanquanModel *)model +{ + [self.dataArray insertObject:model atIndex:0]; + [self.tableView reloadData]; +} + +#pragma mark ———————— 请求广告 ———————— + +- (void)requestData:(NSString *)lat Lng:(NSString *)lng{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:NetworkFailure toView:self.view]; + return; + } + NSDictionary *parameters = @{ + @"lng":lng, + @"lat":lat, + @"version":APP_VERSION, + }; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_rollingAd block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + if ([resultDic[@"retcode"] intValue] == 1) { + [self.AdArray removeAllObjects]; + for (NSDictionary *dict in resultDic[@"message"]) { + AdModel *model = [[AdModel alloc]init]; + [model initData:dict]; + [self.AdArray addObject:model]; + } + self.discoverHeaderView.cycleScrollView.dataArray = self.AdArray; + [self.tableView.mj_header endRefreshing]; + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; +} + +#pragma mark ———————— 请求缘圈列表 ———————— + +- (void)requestYuanquanList +{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:NetworkFailure toView:self.view]; + return; + } + if (self.curepage == 1) { + [MBProgressHUD showMessag:nil toView:self.view]; + } + NSDictionary *parameters = @{ + @"userid":HaveUserId, + @"limit":@"10", + @"offset":[NSString stringWithFormat:@"%d", self.curepage], + @"version":APP_VERSION, + }; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_yuanquan_list block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + [MBProgressHUD hideHUDForView:self.view animated:YES]; + if ([resultDic[@"retcode"] intValue] == 1) { + if (self.curepage == 1) { + [self.dataArray removeAllObjects]; + } + for (NSDictionary *dict in resultDic[@"message"]) { + YuanquanModel *model = [[YuanquanModel alloc] init]; + [model initYuanquanModel:dict]; + if (model.pictures.count <= 4 && (STR_IS_NOT_EMPTY(model.text) || model.pictures.count>0 || [model.videoDict allKeys].count>0)) { + [self.dataArray addObject:model]; + } + } + + if (self.dataArray.count >= [resultDic[@"number"] intValue]) { + [self endRefreshingWithNoMoreData]; + }else{ + [self tableViewDidFinishTriggerHeader:NO reload:YES]; + } + [self tableViewDidFinishTriggerHeader:YES reload:YES]; + + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; +} + +- (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/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/FindViewController.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/FindViewController.h" new file mode 100644 index 0000000000000000000000000000000000000000..fc465776608a249acba850fd49123d8eb75e67af --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/FindViewController.h" @@ -0,0 +1,13 @@ +// +// FindViewController.h +// JQ_ELOVE +// +// Created by chason on 16/7/18. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "ZCRefreshTableViewController.h" + +@interface FindViewController : ZCRefreshTableViewController + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/FindViewController.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/FindViewController.m" new file mode 100644 index 0000000000000000000000000000000000000000..ecc4af18d4d76a01ec54554a3fad6eb3fa7bb976 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/FindViewController.m" @@ -0,0 +1,271 @@ +// +// FindViewController.m +// JQ_ELOVE +// +// Created by chason on 16/7/18. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "FindViewController.h" +#import "ConditionView.h" +#import "SpeedCell.h" +#import "SpeedModel.h" +#import "ItemImageBtn.h" +#import "QYPickerView.h" + +@interface FindViewController () + +@property (nonatomic,strong)UILabel *showLab; +@property (nonatomic,strong)ConditionView *userIDCView; +@property (nonatomic,strong)ConditionView *placeView; + +@end + +@implementation FindViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.title = @"找人"; + self.tableView.hidden = YES; + self.showRefreshHeader = YES; + self.showRefreshFooter = YES; + [self setTableViewFrame:CGRectMake(0, 0, KSCREEN_WIDTH, KSCREEN_HEIGHT-kTopHeight)]; + [self addNavigationItemWithTitles:@[@"确定"] isLeft:NO target:self action:@selector(clickRightBtn) tags:nil]; + + [self.view addSubview:self.showLab]; + [self.view addSubview:self.userIDCView]; + [self.view addSubview:self.placeView]; + [self.view addSubview:self.tableView]; +} + +- (void)chaBtnClicked{ + + self.navigationItem.rightBarButtonItems = nil; + [self addNavigationItemWithTitles:@[@"确定"] isLeft:NO target:self action:@selector(clickRightBtn) tags:nil]; + + _showLab.hidden = NO; + _userIDCView.hidden = NO; + _placeView.hidden = NO; + self.title = @"找人"; + self.tableView.hidden = YES; + _userIDCView.secondTF.text = @""; + _placeView.secondTF.text = @""; + [self.dataArray removeAllObjects]; + [self.tableView reloadData]; + self.curepage = 1; +} + +//确定按钮点击事件 +- (void)clickRightBtn{ + if(!STR_IS_NOT_EMPTY(_userIDCView.secondTF.text) && !STR_IS_NOT_EMPTY(_placeView.secondTF.text)){ + [MBProgressHUD showError:@"请输入所搜信息" toView:self.view]; + return; + } + + self.navigationItem.rightBarButtonItems = nil; + [self addNavigationItemWithImageNames:@[@"xx"] isLeft:NO target:self action:@selector(chaBtnClicked) tags:nil]; + + _showLab.hidden = YES; + _userIDCView.hidden = YES; + _placeView.hidden = YES; + self.title = @"找人结果"; + self.tableView.hidden = NO; + [self loadDataSource]; + [_userIDCView.secondTF resignFirstResponder]; +} + +- (UILabel *)showLab{ + if(!_showLab){ + _showLab = [[UILabel alloc]initWithFrame:CGRectMake(15, 0, KSCREEN_WIDTH, 40)]; + _showLab.text = @"您可以根据启缘ID或居住地进行查找。"; + _showLab.font = [UIFont systemFontOfSize:13]; + _showLab.textColor = [UIColor lightGrayColor]; + } + return _showLab; +} +//用户ID +- (ConditionView *)userIDCView{ + if(!_userIDCView){ + _userIDCView = [[ConditionView alloc] initWithFrame:CGRectMake(0, _showLab.bottom, KSCREEN_WIDTH, 44)]; + _userIDCView.firstLB.text = @"启缘ID:"; + _userIDCView.secondTF.delegate = self; + _userIDCView.secondTF.textAlignment = NSTextAlignmentRight; + _userIDCView.secondTF.keyboardType = UIKeyboardTypeNumberPad; + } + return _userIDCView; +} +//地区 +- (ConditionView *)placeView{ + if (!_placeView) { + _placeView = [[ConditionView alloc] initWithFrame:CGRectMake(0, _userIDCView.bottom, KSCREEN_WIDTH, 44)]; + _placeView.firstLB.text = @"现居地:"; + _placeView.secondTF.enabled = NO; + _placeView.secondTF.textAlignment = NSTextAlignmentRight; + _placeView.userInteractionEnabled = YES; + UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(placeViewClicked)]; + [_placeView addGestureRecognizer:tap]; + } + return _placeView; +} + +- (void)placeViewClicked +{ + QYPickerView *pickerView = [[QYPickerView alloc] init]; + pickerView.pickerStyle = 0; + [pickerView show]; + [pickerView setCityBlock:^(PickerModel *model) { + if ([model.p_name isEqualToString:@"北京市"] || + [model.p_name isEqualToString:@"天津市"] || + [model.p_name isEqualToString:@"上海市"] || + [model.p_name isEqualToString:@"重庆市"]) { + model.c_name = model.p_name; + } + _placeView.secondTF.text = model.c_name; + }]; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + static NSString *CellIdentifier = @"FindCell"; + SpeedCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; + if (!cell) { + cell = [[SpeedCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; + } + + cell.tag = indexPath.row; + cell.delegate = self; + + cell.selectionStyle =0; + [cell initData:self.dataArray[indexPath.row]]; + + return cell; +} + +- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + return self.dataArray.count; +} + +- (CGFloat )tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + return 98; +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ + if (ISLOGIN) { + SpeedModel *model = [self.dataArray objectAtIndex:indexPath.row]; + [ZCTools toPersonalHome:model.userID homeNickname:model.nickname homeSelf:self]; + }else{ + [self toLogin]; + } +} + +- (void)choseTerm:(id)cell +{ + if (ISLOGIN) { + SpeedCell *speedCell = (SpeedCell *)cell; + SpeedModel *model = [self.dataArray objectAtIndex:speedCell.tag]; + [ZCTools toPersonalHome:model.userID homeNickname:model.nickname homeSelf:self]; + }else{ + [self toLogin]; + } + +} + +- (void)toLogin +{ + [ZCTools goLoginSelf:self SeccessBlock:NULL]; +} + +/** + * 请求数据 + */ +- (void)loadDataSource{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:NetworkFailure toView:self.view]; + return; + } + NSDictionary *param = @{@"IDNum":_userIDCView.secondTF.text, + @"localplace":_placeView.secondTF.text, + @"page":[NSString stringWithFormat:@"%d",self.curepage], + @"pagesize":@"10", + @"version":APP_VERSION}; + if (self.curepage == 1) { + [MBProgressHUD showMessag:nil toView:self.view]; + } + [ZCNetRequestManager postRequestWithParameters:param subUrl:URL_queryuser block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + [MBProgressHUD hideHUDForView:self.view animated:YES]; + if ([resultDic[@"retcode"] intValue] == 1) { + if (self.curepage == 1) { + [self.dataArray removeAllObjects]; + } + for (NSDictionary *dict in resultDic[@"message"]) { + SpeedModel *mode = [[SpeedModel alloc]init]; + [mode initData:dict]; + [self.dataArray addObject:mode]; + } + if (self.dataArray.count==[resultDic[@"totalnum"] intValue]) { + [self endRefreshingWithNoMoreData]; + }else{ + [self tableViewDidFinishTriggerHeader:NO reload:YES]; + } + [self tableViewDidFinishTriggerHeader:YES reload:YES]; + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; +} + +- (void)tableViewDidTriggerHeaderRefresh +{ + self.curepage = 1; + [self loadDataSource]; +} + +- (void)tableViewDidTriggerFooterRefresh +{ + self.curepage += 1; + [self loadDataSource]; +} + +-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ + [self.view endEditing:YES]; +} +- (BOOL)textFieldShouldReturn:(UITextField *)textField{ + return [textField resignFirstResponder]; +} +-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ + if (textField == self.userIDCView.secondTF){ + NSUInteger lengthOfString = string.length; + for (NSInteger loopIndex = 0; loopIndex < lengthOfString; loopIndex++) {//只允许数字输入 + unichar character = [string characterAtIndex:loopIndex]; + if (character < 48) return NO; // 48 unichar for 0 + if (character > 57) return NO; // 57 unichar for 9 + } + // Check for total length + NSUInteger proposedNewLength = textField.text.length - range.length + string.length; + if (proposedNewLength > 10) return NO;//限制长度 + return YES; + }else{ + return YES; + } +} + +- (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/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\345\245\275\345\217\213/FriendViewController.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\345\245\275\345\217\213/FriendViewController.h" new file mode 100644 index 0000000000000000000000000000000000000000..6f3d2d0a2c3cbd58bb3f332e77ed1f49bee2e9a2 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\345\245\275\345\217\213/FriendViewController.h" @@ -0,0 +1,13 @@ +// +// FriendViewController.h +// JQQY +// +// Created by Shmily on 2017/11/23. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "RootViewController.h" + +@interface FriendViewController : RootViewController + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\345\245\275\345\217\213/FriendViewController.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\345\245\275\345\217\213/FriendViewController.m" new file mode 100644 index 0000000000000000000000000000000000000000..5bab7ddf207db514d17794e3843416d087c4dd55 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\345\245\275\345\217\213/FriendViewController.m" @@ -0,0 +1,128 @@ +// +// FriendViewController.m +// JQQY +// +// Created by Shmily on 2017/11/23. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "FriendViewController.h" +#import "TopBtnView.h" +#import "MyPeopleViewController.h" +#import "CustomNavigationView.h" +#import "FindViewController.h" + +@interface FriendViewController () + + +@property (nonatomic,strong)UIView *rootView; +@property (nonatomic,retain)MyPeopleViewController *goodVC; +@property (nonatomic,retain)MyPeopleViewController *fensVC; +@property (nonatomic,retain)MyPeopleViewController *attenVC; + +@property (nonatomic,retain)CustomNavigationView *customNavigationView; +@end + +@implementation FriendViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.isHidenNaviBar = NO; + + [self.view addSubview:self.customNavigationView]; + TopBtnView *topView = [[TopBtnView alloc]initWithFrame:CGRectMake(0,kTopHeight,KSCREEN_WIDTH, 45) showType:@[@"我的好友",@"我的粉丝",@"我的关注"]]; + topView.delegate =self; + [self.view addSubview:topView]; + [self.view addSubview:self.rootView]; + + [self addChildViews]; + +} + +- (CustomNavigationView *)customNavigationView +{ + if (!_customNavigationView) { + _customNavigationView = [[CustomNavigationView alloc] initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH, kTopHeight)]; + _customNavigationView.VC = self; + _customNavigationView.titleLab.text = @"我的好友"; + _customNavigationView.titleLab.textColor = [UIColor whiteColor]; + _customNavigationView.backgroundColor = PURPLECOLOUR; + [_customNavigationView.leftBtn setImage:[UIImage imageNamed:@"back_icon"] forState:UIControlStateNormal]; + + [_customNavigationView.rightBtn setImage:[UIImage imageNamed:@"search_icon"] forState:UIControlStateNormal]; + [_customNavigationView.rightBtn addTarget:self action:@selector(rightBtnClicked) forControlEvents:UIControlEventTouchUpInside]; + + } + return _customNavigationView; +} + + +- (void)rightBtnClicked +{ + FindViewController *findVC = [[FindViewController alloc] init]; + [findVC setHidesBottomBarWhenPushed:YES]; + [self.navigationController pushViewController:findVC animated:YES]; +} + + + +- (UIView *)rootView +{ + if (!_rootView) { + _rootView = [[UIView alloc] initWithFrame:CGRectMake(0,kTopHeight+45,KSCREEN_WIDTH, KSCREEN_HEIGHT-kTopHeight)]; + _rootView.backgroundColor = [UIColor orangeColor]; + } + return _rootView; +} +- (void)addChildViews{ + _goodVC = [[MyPeopleViewController alloc] init]; + _goodVC.type = 1; + _goodVC.view.frame = self.rootView.bounds; + [self addChildViewController:_goodVC]; + [self.rootView addSubview:_goodVC.view]; +} + + +- (void)topBtnSelect:(NSString *)name +{ + if ([name isEqualToString:@"我的好友"]) { + [self.rootView bringSubviewToFront:_goodVC.view]; + }else if ([name isEqualToString:@"我的粉丝"]){ + if (!_fensVC) { + _fensVC = [[MyPeopleViewController alloc] init]; + _fensVC.type = 2; + _fensVC.view.frame = self.rootView.bounds; + [self addChildViewController:_fensVC]; + [self.rootView addSubview:_fensVC.view]; + }else{ + [self.rootView bringSubviewToFront:_fensVC.view]; + } + }else if ([name isEqualToString:@"我的关注"]){ + if (!_attenVC) { + _attenVC = [[MyPeopleViewController alloc] init]; + _attenVC.type = 3; + _attenVC.view.frame = self.rootView.bounds; + [self addChildViewController:_attenVC]; + [self.rootView addSubview:_attenVC.view]; + }else{ + [self.rootView bringSubviewToFront:_attenVC.view]; + } + } +} + +- (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/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\345\245\275\345\217\213/MyPeopleViewController.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\345\245\275\345\217\213/MyPeopleViewController.h" new file mode 100644 index 0000000000000000000000000000000000000000..8dfcee02838d075225244b4e5605e50657bc5616 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\345\245\275\345\217\213/MyPeopleViewController.h" @@ -0,0 +1,16 @@ +// +// MyPeopleViewController.h +// JQ_ELOVE +// +// Created by chason on 2017/3/9. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import "ZCRefreshTableViewController.h" + +@interface MyPeopleViewController : ZCRefreshTableViewController + +@property (nonatomic, assign) NSInteger type;//1好友 2粉丝 3关注 4黑名单 + + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\345\245\275\345\217\213/MyPeopleViewController.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\345\245\275\345\217\213/MyPeopleViewController.m" new file mode 100644 index 0000000000000000000000000000000000000000..35fc1db2534b7b2106d53fb9ebe871a716330e86 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\345\245\275\345\217\213/MyPeopleViewController.m" @@ -0,0 +1,152 @@ +// +// MyPeopleViewController.m +// JQ_ELOVE +// +// Created by chason on 2017/3/9. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import "MyPeopleViewController.h" +#import "MyPeopleCell.h" +#import "FriendModel.h" + +//#import "UserHomeViewController.h" +#import "ChatViewController.h" + + +@interface MyPeopleViewController () +{ + NSString *uid; +} +@end + +@implementation MyPeopleViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.showRefreshHeader = YES; + [self.tableView registerClass:[MyPeopleCell class] forCellReuseIdentifier:@"MyPeopleCell"]; + + if (_type !=4) { + self.isHidenNaviBar = YES; + self.tableView.height = KSCREEN_HEIGHT-kTopHeight-45; + }else{ + self.title = @"黑名单"; + } + [self loadData]; + + +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + return self.dataArray.count; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + return 60; +} +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ + MyPeopleCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyPeopleCell"]; + cell.selectionStyle = 0; + if (indexPath.row == self.dataArray.count-1) { + cell.line.hidden = YES; + }else{ + cell.line.hidden = NO; + } + cell.model=self.dataArray[indexPath.row]; + return cell; +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ + + FriendModel *model = self.dataArray[indexPath.row]; + uid = model.userID; + if(_type ==4){ + UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:nil message:@"将该用户移除黑名单?" delegate:self cancelButtonTitle:nil otherButtonTitles:@"取消",@"确认", NULL]; + [alertView show]; + + }else{ + [ZCTools toChatViewController:model.userID conversationType:EMConversationTypeChat name:model.nickname avatarUrl:model.avatar homeSelf:self]; + } +} +- (void)tableViewDidTriggerHeaderRefresh +{ + [self loadData]; +} + +- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex +{ + if (buttonIndex) { + [self removeBlank:uid]; + } +} + + +#pragma mark - **************** data +- (void)removeBlank:(NSString *)uid +{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:NetworkFailure toView:self.view]; + return; + } + NSDictionary *params = @{@"userID":USER_USERID, + @"otherID":uid, + @"action":@"4", + @"version":APP_VERSION}; + [ZCNetRequestManager postRequestWithParameters:params subUrl:URL_user_friendadd block:^(NSDictionary *resultDic, NSError *error) { + if(resultDic){ + if ([resultDic[@"retcode"] intValue] == 1) { + [MBProgressHUD showSuccess:@"移除黑名单成功" toView:self.view]; + EMError *error = [[EMClient sharedClient].contactManager removeUserFromBlackList:[uid lowercaseString]]; + if (!error) { + [self loadData]; + + } + }else{ + [MBProgressHUD showError:@"移除黑名单失败" toView:self.view]; + } + } + }]; +} + + + + + + + +- (void)loadData{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:NetworkFailure toView:self.view]; + return; + } + NSDictionary *params = @{@"userID":USER_USERID, + @"version":APP_VERSION, + @"type":[NSString stringWithFormat:@"%ld",(long)_type]}; + [MBProgressHUD showMessag:@"" toView:self.view]; + [ZCNetRequestManager postRequestWithParameters:params subUrl:URL_CONTACT_LIST block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + [MBProgressHUD hideHUDForView:self.view animated:YES]; + if ([resultDic[@"retcode"] intValue] == 1) { + [self.dataArray removeAllObjects]; + for (NSDictionary *dict in resultDic[@"message"]) { + FriendModel *model = [[FriendModel alloc]init]; + [model initDict:dict]; + [self.dataArray addObject:model]; + } + [self tableViewDidFinishTriggerHeader:YES reload:YES]; + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\345\245\275\345\217\213/VisitorViewController.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\345\245\275\345\217\213/VisitorViewController.h" new file mode 100644 index 0000000000000000000000000000000000000000..f58ced13d66e343c0cee2dbd01dc9cf8ee56c9a9 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\345\245\275\345\217\213/VisitorViewController.h" @@ -0,0 +1,13 @@ +// +// VisitorViewController.h +// JQ_ELOVE +// +// Created by chason on 2017/2/28. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import "ZCRefreshTableViewController.h" + +@interface VisitorViewController : ZCRefreshTableViewController + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\345\245\275\345\217\213/VisitorViewController.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\345\245\275\345\217\213/VisitorViewController.m" new file mode 100644 index 0000000000000000000000000000000000000000..395949e35d5bdd61ab62edfb9d119cb194a111d7 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\345\245\275\345\217\213/VisitorViewController.m" @@ -0,0 +1,117 @@ +// +// VisitorViewController.m +// JQ_ELOVE +// +// Created by chason on 2017/2/28. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import "VisitorViewController.h" +#import "SeeOrLikeCell.h" +@interface VisitorViewController () + +@end + +@implementation VisitorViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + [self requestData]; + [self setTableViewFrame:CGRectMake(0, 0, KSCREEN_WIDTH, KSCREEN_HEIGHT-kTopHeight)]; + [self.tableView registerClass:[SeeOrLikeCell class] forCellReuseIdentifier:@"SeeOrLikeCell"]; + self.showRefreshHeader = YES; + self.showRefreshFooter = YES; + self.curepage = 1; + self.title = @"我的访客"; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ + SeeOrLikeCell *seeOrLikeCell = [tableView dequeueReusableCellWithIdentifier:@"SeeOrLikeCell"]; + seeOrLikeCell.selectionStyle = 0; + [seeOrLikeCell initSeeOrLikeCell:self.dataArray[indexPath.row]]; + if (indexPath.row == self.dataArray.count-1) { + seeOrLikeCell.line.hidden = YES; + }else{ + seeOrLikeCell.line.hidden = NO; + } + return seeOrLikeCell; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ + return [self.dataArray count]; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ + return 60; +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ + [ZCTools toPersonalHome:self.dataArray[indexPath.row][@"userid"] homeNickname:self.dataArray[indexPath.row][@"nickname"] homeSelf:self]; +} + +- (void)requestData{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:@"网络异常" toView:self.view]; + return; + } + if (self.curepage == 1) { + [MBProgressHUD showMessag:nil toView:self.view]; + } + NSDictionary *param = @{@"userid":USER_USERID, + @"pagesize":@"10", + @"pageindex":[NSString stringWithFormat:@"%d",self.curepage], + @"version":APP_VERSION}; + [ZCNetRequestManager postRequestWithParameters:param subUrl:URL_user_visitor block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + [MBProgressHUD hideHUDForView:self.view animated:YES]; + if ([resultDic[@"retcode"] intValue] == 1) { + self.title = [NSString stringWithFormat:@"我的访客(%@)",resultDic[@"number"]]; + if (self.curepage == 1) { + [self.dataArray removeAllObjects]; + } + for (NSDictionary *dict in resultDic[@"message"]) { + [self.dataArray addObject:dict]; + } + + if (self.dataArray.count>=[resultDic[@"number"] intValue]) { + [self endRefreshingWithNoMoreData]; + }else{ + [self tableViewDidFinishTriggerHeader:NO reload:YES]; + } + [self tableViewDidFinishTriggerHeader:YES reload:YES]; + + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; +} + +- (void)tableViewDidTriggerHeaderRefresh +{ + + self.curepage = 1; + [self requestData]; +} + +- (void)tableViewDidTriggerFooterRefresh +{ + self.curepage += 1; + [self requestData]; +} +- (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/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\347\263\273\347\273\237\346\216\250\350\215\220/CordialViewController.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\347\263\273\347\273\237\346\216\250\350\215\220/CordialViewController.h" new file mode 100644 index 0000000000000000000000000000000000000000..92adab559fe31d2596739604465a2b6d7f9757c6 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\347\263\273\347\273\237\346\216\250\350\215\220/CordialViewController.h" @@ -0,0 +1,17 @@ +// +// CordialViewController.h +// JQ_ELOVE +// +// Created by Shmily on 16/7/4. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "ZCRefreshTableViewController.h" + +@interface CordialViewController : ZCRefreshTableViewController + +@property (nonatomic,retain)NSString *name; + +@property (nonatomic,retain)NSArray *data; + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\347\263\273\347\273\237\346\216\250\350\215\220/CordialViewController.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\347\263\273\347\273\237\346\216\250\350\215\220/CordialViewController.m" new file mode 100644 index 0000000000000000000000000000000000000000..f58c9fbf171cbfd3a40690cbf98788f2c21a11f5 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\347\263\273\347\273\237\346\216\250\350\215\220/CordialViewController.m" @@ -0,0 +1,212 @@ +// +// CordialViewController.m +// JQ_ELOVE +// +// Created by Shmily on 16/7/4. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "CordialViewController.h" +#import "CordialNewTableViewCell.h" +#import "ImageTextButton.h" +#import "CordiaFooterView.h" +#import "ChatViewController.h" +#import "ItemImageBtn.h" +#import "CordiaModel.h" +#import "OtherViewController.h" +#import "BMKClusterManager.h" //点聚合管理类,使用百度的点聚合算法 +#import "QYCluster.h" +#import "ZCAlertController.h" + + +@interface CordialViewController () +{ + NSString *_comeType; +} + +@end + + +@implementation CordialViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.title = _name; + [self.tableView registerClass:[CordialNewTableViewCell class] forCellReuseIdentifier:@"CordialNewTableViewCell"]; + self.tableView.height =KSCREEN_HEIGHT-kTopHeight; + self.tableView.separatorStyle =0; + if (ARRAY_IS_NOT_EMPTY(self.data)) { + + for (BMKClusterItem *item in self.data) { + QYCluster *qy = item.cluster; + CordiaModel *model = [[CordiaModel alloc]init]; + model.nickname = qy.nickname; + model.avatar = qy.avatar; + model.age = qy.age; + model.degree = qy.degree; + model.height = qy.height; + model.localPlace = qy.localplace; + model.userID = qy.userID; + model.ifattention = qy.ifattention; + model.match = qy.distance; + [self.dataArray addObject:model]; + } + [self.tableView reloadData]; + + }else{ + self.curepage = 1; + self.showRefreshHeader = YES; + self.showRefreshFooter = YES; + + if ([_name isEqualToString:@"系统推荐"]) { + _comeType = @"1"; + }else{ + _comeType = @"2"; + } + [self requestData]; + } +} +/** + * 创建UITablieViewDelegate + */ +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + CordialNewTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CordialNewTableViewCell"]; + cell.footerView.leftBtn.tag = indexPath.row; + cell.footerView.rightBtn.tag = indexPath.row; + [cell.footerView.rightBtn addTarget:self action:@selector(clickLeftBtn:) forControlEvents:UIControlEventTouchUpInside]; + [cell.footerView.leftBtn addTarget:self action:@selector(ClickAcction:) forControlEvents:UIControlEventTouchUpInside]; + cell.selectionStyle =0; + cell.model = self.dataArray[indexPath.row]; + return cell; +} +- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + return self.dataArray.count; +} +- (CGFloat )tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + return 145; +} + +- (void)clickLeftBtn:(ImageTextButton *)btn{ + + CordiaModel *model = self.dataArray[btn.tag]; + [ZCTools toChatViewController:model.userID conversationType:EMConversationTypeChat name:model.nickname avatarUrl:model.avatar homeSelf:self]; +} + +/** + * 关注 + */ +- (void)ClickAcction:(ImageTextButton *)btn +{ + CordiaModel *model = self.dataArray[btn.tag]; + + if([model.ifattention intValue] == 0){ + [self guanzhuAction:@"1" model:model button:btn]; + }else if([model.ifattention intValue] == 1){ + NSMutableArray *titleArray = [NSMutableArray arrayWithArray:@[@"取消", @"确定"]]; + ZCAlertController *alertView = [[ZCAlertController alloc] initZCAlertControllerWithTitle:nil message:@"确定取消关注吗?" titleArray:titleArray tag:btn.tag model:model alertAction:^(NSInteger index, NSInteger tag, CordiaModel *cordiaModel) { + if (index == 1) { + [self guanzhuAction:@"2" model:cordiaModel button:btn]; + } + }]; + + [alertView showZCAlert]; + } +} + +- (void)guanzhuAction:(NSString *)action model:(CordiaModel *)model button:(ImageTextButton *)btn +{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:NetworkFailure toView:self.view]; + return; + } + + NSDictionary *Params = @{@"userID":USER_USERID, + @"otherID":model.userID, + @"action":action, + @"version":APP_VERSION}; + [ZCNetRequestManager postRequestWithParameters:Params subUrl:URL_user_friendadd block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + if ([resultDic[@"retcode"] intValue] == 1) { + if ([model.ifattention intValue] == 0) { + model.ifattention = @"1"; + }else{ + model.ifattention = @"0"; + } + [self.dataArray replaceObjectAtIndex:btn.tag withObject:model]; + NSIndexPath *indexpath = [NSIndexPath indexPathForRow:btn.tag inSection:0]; + [self.tableView reloadRowsAtIndexPaths:@[indexpath] withRowAnimation:UITableViewRowAnimationNone]; + } + } + }]; +} + +- (void)requestData{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:NetworkFailure toView:self.view]; + return; + } + NSDictionary *parameters = @{ + @"userID":USER_USERID, + @"limit":@"10", + @"offset":[NSString stringWithFormat:@"%d", self.curepage], + @"type":_comeType, + @"version":APP_VERSION, + }; + if (self.curepage == 1) { + [MBProgressHUD showMessag:@"" toView:self.view]; + } + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_myMatchs block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + [MBProgressHUD hideHUDForView:self.view animated:YES]; + if ([resultDic[@"retcode"] intValue] == 1) { + if (self.curepage == 1) { + [self.dataArray removeAllObjects]; + } + for (NSDictionary *dict in resultDic[@"message"]) { + CordiaModel *model = [[CordiaModel alloc]init]; + [model initData:dict]; + [self.dataArray addObject:model]; + } + + if (self.dataArray.count>=[resultDic[@"number"] intValue]) { + [self endRefreshingWithNoMoreData]; + }else{ + [self tableViewDidFinishTriggerHeader:NO reload:YES]; + } + [self tableViewDidFinishTriggerHeader:YES reload:YES]; + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + CordiaModel *model = self.dataArray[indexPath.row]; + [ZCTools toPersonalHome:model.userID homeNickname:model.nickname homeSelf:self]; +} + +- (void)tableViewDidTriggerHeaderRefresh +{ + self.curepage = 1; + [self requestData]; +} + +- (void)tableViewDidTriggerFooterRefresh +{ + self.curepage += 1; + [self requestData]; +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\347\274\230\345\234\210/CommentListViewController.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\347\274\230\345\234\210/CommentListViewController.h" new file mode 100644 index 0000000000000000000000000000000000000000..6557205404ff8d1d584a5487a71658995fa8b843 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\347\274\230\345\234\210/CommentListViewController.h" @@ -0,0 +1,21 @@ +// +// CommentListViewController.h +// JQQY +// +// Created by chason on 2018/1/3. +// Copyright © 2018年 jiuqi. All rights reserved. +// + +#import "ZCRefreshTableViewController.h" + +@interface CommentListViewController : ZCRefreshTableViewController + +@property (nonatomic, copy) NSString *yuanquanid; +@property (nonatomic, copy) NSString *recid; +@property (nonatomic, copy) NSString *parentid; +@property (nonatomic, copy) NSString *firstid; + + +@property (nonatomic,retain)NSString *otherName; + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\347\274\230\345\234\210/CommentListViewController.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\347\274\230\345\234\210/CommentListViewController.m" new file mode 100644 index 0000000000000000000000000000000000000000..eeba6a770266c0f1f7ae10d1a5351653024d1bec --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\347\274\230\345\234\210/CommentListViewController.m" @@ -0,0 +1,328 @@ +// +// CommentListViewController.m +// JQQY +// +// Created by chason on 2018/1/3. +// Copyright © 2018年 jiuqi. All rights reserved. +// + +#import "CommentListViewController.h" +#import "YuanquanCommentCell.h" +#import "YuanquanCommentHeaderView.h" +#import "YuanquanDetailBottomView.h" +#import "QYInputToolbar.h" +#import "YuanquanCommentModel.h" +#import "ZCAlertController.h" +#import "IntroduceViewController.h" + +@interface CommentListViewController () +{ + NSString *_replyNum; + + +} +@property (nonatomic, strong) YuanquanDetailBottomView *bottomView; +@property (nonatomic, strong) QYInputToolbar *qyInputView; + +@end + +@implementation CommentListViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + _replyNum = @"0"; + [self.view addSubview:self.bottomView]; + [self setTableViewFrame:CGRectMake(0, 0, KSCREEN_WIDTH, KSCREEN_HEIGHT-kTopHeight-50)]; + self.tableView.backgroundColor = UIColorFromRGB(0xf3f3f3); + self.tableView.separatorStyle = 0; + self.showRefreshFooter = YES; + self.showRefreshHeader = YES; + self.curepage = 1; + + [self.tableView registerClass:[YuanquanCommentCell class] forCellReuseIdentifier:NSStringFromClass([YuanquanCommentCell class])]; + [self requestReplyComment]; + self.title = [NSString stringWithFormat:@"评论:%@",_otherName]; +} + +- (void)tableViewDidTriggerFooterRefresh +{ + self.curepage += 1; + [self requestReplyComment]; +} + +- (void)tableViewDidTriggerHeaderRefresh +{ + self.curepage =1; + [self requestReplyComment]; +} + +- (YuanquanDetailBottomView *)bottomView +{ + if (!_bottomView) { + _bottomView = [[YuanquanDetailBottomView alloc] initWithFrame:CGRectMake(0, KSCREEN_HEIGHT-kTopHeight-50, KSCREEN_WIDTH, 50)]; + _bottomView.textLab.userInteractionEnabled = YES; + _bottomView.textLab.text = [NSString stringWithFormat:@"评论:%@",_otherName]; + _bottomView.msgBtn.hidden = YES; + _bottomView.shareBtn.hidden = YES; + _bottomView.collectionBtn.hidden = YES; + _bottomView.textLab.width = KSCREEN_WIDTH-40; + _bottomView.msgBtn.left = _bottomView.textLab.right; + UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(bottomViewClicked)]; + [_bottomView.textLab addGestureRecognizer:tap]; + } + return _bottomView; +} + +- (QYInputToolbar *)qyInputView +{ + if (!_qyInputView) { + _qyInputView= [[QYInputToolbar alloc] initWithFrame:CGRectMake(0,0,KSCREEN_WIDTH, KSCREEN_HEIGHT)]; + _qyInputView.textViewMaxLine =4; + _qyInputView.delegate = self; + } + return _qyInputView; +} + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView +{ + return 2; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + if (section == 0) { + return 1; + } + if (self.dataArray.count>0) { + return self.dataArray.count-1; + } + return 0; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + if (indexPath.section == 0 && self.dataArray.count>0) { + YuanquanCommentModel *model = self.dataArray[indexPath.row]; + return model.cellHeight; + } + if (self.dataArray.count>1) { + YuanquanCommentModel *model = self.dataArray[indexPath.row+1]; + return model.cellHeight; + } + return 0; +} + +- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section +{ + return nil; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section +{ + return CGFLOAT_MIN; +} + +- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section +{ + YuanquanCommentHeaderView *headerView = [[YuanquanCommentHeaderView alloc] initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH, 40)]; + headerView.textLab.text = [NSString stringWithFormat:@"全部回复(%@)", _replyNum]; + headerView.whiteView.backgroundColor = UIColorFromRGB(0xf3f3f3); + if (section == 1) { + return headerView; + } + return [[UIView alloc] initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH, 10)]; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section +{ + if (section == 0) { + return 10; + } + return 40; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + YuanquanCommentCell *cell = [tableView dequeueReusableCellWithIdentifier:@"YuanquanCommentCell" forIndexPath:indexPath]; + cell.delegate = self; + cell.selectionStyle = 0; + if (indexPath.section == 0) { + if (self.dataArray.count>0) { + cell.model = self.dataArray[indexPath.row]; + } + cell.optionBtn.hidden = YES; + cell.line.hidden = YES; + cell.bgView.backgroundColor = UIColorFromRGB(0xffffff); + }else if (indexPath.section == 1) { + if (self.dataArray.count>1) { + cell.model = self.dataArray[indexPath.row+1]; + } + cell.optionBtn.hidden = NO; + cell.line.hidden = NO; + cell.bgView.backgroundColor = UIColorFromRGB(0xf3f3f3); + } + cell.lookReplyBtn.hidden = YES; + return cell; +} + +- (void)clickOptionBtn:(id)cell +{ + YuanquanCommentCell *commentCell =(YuanquanCommentCell *)cell; + YuanquanCommentModel *commentModel = self.dataArray[commentCell.tag+1]; + NSMutableArray *titleArray; + if ([commentModel.userid isEqualToString:USER_USERID]) { + titleArray = [NSMutableArray arrayWithArray:@[@"删除此条评论"]]; + }else{ + titleArray = [NSMutableArray arrayWithArray:@[@"举报此条评论"]]; + } + + ZCAlertController *alertController = [ZCAlertController initZCAlertControllerWithTitle:nil message:nil style:@"0" titleArray:titleArray alertAction:^(NSInteger index) { + if (index == 0) { + if ([commentModel.userid isEqualToString:USER_USERID]) { + // NSLog(@"删除"); + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:NetworkFailure toView:self.view]; + return; + } + NSDictionary *parameters = @{ + @"recid":commentModel.recid, + @"version":APP_VERSION, + }; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_yuanquan_commentDelete block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + if ([resultDic[@"retcode"] intValue] == 1) { + [self.dataArray removeObject:commentModel]; + _replyNum = [NSString stringWithFormat:@"%d", [_replyNum intValue]-1]; + [self.tableView reloadData]; + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; + }else{ + // NSLog(@"举报"); + IntroduceViewController *reasonVC = [[IntroduceViewController alloc] init]; + reasonVC.reportID = commentModel.recid; + reasonVC.titleName = @"举报理由"; + reasonVC.type = 5; + [self.navigationController pushViewController:reasonVC animated:YES]; + } + } + }]; + [alertController showZCAlert]; +} + +- (void)bottomViewClicked +{ + + [self.qyInputView startEdit:[NSString stringWithFormat:@"评论:%@",_otherName]]; +} + +#pragma mark —————— 发表回复评论 —————— + +- (void)inputToolbar:(QYInputToolbar *)inputToolbar sendContent:(NSString *)sendContent +{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:NetworkFailure toView:self.view]; + return; + } + NSDictionary *parameters = @{ + @"userid":USER_USERID, + @"parentid":_parentid, + @"firstid":_firstid, + @"titleid":_yuanquanid, + @"content":sendContent, + @"version":APP_VERSION, + }; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_yuanquan_commentPublic block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + if ([resultDic[@"retcode"] intValue] == 1) { + YuanquanCommentModel *model = [[YuanquanCommentModel alloc] init]; + [model initYuanquanCommentModel:resultDic[@"message"]]; + [self.dataArray insertObject:model atIndex:1]; + _replyNum = [NSString stringWithFormat:@"%d", [_replyNum intValue]+1]; + [self.tableView reloadData]; + [inputToolbar sendSuccessEndEditing]; + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; +} + +#pragma mark —————— 获取回复评论 —————— + +- (void)requestReplyComment +{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:NetworkFailure toView:self.view]; + return; + } + NSDictionary *parameters = @{ + @"userid":USER_USERID, + @"titleid":_yuanquanid, + @"recid":_recid, + @"limit":@"10", + @"offset":[NSString stringWithFormat:@"%d", self.curepage], + @"version":APP_VERSION, + }; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_yuanquan_comment block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + if ([resultDic[@"retcode"] intValue] == 1) { + _replyNum = resultDic[@"message"][@"pageCount"]; + if ([resultDic[@"message"][@"pageCount"] intValue] <= 99) { + _bottomView.msgNumLab.text = ToString(resultDic[@"message"][@"pageCount"]); + }else{ + _bottomView.msgNumLab.text = @"99+"; + } + if (self.curepage ==1) { + [self.dataArray removeAllObjects]; + } + + YuanquanCommentModel *model = [[YuanquanCommentModel alloc] init]; + model.childCount = @"0"; + [model initYuanquanCommentModel:resultDic[@"message"][@"user"]]; + [self.dataArray addObject:model]; + for (NSDictionary *dict in resultDic[@"message"][@"list"]) { + YuanquanCommentModel *model = [[YuanquanCommentModel alloc] init]; + model.childCount = @"0"; + [model initYuanquanCommentModel:dict]; + [self.dataArray addObject:model]; + } + if (self.dataArray.count >= [resultDic[@"message"][@"pageCount"] intValue]) { + [self endRefreshingWithNoMoreData]; + }else{ + [self tableViewDidFinishTriggerHeader:NO reload:YES]; + } + [self tableViewDidFinishTriggerHeader:YES reload:YES]; + + }else{ + if ([resultDic[@"explanation"] isEqualToString:@"此评论已被删除"]) { + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [self.navigationController popViewControllerAnimated:YES]; + }); + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + } + }]; +} + +- (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/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\347\274\230\345\234\210/LookVideoViewController.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\347\274\230\345\234\210/LookVideoViewController.h" new file mode 100644 index 0000000000000000000000000000000000000000..230babe87b2d2d89fa532c5757a75d889c8d85b8 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\347\274\230\345\234\210/LookVideoViewController.h" @@ -0,0 +1,22 @@ +// +// LookVideoViewController.h +// JQ_ELOVE +// +// Created by chason on 16/9/5. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "RootViewController.h" +#import + +@interface LookVideoViewController : RootViewController + +@property (strong, nonatomic) NSURL *videoFileURL; +@property (strong, nonatomic) AVPlayer *player; +@property (strong, nonatomic) AVPlayerLayer *playerLayer; +@property (strong, nonatomic) UIButton *playButton; +@property (strong, nonatomic) AVPlayerItem *playerItem; +@property NSInteger comeType;//1 自己看视频 action 1 2 别人看 action 2 3上传成功 action 1 + +@property (nonatomic, strong) NSString *userid; +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\347\274\230\345\234\210/LookVideoViewController.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\347\274\230\345\234\210/LookVideoViewController.m" new file mode 100644 index 0000000000000000000000000000000000000000..7f9b1ec6d3b61b39143972a00e40870e4fee6d1f --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\347\274\230\345\234\210/LookVideoViewController.m" @@ -0,0 +1,286 @@ +// +// LookVideoViewController.m +// JQ_ELOVE +// +// Created by chason on 16/9/5. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "LookVideoViewController.h" +#import "AvatarImageView.h" +#import "SexView.h" +#import "PlayViewController.h" +#import + +#import + + +@interface LookVideoViewController () + +@property (nonatomic, strong) AvatarImageView *headImageView; +@property (nonatomic, strong) SexView *sexView; +@property (nonatomic, strong) UILabel *nickNameLab; +@property (nonatomic, strong) UILabel *isPassLab; + +@end + +@implementation LookVideoViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + [self loadVideo]; + self.title = @"视频介绍"; + if(_comeType ==1){ + [self addNavigationItemWithTitles:@[@"录制"] isLeft:NO target:self action:@selector(recordFullScreen) tags:nil]; + } +} + +- (AvatarImageView *)headImageView{ + if(!_headImageView){ + _headImageView = [[AvatarImageView alloc]initWithFrame:CGRectMake(15, 10, 50, 50)]; + [self.view addSubview:_headImageView]; + } + return _headImageView; +} + +- (UILabel *)nickNameLab{ + if(!_nickNameLab){ + _nickNameLab = [[UILabel alloc]initWithFrame:CGRectMake(_headImageView.right+10, 10, 200, 20)]; + _nickNameLab.font = [UIFont systemFontOfSize:13]; + _nickNameLab.text = @""; + [self.view addSubview:_nickNameLab]; + + } + return _nickNameLab; +} +- (SexView *)sexView{ + if(!_sexView){ + _sexView = [[SexView alloc]initWithFrame:CGRectMake(_headImageView.right+10, _nickNameLab.bottom+5, 50, 20)]; + [self.view addSubview:_sexView]; + + } + return _sexView; +} + +- (UILabel *)isPassLab{ + if(!_isPassLab){ + _isPassLab = [[UILabel alloc]initWithFrame:CGRectMake(_sexView.right+10, _nickNameLab.bottom+5, 60, 20)]; + _isPassLab.font = [UIFont systemFontOfSize:13]; + [self.view addSubview:_isPassLab]; + + } + return _isPassLab; +} + +- (void)recordFullScreen +{ + [ZCTools AliyunVideoSelf:self]; + [AliyunVideoBase shared].delegate = self; +} + +- (void)showMessage:(NSString *)message +{ + UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"提示" message:message delegate:self cancelButtonTitle:@"好" otherButtonTitles:nil, nil]; + alertView.tag = 10010; + [alertView show]; +} + + +#pragma mark - 获取视频路径 + +-(void)videoBaseRecordVideoExit { + if ([self respondsToSelector:@selector(dismissViewControllerAnimated:completion:)]) { + [self dismissViewControllerAnimated:YES completion:NULL]; + } else if ([self.navigationController respondsToSelector:@selector(popViewControllerAnimated:)]) { + [self.navigationController popViewControllerAnimated:YES]; + } +} + +- (void)videoBase:(AliyunVideoBase *)base recordCompeleteWithRecordViewController:(UIViewController *)recordVC videoPath:(NSString *)videoPath { + NSLog(@"录制完成 %@", videoPath); + if (STR_IS_NOT_EMPTY(videoPath)) { + [MBProgressHUD showMessag:nil toView:self.view]; + } + [self dismissViewControllerAnimated:NO completion:^{ + [MBProgressHUD hideHUDForView:self.view animated:YES]; + if(STR_IS_NOT_EMPTY(videoPath)){ + PlayViewController *playCon = [[PlayViewController alloc] init]; + playCon.videoFileURL = [NSURL fileURLWithPath:videoPath]; + playCon.vc =self; + [self.navigationController pushViewController:playCon animated:YES]; + } + }]; +} + +- (UIButton *)playButton +{ + if (!_playButton) { + _playButton = [UIButton buttonWithType:UIButtonTypeCustom]; + _playButton.frame = _playerLayer.frame; + [_playButton setImage:[UIImage imageNamed:@"set_video"] forState:UIControlStateNormal]; + [_playButton addTarget:self action:@selector(pressPlayButton:) forControlEvents:UIControlEventTouchUpInside]; + [self.view addSubview:_playButton]; + + } + return _playButton; +} + + +- (void)viewDidAppear:(BOOL)animated +{ + [super viewDidAppear:animated]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(avPlayerItemDidPlayToEnd:) name:AVPlayerItemDidPlayToEndTimeNotification object:nil]; +} + + +- (void)viewDidDisappear:(BOOL)animated +{ + [super viewDidDisappear:animated]; + +} + +- (void)viewWillDisappear:(BOOL)animated +{ + [super viewWillDisappear:animated]; +} + +- (void)dealloc{ + [[NSNotificationCenter defaultCenter] removeObserver:self]; + [_player pause]; + [_playerItem removeObserver:self forKeyPath:@"status"]; + [_playerItem removeObserver:self forKeyPath:@"loadedTimeRanges"]; +} + + + +- (void)initPlayLayer +{ + if (!_videoFileURL) { + return; + } + + AVAsset *movieAsset = [AVURLAsset URLAssetWithURL:_videoFileURL options:nil]; + self.playerItem = [AVPlayerItem playerItemWithAsset:movieAsset]; + self.player = [AVPlayer playerWithPlayerItem:_playerItem]; + self.playerLayer = [AVPlayerLayer playerLayerWithPlayer:_player]; + _playerLayer.frame = CGRectMake(0,_headImageView.bottom+10, KSCREEN_WIDTH, KSCREEN_WIDTH); + _playerLayer.backgroundColor = UIColorFromRGB(0xf0f0f0).CGColor; + _playerLayer.videoGravity = AVLayerVideoGravityResizeAspect; + [self.view.layer addSublayer:_playerLayer]; + + + [self.playerItem addObserver:self forKeyPath:@"status" options:NSKeyValueObservingOptionNew context:nil];// 监听status属性 + [self.playerItem addObserver:self forKeyPath:@"loadedTimeRanges" options:NSKeyValueObservingOptionNew context:nil];// 监听loadedTimeRanges属性 + +} + +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { + AVPlayerItem *playerItem = (AVPlayerItem *)object; + + if ([keyPath isEqualToString:@"status"]) { + + if ([playerItem status] == AVPlayerStatusReadyToPlay) { + + NSLog(@"AVPlayerStatusReadyToPlay"); + }else if ([playerItem status] == AVPlayerStatusFailed) { + + NSLog(@"AVPlayerStatusFailed"); + [MBProgressHUD hideHUDForView:self.view animated:YES]; + self.playButton.hidden =NO; + } + }else if ([keyPath isEqualToString:@"loadedTimeRanges"]) { + [MBProgressHUD hideHUDForView:self.view animated:YES]; + self.playButton.hidden =NO; + } +} + +- (void)pressPlayButton:(UIButton *)button +{ + [_playerItem seekToTime:kCMTimeZero]; + [_player play]; + _playButton.alpha = 0.0f; +} + +- (void)backBtnClicked +{ + [_player pause]; + if (_comeType==3) { + [ZCTools popToNameVC:@"LookVideoViewController" andControViewDelegate:self]; + [ZCTools popToNameVC:@"MyInforViewController_new" andControViewDelegate:self]; + }else{ + [self.navigationController popViewControllerAnimated:YES]; + } +} + +#pragma mark - PlayEndNotification +- (void)avPlayerItemDidPlayToEnd:(NSNotification *)notification +{ + if ((AVPlayerItem *)notification.object != _playerItem) { + return; + } + [UIView animateWithDuration:0.3f animations:^{ + _playButton.alpha = 1.0f; + }]; +} + +- (void)loadVideo{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:@"网络异常" toView:self.view]; + return; + } + + NSString *action; + if (_comeType ==1 || _comeType ==3) { + action = @"1"; + }else{ + action = @"2"; + } + [MBProgressHUD showMessag:nil toView:self.view]; + NSDictionary *params = @{@"userID":_userid, + @"action":action, + @"version":APP_VERSION}; + [ZCNetRequestManager postRequestWithParameters:params subUrl:URL_yuanquan_video block:^(NSDictionary *resultDic, NSError *error) { + if(resultDic){ + [MBProgressHUD hideHUDForView:self.view animated:YES]; + if([resultDic[@"retcode"] intValue] == 1){ + [self.headImageView setTitle:resultDic[@"message"][@"nickname"] imageUrl:resultDic[@"message"][@"avatar"]]; + self.nickNameLab.text = resultDic[@"message"][@"nickname"]; + self.sexView.titleAge = ToString(resultDic[@"message"][@"age"]); + self.sexView.sex = ToString(resultDic[@"message"][@"sex"]); + self.isPassLab.left =_sexView.right+6; + if([resultDic[@"message"][@"videotype"] intValue] == 1){ + _isPassLab.text = @"已认证"; + _isPassLab.textColor = CTHEMECOLOR; + }else if([resultDic[@"message"][@"videotype"] intValue] == 2){ + _isPassLab.text = @"审核中..."; + _isPassLab.textColor = [UIColor grayColor]; + }else if([resultDic[@"message"][@"videotype"] intValue] == 3){ + _isPassLab.text = @"未通过"; + _isPassLab.textColor = [UIColor grayColor]; + } + _videoFileURL = [NSURL URLWithString:resultDic[@"message"][@"video"]]; + [self performSelector:@selector(initPlayLayer) withObject:nil afterDelay:0.2]; + + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; +} + +- (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/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\347\274\230\345\234\210/NearbyPlaceViewController.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\347\274\230\345\234\210/NearbyPlaceViewController.h" new file mode 100644 index 0000000000000000000000000000000000000000..5600185d9c8992ca87f5867794e5a4e2c6878b41 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\347\274\230\345\234\210/NearbyPlaceViewController.h" @@ -0,0 +1,15 @@ +// +// NearbyPlaceViewController.h +// JQ_ELOVE +// +// Created by chason on 2017/5/4. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import "ZCRefreshTableViewController.h" + +@interface NearbyPlaceViewController : ZCRefreshTableViewController + +@property (nonatomic, copy) void (^addLocation)(NSString *location); + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\347\274\230\345\234\210/NearbyPlaceViewController.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\347\274\230\345\234\210/NearbyPlaceViewController.m" new file mode 100644 index 0000000000000000000000000000000000000000..7ceb6b5533858d53b08a715674af0ab9cee0bafc --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\347\274\230\345\234\210/NearbyPlaceViewController.m" @@ -0,0 +1,119 @@ +// +// NearbyPlaceViewController.m +// JQ_ELOVE +// +// Created by chason on 2017/5/4. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import "NearbyPlaceViewController.h" +#import "ZCAlertController.h" + +@interface NearbyPlaceViewController () +{ + NSString *_city; +} +@property (nonatomic, strong) UIButton *refreshBtn; +@end + +@implementation NearbyPlaceViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.title = @"选择位置"; + if ([MapManager judgeLocation]) { + self.tableView.height = KSCREEN_HEIGHT-kTopHeight; + //一进页面开始转菊花 + [MBProgressHUD showMessag:nil toView:self.view]; + + [[MapManager instance] startlocation:YES locationSuccess:NULL addressSuccess:^(NSString *longitude, NSString *latitude, BMKAddressComponent *address, BMKReverseGeoCodeResult *result, NSInteger error) { + if (!error) { + [MBProgressHUD hideHUDForView:self.view animated:YES]; + _city = result.addressDetail.city; + //将所需结果添加到数组中 + for (BMKPoiInfo *model in result.poiList) { + [self.dataArray addObject:model]; + } + //刷新tableView + [self.tableView reloadData]; + } + }]; + } +} + +-(void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; +} + +-(void)viewWillDisappear:(BOOL)animated { + [super viewWillDisappear:animated]; +} + + + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ + + if (ARRAY_IS_NOT_EMPTY(self.dataArray)) { + return self.dataArray.count+2; + } + return 0; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ + return 50; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"UITableViewCell"]; + if (cell == nil) { + cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"UITableViewCell"]; + } + if (indexPath.row == 0) { + cell.textLabel.text = @"不显示位置"; + cell.textLabel.textColor = UIColorFromRGB(0x7786a2); + cell.detailTextLabel.text =nil; + }else if (indexPath.row == 1) { + cell.textLabel.text = _city; + cell.textLabel.textColor = UIColorFromRGB(0x000000); + cell.detailTextLabel.text =nil; + + }else { + + if (ARRAY_IS_NOT_EMPTY(self.dataArray)) { + BMKPoiInfo *model = self.dataArray[indexPath.row-2]; + cell.textLabel.text = [NSString stringWithFormat:@"%@",model.name]; + cell.detailTextLabel.text = [NSString stringWithFormat:@"%@",model.address]; + cell.textLabel.textColor = UIColorFromRGB(0x000000); + } + } + cell.textLabel.font = [UIFont systemFontOfSize:15]; + cell.detailTextLabel.font = [UIFont systemFontOfSize:10]; + cell.detailTextLabel.textColor = UIColorFromRGB(0x9f9f9f); + cell.selectionStyle = UITableViewCellSelectionStyleNone; + return cell; +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ + if (indexPath.row == 0) { + if (self.addLocation) { + self.addLocation([NSString stringWithFormat:@"%@", @"选择位置"]); + } + }else if (indexPath.row == 1) { + if (self.addLocation) { + self.addLocation([NSString stringWithFormat:@"%@", _city]); + } + }else { + BMKPoiInfo *model = self.dataArray[indexPath.row-2]; + if (self.addLocation) { + self.addLocation([NSString stringWithFormat:@"%@·%@", _city, model.name]); + } + } + [self.navigationController popViewControllerAnimated:YES]; +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\347\274\230\345\234\210/PublicYuanquanViewController.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\347\274\230\345\234\210/PublicYuanquanViewController.h" new file mode 100644 index 0000000000000000000000000000000000000000..fccd030519d68863dc13238bb71a901fef8ac60d --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\347\274\230\345\234\210/PublicYuanquanViewController.h" @@ -0,0 +1,24 @@ +// +// PublicYuanquanViewController.h +// JQQY +// +// Created by chason on 2017/12/21. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "RootViewController.h" +#import "YuanquanModel.h" + +@protocol uploadYuanQuanDelegate + +- (void)reloadYuanQuan:(YuanquanModel *)model; + +@end + +@interface PublicYuanquanViewController : RootViewController + +@property (nonatomic, weak)id delegte; + +@property (nonatomic, strong) NSDictionary *topicDict; + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\347\274\230\345\234\210/PublicYuanquanViewController.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\347\274\230\345\234\210/PublicYuanquanViewController.m" new file mode 100644 index 0000000000000000000000000000000000000000..bb309a4e6128d563b6110dcdd602aa8ef2a145e1 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\347\274\230\345\234\210/PublicYuanquanViewController.m" @@ -0,0 +1,280 @@ +// +// PublicYuanquanViewController.m +// JQQY +// +// Created by chason on 2017/12/21. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "PublicYuanquanViewController.h" +#import "ImgTextImg.h" +#import "ZCTextView.h" +#import "PicturesView.h" +#import "TopicListViewController.h" +#import "NearbyPlaceViewController.h" +#import "JSONKit.h" +#import "UploadMethod.h" +#import "CustomNavigationView.h" + +@interface PublicYuanquanViewController () +{ + NSString *titleid; + NSString *content; + NSString *address; + NSString *videoimg; + NSString *topicid; + NSInteger photoNum; + NSMutableArray *_mediaArray; + NSMutableArray *pathArray; + NSMutableArray *uploadPictureArray; + int action; +} +@property (nonatomic, strong) CustomNavigationView *customNavigationView; +@property (nonatomic, strong) ImgTextImg *topicView; +@property (nonatomic, strong) ZCTextView *textView; +@property (nonatomic, strong) PicturesView *picturesView; +@property (nonatomic, strong) ImgTextImg *positionView; + +@end + +@implementation PublicYuanquanViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + self.view.backgroundColor = UIColorFromRGB(0xf3f3f3); + self.isHidenNaviBar = YES; + + _mediaArray = [NSMutableArray arrayWithCapacity:0]; + pathArray = [NSMutableArray arrayWithCapacity:0]; + uploadPictureArray = [NSMutableArray arrayWithCapacity:0]; + photoNum = 0; + videoimg = @""; + + [self.view addSubview:self.customNavigationView]; + [self.view addSubview:self.topicView]; + [self.view addSubview:self.textView]; + [self.view addSubview:self.picturesView]; + [self.view addSubview:self.positionView]; +} + +- (CustomNavigationView *)customNavigationView +{ + if (!_customNavigationView) { + _customNavigationView = [[CustomNavigationView alloc] initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH, kTopHeight)]; + _customNavigationView.backgroundColor = PURPLECOLOUR; + _customNavigationView.titleLab.textColor = [UIColor whiteColor]; + _customNavigationView.titleLab.text = @"说点啥"; + _customNavigationView.rightBtn.titleLabel.font = SYSTEMFONT(13); + [_customNavigationView.leftBtn setImage:[UIImage imageNamed:@"back_icon"] forState:UIControlStateNormal]; + [_customNavigationView.rightBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; + [_customNavigationView.rightBtn setTitle:@"发表" forState:UIControlStateNormal]; + _customNavigationView.VC = self; + [_customNavigationView.rightBtn addTarget:self action:@selector(rightBtnClicked) forControlEvents:UIControlEventTouchUpInside]; + } + return _customNavigationView; +} + +- (ImgTextImg *)topicView +{ + if (!_topicView) { + _topicView = [[ImgTextImg alloc] initWithFrame:CGRectMake(0, _customNavigationView.bottom+10, KSCREEN_WIDTH, 50)]; + _topicView.backgroundColor = [UIColor whiteColor]; + _topicView.textLab.text = STR_IS_NOT_EMPTY(_topicDict[@"title"]) ? _topicDict[@"title"] : @"热门话题在这里"; + _topicView.leftImg.image = [UIImage imageNamed:@"fire"]; + _topicView.leftImg.width = 15; + _topicView.userInteractionEnabled = YES; + UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(topicViewClicked)]; + [_topicView addGestureRecognizer:tap]; + } + return _topicView; +} + +- (ZCTextView *)textView +{ + if (!_textView) { + _textView = [[ZCTextView alloc] initWithFrame:CGRectMake(0, _topicView.bottom+10, KSCREEN_WIDTH, 150)]; + _textView.backgroundColor = [UIColor whiteColor]; + _textView.placeholderTextView.text = @"说点什么吧..."; + } + return _textView; +} + +- (PicturesView *)picturesView +{ + if (!_picturesView) { + _picturesView = [[PicturesView alloc] initWithFrame:CGRectMake(0, _textView.bottom, KSCREEN_WIDTH, (KSCREEN_WIDTH-60)/4+20)]; + _picturesView.backgroundColor = [UIColor whiteColor]; + } + return _picturesView; +} + +- (ImgTextImg *)positionView +{ + if (!_positionView) { + _positionView = [[ImgTextImg alloc] initWithFrame:CGRectMake(0, _picturesView.bottom+10, KSCREEN_WIDTH, 50)]; + _positionView.backgroundColor = [UIColor whiteColor]; + _positionView.textLab.text = @"选择位置"; + _positionView.leftImg.image = [UIImage imageNamed:@"SDS-dd"]; + _positionView.userInteractionEnabled = YES; + UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(positionViewClicked)]; + [_positionView addGestureRecognizer:tap]; + } + return _positionView; +} + +#pragma mark —————— 点击了发表按钮 —————— + +- (void)rightBtnClicked +{ + [_textView.textView resignFirstResponder]; + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:@"网络异常" toView:self.view]; + return; + } + + //话题 + if ([_topicView.textLab.text isEqualToString:@"热门话题在这里"]) { + topicid = @""; + } + //文字内容 + if (STR_IS_NOT_EMPTY(_textView.textView.text)) { + content = _textView.textView.text; + }else{ + content = @""; + } + //所在位置 + if (![_positionView.textLab.text isEqualToString:@"选择位置"]) { + address = _positionView.textLab.text; + }else{ + address = @""; + } + + [_picturesView getMediablock:^(NSMutableArray *mediaArray) { + _mediaArray = mediaArray; + [mediaArray enumerateObjectsUsingBlock:^(NSDictionary *dict, NSUInteger idx, BOOL * _Nonnull stop) { + if ([dict[@"type"] intValue]==0) { + photoNum = mediaArray.count-1; + }else{ + photoNum = mediaArray.count; + } + }]; + }]; + + if (!STR_IS_NOT_EMPTY(_textView.textView.text) && photoNum <= 0) { + [MBProgressHUD showError:@"内容不能为空" toView:self.view]; + return; + } + + [MBProgressHUD showMessag:@"" toView:self.view]; + + //上传图片或者视频 + if (photoNum>0) { + [uploadPictureArray removeAllObjects]; + [pathArray removeAllObjects]; + UploadMethod *upload = [[UploadMethod alloc]init]; + NSData *meadiaData; + for (NSDictionary *dict in _mediaArray) { + if ([dict[@"type"] intValue]==1) {//图片 + meadiaData = UIImageJPEGRepresentation(dict[@"image"], 0.8); + upload.type = 2; + [upload transformImageToData:meadiaData uploadUrl:URL_user_getfileupurl]; + [upload setUploadImageBlock:^(NSDictionary *imageDict) { + if (imageDict) { + [uploadPictureArray addObject:imageDict]; + if (photoNum == uploadPictureArray.count) { + for (NSDictionary *dict in uploadPictureArray) { + [pathArray addObject:dict]; + } + action = 2; + [self publishYuanQuan]; + } + } + }]; + }else if ([dict[@"type"] intValue]==2){//视频 + upload.type = 9; + meadiaData = [NSData dataWithContentsOfURL:[NSURL fileURLWithPath:dict[@"path"]]]; + [upload transformImageToData:meadiaData uploadUrl:URL_user_getfileupurl]; + [upload setUploadVideoPath:^(NSString *path){ + if (path) { + videoimg = dict[@"videoimg"]; + [pathArray addObject:path]; + action = 1; + [self publishYuanQuan]; + } + }]; + } + } + }else{//只有文字的时候 + action = 0; + [self publishYuanQuan]; + } +} + +- (void)publishYuanQuan{ + NSDictionary *parameters = @{@"userid":USER_USERID, + @"version":APP_VERSION, + @"content":content, + @"imgs":[pathArray JSONString], + @"address":address, + @"action":[NSString stringWithFormat:@"%d",action], + @"videoimg":videoimg, + @"topicid":topicid, + }; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_yuanquan_publish block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + [MBProgressHUD hideHUDForView:self.view animated:YES]; + if ([resultDic[@"retcode"] intValue] == 1) { + YuanquanModel *model = [[YuanquanModel alloc]init]; + [model initYuanquanModel:resultDic[@"message"]]; + + if (_delegte && [_delegte respondsToSelector:@selector(reloadYuanQuan:)]) { + [_delegte reloadYuanQuan:model]; + } + [self.navigationController popViewControllerAnimated:YES]; + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; +} + +- (void)topicViewClicked +{ + TopicListViewController *topicListVC = [[TopicListViewController alloc] init]; + [self.navigationController pushViewController:topicListVC animated:YES]; + [topicListVC setSelectTopic:^(NSDictionary *dict) { + _topicView.textLab.text = [NSString stringWithFormat:@"# %@ #", dict[@"title"]]; + topicid = dict[@"recid"]; + }]; +} + +- (void)positionViewClicked +{ + NearbyPlaceViewController *nearbyPlaceVC = [[NearbyPlaceViewController alloc] init]; + [self.navigationController pushViewController:nearbyPlaceVC animated:YES]; + [nearbyPlaceVC setAddLocation:^(NSString *location) { + _positionView.textLab.text = location; + }]; +} + +- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ + [self.view endEditing:YES]; +} + +- (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/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\347\274\230\345\234\210/ShowBigIVViewController.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\347\274\230\345\234\210/ShowBigIVViewController.h" new file mode 100644 index 0000000000000000000000000000000000000000..49cb5a693dfb4380f5352f99ffdbf264e2fc2c36 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\347\274\230\345\234\210/ShowBigIVViewController.h" @@ -0,0 +1,26 @@ +// +// ShowBigIVViewController.h +// JQ_ELOVE +// +// Created by Shmily on 2017/5/11. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import "RootViewController.h" + +@protocol reloadPicDelegate + +- (void)removePicIndex:(NSInteger)index; + +@end + +@interface ShowBigIVViewController : RootViewController + +@property (nonatomic,assign)NSInteger currentPhotoIndex; +@property (nonatomic,assign)NSMutableArray *bigImageArray; +@property (nonatomic,assign)BOOL mediaType; + +@property (nonatomic,weak)iddelegate; +@property (nonatomic,retain)NSURL *videoFileURL; + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\347\274\230\345\234\210/ShowBigIVViewController.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\347\274\230\345\234\210/ShowBigIVViewController.m" new file mode 100644 index 0000000000000000000000000000000000000000..f7ea482b032b2ea0b42524e7e6f5c72f33b13806 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\347\274\230\345\234\210/ShowBigIVViewController.m" @@ -0,0 +1,232 @@ +// +// ShowBigIVViewController.m +// JQ_ELOVE +// +// Created by Shmily on 2017/5/11. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import "ShowBigIVViewController.h" +#import "ShowBigViewCell.h" +#import + +@interface ShowBigIVViewController () +{ + NSInteger curePage; + NSMutableArray*_dataArray; +} + +@property (nonatomic,retain)UITableView *mTableView; +@property (nonatomic,retain)UIButton *deleteBtn; +@property (strong, nonatomic) AVPlayer *player; +@property (strong, nonatomic) AVPlayerLayer *playerLayer; +@property (strong, nonatomic) UIButton *playButton; +@property (strong, nonatomic) AVPlayerItem *playerItem; + +@end + +#define xOrigin (KSCREEN_WIDTH-(KSCREEN_HEIGHT-kTopHeight-0))/2 +#define yOrigin ((KSCREEN_HEIGHT-kTopHeight-0)-KSCREEN_WIDTH)/2 + +@implementation ShowBigIVViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + _dataArray = [[NSMutableArray alloc]init]; + if (!_mediaType) { + [self.bigImageArray enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { + NSDictionary *dict = (NSDictionary *)obj; + if ([dict[@"type"] intValue]) { + [_dataArray addObject:obj]; + } + }]; + [self returnTitleName:0]; + [self.mTableView registerClass:[ShowBigViewCell class] forCellReuseIdentifier:@"ShowBigViewCell"]; + [self.mTableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:_currentPhotoIndex inSection:0] atScrollPosition:UITableViewScrollPositionNone animated:NO]; + }else{ + NSDictionary *dict = [self.bigImageArray firstObject]; + self.title = @"视频"; + _videoFileURL = [NSURL fileURLWithPath:dict[@"path"]]; + [self initPlayLayer]; + [self.view addSubview:self.playButton]; + } + [self addNavigationItemWithImageNames:@[@"delete_icon"] isLeft:NO target:self action:@selector(showActionSheet) tags:nil]; +} + +-(void)scrollViewDidScroll:(UIScrollView *)scrollView +{ + NSIndexPath* mIndexPath = [_mTableView indexPathForRowAtPoint:CGPointMake(scrollView.contentOffset.x, scrollView.contentOffset.y)]; + [self returnTitleName:mIndexPath.row]; +} + +- (void)returnTitleName:(NSInteger)p +{ + curePage = p; + self.title =[NSString stringWithFormat:@"%d / %d",(int)p+1,(int)_dataArray.count]; +} + + +- (UITableView *)mTableView +{ + if (!_mTableView) { + _mTableView = [[UITableView alloc]initWithFrame:CGRectZero style:UITableViewStylePlain]; + _mTableView.dataSource = self; + _mTableView.delegate =self; + _mTableView.pagingEnabled = YES; + _mTableView.showsHorizontalScrollIndicator = NO; + _mTableView.showsVerticalScrollIndicator = NO; + _mTableView.transform = CGAffineTransformIdentity; + _mTableView.separatorStyle = 0; + _mTableView.frame = CGRectMake(xOrigin,yOrigin,KSCREEN_HEIGHT-kTopHeight-0,KSCREEN_WIDTH); + _mTableView.transform = CGAffineTransformMakeRotation(-M_PI/2); + [self.view addSubview:_mTableView]; + + } + + return _mTableView; +} + +-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + return KSCREEN_WIDTH; +} + +-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + return _dataArray.count; +} +-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + ShowBigViewCell *testCell = [tableView dequeueReusableCellWithIdentifier:@"ShowBigViewCell"]; + testCell.selectionStyle =0; + NSDictionary *data = _dataArray[indexPath.row]; + testCell.bgImageVIew.image = data[@"image"]; + if (CGAffineTransformEqualToTransform(testCell.contentView.transform, CGAffineTransformIdentity)) + { + testCell.contentView.frame = CGRectMake(xOrigin, yOrigin,testCell.height, testCell.width); + testCell.contentView.transform = CGAffineTransformMakeRotation(M_PI/2.0); + } + return testCell; +} + +- (void)showActionSheet +{ + UIActionSheet *AtionSheet = [[UIActionSheet alloc]initWithTitle:nil delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:nil otherButtonTitles:@"删除", nil]; + [AtionSheet showInView:self.view]; +} + +- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex +{ + if (!buttonIndex) { + if (_mediaType) { + if (_delegate && [_delegate respondsToSelector:@selector(removePicIndex:)]) { + [_delegate removePicIndex:0]; + } + [self.navigationController popViewControllerAnimated:YES]; + return; + } + [_dataArray removeObjectAtIndex:(int)curePage]; //删除数据源记录 + [self.mTableView reloadData]; + if (_delegate && [_delegate respondsToSelector:@selector(removePicIndex:)]) { + [_delegate removePicIndex:curePage]; + } + if (curePage>=_dataArray.count) { + curePage = curePage-1; + } + [self returnTitleName:curePage]; + + if (_dataArray.count==0) { + [self.navigationController popViewControllerAnimated:YES]; + } + } +} + +- (UIButton *)playButton +{ + if (!_playButton) { + _playButton = [UIButton buttonWithType:UIButtonTypeCustom]; + _playButton.frame = _playerLayer.frame; + [_playButton setImage:[UIImage imageNamed:@"set_video"] forState:UIControlStateNormal]; + [_playButton addTarget:self action:@selector(pressPlayButton:) forControlEvents:UIControlEventTouchUpInside]; + } + return _playButton; +} + +- (void)viewDidDisappear:(BOOL)animated +{ + [super viewDidDisappear:animated]; + [[NSNotificationCenter defaultCenter] removeObserver:self name:AVPlayerItemDidPlayToEndTimeNotification object:nil]; +} + +- (void)viewWillDisappear:(BOOL)animated +{ + [super viewWillDisappear:animated]; + [_player pause]; +} + + +- (void)viewDidAppear:(BOOL)animated +{ + [super viewDidAppear:animated]; + + [[NSNotificationCenter defaultCenter] removeObserver:self name:AVPlayerItemDidPlayToEndTimeNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(avPlayerItemDidPlayToEnd:) name:AVPlayerItemDidPlayToEndTimeNotification object:nil]; +} + +- (void)initPlayLayer +{ + if (!_videoFileURL) { + return; + } + + AVAsset *movieAsset = [AVURLAsset URLAssetWithURL:_videoFileURL options:nil]; + self.playerItem = [AVPlayerItem playerItemWithAsset:movieAsset]; + self.player = [AVPlayer playerWithPlayerItem:_playerItem]; + self.playerLayer = [AVPlayerLayer playerLayerWithPlayer:_player]; + _playerLayer.frame = CGRectMake(0,(KSCREEN_HEIGHT-kTopHeight-KSCREEN_WIDTH)/2, KSCREEN_WIDTH, KSCREEN_WIDTH); + _playerLayer.videoGravity = AVLayerVideoGravityResizeAspect; +// _playerLayer.backgroundColor = [UIColor redColor].CGColor; + [self.view.layer addSublayer:_playerLayer]; +} + +- (void)pressPlayButton:(UIButton *)button +{ + [_playerItem seekToTime:kCMTimeZero]; + [_player play]; + _playButton.alpha = 0.0f; +} + +- (void)backPrePage +{ + [_player pause]; + [self.navigationController popViewControllerAnimated:YES]; +} + +#pragma mark - PlayEndNotification +- (void)avPlayerItemDidPlayToEnd:(NSNotification *)notification +{ + if ((AVPlayerItem *)notification.object != _playerItem) { + return; + } + [UIView animateWithDuration:0.3f animations:^{ + _playButton.alpha = 1.0f; + }]; +} + + +- (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/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\347\274\230\345\234\210/TopicDetailViewController.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\347\274\230\345\234\210/TopicDetailViewController.h" new file mode 100644 index 0000000000000000000000000000000000000000..34e060017b079ae32843919337f8b3f2145b75ff --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\347\274\230\345\234\210/TopicDetailViewController.h" @@ -0,0 +1,16 @@ +// +// TopicDetailViewController.h +// JQQY +// +// Created by chason on 2018/1/2. +// Copyright © 2018年 jiuqi. All rights reserved. +// + +#import "ZCRefreshTableViewController.h" + +@interface TopicDetailViewController : ZCRefreshTableViewController + +@property (nonatomic, copy) NSString *titleStr; +@property (nonatomic, copy) NSString *topicid; + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\347\274\230\345\234\210/TopicDetailViewController.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\347\274\230\345\234\210/TopicDetailViewController.m" new file mode 100644 index 0000000000000000000000000000000000000000..b7d849bd2e0da6fd792ac331ef4d5a9f7f7578d6 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\347\274\230\345\234\210/TopicDetailViewController.m" @@ -0,0 +1,399 @@ +// +// TopicDetailViewController.m +// JQQY +// +// Created by chason on 2018/1/2. +// Copyright © 2018年 jiuqi. All rights reserved. +// + +#import "TopicDetailViewController.h" +#import "TopicDetailHeaderView.h" +#import "PublicYuanquanViewController.h" +#import "YuanquanBaseCell.h" +#import "TextCell.h" +#import "PicturesCell.h" +#import "VideoCell.h" +#import "TextAndPicturesCell.h" +#import "TextAndVideoCell.h" +#import "YuanquanDetailViewController.h" + +@interface TopicDetailViewController () +{ + NSString *_sort; + NSDictionary *_topicDict; + + NSInteger h_cure_page; + NSInteger n_cure_page; + +} +@property (nonatomic, strong) TopicDetailHeaderView *headerView; +@property (nonatomic, strong) UIButton *bottomBtn; +@property (nonatomic, strong) UIView *line; + + + +@property (nonatomic,retain)NSMutableArray *New_Array; +@property (nonatomic,retain)NSMutableArray *Hot_Array; + + + +@end + +@implementation TopicDetailViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.title = [NSString stringWithFormat:@"# %@ #", self.titleStr]; + _sort = @"new"; + [self.view addSubview:self.bottomBtn]; + [self.bottomBtn addSubview:self.line]; + [self setTableViewFrame:CGRectMake(0, 0, KSCREEN_WIDTH, KSCREEN_HEIGHT-kTopHeight-50)]; + self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; + self.tableView.tableHeaderView = self.headerView; + + + h_cure_page =1; + n_cure_page =1; + + + [self registerCell]; + [self requestTopicDetail]; + [self requestYuanquanList]; +} + +- (void)registerCell +{ + [self.tableView registerClass:[TextCell class] forCellReuseIdentifier:NSStringFromClass([TextCell class])]; + [self.tableView registerClass:[PicturesCell class] forCellReuseIdentifier:NSStringFromClass([PicturesCell class])]; + [self.tableView registerClass:[VideoCell class] forCellReuseIdentifier:NSStringFromClass([VideoCell class])]; + [self.tableView registerClass:[TextAndPicturesCell class] forCellReuseIdentifier:NSStringFromClass([TextAndPicturesCell class])]; + [self.tableView registerClass:[TextAndVideoCell class] forCellReuseIdentifier:NSStringFromClass([TextAndVideoCell class])]; +} + +- (NSMutableArray *)Hot_Array +{ + if (!_Hot_Array) { + _Hot_Array = [[NSMutableArray alloc]initWithCapacity:0]; + } + return _Hot_Array; +} + + +- (NSMutableArray *)New_Array +{ + if (!_New_Array) { + _New_Array = [[NSMutableArray alloc]initWithCapacity:0]; + } + return _New_Array; +} + + + +- (void)tableViewDidTriggerFooterRefresh +{ + if ([self showHot]) { + n_cure_page +=1; + }else{ + h_cure_page +=1; + } + [self requestYuanquanList]; +} + +- (UIButton *)bottomBtn +{ + if (!_bottomBtn) { + _bottomBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _bottomBtn.frame = CGRectMake(0, KSCREEN_HEIGHT-kTopHeight-50, KSCREEN_WIDTH, 50); + _bottomBtn.backgroundColor = [UIColor whiteColor]; + [_bottomBtn addTarget:self action:@selector(bottomBtnClicked) forControlEvents:UIControlEventTouchUpInside]; + [_bottomBtn setImage:[UIImage imageNamed:@"topic_public"] forState:UIControlStateNormal]; + } + return _bottomBtn; +} + +- (UIView *)line +{ + if (!_line) { + _line = [[UIView alloc] initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH, 1)]; + _line.backgroundColor = LINECOLOUR; + } + return _line; +} + +- (TopicDetailHeaderView *)headerView +{ + if (!_headerView) { + _headerView = [[TopicDetailHeaderView alloc] initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH, KSCREEN_WIDTH/16*9+131)]; + _headerView.delegate = self; + } + return _headerView; +} + + + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + if ([self showHot]) { + return self.New_Array.count; + }else{ + return self.Hot_Array.count; + } + +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + YuanquanModel *model = [self getModel:indexPath.row]; + return model.cellHeight; +} + +- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section +{ + UIView *header = [[UIView alloc] initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH, 10)]; + header.backgroundColor = UIColorFromRGB(0xf3f3f3); + return header; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section +{ + return 10; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + YuanquanModel *model = [self getModel:indexPath.row]; + + YuanquanBaseCell *cell; + NSString *cellIdentifier; + cellIdentifier = model.cellIdentifier; + cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath]; + cell.delegate = self; + cell.tag = indexPath.row; + cell.selectionStyle = 0; + [cell setYuanquanModel:model]; + cell.topicLab.hidden = YES; + return cell; +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + YuanquanModel *model = [self getModel:indexPath.row]; + + YuanquanDetailViewController *yuanquanDetailVC = [[YuanquanDetailViewController alloc] init]; + [yuanquanDetailVC setHidesBottomBarWhenPushed:YES]; + yuanquanDetailVC.yuanquanid = model.yuanquanid; + [self.navigationController pushViewController:yuanquanDetailVC animated:YES]; +} + +- (void)clickTopicLab:(id)cell +{ + +} + +- (void)clickLikeBtn:(id)cell +{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:NetworkFailure toView:self.view]; + return; + } + + YuanquanBaseCell *baseCell = (YuanquanBaseCell *)cell; + NSIndexPath *indexPath = [self.tableView indexPathForCell:baseCell]; + YuanquanModel *model = [self getModel:baseCell.tag]; + + NSString *action;//1赞 2取消 + if ([model.islike intValue] == 0) { + action = @"1"; + model.islike = @"1"; + model.likeNum = [NSString stringWithFormat:@"%d", [model.likeNum intValue]+1]; + }else{ + action = @"2"; + model.islike = @"0"; + model.likeNum = [NSString stringWithFormat:@"%d", [model.likeNum intValue]-1]; + } + + [UIView performWithoutAnimation:^{ + [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone]; + }]; + + NSDictionary *parameters = @{ + @"userid":USER_USERID, + @"titleid":model.yuanquanid, + @"action":action, + @"version":APP_VERSION, + }; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_yuanquan_like block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + if ([resultDic[@"retcode"] intValue] == 1) { + + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; +} + +- (void)clickCommentBtn:(id)cell +{ + YuanquanBaseCell *baseCell = (YuanquanBaseCell *)cell; + YuanquanModel *model = [self getModel:baseCell.tag]; + YuanquanDetailViewController *yuanquanDetailVC = [[YuanquanDetailViewController alloc] init]; + [yuanquanDetailVC setHidesBottomBarWhenPushed:YES]; + yuanquanDetailVC.yuanquanid = model.yuanquanid; + [self.navigationController pushViewController:yuanquanDetailVC animated:YES]; +} + +- (void)selectNewOrHot:(NSInteger)type +{ + if (type == 1) { + _sort = @"new"; + if (ARRAY_IS_NOT_EMPTY(self.New_Array)) { + [self.tableView reloadData]; + }else{ + n_cure_page = 1; + [self requestYuanquanList]; + } + }else if (type == 2) { + _sort = @"hot"; + if (ARRAY_IS_NOT_EMPTY(self.Hot_Array)) { + [self.tableView reloadData]; + }else{ + h_cure_page = 1; + [self requestYuanquanList]; + } + }else{ + self.tableView.tableHeaderView = nil; + self.tableView.tableHeaderView = self.headerView; + } +} + +- (void)bottomBtnClicked +{ + PublicYuanquanViewController *publicYuanquanVC = [[PublicYuanquanViewController alloc] init]; + publicYuanquanVC.topicDict = _topicDict; + [self.navigationController pushViewController:publicYuanquanVC animated:YES]; +} + +- (void)requestTopicDetail +{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:NetworkFailure toView:self.view]; + return; + } + NSDictionary *parameters = @{ + @"topicid":_topicid, + @"version":APP_VERSION, + }; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_topic_detail block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + if ([resultDic[@"retcode"] intValue] == 1) { + _topicDict = resultDic[@"message"]; + [_headerView initTopicDetailHeaderView:resultDic[@"message"]]; + + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; +} + +- (void)requestYuanquanList +{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:NetworkFailure toView:self.view]; + return; + } + if (n_cure_page == 1 || h_cure_page ==1) { + [MBProgressHUD showMessag:nil toView:self.view]; + } + NSDictionary *parameters = @{ + @"userid":HaveUserId, + @"topicid":_topicid, + @"sort":_sort, + @"limit":@"10", + @"offset":[NSString stringWithFormat:@"%d", self.curepage], + @"version":APP_VERSION, + }; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_yuanquan_list block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + [MBProgressHUD hideHUDForView:self.view animated:YES]; + if ([resultDic[@"retcode"] intValue] == 1) { + + if ([self showHot]) { + if (n_cure_page ==1) { + [self.New_Array removeAllObjects]; + } + }else{ + if(h_cure_page ==1 ){ + [self.Hot_Array removeAllObjects]; + } + } + + NSInteger arrCount =0; + for (NSDictionary *dict in resultDic[@"message"]) { + YuanquanModel *model = [[YuanquanModel alloc] init]; + [model initYuanquanModel:dict]; + + if ([self showHot]) { + [self.New_Array addObject:model]; + arrCount =self.New_Array.count; + }else{ + [self.Hot_Array addObject:model]; + arrCount =self.Hot_Array.count; + } + } + + if (arrCount >= [resultDic[@"number"] integerValue]) { + [self endRefreshingWithNoMoreData]; + }else{ + [self tableViewDidFinishTriggerHeader:NO reload:YES]; + } + [self tableViewDidFinishTriggerHeader:YES reload:YES]; + if (arrCount) { + [self showBlankView:NO]; + }else{ + [self showBlankView:YES]; + } + + + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; +} + +- (BOOL)showHot +{ + if([_sort isEqualToString:@"new"]){ + return YES; + } + return NO; +} + +- (YuanquanModel *)getModel:(NSInteger)tag +{ + if ([self showHot]) { + return self.New_Array[tag]; + } + return self.Hot_Array[tag]; +} + + + +- (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/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\347\274\230\345\234\210/TopicListViewController.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\347\274\230\345\234\210/TopicListViewController.h" new file mode 100644 index 0000000000000000000000000000000000000000..1b205353362acf565635905171bc404733234850 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\347\274\230\345\234\210/TopicListViewController.h" @@ -0,0 +1,15 @@ +// +// TopicListViewController.h +// JQQY +// +// Created by chason on 2018/1/5. +// Copyright © 2018年 jiuqi. All rights reserved. +// + +#import "ZCRefreshTableViewController.h" + +@interface TopicListViewController : ZCRefreshTableViewController + +@property (nonatomic, copy) void (^selectTopic)(NSDictionary *dict); + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\347\274\230\345\234\210/TopicListViewController.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\347\274\230\345\234\210/TopicListViewController.m" new file mode 100644 index 0000000000000000000000000000000000000000..8b3af68ed391e40218774d7c88d6a7a7f9a84d70 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\347\274\230\345\234\210/TopicListViewController.m" @@ -0,0 +1,116 @@ +// +// TopicListViewController.m +// JQQY +// +// Created by chason on 2018/1/5. +// Copyright © 2018年 jiuqi. All rights reserved. +// + +#import "TopicListViewController.h" + +@interface TopicListViewController () + +@end + +@implementation TopicListViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + self.title = @"热门话题"; + [self setTableViewFrame:CGRectMake(0, 0, KSCREEN_WIDTH, KSCREEN_HEIGHT-kTopHeight)]; + self.showRefreshHeader = YES; + self.showRefreshFooter = YES; + self.curepage = 1; + [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:NSStringFromClass([UITableViewCell class])]; + [self requestTopicList]; +} + +- (void)tableViewDidTriggerHeaderRefresh +{ + self.curepage = 1; + [self requestTopicList]; +} + +- (void)tableViewDidTriggerFooterRefresh +{ + self.curepage += 1; + [self requestTopicList]; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + return self.dataArray.count; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + return 50; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ + UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"UITableViewCell"]; + cell.selectionStyle = UITableViewCellSelectionStyleNone; + cell.textLabel.font = [UIFont systemFontOfSize:15]; + cell.textLabel.textColor = UIColorFromRGB(0x6994f5); + cell.textLabel.text = [NSString stringWithFormat:@"# %@ #", self.dataArray[indexPath.row][@"title"]]; + return cell; +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + if (self.selectTopic) { + self.selectTopic(self.dataArray[indexPath.row]); + [self.navigationController popViewControllerAnimated:YES]; + } +} + +- (void)requestTopicList +{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:NetworkFailure toView:self.view]; + return; + } + NSDictionary *parameters = @{ + @"limit":@"10", + @"offset":[NSString stringWithFormat:@"%d", self.curepage], + @"version":APP_VERSION, + }; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_topic_list block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + if ([resultDic[@"retcode"] intValue] == 1) { + if (self.curepage == 1) { + [self.dataArray removeAllObjects]; + } + for (NSDictionary *dict in resultDic[@"list"]) { + [self.dataArray addObject:dict]; + } + if (self.dataArray.count >= [resultDic[@"count"] intValue]) { + [self endRefreshingWithNoMoreData]; + }else{ + [self tableViewDidFinishTriggerHeader:NO reload:YES]; + } + [self tableViewDidFinishTriggerHeader:YES reload:YES]; + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; +} + +- (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/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\347\274\230\345\234\210/YuanquanDetailViewController.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\347\274\230\345\234\210/YuanquanDetailViewController.h" new file mode 100644 index 0000000000000000000000000000000000000000..23386a8d7bb4746ae958b1c5e14ec7c6bb827ec3 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\347\274\230\345\234\210/YuanquanDetailViewController.h" @@ -0,0 +1,15 @@ +// +// YuanquanDetailViewController.h +// JQQY +// +// Created by chason on 2017/12/21. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "ZCRefreshTableViewController.h" + +@interface YuanquanDetailViewController : ZCRefreshTableViewController + +@property (nonatomic, copy) NSString *yuanquanid; + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\347\274\230\345\234\210/YuanquanDetailViewController.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\347\274\230\345\234\210/YuanquanDetailViewController.m" new file mode 100644 index 0000000000000000000000000000000000000000..b8697522ef24a5f3e8f2a5e44ff3ff1314930f3f --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\347\274\230\345\234\210/YuanquanDetailViewController.m" @@ -0,0 +1,552 @@ +// +// YuanquanDetailViewController.m +// JQQY +// +// Created by chason on 2017/12/21. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "YuanquanDetailViewController.h" +#import "YuanquanDetailHeaderView.h" +#import "YuanquanCommentCell.h" +#import "YuanquanDetailBottomView.h" +#import "QYInputToolbar.h" +#import "CommentListViewController.h" +#import "YuanquanCommentHeaderView.h" +#import "YuanquanCommentModel.h" +#import "IntroduceViewController.h" +#import "ZCAlertController.h" + +#import "TopicAndTextCell.h" +#import "YuanQuanPicCell.h" +#import "TopicTextModel.h" +#import "ZanAndReportCell.h" +#import "XHWebImageAutoSize.h" +#import "QYVideoCell.h" + +#import "MJPhotoBrowser.h" +#import "MJPhoto.h" + + +@interface YuanquanDetailViewController () +{ + NSString *_commentNum; +} +@property (nonatomic, strong) YuanquanDetailHeaderView *headerView; +@property (nonatomic, strong) YuanquanDetailBottomView *bottomView; +@property (nonatomic, strong) QYInputToolbar *qyInputView; + +@property (nonatomic,retain)NSMutableArray *topViewArray; + + +@end + +@implementation YuanquanDetailViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.title = @"详情"; + _commentNum = @"0"; + [self setTableViewFrame:CGRectMake(0, 0, KSCREEN_WIDTH, KSCREEN_HEIGHT-kTopHeight-50)]; + self.tableView.backgroundColor = UIColorFromRGB(0xf3f3f3); + self.tableView.tableHeaderView = self.headerView; + self.tableView.separatorStyle = 0; + self.curepage = 1; + self.showRefreshFooter = YES; + self.showRefreshHeader = YES; + + [self.tableView registerClass:[YuanquanCommentCell class] forCellReuseIdentifier:NSStringFromClass([YuanquanCommentCell class])]; + [self.tableView registerClass:[TopicAndTextCell class] forCellReuseIdentifier:@"topicText"]; + + [self.tableView registerNib:[UINib nibWithNibName:@"YuanQuanPicCell" bundle:nil] forCellReuseIdentifier:@"YuanQuanPicCell"]; + [self.tableView registerClass:[ZanAndReportCell class] forCellReuseIdentifier:@"ZanAndReportCell"]; + [self.tableView registerClass:[QYVideoCell class] forCellReuseIdentifier:@"QYVideoCell"]; + + + + [self requestYuanquanDetail]; + [self requestYuanquanComment]; +} + +- (void)tableViewDidTriggerFooterRefresh +{ + self.curepage += 1; + [self requestYuanquanComment]; +} + +- (void)tableViewDidTriggerHeaderRefresh +{ + self.curepage = 1; + [self requestYuanquanDetail]; + [self requestYuanquanComment]; + +} + + +- (void)viewWillAppear:(BOOL)animated +{ + [super viewWillAppear:animated]; +} + +- (void)viewWillDisappear:(BOOL)animated +{ + [super viewWillDisappear:animated]; + [[NSNotificationCenter defaultCenter]postNotificationName:@"removeVideo" object:nil]; + +} + + + + + + + +- (YuanquanDetailBottomView *)bottomView +{ + if (!_bottomView) { + _bottomView = [[YuanquanDetailBottomView alloc] initWithFrame:CGRectMake(0, KSCREEN_HEIGHT-kTopHeight-50, KSCREEN_WIDTH, 50)]; + _bottomView.textLab.userInteractionEnabled = YES; + UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(bottomViewClicked)]; + [_bottomView.textLab addGestureRecognizer:tap]; + [self.view addSubview:_bottomView]; + + [_bottomView.msgBtn addTarget:self action:@selector(scrollView) forControlEvents:UIControlEventTouchUpInside]; + } + return _bottomView; +} + +- (void)scrollView +{ + if (ARRAY_IS_NOT_EMPTY(self.dataArray)) { + [self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:1] atScrollPosition:UITableViewScrollPositionNone animated:YES]; + }else{ + [self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:self.topViewArray.count-1 inSection:0] atScrollPosition:UITableViewScrollPositionBottom animated:YES]; + } +} + + +- (QYInputToolbar *)qyInputView +{ + if (!_qyInputView) { + _qyInputView= [[QYInputToolbar alloc] initWithFrame:CGRectMake(0,0,KSCREEN_WIDTH, KSCREEN_HEIGHT)]; + _qyInputView.textViewMaxLine =4; + _qyInputView.delegate = self; + } + return _qyInputView; +} + +- (YuanquanDetailHeaderView *)headerView +{ + if (!_headerView) { + _headerView = [[YuanquanDetailHeaderView alloc] initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH,90)]; + } + return _headerView; +} + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView +{ + return 2; +} + + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + if (section ==1) { + return self.dataArray.count; + } + return self.topViewArray.count; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + if (indexPath.section) { + YuanquanCommentModel *model = self.dataArray[indexPath.row]; + return model.cellHeight; + } + TopicTextModel *model = self.topViewArray[indexPath.row]; + if (model.type ==2) { + return [XHWebImageAutoSize imageHeightForURL:[NSURL URLWithString:model.imageUrl] layoutWidth:KSCREEN_WIDTH-40 estimateHeight:200]; + }else{ + return model.cellHeight; + } +} + +- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section +{ + YuanquanCommentHeaderView *headerView = [[YuanquanCommentHeaderView alloc] initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH, 40)]; + headerView.textLab.text = [NSString stringWithFormat:@"用户评论(%@)", _commentNum]; + return headerView; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section +{ + if (section) { + return 40; + } + return 0; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + if (indexPath.section) { + YuanquanCommentCell *cell = [tableView dequeueReusableCellWithIdentifier:@"YuanquanCommentCell" forIndexPath:indexPath]; + cell.selectionStyle = 0; + cell.delegate = self; + cell.tag = indexPath.row; + cell.model = self.dataArray[indexPath.row]; + return cell; + + } + TopicTextModel *model = self.topViewArray[indexPath.row]; + if (model.type ==1) { + TopicAndTextCell *cell = [tableView dequeueReusableCellWithIdentifier:@"topicText"]; + cell.model = model; + cell.selectionStyle = 0; + return cell; + }else if (model.type ==2){ + YuanQuanPicCell *cell = [tableView dequeueReusableCellWithIdentifier:@"YuanQuanPicCell"]; + cell.selectionStyle = 0; + [cell.picImageView sd_setImageWithURL:[NSURL URLWithString:model.imageUrl] placeholderImage:PICTURE_DEFAULT completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { + [XHWebImageAutoSize storeImageSize:image forURL:imageURL completed:^(BOOL result) { + if(result){ + [tableView xh_reloadDataForURL:imageURL]; + } + }]; + + }]; + return cell; + }else if (model.type ==4){ + QYVideoCell *cell = [tableView dequeueReusableCellWithIdentifier:@"QYVideoCell"]; + cell.selectionStyle = 0; + cell.model = model; + return cell; + } + else{ + ZanAndReportCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ZanAndReportCell"]; + cell.model = model; + cell.selectionStyle = 0; + cell.likeBtn.tag = indexPath.row; + [cell.likeBtn addTarget:self action:@selector(likeBtnClicked:) forControlEvents:UIControlEventTouchUpInside]; + return cell; + } + +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + if (indexPath.section) { + YuanquanCommentModel *model = self.dataArray[indexPath.row]; + CommentListViewController *commentListVC = [[CommentListViewController alloc] init]; + commentListVC.yuanquanid = _yuanquanid; + commentListVC.recid = model.recid; + commentListVC.parentid = model.userid; + commentListVC.firstid = model.recid; + commentListVC.otherName = model.nickname; + [self.navigationController pushViewController:commentListVC animated:YES]; + }else{ + TopicTextModel *model = self.topViewArray[indexPath.row]; + if (model.type ==2) { + [self showCellImageView:indexPath imageIndex:model.imgIndex]; + } + } +} + +- (void)showCellImageView:(NSIndexPath *)p imageIndex:(NSInteger)dex +{ + MJPhotoBrowser *brower = [[MJPhotoBrowser alloc] init]; + NSMutableArray *photos = [NSMutableArray array]; + for (int i = 0 ; i < self.topViewArray.count; i++) { + TopicTextModel *model = self.topViewArray[i]; + YuanQuanPicCell *p_cell = [self.tableView cellForRowAtIndexPath:p]; + if (model.type ==2) { + MJPhoto *photo = [[MJPhoto alloc] init]; + photo.url = [NSURL URLWithString:model.imageUrl]; + photo.srcImageView = p_cell.picImageView; + [photos addObject:photo]; + } + } + brower.photos = photos; + brower.currentPhotoIndex = dex; + [brower show]; +} + + + +- (void)clickOptionBtn:(id)cell +{ + YuanquanCommentCell *commentCell =(YuanquanCommentCell *)cell; + YuanquanCommentModel *commentModel = self.dataArray[commentCell.tag]; + NSMutableArray *titleArray; + if ([commentModel.userid isEqualToString:USER_USERID]) { + titleArray = [NSMutableArray arrayWithArray:@[@"删除此条评论"]]; + }else{ + titleArray = [NSMutableArray arrayWithArray:@[@"举报此条评论"]]; + } + + ZCAlertController *alertController = [ZCAlertController initZCAlertControllerWithTitle:nil message:nil style:@"0" titleArray:titleArray alertAction:^(NSInteger index) { + if (index == 0) { + if ([commentModel.userid isEqualToString:USER_USERID]) { +// NSLog(@"删除"); + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:NetworkFailure toView:self.view]; + return; + } + NSDictionary *parameters = @{ + @"recid":commentModel.recid, + @"version":APP_VERSION, + }; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_yuanquan_commentDelete block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + if ([resultDic[@"retcode"] intValue] == 1) { + [self.dataArray removeObject:commentModel]; + _commentNum = [NSString stringWithFormat:@"%d", [_commentNum intValue]-1]; + self.bottomView.count = _commentNum; + [self.tableView reloadData]; + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; + }else{ +// NSLog(@"举报"); + IntroduceViewController *reasonVC = [[IntroduceViewController alloc] init]; + reasonVC.reportID = commentModel.recid; + reasonVC.titleName = @"举报理由"; + reasonVC.type = 5; + [self.navigationController pushViewController:reasonVC animated:YES]; + } + } + }]; + [alertController showZCAlert]; +} + +- (void)bottomViewClicked +{ + [self.qyInputView startEdit:@"说点什么吧..."]; +} + +#pragma mark —————— 发表评论 —————— + +- (void)inputToolbar:(QYInputToolbar *)inputToolbar sendContent:(NSString *)sendContent +{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:NetworkFailure toView:self.view]; + return; + } + NSDictionary *parameters = @{ + @"userid":USER_USERID, + @"parentid":@"", + @"firstid":@"", + @"titleid":_yuanquanid, + @"content":sendContent, + @"version":APP_VERSION, + }; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_yuanquan_commentPublic block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + if ([resultDic[@"retcode"] intValue] == 1) { + YuanquanCommentModel *model = [[YuanquanCommentModel alloc] init]; + [model initYuanquanCommentModel:resultDic[@"message"]]; + [self.dataArray insertObject:model atIndex:0]; + _commentNum = [NSString stringWithFormat:@"%d", [_commentNum intValue]+1]; + self.bottomView.count = _commentNum; + [self.tableView reloadData]; + [inputToolbar sendSuccessEndEditing]; + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; +} + +#pragma mark —————— 获取缘圈详情 —————— + +- (void)requestYuanquanDetail +{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:NetworkFailure toView:self.view]; + return; + } + NSDictionary *parameters = @{ + @"userid":USER_USERID, + @"yuanquanid":_yuanquanid, + @"version":APP_VERSION, + }; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_yuanquan_detail block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + if ([resultDic[@"retcode"] intValue] == 1) { + [self setSectionCell:resultDic[@"message"]]; + [self setHeadParams:resultDic[@"message"]]; + [self setBottom:resultDic[@"message"]]; + [self.tableView reloadData]; + + }else{ + if ([resultDic[@"explanation"] isEqualToString:@"缘圈详情为空"]) { + [MBProgressHUD showError:@"此条缘圈已被删除" toView:self.view]; + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [self.navigationController popViewControllerAnimated:YES]; + }); + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + } + }]; +} + +- (void)setHeadParams:(NSDictionary *)params +{ + self.headerView.params = params; +} +- (void)setBottom:(NSDictionary *)dict +{ + self.bottomView.params = dict; +} +- (NSMutableArray *)topViewArray +{ + if (!_topViewArray) { + _topViewArray = [[NSMutableArray alloc]initWithCapacity:0]; + } + return _topViewArray; +} +- (void)setSectionCell:(NSDictionary *)dict +{ + [self.topViewArray removeAllObjects]; + + TopicTextModel *w_model = [[TopicTextModel alloc]init]; + [w_model initWenzi:dict]; + [self.topViewArray addObject:w_model]; + + NSArray *pictures = dict[@"pictures"]; + if (pictures) { + for (int k=0;k= [resultDic[@"message"][@"pageCount"] intValue]) { + [self endRefreshingWithNoMoreData]; + }else{ + [self tableViewDidFinishTriggerHeader:NO reload:YES]; + } + [self showBlankView:NO]; + [self tableViewDidFinishTriggerHeader:YES reload:YES]; + + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; +} + + + + +#pragma mark —————— 点赞 —————— + +- (void)likeBtnClicked:(UIButton *)b +{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:NetworkFailure toView:self.view]; + return; + } + + TopicTextModel *model = self.topViewArray[b.tag]; + + NSString *action;//1赞 2取消 + if ([model.isLike intValue] == 0) { + action = @"1"; + model.isLike = @"1"; + model.likeNum = [NSString stringWithFormat:@"%d", [model.likeNum intValue]+1]; + }else{ + action = @"2"; + model.isLike = @"0"; + model.likeNum = [NSString stringWithFormat:@"%d", [model.likeNum intValue]-1]; + } + [self.topViewArray replaceObjectAtIndex:b.tag withObject:model]; + NSIndexPath *indexPath=[NSIndexPath indexPathForRow:b.tag inSection:0]; + [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath,nil] withRowAnimation:UITableViewRowAnimationNone]; + + NSDictionary *parameters = @{ + @"userid":USER_USERID, + @"titleid":_yuanquanid, + @"action":action, + @"version":APP_VERSION, + }; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_yuanquan_like block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + if ([resultDic[@"retcode"] intValue] == 1) { + + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; +} + + + + +- (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/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\350\265\204\350\256\257/MyContentViewController.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\350\265\204\350\256\257/MyContentViewController.h" new file mode 100644 index 0000000000000000000000000000000000000000..602048894c012400d3586142c3e7e84e72be02c2 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\350\265\204\350\256\257/MyContentViewController.h" @@ -0,0 +1,13 @@ +// +// MyContentViewController.h +// NewsAgentDemo +// +// Created by 久其智通 on 2017/12/20. +// Copyright © 2017年 jiuqizhitong. All rights reserved. +// + +#import "NAContentViewControllerPlus.h" + +@interface MyContentViewController : NAContentViewControllerPlus + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\350\265\204\350\256\257/MyContentViewController.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\350\265\204\350\256\257/MyContentViewController.m" new file mode 100644 index 0000000000000000000000000000000000000000..e8d4c93f7af9ccdce0da7ef48593247bb2d67a25 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\350\265\204\350\256\257/MyContentViewController.m" @@ -0,0 +1,65 @@ +// +// MyContentViewController.m +// NewsAgentDemo +// +// Created by 久其智通 on 2017/12/20. +// Copyright © 2017年 jiuqizhitong. All rights reserved. +// + +#import "MyContentViewController.h" +#import "QYShareView.h" + + +@interface MyContentViewController () + +@property (nonatomic,retain)QYShareView *shareView; + +@end + +@implementation MyContentViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. +} + + + +- (void)onItemLoaded:(NSDictionary *)infoDict{ + self.title = infoDict[@"title"]; + self.shareView.zixunparams = infoDict; +} + +- (void)shareContentItem +{ + [self.shareView show]; +} + + +- (QYShareView *)shareView +{ + if (!_shareView) { + _shareView = [[QYShareView alloc]init]; + _shareView.type = @"5"; + } + return _shareView; +} + + + +- (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/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\350\265\204\350\256\257/NewsListViewController.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\350\265\204\350\256\257/NewsListViewController.h" new file mode 100644 index 0000000000000000000000000000000000000000..30f390ab577b71de1a81c3f8ace99b8b41532d43 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\350\265\204\350\256\257/NewsListViewController.h" @@ -0,0 +1,13 @@ +// +// NewsListViewController.h +// JQQY +// +// Created by chason on 2017/11/19. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "NARecomViewController.h" + +@interface NewsListViewController : NARecomViewController + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\350\265\204\350\256\257/NewsListViewController.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\350\265\204\350\256\257/NewsListViewController.m" new file mode 100644 index 0000000000000000000000000000000000000000..d7e08df840047034a792f1bab6b723bc95487434 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Controller/\350\265\204\350\256\257/NewsListViewController.m" @@ -0,0 +1,59 @@ +// +// NewsListViewController.m +// JQQY +// +// Created by chason on 2017/11/19. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "NewsListViewController.h" + +@interface NewsListViewController () + +@end + +@implementation NewsListViewController + +- (UIStatusBarStyle)preferredStatusBarStyle +{ + return UIStatusBarStyleLightContent; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + self.title = @"资讯"; + [self createLeftBtn]; +} + +- (void)createLeftBtn +{ + //创建返回按钮 + UIButton *leftBtn = [UIButton buttonWithType:UIButtonTypeSystem]; + leftBtn.frame = CGRectMake(0, 0, 30, 30); + [leftBtn setImage:[UIImage imageNamed:@"back_icon"] forState:UIControlStateNormal]; + [leftBtn addTarget:self action:@selector(leftBtnClicked) forControlEvents:UIControlEventTouchUpInside]; + [leftBtn setContentEdgeInsets:UIEdgeInsetsMake(0, -10, 0, 10)]; + self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:leftBtn]; +} + +- (void)leftBtnClicked +{ + [self.navigationController popViewControllerAnimated:YES]; +} + +- (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/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Model/AdModel.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Model/AdModel.h" new file mode 100644 index 0000000000000000000000000000000000000000..e773963b48851d9f1814c355700792a60f9bdb61 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Model/AdModel.h" @@ -0,0 +1,21 @@ +// +// AdModel.h +// JQQY +// +// Created by Shmily on 2017/11/24. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import + +@interface AdModel : NSObject + +@property (nonatomic,retain)NSString *SkipID; +@property (nonatomic,retain)NSString *photo; +@property (nonatomic,retain)NSString *skipURL; +@property (nonatomic,retain)NSString *type; //1活动 2链接 3会员 + +- (void)initData:(NSDictionary *)d; + + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Model/AdModel.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Model/AdModel.m" new file mode 100644 index 0000000000000000000000000000000000000000..ac599830aa6d895938900ec8832e8b722ec2c0a0 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Model/AdModel.m" @@ -0,0 +1,26 @@ +// +// AdModel.m +// JQQY +// +// Created by Shmily on 2017/11/24. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "AdModel.h" + +@implementation AdModel + +- (void)initData:(NSDictionary *)d +{ + if (d) { + self.SkipID = d[@"SkipID"]; + self.photo = d[@"photo"]; + self.skipURL = d[@"skipURL"]; + self.type = d[@"type"]; + + } + +} + + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Model/CordiaModel.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Model/CordiaModel.h" new file mode 100644 index 0000000000000000000000000000000000000000..f5f6cd4793886d8692a6c7283d091086f50b7c61 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Model/CordiaModel.h" @@ -0,0 +1,28 @@ +// +// CordiaModel.h +// JQQY +// +// Created by Shmily on 2017/11/27. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import + +@interface CordiaModel : NSObject + +@property (nonatomic,retain)NSString *age; +@property (nonatomic,retain)NSString *avatar; +@property (nonatomic,retain)NSString *degree; +@property (nonatomic,retain)NSString *height; +@property (nonatomic,retain)NSString *ifattention; +@property (nonatomic,retain)NSString *localPlace; +@property (nonatomic,retain)NSString *match; +@property (nonatomic,retain)NSString *nickname; +@property (nonatomic,retain)NSString *userID; +@property (nonatomic,retain)NSString *distance; + + + +- (void)initData:(NSDictionary *)dict; + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Model/CordiaModel.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Model/CordiaModel.m" new file mode 100644 index 0000000000000000000000000000000000000000..2f49f7583e8bc7cf7680d9d8743d640689eb0ac6 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Model/CordiaModel.m" @@ -0,0 +1,32 @@ +// +// CordiaModel.m +// JQQY +// +// Created by Shmily on 2017/11/27. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "CordiaModel.h" + +@implementation CordiaModel + +- (void)initData:(NSDictionary *)dict +{ + self.age = ToString(dict[@"age"]); + self.avatar = dict[@"avatar"]; + self.degree = ToString(dict[@"degree"]); + self.height = ToString(dict[@"height"]); + self.ifattention = dict[@"ifattention"]; + self.localPlace = dict[@"localPlace"]; + if (STR_IS_NOT_EMPTY(ToString(dict[@"match"]))) { + self.match = [NSString stringWithFormat:@"匹配%@%%", dict[@"match"]]; + } + + self.nickname = dict[@"nickname"]; + self.userID = dict[@"userID"]; +} + + + + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Model/FriendModel.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Model/FriendModel.h" new file mode 100644 index 0000000000000000000000000000000000000000..65abb980513b0a432e9db20b759b27537747145b --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Model/FriendModel.h" @@ -0,0 +1,21 @@ +// +// FriendModel.h +// JQQY +// +// Created by Shmily on 2017/11/24. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import + +@interface FriendModel : NSObject + +@property (nonatomic,retain)NSString *avatar; +@property (nonatomic,retain)NSString *declaration; +@property (nonatomic,retain)NSString *nickname; +@property (nonatomic,retain)NSString *sex; +@property (nonatomic,retain)NSString *userID; + +- (void)initDict:(NSDictionary *)dict; + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Model/FriendModel.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Model/FriendModel.m" new file mode 100644 index 0000000000000000000000000000000000000000..6ef48ceb2d17fd8055c3afaed6cc6b5e2bda196a --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Model/FriendModel.m" @@ -0,0 +1,26 @@ +// +// FriendModel.m +// JQQY +// +// Created by Shmily on 2017/11/24. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "FriendModel.h" + +@implementation FriendModel + +- (void)initDict:(NSDictionary *)dict +{ + if (dict) { + self.userID = dict[@"userID"]; + self.avatar = dict[@"avatar"]; + self.declaration = dict[@"declaration"]; + self.nickname = dict[@"nickname"]; + self.sex = dict[@"sex"]; + } + +} + + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Model/SpeedModel.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Model/SpeedModel.h" new file mode 100644 index 0000000000000000000000000000000000000000..80eab4774ffde1b921fe28e1e3932a24066cae79 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Model/SpeedModel.h" @@ -0,0 +1,60 @@ +// +// SpeedModel.h +// JQ_ELOVE +// +// Created by Shmily on 16/7/8. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import + +@interface SpeedModel : NSObject +/** + * 年龄 + */ +@property (nonatomic, strong) NSString *age; +/** + * 头像 + */ +@property (nonatomic, strong) NSString *avatar; +/** + * 是否是单位用户 + */ +@property (nonatomic, strong) NSString *kind; +/** + * 地址 + */ +@property (nonatomic, strong) NSString *localplace; +/** + * 昵称 + */ +@property (nonatomic, strong) NSString *nickname; +/** + * 性别 + */ +@property (nonatomic, strong) NSString *sex; +/** + * uid + */ +@property (nonatomic, strong) NSString *userID; + +/** + * 星座 + */ +@property (nonatomic, strong) NSString *constellation; +/** + * 学历 + */ +@property (nonatomic, strong) NSString *degree; + +/** + * 距离 + */ +@property (nonatomic, strong) NSString *distance; + + + +- (void)initData:(NSDictionary *)dict; + + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Model/SpeedModel.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Model/SpeedModel.m" new file mode 100644 index 0000000000000000000000000000000000000000..c409ca93584dd8dfe5bc3973a1a719e03222c208 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Model/SpeedModel.m" @@ -0,0 +1,39 @@ +// +// SpeedModel.m +// JQ_ELOVE +// +// Created by Shmily on 16/7/8. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "SpeedModel.h" + +@implementation SpeedModel + +- (void)initData:(NSDictionary *)dict +{ + if (dict) { + self.age = ToString(dict[@"age"]); + self.avatar = ToString(dict[@"avatar"]); + self.kind = ToString(dict[@"kind"]); + if([ToString(dict[@"typenum"]) isEqualToString:@"1"]){ + self.localplace = dict[@"localplace"]; + }else{ +// if([dict[@"distance"] intValue] < 0.5){ +// self.localplace = @"<0.5km"; +// }else{ +// self.localplace = [NSString stringWithFormat:@"%@km",ToString(dict[@"distance"])]; +// } + } + self.nickname = dict[@"nickname"]; + self.sex = ToString(dict[@"sex"]); + self.userID = ToString(dict[@"userID"]); + self.userID = ToString(dict[@"userID"]); + self.constellation = ToString(dict[@"constellation"]); + self.degree = ToString(dict[@"degree"]); + } +} + + + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Model/TopicTextModel.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Model/TopicTextModel.h" new file mode 100644 index 0000000000000000000000000000000000000000..bb6b9ebea8af5014af96dd2f31a7cf10bd7f1442 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Model/TopicTextModel.h" @@ -0,0 +1,40 @@ +// +// TopicTextModel.h +// JQQY +// +// Created by Shmily on 2018/1/17. +// Copyright © 2018年 jiuqi. All rights reserved. +// + +#import + +@interface TopicTextModel : NSObject + +@property (nonatomic,retain)NSString *topic; +@property (nonatomic,retain)NSString *topicid; +@property (nonatomic,retain)NSString *text; +@property (nonatomic,assign)CGFloat textHeight; +@property (nonatomic,assign)CGFloat cellHeight; + +@property (nonatomic,retain)NSString *imageUrl; +@property (nonatomic,assign)CGFloat imageHeight; +@property (nonatomic,assign)CGFloat imageWidth; +@property (nonatomic,assign)BOOL isVideo; +@property (nonatomic,copy)NSString *video; + +@property (nonatomic,copy)NSString *isLike; +@property (nonatomic,copy)NSString *likeNum; + +@property (nonatomic,assign)NSInteger type; + +@property (nonatomic,assign)NSInteger imgIndex; + + +@property (nonatomic,copy)NSString *yuanquanId; +- (void)initWenzi:(NSDictionary *)dict; +- (void)initTupian:(NSDictionary *)dict; +- (void)initZan:(NSDictionary *)dict; +- (void)initVideo:(NSDictionary *)dict; + + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Model/TopicTextModel.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Model/TopicTextModel.m" new file mode 100644 index 0000000000000000000000000000000000000000..8870d2a2cc2356e5b84094df270ca243bf1ad96a --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Model/TopicTextModel.m" @@ -0,0 +1,69 @@ +// +// TopicTextModel.m +// JQQY +// +// Created by Shmily on 2018/1/17. +// Copyright © 2018年 jiuqi. All rights reserved. +// + +#import "TopicTextModel.h" +#import "UIImage+ImgSize.h" +@implementation TopicTextModel + +- (void)initWenzi:(NSDictionary *)dict +{ + self.topic = dict[@"topic"]; + self.topicid =dict[@"topicid"]; + self.text = dict[@"text"]; + + if (STR_IS_NOT_EMPTY(self.text)) { + _textHeight = [ZCTools labelAutoCalculateRectWith:dict[@"text"] FontSize:13 MaxSize:CGSizeMake(KSCREEN_WIDTH-20, 1000)].height; + }else{ + _textHeight =0; + } + if (STR_IS_NOT_EMPTY(self.topic) && STR_IS_NOT_EMPTY(self.topicid)) {//有话题 有叙述 + self.cellHeight = 35+_textHeight+10; + + }else{ + if (_textHeight ==0) {//无话题,无叙述 + self.cellHeight = 0; + }else{//无话题,无叙述 + self.cellHeight = 5+_textHeight+5; + } + } + self.type =1; +} + +- (void)initTupian:(NSDictionary *)dict +{ + + self.type =2; + self.imageUrl = dict[@"img"]; + +} + + + +- (void)initZan:(NSDictionary *)dict +{ + self.yuanquanId = dict[@"yuanquanid"]; + self.isLike = ToString(dict[@"islike"]); + self.likeNum = ToString(dict[@"likenum"]); + self.cellHeight = 60; + self.type =3; +} + +- (void)initVideo:(NSDictionary *)dict +{ + self.isVideo = YES; + self.imageHeight = KSCREEN_WIDTH-40; + self.imageWidth = KSCREEN_WIDTH -40; + self.cellHeight = self.imageHeight+10; + self.video = dict[@"video"]; + self.imageUrl = dict[@"videoimg"]; + self.type =4; +} + + + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Model/YuanquanCommentModel.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Model/YuanquanCommentModel.h" new file mode 100644 index 0000000000000000000000000000000000000000..e1a3b03df361d752eef0cadcc09a83c91dfe6956 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Model/YuanquanCommentModel.h" @@ -0,0 +1,59 @@ +// +// YuanquanCommentModel.h +// JQQY +// +// Created by chason on 2018/1/5. +// Copyright © 2018年 jiuqi. All rights reserved. +// + +#import + +@interface YuanquanCommentModel : NSObject + +/** + 评论人id + */ +@property (nonatomic, copy) NSString *userid; +/** + 评论id + */ +@property (nonatomic, copy) NSString *recid; + +/** + 头像 + */ +@property (nonatomic, copy) NSString *avatar; + +/** + 昵称 + */ +@property (nonatomic, copy) NSString *nickname; + +/** + 时间 + */ +@property (nonatomic, copy) NSString *time; + +/** + 评论内容 + */ +@property (nonatomic, copy) NSString *comment; + +/** + 子评论数量 + */ +@property (nonatomic, copy) NSString *childCount; + +/** + 评论高度 + */ +@property (nonatomic, assign) float commentHeight; + +/** + cell高度 + */ +@property (nonatomic, assign) float cellHeight; + +- (void)initYuanquanCommentModel:(NSDictionary *)dict; + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Model/YuanquanCommentModel.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Model/YuanquanCommentModel.m" new file mode 100644 index 0000000000000000000000000000000000000000..de5ef640edd14e53eccc27e4b20ff827e75093ba --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Model/YuanquanCommentModel.m" @@ -0,0 +1,32 @@ +// +// YuanquanCommentModel.m +// JQQY +// +// Created by chason on 2018/1/5. +// Copyright © 2018年 jiuqi. All rights reserved. +// + +#import "YuanquanCommentModel.h" + +@implementation YuanquanCommentModel + +- (void)initYuanquanCommentModel:(NSDictionary *)dict +{ + if (dict) { + self.userid = dict[@"userid"]; + self.recid = dict[@"recid"]; + self.avatar = dict[@"userAvatar"]; + self.nickname = dict[@"userName"]; + self.time = dict[@"time"]; + self.comment = dict[@"comment"]; + self.childCount = ToString(dict[@"childCount"]); + self.commentHeight = [ZCTools labelAutoCalculateRectWith:dict[@"comment"] FontSize:13 MaxSize:CGSizeMake(KSCREEN_WIDTH-90, 50)].height; + if ([dict[@"childCount"] intValue] <= 0) { + self.cellHeight = 70+self.commentHeight; + }else{ + self.cellHeight = 95+self.commentHeight; + } + } +} + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Model/YuanquanModel.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Model/YuanquanModel.h" new file mode 100644 index 0000000000000000000000000000000000000000..0f64d1fd37c61d4224fdb9fc72528873c161d01d --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Model/YuanquanModel.h" @@ -0,0 +1,115 @@ +// +// YuanquanModel.h +// JQQY +// +// Created by chason on 2017/12/20. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import + +typedef NS_ENUM(NSInteger, YuanquanShowType) { + YuanquanTextType,//只有文字 + YuanquanPicturesType,//只有图片 + YuanquanVideoType,//只有视频 + YuanquanTextAndPicturesType,//文字和图片 + YuanquanTextAndVideoType//文字和视频 +}; + +@interface YuanquanModel : NSObject + +- (void)initYuanquanModel:(NSDictionary *)dict; + +@property (nonatomic, strong) NSString *cellIdentifier; + +/** + 展示类型 + */ +@property (nonatomic, assign) YuanquanShowType showType; + +/** + 用户id + */ +@property (nonatomic, copy) NSString *userid; + +/** + 缘圈id + */ +@property (nonatomic, copy) NSString *yuanquanid; + +/** + 头像 + */ +@property (nonatomic, copy) NSString *avatar; + +/** + 昵称 + */ +@property (nonatomic, copy) NSString *nickname; + +/** + 话题 + */ +@property (nonatomic, copy) NSString *topic; + +/** + 话题id + */ +@property (nonatomic, copy) NSString *topicid; + +/** + 位置 + */ +@property (nonatomic, copy) NSString *position; + +/** + 时间 + */ +@property (nonatomic, copy) NSString *time; + +/** + 是否点赞(0未点赞 1已点赞) + */ +@property (nonatomic, copy) NSString *islike; +/** + 点赞数 + */ +@property (nonatomic, copy) NSString *likeNum; + +/** + 评论数 + */ +@property (nonatomic, copy) NSString *commentNum; + +/** + 文字 + */ +@property (nonatomic, copy) NSString *text; + +/** + 图片 + */ +@property (nonatomic, strong) NSArray *pictures; + +/** + 视频 + */ +@property (nonatomic, copy) NSDictionary *videoDict; + + +/** + cell高度 + */ +@property (nonatomic, assign) float cellHeight; + +/** + 图片高度 + */ +@property (nonatomic, assign) float pictureHeight; + +/** + 文字高度 + */ +@property (nonatomic, assign) float textHeight; + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Model/YuanquanModel.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Model/YuanquanModel.m" new file mode 100644 index 0000000000000000000000000000000000000000..cf263e9cf1a17f43e18a63c87f204fe5015255d3 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Model/YuanquanModel.m" @@ -0,0 +1,148 @@ +// +// YuanquanModel.m +// JQQY +// +// Created by chason on 2017/12/20. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "YuanquanModel.h" +#import "TextCell.h" +#import "PicturesCell.h" +#import "VideoCell.h" +#import "TextAndPicturesCell.h" +#import "TextAndVideoCell.h" +#import "UIImage+ImgSize.h" + +@implementation YuanquanModel + +- (NSString *)cellIdentifier +{ + if (_showType == YuanquanTextType) { + return NSStringFromClass([TextCell class]); + } else if (_showType == YuanquanPicturesType){ + return NSStringFromClass([PicturesCell class]); + } else if (_showType == YuanquanVideoType){ + return NSStringFromClass([VideoCell class]); + } else if (_showType == YuanquanTextAndPicturesType){ + return NSStringFromClass([TextAndPicturesCell class]); + } else { + return NSStringFromClass([TextAndVideoCell class]); + } +} + +- (void)initYuanquanModel:(NSDictionary *)dict +{ + + if (dict) { + _textHeight = [ZCTools labelAutoCalculateRectWith:dict[@"text"] FontSize:13 MaxSize:CGSizeMake(KSCREEN_WIDTH-60, 70)].height+30; + if (STR_IS_NOT_EMPTY(dict[@"text"]) && [dict[@"pictures"] count]<=0 && [(NSDictionary *)dict[@"video"] allKeys].count<=0) {//只有文字 + _showType = YuanquanTextType; + if (STR_IS_NOT_EMPTY(dict[@"position"])) { + _cellHeight = 155+_textHeight; + }else{ + _cellHeight = 135+_textHeight; + } + }else if (!STR_IS_NOT_EMPTY(dict[@"text"]) && [dict[@"pictures"] count]>0 && [(NSDictionary *)dict[@"video"] allKeys].count<=0) {//只有图片 + _showType = YuanquanPicturesType; + if (STR_IS_NOT_EMPTY(dict[@"position"])) { + if ([dict[@"pictures"] count] == 1) { + _pictureHeight = [self saveImgHeight:dict[@"pictures"][0][@"cutimg"]]; + _cellHeight = 175+_pictureHeight; + }else if ([dict[@"pictures"] count] == 2) { + _cellHeight = 175+(KSCREEN_WIDTH-30-40)/2; + }else if ([dict[@"pictures"] count] == 3) { + _cellHeight = 175+(KSCREEN_WIDTH-30-50)/3; + }else if ([dict[@"pictures"] count] == 4) { + _cellHeight = 175+(KSCREEN_WIDTH-30-40)/2*2+10; + } + }else{ + if ([dict[@"pictures"] count] == 1) { + _pictureHeight = [self saveImgHeight:dict[@"pictures"][0][@"cutimg"]]; + _cellHeight = 155+_pictureHeight; + }else if ([dict[@"pictures"] count] == 2) { + _cellHeight = 155+(KSCREEN_WIDTH-30-40)/[dict[@"pictures"] count]; + }else if ([dict[@"pictures"] count] == 3) { + _cellHeight = 155+(KSCREEN_WIDTH-30-50)/[dict[@"pictures"] count]; + }else if ([dict[@"pictures"] count] == 4) { + _cellHeight = 155+(KSCREEN_WIDTH-30-40)/2*2+10; + } + } + }else if (!STR_IS_NOT_EMPTY(dict[@"text"]) && [dict[@"pictures"] count]<=0 && [(NSDictionary *)dict[@"video"] allKeys].count>0) {//只有视频 + _showType = YuanquanVideoType; + if (STR_IS_NOT_EMPTY(dict[@"position"])) { + _cellHeight = 175+150; + }else{ + _cellHeight = 155+150; + } + }else if (STR_IS_NOT_EMPTY(dict[@"text"]) && [dict[@"pictures"] count]>0 && [(NSDictionary *)dict[@"video"] allKeys].count<=0) {//文字和图片 + _showType = YuanquanTextAndPicturesType; + if (STR_IS_NOT_EMPTY(dict[@"position"])) { + if ([dict[@"pictures"] count] == 1) { + _pictureHeight = [self saveImgHeight:dict[@"pictures"][0][@"cutimg"]]; + _cellHeight = 165+_textHeight+_pictureHeight; + }else if ([dict[@"pictures"] count] == 2) { + _cellHeight = 165+_textHeight+(KSCREEN_WIDTH-30-40)/2; + }else if ([dict[@"pictures"] count] == 3) { + _cellHeight = 165+_textHeight+(KSCREEN_WIDTH-30-50)/3; + }else if ([dict[@"pictures"] count] == 4) { + _cellHeight = 165+_textHeight+(KSCREEN_WIDTH-30-40)/2*2+10; + } + }else{ + if ([dict[@"pictures"] count] == 1) { + _pictureHeight = [self saveImgHeight:dict[@"pictures"][0][@"cutimg"]]; + _cellHeight = 145+_textHeight+_pictureHeight; + }else if ([dict[@"pictures"] count] == 2) { + _cellHeight = 145+_textHeight+(KSCREEN_WIDTH-30-40)/[dict[@"pictures"] count]; + }else if ([dict[@"pictures"] count] == 3) { + _cellHeight = 145+_textHeight+(KSCREEN_WIDTH-30-50)/[dict[@"pictures"] count]; + }else if ([dict[@"pictures"] count] == 4) { + _cellHeight = 145+_textHeight+(KSCREEN_WIDTH-30-40)/2*2+10; + } + } + }else if (STR_IS_NOT_EMPTY(dict[@"text"]) && [dict[@"pictures"] count]<=0 && [(NSDictionary *)dict[@"video"] allKeys].count>0) { + _showType = YuanquanTextAndVideoType; + if (STR_IS_NOT_EMPTY(dict[@"position"])) { + _cellHeight = 165+_textHeight+150; + }else{ + _cellHeight = 145+_textHeight+150; + } + } + + _userid = dict[@"userid"]; + _yuanquanid = dict[@"yuanquanid"]; + _avatar = dict[@"avatar"]; + _nickname = dict[@"nickname"]; + _topic = dict[@"topic"]; + _topicid = dict[@"topicid"]; + _position = dict[@"position"]; + _time = dict[@"time"]; + _text = dict[@"text"]; + _pictures = dict[@"pictures"]; + _islike = ToString(dict[@"islike"]); + _likeNum = ToString(dict[@"likenum"]); + _commentNum = ToString(dict[@"commentnum"]); + _videoDict = dict[@"video"]; + + + } +} + +- (CGFloat)saveImgHeight:(NSString *)url +{ + //获取图片尺寸时先检查是否有缓存(有就不用再获取了) + if (![[NSUserDefaults standardUserDefaults] objectForKey:url]) { + //这里拿到每个图片的尺寸,然后计算出每个cell的高度 + CGSize imageSize = [UIImage getImageSizeWithURL:url]; + CGFloat imgH = 0; + if (imageSize.height > 0) { + //这里就把图片根据 固定的需求宽度 计算 出图片的自适应高度 + imgH = 150/(imageSize.width/imageSize.height); + } + //将最终的自适应的高度 本地化处理 + [[NSUserDefaults standardUserDefaults] setObject:@(imgH) forKey:url]; + } + return [[[NSUserDefaults standardUserDefaults] objectForKey:url] floatValue]; +} + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/Arrow-pointing@2x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/Arrow-pointing@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..4b617e2dbcaad74084df3c5bd8898048a6dbf0eb Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/Arrow-pointing@2x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/PYQ-dz@2x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/PYQ-dz@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..76a6571ea29a1e1f058a0f9a9dace836dc4430dd Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/PYQ-dz@2x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/PYQ-dz@3x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/PYQ-dz@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..d9a786eb6a6a36bacd2368d2f44828dc51c0c952 Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/PYQ-dz@3x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/PYQ-hx@2x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/PYQ-hx@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..534732120f64d33eef8b8a5d1b8ab535ad95e81b Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/PYQ-hx@2x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/PYQ-hx@3x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/PYQ-hx@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..42624ebc8233a082b222ea53981530d3133d0511 Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/PYQ-hx@3x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/PYQ-jt@2x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/PYQ-jt@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..6b756211f1abf9f9fa4f2f361eb941690eb2f79d Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/PYQ-jt@2x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/PYQ-jt@3x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/PYQ-jt@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..20ac90ad5a1cd43ae6a9d61325bbe41524a6d866 Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/PYQ-jt@3x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/PYQ-pjds@2x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/PYQ-pjds@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..812125563fbc8bfd1b902d6e7ed5fad6e6965dc7 Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/PYQ-pjds@2x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/PYQ-pjds@3x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/PYQ-pjds@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..b087cb736cc7edaf1b889bb5c20cfe4a729dab55 Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/PYQ-pjds@3x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/PYQ-pl@2x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/PYQ-pl@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..551286165144869039d4a426e3343c1a6c0228b7 Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/PYQ-pl@2x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/PYQ-pl@3x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/PYQ-pl@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..9018effb0aa925a377d2d1ba2a11098d68fd6766 Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/PYQ-pl@3x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/PYQ-xj@2x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/PYQ-xj@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..3fa0a0bc23f90fc4e171bd19f3f2a7cad2a93c8e Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/PYQ-xj@2x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/PYQ-xj@3x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/PYQ-xj@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..d3d2b748ec931b201423e3eccf43d91f6b6a7022 Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/PYQ-xj@3x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/SDS-dd@2x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/SDS-dd@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..534bc4642db814ef24f7a305d8a5f5cb854a8a74 Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/SDS-dd@2x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/SDS-dd@3x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/SDS-dd@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..d8fa585c6ee1e2035ec9ee9fa2df956d053c62b5 Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/SDS-dd@3x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/add_image@2x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/add_image@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..b468d067ad609ae2d37e1443197222ccf5d755f9 Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/add_image@2x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/add_image@3x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/add_image@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..6234efd04ebe425fc632d5b1f72f4db4fa307721 Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/add_image@3x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/boy@2x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/boy@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..0be5d4aca412ec437ee736cf20e8ffc10f3f3299 Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/boy@2x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/boy@3x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/boy@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..e872737e21f687bd02939abaf039da540931a091 Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/boy@3x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/delete_icon@2x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/delete_icon@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..b5bbd4fd361c46eafbfdd83bb32a2e1abeb053a6 Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/delete_icon@2x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/delete_icon@3x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/delete_icon@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..9394498b5567602b5d023c77aacb9b2627c6a507 Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/delete_icon@3x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/fire@2x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/fire@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..223aed6b7694b375dfd602ae9a7e005d45c55626 Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/fire@2x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/fire@3x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/fire@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..22154edf670e958c88a67c7079afca829c53aef8 Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/fire@3x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/girl@2x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/girl@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..d2916085b3891662e8a310cd6d2c72064fbc4c21 Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/girl@2x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/girl@3x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/girl@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..0775f19f9c4c6c1c1b13831165837c386f3d6b66 Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/girl@3x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/huifu@2x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/huifu@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..8f12a031f4b71eac170ad4b32e35047801687a79 Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/huifu@2x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/huifu@3x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/huifu@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..d9c121d56ae057319d1267df3e9d5aa6247ae166 Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/huifu@3x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/qyzx@2x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/qyzx@2x.png" new file mode 100755 index 0000000000000000000000000000000000000000..d61c1ad48fba0cfd28fec7ecdaaf11feaea0d461 Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/qyzx@2x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/qyzx@3x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/qyzx@3x.png" new file mode 100755 index 0000000000000000000000000000000000000000..df54f3e95e6cb96ea24e1010398ea8057b0c7138 Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/qyzx@3x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/redLike@2x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/redLike@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..34dc19180ff16c71855bd4fb1a6fbb96785e0d8a Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/redLike@2x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/redLike@3x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/redLike@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..a48cb0077e4280621ed2ced2c391425abeedc0fd Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/redLike@3x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/search_icon@2x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/search_icon@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..434dfd02c06433e6e8828bc60efaed26ba7d8cf8 Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/search_icon@2x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/search_icon@3x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/search_icon@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..a665e5f9f09b0356fd157d354f465a9ef0aaa077 Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/search_icon@3x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/set_video@2x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/set_video@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..c9b3196fa387d49553d7e9a2a6549ca7ba5d1a8b Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/set_video@2x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/set_video@3x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/set_video@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..16b9be379a0a2e86a3a82f6ecaa61324f1125a91 Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/set_video@3x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/sweep_icon@2x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/sweep_icon@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..10a8e01c7c22c6558d43b7efb44c94a73e04a85d Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/sweep_icon@2x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/sweep_icon@3x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/sweep_icon@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..f594fa305f9f33f55ebd4789b0f8a580d59d7434 Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/sweep_icon@3x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/topic_public@2x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/topic_public@2x.png" new file mode 100755 index 0000000000000000000000000000000000000000..7d71f3b0f0aa556516fa97fd6c6868cd00718d78 Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/topic_public@2x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/topic_public@3x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/topic_public@3x.png" new file mode 100755 index 0000000000000000000000000000000000000000..b5583f4e59f26cd91e5ddf23f8813e0cfba95941 Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/topic_public@3x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/video_play@2x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/video_play@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..c185f5689c54209b9f5e6529f087d26377a3de47 Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/video_play@2x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/video_play@3x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/video_play@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..13347726c68a68321a4436ee9adf35ff70ab7b7b Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/video_play@3x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/xttj@2x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/xttj@2x.png" new file mode 100755 index 0000000000000000000000000000000000000000..aba04dae9d6618781266389a1241c98a8a3dd318 Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/xttj@2x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/xttj@3x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/xttj@3x.png" new file mode 100755 index 0000000000000000000000000000000000000000..971bf58a50e0538768d6ff0109cc994f505136d7 Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/xttj@3x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yfcs@2x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yfcs@2x.png" new file mode 100755 index 0000000000000000000000000000000000000000..48ce51f3fdd9f4a0c9d7f56285ea2258201efdae Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yfcs@2x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yfcs@3x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yfcs@3x.png" new file mode 100755 index 0000000000000000000000000000000000000000..7e9324d3d7e578c3feabbce8802bf5c7eeb689d8 Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yfcs@3x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_collect@2x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_collect@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..04745cd36c687865a8c902d47310630e119a6c62 Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_collect@2x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_collect@3x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_collect@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..9607a19a25fb63c02aa1d2796900604a30970ee2 Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_collect@3x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_collect_hui@2x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_collect_hui@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..767c69fa5e2cae6d2cb802d46915680c8c0690e0 Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_collect_hui@2x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_collect_hui@3x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_collect_hui@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..9875264033e1a31fdeea53d122953ef63a752809 Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_collect_hui@3x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_comment@2x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_comment@2x.png" new file mode 100755 index 0000000000000000000000000000000000000000..4b29889c4075a10f2d6434689813e43d4a5d47da Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_comment@2x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_comment@3x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_comment@3x.png" new file mode 100755 index 0000000000000000000000000000000000000000..6235519df5aadf4e4747b626f8fce866217ade2b Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_comment@3x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_concern@2x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_concern@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..97eaf81c54145748912403318286329c464ce00b Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_concern@2x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_concern@3x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_concern@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..ad1c9985f24c47cbfc2b7188dacd0c772b5477ff Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_concern@3x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_concern_bai@2x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_concern_bai@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..980a5a7cc56dd43aedbaabd589634a7aba565c3a Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_concern_bai@2x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_concern_bai@3x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_concern_bai@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..0758c68761a82bc41d893ffce159dd7d7b4ae1ca Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_concern_bai@3x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_like_no@2x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_like_no@2x.png" new file mode 100755 index 0000000000000000000000000000000000000000..433355f39bd2bf4ba7588f442446eadeabc63851 Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_like_no@2x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_like_no@3x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_like_no@3x.png" new file mode 100755 index 0000000000000000000000000000000000000000..b65a81a082cd7a0c78ee9f7d9f10d55645d39a79 Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_like_no@3x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_like_yes@2x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_like_yes@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..8e42789727342bd408a2f85a4e63b9f8e232212e Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_like_yes@2x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_like_yes@3x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_like_yes@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..f45370b7c767cba2c3d37539433fd0f934c7f910 Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_like_yes@3x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_msg@2x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_msg@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..d7902dbe6c4def6eba8d97117aa3b62598392019 Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_msg@2x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_msg@3x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_msg@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..f73d7b7c489a13840da772a7bc1a30aff5818e96 Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_msg@3x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_report@2x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_report@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..db4b2014370196e1a4b235bb1402f2361900ca0c Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_report@2x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_report@3x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_report@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..371052bbb49c9d8897eea2f59e224a38b7ada192 Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_report@3x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_share@2x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_share@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..233e679181a176b2f2b46795ec7e3f8d6f8517fd Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_share@2x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_share@3x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_share@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..dc136187c6ae105d69f465d4fd1400b66ad06007 Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_share@3x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_video@2x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_video@2x.png" new file mode 100755 index 0000000000000000000000000000000000000000..d9e68c4e45be03dc8cfbca214ea41ad656ce388e Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_video@2x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_video@3x.png" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_video@3x.png" new file mode 100755 index 0000000000000000000000000000000000000000..9b901ca99d8ff30bb90b60eb26eaa0080b765335 Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/Resource/yq_video@3x.png" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/.DS_Store" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..74a8ea97bf1623c08886a8d8c805b9cc57179902 Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/.DS_Store" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/.DS_Store" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..23ff8d5acd9233e6dfd76b4524e1d68783cca0e5 Binary files /dev/null and "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/.DS_Store" differ diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/PicturesCell.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/PicturesCell.h" new file mode 100644 index 0000000000000000000000000000000000000000..58374bce321ba3f57ed4f96c5499b895289edfcf --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/PicturesCell.h" @@ -0,0 +1,16 @@ +// +// PicturesCell.h +// JQQY +// +// Created by chason on 2017/12/20. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "YuanquanBaseCell.h" +#import "YuanquanModel.h" + +@interface PicturesCell : YuanquanBaseCell + +- (void)setYuanquanModel:(YuanquanModel *)model; + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/PicturesCell.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/PicturesCell.m" new file mode 100644 index 0000000000000000000000000000000000000000..64c1c0cec2e289e8f93d9f0fb30379b984ef8cde --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/PicturesCell.m" @@ -0,0 +1,146 @@ +// +// PicturesCell.m +// JQQY +// +// Created by chason on 2017/12/20. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "PicturesCell.h" +#import "UIButton+WebCache.h" +#import "UIImage+ImgSize.h" + +@interface PicturesCell () + +@property (nonatomic, strong) UIImageView *pictureView; + +@end + +@implementation PicturesCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier +{ + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + + } + return self; +} + +- (void)setYuanquanModel:(YuanquanModel *)model +{ + self.bgView.height = model.cellHeight-15; + for (id obj in self.bgView.subviews) { + if ([obj isKindOfClass:[UIImageView class]]) { + [obj removeFromSuperview]; + } + } + if (model.pictures.count == 1) { + _pictureView = [[UIImageView alloc] initWithFrame:CGRectMake(15, self.upline.bottom+10, 150, model.pictureHeight)]; +// _pictureView.backgroundColor = [UIColor lightGrayColor]; + [_pictureView sd_setImageWithURL:[NSURL URLWithString:model.pictures[0][@"cutimg"]] placeholderImage:PICTURE_DEFAULT options:SDWebImageLowPriority]; + [self.bgView addSubview:_pictureView]; + [self resetFrame:model pictureView:_pictureView]; + }else if (model.pictures.count == 2) { + for (int i=0; i +@class TopicTextModel; + +@interface QYVideoCell : UITableViewCell + +@property (nonatomic,retain)TopicTextModel *model; +@property (nonatomic,retain)UIView *bgView; +@property (nonatomic,retain)UIImageView *picImageView; +@property (nonatomic, strong) UIButton *playBtn; + + +@property (nonatomic,retain)MPMoviePlayerViewController *moviePlayer; + + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/QYVideoCell.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/QYVideoCell.m" new file mode 100644 index 0000000000000000000000000000000000000000..b470f8d34e32c9ef40be122d237306f2a64db9dd --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/QYVideoCell.m" @@ -0,0 +1,93 @@ +// +// QYImageCell.m +// JQQY +// +// Created by Shmily on 2018/1/17. +// Copyright © 2018年 jiuqi. All rights reserved. +// + +#import "QYVideoCell.h" +#import "TopicTextModel.h" +@implementation QYVideoCell + +- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier +{ + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + self.backgroundColor = UIColorFromRGB(0xf3f3f3); + [self.contentView addSubview:self.bgView]; + [self.bgView addSubview:self.picImageView]; + + } + return self; +} + +- (UIImageView *)picImageView +{ + if (!_picImageView) { + _picImageView = [[UIImageView alloc]initWithFrame:CGRectMake(10, 10, KSCREEN_WIDTH-40, KSCREEN_WIDTH-40)]; + _picImageView.userInteractionEnabled = YES; + } + return _picImageView; +} + + +- (UIView *)bgView +{ + if (!_bgView) { + _bgView = [[UIView alloc] initWithFrame:CGRectMake(10,0, KSCREEN_WIDTH-20,40)]; + _bgView.backgroundColor = [UIColor whiteColor]; + } + return _bgView; +} + +- (UIButton *)playBtn +{ + if (!_playBtn) { + _playBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + [_playBtn setImage:[UIImage imageNamed:@"yq_video"] forState:UIControlStateNormal]; + [_playBtn addTarget:self action:@selector(playBtnClicked) forControlEvents:UIControlEventTouchUpInside]; + [self.bgView addSubview:_playBtn]; + _playBtn.hidden = YES; + } + return _playBtn; +} +- (void)setModel:(TopicTextModel *)model +{ + _model = model; + _bgView.height = model.cellHeight; + self.playBtn.frame = self.picImageView.frame; + [_picImageView sd_setImageWithURL:[NSURL URLWithString:model.imageUrl] placeholderImage:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { + if (image) { + self.playBtn.hidden = NO; + } + }]; +} +- (void)playVideo:(NSString *)video +{ + NSURL *moveURl = [NSURL URLWithString:_model.video]; + if (_moviePlayer==nil) { + _moviePlayer = [[MPMoviePlayerViewController alloc]init]; + } + _moviePlayer.moviePlayer.movieSourceType=MPMovieSourceTypeStreaming; + [_moviePlayer.moviePlayer setContentURL:moveURl]; + [_moviePlayer.moviePlayer play]; + [self.firstViewController presentMoviePlayerViewControllerAnimated:_moviePlayer]; +} +- (void)dealloc +{ + +} +- (void)playBtnClicked +{ + [self playVideo:_model.video]; +} +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + // Configure the view for the selected state +} +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/TextAndPicturesCell.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/TextAndPicturesCell.h" new file mode 100644 index 0000000000000000000000000000000000000000..7d8359a0cf9329ea8aea27c0fba751c5ac08e2cd --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/TextAndPicturesCell.h" @@ -0,0 +1,16 @@ +// +// TextAndPicturesCell.h +// JQQY +// +// Created by chason on 2017/12/20. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "YuanquanBaseCell.h" +#import "YuanquanModel.h" + +@interface TextAndPicturesCell : YuanquanBaseCell + +- (void)setYuanquanModel:(YuanquanModel *)model; + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/TextAndPicturesCell.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/TextAndPicturesCell.m" new file mode 100644 index 0000000000000000000000000000000000000000..eda88523e5f4e06a4d3f8b03cfd65edc1e104853 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/TextAndPicturesCell.m" @@ -0,0 +1,165 @@ +// +// TextAndPicturesCell.m +// JQQY +// +// Created by chason on 2017/12/20. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "TextAndPicturesCell.h" +#import "UIButton+WebCache.h" +#import "UIImage+ImgSize.h" + +@interface TextAndPicturesCell () + +@property (nonatomic, strong) UILabel *textLab; +@property (nonatomic, strong) UIImageView *pictureView; + +@end + +@implementation TextAndPicturesCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier +{ + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + + } + return self; +} + +- (UILabel *)textLab +{ + if (!_textLab) { + _textLab = [[UILabel alloc] initWithFrame:CGRectMake(15, self.upline.bottom, self.bgView.width-30, 0)]; + // _textLab.backgroundColor = [UIColor greenColor]; + _textLab.numberOfLines = 3; + _textLab.font = SYSTEMFONT(13); + _textLab.textColor = [UIColor lightGrayColor]; + } + return _textLab; +} + +- (void)setYuanquanModel:(YuanquanModel *)model +{ + self.bgView.height = model.cellHeight-15; + for (id obj in self.bgView.subviews) { + if ([obj isKindOfClass:[UIImageView class]]) { + [obj removeFromSuperview]; + } + } + [self.bgView addSubview:self.textLab]; + _textLab.height = model.textHeight; + if (model.pictures.count == 1) { + _pictureView = [[UIImageView alloc] initWithFrame:CGRectMake(15, self.textLab.bottom, 150, model.pictureHeight)]; +// _pictureView.backgroundColor = [UIColor lightGrayColor]; + [_pictureView sd_setImageWithURL:[NSURL URLWithString:model.pictures[0][@"cutimg"]] placeholderImage:PICTURE_DEFAULT options:SDWebImageLowPriority]; + + + [self.bgView addSubview:_pictureView]; + [self resetFrame:model pictureView:_pictureView]; + }else if (model.pictures.count == 2) { + for (int i=0; i +@class TopicTextModel; + +@interface TopicAndTextCell : UITableViewCell + +@property (nonatomic,retain)TopicTextModel *model; + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/TopicAndTextCell.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/TopicAndTextCell.m" new file mode 100644 index 0000000000000000000000000000000000000000..c178cb4dd4cd765ad871d1a6a8c0d21b0cbc6e32 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/TopicAndTextCell.m" @@ -0,0 +1,127 @@ +// +// TopicAndTextCell.m +// JQQY +// +// Created by Shmily on 2018/1/17. +// Copyright © 2018年 jiuqi. All rights reserved. +// + +#import "TopicAndTextCell.h" +#import "QYLinkLable.h" +#import "TopicTextModel.h" +#import "ALLWebViewController.h" +#import "TopicDetailViewController.h" + +@interface TopicAndTextCell () + +/** + 话题 + */ +@property (nonatomic, strong) UILabel *topicLab; + +/** + 缘圈文字内容 + */ +@property (nonatomic, strong) QYLinkLable *textLab; + +@property (nonatomic,retain)UIView *bgView; + +@end + + +@implementation TopicAndTextCell + +-(id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier +{ + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + self.contentView.backgroundColor = UIColorFromRGB(0xf3f3f3); + [self.contentView addSubview:self.bgView]; + [self.bgView addSubview:self.topicLab]; + [self.bgView addSubview:self.textLab]; + } + return self; +} + +- (UIView *)bgView +{ + if (!_bgView) { + _bgView = [[UIView alloc] initWithFrame:CGRectMake(10,0, KSCREEN_WIDTH-20,150)]; + _bgView.backgroundColor = [UIColor whiteColor]; + } + return _bgView; +} +- (UILabel *)topicLab +{ + if (!_topicLab) { + _topicLab = [[UILabel alloc] initWithFrame:CGRectMake(10,5, KSCREEN_WIDTH-20, 30)]; + _topicLab.font = SYSTEMFONT(13); + _topicLab.textColor = UIColorFromRGB(0x6994f5); + _topicLab.userInteractionEnabled = YES; + TapGestureRecognizer *tap = [[TapGestureRecognizer alloc]initWithTarget:self action:@selector(goToTopic)]; + [_topicLab addGestureRecognizer:tap]; + + } + return _topicLab; +} + +- (QYLinkLable *)textLab +{ + if (!_textLab) { + _textLab = [[QYLinkLable alloc] initWithFrame:CGRectMake(10, _topicLab.bottom, KSCREEN_WIDTH-40,14)]; + _textLab.numberOfLines = 0; + _textLab.regularType = RegularTypeALL; + _textLab.font = SYSTEMFONT(13); + _textLab.delegate = self; +// _textLab.backgroundColor = [UIColor redColor]; + + + + } + return _textLab; +} + +- (void)setModel:(TopicTextModel *)model +{ + _model = model; + _topicLab.text = model.topic; + if (STR_IS_NOT_EMPTY(model.topicid) && STR_IS_NOT_EMPTY(model.topic)) { + _topicLab.hidden = NO; + _textLab.top = _topicLab.bottom; + }else{ + _topicLab.hidden = YES; + _textLab.top = 5; + } + _textLab.text = model.text; + _textLab.height = model.textHeight; + _bgView.height = _model.cellHeight; +} + + - (void)labelRegularLinkClick:(QYRegularType)type clickedString:(NSString *)clickedString + { + if (type == RegularTypeUrl) { + ALLWebViewController *allView = [[ALLWebViewController alloc]init]; + allView.urlStr = clickedString; + [self.firstViewController.navigationController pushViewController:allView animated:YES]; + }else if(type == RegularTypePhone){ + [ZCTools callPhoneStr:clickedString]; + } +} + +- (void)goToTopic +{ + TopicDetailViewController *topicVC = [[TopicDetailViewController alloc]init]; + topicVC.topicid = _model.topicid; + topicVC.titleStr = _model.topic; + [self.firstViewController.navigationController pushViewController:topicVC animated:YES]; +} + + + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/VideoCell.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/VideoCell.h" new file mode 100644 index 0000000000000000000000000000000000000000..1c85499af7713b6fd05310621f5f1cc71a29f60e --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/VideoCell.h" @@ -0,0 +1,16 @@ +// +// VideoCell.h +// JQQY +// +// Created by chason on 2017/12/20. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "YuanquanBaseCell.h" +#import "YuanquanModel.h" + +@interface VideoCell : YuanquanBaseCell + +- (void)setYuanquanModel:(YuanquanModel *)model; + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/VideoCell.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/VideoCell.m" new file mode 100644 index 0000000000000000000000000000000000000000..cb981c4afa4f6eddd6d73b62e7db9515e3664762 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/VideoCell.m" @@ -0,0 +1,88 @@ +// +// VideoCell.m +// JQQY +// +// Created by chason on 2017/12/20. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "VideoCell.h" +#import "UIButton+WebCache.h" + +@interface VideoCell () + +@property (nonatomic, strong) UIButton *videoView; + +@end + +@implementation VideoCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier +{ + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + [self.bgView addSubview:self.videoView]; + } + return self; +} + +- (UIButton *)videoView +{ + if (!_videoView) { + _videoView = [[UIButton alloc] initWithFrame:CGRectMake(15, self.upline.bottom+10, 150, 150)]; + _videoView.backgroundColor = UIColorFromRGB(0xf3f3f3); + _videoView.userInteractionEnabled = NO; + } + return _videoView; +} + +- (void)setYuanquanModel:(YuanquanModel *)model +{ + self.bgView.height = model.cellHeight-15; + if (STR_IS_NOT_EMPTY(model.position)) { + _videoView.top = self.upline.bottom+10; + self.positionLab.top = _videoView.bottom+10; + self.downline.top = self.positionLab.bottom; + }else{ + _videoView.top = self.upline.bottom+10; + self.downline.top = _videoView.bottom+10; + } + self.likeBtn.top = self.downline.bottom; + self.commentBtn.top = self.downline.bottom; + self.vline.top = self.downline.bottom+5; + + if (STR_IS_NOT_EMPTY(model.topic)) { + self.topicLab.hidden = NO; + }else{ + self.topicLab.hidden = YES; + } + + [self.avatarView sd_setBackgroundImageWithURL:[NSURL URLWithString:model.avatar] forState:UIControlStateNormal placeholderImage:USER_AVATAR_DEFAULT options:SDWebImageLowPriority]; + self.nicknameLab.text = model.nickname; + self.topicLab.text = [NSString stringWithFormat:@"# %@ #", model.topic]; + self.positionLab.text = model.position; + self.timeLab.text = model.time; + [self.likeBtn setTitle:model.likeNum forState:UIControlStateNormal]; + [self.commentBtn setTitle:model.commentNum forState:UIControlStateNormal]; + if ([model.islike intValue] == 0) { + [self.likeBtn setImage:[UIImage imageNamed:@"yq_like_no"] forState:UIControlStateNormal]; + }else{ + [self.likeBtn setImage:[UIImage imageNamed:@"yq_like_yes"] forState:UIControlStateNormal]; + } + + [_videoView sd_setBackgroundImageWithURL:model.videoDict[@"videoimg"] forState:UIControlStateNormal]; + [_videoView setImage:[UIImage imageNamed:@"yq_video"] forState:UIControlStateNormal]; +} + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/YuanQuanPicCell.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/YuanQuanPicCell.h" new file mode 100644 index 0000000000000000000000000000000000000000..d2b81577f4831f64f2e1918f133a93cf2daaa14f --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/YuanQuanPicCell.h" @@ -0,0 +1,15 @@ +// +// YuanQuanPicCell.h +// JQQY +// +// Created by Shmily on 2018/1/17. +// Copyright © 2018年 jiuqi. All rights reserved. +// + +#import + + +@interface YuanQuanPicCell : UITableViewCell + +@property (weak, nonatomic) IBOutlet UIImageView *picImageView; +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/YuanQuanPicCell.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/YuanQuanPicCell.m" new file mode 100644 index 0000000000000000000000000000000000000000..fe456b7f964349231201696fcbcdddf27f8671b4 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/YuanQuanPicCell.m" @@ -0,0 +1,28 @@ +// +// YuanQuanPicCell.m +// JQQY +// +// Created by Shmily on 2018/1/17. +// Copyright © 2018年 jiuqi. All rights reserved. +// + +#import "YuanQuanPicCell.h" + +@implementation YuanQuanPicCell + + + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (IBAction)shoubigImageView:(id)sender { +} +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/YuanQuanPicCell.xib" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/YuanQuanPicCell.xib" new file mode 100644 index 0000000000000000000000000000000000000000..132520ee38c9660aa236a89809460971aa39eecd --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/YuanQuanPicCell.xib" @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/YuanquanBaseCell.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/YuanquanBaseCell.h" new file mode 100644 index 0000000000000000000000000000000000000000..7ce4845b0ca3eea2fb65f019d3978fd729c88d47 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/YuanquanBaseCell.h" @@ -0,0 +1,67 @@ +// +// YuanquanBaseCell.h +// JQQY +// +// Created by chason on 2017/12/20. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import +#import "YuanquanModel.h" + +@protocol YuanquanBaseCellDelegate + +- (void)clickAvatar:(id)cell; +- (void)clickTopicLab:(id)cell; +- (void)clickLikeBtn:(id)cell; +- (void)clickCommentBtn:(id)cell; + +@end + +@interface YuanquanBaseCell : UITableViewCell + +@property (assign, nonatomic) id delegate; + +- (void)setYuanquanModel:(YuanquanModel *)model; + +@property (nonatomic, strong) UIView *bgView; +@property (nonatomic, strong) UIView *upline; +@property (nonatomic, strong) UIView *downline; +@property (nonatomic, strong) UIView *vline; + +/** + 头像 + */ +@property (nonatomic, strong) UIButton *avatarView; + +/** + 昵称 + */ +@property (nonatomic, strong) UILabel *nicknameLab; + +/** + 时间 + */ +@property (nonatomic, strong) UILabel *timeLab; + +/** + 话题 + */ +@property (nonatomic, strong) UILabel *topicLab; + +/** + 位置 + */ +@property (nonatomic, strong) UILabel *positionLab; + +/** + 点赞 + */ +@property (nonatomic, strong) UIButton *likeBtn; + +/** + 评论 + */ +@property (nonatomic, strong) UIButton *commentBtn; + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/YuanquanBaseCell.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/YuanquanBaseCell.m" new file mode 100644 index 0000000000000000000000000000000000000000..c047f3aa9302b82471c0561aae3faa7b44cae3af --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/YuanquanBaseCell.m" @@ -0,0 +1,219 @@ +// +// YuanquanBaseCell.m +// JQQY +// +// Created by chason on 2017/12/20. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "YuanquanBaseCell.h" + +@implementation YuanquanBaseCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier +{ + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + self.contentView.backgroundColor = UIColorFromRGB(0xf3f3f3); + [self.contentView addSubview:self.bgView]; + [self.bgView addSubview:self.avatarView]; + [self.bgView addSubview:self.nicknameLab]; + [self.bgView addSubview:self.timeLab]; + [self.bgView addSubview:self.topicLab]; + [self.bgView addSubview:self.upline]; + [self.bgView addSubview:self.positionLab]; + [self.bgView addSubview:self.downline]; + [self.bgView addSubview:self.likeBtn]; + [self.bgView addSubview:self.vline]; + [self.bgView addSubview:self.commentBtn]; + } + return self; +} + +- (UIView *)bgView +{ + if (!_bgView) { + _bgView = [[UIView alloc] initWithFrame:CGRectMake(15, 0, KSCREEN_WIDTH-30, 0)]; + [_bgView setImageRoundRadius:6 BorderWidth:0 borderColor:nil]; + _bgView.backgroundColor = [UIColor whiteColor]; + } + return _bgView; +} + +- (UIButton *)avatarView +{ + if (!_avatarView) { + _avatarView = [[UIButton alloc] initWithFrame:CGRectMake(15, 15, 50, 50)]; + [_avatarView setImageRoundRadius:5 BorderWidth:0 borderColor:nil]; + [_avatarView setBackgroundImage:USER_AVATAR_DEFAULT forState:UIControlStateNormal]; + [_avatarView addTarget:self action:@selector(avatarViewClicked) forControlEvents:UIControlEventTouchUpInside]; + } + return _avatarView; +} + +- (UILabel *)nicknameLab +{ + if (!_nicknameLab) { + if (iPhone5) { + _nicknameLab = [[UILabel alloc] initWithFrame:CGRectMake(_avatarView.right+10, 20, _bgView.width-_avatarView.width-140, 20)]; + }else{ + _nicknameLab = [[UILabel alloc] initWithFrame:CGRectMake(_avatarView.right+10, 20, _bgView.width-_avatarView.width-170, 20)]; + } +// _nicknameLab.backgroundColor = [UIColor orangeColor]; + _nicknameLab.font = FFONT16; + _nicknameLab.textColor = [UIColor blackColor]; + } + return _nicknameLab; +} + +- (UILabel *)timeLab +{ + if (!_timeLab) { + _timeLab = [[UILabel alloc] initWithFrame:CGRectMake(_avatarView.right+10, _nicknameLab.bottom, _nicknameLab.width, 20)]; +// _timeLab.backgroundColor = [UIColor redColor]; + _timeLab.font = SYSTEMFONT(10); + _timeLab.textColor = [UIColor lightGrayColor]; + } + return _timeLab; +} + +- (UILabel *)topicLab +{ + if (!_topicLab) { + if (iPhone5) { + _topicLab = [[UILabel alloc] initWithFrame:CGRectMake(_bgView.width-125, 27.5, 110, 25)]; + }else{ + _topicLab = [[UILabel alloc] initWithFrame:CGRectMake(_bgView.width-145, 27.5, 130, 25)]; + } +// _topicLab.backgroundColor = [UIColor greenColor]; + [_topicLab setImageRoundRadius:5 BorderWidth:1 borderColor:UIColorFromRGB(0x6994f5)]; +// if (iPhone5) { + _topicLab.font = SYSTEMFONT(10); +// }else{ +// _topicLab.font = SYSTEMFONT(13); +// } + _topicLab.textColor = UIColorFromRGB(0x6994f5); + _topicLab.textAlignment = NSTextAlignmentCenter; + _topicLab.userInteractionEnabled = YES; + UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(topicLabClicked)]; + [_topicLab addGestureRecognizer:tap]; + } + return _topicLab; +} + +- (UIView *)upline +{ + if (!_upline) { + _upline = [[UIView alloc] initWithFrame:CGRectMake(15, _avatarView.bottom+15, _bgView.width-30, 0.5)]; + _upline.backgroundColor = LINECOLOUR; + } + return _upline; +} + +- (UILabel *)positionLab +{ + if (!_positionLab) { + _positionLab = [[UILabel alloc] initWithFrame:CGRectMake(15, _upline.bottom, _bgView.width-30, 20)]; +// _positionLab.backgroundColor = [UIColor lightGrayColor]; + _positionLab.font = FFONT12; + _positionLab.textColor = [UIColor lightGrayColor]; + _positionLab.textAlignment = NSTextAlignmentRight; + } + return _positionLab; +} + +- (UIView *)downline +{ + if (!_downline) { + _downline = [[UIView alloc] initWithFrame:CGRectMake(15, _positionLab.bottom, _bgView.width-30, 0.5)]; + _downline.backgroundColor = LINECOLOUR; + } + return _downline; +} + +- (UIButton *)likeBtn +{ + if (!_likeBtn) { + _likeBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _likeBtn.frame = CGRectMake(0, _downline.bottom, _bgView.width/2, 40); +// _likeBtn.backgroundColor = [UIColor redColor]; + _likeBtn.titleLabel.font = SYSTEMFONT(14); + [_likeBtn setTitle:@"点赞" forState:UIControlStateNormal]; + [_likeBtn setTitleColor:MAIN_TEXTCOLOR forState:UIControlStateNormal]; + [_likeBtn setImage:[UIImage imageNamed:@"yq_like_no"] forState:UIControlStateNormal]; + [_likeBtn setImageEdgeInsets:UIEdgeInsetsMake(0, -10, 0, 10)]; + [_likeBtn addTarget:self action:@selector(likeBtnClicked) forControlEvents:UIControlEventTouchUpInside]; + } + return _likeBtn; +} + +- (UIView *)vline +{ + if (!_vline) { + _vline = [[UIView alloc] initWithFrame:CGRectMake(_likeBtn.right, _downline.bottom+5, 0.5, 30)]; + _vline.backgroundColor = LINECOLOUR; + } + return _vline; +} + +- (UIButton *)commentBtn +{ + if (!_commentBtn) { + _commentBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _commentBtn.frame = CGRectMake(_vline.right, _downline.bottom, _bgView.width/2, 40); +// _commentBtn.backgroundColor = [UIColor redColor]; + _commentBtn.titleLabel.font = SYSTEMFONT(14); + [_commentBtn setTitle:@"评论" forState:UIControlStateNormal]; + [_commentBtn setTitleColor:MAIN_TEXTCOLOR forState:UIControlStateNormal]; + [_commentBtn setImage:[UIImage imageNamed:@"yq_comment"] forState:UIControlStateNormal]; + [_commentBtn setImageEdgeInsets:UIEdgeInsetsMake(0, -10, 0, 10)]; + [_commentBtn addTarget:self action:@selector(commentBtnClicked) forControlEvents:UIControlEventTouchUpInside]; + } + return _commentBtn; +} + +- (void)setYuanquanModel:(YuanquanModel *)model +{ + +} + +- (void)avatarViewClicked +{ + if ([_delegate respondsToSelector:@selector(clickAvatar:)]) { + [_delegate clickAvatar:self]; + } +} + +- (void)topicLabClicked +{ + if ([_delegate respondsToSelector:@selector(clickTopicLab:)]) { + [_delegate clickTopicLab:self]; + } +} + +- (void)likeBtnClicked +{ + if ([_delegate respondsToSelector:@selector(clickLikeBtn:)]) { + [_delegate clickLikeBtn:self]; + } +} + +- (void)commentBtnClicked +{ + if ([_delegate respondsToSelector:@selector(clickCommentBtn:)]) { + [_delegate clickCommentBtn:self]; + } +} + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/YuanquanCommentCell.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/YuanquanCommentCell.h" new file mode 100644 index 0000000000000000000000000000000000000000..e1753d93cd07de11630a16ca6f9cde4d9982e3d2 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/YuanquanCommentCell.h" @@ -0,0 +1,64 @@ +// +// YuanquanCommentCell.h +// qiyuan +// +// Created by chason on 2017/11/1. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import +@class YuanquanCommentModel; + +@protocol YuanquanCommentCellDelegate + +- (void)clickOptionBtn:(id)cell; + +@end + +@interface YuanquanCommentCell : UITableViewCell + +@property (assign, nonatomic) id delegate; + +@property (nonatomic, strong) YuanquanCommentModel *model; + +/** + 背景View + */ +@property (nonatomic, strong) UIView *bgView; + +/** + 头像 + */ +@property (nonatomic, strong) UIImageView *avatarView; + +/** + 姓名 + */ +@property (nonatomic, strong) UILabel *nameLab; + +/** + 时间 + */ +@property (nonatomic, strong) UILabel *timeLab; + +/** + 评论内容 + */ +@property (nonatomic, strong) UILabel *commentLab; + +/** + 查看全部回复按钮 + */ +@property (nonatomic, strong) UILabel *lookReplyBtn; + +/** + 分割线 + */ +@property (nonatomic, strong) UIView *line; + +/** + 选项 + */ +@property (nonatomic, strong) UIButton *optionBtn; + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/YuanquanCommentCell.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/YuanquanCommentCell.m" new file mode 100644 index 0000000000000000000000000000000000000000..dadfe0dae90d0f798264927ab6a7cc2b66bc99a9 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/YuanquanCommentCell.m" @@ -0,0 +1,148 @@ +// +// YuanquanCommentCell.m +// qiyuan +// +// Created by chason on 2017/11/1. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "YuanquanCommentCell.h" +#import "YuanquanCommentModel.h" + +@implementation YuanquanCommentCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier +{ + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + self.contentView.backgroundColor = UIColorFromRGB(0xf3f3f3); + [self.contentView addSubview:self.bgView]; + [self.bgView addSubview:self.avatarView]; + [self.bgView addSubview:self.nameLab]; + [self.bgView addSubview:self.timeLab]; + [self.bgView addSubview:self.commentLab]; + [self.bgView addSubview:self.lookReplyBtn]; + [self.bgView addSubview:self.line]; + [self.bgView addSubview:self.optionBtn]; + } + return self; +} + +- (UIView *)bgView +{ + if (!_bgView) { + _bgView = [[UIView alloc] initWithFrame:CGRectMake(10, 0, KSCREEN_WIDTH-20, 150)]; + _bgView.backgroundColor = [UIColor whiteColor]; + } + return _bgView; +} + +- (UIImageView *)avatarView +{ + if (!_avatarView) { + _avatarView = [[UIImageView alloc] initWithFrame:CGRectMake(10, 10, 40, 40)]; + [_avatarView setImageRoundRadius:5 BorderWidth:0 borderColor:nil]; + } + return _avatarView; +} + +- (UILabel *)nameLab +{ + if (!_nameLab) { + _nameLab = [[UILabel alloc] initWithFrame:CGRectMake(_avatarView.right+10, _avatarView.top, _bgView.width-70, 20)]; + _nameLab.font = SYSTEMFONT(13); + _nameLab.textColor = MAIN_TEXTCOLOR; + } + return _nameLab; +} + +- (UILabel *)timeLab +{ + if (!_timeLab) { + _timeLab = [[UILabel alloc] initWithFrame:CGRectMake(_nameLab.left, _nameLab.bottom, _nameLab.width, 20)]; + _timeLab.font = FFONT12; + _timeLab.textColor = [UIColor lightGrayColor]; + } + return _timeLab; +} + +- (UILabel *)commentLab +{ + if (!_commentLab) { + _commentLab = [[UILabel alloc] initWithFrame:CGRectMake(_nameLab.left, _avatarView.bottom+10, _bgView.width-70, 50)]; + _commentLab.font = SYSTEMFONT(13); + _commentLab.textColor = [UIColor lightGrayColor]; + _commentLab.numberOfLines = 3; + } + return _commentLab; +} + +- (UILabel *)lookReplyBtn +{ + if (!_lookReplyBtn) { + _lookReplyBtn = [[UILabel alloc] initWithFrame:CGRectMake(_nameLab.left, _commentLab.bottom+5, _commentLab.width, 20)]; + _lookReplyBtn.font = SYSTEMFONT(13); + _lookReplyBtn.textColor = PURPLECOLOUR; + } + return _lookReplyBtn; +} + +- (UIView *)line +{ + if (!_line) { + _line = [[UIView alloc] initWithFrame:CGRectMake(10, 150-0.5, _bgView.width-20, 0.5)]; + _line.backgroundColor = LINECOLOUR; + } + return _line; +} + +- (UIButton *)optionBtn +{ + if (!_optionBtn) { + _optionBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _optionBtn.frame = CGRectMake(_bgView.width-40, 0, 30, 30); + [_optionBtn addTarget:self action:@selector(optionBtnClicked) forControlEvents:UIControlEventTouchUpInside]; + [_optionBtn setImage:[UIImage imageNamed:@"arrow_down"] forState:UIControlStateNormal]; + } + return _optionBtn; +} + +- (void)setModel:(YuanquanCommentModel *)model +{ + _bgView.height = model.cellHeight; + _commentLab.height = model.commentHeight; + _lookReplyBtn.top = _commentLab.bottom+5; + _line.top = model.cellHeight-0.5; + + [_avatarView sd_setImageWithURL:[NSURL URLWithString:model.avatar] placeholderImage:USER_AVATAR_DEFAULT options:SDWebImageLowPriority]; + _nameLab.text = model.nickname; + _timeLab.text = model.time; + _commentLab.text = model.comment; + if (![model.childCount isEqualToString:@"0"]) { + _lookReplyBtn.hidden = NO; + _lookReplyBtn.text = [NSString stringWithFormat:@"查看全部%@条回复 >", model.childCount]; + }else{ + _lookReplyBtn.hidden = YES; + } + +} + +- (void)optionBtnClicked +{ + if ([_delegate respondsToSelector:@selector(clickOptionBtn:)]) { + [_delegate clickOptionBtn:self]; + } +} + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/ZanAndReportCell.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/ZanAndReportCell.h" new file mode 100644 index 0000000000000000000000000000000000000000..7fdd5ab4c675c3fe67686a17a35752e55ab32449 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/ZanAndReportCell.h" @@ -0,0 +1,35 @@ +// +// ZanAndReportCell.h +// JQQY +// +// Created by Shmily on 2018/1/17. +// Copyright © 2018年 jiuqi. All rights reserved. +// + +#import +@class TopicTextModel; + + +@interface ZanAndReportCell : UITableViewCell + +/** + 分割线2 + */ +@property (nonatomic, strong) UIView *line1; + +/** + 点赞按钮 + */ +@property (nonatomic, strong) UIButton *likeBtn; + +/** + 举报按钮 + */ +@property (nonatomic, strong) UIButton *reportBtn; + +@property (nonatomic,retain)UIView *bgView; + +@property (nonatomic,retain)TopicTextModel *model; + + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/ZanAndReportCell.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/ZanAndReportCell.m" new file mode 100644 index 0000000000000000000000000000000000000000..610a9fa2384e217a7f42f8dd982f7989ce3e4a7b --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/ZanAndReportCell.m" @@ -0,0 +1,99 @@ +// +// ZanAndReportCell.m +// JQQY +// +// Created by Shmily on 2018/1/17. +// Copyright © 2018年 jiuqi. All rights reserved. +// + +#import "ZanAndReportCell.h" +#import "TopicTextModel.h" +#import "IntroduceViewController.h" +@implementation ZanAndReportCell + +- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier +{ + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + self.contentView.backgroundColor = UIColorFromRGB(0xf7f3f3); + [self.contentView addSubview:self.bgView]; + [self.bgView addSubview:self.likeBtn]; + [self.bgView addSubview:self.reportBtn]; + [self.bgView addSubview:self.line1]; + } + return self; +} + +- (UIView *)bgView +{ + if (!_bgView) { + _bgView = [[UIView alloc] initWithFrame:CGRectMake(10,0, KSCREEN_WIDTH-20,50)]; + _bgView.backgroundColor = [UIColor whiteColor]; + } + return _bgView; +} + +- (UIView *)line1 +{ + if (!_line1) { + _line1 = [[UIView alloc] initWithFrame:CGRectMake(10, 10, _bgView.width-20, 0.5)]; + _line1.backgroundColor = LINECOLOUR; + } + return _line1; +} +- (UIButton *)likeBtn +{ + if (!_likeBtn) { + _likeBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _likeBtn.frame = CGRectMake(0,10,self.bgView.width/2,40); + _likeBtn.titleLabel.font = FFONT12; + [_likeBtn setTitleColor:[UIColor lightGrayColor] forState:UIControlStateNormal]; + [_likeBtn setTitle:@"点赞" forState:UIControlStateNormal]; + [_likeBtn setImageEdgeInsets:UIEdgeInsetsMake(0, -10, 0, 10)]; + } + return _likeBtn; +} + +- (UIButton *)reportBtn +{ + if (!_reportBtn) { + _reportBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _reportBtn.frame = CGRectMake(_likeBtn.right,10, self.bgView.width/2,40); + _reportBtn.titleLabel.font = FFONT12; + [_reportBtn setTitleColor:[UIColor lightGrayColor] forState:UIControlStateNormal]; + [_reportBtn setTitle:@"举报" forState:UIControlStateNormal]; + [_reportBtn setImageEdgeInsets:UIEdgeInsetsMake(0, -10, 0, 10)]; + [_reportBtn setImage:[UIImage imageNamed:@"yq_report"] forState:UIControlStateNormal]; + [_reportBtn addTarget:self action:@selector(reportBtnCliked) forControlEvents:UIControlEventTouchUpInside]; + } + return _reportBtn; +} + +- (void)reportBtnCliked +{ + IntroduceViewController *reasonVC = [[IntroduceViewController alloc] init]; + reasonVC.reportID = _model.yuanquanId; + reasonVC.titleName = @"举报理由"; + reasonVC.type = 4; + [self.firstViewController.navigationController pushViewController:reasonVC animated:YES]; +} + + + +- (void)setModel:(TopicTextModel *)model +{ + _model = model; + [self.likeBtn setTitle:ToString(model.likeNum) forState:UIControlStateNormal]; + if ([model.isLike intValue] == 0) { + [self.likeBtn setImage:[UIImage imageNamed:@"yq_like_no"] forState:UIControlStateNormal]; + }else{ + [self.likeBtn setImage:[UIImage imageNamed:@"yq_like_yes"] forState:UIControlStateNormal]; + } +} +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/\345\233\276\347\211\207\345\212\240\350\275\275/UITableView+XHWebImageAutoSize.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/\345\233\276\347\211\207\345\212\240\350\275\275/UITableView+XHWebImageAutoSize.h" new file mode 100755 index 0000000000000000000000000000000000000000..627617b3b43f22ae831d3c4f07aef147c33579b9 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/\345\233\276\347\211\207\345\212\240\350\275\275/UITableView+XHWebImageAutoSize.h" @@ -0,0 +1,47 @@ +// +// UITableView+XHWebImageAutoSize.h +// XHWebImageAutoSizeExample +// +// Created by zhuxiaohui on 2017/10/25. +// Copyright © 2017年 it7090.com. All rights reserved. +// https://github.com/CoderZhuXH/XHWebImageAutoSize + +#import +#import "XHWebImageAutoSizeConst.h" + +@interface UITableView (XHWebImageAutoSize) + +/** + Reload tableView + + @param url imageURL + */ +-(void)xh_reloadDataForURL:(NSURL *)url; + +#pragma mark - 过期 +/** + * Reload row + * + * @param indexPath indexPath + * @param url imageURL + */ +-(void)xh_reloadRowAtIndexPath:(NSIndexPath *)indexPath forURL:(NSURL *)url XHWebImageAutoSizeDeprecated("请使用xh_reloadDataForURL:"); + +/** + * Reload row withRowAnimation + * + * @param indexPath indexPath + * @param animation UITableViewRowAnimation + * @param url imageURL + */ +-(void)xh_reloadRowAtIndexPath:(NSIndexPath *)indexPath withRowAnimation:(UITableViewRowAnimation)animation forURL:(NSURL *)url XHWebImageAutoSizeDeprecated("请使用xh_reloadDataForURL:"); + +/** + * Reload rows + * + * @param indexPaths indexPaths + * @param url imageURL + */ +-(void)xh_reloadRowsAtIndexPaths:(NSArray *)indexPaths forURL:(NSURL *)url XHWebImageAutoSizeDeprecated("请使用xh_reloadDataForURL:"); +; +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/\345\233\276\347\211\207\345\212\240\350\275\275/UITableView+XHWebImageAutoSize.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/\345\233\276\347\211\207\345\212\240\350\275\275/UITableView+XHWebImageAutoSize.m" new file mode 100755 index 0000000000000000000000000000000000000000..1b8a688549ad3d264edc52dbc8a3aa03f19f9780 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/\345\233\276\347\211\207\345\212\240\350\275\275/UITableView+XHWebImageAutoSize.m" @@ -0,0 +1,47 @@ +// +// UITableView+XHWebImageAutoSize.m +// XHWebImageAutoSizeExample +// +// Created by zhuxiaohui on 2017/10/25. +// Copyright © 2017年 it7090.com. All rights reserved. +// https://github.com/CoderZhuXH/XHWebImageAutoSize + +#import "UITableView+XHWebImageAutoSize.h" +#import "XHWebImageAutoSizeConst.h" +#import "XHWebImageAutoSize.h" + +@implementation UITableView (XHWebImageAutoSize) + +-(void)xh_reloadDataForURL:(NSURL *)url{ + BOOL reloadState = [XHWebImageAutoSize reloadStateFromCacheForURL:url]; + if(!reloadState){ + [self reloadData]; + [XHWebImageAutoSize storeReloadState:YES forURL:url completed:nil]; + } +} + +#pragma mark-过期 +-(void)xh_reloadRowAtIndexPath:(NSIndexPath *)indexPath forURL:(NSURL *)url{ + [self xh_reloadRowAtIndexPath:indexPath withRowAnimation:UITableViewRowAnimationNone forURL:url]; +} + +-(void)xh_reloadRowAtIndexPath:(NSIndexPath *)indexPath withRowAnimation:(UITableViewRowAnimation)animation forURL:(NSURL *)url{ + BOOL reloadState = [XHWebImageAutoSize reloadStateFromCacheForURL:url]; + if(!reloadState){ + [self reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:animation]; + [XHWebImageAutoSize storeReloadState:YES forURL:url completed:nil]; + } +} + +-(void)xh_reloadRowsAtIndexPaths:(NSArray *)indexPaths forURL:(NSURL *)url{ + [self xh_reloadRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationNone forURL:url]; +} + +-(void)xh_reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation forURL:(NSURL *)url{ + BOOL reloadState = [XHWebImageAutoSize reloadStateFromCacheForURL:url]; + if(!reloadState){ + [self reloadRowsAtIndexPaths:indexPaths withRowAnimation:animation]; + [XHWebImageAutoSize storeReloadState:YES forURL:url completed:nil]; + } +} +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/\345\233\276\347\211\207\345\212\240\350\275\275/XHWebImageAutoSize.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/\345\233\276\347\211\207\345\212\240\350\275\275/XHWebImageAutoSize.h" new file mode 100755 index 0000000000000000000000000000000000000000..6dcc187d5ee940a331fa15cb67d5b7658f1eeeef --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/\345\233\276\347\211\207\345\212\240\350\275\275/XHWebImageAutoSize.h" @@ -0,0 +1,65 @@ +// +// XHWebImageAutoSize.h +// XHWebImageHeightLayoutExample +// +// Created by zhuxiaohui on 2016/11/16. +// Copyright © 2016年 it7090.com. All rights reserved. +// https://github.com/CoderZhuXH/XHWebImageAutoSize + +#import +#import +#import "UITableView+XHWebImageAutoSize.h" +#import "XHWebImageAutoSizeCache.h" + +@interface XHWebImageAutoSize : NSObject + +/** + * Get image height + * + * @param url imageURL + * @param layoutWidth layoutWidth + * @param estimateHeight estimateHeight(default 100) + * + * @return imageHeight + */ ++(CGFloat)imageHeightForURL:(NSURL *)url layoutWidth:(CGFloat)layoutWidth estimateHeight:(CGFloat )estimateHeight; + +/** + * Get image size from cache,query the disk cache synchronously after checking the memory cache + * + * @param url imageURL + * + * @return imageSize + */ ++(CGSize )imageSizeFromCacheForURL:(NSURL *)url; + +/** + * Store an imageSize into memory and disk cache + * + * @param image image + * @param url imageURL + * @param completedBlock An block that should be executed after the imageSize has been saved (optional) + */ ++(void)storeImageSize:(UIImage *)image forURL:(NSURL *)url completed:(XHWebImageAutoSizeCacheCompletionBlock)completedBlock; + +/** + * Get reload state from cache,query the disk cache synchronously after checking the memory cache + * + * @param url imageURL + * + * @return reloadState + */ ++(BOOL)reloadStateFromCacheForURL:(NSURL *)url; + +/** + * Store an reloadState into memory and disk cache + * + * @param state reloadState + * @param url imageURL + * @param completedBlock An block that should be executed after the reloadState has been saved (optional) + */ ++(void)storeReloadState:(BOOL)state forURL:(NSURL *)url completed:(XHWebImageAutoSizeCacheCompletionBlock)completedBlock; + +@end + + diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/\345\233\276\347\211\207\345\212\240\350\275\275/XHWebImageAutoSize.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/\345\233\276\347\211\207\345\212\240\350\275\275/XHWebImageAutoSize.m" new file mode 100755 index 0000000000000000000000000000000000000000..06f6a9e1f54dfae11a6292ecd336158b26ac1b5b --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/\345\233\276\347\211\207\345\212\240\350\275\275/XHWebImageAutoSize.m" @@ -0,0 +1,49 @@ +// +// XHWebImageAutoSize.m +// XHWebImageHeightLayoutExample +// +// Created by zhuxiaohui on 2016/11/16. +// Copyright © 2016年 it7090.com. All rights reserved. +// https://github.com/CoderZhuXH/XHWebImageAutoSize + +#import "XHWebImageAutoSize.h" + +static CGFloat const estimateDefaultHeight = 100; + +@implementation XHWebImageAutoSize + ++(CGFloat)imageHeightForURL:(NSURL *)url layoutWidth:(CGFloat)layoutWidth estimateHeight:(CGFloat )estimateHeight{ + CGFloat showHeight = estimateDefaultHeight; + if(estimateHeight) showHeight = estimateHeight; + if(!url || !layoutWidth) return showHeight; + CGSize size = [self imageSizeFromCacheForURL:url]; + CGFloat imgWidth = size.width; + CGFloat imgHeight = size.height; + if(imgWidth>0 && imgHeight >0){ + showHeight = layoutWidth/imgWidth*imgHeight; + } + return showHeight; +} + ++(void)storeImageSize:(UIImage *)image forURL:(NSURL *)url completed:(XHWebImageAutoSizeCacheCompletionBlock)completedBlock{ + [[XHWebImageAutoSizeCache shardCache] storeImageSize:image forKey:[self cacheKeyForURL:url] completed:completedBlock]; +} + ++(void)storeReloadState:(BOOL)state forURL:(NSURL *)url completed:(XHWebImageAutoSizeCacheCompletionBlock)completedBlock{ + [[XHWebImageAutoSizeCache shardCache] storeReloadState:state forKey:[self cacheKeyForURL:url] completed:completedBlock]; +} + ++(CGSize )imageSizeFromCacheForURL:(NSURL *)url{ + return [[XHWebImageAutoSizeCache shardCache] imageSizeFromCacheForKey:[self cacheKeyForURL:url]]; +} + ++(BOOL)reloadStateFromCacheForURL:(NSURL *)url{ + return [[XHWebImageAutoSizeCache shardCache] reloadStateFromCacheForKey:[self cacheKeyForURL:url]]; +} + +#pragma mark - XHWebImageAutoSize (private) ++(NSString *)cacheKeyForURL:(NSURL *)url{ + return [url absoluteString]; +} + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/\345\233\276\347\211\207\345\212\240\350\275\275/XHWebImageAutoSizeCache.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/\345\233\276\347\211\207\345\212\240\350\275\275/XHWebImageAutoSizeCache.h" new file mode 100755 index 0000000000000000000000000000000000000000..1fa20b138f317a951fe82dc4b166b73b289cd80f --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/\345\233\276\347\211\207\345\212\240\350\275\275/XHWebImageAutoSizeCache.h" @@ -0,0 +1,79 @@ +// +// XHWebImageAutoSizeCache.h +// XHWebImageHeightLayoutExample +// +// Created by zhuxiaohui on 2016/11/16. +// Copyright © 2016年 it7090.com. All rights reserved. +// https://github.com/CoderZhuXH/XHWebImageAutoSize + +#import +#import + +typedef void(^XHWebImageAutoSizeCacheCompletionBlock)(BOOL result); + +@interface XHWebImageAutoSizeCache : NSObject + +/** + * Return global shared cache instance + * + * @return XHWebImageAutoSizeCache global instance + */ ++(XHWebImageAutoSizeCache *)shardCache; + +/** + * Store an imageSize into memory and disk cache at the given key. + * + * @param image The image to store + * @param key The unique imageSize cache key, usually it's image absolute URL + * + * @return result + */ +-(BOOL)storeImageSize:(UIImage *)image forKey:(NSString *)key; + +/** + * Store an imageSize into memory and disk cache at the given key. + * + * @param image The image to store + * @param key The unique imageSize cache key, usually it's image absolute URL + * @param completedBlock An block that should be executed after the imageSize has been saved (optional) + */ +-(void)storeImageSize:(UIImage *)image forKey:(NSString *)key completed:(XHWebImageAutoSizeCacheCompletionBlock)completedBlock; + +/** + * Query the disk cache synchronously after checking the memory cache + * + * @param key The unique key used to store the wanted imageSize + * + * @return imageSize + */ +-(CGSize)imageSizeFromCacheForKey:(NSString *)key; + +/** + * Store an reloadState into memory and disk cache at the given key. + * + * @param state reloadState + * @param key The unique reloadState cache key, usually it's image absolute URL + * + * @return result + */ +-(BOOL)storeReloadState:(BOOL)state forKey:(NSString *)key; + +/** + * Store an reloadState into memory and disk cache at the given key + * + * @param state reloadState + * @param key The unique reloadState cache key, usually it's image absolute URL + * @param completedBlock An block that should be executed after the reloadState has been saved (optional) + */ +-(void)storeReloadState:(BOOL)state forKey:(NSString *)key completed:(XHWebImageAutoSizeCacheCompletionBlock)completedBlock; + +/** + * Query the disk cache synchronously after checking the memory cache + * + * @param key The unique key used to store the wanted reloadState + * + * @return reloadState + */ +-(BOOL)reloadStateFromCacheForKey:(NSString *)key; + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/\345\233\276\347\211\207\345\212\240\350\275\275/XHWebImageAutoSizeCache.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/\345\233\276\347\211\207\345\212\240\350\275\275/XHWebImageAutoSizeCache.m" new file mode 100755 index 0000000000000000000000000000000000000000..717a3b7397498b370511151805f26d675ab53887 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/\345\233\276\347\211\207\345\212\240\350\275\275/XHWebImageAutoSizeCache.m" @@ -0,0 +1,232 @@ +// +// XHWebImageAutoSizeCache.m +// XHWebImageHeightLayoutExample +// +// Created by zhuxiaohui on 2016/11/16. +// Copyright © 2016年 it7090.com. All rights reserved. +// https://github.com/CoderZhuXH/XHWebImageAutoSize + +#import "XHWebImageAutoSizeCache.h" +#import +#import "XHWebImageAutoSizeConst.h" + +@interface NSString (CacheFileName) + +@property(nonatomic,copy ,readonly)NSString * sizeKeyName; +@property(nonatomic,copy ,readonly)NSString * reloadKeyName; +@property(nonatomic,copy ,readonly)NSString * md5String; + +@end + +@implementation NSString (CacheKeyName) + +-(NSString *)sizeKeyName{ + NSString *keyName = [NSString stringWithFormat:@"sizeKeyName:%@",self]; + return keyName.md5String; +} +-(NSString *)reloadKeyName{ + NSString *keyName = [NSString stringWithFormat:@"reloadKeyName:%@",self]; + return keyName.md5String; +} +-(NSString *)md5String{ + const char *value = [self UTF8String]; + unsigned char outputBuffer[CC_MD5_DIGEST_LENGTH]; + CC_MD5(value, (CC_LONG)strlen(value), outputBuffer); + NSMutableString *outputString = [[NSMutableString alloc] initWithCapacity:CC_MD5_DIGEST_LENGTH * 2]; + for(NSInteger count = 0; count < CC_MD5_DIGEST_LENGTH; count++){ + [outputString appendFormat:@"%02x",outputBuffer[count]]; + } + return outputString; +} + +@end + +@interface XHWebImageAutoSizeCache() + +@property(nonatomic,strong)NSCache * memCache; +@property(nonnull,strong)NSFileManager *fileManager; + +@end +@implementation XHWebImageAutoSizeCache + ++(XHWebImageAutoSizeCache *)shardCache{ + static XHWebImageAutoSizeCache *instance = nil; + static dispatch_once_t oneToken; + dispatch_once(&oneToken,^{ + instance = [[XHWebImageAutoSizeCache alloc] init]; + }); + return instance; +} + +- (instancetype)init{ + self = [super init]; + if (self) { + self.memCache = [[NSCache alloc] init]; + self.fileManager = [NSFileManager defaultManager]; + } + return self; +} + +-(BOOL)storeImageSize:(UIImage *)image forKey:(NSString *)key{ + if(!image || !key) return NO; + CGSize imgSize = image.size; + NSDictionary *sizeDict = @{@"width":@(imgSize.width),@"height":@(imgSize.height)}; + NSData *data = [self dataFromDict:sizeDict]; + NSString *keyName = key.sizeKeyName; + [self.memCache setObject:data forKey:keyName]; + return [self.fileManager createFileAtPath:[self sizeCachePathForKey:keyName] contents:data attributes:nil]; + +} + +-(void)storeImageSize:(UIImage *)image forKey:(NSString *)key completed:(XHWebImageAutoSizeCacheCompletionBlock)completedBlock{ + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + BOOL result = [self storeImageSize:image forKey:key]; + dispatch_async(dispatch_get_main_queue(), ^{ + if(completedBlock){ + completedBlock(result); + } + }); + }); +} + +-(BOOL)storeReloadState:(BOOL)state forKey:(NSString *)key{ + if(!key) return NO; + NSString *stateString = @"0"; + if(state) stateString = @"1"; + NSDictionary *stateDict = @{@"reloadSate":stateString}; + NSData *data = [self dataFromDict:stateDict]; + NSString *keyName = key.reloadKeyName; + [self.memCache setObject:data forKey:keyName]; + return [self.fileManager createFileAtPath:[self reloadCachePathForKey:keyName] contents:data attributes:nil]; +} + +-(void)storeReloadState:(BOOL)state forKey:(NSString *)key completed:(XHWebImageAutoSizeCacheCompletionBlock)completedBlock{ + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + BOOL result = [self storeReloadState:state forKey:key]; + dispatch_async(dispatch_get_main_queue(), ^{ + if(completedBlock){ + completedBlock(result); + } + }); + }); +} + +-(CGSize)imageSizeFromCacheForKey:(NSString *)key{ + NSString *keyName = key.sizeKeyName; + NSData *data = [self dataFromMemCacheForKey:keyName]; + if(!data){ + data = [self dataFromDiskCacheForKey:keyName isSizeCache:YES]; + } + NSDictionary *sizeDict = [self dictFromData:data]; + CGFloat width = [sizeDict[@"width"] floatValue]; + CGFloat height = [sizeDict[@"height"] floatValue]; + CGSize size = CGSizeMake(width, height); + return size; +} + +-(BOOL)reloadStateFromCacheForKey:(NSString *)key{ + NSString *keyName = key.reloadKeyName; + NSData *data = [self dataFromMemCacheForKey:keyName]; + if(!data){ + data = [self dataFromDiskCacheForKey:keyName isSizeCache:NO]; + } + NSDictionary *reloadDict = [self dictFromData:data]; + NSInteger state = [reloadDict[@"reloadSate"] integerValue]; + if(state ==1) return YES; + return NO; +} + +#pragma mark - XHWebImageAutoSizeCache (private) +-(NSData *)dataFromMemCacheForKey:(NSString *)key{ + return [self.memCache objectForKey:key]; +} + +-(NSData *)dataFromDiskCacheForKey:(NSString *)key isSizeCache:(BOOL)isSizeCache{ + NSString *path = [self sizeCachePathForKey:key]; + if(!isSizeCache) path =[self reloadCachePathForKey:key]; + if ([self.fileManager fileExistsAtPath:path isDirectory:nil] == YES) { + return [self.fileManager contentsAtPath:path]; + } + return nil; +} + +-(NSData *)dataFromDict:(NSDictionary *)dict{ + if(dict==nil) return nil; + NSError *error; + NSData *data =[NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:&error]; + if (error) { + XHDebugLog(@"ERROR, faild to get json data"); + return nil; + } + return data; +} + +-(NSDictionary *)dictFromData:(NSData *)data{ + if(data==nil) return nil; + return [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; +} + +-(NSString *)sizeCachePathForKey:(NSString *)key{ + return [self cachePathForKey:key inPath:[self sizeCacheDirectory]]; +} + +-(NSString *)reloadCachePathForKey:(NSString *)key{ + return [self cachePathForKey:key inPath:[self reloadCacheDirectory]]; +} + +- (NSString *)cachePathForKey:(NSString *)key inPath:(NSString *)path { + [self checkDirectory:path]; + return [path stringByAppendingPathComponent:key]; +} + +-(NSString *)sizeCacheDirectory{ + return [[self baseCacheDirectory] stringByAppendingPathComponent:@"SizeCache"]; +} + +-(NSString *)reloadCacheDirectory{ + return [[self baseCacheDirectory] stringByAppendingPathComponent:@"ReloadCache"]; +} + +-(NSString *)baseCacheDirectory{ + NSString *pathOfLibrary = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) objectAtIndex:0]; + NSString *path = [pathOfLibrary stringByAppendingPathComponent:@"XHWebImageAutoSizeCache"]; + return path; + +} + +-(void)checkDirectory:(NSString *)path { + BOOL isDir; + if (![self.fileManager fileExistsAtPath:path isDirectory:&isDir]) { + [self createBaseDirectoryAtPath:path]; + } else { + if (!isDir) { + NSError *error = nil; + [self.fileManager removeItemAtPath:path error:&error]; + [self createBaseDirectoryAtPath:path]; + } + } +} + +- (void)createBaseDirectoryAtPath:(NSString *)path { + __autoreleasing NSError *error = nil; + [self.fileManager createDirectoryAtPath:path withIntermediateDirectories:YES + attributes:nil error:&error]; + if (error) { + XHDebugLog(@"create cache directory failed, error = %@", error); + } else { + + [self addDoNotBackupAttribute:path]; + } +} + +- (void)addDoNotBackupAttribute:(NSString *)path { + NSURL *url = [NSURL fileURLWithPath:path]; + NSError *error = nil; + [url setResourceValue:[NSNumber numberWithBool:YES] forKey:NSURLIsExcludedFromBackupKey error:&error]; + if (error) { + XHDebugLog(@"error to set do not backup attribute, error = %@", error); + } +} + +@end + diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/\345\233\276\347\211\207\345\212\240\350\275\275/XHWebImageAutoSizeConst.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/\345\233\276\347\211\207\345\212\240\350\275\275/XHWebImageAutoSizeConst.h" new file mode 100755 index 0000000000000000000000000000000000000000..be0a4cc211522a8fdb3895bbc0dba302f17b45cc --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/\345\233\276\347\211\207\345\212\240\350\275\275/XHWebImageAutoSizeConst.h" @@ -0,0 +1,19 @@ +// +// XHWebImageAutoSizeConst.h +// XHWebImageAutoSizeExample +// +// Created by zhuxiaohui on 2017/10/25. +// Copyright © 2017年 it7090.com. All rights reserved. +// https://github.com/CoderZhuXH/XHWebImageAutoSize + +#import + +// 过期提醒 +#define XHWebImageAutoSizeDeprecated(instead) NS_DEPRECATED(2_0, 2_0, 2_0, 2_0, instead) + +#ifdef DEBUG +#define XHDebugLog(...) NSLog(__VA_ARGS__) +#else +#define XHDebugLog(...) +#endif + diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/\345\233\276\347\211\207\345\212\240\350\275\275/XHWebImageAutoSizeConst.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/\345\233\276\347\211\207\345\212\240\350\275\275/XHWebImageAutoSizeConst.m" new file mode 100755 index 0000000000000000000000000000000000000000..2b7a5ca8c0859b3c17f68f0130f6f4afcfe3fa83 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/Cell/\345\233\276\347\211\207\345\212\240\350\275\275/XHWebImageAutoSizeConst.m" @@ -0,0 +1,11 @@ +// +// XHWebImageAutoSizeConst.m +// XHWebImageAutoSizeExample +// +// Created by zhuxiaohui on 2017/10/25. +// Copyright © 2017年 it7090.com. All rights reserved. +// https://github.com/CoderZhuXH/XHWebImageAutoSize + +#import "XHWebImageAutoSizeConst.h" + + diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/ConditionView.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/ConditionView.h" new file mode 100644 index 0000000000000000000000000000000000000000..c1852db9e0f72587f10bffb84759420b8ebcb15d --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/ConditionView.h" @@ -0,0 +1,25 @@ +// +// ConditionView.h +// JQ_ELOVE +// +// Created by Shmily on 16/7/11. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import + +@interface ConditionView : UIView + + +/** + * 姓名 手机号 单位名 + */ +@property (nonatomic, strong) UILabel *firstLB; +/** + * 用户输入的 + */ +@property (nonatomic, strong) UITextField *secondTF; +@property (nonatomic, strong) UILabel *lineLB; + + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/ConditionView.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/ConditionView.m" new file mode 100644 index 0000000000000000000000000000000000000000..6494b06be806f69e264b73551390c76d97a0a38a --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/ConditionView.m" @@ -0,0 +1,55 @@ +// +// ConditionView.m +// JQ_ELOVE +// +// Created by Shmily on 16/7/11. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "ConditionView.h" + +@implementation ConditionView + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + self.backgroundColor = [UIColor whiteColor]; + [self addSubview:self.firstLB]; + [self addSubview:self.secondTF]; + [self addSubview:self.lineLB]; + } + return self; +} + +- (UILabel *)firstLB +{ + if (!_firstLB) { + _firstLB = [[UILabel alloc]initWithFrame:CGRectMake(15, (self.height-30)/2,80, 30)]; + _firstLB.font = [UIFont systemFontOfSize:16]; + _firstLB.textColor = UIColorFromRGB(0x727272); + } + return _firstLB; +} + +- (UITextField *)secondTF +{ + if (!_secondTF) { + _secondTF = [[UITextField alloc]initWithFrame:CGRectMake(_firstLB.right+5, (self.height-30)/2,self.width-_firstLB.right-15, 30)]; + //_secondTF.backgroundColor = [UIColor orangeColor]; + _secondTF.font = [UIFont systemFontOfSize:16]; + } + return _secondTF; +} + +- (UILabel *)lineLB +{ + if (!_lineLB) { + _lineLB = [[UILabel alloc]initWithFrame:CGRectMake(15, self.height-0.5, KSCREEN_WIDTH-15, 0.5)]; + _lineLB.backgroundColor = LINECOLOUR; + } + return _lineLB; +} + + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/CordiaFooterView.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/CordiaFooterView.h" new file mode 100644 index 0000000000000000000000000000000000000000..280dfdfc5738c4e07dfa70e796853f1a8bde3474 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/CordiaFooterView.h" @@ -0,0 +1,37 @@ +// +// CordiaFooterView.h +// JQ_ELOVE +// +// Created by Shmily on 16/7/5. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import +@class ImageTextButton; +@interface CordiaFooterView : UIView + +/** + * 打招呼 + */ +@property (nonatomic, strong) ImageTextButton *leftBtn; + +/** + * 加关注 + */ +@property (nonatomic, strong) ImageTextButton *rightBtn; + +/** + * 分割线 + */ +@property (nonatomic, strong) UILabel *line_V; + + + +/** + * 分割线 + */ +@property (nonatomic, strong) UILabel *line_H; + + + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/CordiaFooterView.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/CordiaFooterView.m" new file mode 100644 index 0000000000000000000000000000000000000000..e8008eb007cb0642218f23b75da1352febc3c31b --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/CordiaFooterView.m" @@ -0,0 +1,64 @@ +// +// CordiaFooterView.m +// JQ_ELOVE +// +// Created by Shmily on 16/7/5. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "CordiaFooterView.h" +#import "ImageTextButton.h" + + +@interface CordiaFooterView () + + + +@end + + + +@implementation CordiaFooterView + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + [self addSubview:self.rightBtn]; + [self addSubview:self.leftBtn]; + [self addSubview:self.line_V]; +// [self addSubview:self.line_H]; + } + return self; +} + +- (ImageTextButton *)leftBtn +{ + if (!_leftBtn) { + _leftBtn = [[ImageTextButton alloc]initWithFrame:CGRectMake(_rightBtn.right, 0, self.width/2,self.height)]; + + } + return _leftBtn; +} + +- (ImageTextButton *)rightBtn +{ + if (!_rightBtn) { + _rightBtn = [[ImageTextButton alloc]initWithFrame:CGRectMake(0, 0, self.width/2,self.height)]; + } + return _rightBtn; +} + +- (UILabel *)line_V +{ + if (!_line_V) { + _line_V = [[UILabel alloc]initWithFrame:CGRectMake((self.width-0.5)/2, 4,0.5,self.height-8)]; + _line_V.backgroundColor = LINECOLOUR; + } + return _line_V; +} + + + + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/CordialNewTableViewCell.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/CordialNewTableViewCell.h" new file mode 100644 index 0000000000000000000000000000000000000000..c92673744d14f4d52a0e30d147c583314c3db5df --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/CordialNewTableViewCell.h" @@ -0,0 +1,47 @@ +// +// CordialNewTableViewCell.h +// JQ_ELOVE +// +// Created by chason on 16/7/28. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import +@class SexView,CordiaFooterView,CordiaModel,AvatarImageView; + +@interface CordialNewTableViewCell : UITableViewCell + +/** + * 背景图 + */ +@property (nonatomic, strong) UIView *bgView; +/** + * 昵称 + */ +@property (nonatomic, strong) UILabel *nikeLB; +/** + * 头像 + */ +@property (nonatomic, strong) AvatarImageView *headImageView; +/** + * 年龄/身高/学历 + */ +@property (nonatomic, strong) UILabel *informationLab; +/** + * 城市 + */ +@property (nonatomic, strong) UILabel *cityLab; +/** + * 距离 + */ +@property (nonatomic, strong) UILabel *photosNumLab; +/** + * 底部view + */ +@property (nonatomic, strong) CordiaFooterView *footerView; + +@property (nonatomic, strong) UILabel *line; + +@property (nonatomic,retain)CordiaModel *model; + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/CordialNewTableViewCell.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/CordialNewTableViewCell.m" new file mode 100644 index 0000000000000000000000000000000000000000..ae139405ed23eb39f251b7219122424f520bf701 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/CordialNewTableViewCell.m" @@ -0,0 +1,177 @@ +// +// CordialNewTableViewCell.m +// JQ_ELOVE +// +// Created by chason on 16/7/28. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "CordialNewTableViewCell.h" +#import "ItemImageBtn.h" +#import "CordiaFooterView.h" +#import "ImageTextButton.h" +#import "CordiaModel.h" +#import "AvatarImageView.h" + + +@implementation CordialNewTableViewCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier +{ + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + self.contentView.backgroundColor = UIColorFromRGB(0xf3f3f3); + [self.contentView addSubview:self.bgView]; + [self.bgView addSubview:self.headImageView]; + [self.bgView addSubview:self.nikeLB]; + [self.bgView addSubview:self.informationLab]; + [self.bgView addSubview:self.cityLab]; + [self.bgView addSubview:self.photosNumLab]; + [self.bgView addSubview:self.footerView]; + [self.bgView addSubview:self.line]; + } + return self; +} + +- (UIView *)bgView{ + if (!_bgView) { + _bgView = [[UIView alloc]initWithFrame:CGRectMake(0,0, KSCREEN_WIDTH, 145-10)]; + _bgView.backgroundColor = [UIColor whiteColor]; + //[_bgView setImageRoundRadius:6 BorderWidth:.5 borderColor:LINECOLOUR]; + } + return _bgView; +} + +- (AvatarImageView *)headImageView +{ + if (!_headImageView) { + _headImageView = [[AvatarImageView alloc]initWithFrame:CGRectMake(20,10,77,77)]; + + } + return _headImageView; +} + +- (UILabel *)nikeLB +{ + if (!_nikeLB) { + _nikeLB = [[UILabel alloc]initWithFrame:CGRectMake(_headImageView.right+12, _headImageView.top+5, _bgView.width-_headImageView.right-12-5, 20)]; + _nikeLB.textColor = UIColorFromRGB(0x2a2a2a); + _nikeLB.font = [UIFont systemFontOfSize:15]; + } + return _nikeLB; +} + +- (UILabel *)informationLab{ + if(!_informationLab){ + _informationLab = [[UILabel alloc]initWithFrame:CGRectMake(_headImageView.right+12, _nikeLB.bottom, _bgView.width-_headImageView.width-42, 30)]; + _informationLab.font = [UIFont systemFontOfSize:12]; + _informationLab.textColor = UIColorFromRGB(0x828282); + } + return _informationLab; +} + +- (UILabel *)cityLab{ + if(!_cityLab){ + _cityLab = [[UILabel alloc]initWithFrame:CGRectMake(_headImageView.right+12, _informationLab.bottom, _bgView.width-_headImageView.width-42, 20)]; + _cityLab.font = [UIFont systemFontOfSize:12]; + _cityLab.textColor = UIColorFromRGB(0x969696); + _cityLab.textAlignment = NSTextAlignmentCenter; + [_cityLab setImageRoundRadius:10 BorderWidth:1 borderColor:UIColorFromRGB(0xe3e3e3)]; + } + return _cityLab; +} + +- (UILabel *)photosNumLab{ + if(!_photosNumLab){ + _photosNumLab = [[UILabel alloc]initWithFrame:CGRectMake(_bgView.width-70, _headImageView.top+7.5, 60, 15)]; + _photosNumLab.textColor = UIColorFromRGB(0x696969); + _photosNumLab.font = [UIFont systemFontOfSize:11]; + _photosNumLab.textAlignment = NSTextAlignmentCenter; + _photosNumLab.backgroundColor = UIColorFromRGB(0xf3f3f3); + [_photosNumLab setImageRoundRadius:6 BorderWidth:0 borderColor:NULL]; + } + return _photosNumLab; +} + +- (CordiaFooterView *)footerView +{ + if (!_footerView) { + _footerView = [[CordiaFooterView alloc]initWithFrame:CGRectMake(0,_headImageView.bottom+10, _bgView.width,38)]; + _footerView.rightBtn.ImageView.image = [UIImage imageNamed:@"hi"]; + } + return _footerView; +} + +- (UILabel *)line{ + if (!_line) { + _line = [[UILabel alloc] initWithFrame:CGRectMake(0, _footerView.top-0.5, KSCREEN_WIDTH, 0.5)]; + _line.backgroundColor = LINECOLOUR; + } + return _line; +} + +- (void)setModel:(CordiaModel *)model +{ + _model = model; + [_headImageView setTitle:model.nickname imageUrl:model.avatar]; + + _nikeLB.text = model.nickname; + + NSString *age; + NSString *height; + NSString *degree; + if([model.age isEqualToString:@"0"]){ + age = @""; + }else{ + age = [NSString stringWithFormat:@"%@岁",model.age]; + } + if([model.height intValue]<=0 || !STR_IS_NOT_EMPTY(model.height)){ + height = @""; + }else{ + height = [NSString stringWithFormat:@"/%@cm",model.height]; + } + + if([model.degree isEqualToString:@"0"]){ + degree = @""; + }else{ + NSString *Ndegree = [NSString stringWithFormat:@"%.1f",[model.degree floatValue]]; + degree = [NSString stringWithFormat:@"/%@",[Ndegree stringDegreeByReplacingChinese]]; + } + _informationLab.text = [NSString stringWithFormat:@"%@%@%@",age,height,degree]; + _cityLab.text = model.localPlace; + CGFloat str_width = [model.localPlace calculateSize:CGSizeMake(_bgView.width-_headImageView.width-42-20, 20) font:12].width; + _cityLab.width = str_width+20; + if(!STR_IS_NOT_EMPTY(model.localPlace)){ + _cityLab.hidden = YES; + }else{ + _cityLab.hidden = NO; + } + + if([model.ifattention intValue] == 0){ + _footerView.leftBtn.countStr = @"加关注"; + }else if([model.ifattention intValue] == 1){ + _footerView.leftBtn.countStr = @"已关注"; + } + _footerView.rightBtn.countStr = @"去聊天"; + [_footerView.leftBtn setIfattention:model.ifattention]; + + CGFloat disWidth = [model.match calculateSize:CGSizeMake(60, 30) font:11].width+10; + _photosNumLab.left = _bgView.width-disWidth-10; + _photosNumLab.width = disWidth; + _photosNumLab.text = model.match; +} + + + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/DiscoverHeaderView.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/DiscoverHeaderView.h" new file mode 100644 index 0000000000000000000000000000000000000000..bc334596b20bd8428b4b4db2766cc4b1d67cbde5 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/DiscoverHeaderView.h" @@ -0,0 +1,35 @@ +// +// DiscoverHeaderView.h +// JQQY +// +// Created by chason on 2017/12/19. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import +#import "SDCycleScrollView.h" + +@interface DiscoverHeaderView : UIView + +@property (nonatomic, strong) UIView *bgView; +/** + 滚动广告 + */ +@property (nonatomic, retain) SDCycleScrollView *cycleScrollView; + +/** + 启缘资讯 + */ +@property (nonatomic, strong) UIButton *newsBtn; + +/** + 系统推荐 + */ +@property (nonatomic, strong) UIButton *recommendBtn; + +/** + 缘分测试 + */ +@property (nonatomic, strong) UIButton *testBtn; + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/DiscoverHeaderView.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/DiscoverHeaderView.m" new file mode 100644 index 0000000000000000000000000000000000000000..cf071572b07bdcf268d427a8e3df9eaba252c080 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/DiscoverHeaderView.m" @@ -0,0 +1,176 @@ +// +// DiscoverHeaderView.m +// JQQY +// +// Created by chason on 2017/12/19. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "DiscoverHeaderView.h" +#import "NewsListViewController.h" +#import "CordialViewController.h" +#import "ALLWebViewController.h" +#import "AdModel.h" +#import "EventDetailsViewController.h" + +#define BTN_WIDTH 60 +#define BTN_HEIGHT 60 + +@implementation DiscoverHeaderView + +- (instancetype)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + [self addSubview:self.bgView]; + [self.bgView addSubview:self.cycleScrollView]; + [self.bgView addSubview:self.newsBtn]; + [self.bgView addSubview:self.recommendBtn]; + [self.bgView addSubview:self.testBtn]; + } + return self; +} + +- (UIView *)bgView +{ + if (!_bgView) { + _bgView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH, KSCREEN_WIDTH/16*9+85)]; + _bgView.backgroundColor = [UIColor whiteColor]; + } + return _bgView; +} + +- (SDCycleScrollView *)cycleScrollView +{ + if (!_cycleScrollView) { + _cycleScrollView = [SDCycleScrollView cycleScrollViewWithFrame:CGRectMake(0,0,KSCREEN_WIDTH,KSCREEN_WIDTH/16*9) delegate:self placeholderImage:nil]; + _cycleScrollView.pageControlAliment = SDCycleScrollViewPageContolAlimentRight; + _cycleScrollView.currentPageDotColor = PURPLECOLOUR; // 自定义分页控件小圆标颜色 + } + return _cycleScrollView; +} + +- (UIButton *)newsBtn +{ + if (!_newsBtn) { + _newsBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _newsBtn.frame = CGRectMake((KSCREEN_WIDTH/3-BTN_WIDTH)/2, _cycleScrollView.bottom+10, BTN_WIDTH, BTN_HEIGHT); + [_newsBtn setTitleColor:MAIN_TEXTCOLOR forState:UIControlStateNormal]; + [_newsBtn setTitle:@"启缘资讯" forState:UIControlStateNormal]; +// [_newsBtn setBackgroundColor:[UIColor lightGrayColor]]; + [_newsBtn setImage:[UIImage imageNamed:@"qyzx"] forState:UIControlStateNormal]; + [_newsBtn setImageEdgeInsets:UIEdgeInsetsMake(-10, (_newsBtn.width-_newsBtn.currentImage.size.width)/2, (_newsBtn.height-_newsBtn.currentImage.size.height)/2-5, 0)]; + [_newsBtn setTitleEdgeInsets:UIEdgeInsetsMake(0, -_newsBtn.currentImage.size.width, -_newsBtn.currentImage.size.height-5, 0)]; + _newsBtn.titleLabel.adjustsFontSizeToFitWidth = YES; + _newsBtn.tag = 1; + [_newsBtn addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside]; + } + return _newsBtn; +} + +- (UIButton *)recommendBtn +{ + if (!_recommendBtn) { + _recommendBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _recommendBtn.frame = CGRectMake(KSCREEN_WIDTH/3+(KSCREEN_WIDTH/3-BTN_WIDTH)/2, _cycleScrollView.bottom+10, BTN_WIDTH, BTN_HEIGHT); + [_recommendBtn setTitleColor:MAIN_TEXTCOLOR forState:UIControlStateNormal]; + [_recommendBtn setTitle:@"系统推荐" forState:UIControlStateNormal]; +// [_recommendBtn setBackgroundColor:[UIColor lightGrayColor]]; + [_recommendBtn setImage:[UIImage imageNamed:@"xttj"] forState:UIControlStateNormal]; + [_recommendBtn setImageEdgeInsets:UIEdgeInsetsMake(-10, (_recommendBtn.width-_recommendBtn.currentImage.size.width)/2, (_recommendBtn.height-_recommendBtn.currentImage.size.height)/2-5, 0)]; + [_recommendBtn setTitleEdgeInsets:UIEdgeInsetsMake(0, -_recommendBtn.currentImage.size.width, -_recommendBtn.currentImage.size.height-5, 0)]; + _recommendBtn.titleLabel.adjustsFontSizeToFitWidth = YES; + _recommendBtn.tag = 2; + [_recommendBtn addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside]; + } + return _recommendBtn; +} + +- (UIButton *)testBtn +{ + if (!_testBtn) { + _testBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _testBtn.frame = CGRectMake(KSCREEN_WIDTH/3*2+(KSCREEN_WIDTH/3-BTN_WIDTH)/2, _cycleScrollView.bottom+10, BTN_WIDTH, BTN_HEIGHT); + [_testBtn setTitleColor:MAIN_TEXTCOLOR forState:UIControlStateNormal]; + [_testBtn setTitle:@"缘分测试" forState:UIControlStateNormal]; +// [_testBtn setBackgroundColor:[UIColor lightGrayColor]]; + [_testBtn setImage:[UIImage imageNamed:@"yfcs"] forState:UIControlStateNormal]; + [_testBtn setImageEdgeInsets:UIEdgeInsetsMake(-10, (_testBtn.width-_testBtn.currentImage.size.width)/2, (_testBtn.height-_testBtn.currentImage.size.height)/2-5, 0)]; + [_testBtn setTitleEdgeInsets:UIEdgeInsetsMake(0, -_testBtn.currentImage.size.width, -_testBtn.currentImage.size.height-5, 0)]; + _testBtn.titleLabel.adjustsFontSizeToFitWidth = YES; + _testBtn.tag = 3; + [_testBtn addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside]; + } + return _testBtn; +} + +- (void)btnClicked:(UIButton *)btn +{ + if (btn.tag == 1) { + NewsListViewController *newsListVC = (NewsListViewController *)[NewsAgent getRecomViewController:@"hnews-android-tag001"]; + [newsListVC setHidesBottomBarWhenPushed:YES]; +// NSDictionary *dict = @{@"background-color":@"#ffffff", +// @"font-color":@"#000000", +// @"font-size":@"17", +// @"select-font-color":@"#FF0000", +// @"select-line-color":@"#FF0000"}; +// [newsListVC setTitleStyleFromAPI:dict]; +// [newsListVC setDissRecomWbFrameHeight:64]; + [self.firstViewController.navigationController pushViewController:newsListVC animated:YES]; + + }else if (btn.tag == 2) { + if (!ISLOGIN) { + [self toLogin]; + return; + } + CordialViewController *recommendVC = [[CordialViewController alloc]init]; + recommendVC.name = @"系统推荐"; + [recommendVC setHidesBottomBarWhenPushed:YES]; + [self.firstViewController.navigationController pushViewController:recommendVC animated:YES]; + }else if (btn.tag == 3) { + if (!ISLOGIN) { + [self toLogin]; + return; + } + ALLWebViewController *allWebView = [[ALLWebViewController alloc]init]; + [allWebView setHidesBottomBarWhenPushed:YES]; + allWebView.titleName = @"缘分测试"; + allWebView.urlStr = [NSString stringWithFormat:@"%@%@?userid=%@",BASE_URL,URL_EMOTIONTEST,USER_USERID]; + [self.firstViewController.navigationController pushViewController:allWebView animated:YES]; + } +} + +- (void)toLogin +{ + [ZCTools goLoginSelf:self.firstViewController SeccessBlock:NULL]; +} + +#pragma mark - SDCycleScrollViewDelegate + +- (void)cycleScrollView:(SDCycleScrollView *)cycleScrollView didSelectItemAtIndex:(NSInteger)index +{ + AdModel *model = cycleScrollView.dataArray[index]; + + if ([model.type intValue] ==1) { //1活动 2链接 3会员 + EventDetailsViewController *eventDetailVC =[[EventDetailsViewController alloc]init]; + [eventDetailVC setHidesBottomBarWhenPushed:YES]; + eventDetailVC.aid = model.SkipID; + [self.firstViewController.navigationController pushViewController:eventDetailVC animated:YES]; + }else if ([model.type intValue]==3){ + if (!ISLOGIN) { + [self toLogin]; + return; + } + [ZCTools toPersonalHome:model.SkipID homeNickname:@"" homeSelf:self.firstViewController.navigationController]; + }else{ + ALLWebViewController *allWebView = [[ALLWebViewController alloc]init]; + [allWebView setHidesBottomBarWhenPushed:YES]; + allWebView.titleName = @"启缘"; + allWebView.urlStr = model.skipURL; + [self.firstViewController.navigationController pushViewController:allWebView animated:YES]; + } + NSLog(@"---点击了第%ld张图片", (long)index); + +} + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/EventDetailView.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/EventDetailView.h" new file mode 100644 index 0000000000000000000000000000000000000000..8d7ae6aa41c19654b6229d16eee66f9bc49fa58b --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/EventDetailView.h" @@ -0,0 +1,23 @@ +// +// EventDetailView.h +// JQ_ELOVE +// +// Created by Shmily on 16/10/25. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import + +@interface EventDetailView : UIView + +@property (nonatomic,retain)UIImageView *iconView; +@property (nonatomic,retain)UILabel *itemLabel; +@property (nonatomic,retain)UIImageView *nextView; +@property (nonatomic,retain)UILabel *lineLB; +@property (nonatomic,retain)UILabel *uplineLB; + + +- (void)setNewDetailAction; + + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/EventDetailView.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/EventDetailView.m" new file mode 100644 index 0000000000000000000000000000000000000000..cf94801eda40d14ecf3292a9763407ad00a0336e --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/EventDetailView.m" @@ -0,0 +1,114 @@ +// +// EventDetailView.m +// JQ_ELOVE +// +// Created by Shmily on 16/10/25. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "EventDetailView.h" +#import "NearbyPlaceViewController.h" +#import "UIView+FirstViewController.h" + +@implementation EventDetailView + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + [self addSubview:self.iconView]; + [self addSubview:self.itemLabel]; + [self addSubview:self.nextView]; + [self addSubview:self.lineLB]; + [self addSubview:self.uplineLB]; + } + return self; +} + +- (UIImageView *)iconView +{ + if (!_iconView) { + _iconView = [[UIImageView alloc]initWithFrame:CGRectMake(20,(self.height-22)/2, 22, 22)]; + } + return _iconView; +} + +- (UILabel *)itemLabel +{ + if (!_itemLabel) { + _itemLabel = [[UILabel alloc]initWithFrame:CGRectMake(_iconView.right+7,(self.height-15)/2,KSCREEN_WIDTH-81,15)]; + _itemLabel.font = [UIFont systemFontOfSize:14]; + _itemLabel.text = @"12"; + } + return _itemLabel; +} + +- (UIImageView *)nextView +{ + if (!_nextView) { + _nextView = [[UIImageView alloc]initWithFrame:CGRectMake(KSCREEN_WIDTH-20-12,(self.height-12)/2, 12, 12)]; + _nextView.image = [UIImage imageNamed:@"Arrow-pointing"]; + } + return _nextView; +} + +- (UILabel *)lineLB +{ + if (!_lineLB) { + _lineLB = [[UILabel alloc]initWithFrame:CGRectMake(20,self.height-0.5, self.width-40, 0.5)]; + _lineLB.backgroundColor = LINECOLOUR; + } + return _lineLB; +} + +- (UILabel *)uplineLB +{ + if (!_uplineLB) { + _uplineLB = [[UILabel alloc]initWithFrame:CGRectMake(0,0, self.width, 0.5)]; + _uplineLB.backgroundColor = LINECOLOUR; + _uplineLB.hidden = YES; + } + return _uplineLB; +} + +#pragma mark - **************** 社区,发布地理位置信息 + + +- (void)setNewDetailAction +{ + self.backgroundColor = [UIColor whiteColor]; + self.lineLB.hidden = YES; + self.itemLabel.text = @"所在位置"; + self.iconView.image = [UIImage imageNamed:@"SDS-dd"]; + self.iconView.frame = CGRectMake(15, (self.height-17)/2, 13, 17); + self.itemLabel.frame = CGRectMake(_iconView.right+10, 0, KSCREEN_WIDTH-15-13-10-10-12-15, 44); + self.itemLabel.textColor = UIColorFromRGB(0x595959); + self.itemLabel.font = [UIFont systemFontOfSize:15]; + self.nextView.frame = CGRectMake(KSCREEN_WIDTH-25,(self.height-12)/2, 12, 12); + + + UITapGestureRecognizer *areaTap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(selectArea)]; + [self addGestureRecognizer:areaTap]; + +} + +- (void)selectArea{ + NearbyPlaceViewController *nearbyPlaceVC = [[NearbyPlaceViewController alloc] init]; + [self.firstViewController.navigationController pushViewController:nearbyPlaceVC animated:YES]; + [nearbyPlaceVC setAddLocation:^(NSString *location){ + self.itemLabel.text = location; + }]; +} + + + + +/* +// 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/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/ImgTextImg.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/ImgTextImg.h" new file mode 100644 index 0000000000000000000000000000000000000000..19a0748bf7f5714fbece5eab00383d98e0079d54 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/ImgTextImg.h" @@ -0,0 +1,17 @@ +// +// ImgTextImg.h +// JQQY +// +// Created by chason on 2017/12/26. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import + +@interface ImgTextImg : UIView + +@property (nonatomic, strong) UIImageView *leftImg; +@property (nonatomic, strong) UIImageView *rightImg; +@property (nonatomic, strong) UILabel *textLab; + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/ImgTextImg.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/ImgTextImg.m" new file mode 100644 index 0000000000000000000000000000000000000000..7b1c4c0f93fa870655cf35f073f7a5b8a22f5082 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/ImgTextImg.m" @@ -0,0 +1,54 @@ +// +// ImgTextImg.m +// JQQY +// +// Created by chason on 2017/12/26. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "ImgTextImg.h" + +@implementation ImgTextImg + + - (instancetype)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + [self addSubview:self.leftImg]; + [self addSubview:self.textLab]; + [self addSubview:self.rightImg]; + } + return self; +} + +- (UIImageView *)leftImg +{ + if (!_leftImg) { + _leftImg = [[UIImageView alloc] initWithFrame:CGRectMake(15, (self.height-17)/2, 13, 17)]; +// _leftImg.backgroundColor = [UIColor greenColor]; + } + return _leftImg; +} + +- (UILabel *)textLab +{ + if (!_textLab) { + _textLab = [[UILabel alloc] initWithFrame:CGRectMake(_leftImg.right+7, (self.height-20)/2, self.width-70, 20)]; +// _textLab.backgroundColor = [UIColor orangeColor]; + _textLab.font = SYSTEMFONT(14); + _textLab.textColor = MAIN_TEXTCOLOR; + } + return _textLab; +} + +- (UIImageView *)rightImg +{ + if (!_rightImg) { + _rightImg = [[UIImageView alloc] initWithFrame:CGRectMake(_textLab.right, (self.height-12)/2, 12, 12)]; +// _rightImg.backgroundColor = [UIColor greenColor]; + _rightImg.image = [UIImage imageNamed:@"Arrow-pointing"]; + } + return _rightImg; +} + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/ItemImageBtn.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/ItemImageBtn.h" new file mode 100644 index 0000000000000000000000000000000000000000..a2c4d2718692df7bf9bc6a839e2f7319f3a4c9fb --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/ItemImageBtn.h" @@ -0,0 +1,29 @@ +// +// ItemImageBtn.h +// JQ_ELOVE +// +// Created by Shmily on 16/6/7. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import +#import "AvatarImageView.h" + +@interface ItemImageBtn : UIButton + +/** + *头像 + */ +@property (nonatomic, strong) AvatarImageView *headImage; + +/** + * 认证图 + */ +@property (nonatomic, strong) UIImageView *certificateIV; + + + +@property (nonatomic, strong) UIImageView *showBigIV; + + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/ItemImageBtn.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/ItemImageBtn.m" new file mode 100644 index 0000000000000000000000000000000000000000..14e72e383b463c67f5a876b3a2ee9efc3b62e241 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/ItemImageBtn.m" @@ -0,0 +1,68 @@ +// +// ItemImageBtn.m +// JQ_ELOVE +// +// Created by Shmily on 16/6/7. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "ItemImageBtn.h" + +@implementation ItemImageBtn + + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + [self addSubview:self.headImage]; + [self addSubview:self.certificateIV]; + } + return self; +} + +- (AvatarImageView *)headImage +{ + if (!_headImage) { + _headImage = [[AvatarImageView alloc]initWithFrame:CGRectMake(0,0, self.height,self.height)]; + [_headImage addSubview:self.showBigIV]; +// [_headImage setContentScaleFactor:[[UIScreen mainScreen] scale]]; +// _headImage.contentMode = UIViewContentModeScaleAspectFill; +// _headImage.clipsToBounds = YES; + + } + return _headImage; +} + + +- (UIImageView *)showBigIV +{ + if (!_showBigIV) { + _showBigIV = [[UIImageView alloc]initWithFrame:CGRectMake(0,0,40,40)]; + _showBigIV.hidden = YES; + _showBigIV.center = _headImage.center; + } + return _showBigIV; +} + + + +- (UIImageView *)certificateIV +{ + if (!_certificateIV) { + _certificateIV = [[UIImageView alloc]initWithFrame:CGRectMake(_headImage.right-20, _headImage.bottom-20, 20, 20)]; + _certificateIV.hidden = YES; + } + return _certificateIV; +} + + +/* +// 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/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/LikeAndCommentBtnView.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/LikeAndCommentBtnView.h" new file mode 100644 index 0000000000000000000000000000000000000000..2f3fe27faea013ff7daf53ea6c809437a6e68b63 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/LikeAndCommentBtnView.h" @@ -0,0 +1,23 @@ +// +// LikeAndCommentBtnView.h +// JQ_ELOVE +// +// Created by chason on 2017/5/12. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import + +@interface LikeAndCommentBtnView : UIView + +//赞按钮 +@property (nonatomic, strong) UIButton *likeBtn; +//评论按钮 +@property (nonatomic, strong) UIButton *commentBtn; +//分割线 +@property (nonatomic, strong) UILabel *line; + +@property (nonatomic, copy) void (^likeButtonClickedOperation)(); +@property (nonatomic, copy) void (^commentButtonClickedOperation)(); + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/LikeAndCommentBtnView.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/LikeAndCommentBtnView.m" new file mode 100644 index 0000000000000000000000000000000000000000..0f5b6fe05386eeac2354c293a946429751b1ba66 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/LikeAndCommentBtnView.m" @@ -0,0 +1,71 @@ +// +// LikeAndCommentBtnView.m +// JQ_ELOVE +// +// Created by chason on 2017/5/12. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import "LikeAndCommentBtnView.h" + +@implementation LikeAndCommentBtnView + +- (instancetype)initWithFrame:(CGRect)frame{ + self = [super initWithFrame:frame]; + if (self) { + [self addSubview:self.likeBtn]; + [self addSubview:self.line]; + [self addSubview:self.commentBtn]; + } + return self; +} + +- (UIButton *)likeBtn{ + if (!_likeBtn) { + _likeBtn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, (160-0.5)/2, 25)]; + [_likeBtn setTitleColor:UIColorFromRGB(0x595959) forState:UIControlStateNormal]; + [_likeBtn setTitle:@"赞" forState:UIControlStateNormal]; + [_likeBtn setImage:[UIImage imageNamed:@"PYQ-dz"] forState:UIControlStateNormal]; + _likeBtn.titleLabel.font = [UIFont systemFontOfSize:13]; + [_likeBtn setTitleEdgeInsets:UIEdgeInsetsMake(0, 0, 0, -20)]; + [_likeBtn addTarget:self action:@selector(likeButtonClicked) forControlEvents:UIControlEventTouchUpInside]; + } + return _likeBtn; +} + +- (UILabel *)line{ + if (!_line) { + _line = [[UILabel alloc] initWithFrame:CGRectMake(_likeBtn.right, (25-15)/2, 0.5, 15)]; + _line.backgroundColor =UIColorFromRGB(0x595959); + } + return _line; +} + +- (UIButton *)commentBtn{ + if (!_commentBtn) { + _commentBtn = [[UIButton alloc] initWithFrame:CGRectMake(_line.right, 0, (160-0.5)/2, 25)]; + [_commentBtn setTitleColor:UIColorFromRGB(0x595959) forState:UIControlStateNormal]; + [_commentBtn setTitle:@"评论" forState:UIControlStateNormal]; + [_commentBtn setImage:[UIImage imageNamed:@"PYQ-pl"] forState:UIControlStateNormal]; + _commentBtn.titleLabel.font = [UIFont systemFontOfSize:13]; + [_commentBtn setTitleEdgeInsets:UIEdgeInsetsMake(0, 0, 0, -10)]; + [_commentBtn addTarget:self action:@selector(commentButtonClicked) forControlEvents:UIControlEventTouchUpInside]; + } + return _commentBtn; +} + +- (void)likeButtonClicked +{ + if (self.likeButtonClickedOperation) { + self.likeButtonClickedOperation(); + } +} + +- (void)commentButtonClicked +{ + if (self.commentButtonClickedOperation) { + self.commentButtonClickedOperation(); + } +} + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/MyPeopleCell.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/MyPeopleCell.h" new file mode 100644 index 0000000000000000000000000000000000000000..ea2d1495e7004f8115740ebad7fce923e159d71d --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/MyPeopleCell.h" @@ -0,0 +1,20 @@ +// +// MyPeopleCell.h +// JQ_ELOVE +// +// Created by chason on 2017/3/10. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import +@class AvatarImageView,FriendModel; +@interface MyPeopleCell : UITableViewCell + +@property (nonatomic, strong) AvatarImageView *avatarView; +@property (nonatomic, strong) UILabel *nicknameLab; +@property (nonatomic, strong) UILabel *textLab; +@property (nonatomic, strong) UILabel *line; + +@property (nonatomic, strong) FriendModel *model; + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/MyPeopleCell.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/MyPeopleCell.m" new file mode 100644 index 0000000000000000000000000000000000000000..bdd643fba9a63d49ed04ea2249c693dcfb8ee5b5 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/MyPeopleCell.m" @@ -0,0 +1,89 @@ +// +// MyPeopleCell.m +// JQ_ELOVE +// +// Created by chason on 2017/3/10. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import "MyPeopleCell.h" +#import "AvatarImageView.h" +#import "FriendModel.h" + +@implementation MyPeopleCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{ + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + [self addSubview:self.avatarView]; + [self addSubview:self.nicknameLab]; + [self addSubview:self.textLab]; + [self addSubview:self.line]; + } + return self; +} + +- (AvatarImageView *)avatarView{ + if (!_avatarView) { + _avatarView = [[AvatarImageView alloc] initWithFrame:CGRectMake(15, 10, 40, 40)]; + _avatarView.userInteractionEnabled = YES; + + UITapGestureRecognizer *tp = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(gotoUserHome)]; + [_avatarView addGestureRecognizer:tp]; + } + return _avatarView; +} + +- (UILabel *)nicknameLab{ + if (!_nicknameLab) { + _nicknameLab = [[UILabel alloc] initWithFrame:CGRectMake(_avatarView.right+10, _avatarView.top, KSCREEN_WIDTH-70, 20)]; + _nicknameLab.adjustsFontSizeToFitWidth = YES; + _nicknameLab.font = [UIFont systemFontOfSize:15]; + _nicknameLab.textColor = UIColorFromRGB(0x595959); + _nicknameLab.text = @"昵称"; + } + return _nicknameLab; +} + +- (UILabel *)textLab{ + if (!_textLab) { + _textLab = [[UILabel alloc] initWithFrame:CGRectMake(_avatarView.right+10, _nicknameLab.bottom, KSCREEN_WIDTH-70, 20)]; + _textLab.font = [UIFont systemFontOfSize:12]; + _textLab.textColor = UIColorFromRGB(0x9f9f9f); + _textLab.text = @"个性签名"; + } + return _textLab; +} + +- (UILabel *)line{ + if (!_line) { + _line = [[UILabel alloc] initWithFrame:CGRectMake(15, 59.5, KSCREEN_WIDTH-15, 0.5)]; + _line.backgroundColor = LINECOLOUR; + } + return _line; +} +-(void)setModel:(FriendModel *)model{ + _model = model; + _nicknameLab.text = model.nickname; + _textLab.text = model.declaration; + [_avatarView setTitle:model.nickname imageUrl:model.avatar]; +} + +- (void)gotoUserHome +{ + [ZCTools toPersonalHome:_model.userID homeNickname:_model.nickname homeSelf:self.firstViewController]; +} + + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/PicImageVIew.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/PicImageVIew.h" new file mode 100644 index 0000000000000000000000000000000000000000..acfcee32b9854bd271d7383531ab3b3b5c80167d --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/PicImageVIew.h" @@ -0,0 +1,20 @@ +// +// PicImageVIew.h +// JQ_ELOVE +// +// Created by Shmily on 2017/5/11. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import + +@interface PicImageVIew : UIButton + +@property (nonatomic,retain)UIImageView *bgIV; + +@property (nonatomic,assign)NSInteger type; //0 add 1图片 2视频 +@property (nonatomic,assign)NSInteger index; + + + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/PicImageVIew.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/PicImageVIew.m" new file mode 100644 index 0000000000000000000000000000000000000000..15917adb4ee7e5c0636db5a1cdceba39b176fb85 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/PicImageVIew.m" @@ -0,0 +1,43 @@ +// +// PicImageVIew.m +// JQ_ELOVE +// +// Created by Shmily on 2017/5/11. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import "PicImageVIew.h" + +@implementation PicImageVIew + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + [self addSubview:self.bgIV]; + } + return self; +} + + +- (UIImageView *)bgIV +{ + if (!_bgIV) { + _bgIV = [[UIImageView alloc]initWithFrame:self.bounds]; + [_bgIV setContentScaleFactor:[[UIScreen mainScreen] scale]]; + _bgIV.contentMode = UIViewContentModeScaleAspectFill; + _bgIV.clipsToBounds = YES; + + } + return _bgIV; +} + +/* +// 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/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/PicturesView.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/PicturesView.h" new file mode 100644 index 0000000000000000000000000000000000000000..b6ca02d8e7e8f7dfcefd1fb18c552d99af481887 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/PicturesView.h" @@ -0,0 +1,15 @@ +// +// PicturesView.h +// JQQY +// +// Created by chason on 2017/12/27. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import + +@interface PicturesView : UIView + +-(void)getMediablock:(void (^)(NSMutableArray *mediaArray))block; + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/PicturesView.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/PicturesView.m" new file mode 100644 index 0000000000000000000000000000000000000000..23ff5178d827eab5535aca9a7092e751b125f5f9 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/PicturesView.m" @@ -0,0 +1,255 @@ +// +// PicturesView.m +// JQQY +// +// Created by chason on 2017/12/27. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "PicturesView.h" +#import "ShowBigViewCell.h" +#import +#import "ShowBigIVViewController.h" +#import "CameraManager.h" +#import "ZCAlertController.h" +@interface PicturesView() +{ + NSInteger photoNum; + BOOL mediaType; +} +@property (nonatomic,retain)NSMutableArray *pictureArray; +@property (nonatomic,retain)UITableView *pictureTableView; +@property (nonatomic,retain)CameraManager *camer; + +@end + +@implementation PicturesView + +- (instancetype)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + [self.pictureTableView registerClass:[ShowBigViewCell class] forCellReuseIdentifier:@"ShowSmallViewCell"]; + [self creatNewPic:self.pictureArray]; + } + return self; +} + +- (CameraManager *)camer +{ + if (!_camer) { + _camer = [[CameraManager alloc]initWithVC:self.firstViewController andShowType:2]; + + __weak typeof(self) weakSelf = self; + [_camer setImageBlock:^(NSArray *imageArray) { + + [weakSelf.pictureArray removeLastObject]; + for (UIImage *img in imageArray) { + NSDictionary *imageInfno = @{@"image":img, + @"type":@"1"}; //0 add 1图片 2视频 + [weakSelf.pictureArray addObject:imageInfno]; + } + [weakSelf creatNewPic:weakSelf.pictureArray]; + }]; + } + return _camer; +} + + +- (NSMutableArray *)pictureArray +{ + if (!_pictureArray) { + _pictureArray = [NSMutableArray arrayWithCapacity:0]; + } + return _pictureArray; +} + +- (UITableView *)pictureTableView +{ + if (!_pictureTableView) { + _pictureTableView = [[UITableView alloc]initWithFrame:CGRectZero style:UITableViewStylePlain]; + _pictureTableView.dataSource = self; + _pictureTableView.delegate =self; + _pictureTableView.separatorStyle = 0; + _pictureTableView.frame = CGRectMake((self.width-self.height)/2, (self.height-self.width)/2, self.height, self.width); + _pictureTableView.transform = CGAffineTransformMakeRotation(-M_PI/2); + _pictureTableView.alwaysBounceVertical = NO; +// _pictureTableView.backgroundColor = [UIColor greenColor]; + [self addSubview:_pictureTableView]; + } + return _pictureTableView; +} + +-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + return self.width/4; +} + +-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + return _pictureArray.count; +} + +-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + ShowBigViewCell *testCell = [tableView dequeueReusableCellWithIdentifier:@"ShowSmallViewCell"]; + testCell.selectionStyle =0; + + NSDictionary *data = _pictureArray[indexPath.row]; + testCell.bgImageVIew.image = data[@"image"]; + if (CGAffineTransformEqualToTransform(testCell.contentView.transform, CGAffineTransformIdentity)) + { + testCell.contentView.frame = CGRectMake((self.width-self.height)/2, (self.height-self.width)/2,testCell.height, testCell.width); + testCell.contentView.transform = CGAffineTransformMakeRotation(M_PI/2.0); + } + return testCell; +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + NSDictionary *data = _pictureArray[indexPath.row]; + switch ([data[@"type"] intValue]) { + case 0: ////0 add 1图片 2视频 + [self showSheetView]; + break; + case 1: + [self showAllPictures:indexPath.row]; + break; + case 2: + [self showAllPictures:10086]; + break; + default: + break; + } +} + +- (void)creatNewPic:(NSArray *)imageArray +{ + if (imageArray) { + photoNum = self.pictureArray.count; + if (imageArray.count<4 && !mediaType) { + NSDictionary *imageInfno = @{ + @"image":[UIImage imageNamed:@"add_image"], + @"type":@"0", + }; + [self.pictureArray addObject:imageInfno]; + photoNum = self.pictureArray.count-1; + } + } + [self.pictureTableView reloadData]; +} + +- (void)showSheetView +{ + NSDictionary *dict = [_pictureArray firstObject]; + if ([dict[@"type"] intValue]) { + ZCAlertController *alertController = [ZCAlertController initZCAlertControllerWithTitle:nil message:nil style:@"0" titleArray:@[@"相册", @"拍照"] alertAction:^(NSInteger index) { + if (index == 0) { + NSLog(@"相册"); + [self.camer startPhoto:4-photoNum]; + }else if (index == 1) { + NSLog(@"拍照"); + [self.camer startCamera]; + } + }]; + [alertController showZCAlert]; + }else{ + ZCAlertController *alertController = [ZCAlertController initZCAlertControllerWithTitle:nil message:nil style:@"0" titleArray:@[@"相册", @"拍照", @"录制视频"] alertAction:^(NSInteger index) { + if (index == 0) { + NSLog(@"相册"); + [self.camer startPhoto:4-photoNum]; + }else if (index == 1) { + NSLog(@"拍照"); + [self.camer startCamera]; + }else if (index == 2) { + NSLog(@"录制视频"); + NSDictionary *dict = [_pictureArray firstObject]; + if ([dict[@"type"] intValue]) { + return; + } + [ZCTools AliyunVideoSelf:self.firstViewController]; + [AliyunVideoBase shared].delegate = self; + } + }]; + [alertController showZCAlert]; + } +} + +- (void)showAllPictures:(NSInteger)index +{ + ShowBigIVViewController *showView = [[ShowBigIVViewController alloc]init]; + showView.bigImageArray = _pictureArray; + showView.delegate = self; + showView.mediaType = mediaType; + [self.firstViewController.navigationController pushViewController:showView animated:YES]; +} +//移除 一个 +- (void)removePicIndex:(NSInteger)index +{ + if (photoNum!=4) { + [self.pictureArray removeLastObject]; + } + if (mediaType) { + [self.pictureArray removeAllObjects]; + mediaType = NO; + }else{ + [self.pictureArray removeObjectAtIndex:(int)index]; + } + [self creatNewPic:self.pictureArray]; +} + +#pragma mark - 获取视频路径 + +-(void)videoBaseRecordVideoExit { + if ([self.firstViewController respondsToSelector:@selector(dismissViewControllerAnimated:completion:)]) { + [self.firstViewController dismissViewControllerAnimated:YES completion:NULL]; + } else if ([self.firstViewController.navigationController respondsToSelector:@selector(popViewControllerAnimated:)]) { + [self.firstViewController.navigationController popViewControllerAnimated:YES]; + } +} + +- (void)videoBase:(AliyunVideoBase *)base recordCompeleteWithRecordViewController:(UIViewController *)recordVC videoPath:(NSString *)videoPath { + NSLog(@"录制完成 %@", videoPath); + if (STR_IS_NOT_EMPTY(videoPath)) { + [MBProgressHUD showMessag:nil toView:self]; + mediaType = YES; + [self.pictureArray removeAllObjects]; + + NSData *imageData = UIImageJPEGRepresentation([self getVideoPreViewImage:videoPath], 0.8); + NSString *videoimg = [imageData base64EncodedStringWithOptions:0]; + + NSDictionary *imageInfno = @{@"image":[self getVideoPreViewImage:videoPath], + @"path":videoPath, + @"type":@"2",//0 add 1图片 2视频 + @"videoimg":videoimg}; + [self.pictureArray addObject:imageInfno]; + [self creatNewPic:_pictureArray]; + } + [self.firstViewController dismissViewControllerAnimated:NO completion:^{ + [MBProgressHUD hideHUDForView:self animated:YES]; + }]; +} + + + +#pragma mark - 获取视频第一帧图片 +- (UIImage*) getVideoPreViewImage:(NSString *)videoPath +{ + AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:[NSURL fileURLWithPath:videoPath] options:nil]; + AVAssetImageGenerator *gen = [[AVAssetImageGenerator alloc] initWithAsset:asset]; + gen.appliesPreferredTrackTransform = YES; + CMTime time = CMTimeMakeWithSeconds(0.0, 600); + NSError *error = nil; + CMTime actualTime; + CGImageRef image = [gen copyCGImageAtTime:time actualTime:&actualTime error:&error]; + UIImage *img = [[UIImage alloc] initWithCGImage:image]; + CGImageRelease(image); + return img; +} + +- (void)getMediablock:(void (^)(NSMutableArray *mediaArray))block +{ + block(self.pictureArray); +} + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/PlayVideoView.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/PlayVideoView.h" new file mode 100644 index 0000000000000000000000000000000000000000..22314990e7d6d5e5738e9724e897efe6c120d0e8 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/PlayVideoView.h" @@ -0,0 +1,19 @@ +// +// PlayVideoView.h +// JQ_ELOVE +// +// Created by chason on 2017/5/16. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import + +@interface PlayVideoView : UIView + +@property (nonatomic, copy) NSString *videoUrl; + +@property (nonatomic, weak) UIView *sourceVideoContainerView; + +- (void)show; + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/PlayVideoView.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/PlayVideoView.m" new file mode 100644 index 0000000000000000000000000000000000000000..288a47bf1fd61e47433b4bb979127ca472179ac8 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/PlayVideoView.m" @@ -0,0 +1,172 @@ +// +// PlayVideoView.m +// JQ_ELOVE +// +// Created by chason on 2017/5/16. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import "PlayVideoView.h" +//#import "TapGestureRecognizer.h" +#import + +@interface PlayVideoView () + +@property (nonatomic, strong) UIView *sourceView; +@property (nonatomic, assign) CGRect rect; + +@property (nonatomic, strong) AVPlayer *player; +@property (nonatomic, strong) AVPlayerLayer *playerLayer; +@property (nonatomic, strong) AVPlayerItem *playerItem; + +@end + +@implementation PlayVideoView + +- (id)initWithFrame:(CGRect)frame{ + self = [super initWithFrame:frame]; + if (self) { + self.userInteractionEnabled = YES; + self.backgroundColor = [UIColor clearColor]; + + UITapGestureRecognizer *tgr = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(playVideoViewClicked)]; + [self addGestureRecognizer:tgr]; + } + return self; +} + +- (void)show{ +// NSLog(@"视频地址:%@",_videoUrl); + UIWindow *window = [UIApplication sharedApplication].keyWindow; + _sourceView = self.sourceVideoContainerView.subviews[0]; + _rect = [self.sourceVideoContainerView convertRect:_sourceView.frame toView:self]; + self.frame = _rect; + [window addSubview:self]; + + [UIView animateWithDuration:0.4f animations:^{ + self.frame = window.bounds; + self.backgroundColor = [UIColor blackColor]; +// [JQTool showActionProgressHasMask:NO]; + } completion:^(BOOL finished) { + [self addAVPlayer]; + }]; +} + +- (void)playVideoViewClicked{ +// [JQTool hiddenProgress]; + [UIView animateWithDuration:0.4f animations:^{ + self.frame = _rect; + _playerLayer .frame = _rect; + _playerLayer.hidden = YES; + self.backgroundColor = [UIColor clearColor]; + } completion:^(BOOL finished) { + [self removeFromSuperview]; + }]; +} + +- (void)addAVPlayer{ + AVAsset *movieAsset = [AVURLAsset URLAssetWithURL:[NSURL URLWithString:_videoUrl] options:nil]; + _playerItem = [AVPlayerItem playerItemWithAsset:movieAsset]; + _playerItem.audioMix = 0; + _player = [AVPlayer playerWithPlayerItem:_playerItem]; + _playerLayer = [AVPlayerLayer playerLayerWithPlayer:_player]; + _playerLayer.frame = CGRectMake(0, (KSCREEN_HEIGHT-KSCREEN_WIDTH)/2, KSCREEN_WIDTH, KSCREEN_WIDTH); + _playerLayer.videoGravity = AVLayerVideoGravityResizeAspect; + [self.layer addSublayer:_playerLayer]; + //监测视频状态 + [_player.currentItem addObserver:self + forKeyPath:@"status" + options:NSKeyValueObservingOptionNew + context:nil]; + //监测视频缓冲 + [_playerItem addObserver:self + forKeyPath:@"loadedTimeRanges" + options:NSKeyValueObservingOptionNew + context:nil]; + //添加视频播放结束通知 + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(moviePlayDidEnd:) + name:AVPlayerItemDidPlayToEndTimeNotification + object:self.player.currentItem]; + //添加视频异常中断通知 + [[NSNotificationCenter defaultCenter]addObserver:self + selector:@selector(moviePlayInterrupt:) + name:AVPlayerItemPlaybackStalledNotification + object:self.player.currentItem]; + //添加进入后台通知 + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(enterBcakground:) + name:UIApplicationWillResignActiveNotification + object:nil]; + //添加返回前台通知 + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(enterPlayGround:) + name:UIApplicationDidBecomeActiveNotification + object:nil]; +} + +- (void)moviePlayDidEnd:(NSNotification *)notification{ + // 播放完成后跳到最新的时间点开始播放 + [_player seekToTime:CMTimeMake(0, 1)]; + [_player play]; +} + +- (void)moviePlayInterrupt:(NSNotification *)notification{ + //异常中断,重新播放 + NSLog(@"异常中断,重新播放"); + [_player play]; +} + +- (void)enterBcakground:(NSNotification *)notification{ + //进入后台,视频暂停 + NSLog(@"进入后台,视频暂停"); + [_player pause]; +} + +- (void)enterPlayGround:(NSNotification *)notification{ + //返回前台,视频继续播放 + NSLog(@"返回前台,视频继续播放"); + [_player play]; +} +//监测 +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{ + if ([keyPath isEqualToString:@"status"]) { + AVPlayerItem *playerItem = (AVPlayerItem*)object; + switch (playerItem.status) { + case AVPlayerItemStatusReadyToPlay: + { + [_player play]; + break; + } + case AVPlayerItemStatusUnknown: + { + NSLog(@"AVPlayerItemStatusUnknown"); + + break; + } + case AVPlayerItemStatusFailed: + { + NSLog(@"AVPlayerItemStatusFailed"); + NSLog(@"%@",_playerItem.error); + break; + } + default: + break; + } + }else if ([keyPath isEqualToString:@"loadedTimeRanges"]) { +// [JQTool hiddenProgress]; + } +} + +- (void)dealloc{ +// [JQTool hiddenProgress]; + [_player pause]; + //释放对视频状态的监测 + [self.player.currentItem removeObserver:self forKeyPath:@"status"]; + //释放对视频缓冲的监测 + [self.player.currentItem removeObserver:self forKeyPath:@"loadedTimeRanges"]; + //移除通知 + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/RelationAndOptionView.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/RelationAndOptionView.h" new file mode 100644 index 0000000000000000000000000000000000000000..b7233c65118613b09f0f077dec534511aff81cfe --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/RelationAndOptionView.h" @@ -0,0 +1,22 @@ +// +// RelationAndOptionView.h +// JQ_ELOVE +// +// Created by chason on 2017/5/15. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import + +@interface RelationAndOptionView : UIView + +//关系 +@property (nonatomic, strong) UILabel *relationLab; +//选项(举报或删除) +@property (nonatomic, strong) UIButton *optionBtn; +//分割线 +@property (nonatomic, strong) UILabel *lineLabTop; +//分割线 +@property (nonatomic, strong) UILabel *lineLabBottom; + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/RelationAndOptionView.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/RelationAndOptionView.m" new file mode 100644 index 0000000000000000000000000000000000000000..52d8ad84b2db25a9fb9a98ba204c3552ad5114d0 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/RelationAndOptionView.m" @@ -0,0 +1,58 @@ +// +// RelationAndOptionView.m +// JQ_ELOVE +// +// Created by chason on 2017/5/15. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import "RelationAndOptionView.h" + +@implementation RelationAndOptionView + +- (instancetype)initWithFrame:(CGRect)frame{ + self = [super initWithFrame:frame]; + if (self) { + [self addSubview:self.lineLabTop]; + [self addSubview:self.relationLab]; + [self addSubview:self.optionBtn]; + [self addSubview:self.lineLabBottom]; + } + return self; +} + +- (UILabel *)lineLabTop{ + if (!_lineLabTop) { + _lineLabTop = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH, 10)]; + _lineLabTop.backgroundColor = UIColorFromRGB(0xf3f3f3); + } + return _lineLabTop; +} + +- (UILabel *)relationLab{ + if (!_relationLab) { + _relationLab = [[UILabel alloc] initWithFrame:CGRectMake(10, _lineLabTop.bottom, 80, 40)]; + _relationLab.textColor = CTHEMECOLOR; + _relationLab.font = [UIFont systemFontOfSize:13]; + } + return _relationLab; +} + +- (UIButton *)optionBtn{ + if (!_optionBtn) { + _optionBtn = [[UIButton alloc] initWithFrame:CGRectMake(KSCREEN_WIDTH-40, _lineLabTop.bottom, 40, 40)]; + [_optionBtn setImage:[UIImage imageNamed:@"PYQ-jt"] forState:UIControlStateNormal]; + [_optionBtn setImageEdgeInsets:UIEdgeInsetsMake(0, 0, 0, -10)]; + } + return _optionBtn; +} + +- (UILabel *)lineLabBottom{ + if (!_lineLabBottom) { + _lineLabBottom = [[UILabel alloc] initWithFrame:CGRectMake(0, 50-0.5, KSCREEN_WIDTH, 0.5)]; + _lineLabBottom.backgroundColor = LINECOLOUR; + } + return _lineLabBottom; +} + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/SeeOrLikeCell.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/SeeOrLikeCell.h" new file mode 100644 index 0000000000000000000000000000000000000000..22471d4a2327594a042b90f0a688e5ca7dbe8c01 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/SeeOrLikeCell.h" @@ -0,0 +1,22 @@ +// +// SeeOrLikeCell.h +// JQ_ELOVE +// +// Created by chason on 2017/2/13. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import + +@interface SeeOrLikeCell : UITableViewCell + +@property (nonatomic, strong) UIImageView *avatarImgView; +@property (nonatomic, strong) UILabel *nicknameLab; +@property (nonatomic, strong) UILabel *timeLab; +@property (nonatomic, strong) UILabel *numberOfSeeLab; +@property (nonatomic, strong) UILabel *line; +@property (nonatomic, strong) UIImageView *likeImg; + +- (void)initSeeOrLikeCell:(NSDictionary *)seeOrLikeCellDict; + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/SeeOrLikeCell.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/SeeOrLikeCell.m" new file mode 100644 index 0000000000000000000000000000000000000000..88dc021bcfcb9eb3a08623282a074438f6aebf62 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/SeeOrLikeCell.m" @@ -0,0 +1,104 @@ +// +// SeeOrLikeCell.m +// JQ_ELOVE +// +// Created by chason on 2017/2/13. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import "SeeOrLikeCell.h" + +@implementation SeeOrLikeCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{ + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + self.backgroundColor = [UIColor whiteColor]; + [self addSubview:self.avatarImgView]; + [self addSubview:self.nicknameLab]; + [self addSubview:self.timeLab]; + [self addSubview:self.numberOfSeeLab]; + [self addSubview:self.likeImg]; + [self addSubview:self.line]; + } + return self; +} + +- (UIImageView *)avatarImgView{ + if (!_avatarImgView) { + _avatarImgView = [[UIImageView alloc] initWithFrame:CGRectMake(15, (60-35)/2, 35, 35)]; + [_avatarImgView setImageRoundRadius:17.5 BorderWidth:0 borderColor:nil]; + } + return _avatarImgView; +} + +- (UILabel *)nicknameLab{ + if (!_nicknameLab) { + _nicknameLab = [[UILabel alloc] initWithFrame:CGRectMake(_avatarImgView.right+15, _avatarImgView.top, (KSCREEN_WIDTH-65)/2, 20)]; + _nicknameLab.textColor = UIColorFromRGB(0x434343); + _nicknameLab.font = [UIFont systemFontOfSize:15]; + } + return _nicknameLab; +} + +- (UILabel *)timeLab{ + if (!_timeLab) { + _timeLab = [[UILabel alloc] initWithFrame:CGRectMake(_avatarImgView.right+15, _nicknameLab.bottom, KSCREEN_WIDTH-65-15-15, 15)]; + _timeLab.textColor = UIColorFromRGB(0xb1b1b1); + _timeLab.font = [UIFont systemFontOfSize:13]; + _timeLab.adjustsFontSizeToFitWidth = YES; + } + return _timeLab; +} + +- (UILabel *)numberOfSeeLab{ + if (!_numberOfSeeLab) { + _numberOfSeeLab = [[UILabel alloc] initWithFrame:CGRectMake(_nicknameLab.right, _avatarImgView.top, (KSCREEN_WIDTH-65)/2-15, 20)]; + _numberOfSeeLab.textAlignment = NSTextAlignmentRight; + _numberOfSeeLab.textColor = UIColorFromRGB(0x434343); + _numberOfSeeLab.font = [UIFont systemFontOfSize:13]; + } + return _numberOfSeeLab; +} + +- (UIImageView *)likeImg{ + if (!_likeImg) { + _likeImg = [[UIImageView alloc] initWithFrame:CGRectMake(_timeLab.right, _nicknameLab.bottom, 15, 15)]; + _likeImg.image = [UIImage imageNamed:@"redLike"]; + _likeImg.hidden = YES; + } + return _likeImg; +} + +- (UILabel *)line{ + if (!_line) { + _line = [[UILabel alloc] initWithFrame:CGRectMake(15, 60-0.5, KSCREEN_WIDTH-15, 0.5)]; + _line.backgroundColor = LINECOLOUR; + } + return _line; +} + +- (void)initSeeOrLikeCell:(NSDictionary *)seeOrLikeCellDict{ + [_avatarImgView sd_setImageWithURL:[NSURL URLWithString:seeOrLikeCellDict[@"avatar"]] placeholderImage:USER_AVATAR_DEFAULT]; + _nicknameLab.text = seeOrLikeCellDict[@"nickname"]; + _timeLab.text = [NSString stringWithFormat:@"%@ 访问了你的主页",seeOrLikeCellDict[@"recodetime"]]; + _numberOfSeeLab.text = [NSString stringWithFormat:@"共 %@ 次",seeOrLikeCellDict[@"num"]]; + if ([seeOrLikeCellDict[@"classify"] intValue] == 2) { + _likeImg.hidden = NO; + }else{ + _likeImg.hidden = YES; + } +} + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/SendDetailView.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/SendDetailView.m" new file mode 100644 index 0000000000000000000000000000000000000000..5dc0a503c04e2775d7a80df0932a110279b276ac --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/SendDetailView.m" @@ -0,0 +1,324 @@ +// +// SendDetailView.m +// JQ_ELOVE +// +// Created by Shmily on 2017/5/11. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import "SendDetailView.h" +#import "UploadMethod.h" +#import "NearbyPlaceViewController.h" +#import "PlayViewController.h" +#import "MJPhotoBrowser.h" +#import "MJPhoto.h" +#import "ShowBigIVViewController.h" +#import "ShowBigViewCell.h" + +#import "CameraManager.h" + +#define imageSide (KSCREEN_WIDTH-75)/4 + +#define xOrigin ((KSCREEN_WIDTH-15)-imageSide)/2 +#define yOrigin (imageSide-(KSCREEN_WIDTH-15))/2 + + +#import + + + + +@interface SendDetailView () +{ + NSInteger photoNum; + BOOL mediaType; +} + +@property (nonatomic,retain)CameraManager *camer; +@property (nonatomic,retain)NSMutableArray *imageArray; +@property (nonatomic,retain)UITableView *mTableView; + +@property (nonatomic, strong) UIImagePickerController *imagePickerVc; + +@end + + + +@implementation SendDetailView + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + self.backgroundColor = [UIColor whiteColor]; + [self addSubview:self.contentTextView]; + [self.mTableView registerClass:[ShowBigViewCell class] forCellReuseIdentifier:@"ShowSmallViewCell"]; + [self creatNewPic:self.imageArray]; + + } + return self; +} + +#pragma mark - **************** 输入框 + +- (UIPlaceHolderTextView *)contentTextView{ + if(!_contentTextView){ + _contentTextView = [[UIPlaceHolderTextView alloc] initWithFrame:CGRectMake(10, 0, KSCREEN_WIDTH-20, 100)]; + _contentTextView.placeholder = @"这一刻说点什么吧..."; + _contentTextView.delegate =self; + _contentTextView.font = [UIFont systemFontOfSize:14]; + __weak typeof(self) weakSelf = self; + [_contentTextView setChangeTextBlock:^{ + //可输入的最大长度 + int length = 2000; + NSString * toBeString = weakSelf.contentTextView.text; + // 键盘输入模式 + NSString * lang = [[weakSelf.contentTextView textInputMode] primaryLanguage]; + if ([lang isEqualToString:@"zh-Hans"]) { + // 简体中文输入,包括简体拼音,健体五笔,简体手写 + UITextRange *selectedRange = [weakSelf.contentTextView markedTextRange]; + //获取高亮部分 + UITextPosition * position = [weakSelf.contentTextView positionFromPosition:selectedRange.start offset:0]; + // 没有高亮选择的字,则对已输入的文字进行字数统计和限制 + if (!position) { + if (toBeString.length > length) { + weakSelf.contentTextView.text = [toBeString substringToIndex:length]; + } + } + }else{// 中文输入法以外的直接对其统计限制即可,不考虑其他语种情况 + if (toBeString.length > length) { + weakSelf.contentTextView.text = [toBeString substringToIndex:length]; + } + } + }]; + } + return _contentTextView; +} + +- (NSMutableArray *)imageArray +{ + if (!_imageArray) { + _imageArray = [[NSMutableArray alloc]initWithCapacity:0]; + } + return _imageArray; +} +#pragma mark - **************** tableview +- (UITableView *)mTableView +{ + if (!_mTableView) { + _mTableView = [[UITableView alloc]initWithFrame:CGRectZero style:UITableViewStylePlain]; + _mTableView.dataSource = self; + _mTableView.delegate =self; + _mTableView.transform = CGAffineTransformIdentity; + _mTableView.separatorStyle = 0; + _mTableView.frame = CGRectMake(xOrigin,yOrigin+110,imageSide,KSCREEN_WIDTH-15); + _mTableView.transform = CGAffineTransformMakeRotation(-M_PI/2); + [self addSubview:_mTableView]; + } + return _mTableView; +} + +-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + return imageSide+15; +} + +-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + return _imageArray.count; +} + +-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + ShowBigViewCell *testCell = [tableView dequeueReusableCellWithIdentifier:@"ShowSmallViewCell"]; + testCell.selectionStyle =0; + + NSDictionary *data = _imageArray[indexPath.row]; + testCell.bgImageVIew.image = data[@"image"]; + if (CGAffineTransformEqualToTransform(testCell.contentView.transform, CGAffineTransformIdentity)) + { + testCell.contentView.frame = CGRectMake(xOrigin, yOrigin,testCell.height, testCell.width); + testCell.contentView.transform = CGAffineTransformMakeRotation(M_PI/2.0); + } + return testCell; +} + +- (void)creatNewPic:(NSArray *)imageArray +{ + if (imageArray) { + photoNum = self.imageArray.count; + if (imageArray.count<4 && !mediaType) { + NSDictionary *imageInfno = @{ + @"image":[UIImage imageNamed:@"add_image"], + @"type":@"0", + }; + [self.imageArray addObject:imageInfno]; + photoNum = self.imageArray.count-1; + } + } + [self.mTableView reloadData]; +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + NSDictionary *data = _imageArray[indexPath.row]; + switch ([data[@"type"] intValue]) { + case 0: ////0 add 1图片 2视频 + [self showSheetView]; + break; + case 1: + [self showAllPictures:indexPath.row]; + break; + case 2: + [self showAllPictures:10086]; + break; + default: + break; + } +} + +- (void)showSheetView +{ + NSDictionary *dict = [_imageArray firstObject]; + if ([dict[@"type"] intValue]) { + UIActionSheet *actionSheet = [[UIActionSheet alloc] + initWithTitle:nil + delegate:self + cancelButtonTitle:@"取消" + destructiveButtonTitle:nil + otherButtonTitles:@"相册",@"拍照",nil]; + actionSheet.actionSheetStyle = UIActionSheetStyleBlackOpaque; + [actionSheet showInView:self.firstViewController.view]; + + }else{ + UIActionSheet *actionSheet = [[UIActionSheet alloc] + initWithTitle:nil + delegate:self + cancelButtonTitle:@"取消" + destructiveButtonTitle:nil + otherButtonTitles:@"相册",@"拍照",@"录制视频",nil]; + actionSheet.actionSheetStyle = UIActionSheetStyleBlackOpaque; + [actionSheet showInView:self.firstViewController.view]; + + + } + +} + +- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex +{ + CameraManager *camer = [[CameraManager alloc]initWithVC:self.firstViewController andShowType:2]; + __weak typeof(self) weakSelf = self; + [camer setImageBlock:^(NSArray *imageArray) { + [weakSelf.imageArray removeLastObject]; + for (UIImage *image in imageArray) { + NSDictionary *imageInfno = @{@"image":image + ,@"type":@"1"}; //0 add 1图片 2视频 + [weakSelf.imageArray addObject:imageInfno]; + } + [weakSelf creatNewPic:weakSelf.imageArray]; + + }]; + _camer = camer; + if (buttonIndex == 0) {//相册 + [camer startPhoto:4-photoNum]; + }else if (buttonIndex == 1){//拍照 + [camer startCamera]; + }else if (buttonIndex == 2){//录制视频 + NSDictionary *dict = [_imageArray firstObject]; + if ([dict[@"type"] intValue]) { + return; + } + [ZCTools AliyunVideoSelf:self.firstViewController]; + [AliyunVideoBase shared].delegate = self; + } +} +- (void)showAllPictures:(NSInteger)index +{ + ShowBigIVViewController *showView = [[ShowBigIVViewController alloc]init]; + showView.bigImageArray = _imageArray; + showView.delegate = self; + showView.mediaType = mediaType; + [self.firstViewController.navigationController pushViewController:showView animated:YES]; +} +//移除 一个 +- (void)removePicIndex:(NSInteger)index +{ + if (photoNum!=4) { + [self.imageArray removeLastObject]; + } + if (mediaType) { + [self.imageArray removeAllObjects]; + mediaType = NO; + }else{ + [self.imageArray removeObjectAtIndex:(int)index]; + } + + + [self creatNewPic:self.imageArray]; +} + + +- (void)showMessage:(NSString *)message +{ + UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"提示" message:message delegate:self cancelButtonTitle:@"好" otherButtonTitles:nil, nil]; + alertView.tag = 10010; + [alertView show]; +} + + +#pragma mark - 获取视频路径 + +-(void)videoBaseRecordVideoExit { + NSLog(@"退出录制"); + // [self.firstViewController.navigationController popViewControllerAnimated:YES]; + [self.firstViewController dismissViewControllerAnimated:YES completion:NULL]; + +} + +- (void)videoBase:(AliyunVideoBase *)base recordCompeleteWithRecordViewController:(UIViewController *)recordVC videoPath:(NSString *)videoPath { + NSLog(@"录制完成 %@", videoPath); + if (STR_IS_NOT_EMPTY(videoPath)) { + [MBProgressHUD showMessag:nil toView:self]; + mediaType = YES; + [self.imageArray removeAllObjects]; + + NSData *imageData = UIImageJPEGRepresentation([self getVideoPreViewImage:videoPath], 0.8); + NSString *videoimg = [imageData base64EncodedStringWithOptions:0]; + + NSDictionary *imageInfno = @{@"image":[self getVideoPreViewImage:videoPath], + @"path":videoPath, + @"type":@"2",//0 add 1图片 2视频 + @"videoimg":videoimg}; + [self.imageArray addObject:imageInfno]; + [self creatNewPic:_imageArray]; + } + [self.firstViewController dismissViewControllerAnimated:NO completion:^{ + [MBProgressHUD hideHUDForView:self animated:YES]; + }]; +} + + + +#pragma mark - 获取视频第一帧图片 +- (UIImage*) getVideoPreViewImage:(NSString *)videoPath +{ + AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:[NSURL fileURLWithPath:videoPath] options:nil]; + AVAssetImageGenerator *gen = [[AVAssetImageGenerator alloc] initWithAsset:asset]; + gen.appliesPreferredTrackTransform = YES; + CMTime time = CMTimeMakeWithSeconds(0.0, 600); + NSError *error = nil; + CMTime actualTime; + CGImageRef image = [gen copyCGImageAtTime:time actualTime:&actualTime error:&error]; + UIImage *img = [[UIImage alloc] initWithCGImage:image]; + CGImageRelease(image); + return img; +} + +-(void)getSendDetailblock:(void (^)(NSMutableArray *mediaArray,NSString *textIfno))block; +{ + block(self.imageArray,_contentTextView.text); +} + +@end + diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/SexView.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/SexView.h" new file mode 100644 index 0000000000000000000000000000000000000000..a9d07ab3c2be300a35d476f8e434c1a1de861433 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/SexView.h" @@ -0,0 +1,27 @@ +// +// SexView.h +// JQ_ELOVE +// +// Created by Shmily on 16/7/5. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import + +@interface SexView : UIView + + +/** + * 年龄 + */ +@property (nonatomic, copy) NSString *titleAge; + + +/* + * 性别 + */ +@property (nonatomic, copy) NSString *sex; + +@property (nonatomic, strong) UIImageView *sexImageView; + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/SexView.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/SexView.m" new file mode 100644 index 0000000000000000000000000000000000000000..a473238346690a840c2221b37c550dcadbd341ae --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/SexView.m" @@ -0,0 +1,88 @@ +// +// SexView.m +// JQ_ELOVE +// +// Created by Shmily on 16/7/5. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "SexView.h" + +@interface SexView () + + +@property (nonatomic, strong) UILabel *ageLB; + + +@end + + +@implementation SexView + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { +// self.backgroundColor = UIColorFromRGB(0x999999); +// self.backgroundColor = UICOLOUR; + [self setImageRoundRadius:4 BorderWidth:0 borderColor:NULL]; + + [self addSubview:self.sexImageView]; + [self addSubview:self.ageLB]; + } + return self; +} + +- (UIImageView *)sexImageView +{ + if (!_sexImageView) { + _sexImageView = [[UIImageView alloc]initWithFrame:CGRectMake(3,(self.height-12)/2,9,12)]; + } + return _sexImageView; +} + +- (UILabel *)ageLB +{ + if (!_ageLB) { + _ageLB = [[UILabel alloc]initWithFrame:CGRectMake(_sexImageView.right+5, 0, 0, self.height)]; + _ageLB.font = [UIFont systemFontOfSize:11]; +// _ageLB.textColor = UIColorFromRGB(0x666666); + _ageLB.textColor = [UIColor whiteColor]; + } + return _ageLB; +} + +- (void)setTitleAge:(NSString *)titleAge +{ + if (_titleAge) { + _titleAge = nil; + } + _titleAge = titleAge; + + _ageLB.text = [NSString stringWithFormat:@"%@岁",_titleAge]; + CGFloat widthFloat = [_ageLB.text calculateSize:CGSizeMake(200, self.height) font:11].width; + _ageLB.width = widthFloat; + + self.width = 2+_sexImageView.width+5+widthFloat+2; +} + +- (void)setSex:(NSString *)sex +{ + if (_sex) { + _sex = nil; + } + _sex = sex; + + if ([_sex isEqualToString:@"0"]) { + _sexImageView.image = [UIImage imageNamed:@"girl"]; + self.backgroundColor = CTHEMECOLOR; + }else{ + _sexImageView.image = [UIImage imageNamed:@"boy"]; + self.backgroundColor = UIColorFromRGB(0x01a7e3); + } +} + + + + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/ShowBigViewCell.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/ShowBigViewCell.h" new file mode 100644 index 0000000000000000000000000000000000000000..81c3973fb74468fb583c711ab1daf41ee9be5c64 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/ShowBigViewCell.h" @@ -0,0 +1,15 @@ +// +// ShowBigViewCell.h +// JQ_ELOVE +// +// Created by Shmily on 2017/5/12. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import + +@interface ShowBigViewCell : UITableViewCell + +@property (nonatomic,retain)UIImageView *bgImageVIew; + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/ShowBigViewCell.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/ShowBigViewCell.m" new file mode 100644 index 0000000000000000000000000000000000000000..082cc51f90ae5b932ce5a44f57c3da9bf65a792c --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/ShowBigViewCell.m" @@ -0,0 +1,52 @@ +// +// ShowBigViewCell.m +// JQ_ELOVE +// +// Created by Shmily on 2017/5/12. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import "ShowBigViewCell.h" + +@implementation ShowBigViewCell + + +- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier +{ + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + [self.contentView addSubview:self.bgImageVIew]; + if ([reuseIdentifier isEqualToString:@"ShowSmallViewCell"]) { + self.bgImageVIew.frame = CGRectMake(10, ((KSCREEN_WIDTH-60)/4+20-(KSCREEN_WIDTH-80)/4)/2, (KSCREEN_WIDTH-80)/4, (KSCREEN_WIDTH-80)/4); + self.bgImageVIew.contentMode = UIViewContentModeScaleAspectFill; + [_bgImageVIew setContentScaleFactor:[[UIScreen mainScreen] scale]]; + _bgImageVIew.clipsToBounds = YES; + } + } + return self; +} + +- (UIImageView *)bgImageVIew +{ + if (!_bgImageVIew) { + _bgImageVIew = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH, KSCREEN_HEIGHT-kTopHeight)]; + _bgImageVIew.contentMode = UIViewContentModeScaleAspectFit; +// _bgImageVIew.backgroundColor = [UIColor blackColor]; + } + return _bgImageVIew; +} + + + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/SpeedCell.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/SpeedCell.h" new file mode 100644 index 0000000000000000000000000000000000000000..117465f486e38610e269766e2ee88990b75e2866 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/SpeedCell.h" @@ -0,0 +1,65 @@ +// +// SpeedCe.h +// JQ_ELOVE +// +// Created by Shmily on 16/7/5. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import +@class AvatarImageView; +@class SexView; +@class SpeedModel; + + +@protocol SpeedCellDelegate + +- (void)choseTerm:(id)cell; + +@end + +@interface SpeedCell : UITableViewCell + +@property (assign, nonatomic) id delegate; + +/** + * 背景图 + */ +@property (nonatomic, strong) UIView *bgView; +/** + * 昵称 + */ +@property (nonatomic, strong) UILabel *nikeLB; +/** + * 头像 + */ +@property (nonatomic, strong) AvatarImageView *headImageView; +/** + * 年龄/星座/学历 + */ +@property (nonatomic, strong) UILabel *informationLab; +/** + * 性别 + */ +//@property (nonatomic, strong) SexView *sexView; + +/** + * 星座 + */ +//@property (nonatomic, strong) UILabel *constellationLB; + +/** + * 分割线 + */ +@property (nonatomic, strong) UILabel *lineLB; + + +/** + * 其他 city 距离 + */ +@property (nonatomic, strong) UILabel *otherLB; + + +- (void)initData:(SpeedModel *)model; + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/SpeedCell.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/SpeedCell.m" new file mode 100644 index 0000000000000000000000000000000000000000..13cf0caab15d0e46639edc050e68a57a799e7df8 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/SpeedCell.m" @@ -0,0 +1,127 @@ +// +// SpeedCe.m +// JQ_ELOVE +// +// Created by Shmily on 16/7/5. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "SpeedCell.h" +#import "AvatarImageView.h" +#import "SexView.h" +#import "SpeedModel.h" +#import "NSString+transform.h" + +@implementation SpeedCell + +- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier +{ + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + self.contentView.backgroundColor = UIColorFromRGB(0xf7f7f7); + [self.contentView addSubview:self.bgView]; + [self.bgView addSubview:self.headImageView]; + [self.bgView addSubview:self.nikeLB]; + [self.bgView addSubview:self.otherLB]; + [self.bgView addSubview:self.informationLab]; + [self.bgView addSubview:self.lineLB]; + + } + return self; +} + +- (UIView *)bgView{ + if (!_bgView) { + _bgView = [[UIView alloc]initWithFrame:CGRectMake(0,0, KSCREEN_WIDTH,98)]; + _bgView.backgroundColor = [UIColor whiteColor]; + } + return _bgView; +} + +- (AvatarImageView *)headImageView +{ + if (!_headImageView) { + _headImageView = [[AvatarImageView alloc]initWithFrame:CGRectMake(20,(_bgView.height-77)/2,77,77)]; + UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(headImageViewClicked)]; + [_headImageView addGestureRecognizer:tap]; + } + return _headImageView; +} + +- (UILabel *)nikeLB +{ + if (!_nikeLB) { + _nikeLB = [[UILabel alloc]initWithFrame:CGRectMake(_headImageView.right+12, _headImageView.top+11, _bgView.width-_headImageView.right-12-5, 20)]; + _nikeLB.textColor = UIColorFromRGB(0x8a8a8a); + _nikeLB.font = [UIFont systemFontOfSize:16]; + } + return _nikeLB; +} + +- (UILabel *)informationLab{ + if(!_informationLab){ + _informationLab = [[UILabel alloc]initWithFrame:CGRectMake(_headImageView.right+12, _nikeLB.bottom+16, _bgView.width-_headImageView.right-20, 20)]; + _informationLab.textColor = UIColorFromRGB(0x8a8a8a); + _informationLab.font = [UIFont systemFontOfSize:16]; + } + return _informationLab; +} + + + +- (UILabel *)otherLB +{ + if (!_otherLB) { + _otherLB = [[UILabel alloc]initWithFrame:CGRectMake(_headImageView.right+12, _nikeLB.bottom, _bgView.width-_headImageView.right-12-5, 16)]; + _otherLB.textAlignment = NSTextAlignmentRight; + _otherLB.font = [UIFont systemFontOfSize:15]; + _otherLB.textColor = UIColorFromRGB(0x8a8a8a); + } + return _otherLB; +} + +- (UILabel *)lineLB +{ + if (!_lineLB) { + _lineLB = [[UILabel alloc]initWithFrame:CGRectMake(0, _bgView.height-0.5, _bgView.width, 0.5)]; + _lineLB.backgroundColor = LINECOLOUR; + } + return _lineLB; +} + +- (void)initData:(SpeedModel *)model +{ + [_headImageView setTitle:model.nickname imageUrl:model.avatar]; + _nikeLB.text = model.nickname; + _otherLB.text =model.localplace; + + NSString *age; + NSString *constellation; + NSString *degree; + if(STR_IS_NOT_EMPTY(model.age)){ + age = [NSString stringWithFormat:@"%@岁",model.age]; + }else{ + age = @""; + } + if(STR_IS_NOT_EMPTY(model.constellation)){ + constellation = [NSString stringWithFormat:@"/%@",model.constellation]; + }else{ + constellation = @""; + } + if([model.degree isEqualToString:@"0"]){ + degree = @""; + }else{ + NSString *Ndegree = [[NSString stringWithFormat:@"%.1f",[model.degree floatValue]] stringDegreeByReplacingChinese]; + degree = [NSString stringWithFormat:@"/%@",Ndegree]; + } + _informationLab.text = [NSString stringWithFormat:@"%@%@%@",age,constellation,degree]; +} + +- (void)headImageViewClicked +{ + if ([_delegate respondsToSelector:@selector(choseTerm:)]) { + [_delegate choseTerm:self]; + } +} + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/TopicDetailHeaderView.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/TopicDetailHeaderView.h" new file mode 100644 index 0000000000000000000000000000000000000000..f06785cf51d135013c4f8bbfce40d22e33b1aec8 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/TopicDetailHeaderView.h" @@ -0,0 +1,55 @@ +// +// TopicDetailHeaderView.h +// JQQY +// +// Created by chason on 2018/1/2. +// Copyright © 2018年 jiuqi. All rights reserved. +// + +#import +#import "TopBtnView.h" + +@protocol TopicDelegate +- (void)selectNewOrHot:(NSInteger )type; //1最新 2最热 +@end + + + +@interface TopicDetailHeaderView : UIView +{ + CGFloat org_height; + CGFloat ope_height; +} + +@property (nonatomic, weak) iddelegate; + + +/** + 话题图片 + */ +@property (nonatomic, strong) UIImageView *pictureView; + +/** + 话题名称 + */ +@property (nonatomic, strong) UILabel *topicNameLab; + +/** + 参与人数 + */ +@property (nonatomic, strong) UILabel *peopleNumLab; + +/** + 话题内容 + */ +@property (nonatomic, strong) UILabel *topicContentLab; + + + +@property (nonatomic,retain) UIButton *unfoldBtn; + +@property (nonatomic,retain)TopBtnView *twoBtn; + +- (void)initTopicDetailHeaderView:(NSDictionary *)dict; + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/TopicDetailHeaderView.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/TopicDetailHeaderView.m" new file mode 100644 index 0000000000000000000000000000000000000000..7befa031de9493ffcdd9af4fc0d5f05d6d88847b --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/TopicDetailHeaderView.m" @@ -0,0 +1,174 @@ +// +// TopicDetailHeaderView.m +// JQQY +// +// Created by chason on 2018/1/2. +// Copyright © 2018年 jiuqi. All rights reserved. +// + +#import "TopicDetailHeaderView.h" + +@implementation TopicDetailHeaderView + +- (instancetype)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + self.backgroundColor = [UIColor whiteColor]; + [self addSubview:self.pictureView]; + [self addSubview:self.topicNameLab]; + [self addSubview:self.peopleNumLab]; + [self addSubview:self.topicContentLab]; + [self addSubview:self.unfoldBtn]; + [self addSubview:self.twoBtn]; + } + return self; +} + +- (UIImageView *)pictureView +{ + if (!_pictureView) { + _pictureView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH, KSCREEN_WIDTH/16*9)]; + _pictureView.backgroundColor = [UIColor lightGrayColor]; + } + return _pictureView; +} + +- (UILabel *)topicNameLab +{ + if (!_topicNameLab) { + _topicNameLab = [[UILabel alloc] initWithFrame:CGRectMake(15, _pictureView.bottom+13, (KSCREEN_WIDTH-30)/3*2,17)]; +// _topicNameLab.backgroundColor = [UIColor blueColor]; + _topicNameLab.font = FFONT16; + _topicNameLab.textColor = PURPLECOLOUR; + } + return _topicNameLab; +} + +- (UILabel *)peopleNumLab +{ + if (!_peopleNumLab) { + _peopleNumLab = [[UILabel alloc] initWithFrame:CGRectMake(_topicNameLab.right, _pictureView.bottom+13, (KSCREEN_WIDTH-30)/3,17)]; +// _peopleNumLab.backgroundColor = [UIColor redColor]; + _peopleNumLab.font = FFONT16; + _peopleNumLab.textColor = MAIN_TEXTCOLOR; + _peopleNumLab.textAlignment = NSTextAlignmentRight; + } + return _peopleNumLab; +} + +- (UILabel *)topicContentLab +{ + if (!_topicContentLab) { + _topicContentLab = [[UILabel alloc] initWithFrame:CGRectMake(15, _topicNameLab.bottom, KSCREEN_WIDTH-30, 30)]; +// _topicContentLab.backgroundColor = [UIColor orangeColor]; + _topicContentLab.font = SYSTEMFONT(13); + _topicContentLab.textColor = [UIColor lightGrayColor]; + } + return _topicContentLab; +} + +- (UIButton *)unfoldBtn +{ + if (!_unfoldBtn) { + _unfoldBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _unfoldBtn.frame = CGRectMake(8, _topicContentLab.bottom,50,20); + [_unfoldBtn setImage:[UIImage imageNamed:@"n_down"] forState:0]; + [_unfoldBtn setImage:[UIImage imageNamed:@"n_up"] forState:UIControlStateSelected]; + [_unfoldBtn setTitle:@"展开" forState:0]; + [_unfoldBtn setTitle:@"收起" forState:UIControlStateSelected]; + [_unfoldBtn setTitleColor:PURPLECOLOUR forState:0]; + [_unfoldBtn setTitleColor:PURPLECOLOUR forState:UIControlStateSelected]; + _unfoldBtn.titleLabel.font = [UIFont systemFontOfSize:12]; + CGFloat imgWidth = _unfoldBtn.imageView.bounds.size.width; + CGFloat labWidth = _unfoldBtn.titleLabel.bounds.size.width; + [_unfoldBtn setImageEdgeInsets:UIEdgeInsetsMake(0,labWidth, 0, -labWidth)]; + [_unfoldBtn setTitleEdgeInsets:UIEdgeInsetsMake(0,-imgWidth, 0, imgWidth)]; + [_unfoldBtn addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside]; + + } + return _unfoldBtn; +} + + + +- (TopBtnView *)twoBtn +{ + if (!_twoBtn) { + _twoBtn = [[TopBtnView alloc]initWithFrame:CGRectMake(0, _topicContentLab.bottom, KSCREEN_WIDTH, 40) showType:@[@"最新",@"最热"]]; + _twoBtn.delegate =self; + } + return _twoBtn; +} + +- (void)topBtnSelect:(NSString *)name +{ + if (_delegate && [_delegate respondsToSelector:@selector(selectNewOrHot:)]) { + if([name isEqualToString:@"最新"]){ + [_delegate selectNewOrHot:1]; + }else{ + [_delegate selectNewOrHot:2]; + } + } +} + +- (void)initTopicDetailHeaderView:(NSDictionary *)dict +{ + if (!STR_IS_NOT_EMPTY(dict[@"poster"])) { + _pictureView.hidden = YES; + _topicNameLab.top =10; + _peopleNumLab.top = 10; + }else{ + _pictureView.hidden = NO; + _topicNameLab.top =_pictureView.bottom+10; + _peopleNumLab.top = _pictureView.bottom+10; + } + _topicContentLab.top = _topicNameLab.bottom; + + NSString *detail = dict[@"detail"]; + CGFloat c_height = [ZCTools labelAutoCalculateRectWith:detail FontSize:13 MaxSize:CGSizeMake(KSCREEN_WIDTH-30, 1000)].height; + if (c_height < 50) {//三行高度 + _topicContentLab.height = c_height+10; + _unfoldBtn.hidden = YES; + _topicContentLab.numberOfLines = 3; + _twoBtn.top =_topicContentLab.bottom+5; + }else{ + _topicContentLab.height = 57; + _unfoldBtn.hidden =NO; + _topicContentLab.numberOfLines = 3; + _unfoldBtn.top = _topicContentLab.bottom-7; + _twoBtn.top =_topicContentLab.bottom+15; + + org_height = 57; + ope_height = c_height; + } + self.height = _twoBtn.bottom+1; + + _topicContentLab.text = detail; + [_pictureView sd_setImageWithURL:[NSURL URLWithString:dict[@"poster"]] placeholderImage:nil options:SDWebImageLowPriority]; + _topicNameLab.text = dict[@"title"]; + + _peopleNumLab.text = [NSString stringWithFormat:@"参与:%@", dict[@"hot"]]; +} + +- (void)btnClicked:(UIButton *)b +{ + b.selected = !b.selected; + if (b.selected) { + _topicContentLab.height = ope_height+10; + _topicContentLab.numberOfLines = 0; + _unfoldBtn.top = _topicContentLab.bottom-5; + }else{ + _topicContentLab.height = 57; + _topicContentLab.numberOfLines = 3; + _unfoldBtn.top = _topicContentLab.bottom-7; + } + _twoBtn.top =_topicContentLab.bottom+15; + self.height = _twoBtn.bottom; + + if (_delegate && [_delegate respondsToSelector:@selector(selectNewOrHot:)]) { + [_delegate selectNewOrHot:0]; + } +} + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/UIPlaceHolderTextView.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/UIPlaceHolderTextView.h" new file mode 100644 index 0000000000000000000000000000000000000000..4fc8d3f05df1f9c83a1dc51904bdb042cde8d54a --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/UIPlaceHolderTextView.h" @@ -0,0 +1,25 @@ +// +// UIPlaceHolderTextView.h +// JQ_ELOVE +// +// Created by Shmily on 16/6/16. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import + +@interface UIPlaceHolderTextView : UITextView + +/** + * 占位文字 + */ +@property (nonatomic, copy) NSString *placeholder; +/** + * 占位文字颜色 + */ +@property (nonatomic, strong) UIColor *placeholderColor; + +@property(nonatomic,copy)void (^changeTextBlock)(void); + + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/UIPlaceHolderTextView.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/UIPlaceHolderTextView.m" new file mode 100644 index 0000000000000000000000000000000000000000..faf293b0698f73d49d744e8633b0a4a3f062487c --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/UIPlaceHolderTextView.m" @@ -0,0 +1,78 @@ +// +// UIPlaceHolderTextView.m +// JQ_ELOVE +// +// Created by Shmily on 16/6/16. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "UIPlaceHolderTextView.h" + + +@implementation UIPlaceHolderTextView + + +- (instancetype)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + // 当UITextView的文字发生改变时,UITextView自己会发出一个UITextViewTextDidChangeNotification通知 + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textDidChange) name:UITextViewTextDidChangeNotification object:self]; + } + return self; +} + +/** + * 监听文字改变 + */ +-(void)textDidChange { + if(self.changeTextBlock){ + self.changeTextBlock(); + } + //重绘 + [self setNeedsDisplay]; + +} + +-(void)setPlaceholder:(NSString *)placeholder { + _placeholder = placeholder; + // setNeedsDisplay会在下一个消息循环时刻,调用drawRect: + [self setNeedsDisplay]; +} + +-(void)setText:(NSString *)text { + [super setText:text]; + // setNeedsDisplay会在下一个消息循环时刻,调用drawRect: + [self setNeedsDisplay]; +} + +-(void)setFont:(UIFont *)font { + [super setFont:font]; + // setNeedsDisplay会在下一个消息循环时刻,调用drawRect: + [self setNeedsDisplay]; +} + +- (void)drawRect:(CGRect)rect { + + // 如果有输入文字,就直接返回,不画占位文字 + if (self.hasText) return; + //设置文字属性 + NSMutableDictionary *attributes = [NSMutableDictionary dictionary]; + attributes[NSFontAttributeName] = self.font; + attributes[NSForegroundColorAttributeName] = self.placeholderColor ? self.placeholderColor : UIColorFromRGB(0xb1b1b1); + //画文字 + CGFloat x = 5; + CGFloat width = rect.size.width -2 * x; + CGFloat y = 6; + CGFloat height = rect.size.height - 2 * y; + CGRect placeholderRect = CGRectMake(x, y, width, height); + [self.placeholder drawInRect:placeholderRect withAttributes:attributes]; +} + +-(void)dealloc { + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + + + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/YuanquanCommentHeaderView.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/YuanquanCommentHeaderView.h" new file mode 100644 index 0000000000000000000000000000000000000000..72b56494490f14a9974e74e2b76697ef812f953c --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/YuanquanCommentHeaderView.h" @@ -0,0 +1,18 @@ +// +// YuanquanCommentHeaderView.h +// JQQY +// +// Created by chason on 2018/1/3. +// Copyright © 2018年 jiuqi. All rights reserved. +// + +#import + +@interface YuanquanCommentHeaderView : UIView + +@property (nonatomic, strong) UIView *whiteView; +@property (nonatomic, strong) UIView *vline; +@property (nonatomic, strong) UILabel *textLab; +@property (nonatomic, strong) UIView *cline; + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/YuanquanCommentHeaderView.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/YuanquanCommentHeaderView.m" new file mode 100644 index 0000000000000000000000000000000000000000..c21fe7d7eef444a4e22391f2270ba1a2b5754267 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/YuanquanCommentHeaderView.m" @@ -0,0 +1,62 @@ +// +// YuanquanCommentHeaderView.m +// JQQY +// +// Created by chason on 2018/1/3. +// Copyright © 2018年 jiuqi. All rights reserved. +// + +#import "YuanquanCommentHeaderView.h" + +@implementation YuanquanCommentHeaderView + +- (instancetype)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + [self addSubview:self.whiteView]; + [self.whiteView addSubview:self.vline]; + [self.whiteView addSubview:self.textLab]; + [self.whiteView addSubview:self.cline]; + } + return self; +} + +- (UIView *)whiteView +{ + if (!_whiteView) { + _whiteView = [[UIView alloc] initWithFrame:CGRectMake(10, 0, self.width-20, self.height)]; + _whiteView.backgroundColor = [UIColor whiteColor]; + } + return _whiteView; +} + +- (UIView *)vline +{ + if (!_vline) { + _vline = [[UIView alloc] initWithFrame:CGRectMake(10, 10, 2, 20)]; + _vline.backgroundColor = PURPLECOLOUR; + } + return _vline; +} + +- (UILabel *)textLab +{ + if (!_textLab) { + _textLab = [[UILabel alloc] initWithFrame:CGRectMake(_vline.right+10, 10, _whiteView.width-40, 20)]; + _textLab.font = FFONT12; + _textLab.textColor = MAIN_TEXTCOLOR; + } + return _textLab; +} + +- (UIView *)cline +{ + if (!_cline) { + _cline = [[UIView alloc] initWithFrame:CGRectMake(10, self.height-0.5, _whiteView.width-20, 0.5)]; + _cline.backgroundColor = LINECOLOUR; + } + return _cline; +} + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/YuanquanDetailBottomView.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/YuanquanDetailBottomView.h" new file mode 100644 index 0000000000000000000000000000000000000000..8eb3371d0db44f9b36f40d371d4b05d688d35c04 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/YuanquanDetailBottomView.h" @@ -0,0 +1,53 @@ +// +// YuanquanDetailBottomView.h +// JQQY +// +// Created by chason on 2018/1/3. +// Copyright © 2018年 jiuqi. All rights reserved. +// + +#import +#import "QYShareView.h" + + +@interface YuanquanDetailBottomView : UIView +{ + NSString *_collection; +} +/** + 线 + */ +@property (nonatomic, strong) UIView *line; +/** + 提示文字 + */ +@property (nonatomic, strong) UILabel *textLab; + +/** + 评论数 + */ +@property (nonatomic, strong) UIButton *msgBtn; +@property (nonatomic, strong) UILabel *msgNumLab; + +/** + 分享按钮 + */ +@property (nonatomic, strong) UIButton *shareBtn; + +/** + 收藏按钮 + */ +@property (nonatomic, strong) UIButton *collectionBtn; + + +@property (nonatomic,retain)QYShareView *shareView; + + + +@property (nonatomic,retain)NSDictionary *params; + + +@property (nonatomic,retain)id count; + + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/YuanquanDetailBottomView.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/YuanquanDetailBottomView.m" new file mode 100644 index 0000000000000000000000000000000000000000..45945bab246fa74bd1c5d2851ff202ebfbfee8df --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/YuanquanDetailBottomView.m" @@ -0,0 +1,190 @@ +// +// YuanquanDetailBottomView.m +// JQQY +// +// Created by chason on 2018/1/3. +// Copyright © 2018年 jiuqi. All rights reserved. +// + +#import "YuanquanDetailBottomView.h" + +@implementation YuanquanDetailBottomView + +- (instancetype)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + [self addSubview:self.line]; + [self addSubview:self.textLab]; + [self addSubview:self.msgBtn]; + [self addSubview:self.shareBtn]; + [self addSubview:self.collectionBtn]; + [self.msgBtn addSubview:self.msgNumLab]; + } + return self; +} + +- (UIView *)line +{ + if (!_line) { + _line = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.width, 1)]; + _line.backgroundColor = LINECOLOUR; + } + return _line; +} + +- (UILabel *)textLab +{ + if (!_textLab) { + _textLab = [[UILabel alloc] initWithFrame:CGRectMake(20, 10, (self.width-40)/3*2, 30)]; + [_textLab setImageRoundRadius:5 BorderWidth:0.5 borderColor:UIColorFromRGB(0x9f9f9f)]; + _textLab.font = FFONT12; + _textLab.textColor = UIColorFromRGB(0x9f9f9f); + _textLab.text = @" 说点什么吧..."; + } + return _textLab; +} + +- (UIButton *)msgBtn +{ + if (!_msgBtn) { + _msgBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _msgBtn.frame = CGRectMake(_textLab.right, 10, (self.width-40)/3/3, 30); +// _msgBtn.backgroundColor = [UIColor grayColor]; + [_msgBtn setImage:[UIImage imageNamed:@"yq_msg"] forState:UIControlStateNormal]; + } + return _msgBtn; +} + +- (UIButton *)shareBtn +{ + if (!_shareBtn) { + _shareBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _shareBtn.frame = CGRectMake(_msgBtn.right, 10, (self.width-40)/3/3, 30); +// _shareBtn.backgroundColor = [UIColor greenColor]; + [_shareBtn setImage:[UIImage imageNamed:@"yq_share"] forState:UIControlStateNormal]; + [_shareBtn addTarget:self action:@selector(shareBtnClicked) forControlEvents:UIControlEventTouchUpInside]; + } + return _shareBtn; +} + +- (UIButton *)collectionBtn +{ + if (!_collectionBtn) { + _collectionBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _collectionBtn.frame = CGRectMake(_shareBtn.right, 10, (self.width-40)/3/3, 30); +// _collectionBtn.backgroundColor = [UIColor yellowColor]; + [_collectionBtn setImage:[UIImage imageNamed:@"yq_collect_hui"] forState:UIControlStateNormal]; + + [_collectionBtn addTarget:self action:@selector(collectionBtnClicked) forControlEvents:UIControlEventTouchUpInside]; + + + } + return _collectionBtn; +} + +- (UILabel *)msgNumLab +{ + if (!_msgNumLab) { + _msgNumLab = [[UILabel alloc] initWithFrame:CGRectMake(_msgBtn.width-15, 0, 15, 15)]; + _msgNumLab.backgroundColor = [UIColor redColor]; + [_msgNumLab setImageRoundRadius:7.5 BorderWidth:0 borderColor:nil]; + _msgNumLab.font = SYSTEMFONT(10); + _msgNumLab.textColor = [UIColor whiteColor]; + _msgNumLab.textAlignment = NSTextAlignmentCenter; + _msgNumLab.adjustsFontSizeToFitWidth = YES; + } + return _msgNumLab; +} + +- (void)setParams:(NSDictionary *)params +{ + _params = params; + _collection = ToString(params[@"collection"]); + if ([params[@"collection"] intValue] == 0) { + [_collectionBtn setImage:[UIImage imageNamed:@"yq_collect_hui"] forState:UIControlStateNormal]; + }else{ + [_collectionBtn setImage:[UIImage imageNamed:@"yq_collect"] forState:UIControlStateNormal]; + } + self.shareView.params = params; + +} + +- (void)setCount:(id)count +{ + + if ([count intValue] <= 99) { + _msgNumLab.text = ToString(count); + }else{ + _msgNumLab.text = @"99+"; + } + if ([count intValue]) { + _msgNumLab.hidden = NO; + }else{ + _msgNumLab.hidden = YES; + } +} + + +#pragma mark —————— 收藏 —————— + +- (void)collectionBtnClicked +{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:NetworkFailure toView:self.firstViewController.view]; + return; + } + + if (!STR_IS_NOT_EMPTY(_params[@"yuanquanid"])) { + return; + } + + NSString *_url; + if ([_collection isEqualToString:@"0"]) { + _url = URL_yuanquan_add_collection; + }else{ + _url = URL_yuanquan_delete_collection; + } + + NSDictionary *parameters = @{ + @"userid":USER_USERID, + @"yuanquanid":_params[@"yuanquanid"], + @"version":APP_VERSION, + }; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:_url block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + if ([resultDic[@"retcode"] intValue] == 1) { + if ([_collection isEqualToString:@"0"]) { + _collection = @"1"; + [MBProgressHUD showSuccess:@"收藏成功" toView:self.firstViewController.view]; + [_collectionBtn setImage:[UIImage imageNamed:@"yq_collect"] forState:UIControlStateNormal]; + }else{ + _collection = @"0"; + [MBProgressHUD showSuccess:@"取消收藏成功" toView:self.firstViewController.view]; + [_collectionBtn setImage:[UIImage imageNamed:@"yq_collect_hui"] forState:UIControlStateNormal]; + } + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.firstViewController.view]; + } + } + }]; +} + +#pragma mark —————— 分享 —————— + +- (void)shareBtnClicked +{ + [self.shareView show]; +} + +- (QYShareView *)shareView +{ + if (!_shareView) { + _shareView = [[QYShareView alloc]init]; + _shareView.type = @"4"; + } + return _shareView; +} + + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/YuanquanDetailHeaderView.h" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/YuanquanDetailHeaderView.h" new file mode 100644 index 0000000000000000000000000000000000000000..6cf9f7ced08c61640f7f1c927f12b0c5853019e6 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/YuanquanDetailHeaderView.h" @@ -0,0 +1,52 @@ +// +// YuanquanDetailHeaderView.h +// JQQY +// +// Created by chason on 2018/1/2. +// Copyright © 2018年 jiuqi. All rights reserved. +// + +#import + + +@interface YuanquanDetailHeaderView : UIView + +@property (nonatomic, strong) UIView *bgView; + +/** + 头像 + */ +@property (nonatomic, strong) UIImageView *avatarView; + +/** + 昵称 + */ +@property (nonatomic, strong) UILabel *nicknameLab; + +/** + 时间 + */ +@property (nonatomic, strong) UILabel *timeLab; + +/** + 位置 + */ +@property (nonatomic, strong) UILabel *positionLab; + +/** + 关注按钮 + */ +@property (nonatomic, strong) UIButton *ConcernBtn; + +/** + 分割线1 + */ +@property (nonatomic, strong) UIView *line1; + + + + +@property (nonatomic,retain)NSDictionary *params; + + +@end diff --git "a/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/YuanquanDetailHeaderView.m" "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/YuanquanDetailHeaderView.m" new file mode 100644 index 0000000000000000000000000000000000000000..73439e9597f1ae31bf26ed565f26ca422f553b89 --- /dev/null +++ "b/JQQY/Modules/Discover\357\274\210\345\217\221\347\216\260\357\274\211/View/YuanquanDetailHeaderView.m" @@ -0,0 +1,206 @@ +// +// YuanquanDetailHeaderView.m +// JQQY +// +// Created by chason on 2018/1/2. +// Copyright © 2018年 jiuqi. All rights reserved. +// + +#import "YuanquanDetailHeaderView.h" + + +@interface YuanquanDetailHeaderView () +{ + //""初始状态 0关注 1好友 2拉黑 + NSString *_otherid; + NSString *_firendship; + +} +@end + +@implementation YuanquanDetailHeaderView + +- (instancetype)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + [self addSubview:self.bgView]; + [self.bgView addSubview:self.avatarView]; + [self.bgView addSubview:self.nicknameLab]; + [self.bgView addSubview:self.timeLab]; + [self.bgView addSubview:self.positionLab]; + [self.bgView addSubview:self.ConcernBtn]; + [self.bgView addSubview:self.line1]; + + + } + return self; +} + +- (UIView *)bgView +{ + if (!_bgView) { + _bgView = [[UIView alloc] initWithFrame:CGRectMake(10, 10, self.width-20, self.height-10)]; + _bgView.backgroundColor = [UIColor whiteColor]; + } + return _bgView; +} + +- (UIImageView *)avatarView +{ + if (!_avatarView) { + _avatarView = [[UIImageView alloc] initWithFrame:CGRectMake(10, 10, 60, 60)]; +// _avatarView.backgroundColor = [UIColor orangeColor]; + _avatarView.image = USER_AVATAR_DEFAULT; + [_avatarView setImageRoundRadius:5 BorderWidth:0 borderColor:nil]; + } + return _avatarView; +} + +- (UILabel *)nicknameLab +{ + if (!_nicknameLab) { + _nicknameLab = [[UILabel alloc] initWithFrame:CGRectMake(_avatarView.right+10, 20, self.bgView.width/5*3-80-10, 20)]; +// _nicknameLab.backgroundColor = [UIColor orangeColor]; + _nicknameLab.font = FFONT16; + } + return _nicknameLab; +} + +- (UILabel *)timeLab +{ + if (!_timeLab) { + _timeLab = [[UILabel alloc] initWithFrame:CGRectMake(_avatarView.right+10, _nicknameLab.bottom, self.bgView.width/5*3-80-10, 20)]; +// _timeLab.backgroundColor = [UIColor redColor]; + _timeLab.font = SYSTEMFONT(10); + _timeLab.textColor = UIColorFromRGB(0x9f9f9f); + } + return _timeLab; +} + +- (UILabel *)positionLab +{ + if (!_positionLab) { + _positionLab = [[UILabel alloc] initWithFrame:CGRectMake(_nicknameLab.right, 30, self.bgView.width/5*2-self.bgView.width/3/2, 20)]; +// _positionLab.backgroundColor = [UIColor greenColor]; + _positionLab.font = SYSTEMFONT(10); + _positionLab.textColor = UIColorFromRGB(0x9f9f9f); + _positionLab.textAlignment = NSTextAlignmentCenter; + } + return _positionLab; +} + +- (UIButton *)ConcernBtn +{ + if (!_ConcernBtn) { + _ConcernBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _ConcernBtn.frame = CGRectMake(_positionLab.right, 25, self.bgView.width/3/2, 30); + [_ConcernBtn setImageRoundRadius:5 BorderWidth:1 borderColor:PURPLECOLOUR]; + _ConcernBtn.titleLabel.font = SYSTEMFONT(10); + [_ConcernBtn addTarget:self action:@selector(ConcernBtnClicked) forControlEvents:UIControlEventTouchUpInside]; + + } + return _ConcernBtn; +} + +- (UIView *)line1 +{ + if (!_line1) { + _line1 = [[UIView alloc] initWithFrame:CGRectMake(10, _avatarView.bottom+10, self.bgView.width-20, 0.5)]; + _line1.backgroundColor = LINECOLOUR; + } + return _line1; +} + + +- (void)ConcernBtnClicked +{ + + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:NetworkFailure toView:self.firstViewController.view]; + return; + } + if([_otherid isEqualToString:USER_USERID]){ + [MBProgressHUD showError:@"别人等你关注噢^_^" toView:self.firstViewController.view]; + return; + } + + if (!STR_IS_NOT_EMPTY(_otherid)) { + return; + } + + + NSString *action;//1关注 2取消 + if ([_firendship isEqualToString:@""]) { + action = @"1"; + _firendship = @"1"; + }else if ([_firendship isEqualToString:@"0"] || [_firendship isEqualToString:@"1"]) { + action = @"2"; + _firendship = @""; + }else if ([_firendship isEqualToString:@"2"] ) { + return; + } + + [self setconcernSata:_firendship]; + + NSDictionary *parameters = @{ + @"userID":USER_USERID, + @"otherID":_otherid, + @"action":action, + @"version":APP_VERSION + }; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_user_friendadd block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + if ([resultDic[@"retcode"] intValue] == 1) { + + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.firstViewController.view]; + } + } + }]; +} + + +- (void)setParams:(NSDictionary *)params +{ + _params = params; + + //""初始状态 0关注 1好友 2拉黑 + _otherid = ToString(_params[@"userid"]); + _firendship =ToString(_params[@"firendship"]); + + + + [_avatarView sd_setImageWithURL:[NSURL URLWithString:params[@"avatar"]] placeholderImage:USER_AVATAR_DEFAULT]; + _nicknameLab.text = params[@"nickname"]; + _timeLab.text = params[@"time"]; + _positionLab.text = params[@"position"]; + [self setconcernSata:ToString(params[@"firendship"])]; + if ([ToString(params[@"userid"]) isEqualToString:USER_USERID]) { + _ConcernBtn.hidden = YES; + } +} + + + - (void)setconcernSata:(NSString *)state + { + if ([state isEqualToString:@""]) { + [_ConcernBtn setBackgroundColor:PURPLECOLOUR]; + [_ConcernBtn setImage:[UIImage imageNamed:@"yq_concern_bai"] forState:UIControlStateNormal]; + [_ConcernBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; + [_ConcernBtn setTitle:@"关注" forState:UIControlStateNormal]; + }else if ([state isEqualToString:@"0"] || [state isEqualToString:@"1"]) { + [_ConcernBtn setBackgroundColor:[UIColor whiteColor]]; + [_ConcernBtn setImage:[UIImage imageNamed:@"yq_concern"] forState:UIControlStateNormal]; + [_ConcernBtn setTitleColor:PURPLECOLOUR forState:UIControlStateNormal]; + [_ConcernBtn setTitle:@"已关注" forState:UIControlStateNormal]; + }else if ([state isEqualToString:@"2"] ) { + [_ConcernBtn setBackgroundColor:PURPLECOLOUR]; + [_ConcernBtn setImage:[UIImage imageNamed:@"yq_concern_bai"] forState:UIControlStateNormal]; + [_ConcernBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; + [_ConcernBtn setTitle:@"已拉黑" forState:UIControlStateNormal]; + } + } + + +@end diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/.DS_Store" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..a7153cb54ac43d3da73698f69b4fe74267070532 Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/.DS_Store" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Controller/.DS_Store" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Controller/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..c433f308a66b48df57a59e6b4344c90bab8ee970 Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Controller/.DS_Store" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Controller/HomeViewController.h" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Controller/HomeViewController.h" new file mode 100644 index 0000000000000000000000000000000000000000..a9cc1705c2f560e0d4c6e46e75185d7715035856 --- /dev/null +++ "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Controller/HomeViewController.h" @@ -0,0 +1,21 @@ +// +// HomeViewController.h +// JQQY +// +// Created by chason on 2017/11/16. +// Copyright © 2017年 jiuqi. All rights reserved. +// + + +#import "RootViewController.h" + +@interface HomeViewController : RootViewController + +- (void)loadDataSource; + +@property (nonatomic, assign) int page; + +- (void)getNewMessage:(BOOL)isNew; + + +@end diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Controller/HomeViewController.m" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Controller/HomeViewController.m" new file mode 100644 index 0000000000000000000000000000000000000000..0513e6f2ed4b28f925adfc6e6bd40324239cdaad --- /dev/null +++ "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Controller/HomeViewController.m" @@ -0,0 +1,327 @@ +// +// HomeViewController.m +// JQQY +// +// Created by chason on 2017/11/16. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "HomeViewController.h" +#import "MapViewController.h" +#import "MainTabBarController.h" +#import "XLCardSwitch.h" +#import "CustomNavigationView.h" +#import "QYGuideView.h" + +#import "BuyBeanController.h" + + +@interface HomeViewController () +{ + XLCardSwitch *_cardSwitch; + UIImageView *_imageView; +} +@property (nonatomic, strong) NSMutableArray *datas; +@property (nonatomic, strong) CustomNavigationView *customNavigationView; +@property (nonatomic, strong) UIButton *nearbyBtn; +@property (nonatomic, strong) UIButton *messageBtn; +@property (nonatomic, retain) UILabel *redPoint; +@property (nonatomic, strong) UIButton *refreshBtn; + + + +@property (nonatomic,retain)QYGuideView *qyGuideView; +@property (nonatomic,retain)NSMutableArray *guideArray; + + + + +@end + +@implementation HomeViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.statusBarStyle = UIStatusBarStyleDefault; + self.isHidenNaviBar = YES; + self.view.backgroundColor = [UIColor whiteColor]; + _page = 0; + _datas = [NSMutableArray array]; + [self loadDataSource]; + [self addImageView]; + [self addCardSwitch]; + //接收登录或退出时发送的通知 + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(refreshHome) name:@"refreshHome" object:nil]; + + + // [self.qyGuideView show]; + +} + +- (void)viewWillAppear:(BOOL)animated +{ + [super viewWillAppear:animated]; + + MainTabBarController *mainVC = (MainTabBarController *)self.tabBarController; + [mainVC setupUnreadMessageCount]; +} +- (void)refreshHome +{ + NSLog(@"接收到了通知"); + _page = 0; + [self loadDataSource]; +} + +- (CustomNavigationView *)customNavigationView +{ + if (!_customNavigationView) { + _customNavigationView = [[CustomNavigationView alloc] initWithFrame:CGRectMake(0, 0, KSCREEN_HEIGHT, kTopHeight)]; + _customNavigationView.backgroundColor = [UIColor clearColor]; + _customNavigationView.titleLab.text = @"首页"; + _customNavigationView.titleLab.textColor = PURPLECOLOUR; + } + return _customNavigationView; +} + +- (UIButton *)nearbyBtn +{ + if (!_nearbyBtn) { + _nearbyBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _nearbyBtn.frame = CGRectMake(10, _customNavigationView.bottom, 40, 40); + [_nearbyBtn setImage:[UIImage imageNamed:@"near"] forState:UIControlStateNormal]; + [_nearbyBtn addTarget:self action:@selector(gotoNearPerson) forControlEvents:UIControlEventTouchUpInside]; + [self.guideArray addObject:_nearbyBtn]; + } + return _nearbyBtn; +} + +- (UIButton *)messageBtn +{ + if (!_messageBtn) { + _messageBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _messageBtn.frame = CGRectMake(KSCREEN_WIDTH-50, _customNavigationView.bottom, 40, 40); + [_messageBtn setImage:[UIImage imageNamed:@"message"] forState:UIControlStateNormal]; + [_messageBtn addTarget:self action:@selector(gotoMessage) forControlEvents:UIControlEventTouchUpInside]; + [self.guideArray addObject:_messageBtn]; + + } + return _messageBtn; +} + +- (void)gotoNearPerson +{ + + BuyBeanController *buy = [[BuyBeanController alloc]init]; + [buy setHidesBottomBarWhenPushed:YES]; + [self.navigationController pushViewController:buy animated:YES]; + return; + + + if (![MapManager judgeLocation]) { + return; + } + MapViewController *mapView = [[MapViewController alloc]init]; + [mapView setHidesBottomBarWhenPushed:YES]; + [self.navigationController pushViewController:mapView animated:YES]; +} + +- (void)gotoMessage +{ + if (ISLOGIN) { + ConversationListController *converVC = [[ConversationListController alloc]init]; + [ChatDemoHelper shareHelper].conversationListVC = converVC; + [converVC setHidesBottomBarWhenPushed:YES]; + [self.navigationController pushViewController:converVC animated:YES]; + }else{ + [ZCTools goLoginSelf:self SeccessBlock:NULL]; + } +} + +- (UILabel *)redPoint +{ + if (!_redPoint) { + _redPoint = [[UILabel alloc]initWithFrame:CGRectMake(_messageBtn.right-14,_messageBtn.top, 10,10)]; + _redPoint.backgroundColor = CTHEMECOLOR; + [_redPoint setImageRoundRadius:5 BorderWidth:0 borderColor:NULL]; + _redPoint.hidden = YES; + } + return _redPoint; +} + +- (void)getNewMessage:(BOOL)isNew +{ + [self.view bringSubviewToFront:self.redPoint]; + self.redPoint.hidden = isNew; +} + +- (void)loadDataSource +{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:NetworkFailure toView:self.view]; + return; + } + if (_page == 0) { + [MBProgressHUD showMessag:nil toView:self.view]; + } + NSDictionary *Params = @{@"userID":STR_IS_NOT_EMPTY(USER_USERID)?USER_USERID:@"00000000000000000000000000000000", + @"page":[NSString stringWithFormat:@"%d",_page], + @"pagesize":@"10", + @"version":APP_VERSION}; + + + [ZCNetRequestManager postRequestWithParameters:Params subUrl:URL_homepagenew block:^(NSDictionary *resultDic, NSError *error) { + [MBProgressHUD hideHUDForView:self.view animated:YES]; + if (resultDic) { + if ([resultDic[@"retcode"] intValue] == 1) { + self.refreshBtn.hidden = YES; + if (_page == 0) { + [_datas removeAllObjects]; + } + for (NSDictionary *dict in resultDic[@"message"]) { + XLCardItem *item = [[XLCardItem alloc] init]; + [item initXLCardItemWithDict:dict]; + [_datas addObject:item]; + } + [_cardSwitch reloadCollectionView]; + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; +} + +#pragma mark - 刷新按钮 + +- (UIButton *)refreshBtn +{ + if (!_refreshBtn) { + _refreshBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _refreshBtn.frame = CGRectMake((KSCREEN_WIDTH-50)/2, (KSCREEN_HEIGHT-50)/2, 50, 50); + [_refreshBtn setImage:[UIImage imageNamed:@"home_refre"] forState:0]; + [_refreshBtn addTarget:self action:@selector(refreshBtnClicked) forControlEvents:UIControlEventTouchUpInside]; + } + return _refreshBtn; +} + +- (void)refreshBtnClicked +{ + _page = 0; + [self loadDataSource]; +} + +#pragma mark - 新卡片 + +- (void)addImageView { + _imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH, KSCREEN_HEIGHT-kTabBarHeight)]; + _imageView.image = [UIImage imageNamed:@"home_background"]; + [self.view addSubview:_imageView]; + [self.view addSubview:self.customNavigationView]; +} + +- (void)addCardSwitch { + //设置卡片浏览器 + _cardSwitch = [[XLCardSwitch alloc] initWithFrame:CGRectMake(0, _customNavigationView.bottom, KSCREEN_WIDTH, KSCREEN_HEIGHT-kTopHeight-kTabBarHeight)]; + _cardSwitch.items = _datas; + _cardSwitch.delegate = self; + //分页切换 + _cardSwitch.pagingEnabled = YES; + [self.view addSubview:_cardSwitch]; + [self.view addSubview:self.nearbyBtn]; + [self.view addSubview:self.messageBtn]; + [self.view addSubview:self.redPoint]; + [self.view addSubview:self.refreshBtn]; +} + +#pragma mark - +#pragma mark CardSwitchDelegate + +- (void)XLCardSwitchDidSelectedAt:(NSInteger)index { + NSLog(@"滑动到了:%zd",index); + if (index == _datas.count-3) { + _page += 1; + [self loadDataSource]; + } +} + +- (void)XLCardClickedAt:(NSInteger)index +{ + NSLog(@"点击了:%zd",index); + if (!ISLOGIN) { + [ZCTools goLoginSelf:self SeccessBlock:NULL]; + return; + } + XLCardItem *item = _cardSwitch.items[index]; + [ZCTools toPersonalHome:item.userid homeNickname:item.nickname homeSelf:self]; +} + + + +#pragma mark - **************** 新手指导 + +- (NSMutableArray *)guideArray +{ + if (!_guideArray) { + _guideArray = [[NSMutableArray alloc]initWithCapacity:0]; + } + return _guideArray; +} + + +- (QYGuideView *)qyGuideView +{ + if (!_qyGuideView) { + _qyGuideView = [[QYGuideView alloc]initWithFrame:CGRectMake(0, 0,KSCREEN_WIDTH,KSCREEN_HEIGHT)]; + _qyGuideView.delegate = self; + _qyGuideView.dataSource = self; + } + return _qyGuideView; +} + +/** + Item的个数 + */ +- (NSInteger)numberOfItemsInGuideMaskView:(QYGuideView *)guideMaskView +{ + return 2; +} +/** + 每个Item对应的的view + */ +- (UIView *)guideMaskView:(QYGuideView *)guideMaskView viewForItemAtIndex:(NSInteger)index +{ + return self.guideArray[index]; +} +/** + 每个Item对应的的描述 + */ +- (NSString *)guideMaskView:(QYGuideView *)guideMaskView descriptionLabelForItemAtIndex:(NSInteger)index +{ + NSArray *arr = @[@"附近的帅哥美女!",@"我的通知在这呢!"]; + return arr[index]; +} + +- (CGFloat)guideMaskView:(QYGuideView *)guideMaskView cornerRadiusForItemAtIndex:(NSInteger)index; +{ + return 40; +} + +- (UIFont *)guideMaskView:(QYGuideView *)guideMaskView fontForDescriptionLabelAtIndex:(NSInteger)index +{ + return [UIFont systemFontOfSize:12]; +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; +} + +/* +#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/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Controller/MapViewController.h" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Controller/MapViewController.h" new file mode 100644 index 0000000000000000000000000000000000000000..7ba0f62f96bfafe982daeca6e0c8d1790039680f --- /dev/null +++ "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Controller/MapViewController.h" @@ -0,0 +1,13 @@ +// +// MapViewController.h +// JQQY +// +// Created by Shmily on 2017/11/18. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "RootViewController.h" + +@interface MapViewController : RootViewController + +@end diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Controller/MapViewController.m" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Controller/MapViewController.m" new file mode 100644 index 0000000000000000000000000000000000000000..90e199b74161006d402b227b5be2e13f44fc5606 --- /dev/null +++ "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Controller/MapViewController.m" @@ -0,0 +1,376 @@ +// +// MapViewController.m +// JQQY +// +// Created by Shmily on 2017/11/18. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "MapViewController.h" +#import "MapManager.h" +#import "QYRoundAnnotationView.h" +#import "QYPointAnnotation.h" +#import +#import "BMKClusterManager.h" //点聚合管理类,使用百度的点聚合算法 +#import "QYCluster.h" +#import "CordialViewController.h" + + +@interface MapViewController () +{ + BMKMapView* _mapView; + + NSMutableArray *_clusterCaches;// + BMKClusterManager *_clusterManager; //点聚合管理类 + + NSInteger _clusterZoom;//聚合级别 + + CLLocationCoordinate2D _coor; + +} + + +@property (nonatomic,retain)UIButton *refreshBtn; +@property (nonatomic,retain)UIButton *refreshDing; +@property (nonatomic,retain)UIButton *addBtn; +@property (nonatomic,retain)UIButton *deateBtn; + + + +@end + +@implementation MapViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.isHidenNaviBar = NO; + self.title = @"附近的人"; + + + + _mapView = [[BMKMapView alloc]initWithFrame:CGRectMake(0,0,KSCREEN_WIDTH, KSCREEN_HEIGHT-kTopHeight)]; + _mapView.delegate = self; + _mapView.mapType=BMKMapTypeStandard; + _mapView.showMapScaleBar = YES; + _mapView.zoomLevel = 17; + [self.view addSubview:_mapView]; + + + + _clusterManager = [[BMKClusterManager alloc] init]; + //在此处理正常结果 + _clusterCaches = [[NSMutableArray alloc] init]; + for (NSInteger i = 3; i < 22; i++) { + [_clusterCaches addObject:[NSMutableArray array]]; + } + + + [self.view addSubview:self.refreshBtn]; + [self.view addSubview:self.refreshDing]; + [self.view addSubview:self.addBtn]; + [self.view addSubview:self.deateBtn]; + + // Do any additional setup after loading the view. +} + +-(void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + _mapView.delegate = self; // 此处记得不用的时候需要置nil,否则影响内存的释放 + [_mapView viewWillAppear]; +} + +-(void)viewWillDisappear:(BOOL)animated { + [super viewWillDisappear:animated]; + _mapView.delegate = nil; // 不用时,置nil + [_mapView viewWillDisappear]; +} + + +- (UIButton *)refreshBtn +{ + if (!_refreshBtn) { + _refreshBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _refreshBtn.frame = CGRectMake(KSCREEN_WIDTH-40,40,30,30); + [_refreshBtn setImage:[UIImage imageNamed:@"refresh"] forState:0]; + _refreshBtn.backgroundColor = [UIColor whiteColor]; + [_refreshBtn setImageRoundRadius:0 BorderWidth:1 borderColor:LINECOLOUR]; + _refreshBtn.tag = 1; + [_refreshBtn addTarget:self action:@selector(refreshMap:) forControlEvents:UIControlEventTouchUpInside]; + } + return _refreshBtn; +} +- (UIButton *)refreshDing +{ + if (!_refreshDing) { + _refreshDing = [UIButton buttonWithType:UIButtonTypeCustom]; + _refreshDing.frame = CGRectMake(KSCREEN_WIDTH-40,_refreshBtn.bottom,30,30); + [_refreshDing setImage:[UIImage imageNamed:@"refresh_ding"] forState:0]; + _refreshDing.backgroundColor = [UIColor whiteColor]; + [_refreshDing setImageRoundRadius:0 BorderWidth:1 borderColor:LINECOLOUR]; + _refreshDing.tag =2; + [_refreshDing addTarget:self action:@selector(refreshMap:) forControlEvents:UIControlEventTouchUpInside]; + } + return _refreshDing; +} + + +- (void)refreshMap:(UIButton *)b +{ + if (b.tag ==1) { + __weak typeof(self) weakSelf = self; + [[MapManager instance] startlocation:NO locationSuccess:^(NSString * longitude, NSString * latitude,NSError *error) { + if (!error) { + + [weakSelf requestData:longitude Lat:latitude]; + [weakSelf uploadArea:longitude Lat:latitude]; + _coor.latitude = [latitude doubleValue]; + _coor.longitude = [longitude doubleValue]; + _mapView.centerCoordinate = _coor; + [_mapView setCenterCoordinate:_coor animated:YES]; + }else{ + [MBProgressHUD showError:@"定位失败啦" toView:self.view]; + } + } addressSuccess:NULL]; + }else if (b.tag ==2){ + [_mapView setCenterCoordinate:_coor animated:YES]; + } + + +} +- (UIButton *)addBtn +{ + if (!_addBtn) { + _addBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _addBtn.frame = CGRectMake(KSCREEN_WIDTH-40,KSCREEN_HEIGHT-90-kTopHeight,30,30); + [_addBtn setImage:[UIImage imageNamed:@"add_map"] forState:0]; + _addBtn.backgroundColor = [UIColor whiteColor]; + [_addBtn setImageRoundRadius:0 BorderWidth:1 borderColor:LINECOLOUR]; + _addBtn.tag =1; + [_addBtn addTarget:self action:@selector(TwoBtnClicked:) forControlEvents:UIControlEventTouchUpInside]; + } + return _addBtn; +} + +- (UIButton *)deateBtn +{ + if (!_deateBtn) { + _deateBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _deateBtn.frame = CGRectMake(KSCREEN_WIDTH-40,_addBtn.bottom,30,30); + [_deateBtn setImage:[UIImage imageNamed:@"det_map"] forState:0]; + _deateBtn.backgroundColor = [UIColor whiteColor]; + [_deateBtn setImageRoundRadius:0 BorderWidth:1 borderColor:LINECOLOUR]; + _deateBtn.tag =2; + [_deateBtn addTarget:self action:@selector(TwoBtnClicked:) forControlEvents:UIControlEventTouchUpInside]; + + } + return _deateBtn; +} + +- (void)TwoBtnClicked:(UIButton *)b +{ + if (b.tag ==1) {//+ + + if (_clusterZoom>21) { + [MBProgressHUD showError:@"地图已经放大到最大级别" toView:self.view]; + return; + } + _mapView.zoomLevel = _clusterZoom+1; + }else if (b.tag ==2){//-- + if (_clusterZoom<=4) { + [MBProgressHUD showError:@"地图已经缩小到最小级别" toView:self.view]; + return; + } + _mapView.zoomLevel = _clusterZoom-1; + } + +} + + + +- (void)mapViewDidFinishLoading:(BMKMapView *)mapView { + + [self refreshMap:_refreshBtn]; +} + + +- (BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id )annotation +{ + + if ([annotation isKindOfClass:[QYPointAnnotation class]]){ + QYRoundAnnotationView *newAnnotationView =(QYRoundAnnotationView*)[mapView dequeueReusableAnnotationViewWithIdentifier:@"RoundmyAnnotation"]; + if (newAnnotationView==nil) + { + newAnnotationView=[[ QYRoundAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"RoundmyAnnotation"]; + } + newAnnotationView.canShowCallout = NO; + newAnnotationView.draggable = NO; + + QYPointAnnotation *potint = (QYPointAnnotation *)annotation; + newAnnotationView.pointAtion = potint; + return newAnnotationView; + + } + return nil; +} +#pragma mark --private Method--当点击大头针时 +- (void)mapView:(BMKMapView *)mapView didSelectAnnotationView:(BMKAnnotationView *)view +{ + QYRoundAnnotationView *headView = (QYRoundAnnotationView *)view; + BMKCluster *cluster = headView.pointAtion.cluster; + + if (!ISLOGIN) { + + __weak typeof(self) weakSelf = self; + [ZCTools goLoginSelf:self SeccessBlock:^{ + [weakSelf refreshMap:_refreshBtn]; + }]; + return; + } + if (cluster.size ==1) { + QYCluster *qyCluster = [[cluster.clusterItems firstObject] cluster]; + [ZCTools toPersonalHome:qyCluster.userID homeNickname:qyCluster.nickname homeSelf:self]; + }else{ + CordialViewController *coordialVC = [[CordialViewController alloc]init]; + coordialVC.name = [NSString stringWithFormat:@"(%lu)人在此处",(unsigned long)cluster.size]; + coordialVC.data = cluster.clusterItems; + [self.navigationController pushViewController:coordialVC animated:YES]; + + } +} +#pragma mark - **************** 上传经纬度 + +- (void)uploadArea:(NSString *)lng Lat:(NSString *)lat{ + + if (!ISLOGIN) { + return; + } + + NSDictionary *params = @{@"userID":USER_USERID, + @"lng":lng, + @"lat":lat, + @"version":APP_VERSION}; + [ZCNetRequestManager postRequestWithParameters:params subUrl:URL_lngandlat block:^(NSDictionary *resultDic, NSError *error) { + if(resultDic){ + NSLog(@"经纬度上传成功"); + } + }]; +} + + + + +#pragma mark ————— 请求数据 ————— + +- (void)requestData:(NSString *)longitude Lat:(NSString *)latitude{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:NetworkFailure toView:self.view]; + return; + } + NSDictionary *parameters = @{ + @"userid":HaveUserId, + @"lat":latitude, + @"lng":longitude, + @"pagesize":@"50", + @"page":@"0", + @"version":APP_VERSION, + }; + [MBProgressHUD showMessag:nil toView:self.view]; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_near_list block:^(NSDictionary *resultDic, NSError *error) { + [MBProgressHUD hideHUDForView:self.view animated:YES]; + if (resultDic) { + if ([resultDic[@"retcode"] intValue] == 1) { + + + if (ARRAY_IS_NOT_EMPTY(resultDic[@"message"])) { + + [_clusterManager clearClusterItems]; + for (NSDictionary *dict in resultDic[@"message"]) { + QYCluster *cluster = [[QYCluster alloc] init]; + [cluster initData:dict]; + [self addAnnoWithPT:cluster]; + } + [self updateClusters]; + } + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; +} + +#pragma mark - 添加PT +- (void)addAnnoWithPT:(QYCluster *)cluster { + + BMKClusterItem *clusterItem = [[BMKClusterItem alloc] init]; + clusterItem.coor = cluster.pt; + clusterItem.cluster = cluster; + [_clusterManager addClusterItem:clusterItem]; +} + +- (void)mapView:(BMKMapView *)mapView onDrawMapFrame:(BMKMapStatus *)status { + if (_clusterZoom != 0 && _clusterZoom != (NSInteger)mapView.zoomLevel) { + [self updateClusters]; + } +} + +//更新聚合状态 +- (void)updateClusters { + _clusterZoom = (NSInteger)_mapView.zoomLevel; + @synchronized(_clusterCaches) { + __block NSMutableArray *clusters = [_clusterCaches objectAtIndex:(_clusterZoom - 3)]; + if (clusters.count > 0) { + [_mapView removeAnnotations:_mapView.annotations]; + [_mapView addAnnotations:clusters]; + } else { + dispatch_async(dispatch_get_global_queue(0, 0), ^{ + + ///获取聚合后的标注 + __block NSArray *array = [_clusterManager getClusters:_clusterZoom]; + + dispatch_async(dispatch_get_main_queue(), ^{ + //聚合后的数组 + for (BMKCluster *item in array) { + QYPointAnnotation *annotation = [[QYPointAnnotation alloc] init]; + annotation.coordinate = item.coordinate; + annotation.size = item.size; + annotation.cluster = item; + [clusters addObject:annotation]; + + } + [_mapView removeAnnotations:_mapView.annotations]; + [_mapView addAnnotations:clusters]; + }); + }); + } + } +} + + + + + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} +- (void)dealloc { + if (_mapView) { + _mapView = nil; + } +} + +/* + [ZCTools toPersonalHome:_model.userID homeNickname:_model.nickname homeSelf:self.firstViewController]; + + + #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/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Controller/OtherViewController.h" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Controller/OtherViewController.h" new file mode 100644 index 0000000000000000000000000000000000000000..3e0ff389e55d647ba0701c7b16aaadee1b74e5ea --- /dev/null +++ "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Controller/OtherViewController.h" @@ -0,0 +1,17 @@ +// +// OtherViewController.h +// JQQY +// +// Created by chason on 2017/11/24. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "RootViewController.h" + +@interface OtherViewController : RootViewController + +@property(nonatomic,copy)void (^AcctionSuccessBlock)(void); + +@property (nonatomic, strong) NSString *uid; +- (void)requesGift; +@end diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Controller/OtherViewController.m" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Controller/OtherViewController.m" new file mode 100644 index 0000000000000000000000000000000000000000..9a2ceb36c95fad61b1d376a46b083aa3076538e3 --- /dev/null +++ "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Controller/OtherViewController.m" @@ -0,0 +1,488 @@ +// +// OtherViewController.m +// JQQY +// +// Created by chason on 2017/11/24. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "OtherViewController.h" + +#import "ProfileHeaderView.h" +#import "OtherPhotoView.h" +#import "UIImageView+LBBlurredImage.h" +#import "DeclarationView.h" +#import "DetailView.h" +#import "SpouseView.h" +#import "InterestView.h" +#import "VideoView.h" +#import "OtherGiftView.h" +#import "QYShareView.h" +#import "OtherFooterView.h" +#import "CustomNavigationView.h" +#import "IntroduceViewController.h" +@interface OtherViewController () +{ + CGFloat _scale; + UIActionSheet *actionSheet; +} + +@property (nonatomic,retain)UIScrollView *mScrollView; +@property (nonatomic, strong) UIImageView *backGroundIV; +@property (nonatomic,retain)UIView *bgView; + +@property (nonatomic, strong) CustomNavigationView *NavBarView; + +@property (nonatomic,retain)ProfileHeaderView *profileView; +@property (nonatomic,retain)OtherPhotoView *photoView; +@property (nonatomic,retain)DeclarationView *declarView; +@property (nonatomic,retain)DetailView *detailView; +@property (nonatomic,retain)SpouseView *requestView; +@property (nonatomic,retain)InterestView *interView; +@property (nonatomic,retain)InterestView *markView; +@property (nonatomic,retain)VideoView *videoView; +@property (nonatomic,retain)OtherGiftView *gitftView; +@property (nonatomic,retain)OtherFooterView *footerView; +@property (nonatomic, strong)QYShareView *shareView; + +@end + +@implementation OtherViewController + +- (void)viewDidLoad { + + [super viewDidLoad]; + self.isHidenNaviBar = YES; + [self.view addSubview:self.backGroundIV]; + [self.view addSubview:self.bgView]; + [self.view addSubview:self.mScrollView]; + + [self.mScrollView addSubview:self.profileView]; + [self.mScrollView addSubview:self.photoView]; + [self.mScrollView addSubview:self.declarView]; + + [self.mScrollView addSubview:self.detailView]; + [self.mScrollView addSubview:self.requestView]; + [self.mScrollView addSubview:self.interView]; + [self.mScrollView addSubview:self.markView]; + [self.mScrollView addSubview:self.videoView]; + [self.mScrollView addSubview:self.gitftView]; + + [self.view addSubview:self.NavBarView]; + [self getUserInfno]; + [self loadMyPhotos]; + [self requesGift]; + +} + + +- (UIScrollView *)mScrollView +{ + if (!_mScrollView) { + _mScrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH, KSCREEN_HEIGHT-50)]; + _mScrollView.delegate = self; + _mScrollView.showsVerticalScrollIndicator = NO; + _mScrollView.alwaysBounceVertical = YES; + UIView *maskView = [[UIView alloc]initWithFrame:CGRectMake(0,230, KSCREEN_WIDTH, 10000)]; + maskView.backgroundColor = UIColorFromRGB(0xf7f7f7); + [_mScrollView addSubview:maskView]; + + [_mScrollView setContentSize:CGSizeMake(KSCREEN_WIDTH, 10000)]; + } + return _mScrollView; +} + +- (void)scrollViewDidScroll:(UIScrollView *)scrollView { + if (scrollView.contentOffset.y < 0) { + // 高度宽度同时拉伸 从中心放大 + CGFloat imgH = _profileView.height - scrollView.contentOffset.y*2; + CGFloat imgW = imgH * _scale; + self.backGroundIV.frame = CGRectMake(scrollView.contentOffset.y * _scale,0, imgW,imgH); + } else { + // 只拉伸高度 + self.backGroundIV.frame = CGRectMake(0, 0, KSCREEN_WIDTH,_profileView.height - scrollView.contentOffset.y); + } + self.bgView.frame = self.backGroundIV.frame; +} +- (UIImageView *)backGroundIV +{ + if (!_backGroundIV) { + _backGroundIV = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH,230)]; + [_backGroundIV setContentScaleFactor:[[UIScreen mainScreen] scale]]; + _backGroundIV.contentMode = UIViewContentModeScaleAspectFill; + _backGroundIV.clipsToBounds = YES; + + } + return _backGroundIV; +} + +- (UIView *)bgView +{ + if (!_bgView) { + _bgView = [[UIView alloc]initWithFrame:_backGroundIV.bounds]; + _bgView.backgroundColor = UIColorFromRGBWithAlpha(0x763cd3, 0.4); + } + return _bgView; +} +- (CustomNavigationView *)NavBarView +{ + if (!_NavBarView) { + _NavBarView = [[CustomNavigationView alloc]initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH, 64)]; + [_NavBarView setNewAction:YES]; + [_NavBarView.rightBtn addTarget:self action:@selector(reportAction) forControlEvents:UIControlEventTouchUpInside]; + } + return _NavBarView; +} +- (void)reportAction +{ + actionSheet.actionSheetStyle = UIActionSheetStyleBlackOpaque; + [actionSheet showInView:self.view]; +} +#pragma mark - **************** 头部数据 +- (ProfileHeaderView *)profileView +{ + if (!_profileView) { + _profileView = [[ProfileHeaderView alloc]initWithFrame:CGRectMake(0, 0,KSCREEN_WIDTH, 230) toWho:2]; + _scale = _profileView.width/_profileView.height; + } + return _profileView; +} +#pragma mark - **************** 相册和认证 +- (OtherPhotoView *)photoView +{ + if (!_photoView) { + _photoView = [[OtherPhotoView alloc]initWithFrame:CGRectMake(0, _profileView.bottom, KSCREEN_WIDTH,180)]; + } + return _photoView; +} +#pragma mark - **************** 交友宣言 +- (DeclarationView *)declarView +{ + if (!_declarView) { + _declarView = [[DeclarationView alloc]initWithFrame:CGRectMake(7, _photoView.bottom+7, KSCREEN_WIDTH-14,74)]; + _declarView.delegate =self; + _declarView.declarSectionView.editorBtn.hidden = YES; + } + return _declarView; +} +- (void)openOrClose +{ + [self getALLUIFrame]; +} +#pragma mark - **************** 详细资料啊 + +- (DetailView *)detailView +{ + if (!_detailView) { + _detailView = [[DetailView alloc]initWithFrame:CGRectMake(7, _declarView.bottom+7, KSCREEN_WIDTH-14,110)]; + [_detailView setImageRoundRadius:4 BorderWidth:0 borderColor:NULL]; + _detailView.detailSectionView.editorBtn.hidden = YES; + } + return _detailView; +} +#pragma mark - **************** 择偶要求 +- (SpouseView *)requestView +{ + if (!_requestView) { + _requestView = [[SpouseView alloc]initWithFrame:CGRectMake(7, _detailView.bottom+7, KSCREEN_WIDTH-14, 4*45)]; + _requestView.spouseView.editorBtn.hidden = YES; + _requestView.spouseTagView.color = UIColorFromRGB(0x716288); + _requestView.backgroundColor = [UIColor whiteColor]; + } + return _requestView; +} + +#pragma mark - **************** 兴趣爱好 +- (InterestView *)interView +{ + if (!_interView) { + _interView = [[InterestView alloc]initWithFrame:CGRectMake(7, _requestView.bottom+7, KSCREEN_WIDTH-14,56)]; + [_interView setImageRoundRadius:4 BorderWidth:0 borderColor:NULL]; + [_interView setBackColor:3]; + } + return _interView; +} +#pragma mark - **************** 标签 +- (InterestView *)markView +{ + if (!_markView) { + _markView = [[InterestView alloc]initWithFrame:CGRectMake(7, _interView.bottom+7, KSCREEN_WIDTH-14,56)]; + [_markView setImageRoundRadius:4 BorderWidth:0 borderColor:NULL]; + [_markView setBackColor:4]; + } + return _markView; +} +#pragma mark - **************** 视频 +- (VideoView *)videoView +{ + if (!_videoView) { + _videoView = [[VideoView alloc]initWithFrame:CGRectMake(7, _markView.bottom+7, KSCREEN_WIDTH-14, 150)]; + [_videoView setImageRoundRadius:4 BorderWidth:0 borderColor:NULL]; + } + return _videoView; +} + +#pragma mark - **************** 礼物 +- (OtherGiftView *)gitftView +{ + if (!_gitftView) { + _gitftView = [[OtherGiftView alloc]initWithFrame:CGRectMake(7, _videoView.bottom+7, KSCREEN_WIDTH-14, 130)]; + } + return _gitftView; +} +#pragma mark - **************** 底部 +- (OtherFooterView *)footerView +{ + if (!_footerView) { + _footerView = [[OtherFooterView alloc]initWithFrame:CGRectMake(0, _mScrollView.bottom, KSCREEN_WIDTH, 50)]; + _footerView.delegateVC = self; + [self.view addSubview:_footerView]; + } + return _footerView; +} + + + +#pragma mark - **************** 数据请求 +- (void)getUserInfno +{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:@"网络异常" toView:self.view]; + return; + } + + NSDictionary *parameters = @{ + @"userID":_uid, + @"MyID":USER_USERID, + @"version":APP_VERSION, + }; + [MBProgressHUD showMessag:nil toView:self.view]; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_user_mainpage block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + [MBProgressHUD hideHUDForView:self.view animated:YES]; + if ([resultDic[@"retcode"] intValue] == 1) { + NSDictionary *tempDict = resultDic[@"message"]; + if ([tempDict[@"bereave"] intValue] ==1) { + [MBProgressHUD showError:@"该用户已被封禁" toView:self.view]; + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [self.navigationController popViewControllerAnimated:YES]; + }); + return; + } + [self getOtherHeaderData:tempDict]; + [self getOtherDetailData:tempDict]; + [self getInsterData:tempDict]; + [self getVideoData:tempDict]; + [self getFooterData:tempDict]; + + + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; +} + +- (void)getOtherHeaderData:(NSDictionary *)dict +{ + _profileView.otherDict = dict; + [self.profileView.headView sd_setImageWithURL:[NSURL URLWithString:dict[@"avatar"]] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { + if (image) { + [_backGroundIV setImageToBlur:image blurRadius:10 completionBlock:nil]; + self.shareView.shareImage = image; + + } + }]; + self.shareView.toUid = self.uid; + self.shareView.toName = dict[@"nickname"]; + if ([dict[@"sex"] intValue] ==0) { + self.shareView.sex = @"美女"; + }else{ + self.shareView.sex = @"帅哥"; + } + if ([self.uid isEqualToString:USER_USERID]) { + _NavBarView.rightBtn.hidden = YES; + } + _photoView.otherDict = dict; + + if ([dict[@"shield"] intValue] ==1) { + [self showSheet:YES]; + }else{ + [self showSheet:NO]; + } + [self getALLUIFrame]; +} + +- (void)showSheet:(BOOL)shield +{ + if (shield) { + actionSheet = [[UIActionSheet alloc]initWithTitle:nil + delegate:self + cancelButtonTitle:@"取消" + destructiveButtonTitle:nil + otherButtonTitles:@"举报",@"分享",nil]; + actionSheet.tag =1; + }else{ + actionSheet = [[UIActionSheet alloc]initWithTitle:nil + delegate:self + cancelButtonTitle:@"取消" + destructiveButtonTitle:nil + otherButtonTitles:@"举报",@"屏蔽",@"分享",nil]; + actionSheet.tag =2; + } +} + + +- (void)getOtherDetailData:(NSDictionary *)dict +{ + _declarView.params = dict; + _detailView.other_params = dict; + _requestView.requestDict = dict; + [self getALLUIFrame]; +} + +- (void)getInsterData:(NSDictionary *)dict +{ + _interView.hobbysParams = dict; + _markView.labelsParams = dict; + [self getALLUIFrame]; +} + + +- (void)getVideoData:(NSDictionary *)dict +{ + _videoView.userid = _uid; + _videoView.other_params = dict; + [self getALLUIFrame]; +} + +- (void)getFooterData:(NSDictionary *)dict +{ + self.footerView.params = dict; +} +- (void)getALLUIFrame +{ + _declarView.top = _photoView.bottom+7; + _detailView.top =_declarView.bottom+7; + _requestView.top = _detailView.bottom+7; + _interView.top = _requestView.bottom+7; + _markView.top = _interView.bottom+7; + _videoView.top = _markView.bottom+7; + if (_videoView.height) { + _gitftView.top = _videoView.bottom+7; + }else{ + _gitftView.top = _videoView.bottom+5; + } + [_mScrollView setContentSize:CGSizeMake(KSCREEN_WIDTH, _gitftView.bottom+10)]; +} + +- (void)loadMyPhotos +{ + NSDictionary *parameters = @{@"userID":self.uid, + @"version":APP_VERSION, + @"action":@"1"}; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_user_myphoto block:^(NSDictionary *resultDic, NSError *error) { + if(resultDic){ + if([resultDic[@"retcode"] intValue] == 1){ + [_photoView createPhotoList:resultDic[@"message"]]; + [self getALLUIFrame]; + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; +} + +- (void)requesGift{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:@"网络异常" toView:self.view]; + return; + } + NSDictionary *parameters = @{ + @"userid":_uid, + @"action":@"1" + }; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_gift_mygifto block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + if ([resultDic[@"retcode"] intValue] == 1) { + [self getGiftData:resultDic]; + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; +} +- (void)getGiftData:(NSDictionary *)dict +{ + [_gitftView createGit:dict[@"message"]]; +} +#pragma mark - **************** 举报 +- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{ + if (buttonIndex == 0) { + IntroduceViewController *reasonVC = [[IntroduceViewController alloc]init]; + reasonVC.titleName = @"举报理由"; + reasonVC.reportID = _uid; + reasonVC.type = 2; + [self.navigationController pushViewController:reasonVC animated:YES]; + }else if (buttonIndex == 1) { + if (actionSheet.tag ==1) { + [self.shareView show]; + }else{ + UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:nil message:@"确定屏蔽此用户吗?" delegate:self cancelButtonTitle:@"否" otherButtonTitles:@"是", nil]; + [alertView show]; + } + }else if (buttonIndex == 2) { + if (actionSheet.tag ==2) { + [self.shareView show]; + } + } +} + +- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ + + if (buttonIndex) { + NSDictionary *Params = @{@"userID":USER_USERID, + @"otherID":_uid, + @"action":@"3", + @"version":APP_VERSION}; // + [ZCNetRequestManager postRequestWithParameters:Params subUrl:URL_user_friendadd block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + if ([resultDic[@"retcode"] intValue] == 1) { + [MBProgressHUD showSuccess:@"屏蔽成功" toView:self.view]; + + EMError *error = [[EMClient sharedClient].contactManager addUserToBlackList:[_uid lowercaseString] relationshipBoth:YES]; + if (!error) { + NSLog(@"发送成功"); + [self.navigationController popViewControllerAnimated:YES]; + } + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; + } +} +- (QYShareView *)shareView +{ + if (!_shareView ) { + _shareView = [[QYShareView alloc]init]; + _shareView.type = @"3"; + } + return _shareView; +} +- (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/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Controller/otherView/OtherFooterView.h" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Controller/otherView/OtherFooterView.h" new file mode 100644 index 0000000000000000000000000000000000000000..e0a399002b1cdbf7c85f0c84d6aa45488417f4e1 --- /dev/null +++ "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Controller/otherView/OtherFooterView.h" @@ -0,0 +1,17 @@ +// +// OtherFooterView.h +// JQQY +// +// Created by Shmily on 2018/1/9. +// Copyright © 2018年 jiuqi. All rights reserved. +// + +#import +#import "OtherViewController.h" +@interface OtherFooterView : UIView + +@property (nonatomic,retain)NSDictionary *params; +@property (nonatomic,weak)OtherViewController *delegateVC; + + +@end diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Controller/otherView/OtherFooterView.m" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Controller/otherView/OtherFooterView.m" new file mode 100644 index 0000000000000000000000000000000000000000..2b4d448ee0134f74682034d782259c167abd481c --- /dev/null +++ "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Controller/otherView/OtherFooterView.m" @@ -0,0 +1,179 @@ +// +// OtherFooterView.m +// JQQY +// +// Created by Shmily on 2018/1/9. +// Copyright © 2018年 jiuqi. All rights reserved. +// + +#import "OtherFooterView.h" +#import "GiftView.h" +@interface OtherFooterView () +{ +} +@property (nonatomic, strong) UIButton *sayHiBtn; +@property (nonatomic,retain)UILabel *line_h; +@property (nonatomic, strong) UIButton *giftBtn; +@property (nonatomic, strong) UIButton *attenBtn; + +@end + + + +@implementation OtherFooterView + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + [self addSubview:self.sayHiBtn]; + [self addSubview:self.giftBtn]; + [self addSubview:self.attenBtn]; + [self addSubview:self.line_h]; + self.backgroundColor = [UIColor whiteColor]; + } + return self; +} + +- (UILabel *)line_h{ + if(!_line_h){ + _line_h = [[UILabel alloc] initWithFrame:CGRectMake(0,0, KSCREEN_WIDTH, 0.5)]; + _line_h.backgroundColor = LINECOLOUR; + } + return _line_h; +} + + + +- (UIButton *)sayHiBtn{ + if (!_sayHiBtn) { + _sayHiBtn = [[UIButton alloc] initWithFrame:CGRectMake(0,0, (self.width)/3,self.height)]; + [_sayHiBtn setImage:[UIImage imageNamed:@"other_say"] forState:UIControlStateNormal]; + [_sayHiBtn setImage:[UIImage imageNamed:@"other_say"] forState:UIControlStateHighlighted]; + [_sayHiBtn setTitleColor:UIColorFromRGB(0x595959) forState:UIControlStateNormal]; + [_sayHiBtn setTitle:@"打招呼" forState:UIControlStateNormal]; + _sayHiBtn.titleLabel.font = [UIFont systemFontOfSize:11]; + [_sayHiBtn addTarget:self action:@selector(goChat) forControlEvents:UIControlEventTouchUpInside]; + } + return _sayHiBtn; +} +#pragma mark ------------------送礼物 +- (UIButton *)giftBtn{ + if (!_giftBtn) { + _giftBtn = [[UIButton alloc] initWithFrame:CGRectMake(_sayHiBtn.right, 0,self.width/3,self.height)]; + [_giftBtn setImage:[UIImage imageNamed:@"other_gift"] forState:UIControlStateNormal]; + [_giftBtn setImage:[UIImage imageNamed:@"other_gift"] forState:UIControlStateHighlighted]; + + [_giftBtn addTarget:self action:@selector(sendGift) forControlEvents:UIControlEventTouchUpInside]; + } + return _giftBtn; +} + +- (void)sendGift +{ + if ([USER_USERID isEqualToString:_delegateVC.uid]) { + [MBProgressHUD showError:@"亲!把礼物送给别人吧" toView:_delegateVC.view]; + return; + } + GiftView *giftView = [[GiftView alloc]init]; + giftView.delegate =self; + [giftView show]; + +} + + +#pragma mark ------------------礼物View +- (void)sendGift:(NSDictionary *)giftDict +{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:@"网络异常" toView:_delegateVC.view]; + return; + } + NSDictionary *parameters = @{ + @"userid":USER_USERID, + @"otherid":_delegateVC.uid, + @"name":giftDict[@"imgTag"] + }; + int giftValue = [giftDict[@"giftValue"] intValue]; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_gift_giftsend block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + if ([resultDic[@"retcode"] intValue] == 1) { + [MBProgressHUD showSuccess:@"赠送成功" toView:_delegateVC.view]; + NSUserDefaults *userDefaults = kUserDefaults; + [userDefaults setObject:[NSString stringWithFormat:@"%d",[USER_INGOT intValue]-giftValue] forKey:@"ingot"]; + [userDefaults synchronize]; + [_delegateVC requesGift]; + + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:_delegateVC.view]; + } + } + }]; +} + + +#pragma mark ------------------关注 +- (UIButton *)attenBtn{ + if (!_attenBtn) { + _attenBtn = [[UIButton alloc] initWithFrame:CGRectMake(_giftBtn.right,0, (self.width)/3,self.height)]; + [_attenBtn setTitleColor:UIColorFromRGB(0x595959) forState:UIControlStateNormal]; + [_attenBtn setTitle:@"关注" forState:UIControlStateNormal]; + _attenBtn.titleLabel.font = [UIFont systemFontOfSize:11]; + [_attenBtn setImage:[UIImage imageNamed:@"other_n_att"] forState:UIControlStateNormal]; + [_attenBtn setImage:[UIImage imageNamed:@"other_n_att"] forState:UIControlStateHighlighted]; + [_attenBtn addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside]; + } + return _attenBtn; +} + +- (void)btnClicked:(UIButton *)b{ + + NSDictionary *Params = @{@"userID":USER_USERID, + @"otherID":_delegateVC.uid, + @"action":b.selected?@"2":@"1",//加 取消 + @"version":APP_VERSION}; // + [ZCNetRequestManager postRequestWithParameters:Params subUrl:URL_user_friendadd block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + [MBProgressHUD showError:resultDic[@"explanation"] toView:_delegateVC.view]; + + if ([resultDic[@"retcode"] intValue] == 1) { + [self setAcctionState:b.selected?0:1]; + } + } + }]; +} +- (void)goChat +{ + if ([USER_USERID isEqualToString:_delegateVC.uid]) { + [MBProgressHUD showError:@"亲,还是找别人聊聊吧" toView:_delegateVC.view]; + return; + } + [ZCTools toChatViewController:_delegateVC.uid conversationType:0 name:_params[@"nickname"] avatarUrl:_params[@"avatar"] homeSelf:_delegateVC]; +} + + +- (void)setParams:(NSDictionary *)params +{ + _params = params; + [self setAcctionState:[_params[@"firendship"] intValue]]; +} + +- (void)setAcctionState:(NSInteger )state +{ + if (state ==1 ) {//关注了 + [_attenBtn setTitle:@"取消关注" forState:UIControlStateNormal]; + [_attenBtn setImage:[UIImage imageNamed:@"other_y_att"] forState:UIControlStateNormal]; + [_attenBtn setImage:[UIImage imageNamed:@"other_y_att"] forState:UIControlStateHighlighted]; + _attenBtn.selected = YES; + }else{ + [_attenBtn setTitle:@"关注" forState:UIControlStateNormal]; + [_attenBtn setImage:[UIImage imageNamed:@"other_n_att"] forState:UIControlStateNormal]; + [_attenBtn setImage:[UIImage imageNamed:@"other_n_att"] forState:UIControlStateHighlighted]; + _attenBtn.selected = NO; + } +} + + + + +@end diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Controller/otherView/OtherGiftView.h" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Controller/otherView/OtherGiftView.h" new file mode 100644 index 0000000000000000000000000000000000000000..997048c38ac63d5d90c59c47a9f4f54dde3482b2 --- /dev/null +++ "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Controller/otherView/OtherGiftView.h" @@ -0,0 +1,23 @@ +// +// OtherGiftView.h +// JQQY +// +// Created by Shmily on 2018/1/8. +// Copyright © 2018年 jiuqi. All rights reserved. +// + +#import +#import "SectionView.h" + + + +@interface OtherGiftView : UIView + +@property (nonatomic, retain) SectionView *giftSectionView; +@property (nonatomic,retain)UIScrollView *mScrollView; +@property (nonatomic,retain)UILabel *tipLB; + +- (void)createGit:(NSArray *)arr; + + +@end diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Controller/otherView/OtherGiftView.m" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Controller/otherView/OtherGiftView.m" new file mode 100644 index 0000000000000000000000000000000000000000..94fea80769f1dde245912b373809c266527d7cbd --- /dev/null +++ "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Controller/otherView/OtherGiftView.m" @@ -0,0 +1,87 @@ +// +// OtherGiftView.m +// JQQY +// +// Created by Shmily on 2018/1/8. +// Copyright © 2018年 jiuqi. All rights reserved. +// + +#import "OtherGiftView.h" + +@implementation OtherGiftView + + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + + self.backgroundColor = [UIColor whiteColor]; + [self addSubview:self.giftSectionView]; + [self addSubview:self.mScrollView]; + } + return self; +} + +- (SectionView *)giftSectionView +{ + if (!_giftSectionView) { + _giftSectionView = [[SectionView alloc]initWithFrame:CGRectMake(0, 0, self.width, 30)]; + _giftSectionView.nameLB.text = @"礼物"; + _giftSectionView.editorBtn.hidden = YES; + } + return _giftSectionView; +} + +- (UIScrollView *)mScrollView +{ + if (!_mScrollView) { + _mScrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(0, _giftSectionView.bottom+15, self.width,60+20)]; + } + return _mScrollView; +} + +- (UILabel *)tipLB +{ + if (!_tipLB) { + _tipLB = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH, _mScrollView.height)]; + _tipLB.textColor = UIColorFromRGB(0x9f9f9f); + _tipLB.font = [UIFont systemFontOfSize:13]; + _tipLB.textAlignment = NSTextAlignmentCenter; + _tipLB.text = @"快来给Ta送礼物吧~"; + [_mScrollView addSubview:_tipLB]; + } + return _tipLB; +} + +- (void)createGit:(NSArray *)arr +{ + + + + [_mScrollView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; + + self.tipLB.hidden = ARRAY_IS_NOT_EMPTY(arr)? YES:NO; + int gitCount = 0; + for (int i=0; i + +@interface OtherPhotoView : UIView + + +@property (nonatomic,retain)NSDictionary *otherDict; + + +- (void)createPhotoList:(NSArray *)photoArray; + + +@end diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Controller/otherView/OtherPhotoView.m" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Controller/otherView/OtherPhotoView.m" new file mode 100644 index 0000000000000000000000000000000000000000..970e2353f243a3ddb2b2c9966ae9f028e1dedd6b --- /dev/null +++ "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Controller/otherView/OtherPhotoView.m" @@ -0,0 +1,218 @@ +// +// OtherPhotoView.m +// JQQY +// +// Created by Shmily on 2018/1/8. +// Copyright © 2018年 jiuqi. All rights reserved. +// + +#import "OtherPhotoView.h" +#import "MJPhotoBrowser.h" +#import "MJPhoto.h" +#import "ALLWebViewController.h" +#import "ImageLabelView.h" + +@interface OtherPhotoView () +{ + CGFloat side; +} +@property (nonatomic, strong) UIScrollView *mScrollView; + +@property (nonatomic,retain)UILabel *v_line; + + +@property (nonatomic,retain)ImageLabelView *phoneView; +@property (nonatomic,retain)ImageLabelView *realNameView; +@property (nonatomic,retain)ImageLabelView *companyView; +@property (nonatomic,retain)ImageLabelView *tuanView; + + + +@end + + + +@implementation OtherPhotoView + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + + side = 70; + + + self.backgroundColor = [UIColor whiteColor]; + [self addSubview:self.mScrollView]; + + [self addSubview:self.v_line]; + + [self addSubview:self.phoneView]; + [self addSubview:self.realNameView]; + [self addSubview:self.companyView]; + [self addSubview:self.tuanView]; + + + + } + return self; +} + +- (UIScrollView *)mScrollView +{ + if (!_mScrollView) { + _mScrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(0,8, self.width,side)]; + _mScrollView.showsHorizontalScrollIndicator =NO; + } + return _mScrollView; +} + +- (UILabel *)v_line +{ + if (!_v_line) { + _v_line = [[UILabel alloc]initWithFrame:CGRectMake(8,_mScrollView.bottom+10, self.width-16, 0.5)]; + _v_line.backgroundColor = LINECOLOUR; + } + return _v_line; +} + +- (void)createPhotoList:(NSArray *)photoArray +{ + + if (!ARRAY_IS_NOT_EMPTY(photoArray)) { + _phoneView.top =8; + _v_line.hidden = YES; + _realNameView.top =_phoneView.top; + _companyView.top = _phoneView.top; + _tuanView.top = _phoneView.top; + self.height = 90; + return; + } + + for (UIView *view in _mScrollView.subviews) { + if ([view isKindOfClass:[UIImageView class]]) { + if (view.tag) { + [view removeFromSuperview]; + } + } + } + for (int i=0; i99) { + SetpushModel *model = self.dataArray[0]; + SetpushModel *model_1 = self.dataArray[1]; + if (b.tag ==100) { + model.pushState = !model.pushState; + [self modifyPushSetup:INTToSTRING(model.pushState) msg:INTToSTRING(model_1.pushState)]; + //[self.dataArray replaceObjectAtIndex:0 withObject:model]; + + }else{ + model_1.pushState = !model_1.pushState; + [self modifyPushSetup:INTToSTRING(model.pushState) msg:INTToSTRING(model_1.pushState)]; + //[self.dataArray replaceObjectAtIndex:1 withObject:model_1]; + } + [self.tableView reloadData]; + } +} +- (void)openOrclose:(BOOL)is +{ + EMPushOptions *options = [[EMClient sharedClient] pushOptions]; + if (is) {//关闭推送 + options.noDisturbStatus = EMPushNoDisturbStatusDay; + options.noDisturbingStartH = 0; + options.noDisturbingEndH = 24; + }else{//开启推送 + options.noDisturbStatus = EMPushNoDisturbStatusClose; + } + [[EMClient sharedClient] updatePushNotificationOptionsToServerWithCompletion:^(EMError *aError) { + if (!aError) { + NSLog(@"设置成功"); + }else{ + NSLog(@"error:%@", aError); + } + }]; + + + +} +/** + * 请求推送设置 + */ +- (void)requestPushSetup{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:NetworkFailure toView:self.view]; + return; + } + NSDictionary *params = @{@"userID":USER_USERID, + @"inform":@"", //系统消息 + @"msg":@"", + @"action":@"1", + @"version":APP_VERSION}; + [MBProgressHUD showMessag:nil toView:self.view]; + [ZCNetRequestManager postRequestWithParameters:params subUrl:URL_jpushsetnew block:^(NSDictionary *resultDic, NSError *error) { + if(resultDic){ + [MBProgressHUD hideHUDForView:self.view animated:YES]; + if([resultDic[@"retcode"] intValue] == 1){ + + + NSArray *title = @[@"启缘通知",@"聊天"]; + [self.dataArray removeAllObjects]; + for (int i=0; i=[resultDic[@"number"] intValue]) { + [self endRefreshingWithNoMoreData]; + }else{ + [self tableViewDidFinishTriggerHeader:NO reload:YES]; + } + [self tableViewDidFinishTriggerHeader:YES reload:YES]; }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; + +} +/** + * 创建UITablieViewDelegate + */ + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + + SysCell *cell = [tableView dequeueReusableCellWithIdentifier:@"SysCell"]; + cell.selectionStyle =0; + [cell setModel:self.dataArray[indexPath.row]]; + return cell; +} + +- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + return self.dataArray.count; +} + +-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath +{ + return UITableViewCellEditingStyleDelete; +} + +/*删除用到的函数*/ +-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath +{ + if (editingStyle ==UITableViewCellEditingStyleDelete) + { + [self deleteItem:indexPath]; + } +} + + +- (void)deleteItem:(NSIndexPath *)path +{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:NetworkFailure toView:self.view]; + return; + } + InFnoModel *model = self.dataArray[path.row]; + NSDictionary *params = @{@"recid":model.recid, + @"version":APP_VERSION}; + [MBProgressHUD showMessag:@"删除中..." toView:self.view]; + [ZCNetRequestManager postRequestWithParameters:params subUrl:URL_infoCenterDelete block:^(NSDictionary *resultDic, NSError *error) { + if(resultDic){ + [MBProgressHUD hideHUDForView:self.view animated:YES]; + if([resultDic[@"retcode"] intValue] == 1){ + [self.dataArray removeObjectAtIndex:path.row]; + [self.tableView deleteRowsAtIndexPaths:[NSMutableArray arrayWithObject:path]withRowAnimation:UITableViewRowAnimationAutomatic]; + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; + + +} + + + + + + + +- (CGFloat )tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + InFnoModel *model = self.dataArray[indexPath.row]; + return 64-18+model.cellHeight; +} + + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + /* + * 1 关注 2点赞 8企业认证通过 9企业认证未通过 10申请参加活动被拒绝 11申请参加活动通过 + * 12参加活动已取消 13申请活动已取消 16头像审核通过 17头像未通过审核 + * 19视频认证通过 20视频认证不通过 22邀请视频认证 31实名认证通过 32实名认证未通过 + * 33获得礼物 34获得元宝 35获得兑换券 36公告 37他人中心 38新活动 39封号 40 41 + */ + InFnoModel *model = self.dataArray[indexPath.row]; + if ([model.action intValue] ==1 || + [model.action intValue] ==2) {// 他人中心 + [ZCTools toPersonalHome:model.userID homeNickname:model.nickname homeSelf:self]; + }else if ([model.action intValue] ==8 || + [model.action intValue] ==9){//单位业认证 + EnterpriseViewController *enterVC = [[EnterpriseViewController alloc]init]; + [self.navigationController pushViewController:enterVC animated:YES]; + }else if ([model.action intValue] ==10 || + [model.action intValue] ==11){//活动 + EventDetailsViewController *actInfnoVC = [[EventDetailsViewController alloc]init]; + actInfnoVC.aid = model.actID; + [self.navigationController pushViewController:actInfnoVC animated:YES]; + }else if ([model.action intValue] ==16 || + [model.action intValue] ==17){//头像 + CardViewController *cardView = [[CardViewController alloc]init]; + [self.navigationController pushViewController:cardView animated:YES]; + }else if ([model.action intValue] ==19 || + [model.action intValue] ==20){//视频 + LookVideoViewController *lookVideoVC = [[LookVideoViewController alloc]init]; + lookVideoVC.userid = USER_USERID; + lookVideoVC.comeType = 1; + [self.navigationController pushViewController:lookVideoVC animated:YES]; + }else if ([model.action intValue] ==22){ + VideoViewController *videoVC = [[VideoViewController alloc]init]; + videoVC.vc = self; + [self.navigationController pushViewController:videoVC animated:YES]; + }else if ([model.action intValue] ==31 || + [model.action intValue] ==32){//实名 + IdentyViewController *idVC = [[IdentyViewController alloc]init]; + [self.navigationController pushViewController:idVC animated:YES]; + }else if ([model.action intValue] == 33){//礼物 + MyGiftViewController *myGiftVC = [[MyGiftViewController alloc] init]; + [self.navigationController pushViewController:myGiftVC animated:YES]; + }else if([model.action intValue] ==34 || + [model.action intValue] ==35){//元宝兑换券 + MyWalletViewController *myWallView = [[MyWalletViewController alloc]init]; + [self.navigationController pushViewController:myWallView animated:YES]; + }else if ([model.action intValue] == 36){//通知 + ALLWebViewController *allWeb = [[ALLWebViewController alloc]init]; + allWeb.titleName = @"通知"; + allWeb.urlStr = model.link; + [self.navigationController pushViewController:allWeb animated:YES]; + }else if([model.action intValue] == 37){//他人中心 + [ZCTools toPersonalHome:model.userID homeNickname:model.nickname homeSelf:self]; + }else if ([model.action intValue] == 38){//新活动 + EventDetailsViewController *actInfnoVC = [[EventDetailsViewController alloc]init]; + actInfnoVC.aid = model.actID; + [self.navigationController pushViewController:actInfnoVC animated:YES]; + }else if ([model.action intValue] ==39){//封号 + + }else if ([model.action intValue] ==40 || [model.action intValue] == 41){ //评论点赞 + YuanquanDetailViewController *yuanquanVC = [[YuanquanDetailViewController alloc]init]; + yuanquanVC.yuanquanid = model.userID; + [self.navigationController pushViewController:yuanquanVC animated:YES]; + } +} + + + + + +- (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/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Model/.DS_Store" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Model/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Model/.DS_Store" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Model/CardModel.h" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Model/CardModel.h" new file mode 100644 index 0000000000000000000000000000000000000000..f4db26ac5f1bc0f5b73a043ca419e08e66f2a793 --- /dev/null +++ "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Model/CardModel.h" @@ -0,0 +1,31 @@ +// +// CardModel.h +// JQ_ELOVE +// +// Created by chason on 2017/2/16. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import + +@interface CardModel : NSObject + +@property (nonatomic, copy) NSString *userid; +@property (nonatomic, copy) NSString *avatar; +@property (nonatomic, copy) NSString *emotionTestNum; +@property (nonatomic, copy) NSString *nickname; +@property (nonatomic, copy) NSString *sex; +@property (nonatomic, copy) NSString *age; +@property (nonatomic, copy) NSString *constellation; +@property (nonatomic, copy) NSString *place; +@property (nonatomic, copy) NSString *degree; +@property (nonatomic, copy) NSString *information; + + +@property (nonatomic, copy) NSString *realName; +@property (nonatomic, copy) NSString *tuantype; +@property (nonatomic, copy) NSString *kind; + +- (void)initCardModel:(NSDictionary *)CardDict; + +@end diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Model/CardModel.m" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Model/CardModel.m" new file mode 100644 index 0000000000000000000000000000000000000000..39700489cb26c3ef0ec993c7646be27f950daadd --- /dev/null +++ "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Model/CardModel.m" @@ -0,0 +1,52 @@ +// +// CardModel.m +// JQ_ELOVE +// +// Created by chason on 2017/2/16. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import "CardModel.h" +#import "NSString+transform.h" + +@implementation CardModel + +- (void)initCardModel:(NSDictionary *)CardDict{ + if (CardDict) { + _userid = CardDict[@"otherID"]; + _avatar = ToString(CardDict[@"avatar"]); + if ([CardDict[@"match"] intValue] <= 0) { + _emotionTestNum = @""; + }else{ + _emotionTestNum = [NSString stringWithFormat:@"匹配度 %@%%",CardDict[@"match"]]; + } + _nickname = ToString(CardDict[@"nickname"]); + _realName = ToString(CardDict[@"realnametype"]); + _tuantype = ToString(CardDict[@"youthLeague"]); + _kind = ToString(CardDict[@"kind"]); + _sex = [ToString(CardDict[@"sex"]) stringSexByReplacingChinese]; + if (STR_IS_NOT_EMPTY(ToString(CardDict[@"age"]))) { + _age = [NSString stringWithFormat:@" · %@岁",ToString(CardDict[@"age"])]; + }else{ + _age = @""; + } + if (STR_IS_NOT_EMPTY(ToString(CardDict[@"constellation"]))) { + _constellation = [NSString stringWithFormat:@" · %@",ToString(CardDict[@"constellation"])]; + }else{ + _constellation = @""; + } + if (STR_IS_NOT_EMPTY(ToString(CardDict[@"localplace"]))) { + _place = [NSString stringWithFormat:@" · %@",ToString(CardDict[@"localplace"])]; + }else{ + _place = @""; + } + if (STR_IS_NOT_EMPTY(ToString(CardDict[@"degree"])) && [CardDict[@"degree"] intValue] != 0) { + _degree = [NSString stringWithFormat:@" · %@",[ToDouble(CardDict[@"degree"]) stringDegreeByReplacingChinese]]; + }else{ + _degree = @""; + } + _information = [NSString stringWithFormat:@"%@%@%@%@%@", _sex,_age,_constellation,_place,_degree]; + } +} + +@end diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Model/EmotionModel.h" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Model/EmotionModel.h" new file mode 100644 index 0000000000000000000000000000000000000000..7a93d699522041b861a26e3cab83287b0125ace2 --- /dev/null +++ "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Model/EmotionModel.h" @@ -0,0 +1,20 @@ +// +// EmotionModel.h +// JQ_ELOVE +// +// Created by Shmily on 16/12/5. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import + +@interface EmotionModel : NSObject + +@property (nonatomic,copy)NSString *character; +@property (nonatomic,copy)NSString *characterInfo; +@property (nonatomic,copy)NSString *characterscore; + +- (void)initDict:(NSDictionary *)dict; + + +@end diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Model/EmotionModel.m" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Model/EmotionModel.m" new file mode 100644 index 0000000000000000000000000000000000000000..e42ed094a242778ee310a716ac38eec2849efc31 --- /dev/null +++ "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Model/EmotionModel.m" @@ -0,0 +1,25 @@ +// +// EmotionModel.m +// JQ_ELOVE +// +// Created by Shmily on 16/12/5. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "EmotionModel.h" + +@implementation EmotionModel + + +- (void)initDict:(NSDictionary *)dict +{ + if (dict) { + self.character = dict[@"character"]; + self.characterInfo = dict[@"characterInfo"]; + self.characterscore = dict[@"characterscore"]; + } + +} + + +@end diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Model/InFnoModel.h" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Model/InFnoModel.h" new file mode 100644 index 0000000000000000000000000000000000000000..d32e165496582872b39f1864da4d203712442a96 --- /dev/null +++ "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Model/InFnoModel.h" @@ -0,0 +1,37 @@ +// +// InFnoModel.h +// JQ_ELOVE +// +// Created by Shmily on 16/7/30. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import +#import + +@interface InFnoModel : NSObject + +@property (nonatomic, strong) NSString *actID; +@property (nonatomic, strong) NSString *act_reviewID; +@property (nonatomic, strong) NSString *msg; +@property (nonatomic, strong) NSString *time; +@property (nonatomic, strong) NSString *userID; +@property (nonatomic, strong) NSString *avatar; +@property (nonatomic, strong) NSString *nickname; +@property (nonatomic, strong) NSString *title; +@property (nonatomic, strong) NSString *recid; +@property (nonatomic, strong) NSString *link; + +@property (nonatomic, strong) NSMutableAttributedString *infnoStr; +@property CGFloat cellHeight; + +- (void)initData:(NSDictionary *)dict; +/* + * 1 关注 2点赞 8企业认证通过 9企业认证未通过 10申请参加活动被拒绝 11申请参加活动通过 + * 12参加活动已取消 13申请活动已取消 16头像审核通过 17头像未通过审核 + * 19视频认证通过 20视频认证不通过 22邀请视频认证 31实名认证通过 32实名认证未通过 + * 33获得礼物 34获得元宝 35获得兑换券 36通知 37他人中心 38新活动 40点赞缘圈 41评论缘圈 + */ +@property (nonatomic, strong) NSString *action; + +@end diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Model/InFnoModel.m" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Model/InFnoModel.m" new file mode 100644 index 0000000000000000000000000000000000000000..67398a23ca3742e6b4943260d48650bc9dba406a --- /dev/null +++ "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Model/InFnoModel.m" @@ -0,0 +1,59 @@ +// +// InFnoModel.m +// JQ_ELOVE +// +// Created by Shmily on 16/7/30. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "InFnoModel.h" +@implementation InFnoModel + +- (void)initData:(NSDictionary *)dict +{ + if (dict) { + self.actID = ToString(dict[@"actID"]); + self.act_reviewID = ToString(dict[@"act_reviewID"]); + self.action = ToString(dict[@"action"]); + self.msg = ToString(dict[@"msg"]); + self.time = dict[@"time"]; + self.userID = ToString(dict[@"userID"]); + self.nickname = ToString(dict[@"nickname"]); + self.avatar = ToString(dict[@"avatar"]); + self.title = ToString(dict[@"peract_name"]); + self.recid = dict[@"recid"]; + self.link = dict[@"link"]; + /* + * 1 关注 2点赞 8企业认证通过 9企业认证未通过 10申请参加活动被拒绝 11申请参加活动通过 + * 12参加活动已取消 13申请活动已取消 16头像审核通过 17头像未通过审核 + * 19视频认证通过 20视频认证不通过 22邀请视频认证 31实名认证通过 32实名认证未通过 + * 33获得礼物 34获得元宝 35获得兑换券 36通知 37他人中心 38新活动 + */ + if ([self.action intValue] ==1) { + self.infnoStr = [ZCTools attributedTextFrom:self.nickname headerStr:nil footerStr:@":关注了你!" value:UIColorFromRGB(0x467aa5) textFont:16]; + }else if ([self.action intValue] ==2){ + self.infnoStr = [ZCTools attributedTextFrom:self.nickname headerStr:nil footerStr:@":对你点赞了!" value:UIColorFromRGB(0x467aa5) textFont:16]; + }else if ([self.action intValue] == 31){//身份认证通过 + self.infnoStr = [[NSMutableAttributedString alloc]initWithString:self.msg]; + }else if ([self.action intValue] == 32){//身份认证未通过 + self.infnoStr = [[NSMutableAttributedString alloc]initWithString:self.msg]; + }else if ([self.action intValue] == 33){//礼物 + self.infnoStr = [ZCTools attributedTextFrom:self.nickname headerStr:nil footerStr:[NSString stringWithFormat:@":送了你一份礼物🎁"] value:UIColorFromRGB(0x467aa5) textFont:16]; + }else if ([self.action intValue] == 34){//元宝兑换 + self.infnoStr = [[NSMutableAttributedString alloc]initWithString:self.msg]; + }else if ([self.action intValue] == 35){//优惠券 + self.infnoStr = [[NSMutableAttributedString alloc]initWithString:self.msg]; + }else if ([self.action intValue] ==40){ + self.infnoStr = [[NSMutableAttributedString alloc]initWithString:self.msg]; + }else if ([self.action intValue] ==41){ + self.infnoStr =[[NSMutableAttributedString alloc]initWithString:self.msg]; + + }else{ + self.infnoStr = [[NSMutableAttributedString alloc]initWithString:self.msg]; + } + + self.cellHeight = [ZCTools labelAutoCalculateRectWith:self.infnoStr.string FontSize:16 MaxSize:CGSizeMake(KSCREEN_WIDTH-15-44-20, 1000)].height; + } + +} +@end diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/.DS_Store" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..8a1491c0b0ac65a279308d212eae406ee6c4b57d Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/.DS_Store" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/NOguanzhu@2x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/NOguanzhu@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..1c97b101f0ea7dbb4782a0b57789da6148a82411 Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/NOguanzhu@2x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/NOguanzhu@3x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/NOguanzhu@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..006ef672a172889a7ce7a04312367ed01c8c085b Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/NOguanzhu@3x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/YESguanzhu@2x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/YESguanzhu@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..b10611d1dc16994246184e11ee96f4d5d294faa7 Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/YESguanzhu@2x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/YESguanzhu@3x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/YESguanzhu@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..58da0862542b8bd21bc933240e185f3363af2439 Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/YESguanzhu@3x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/card_boy@2x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/card_boy@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..d8669a29569cae4950b118422e397021f6e602de Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/card_boy@2x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/card_boy@3x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/card_boy@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..753a32cf1af0369f23c0f02029c25053fef096b5 Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/card_boy@3x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/card_girl@2x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/card_girl@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..a89e0c49d873c3f2c42e57f66ad518af69aee275 Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/card_girl@2x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/card_girl@3x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/card_girl@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..c41d8e00698dfe245225d952c12fe7fa036bcf11 Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/card_girl@3x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/giftImg.plist" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/giftImg.plist" new file mode 100644 index 0000000000000000000000000000000000000000..3631219a3cbbc6f298af41be82f30f4777e83044 --- /dev/null +++ "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/giftImg.plist" @@ -0,0 +1,166 @@ + + + + + + giftValue + 2 + imgTag + :qiyuan01: + giftName + [臭鸡蛋] + imgName + lw-cjd + + + giftValue + 2 + imgTag + :qiyuan02: + giftName + [飞吻] + imgName + lw-fw + + + giftValue + 2 + imgTag + :qiyuan03: + giftName + [赞] + imgName + lw-dz + + + giftValue + 5 + imgTag + :qiyuan04: + giftName + [1朵玫瑰] + imgName + lw-mg1 + + + giftValue + 5 + imgTag + :qiyuan05: + giftName + [棒棒糖] + imgName + lw-bbt + + + giftValue + 5 + imgTag + :qiyuan06: + giftName + [啤酒] + imgName + lw-pj + + + giftValue + 10 + imgTag + :qiyuan07: + giftName + [爱神] + imgName + lw-as + + + giftValue + 10 + imgTag + :qiyuan08: + giftName + [蛋糕] + imgName + lw-dg + + + giftValue + 10 + imgTag + :qiyuan09: + giftName + [3朵玫瑰] + imgName + lw-mg3 + + + giftValue + 10 + imgTag + :qiyuan10: + giftName + [巧克力] + imgName + lw-qkl + + + giftValue + 10 + imgTag + :qiyuan11: + giftName + [单身狗] + imgName + lw-dsg + + + giftValue + 20 + imgTag + :qiyuan12: + giftName + [口红] + imgName + lw-kh + + + giftValue + 60 + imgTag + :qiyuan13: + giftName + [99朵玫瑰] + imgName + lw-mg99 + + + giftValue + 60 + imgTag + :qiyuan14: + giftName + [戒指] + imgName + lw-jz + + + giftValue + 100 + imgTag + :qiyuan15: + giftName + [飞机] + imgName + lw-fj + + + giftValue + 100 + imgTag + :qiyuan16: + giftName + [游艇] + imgName + lw-yt + + + diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/hi@2x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/hi@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..f03bdbb8971086bdd3f496621eb71b701fe31b11 Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/hi@2x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/hi@3x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/hi@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..7eef6001df122412d11d40283b1d52ea994156de Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/hi@3x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/home_background@2x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/home_background@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..adf74307052b6f7027c54acc7e88e5d26323e0be Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/home_background@2x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/home_background@3x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/home_background@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..967ba9e12c3364e34ea26f9811ff22744697f932 Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/home_background@3x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/home_refre@2x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/home_refre@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..81ea5bb53e58de7b6c0cfe2af57269115ce5ba55 Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/home_refre@2x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/home_refre@3x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/home_refre@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..6c7818edcb116302829c1eb5a51bb73d803bec87 Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/home_refre@3x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/loading.gif" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/loading.gif" new file mode 100644 index 0000000000000000000000000000000000000000..f168b70233f6ba817f1209dec2aa7450182520f1 Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/loading.gif" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/message@2x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/message@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..1f2815dbd5e5f1535215ca0b3bb0f345a0a27c2b Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/message@2x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/message@3x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/message@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..d2e394a297addce544ffc6b8a2840a50a7dc873e Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/message@3x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/nan@2x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/nan@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..063ea04f38dbb266d66fae01b61d8416aee0a82f Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/nan@2x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/nan@3x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/nan@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..0f37280085e55f2928af6f383a77bd6f852be028 Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/nan@3x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/near@2x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/near@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..d78a9fac945d69e353273d158373d4322eead3d0 Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/near@2x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/near@3x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/near@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..b4a8dc019804304c924e8ac28b236c07d2a1d3e4 Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/near@3x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/nv@2x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/nv@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..095e2617124d02b68b891b20a62ac079e3558dbe Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/nv@2x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/nv@3x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/nv@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..d80dc6ab6c2a5a18c498e1d74e08276f13a71760 Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/nv@3x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/other_gift@2x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/other_gift@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..e6a96c5876dc486cfb45d8709c648c74ea098f33 Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/other_gift@2x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/other_gift@3x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/other_gift@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..9591747b5432fca5b5a49879ce549ce5f868eb6a Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/other_gift@3x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/other_n_att@2x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/other_n_att@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..364415f2481ef1c53c6e76eeb59122969e6601f4 Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/other_n_att@2x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/other_n_att@3x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/other_n_att@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..ff312b92a5126839861f075a2057c3c9314c3fb0 Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/other_n_att@3x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/other_say@2x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/other_say@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..d766a78fb24480f49fe0840246bf2292736d6fd7 Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/other_say@2x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/other_say@3x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/other_say@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..669f167131548fa2eac63c6eacfb676446666285 Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/other_say@3x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/other_y_att@2x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/other_y_att@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..171c9d526ad40d407902cf0fda477219b0c1feba Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/other_y_att@2x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/other_y_att@3x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/other_y_att@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..6b8afcc847e96f6707ed71ae424fe10e36381758 Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/other_y_att@3x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/swich_close@2x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/swich_close@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..4221284cd830ae1c9a593e2d1019b95a4bb32384 Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/swich_close@2x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/swich_close@3x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/swich_close@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..4538f36f49806d7101da7f00e70bd1df40a75a09 Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/swich_close@3x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/swich_open@2x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/swich_open@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..a2a329f128e0b6d04c65a600492f6385dfc65232 Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/swich_open@2x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/swich_open@3x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/swich_open@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..9a6c9d1895c25651a3c003c344ebda0977ca47c9 Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/swich_open@3x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/systemMsg@2x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/systemMsg@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..ff29d35ab7b69405162cd3fafa12a56831bed183 Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/systemMsg@2x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/systemMsg@3x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/systemMsg@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..1f8c2f4dae3a7580ec92c384c4702d56d0aa73a1 Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/systemMsg@3x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xuanxiang@2x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xuanxiang@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..9f97b946d0fdbe6e3dfe1a287cc268ace20979fc Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xuanxiang@2x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xuanxiang@3x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xuanxiang@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..da3d4ac5e02ed2e733a85d810ffc0752e0a4991d Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xuanxiang@3x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xw-dianzan-hui@2x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xw-dianzan-hui@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..f878888d230828e76c749cf200e530a552ef6733 Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xw-dianzan-hui@2x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xw-dianzan-hui@3x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xw-dianzan-hui@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..0206f1e2cd6b996c09db93d823a0b13590e1907a Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xw-dianzan-hui@3x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xw-dianzan@2x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xw-dianzan@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..ae0bdfa08d3a8c5d9ef152cb0e0c876eb6a88b9f Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xw-dianzan@2x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xw-dianzan@3x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xw-dianzan@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..6e60052498ba402023cc7a77e4fd9ab30458043c Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xw-dianzan@3x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xw-dise@2x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xw-dise@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..c1131187f478a277b9736911d151d8dd392bbcfa Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xw-dise@2x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xw-dise@3x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xw-dise@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..6993945f5fb8d1b1b0c1c15880361ebfe37ad255 Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xw-dise@3x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xw-huangguan@2x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xw-huangguan@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..51ee8d5946272cacdaa8d9afb08c52064768e198 Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xw-huangguan@2x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xw-huangguan@3x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xw-huangguan@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..ab55fc7a4b3dec604b3a23ccb316fdfc6809e7de Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xw-huangguan@3x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xw-shipin-hui@2x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xw-shipin-hui@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..801d058b6c56f4d410553c3a946fe4da48ba5d6f Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xw-shipin-hui@2x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xw-shipin-hui@3x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xw-shipin-hui@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..1239bc828ef680c61b66ff6f1a6ebd9f21bfc5d1 Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xw-shipin-hui@3x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xw-shiping@2x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xw-shiping@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..0db304f656bbd0dfa2a6b802fd5d4063e3c1c28f Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xw-shiping@2x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xw-shiping@3x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xw-shiping@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..79135f9a871f34305663a354e0e10fb584a6b8cb Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xw-shiping@3x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xx-huodong@2x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xx-huodong@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..8b9501fda6113647fa3cdcabe9c8ac7d8a9d0169 Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xx-huodong@2x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xx-huodong@3x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xx-huodong@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..91b0fa42168df4ff465f9b0c98c4c46b40e9234e Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xx-huodong@3x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xx-tongzhi@2x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xx-tongzhi@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..49ea630b88956f3aafad324faa3374ca552fda7a Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xx-tongzhi@2x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xx-tongzhi@3x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xx-tongzhi@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..4a84cd8f34a5d95da72d4ee3f79da93fa3bf1c9b Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xx-tongzhi@3x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xx_gift@2x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xx_gift@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..48cb129a664bfba034bde6b36fb2f2be1e3eb55a Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xx_gift@2x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xx_gift@3x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xx_gift@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..21ffe13ad5c2e4b38fcd718298786847807236ad Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/xx_gift@3x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/zl-qyuanrz-h@2x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/zl-qyuanrz-h@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..f02f87667dfc5134691390df088f82d76851472c Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/zl-qyuanrz-h@2x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/zl-qyuanrz-h@3x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/zl-qyuanrz-h@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..bb557e8e503c05df2de45d5ab60f2c175a8c863d Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/zl-qyuanrz-h@3x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/zl-sfrz-h@2x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/zl-sfrz-h@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..275c20dffa271f77378c1299104f8a95a9c43dec Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/zl-sfrz-h@2x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/zl-sfrz-h@3x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/zl-sfrz-h@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..95dae6392021e90f0e0e69a53510489208f5c584 Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/zl-sfrz-h@3x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/zl-sfrz@2x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/zl-sfrz@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..80ef2eecb8ed98b588ac85421cbe54ff8604a566 Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/zl-sfrz@2x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/zl-sfrz@3x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/zl-sfrz@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..1ffd28fea474a1dbaea69ce998e3e0c58fe585bd Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/zl-sfrz@3x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/zl-sjrz@2x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/zl-sjrz@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..22f394333e032ac7a5a32f1db03eff808bbff867 Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/zl-sjrz@2x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/zl-sjrz@3x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/zl-sjrz@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..b957496ec02bd78a0108d137d9593d60ddf14f28 Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/Resource/zl-sjrz@3x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/.DS_Store" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..486bb42cc4ae5eb8a4def40f70113a4bbb7f7c55 Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/.DS_Store" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/GiftView.h" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/GiftView.h" new file mode 100644 index 0000000000000000000000000000000000000000..d82242357d62da6c8eda0467caeb5e6c37c0d29c --- /dev/null +++ "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/GiftView.h" @@ -0,0 +1,33 @@ +// +// GiftView.h +// JQ_ELOVE +// +// Created by chason on 2017/3/22. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import + +@class SendGiftView; + +@protocol GiftViewDelegate + +- (void)sendGift:(NSDictionary *)giftDict; + +@end + +@interface GiftView : UIView +{ + NSArray *giftArray; +} +@property (nonatomic, strong) UIScrollView *giftScrollView; +@property (nonatomic, strong) UIView *syceeView; +@property (nonatomic, strong) UIImageView *syceeImg; +@property (nonatomic, strong) UILabel *syceeNumLab; + +@property (nonatomic,assign) iddelegate; +@property (nonatomic,retain) UIView *bgView; +@property (nonatomic,retain) SendGiftView *sendGiftView; +- (void)show; + +@end diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/GiftView.m" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/GiftView.m" new file mode 100644 index 0000000000000000000000000000000000000000..4299854e93cd383d85d1b957870ae41d8041a600 --- /dev/null +++ "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/GiftView.m" @@ -0,0 +1,172 @@ +// +// GiftView.m +// JQ_ELOVE +// +// Created by chason on 2017/3/22. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import "GiftView.h" +#import "NSString+transform.h" +#import "UIView+RadiusView.h" +#import "SendGiftView.h" + +@implementation GiftView + +- (instancetype)initWithFrame:(CGRect)frame{ + self = [super initWithFrame:frame]; + if (self) { + self.backgroundColor = UIColorFromRGBWithAlpha(0x000000, 0.6); + [self addSubview:self.bgView]; + [self.bgView addSubview:self.syceeView]; + [self.syceeView addSubview:self.syceeImg]; + [self.syceeView addSubview:self.syceeNumLab]; + [self.bgView addSubview:self.giftScrollView]; + NSString *giftStr = [[NSBundle mainBundle] pathForResource:@"giftImg" ofType:@"plist"]; + giftArray = [NSArray arrayWithContentsOfFile:giftStr]; + [self createGiftBtn]; + [self addSubview:self.sendGiftView]; + + UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(dismis)]; + [self addGestureRecognizer:tap]; + + + } + return self; +} + +- (UIView *)bgView{ + if (!_bgView) { + _bgView = [[UIView alloc]initWithFrame:CGRectMake(0,KSCREEN_HEIGHT, KSCREEN_WIDTH, 230)]; + _bgView.backgroundColor = [UIColor whiteColor]; + } + return _bgView; +} + +- (UIView *)syceeView{ + if (!_syceeView) { + _syceeView = [[UIView alloc] initWithFrame:CGRectMake(KSCREEN_WIDTH-100, 5, 90, 20)]; + [_syceeView setImageRoundRadius:10 BorderWidth:0.5 borderColor:LINECOLOUR]; + } + return _syceeView; +} + +- (UIImageView *)syceeImg{ + if (!_syceeImg) { + _syceeImg = [[UIImageView alloc] initWithFrame:CGRectMake(10, 2, 22, 16)]; + _syceeImg.image = [UIImage imageNamed:@"lw-yb"]; + } + return _syceeImg; +} + +- (UILabel *)syceeNumLab{ + if (!_syceeNumLab) { + _syceeNumLab = [[UILabel alloc] initWithFrame:CGRectMake(_syceeImg.right, 0, _syceeView.width-15-22, 20)]; + _syceeNumLab.textColor = [UIColor orangeColor]; + _syceeNumLab.font = [UIFont systemFontOfSize:13]; + _syceeNumLab.text = [NSString stringWithFormat:@"%@",USER_INGOT]; + _syceeNumLab.textAlignment = NSTextAlignmentCenter; + } + return _syceeNumLab; +} + +- (UIScrollView *)giftScrollView{ + if (!_giftScrollView) { + _giftScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 30, KSCREEN_WIDTH,self.bgView.height-_syceeNumLab.height)]; + _giftScrollView.backgroundColor = UIColorFromRGB(0xf3f3f3); + [_giftScrollView setContentSize:CGSizeMake(65*8+90, self.height-40)]; + _giftScrollView.showsHorizontalScrollIndicator = NO; + _giftScrollView.showsVerticalScrollIndicator = NO; + } + return _giftScrollView; +} + + +- (void)show { + self.frame=[UIScreen mainScreen].bounds; + [[UIApplication sharedApplication].keyWindow addSubview:self]; + [UIView animateWithDuration:0.3 animations:^{ + self.bgView.frame= CGRectMake(0,KSCREEN_HEIGHT-_bgView.height, KSCREEN_WIDTH, _bgView.height); + }]; +} +- (void)dismis { + [UIView animateWithDuration:0.3 animations:^{ + self.bgView.frame= CGRectMake(0,KSCREEN_HEIGHT, KSCREEN_WIDTH, _bgView.height); + self.sendGiftView.hidden = YES; + } completion:^(BOOL finished) { + if (finished) { + [self removeFromSuperview]; + } + }]; +} + + + + + +- (void)createGiftBtn{ + for (int i=0; i + +@interface LoadingView : UIImageView + +@end diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/LoadingView.m" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/LoadingView.m" new file mode 100644 index 0000000000000000000000000000000000000000..a56fcec2c61059ab41d14229748f164b4a840bd3 --- /dev/null +++ "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/LoadingView.m" @@ -0,0 +1,28 @@ +// +// LoadingView.m +// JQ_ELOVE +// +// Created by Shmily on 17/2/22. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import "LoadingView.h" +#import "UIView+RadiusView.h" + +@implementation LoadingView + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { +// [self setImageRoundRadius:5 BorderWidth:0 borderColor:nil]; +// self.backgroundColor = UIColorFromRGBWithAlpha(0xffffff, 0.8); + NSString *path = [[NSBundle mainBundle] pathForResource:@"loading" ofType:@"gif"]; + [self sd_setImageWithURL:[NSURL fileURLWithPath:path]]; + [self setClipsToBounds:YES]; + [self setContentMode:UIViewContentModeScaleAspectFit]; + } + return self; +} + +@end diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/SendGiftView.h" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/SendGiftView.h" new file mode 100644 index 0000000000000000000000000000000000000000..893b6f0dd53f501d44e03c45a7f363b86977901e --- /dev/null +++ "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/SendGiftView.h" @@ -0,0 +1,18 @@ +// +// SendGiftView.h +// JQ_ELOVE +// +// Created by chason on 2017/3/22. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import + +@interface SendGiftView : UIView + +@property (nonatomic, strong) UIImageView *giftImgView; +@property (nonatomic, strong) UILabel *giftNameLab; +@property (nonatomic, strong) UILabel *giftValueLab; +@property (nonatomic, strong) UIButton *sendBtn; + +@end diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/SendGiftView.m" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/SendGiftView.m" new file mode 100644 index 0000000000000000000000000000000000000000..1c900135d77ea471ea193a54efe9a7774624f1b4 --- /dev/null +++ "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/SendGiftView.m" @@ -0,0 +1,67 @@ +// +// SendGiftView.m +// JQ_ELOVE +// +// Created by chason on 2017/3/22. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import "SendGiftView.h" +#import "UIView+RadiusView.h" + +@implementation SendGiftView + +- (instancetype)initWithFrame:(CGRect)frame{ + self = [super initWithFrame:frame]; + if (self) { + self.backgroundColor = [UIColor whiteColor]; + [self addSubview:self.giftImgView]; + [self addSubview:self.giftNameLab]; + [self addSubview:self.giftValueLab]; + [self addSubview:self.sendBtn]; + [self setImageRoundRadius:5 BorderWidth:0 borderColor:nil]; + + } + return self; +} + + + +- (UIImageView *)giftImgView{ + if (!_giftImgView) { + _giftImgView = [[UIImageView alloc] initWithFrame:CGRectMake((self.width-150)/2, 20, 150, 150)]; + } + return _giftImgView; +} + +- (UILabel *)giftNameLab{ + if (!_giftNameLab) { + _giftNameLab = [[UILabel alloc] initWithFrame:CGRectMake(0, _giftImgView.bottom+10, self.width, 20)]; + _giftNameLab.textAlignment = NSTextAlignmentCenter; + _giftNameLab.textColor = UIColorFromRGB(0x595959); + _giftNameLab.font = [UIFont systemFontOfSize:15]; + } + return _giftNameLab; +} + +- (UILabel *)giftValueLab{ + if (!_giftValueLab) { + _giftValueLab = [[UILabel alloc] initWithFrame:CGRectMake(0, _giftNameLab.bottom, self.width, 20)]; + _giftValueLab.textAlignment = NSTextAlignmentCenter; + _giftValueLab.textColor = [UIColor orangeColor]; + _giftValueLab.font = [UIFont systemFontOfSize:13]; + } + return _giftValueLab; +} + +- (UIButton *)sendBtn{ + if (!_sendBtn) { + _sendBtn = [[UIButton alloc] initWithFrame:CGRectMake(0, self.height-50, self.width, 50)]; + _sendBtn.backgroundColor = [UIColor orangeColor]; + [_sendBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; + [_sendBtn setTitle:@"赠送" forState:UIControlStateNormal]; + } + return _sendBtn; +} + +@end diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/XLCardSwitch/XLCard.h" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/XLCardSwitch/XLCard.h" new file mode 100755 index 0000000000000000000000000000000000000000..1e21a5067d7e7bc96e11722ad9d27a5e7f51d018 --- /dev/null +++ "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/XLCardSwitch/XLCard.h" @@ -0,0 +1,16 @@ +// +// Card.h +// CardSwitchDemo +// +// Created by Apple on 2016/11/9. +// Copyright © 2016年 Apple. All rights reserved. +// 被切换的卡片 + +#import +#import "XLCardItem.h" + +@interface XLCard : UICollectionViewCell + +@property (nonatomic, strong) XLCardItem *item; + +@end diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/XLCardSwitch/XLCard.m" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/XLCardSwitch/XLCard.m" new file mode 100755 index 0000000000000000000000000000000000000000..afa23230eec5749b901ff7035d4dd1084f36ce8f --- /dev/null +++ "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/XLCardSwitch/XLCard.m" @@ -0,0 +1,168 @@ +// +// Card.m +// CardSwitchDemo +// +// Created by Apple on 2016/11/9. +// Copyright © 2016年 Apple. All rights reserved. +// + +#import "XLCard.h" +#import "XLCardItem.h" + +@interface XLCard () { + UIView *_upView; + UIView *_downView; + + UIImageView *_imageView; + UIView *_informationView; + + UILabel *_positionLab;//位置 + UILabel *_nicknameLab;//昵称 + UILabel *_sexAndAgeLab;//性别、年龄 + UILabel *_otherInfoLab;//身高、星座、学历 + + UIButton *_phoneBtn;//手机认证 + UIButton *_realnameBtn;//实名认证 + UIButton *_tuanBtn;//青年之声认证 + UIButton *_companyBtn;//单位认证 +} +@end + +@implementation XLCard + +- (instancetype)initWithFrame:(CGRect)frame { + if (self = [super initWithFrame:frame]) { + [self buildUI]; + } + return self; +} + +- (void)buildUI { + + self.backgroundColor = [UIColor clearColor]; + + _upView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.width, self.width/4*5+10)]; + _upView.backgroundColor = [UIColor whiteColor]; + [_upView setImageRoundRadius:5 BorderWidth:0 borderColor:nil]; + [self addSubview:_upView]; + + _downView = [[UIView alloc] initWithFrame:CGRectMake(0, _upView.bottom+15, self.width, 50)]; + _downView.backgroundColor = [UIColor whiteColor]; + [_downView setImageRoundRadius:5 BorderWidth:0 borderColor:nil]; + [self addSubview:_downView]; + + _imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.width, self.width)]; + _imageView.contentMode = UIViewContentModeScaleAspectFill; + _imageView.layer.masksToBounds = true; + [_upView addSubview:_imageView]; + + _informationView = [[UIView alloc] initWithFrame:CGRectMake(0, _imageView.bottom, self.width, self.width/5+10)]; + [_upView addSubview:_informationView]; + + _positionLab = [[UILabel alloc] initWithFrame:CGRectMake(self.width/2+15, _informationView.top-10, self.width/2-30, 20)]; + _positionLab.backgroundColor = UIColorFromRGB(0xf23365); + _positionLab.font = FFONT12; + _positionLab.textColor = [UIColor whiteColor]; + _positionLab.textAlignment = NSTextAlignmentCenter; + [_positionLab setImageRoundRadius:10 BorderWidth:0 borderColor:nil]; + [_upView addSubview:_positionLab]; + + _nicknameLab = [[UILabel alloc] initWithFrame:CGRectMake(15, 10, 0, _informationView.height/2)]; + _nicknameLab.textColor = PURPLECOLOUR; + _nicknameLab.font = SYSTEMFONT(15); + [_informationView addSubview:_nicknameLab]; + + _sexAndAgeLab = [[UILabel alloc] initWithFrame:CGRectMake(_nicknameLab.right+5, 10+(_nicknameLab.height-20)/2, 60, 20)]; + _sexAndAgeLab.centerX = _nicknameLab.centerX; + _sexAndAgeLab.backgroundColor = UIColorFromRGB(0xf8ad37); + _sexAndAgeLab.textAlignment = NSTextAlignmentCenter; + _sexAndAgeLab.font = FFONT12; + _sexAndAgeLab.textColor = [UIColor whiteColor]; + [_sexAndAgeLab setImageRoundRadius:10 BorderWidth:0 borderColor:nil]; + [_informationView addSubview:_sexAndAgeLab]; + + _otherInfoLab = [[UILabel alloc] initWithFrame:CGRectMake(15, _nicknameLab.bottom, self.width-30, _informationView.height/2-10)]; + _otherInfoLab.font = FFONT12; + _otherInfoLab.textColor = UIColorFromRGB(0xb4acbf); + [_informationView addSubview:_otherInfoLab]; + + _phoneBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _phoneBtn.frame = CGRectMake(0, 0, self.width/4, _downView.height); + _phoneBtn.titleLabel.font = SYSTEMFONT(8); + [_phoneBtn setImage:[UIImage imageNamed:@"new_phone_icon"] forState:UIControlStateNormal]; + [_phoneBtn setTitleColor:UIColorFromRGB(0xb4acbf) forState:UIControlStateNormal]; + [_phoneBtn setTitle:@"手机认证" forState:UIControlStateNormal]; + [_phoneBtn setImageEdgeInsets:UIEdgeInsetsMake(-10, (_phoneBtn.width-_phoneBtn.currentImage.size.width)/2, (_phoneBtn.height-_phoneBtn.currentImage.size.height)/2-5, -(_phoneBtn.width-_phoneBtn.currentImage.size.width)/2)]; + [_phoneBtn setTitleEdgeInsets:UIEdgeInsetsMake(0, -_phoneBtn.currentImage.size.width, -_phoneBtn.currentImage.size.height, 0)]; + [_downView addSubview:_phoneBtn]; + + _realnameBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _realnameBtn.frame = CGRectMake(_phoneBtn.right, 0, self.width/4, _downView.height); + _realnameBtn.titleLabel.font = SYSTEMFONT(8); + [_realnameBtn setImage:[UIImage imageNamed:@"new_realname_hui_icon"] forState:UIControlStateNormal]; + [_realnameBtn setTitleColor:UIColorFromRGB(0xb4acbf) forState:UIControlStateNormal]; + [_realnameBtn setTitle:@"实名认证" forState:UIControlStateNormal]; + [_realnameBtn setImageEdgeInsets:UIEdgeInsetsMake(-10, (_realnameBtn.width-_realnameBtn.currentImage.size.width)/2, (_realnameBtn.height-_realnameBtn.currentImage.size.height)/2-5, -(_realnameBtn.width-_realnameBtn.currentImage.size.width)/2)]; + [_realnameBtn setTitleEdgeInsets:UIEdgeInsetsMake(0, -_realnameBtn.currentImage.size.width, -_realnameBtn.currentImage.size.height, 0)]; + [_downView addSubview:_realnameBtn]; + + _companyBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _companyBtn.frame = CGRectMake(_realnameBtn.right, 0, self.width/4, _downView.height); + _companyBtn.titleLabel.font = SYSTEMFONT(8); + [_companyBtn setImage:[UIImage imageNamed:@"new_enterprise_hui_icon"] forState:UIControlStateNormal]; + [_companyBtn setTitleColor:UIColorFromRGB(0xb4acbf) forState:UIControlStateNormal]; + [_companyBtn setTitle:@"单位认证" forState:UIControlStateNormal]; + [_companyBtn setImageEdgeInsets:UIEdgeInsetsMake(-10, (_companyBtn.width-_companyBtn.currentImage.size.width)/2, (_companyBtn.height-_companyBtn.currentImage.size.height)/2-5, -(_companyBtn.width-_companyBtn.currentImage.size.width)/2)]; + [_companyBtn setTitleEdgeInsets:UIEdgeInsetsMake(0, -_companyBtn.currentImage.size.width, -_companyBtn.currentImage.size.height, 0)]; + [_downView addSubview:_companyBtn]; + + _tuanBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _tuanBtn.frame = CGRectMake(_companyBtn.right, 0, self.width/4, _downView.height); + _tuanBtn.titleLabel.font = SYSTEMFONT(8); + [_tuanBtn setImage:[UIImage imageNamed:@"new_tuan_hui_icon"] forState:UIControlStateNormal]; + [_tuanBtn setTitleColor:UIColorFromRGB(0xb4acbf) forState:UIControlStateNormal]; + [_tuanBtn setTitle:@"青年之声认证" forState:UIControlStateNormal]; + [_tuanBtn setImageEdgeInsets:UIEdgeInsetsMake(-10, (_tuanBtn.width-_tuanBtn.currentImage.size.width)/2, (_tuanBtn.height-_tuanBtn.currentImage.size.height)/2-5, -(_tuanBtn.width-_tuanBtn.currentImage.size.width)/2)]; + [_tuanBtn setTitleEdgeInsets:UIEdgeInsetsMake(0, -_tuanBtn.currentImage.size.width, -_tuanBtn.currentImage.size.height, 0)]; + [_downView addSubview:_tuanBtn]; + + +} + +-(void)setItem:(XLCardItem *)item { + + if ([item.sex intValue] ==0) {//女 + [_imageView sd_setImageWithURL:[NSURL URLWithString:item.avatarUrl] placeholderImage:[UIImage imageNamed:@"card_girl"]]; + }else{ + [_imageView sd_setImageWithURL:[NSURL URLWithString:item.avatarUrl] placeholderImage:[UIImage imageNamed:@"card_boy"]]; + } + + _nicknameLab.width = [ZCTools labelAutoCalculateRectWith:item.nickname FontSize:15 MaxSize:CGSizeMake(self.width-70, _informationView.height/2)].width; + _sexAndAgeLab.left = _nicknameLab.right+5; + _nicknameLab.text = item.nickname; + _sexAndAgeLab.text = [NSString stringWithFormat:@"%@ %@", item.sex, item.age]; + _positionLab.text = item.place; + _otherInfoLab.text = [NSString stringWithFormat:@"%@%@%@", item.height, item.constellation, item.degree]; + //实名认证 + if ([item.realName intValue] == 1) { + [_realnameBtn setImage:[UIImage imageNamed:@"new_realname_icon"] forState:UIControlStateNormal]; + }else{ + [_realnameBtn setImage:[UIImage imageNamed:@"new_realname_hui_icon"] forState:UIControlStateNormal]; + } + + //青年之声认证 + if ([item.tuantype intValue] ==1) { + [_tuanBtn setImage:[UIImage imageNamed:@"new_tuan_icon"] forState:UIControlStateNormal]; + }else{ + [_tuanBtn setImage:[UIImage imageNamed:@"new_tuan_hui_icon"] forState:UIControlStateNormal]; + } + + //单位认证 + if ([item.kind intValue] == 1) { + [_companyBtn setImage:[UIImage imageNamed:@"new_enterprise_icon"] forState:UIControlStateNormal]; + }else{ + [_companyBtn setImage:[UIImage imageNamed:@"new_enterprise_hui_icon"] forState:UIControlStateNormal]; + } +} + +@end diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/XLCardSwitch/XLCardItem.h" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/XLCardSwitch/XLCardItem.h" new file mode 100755 index 0000000000000000000000000000000000000000..ef6a12ab6575a56e26784da2e8710b14ef004153 --- /dev/null +++ "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/XLCardSwitch/XLCardItem.h" @@ -0,0 +1,30 @@ +// +// CardModel.h +// CardSwitchDemo +// +// Created by Apple on 2017/1/6. +// Copyright © 2017年 Apple. All rights reserved. +// + +#import + +@interface XLCardItem : NSObject + +- (void) initXLCardItemWithDict:(NSDictionary *)dict; + +@property (nonatomic, copy) NSString *avatarUrl; +@property (nonatomic, copy) NSString *userid; +@property (nonatomic, copy) NSString *nickname; +@property (nonatomic, copy) NSString *sex; +@property (nonatomic, copy) NSString *age; +@property (nonatomic, copy) NSString *height; +@property (nonatomic, copy) NSString *constellation; +@property (nonatomic, copy) NSString *degree; +@property (nonatomic, copy) NSString *place; + + +@property (nonatomic, copy) NSString *realName; +@property (nonatomic, copy) NSString *tuantype; +@property (nonatomic, copy) NSString *kind; + +@end diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/XLCardSwitch/XLCardItem.m" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/XLCardSwitch/XLCardItem.m" new file mode 100755 index 0000000000000000000000000000000000000000..4a061b706b911c3c8a978611ac7303fda3e9339d --- /dev/null +++ "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/XLCardSwitch/XLCardItem.m" @@ -0,0 +1,58 @@ +// +// CardModel.m +// CardSwitchDemo +// +// Created by Apple on 2017/1/6. +// Copyright © 2017年 Apple. All rights reserved. +// + +#import "XLCardItem.h" + +@implementation XLCardItem + +- (void)initXLCardItemWithDict:(NSDictionary *)dict +{ + if (dict) { + _avatarUrl = dict[@"avatar"]; + + _userid = dict[@"otherID"]; + _nickname = ToString(dict[@"nickname"]); + _sex = [ToString(dict[@"sex"]) stringSexByReplacingChinese]; + if (STR_IS_NOT_EMPTY(ToString(dict[@"age"]))) { + _age = [NSString stringWithFormat:@"%@岁",ToString(dict[@"age"])]; + }else{ + _age = @""; + } + + _realName = ToString(dict[@"realnametype"]); + _kind = ToString(dict[@"kind"]); + _tuantype = ToString(dict[@"youthLeague"]); + + if (STR_IS_NOT_EMPTY(ToString(dict[@"height"]))) { + _height = [NSString stringWithFormat:@"%@cm",ToString(dict[@"height"])]; + }else{ + _height = @""; + } +// _height = @"170cm"; + + if (STR_IS_NOT_EMPTY(ToString(dict[@"constellation"]))) { + _constellation = [NSString stringWithFormat:@" | %@",ToString(dict[@"constellation"])]; + }else{ + _constellation = @""; + } + + if (STR_IS_NOT_EMPTY(ToString(dict[@"degree"])) && [dict[@"degree"] intValue] != 0) { + _degree = [NSString stringWithFormat:@" | %@",[ToDouble(dict[@"degree"]) stringDegreeByReplacingChinese]]; + }else{ + _degree = @""; + } + + if (STR_IS_NOT_EMPTY(ToString(dict[@"localplace"]))) { + _place = [NSString stringWithFormat:@"%@",ToString(dict[@"localplace"])]; + }else{ + _place = @"未知"; + } + } +} + +@end diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/XLCardSwitch/XLCardSwitch.h" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/XLCardSwitch/XLCardSwitch.h" new file mode 100755 index 0000000000000000000000000000000000000000..d725311f3347adf4af9864216b9b00b2f8b09f36 --- /dev/null +++ "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/XLCardSwitch/XLCardSwitch.h" @@ -0,0 +1,57 @@ +// +// XLCardSwitch.h +// XLCardSwitchDemo +// +// Created by Apple on 2017/1/20. +// Copyright © 2017年 Apple. All rights reserved. +// + +#import +#import "XLCardItem.h" + +@protocol XLCardSwitchDelegate + +@optional + +/** + 滚动代理方法 + */ +-(void)XLCardSwitchDidSelectedAt:(NSInteger)index; + +/** + 点击代理方法 + */ +- (void)XLCardClickedAt:(NSInteger)index; + +@end + +@interface XLCardSwitch : UIView +/** + 当前选中位置 + */ +@property (nonatomic, assign, readwrite) NSInteger selectedIndex; +/** + 设置数据源 + */ +@property (nonatomic, strong) NSArray *items; +/** + 代理 + */ +@property (nonatomic, weak) iddelegate; + +/** + 是否分页,默认为true + */ +@property (nonatomic, assign) BOOL pagingEnabled; + +/** + 手动滚动到某个卡片位置 + */ +- (void)switchToIndex:(NSInteger)index animated:(BOOL)animated; + +/** + 刷新数据 + */ +- (void)reloadCollectionView; + +@end diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/XLCardSwitch/XLCardSwitch.m" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/XLCardSwitch/XLCardSwitch.m" new file mode 100755 index 0000000000000000000000000000000000000000..7c77f8faeeb5eecfbfb6348212ee65666f0d67c6 --- /dev/null +++ "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/XLCardSwitch/XLCardSwitch.m" @@ -0,0 +1,164 @@ +// +// XLCardSwitch.m +// XLCardSwitchDemo +// +// Created by Apple on 2017/1/20. +// Copyright © 2017年 Apple. All rights reserved. +// + +#import "XLCardSwitch.h" +#import "XLCardSwitchFlowLayout.h" +#import "XLCard.h" + +@interface XLCardSwitch () { + UICollectionView *_collectionView; + + CGFloat _dragStartX; + + CGFloat _dragEndX; +} +@end + +@implementation XLCardSwitch + +- (instancetype)initWithFrame:(CGRect)frame { + if (self = [super initWithFrame:frame]) { + [self buildUI]; + } + return self; +} + +- (void)buildUI { + + [self addCollectionView]; +} + +- (void)addCollectionView { + //避免UINavigation对UIScrollView产生的便宜问题 + [self addSubview:[UIView new]]; + XLCardSwitchFlowLayout *flowLayout = [[XLCardSwitchFlowLayout alloc] init]; + _collectionView = [[UICollectionView alloc] initWithFrame:self.bounds collectionViewLayout:flowLayout]; + _collectionView.showsHorizontalScrollIndicator = false; + _collectionView.backgroundColor = [UIColor clearColor]; + [_collectionView registerClass:[XLCard class] forCellWithReuseIdentifier:@"XLCard"]; + _collectionView.userInteractionEnabled = true; + _collectionView.delegate = self; + _collectionView.dataSource = self; + [self addSubview:_collectionView]; +} + +#pragma mark - +#pragma mark Setter +-(void)setItems:(NSArray *)items { + _items = items; + [_collectionView reloadData]; +} + +#pragma mark - +#pragma mark CollectionDelegate +//配置cell居中 +- (void)fixCellToCenter { + //最小滚动距离 + float dragMiniDistance = self.bounds.size.width/20.0f; + if (_dragStartX - _dragEndX >= dragMiniDistance) { + _selectedIndex -= 1;//向右 + }else if(_dragEndX - _dragStartX >= dragMiniDistance){ + _selectedIndex += 1;//向左 + } + NSInteger maxIndex = [_collectionView numberOfItemsInSection:0] - 1; + _selectedIndex = _selectedIndex <= 0 ? 0 : _selectedIndex; + _selectedIndex = _selectedIndex >= maxIndex ? maxIndex : _selectedIndex; + [self scrollToCenter]; +} + +//滚动到中间 +- (void)scrollToCenter { + [_collectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForRow:_selectedIndex inSection:0] atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally animated:YES]; + + [self performDelegateMethod]; +} + +#pragma mark - +#pragma mark CollectionDelegate +//在不使用分页滚动的情况下需要手动计算当前选中位置 -> _selectedIndex +- (void)scrollViewDidScroll:(UIScrollView *)scrollView { + if (_pagingEnabled) {return;} + if (!_collectionView.visibleCells.count) {return;} + if (!scrollView.isDragging) {return;} + CGRect currentRect = _collectionView.bounds; + currentRect.origin.x = _collectionView.contentOffset.x; + for (XLCard *card in _collectionView.visibleCells) { + if (CGRectContainsRect(currentRect, card.frame)) { + NSInteger index = [_collectionView indexPathForCell:card].row; + if (index != _selectedIndex) { + _selectedIndex = index; + } + } + } +} + +//手指拖动开始 +- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { + _dragStartX = scrollView.contentOffset.x; +} + +//手指拖动停止 +- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate { + if (!_pagingEnabled) {return;} + _dragEndX = scrollView.contentOffset.x; + dispatch_async(dispatch_get_main_queue(), ^{ + [self fixCellToCenter]; + }); +} + +//点击方法 +- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { + _selectedIndex = indexPath.row; + if ([_delegate respondsToSelector:@selector(XLCardClickedAt:)]) { + [_delegate XLCardClickedAt:indexPath.row]; + } +} + +#pragma mark - +#pragma mark CollectionDataSource + +- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { + return _items.count; +} + +- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView { + return 1; +} + +- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { + static NSString* cellId = @"XLCard"; + XLCard* card = [collectionView dequeueReusableCellWithReuseIdentifier:cellId forIndexPath:indexPath]; + card.item = _items[indexPath.row]; + return card; +} + +#pragma mark - +#pragma mark 功能方法 + +- (void)setSelectedIndex:(NSInteger)selectedIndex { + [self switchToIndex:selectedIndex animated:false]; +} + +- (void)switchToIndex:(NSInteger)index animated:(BOOL)animated { + _selectedIndex = index; + [_collectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForRow:index inSection:0] atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally animated:animated]; + [self performDelegateMethod]; +} + +- (void)performDelegateMethod { + if ([_delegate respondsToSelector:@selector(XLCardSwitchDidSelectedAt:)]) { + [_delegate XLCardSwitchDidSelectedAt:_selectedIndex]; + } +} + +- (void)reloadCollectionView +{ + [_collectionView reloadData]; +} + +@end diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/XLCardSwitch/XLCardSwitchFlowLayout.h" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/XLCardSwitch/XLCardSwitchFlowLayout.h" new file mode 100755 index 0000000000000000000000000000000000000000..40b8a30a02c4e295d0cdccca2f36f6c20267d9d6 --- /dev/null +++ "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/XLCardSwitch/XLCardSwitchFlowLayout.h" @@ -0,0 +1,13 @@ +// +// XLCardSwitchFlowLayout.h +// XLCardSwitchDemo +// +// Created by Apple on 2017/1/20. +// Copyright © 2017年 Apple. All rights reserved. +// + +#import + +@interface XLCardSwitchFlowLayout : UICollectionViewFlowLayout + +@end diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/XLCardSwitch/XLCardSwitchFlowLayout.m" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/XLCardSwitch/XLCardSwitchFlowLayout.m" new file mode 100755 index 0000000000000000000000000000000000000000..f5978935e04c5e85119a0f16d9cb02825a187d36 --- /dev/null +++ "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/XLCardSwitch/XLCardSwitchFlowLayout.m" @@ -0,0 +1,93 @@ +// +// XLCardSwitchFlowLayout.m +// XLCardSwitchDemo +// +// Created by Apple on 2017/1/20. +// Copyright © 2017年 Apple. All rights reserved. +// + +#import "XLCardSwitchFlowLayout.h" + +//居中卡片宽度与据屏幕宽度比例 +static float CardWidthScale = 0.7f; +static float CardHeightScale = 0.7f; + +@implementation XLCardSwitchFlowLayout + +//初始化方法 +- (void)prepareLayout { + [super prepareLayout]; + self.scrollDirection = UICollectionViewScrollDirectionHorizontal; + self.sectionInset = UIEdgeInsetsMake(0, [self collectionInset], 0, [self collectionInset]); +} + +//设置缩放动画 +- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect { + + //扩大控制范围,防止出现闪屏现象 + CGRect bigRect = rect; + bigRect.size.width = rect.size.width + 2*[self cellWidth]; + bigRect.origin.x = rect.origin.x - [self cellWidth]; + + NSArray *arr = [self getCopyOfAttributes:[super layoutAttributesForElementsInRect:bigRect]]; + //屏幕中线 + CGFloat centerX = self.collectionView.contentOffset.x + self.collectionView.bounds.size.width/2.0f; + //刷新cell缩放 + for (UICollectionViewLayoutAttributes *attributes in arr) { + CGFloat distance = fabs(attributes.center.x - centerX); + //移动的距离和屏幕宽度的的比例 + CGFloat apartScale = distance/self.collectionView.bounds.size.width; + //把卡片移动范围固定到 -π/4到 +π/4这一个范围内 + CGFloat scale = fabs(cos(apartScale * M_PI/4)); + //设置cell的缩放 按照余弦函数曲线 越居中越趋近于1 + attributes.transform = CGAffineTransformMakeScale(scale, scale); + } + return arr; +} + +#pragma mark - +#pragma mark 配置方法 + +//卡片宽度 +- (CGFloat)cellWidth { + return self.collectionView.bounds.size.width * CardWidthScale; +} + +//卡片间隔 +- (float)cellMargin { + return (self.collectionView.bounds.size.width - [self cellWidth])/7; +} + +//设置左右缩进 +- (CGFloat)collectionInset { + return self.collectionView.bounds.size.width/2.0f - [self cellWidth]/2.0f; +} + +#pragma mark - +#pragma mark 约束设定 +//最小纵向间距 +- (CGFloat)minimumLineSpacing { + return [self cellMargin]; +} +//cell大小 +- (CGSize)itemSize { + return CGSizeMake([self cellWidth],self.collectionView.bounds.size.height * CardHeightScale); +} + +#pragma mark - +#pragma mark 其他设定 +//是否实时刷新布局 +- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds { + return true; +} + +//防止报错 先复制attributes +- (NSArray *)getCopyOfAttributes:(NSArray *)attributes { + NSMutableArray *copyArr = [NSMutableArray new]; + for (UICollectionViewLayoutAttributes *attribute in attributes) { + [copyArr addObject:[attribute copy]]; + } + return copyArr; +} + +@end diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/.DS_Store" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..aae34cb34b1ec9814b2abde3b2da11d50a90188c Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/.DS_Store" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/QYActionPaopaoView.h" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/QYActionPaopaoView.h" new file mode 100644 index 0000000000000000000000000000000000000000..c41003b4ed65419f009bedcc934a46d1bd368491 --- /dev/null +++ "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/QYActionPaopaoView.h" @@ -0,0 +1,13 @@ +// +// QYActionPaopaoView.h +// JQQY +// +// Created by Shmily on 2017/11/20. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import + +@interface QYActionPaopaoView : UIView + +@end diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/QYActionPaopaoView.m" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/QYActionPaopaoView.m" new file mode 100644 index 0000000000000000000000000000000000000000..7cdf5d10464fd2e6593692d25548e0f539db16fd --- /dev/null +++ "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/QYActionPaopaoView.m" @@ -0,0 +1,68 @@ +// +// QYActionPaopaoView.m +// JQQY +// +// Created by Shmily on 2017/11/20. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "QYActionPaopaoView.h" +#import + +#define kArrorHeight 8 + +@implementation QYActionPaopaoView + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + self.backgroundColor = [UIColor clearColor]; + } + return self; +} + +#pragma mark - draw rect +//画对话框--->气泡效果---->类似于YWRectAnnotationView中的seT方法 +- (void)drawRect:(CGRect)rect +{ + [self drawInContext:UIGraphicsGetCurrentContext()]; + + self.layer.shadowColor = [[UIColor blackColor] CGColor]; + self.layer.shadowOpacity = 1.0; + self.layer.shadowOffset = CGSizeMake(0.0f, 0.0f); + +} + +- (void)drawInContext:(CGContextRef)context +{ + + CGContextSetLineWidth(context, 2.0); + CGContextSetFillColorWithColor(context, [UIColor colorWithRed:0.3 green:0.3 blue:0.3 alpha:0.8].CGColor); + + [self getDrawPath:context]; + CGContextFillPath(context); + +} + +- (void)getDrawPath:(CGContextRef)context +{ + CGRect rrect = self.bounds; + CGFloat radius = 6.0; + CGFloat minx = CGRectGetMinX(rrect), + midx = CGRectGetMidX(rrect), + maxx = CGRectGetMaxX(rrect); + CGFloat miny = CGRectGetMinY(rrect), + maxy = CGRectGetMaxY(rrect)-kArrorHeight; + + CGContextMoveToPoint(context, midx+kArrorHeight, maxy); + CGContextAddLineToPoint(context,midx, maxy+kArrorHeight); + CGContextAddLineToPoint(context,midx-kArrorHeight, maxy); + + CGContextAddArcToPoint(context, minx, maxy, minx, miny, radius); + CGContextAddArcToPoint(context, minx, minx, maxx, miny, radius); + CGContextAddArcToPoint(context, maxx, miny, maxx, maxx, radius); + CGContextAddArcToPoint(context, maxx, maxy, midx, maxy, radius); + CGContextClosePath(context); +} +@end diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/QYCluster.h" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/QYCluster.h" new file mode 100644 index 0000000000000000000000000000000000000000..ecfd2707d5e90c57da8187e38a9dc9834c0da569 --- /dev/null +++ "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/QYCluster.h" @@ -0,0 +1,31 @@ +// +// QYCluster.h +// JQQY +// +// Created by Shmily on 2017/12/4. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import + +@interface QYCluster : NSObject + +@property (nonatomic, copy) NSString *nickname; +@property (nonatomic, copy) NSString *userID; +@property (nonatomic, copy) NSString *localplace; +@property (nonatomic, assign) double lng; +@property (nonatomic, assign) double lat; +@property (nonatomic, copy) NSString *height; +@property (nonatomic, copy) NSString *distance; +@property (nonatomic, copy) NSString *degree; +@property (nonatomic, copy) NSString *avatar; +@property (nonatomic, copy) NSString *age; +@property (nonatomic,copy)NSString *ifattention; + +@property (nonatomic, assign)CLLocationCoordinate2D pt; + + +- (void)initData:(NSDictionary *)dict; + + +@end diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/QYCluster.m" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/QYCluster.m" new file mode 100644 index 0000000000000000000000000000000000000000..725c616d1908175a4502edf52072abfe49b91cca --- /dev/null +++ "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/QYCluster.m" @@ -0,0 +1,32 @@ +// +// QYCluster.m +// JQQY +// +// Created by Shmily on 2017/12/4. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "QYCluster.h" + +@implementation QYCluster + +- (void)initData:(NSDictionary *)dict +{ + self.nickname = dict[@"nickname"]; + self.localplace = dict[@"localplace"]; + self.lat = [dict[@"lat"] doubleValue]; + self.lng = [dict[@"lng"] doubleValue]; + self.height = ToString(dict[@"height"]); + self.distance = dict[@"distance"]; + self.age = ToString(dict[@"age"]); + self.avatar = dict[@"avatar"]; + self.userID = dict[@"userID"]; + self.degree = ToString(dict[@"degree"]); + self.ifattention = ToString(dict[@"ifattention"]); + self.pt = CLLocationCoordinate2DMake(self.lat,self.lng);//纬度,经度 + +} + + + +@end diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/QYPointAnnotation.h" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/QYPointAnnotation.h" new file mode 100644 index 0000000000000000000000000000000000000000..bc6d0234049a44d553f3e50dc4b8e7a9ad63e258 --- /dev/null +++ "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/QYPointAnnotation.h" @@ -0,0 +1,19 @@ +// +// QYPointAnnotation.h +// JQQY +// +// Created by Shmily on 2017/11/20. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import //引入base相关所有的头文件 +#import //引入地图功能所有的头文件 +#import "BMKClusterManager.h" //点聚合管理类,使用百度的点聚合算法 + +@interface QYPointAnnotation : BMKPointAnnotation + +@property (nonatomic, assign) NSInteger size; +@property (nonatomic,strong) BMKCluster *cluster; + + +@end diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/QYPointAnnotation.m" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/QYPointAnnotation.m" new file mode 100644 index 0000000000000000000000000000000000000000..b4ac7888cb8da2363c51122c19b1480eae928ff5 --- /dev/null +++ "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/QYPointAnnotation.m" @@ -0,0 +1,15 @@ +// +// QYPointAnnotation.m +// JQQY +// +// Created by Shmily on 2017/11/20. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "QYPointAnnotation.h" + +@implementation QYPointAnnotation + + + +@end diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/QYRoundAnnotationView.h" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/QYRoundAnnotationView.h" new file mode 100644 index 0000000000000000000000000000000000000000..0393a01028e83766fe462e1356cda97d8f9c8b87 --- /dev/null +++ "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/QYRoundAnnotationView.h" @@ -0,0 +1,19 @@ +// +// JQRoundAnnotationView.h +// JQQY +// +// Created by Shmily on 2017/11/20. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import +#import +@class QYPointAnnotation; +@interface QYRoundAnnotationView : BMKAnnotationView +{ +} + +@property (nonatomic,retain)QYPointAnnotation *pointAtion; + +@end + diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/QYRoundAnnotationView.m" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/QYRoundAnnotationView.m" new file mode 100644 index 0000000000000000000000000000000000000000..14977b38c3673e59a34125b97b0af951363592e0 --- /dev/null +++ "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/QYRoundAnnotationView.m" @@ -0,0 +1,261 @@ +// +// JQRoundAnnotationView.m +// JQQY +// +// Created by Shmily on 2017/11/20. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "QYRoundAnnotationView.h" +#import "QYActionPaopaoView.h" +#import "AvatarImageView.h" +#import "BMKClusterManager.h" //点聚合管理类,使用百度的点聚合算法 +#import "QYPointAnnotation.h" +#import "QYCluster.h" + +#define k_width 48 +#define k_height 52 + +#define four_side 11 + + +#define kCalloutWidth 200.0 +#define kCalloutHeight 70.0 +@interface QYRoundAnnotationView() +{ + QYActionPaopaoView *_CalloutView; + +} + +@property (nonatomic,retain)AvatarImageView *headImageView; +@property (nonatomic,retain)AvatarImageView *headImageView_1; +@property (nonatomic,retain)AvatarImageView *headImageView_2; +@property (nonatomic,retain)AvatarImageView *headImageView_3; + + +@property (nonatomic,retain)UIImageView *contentView; +@property (nonatomic,retain)UILabel *numLabel; + +@end +@implementation QYRoundAnnotationView + +-(instancetype)initWithAnnotation:(id)annotation reuseIdentifier:(NSString *)reuseIdentifier{ + + if (self=[super initWithAnnotation:annotation reuseIdentifier:reuseIdentifier]) + { + [self setBounds:CGRectMake(0, 0,k_width,k_height)]; + + self.backgroundColor = [UIColor clearColor]; + + [self addSubview:self.contentView]; + [self.contentView addSubview:self.headImageView]; + [self.contentView addSubview:self.headImageView_1]; + [self.contentView addSubview:self.headImageView_2]; + [self.contentView addSubview:self.headImageView_3]; + + + [self addSubview:self.numLabel]; + } + + return self; +} + +- (UILabel *)numLabel +{ + if (!_numLabel) { + _numLabel = [[UILabel alloc]initWithFrame:CGRectMake(k_width-17,4,16,16)]; + _numLabel.backgroundColor = CTHEMECOLOR; + _numLabel.textColor = [UIColor whiteColor]; + _numLabel.textAlignment = NSTextAlignmentCenter; + [_numLabel setImageRoundRadius:8 BorderWidth:0 borderColor:0]; + _numLabel.font = [UIFont systemFontOfSize:8]; + } + return _numLabel; +} + +- (UIImageView *)contentView +{ + if (!_contentView) { + _contentView = [[UIImageView alloc] initWithFrame:CGRectMake(5, 5,k_width-10,k_height-10)]; + _contentView.image = [UIImage imageNamed:@"qipao"]; + + } + return _contentView; +} + +- (AvatarImageView *)headImageView +{ + if (!_headImageView) { + _headImageView = [[AvatarImageView alloc]initWithFrame:CGRectMake(4.8,4.6, 28,28)]; + _headImageView.initialsFont = [UIFont systemFontOfSize:7]; + } + return _headImageView; +} +- (AvatarImageView *)headImageView_1 +{ + if (!_headImageView_1) { + _headImageView_1 = [[AvatarImageView alloc]initWithFrame:CGRectMake(0,0, 30, 30)]; + _headImageView_1.initialsFont = [UIFont systemFontOfSize:7]; + } + return _headImageView_1; +} + +- (AvatarImageView *)headImageView_2 +{ + if (!_headImageView_2) { + _headImageView_2 = [[AvatarImageView alloc]initWithFrame:CGRectMake(0,0, 30, 30)]; + _headImageView_2.initialsFont = [UIFont systemFontOfSize:7]; + } + return _headImageView_2; +} + + +- (AvatarImageView *)headImageView_3 +{ + if (!_headImageView_3) { + _headImageView_3 = [[AvatarImageView alloc]initWithFrame:CGRectMake(0,0, 30, 30)]; + _headImageView_3.initialsFont = [UIFont systemFontOfSize:7]; + } + return _headImageView_3; +} + + + + +- (void)setPointAtion:(QYPointAnnotation *)pointAtion +{ + _pointAtion = pointAtion; + + BMKCluster *cluster = pointAtion.cluster; + if (cluster.size>10) { + _numLabel.text = @"9+"; + _numLabel.hidden = NO; + }else{ + if (cluster.size>1) { + _numLabel.text = [NSString stringWithFormat:@"%lu",(unsigned long)cluster.size]; + _numLabel.hidden = NO; + }else{ + _numLabel.hidden = YES; + } + } + if (cluster.size<2) {//一张图 + _headImageView.frame = CGRectMake(4.8,4.6, 28,28); + _headImageView_1.hidden = YES; + _headImageView_2.hidden = YES; + _headImageView_3.hidden = YES; + _headImageView.hidden = NO; + _headImageView.initialsFont = [UIFont systemFontOfSize:6]; + + + BMKClusterItem *item = [cluster.clusterItems firstObject]; + [_headImageView setTitle:item.cluster.nickname imageUrl:item.cluster.avatar]; + + + }else if (cluster.size<4){//两张 + _headImageView.frame = CGRectMake(4.8,12, 14,14); + _headImageView_1.frame = CGRectMake(_headImageView.right,12, 14,14); + _headImageView.initialsFont = [UIFont systemFontOfSize:5]; + _headImageView_1.initialsFont = [UIFont systemFontOfSize:5]; + + _headImageView_2.hidden = YES; + _headImageView_3.hidden = YES; + _headImageView_1.hidden = NO; + _headImageView.hidden = NO; + + BMKClusterItem *item = [cluster.clusterItems firstObject]; + [_headImageView setTitle:item.cluster.nickname imageUrl:item.cluster.avatar]; + + BMKClusterItem *lastitem = cluster.clusterItems[1]; + [_headImageView_1 setTitle:lastitem.cluster.nickname imageUrl:lastitem.cluster.avatar]; + + + + }else if (cluster.size>=4){//四张 + _headImageView.frame = CGRectMake(8,7,four_side,four_side); + _headImageView_1.frame = CGRectMake(_headImageView.right,_headImageView.top,four_side,four_side); + _headImageView_2.frame = CGRectMake(_headImageView.left,_headImageView.bottom+1,four_side,four_side); + _headImageView_3.frame = CGRectMake(_headImageView_2.right,_headImageView_1.bottom+1,four_side,four_side); + _headImageView.hidden = NO; + _headImageView_1.hidden = NO; + _headImageView_2.hidden = NO; + _headImageView_3.hidden = NO; + + _headImageView.initialsFont = [UIFont systemFontOfSize:4]; + _headImageView_1.initialsFont = [UIFont systemFontOfSize:4]; + _headImageView_2.initialsFont = [UIFont systemFontOfSize:4]; + _headImageView_3.initialsFont = [UIFont systemFontOfSize:4]; + + + + BMKClusterItem *item = [cluster.clusterItems firstObject]; + [_headImageView setTitle:item.cluster.nickname imageUrl:item.cluster.avatar]; + + BMKClusterItem *scenditem = cluster.clusterItems[1]; + [_headImageView_1 setTitle:scenditem.cluster.nickname imageUrl:scenditem.cluster.avatar]; + + BMKClusterItem *thirditem = cluster.clusterItems[2]; + [_headImageView_2 setTitle:thirditem.cluster.nickname imageUrl:thirditem.cluster.avatar]; + + BMKClusterItem *lastitem = cluster.clusterItems[3]; + [_headImageView_3 setTitle:lastitem.cluster.nickname imageUrl:lastitem.cluster.avatar]; + } +} + +- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event +{ + BOOL inside = [super pointInside:point withEvent:event]; + if (!inside && self.selected) + { +#pragma mark - **************** 自定义气泡 + // inside = [_CalloutView pointInside:[self convertPoint:point toView:_CalloutView] withEvent:event]; + } + + return inside; +} +- (void)setSelected:(BOOL)selected +{ + [self setSelected:selected animated:NO]; +} +- (void)setSelected:(BOOL)selected animated:(BOOL)animated +{ +#pragma mark - **************** 自定义气泡 + return;/* + if (self.selected == selected)return; + if (selected) + { + if (_CalloutView == nil) + { + _CalloutView = [[QYActionPaopaoView alloc] initWithFrame:CGRectMake(0, 0, kCalloutWidth, kCalloutHeight)]; + _CalloutView.center = CGPointMake(CGRectGetWidth(_contentView. bounds) / 2.f + self.calloutOffset.x,-CGRectGetHeight(_CalloutView.bounds) / 2.f + self.calloutOffset.y); + UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect]; + btn.frame = CGRectMake(10, 10, 40, 40); + [btn setTitle:@"yuwei" forState:UIControlStateNormal]; + [btn setBackgroundColor:[UIColor whiteColor]]; + [btn setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted]; + + [btn addTarget:self action:@selector(click) forControlEvents:UIControlEventTouchUpInside]; + UILabel *name = [[UILabel alloc] initWithFrame:CGRectMake(60, 10, 100, 30)]; + name.backgroundColor = [UIColor clearColor]; + name.textColor = [UIColor whiteColor]; + name.text = @"Mr-yuwei"; + + [_CalloutView addSubview:btn]; + [_CalloutView addSubview:name]; + + } + + [self addSubview:_CalloutView]; + } + else + { + [_CalloutView removeFromSuperview]; + } + [super setSelected:selected animated:animated]; + */ +} +-(void)click{ + + [_CalloutView removeFromSuperview]; +} +@end + diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/add_map@2x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/add_map@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..13939b3f1edc2755637b004ee52c822d59058063 Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/add_map@2x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/add_map@3x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/add_map@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..510bc42d6eeec2c36698438009b8719253a3038b Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/add_map@3x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/det_map@2x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/det_map@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..35674dc54dea1c12a1a3db92332d01f57533adc1 Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/det_map@2x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/det_map@3x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/det_map@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..5b30053fd21310e8c99d299e96178c978efe0d9a Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/det_map@3x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/qipao@2x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/qipao@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..33659318f5ef43dbd433d430fe255141f5f2043b Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/qipao@2x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/qipao@3x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/qipao@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..382f7d4e2ef01f138e8e59b8720f51214475f4da Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/qipao@3x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/refresh@2x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/refresh@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..49a50f5af5f10bf3eec5fd47cf84ed41b96b8c98 Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/refresh@2x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/refresh@3x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/refresh@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..39e508ee961bf1bbb26d67904ff59de37b7fa652 Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/refresh@3x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/refresh_ding@2x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/refresh_ding@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..0774d3a4429deac23a10a27c32373d011b8add45 Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/refresh_ding@2x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/refresh_ding@3x.png" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/refresh_ding@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..244e1f870aae3fc3d47b4052f7ea07ded69013a7 Binary files /dev/null and "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/mapView/refresh_ding@3x.png" differ diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/messageView/SetPushCell.h" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/messageView/SetPushCell.h" new file mode 100644 index 0000000000000000000000000000000000000000..3c043738b4f7cb30c1da5fc3b04f7e0ab6d5766b --- /dev/null +++ "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/messageView/SetPushCell.h" @@ -0,0 +1,21 @@ +// +// SetPushCell.h +// JQ_ELOVE +// +// Created by Shmily on 17/3/1. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import + +@interface SetPushCell : UITableViewCell + +@property (nonatomic,retain)UILabel *nameLB; +@property (nonatomic,retain)UIButton *switBtn; +@property (nonatomic,retain)UIView *bgView; + +@property (nonatomic,retain)UILabel *downlineLB; + + + +@end diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/messageView/SetPushCell.m" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/messageView/SetPushCell.m" new file mode 100644 index 0000000000000000000000000000000000000000..70ad9c314cc96257cf501a1f1d68350aa2baa5d7 --- /dev/null +++ "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/messageView/SetPushCell.m" @@ -0,0 +1,73 @@ +// +// SetPushCell.m +// JQ_ELOVE +// +// Created by Shmily on 17/3/1. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import "SetPushCell.h" + +@implementation SetPushCell + +- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier +{ + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + self.contentView.backgroundColor = RGBA(249, 249, 249, 1); + [self.contentView addSubview:self.bgView]; + [self.bgView addSubview:self.nameLB]; + [self.bgView addSubview:self.switBtn]; + [self.bgView addSubview:self.downlineLB]; + } + return self; +} + +- (UIView *)bgView +{ + if (!_bgView) { + _bgView = [[UIView alloc]initWithFrame:CGRectMake(0, 0,KSCREEN_WIDTH, 45)]; + _bgView.backgroundColor = [UIColor whiteColor]; + } + return _bgView; +} + +- (UILabel *)nameLB +{ + if (!_nameLB) { + _nameLB = [[UILabel alloc]initWithFrame:CGRectMake(15, 15/2, 160, 30)]; + _nameLB.font = [UIFont systemFontOfSize:15]; + _nameLB.textColor = UIColorFromRGB(0x595959); + } + return _nameLB; +} + +- (UIButton *)switBtn +{ + if (!_switBtn) { + _switBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _switBtn.frame = CGRectMake(KSCREEN_WIDTH-60, 15/2, 50, 30); + _switBtn.titleLabel.font = [UIFont systemFontOfSize:12]; + [_switBtn setTitleColor:UIColorFromRGB(0x989898) forState:0]; + } + return _switBtn; +} + +- (UILabel *)downlineLB +{ + if (!_downlineLB) { + _downlineLB = [[UILabel alloc]initWithFrame:CGRectMake(15,_bgView.height-0.5,KSCREEN_WIDTH-15, 0.5)]; + _downlineLB.backgroundColor = LINECOLOUR; + } + return _downlineLB; +} + + + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +@end diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/messageView/SysCell.h" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/messageView/SysCell.h" new file mode 100644 index 0000000000000000000000000000000000000000..4ce59091fcffdf625fcee81e71c0b28f3e76bdff --- /dev/null +++ "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/messageView/SysCell.h" @@ -0,0 +1,45 @@ +// +// SysCell.h +// JQQY +// +// Created by Shmily on 2017/11/24. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import +@class InFnoModel,AvatarImageView; + +@interface SysCell : UITableViewCell + +/** + * 分割线 + */ +@property (nonatomic, strong) UILabel *lineLB; + +/** + * 头像 + */ +@property (nonatomic, strong) AvatarImageView *headImage; +/** + * 名字 + */ +@property (nonatomic, strong) UILabel *nameLB; + +/** + * 时间 + */ +@property (nonatomic, strong) UILabel *timeLB; + +/** + * 语言描述 + */ +@property (nonatomic, strong) UILabel *infnoLB; + + + +@property (nonatomic,retain)InFnoModel *model; + + + + +@end diff --git "a/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/messageView/SysCell.m" "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/messageView/SysCell.m" new file mode 100644 index 0000000000000000000000000000000000000000..f16009571e634d61f8dc1e2055b547e5609aa9db --- /dev/null +++ "b/JQQY/Modules/Home\357\274\210\351\246\226\351\241\265\357\274\211/View/messageView/SysCell.m" @@ -0,0 +1,132 @@ +// +// SysCell.m +// JQQY +// +// Created by Shmily on 2017/11/24. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "SysCell.h" +#import "InFnoModel.h" +#import "AvatarImageView.h" +@implementation SysCell + +- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier +{ + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + [self.contentView addSubview:self.lineLB]; + [self.contentView addSubview:self.headImage]; + [self.contentView addSubview:self.timeLB]; + [self.contentView addSubview:self.nameLB]; + [self.contentView addSubview:self.infnoLB]; + } + return self; +} + +- (UILabel *)lineLB +{ + if (!_lineLB) { + _lineLB = [[UILabel alloc]initWithFrame:CGRectMake(15,64-0.5, KSCREEN_WIDTH,0.5)]; + _lineLB.backgroundColor = LINECOLOUR; + } + return _lineLB; +} + +- (AvatarImageView *)headImage +{ + if (!_headImage) { + _headImage = [[AvatarImageView alloc]initWithFrame:CGRectMake(15, (64-44)/2, 44, 44)]; + _headImage.initialsFont = [UIFont systemFontOfSize:14]; + [_headImage setImageRoundRadius:22 BorderWidth:0 borderColor:NULL]; + } + return _headImage; +} + +- (UILabel *)timeLB +{ + if (!_timeLB) { + _timeLB = [[UILabel alloc]initWithFrame:CGRectMake(KSCREEN_WIDTH-130,_headImage.top,120,20)]; + _timeLB.textColor = UIColorFromRGB(0x000000); + _timeLB.font = [UIFont systemFontOfSize:13]; + _timeLB.textAlignment =NSTextAlignmentRight; + //_timeLB.backgroundColor = [UIColor orangeColor]; + } + return _timeLB; +} + + +- (UILabel *)nameLB +{ + if (!_nameLB) { + _nameLB = [[UILabel alloc]initWithFrame:CGRectMake(_headImage.right+10,_headImage.top+2,KSCREEN_WIDTH-_headImage.right-10-100,20)]; + _nameLB.textColor = UIColorFromRGB(0x000000); + _nameLB.font = [UIFont systemFontOfSize:15]; + } + return _nameLB; +} + +- (UILabel *)infnoLB +{ + if (!_infnoLB) { + _infnoLB = [[UILabel alloc]initWithFrame:CGRectMake(_headImage.right+10,_nameLB.bottom+5,KSCREEN_WIDTH-15-44-10-10,17)]; + //_infnoLB.text = @"2014-12-12 10:34"; + _infnoLB.textColor = UIColorFromRGB(0x8f8f94); + _infnoLB.font = [UIFont systemFontOfSize:13]; + //_infnoLB.backgroundColor = [UIColor orangeColor]; + } + return _infnoLB; +} + + +/* + * 1 关注 2点赞 8企业认证通过 9企业认证未通过 10申请参加活动被拒绝 11申请参加活动通过 + * 12参加活动已取消 13申请活动已取消 16头像审核通过 17头像未通过审核 + * 19视频认证通过 20视频认证不通过 22邀请视频认证 31实名认证通过 32实名认证未通过 + * 33获得礼物 34获得元宝 35获得兑换券 36通知 37他人中心 38新活动 + */ +- (void)setModel:(InFnoModel *)model +{ + _infnoLB.numberOfLines =0; + _infnoLB.attributedText = model.infnoStr; + + if ([model.action intValue]==1 || + [model.action intValue]==2) { + _nameLB.text = model.nickname; + [_headImage setTitle:model.nickname imageUrl:model.avatar]; + }else if ([model.action intValue] == 10 || + [model.action intValue] == 11 || + [model.action intValue] == 12 || + [model.action intValue] == 13 || + [model.action intValue] == 38){ + _headImage.image = [UIImage imageNamed:@"xx-huodong"]; + _headImage.backgroundColor = [UIColor whiteColor]; + _nameLB.text = @"活动消息"; + }else if ([model.action intValue] == 33 || + [model.action intValue] == 34 || + [model.action intValue] == 35){ + _nameLB.text = @"礼物消息"; + _headImage.image = [UIImage imageNamed:@"xx_gift"]; + _headImage.backgroundColor = [UIColor whiteColor]; + }else if([model.action intValue] == 40 || + [model.action intValue] == 41){ + _nameLB.text = @"缘圈消息"; + _headImage.image = [UIImage imageNamed:@"systemMsg"]; + _headImage.backgroundColor = [UIColor whiteColor]; + }else{ + _headImage.image = [UIImage imageNamed:@"systemMsg"]; + _headImage.backgroundColor = [UIColor whiteColor]; + _nameLB.text = @"启缘消息"; + } + _timeLB.text = model.time; + _infnoLB.height = model.cellHeight; + _lineLB.top = 64-18+model.cellHeight-0.5; +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/.DS_Store" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..d7c0478bfce91035a48e121a3472e50c14f9bbe0 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/.DS_Store" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/.DS_Store" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..6118ba3cb53382e3a36aa8745814300c93e69bba Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/.DS_Store" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/MineViewController.h" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/MineViewController.h" new file mode 100644 index 0000000000000000000000000000000000000000..b87583f9bf60cf023584158639fd3cc43fa2d517 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/MineViewController.h" @@ -0,0 +1,16 @@ +// +// MineViewController.h +// JQQY +// +// Created by chason on 2017/11/16. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "ZCRefreshTableViewController.h" +@class SignInView; + +@interface MineViewController : ZCRefreshTableViewController + +@property (nonatomic, strong) SignInView *signInView; + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/MineViewController.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/MineViewController.m" new file mode 100644 index 0000000000000000000000000000000000000000..94d087d3a54a1422a4b5c975b7937669c3a3814d --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/MineViewController.m" @@ -0,0 +1,317 @@ +// +// MineViewController.m +// JQQY +// +// Created by chason on 2017/11/16. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "MineViewController.h" +#import "MineTopView.h" +#import "SettingViewController.h" + +#import "IdentyListViewController.h" + +#import "MyWalletViewController.h" +#import "MyGiftViewController.h" +#import "ALLWebViewController.h" +#import "AvatarImageView.h" +#import "SignInView.h" +#import "MyPeopleViewController.h" +#import "MySpoorViewController.h" +#import "FriendViewController.h" + +#import "ProfileViewController.h" + +@interface MineViewController () +{ + NSString *_userid; +} +@property (nonatomic, strong) MineTopView *mineTopView; +@property (nonatomic, strong) NSArray *titleArr; + +@end + +@implementation MineViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + [self setTableViewFrame:CGRectMake(0, 0, KSCREEN_WIDTH, KSCREEN_HEIGHT-kTopHeight-kTabBarHeight)]; + self.tableView.tableHeaderView = self.mineTopView; + [kApplication.keyWindow addSubview:self.signInView]; +} + +- (void)viewWillAppear:(BOOL)animated +{ + [super viewWillAppear:animated]; + NSUserDefaults *userDefaults = kUserDefaults; + _userid = [userDefaults objectForKey:@"userid"]; + if (STR_IS_NOT_EMPTY(_userid)) { + [self getSignInStatus]; + self.mineTopView.loginBtn.hidden = YES; + self.mineTopView.avatarView.hidden = NO; + self.mineTopView.nicknameLab.hidden = NO; + self.mineTopView.phoneImage.hidden = NO; + self.mineTopView.realNameImage.hidden = NO; + self.mineTopView.enterpriseImage.hidden = NO; + self.mineTopView.tuanImage.hidden = NO; + self.mineTopView.qiandaoBtn.hidden = NO; + [self.mineTopView.avatarView setTitle:USER_NICKNAME imageUrl:USER_AVATAR]; + self.mineTopView.nicknameLab.text = USER_NICKNAME; + self.navigationItem.rightBarButtonItems = nil; + [self addNavigationItemWithImageNames:@[@"setting_icon"] isLeft:NO target:self action:@selector(rightBtnClicked) tags:nil]; + }else{ + self.mineTopView.loginBtn.hidden = NO; + self.mineTopView.avatarView.hidden = YES; + self.mineTopView.nicknameLab.hidden = YES; + self.mineTopView.phoneImage.hidden = YES; + self.mineTopView.realNameImage.hidden = YES; + self.mineTopView.enterpriseImage.hidden = YES; + self.mineTopView.tuanImage.hidden = YES; + self.mineTopView.qiandaoBtn.hidden = YES; + self.navigationItem.rightBarButtonItems = nil; + } +} + +- (SignInView *)signInView{ + if (!_signInView) { + _signInView = [[SignInView alloc] initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH, KSCREEN_HEIGHT)]; + _signInView.hidden = YES; + UITapGestureRecognizer *TGR = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hiddedSignInView)]; + [_signInView addGestureRecognizer:TGR]; + [_signInView.lookBtn addTarget:self action:@selector(lookBtnClicked) forControlEvents:UIControlEventTouchUpInside]; + } + return _signInView; +} + +- (void)hiddedSignInView{ + _signInView.hidden = YES; +} + +- (void)lookBtnClicked{ + _signInView.hidden = YES; + MyWalletViewController *myWalletVC = [[MyWalletViewController alloc] init]; + [myWalletVC setHidesBottomBarWhenPushed:YES]; + [self.navigationController pushViewController:myWalletVC animated:YES]; +} + +- (void)rightBtnClicked +{ + SettingViewController *settingVC = [[SettingViewController alloc] init]; + [settingVC setHidesBottomBarWhenPushed:YES]; + [self.navigationController pushViewController:settingVC animated:YES]; +} + +- (NSArray *)titleArr { + if (!_titleArr) { + _titleArr = @[@[@"我的资料", @"我的认证"], @[@"我的钱包", @"我的足迹", @"我的礼物"], @[@"我的人脉",@"黑名单"]]; + } + return _titleArr; +} + +- (MineTopView *)mineTopView +{ + if (!_mineTopView) { + _mineTopView = [[MineTopView alloc] initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH, 120)]; + _mineTopView.VC = self; + } + return _mineTopView; +} + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView +{ + return [self.titleArr count]; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + return [self.titleArr[section] count]; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + return 50; +} + +- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section +{ + return [[UIView alloc] initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH, 15)]; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section +{ + return 15; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + static NSString *cellID = @"UITableViewCell"; + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID]; + if (!cell) { + cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID]; + } + cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; + cell.selectionStyle = UITableViewCellSelectionStyleNone; + cell.textLabel.font = FFONT16; + cell.textLabel.textColor = MAIN_TEXTCOLOR; + cell.textLabel.text = self.titleArr[indexPath.section][indexPath.row]; + cell.imageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"mine_%ld_%ld", (long)indexPath.section, (long)indexPath.row]]; + + return cell; +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + if (STR_IS_NOT_EMPTY(_userid)) { + if (indexPath.section == 0) { + switch (indexPath.row) { + case 0://我的资料 + { + ProfileViewController *myInfoVC = [[ProfileViewController alloc] init]; + [myInfoVC setHidesBottomBarWhenPushed:YES]; + [self.navigationController pushViewController:myInfoVC animated:YES]; + }break; + + case 1://我的认证 + { + IdentyListViewController *idVC = [[IdentyListViewController alloc]init]; + [idVC setHidesBottomBarWhenPushed:YES]; + [self.navigationController pushViewController:idVC animated:YES]; + }break; + + default: + break; + } + }else if (indexPath.section == 1) { + switch (indexPath.row) { + case 0://我的钱包 + { + MyWalletViewController *myWalletVC = [[MyWalletViewController alloc] init]; + [myWalletVC setHidesBottomBarWhenPushed:YES]; + [self.navigationController pushViewController:myWalletVC animated:YES]; + }break; + + case 1://我的足迹 + { + MySpoorViewController *spoorVC = [[MySpoorViewController alloc]init]; + [spoorVC setHidesBottomBarWhenPushed:YES]; + [self.navigationController pushViewController:spoorVC animated:YES]; + }break; + + case 2://我的礼物 + { + MyGiftViewController *myGiftVC= [[MyGiftViewController alloc]init]; + [myGiftVC setHidesBottomBarWhenPushed:YES]; + [self.navigationController pushViewController:myGiftVC animated:YES]; + }break; + + default: + break; + } + }else if (indexPath.section == 2) { + switch (indexPath.row) { + case 0:// + { + FriendViewController *allWeb = [[FriendViewController alloc]init]; + [allWeb setHidesBottomBarWhenPushed:YES]; + [self.navigationController pushViewController:allWeb animated:YES]; + + }break; + case 1://黑名单 + + { + MyPeopleViewController *blackVC = [[MyPeopleViewController alloc] init]; + [blackVC setHidesBottomBarWhenPushed:YES]; + blackVC.type = 4; + [self.navigationController pushViewController:blackVC animated:YES]; + + }break; + + default: + break; + } + } + }else{ + [self toLogin]; + } +} + +- (void)toLogin +{ + [ZCTools goLoginSelf:self SeccessBlock:NULL]; +} + +//主要是为了获取签到状态 +- (void)getSignInStatus{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:@"网络异常" toView:self.view]; + return; + } + NSDictionary *parameters = @{@"userID":USER_USERID, + @"action":@"1", + @"version":APP_VERSION}; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_user_hxinfo block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + if ([resultDic[@"retcode"] intValue] == 1) { + + NSDictionary *message = resultDic[@"message"]; + NSUserDefaults *userDefaults = kUserDefaults; + [userDefaults setObject:message[@"nickname"] forKey:@"nickname"]; + [userDefaults setObject:message[@"sex"] forKey:@"sex"]; + [userDefaults setObject:message[@"avatar"] forKey:@"avatar"]; + [userDefaults synchronize]; + + [self.mineTopView.avatarView setTitle:USER_NICKNAME imageUrl:USER_AVATAR]; + self.mineTopView.nicknameLab.text = USER_NICKNAME; + + + if ([message[@"signtoday"] intValue] == 0) { + [_mineTopView.qiandaoBtn setTitle:@"签到" forState:UIControlStateNormal]; + }else{ + [_mineTopView.qiandaoBtn setTitle:@"已签到" forState:UIControlStateNormal]; + } + //实名认证 + if ([message[@"realnametype"] intValue] == 1){ //-1 初始状态 0 审核中 1 通过 2 拒绝 + _mineTopView.realNameImage.image = [UIImage imageNamed:@"realname_icon"]; + }else{ + _mineTopView.realNameImage.image = [UIImage imageNamed:@"realname_hui_icon"]; + } + + if ([message[@"kind"] intValue] ==1) { + _mineTopView.enterpriseImage.image = [UIImage imageNamed:@"enterprise_icon"]; + }else{ + _mineTopView.enterpriseImage.image = [UIImage imageNamed:@"enterprise_hui_icon"]; + } + + + + //团员认证 + if ([message[@"youthLeague"] intValue] ==1) { + _mineTopView.tuanImage.image = [UIImage imageNamed:@"tuan_icon"]; + }else{ + _mineTopView.tuanImage.image = [UIImage imageNamed:@"tuan_hui_icon"]; + } + + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; +} + +- (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/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/MySpoorViewController.h" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/MySpoorViewController.h" new file mode 100644 index 0000000000000000000000000000000000000000..7de716b5c35319554758a35699bf72774c7c1b05 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/MySpoorViewController.h" @@ -0,0 +1,13 @@ +// +// MySpoorViewController.h +// JQQY +// +// Created by Shmily on 2017/11/27. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "ZCRefreshTableViewController.h" + +@interface MySpoorViewController : ZCRefreshTableViewController + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/MySpoorViewController.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/MySpoorViewController.m" new file mode 100644 index 0000000000000000000000000000000000000000..e486c11bd41398849ae3b3eddf84d4b6598d83eb --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/MySpoorViewController.m" @@ -0,0 +1,375 @@ +// +// MySpoorViewController.m +// JQQY +// +// Created by Shmily on 2017/11/27. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "MySpoorViewController.h" +#import "TopBtnView.h" +#import "YuanquanBaseCell.h" +#import "TextCell.h" +#import "PicturesCell.h" +#import "VideoCell.h" +#import "TextAndPicturesCell.h" +#import "TextAndVideoCell.h" +#import "YuanquanModel.h" +#import "YuanquanDetailViewController.h" +#import "TopicDetailViewController.h" + +@interface MySpoorViewController () +{ + int _type;//1我的收藏 2我的发布 +} +@property (nonatomic, strong) TopBtnView *twoBtn; +@property (nonatomic, strong) NSMutableArray *collectionArray; +@property (nonatomic, strong) NSMutableArray *publicArray; + +@end + +@implementation MySpoorViewController + + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + self.title = @"我的足迹"; + [self.view addSubview:self.twoBtn]; + [self setTableViewFrame:CGRectMake(0, _twoBtn.bottom, KSCREEN_WIDTH, KSCREEN_HEIGHT-kTopHeight-40)]; + self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; + [self registerCell]; + self.showRefreshHeader = YES; + self.showRefreshFooter = YES; + self.curepage = 1; + _type = 1; + [self requestYuanquanCollectionList]; +} + +- (void)tableViewDidTriggerHeaderRefresh +{ + self.curepage = 1; + if (_type == 1) { + [self requestYuanquanCollectionList]; + }else if (_type == 2) { + [self requestYuanquanPublicList]; + } +} + +- (void)tableViewDidTriggerFooterRefresh +{ + self.curepage += 1; + if (_type == 1) { + [self requestYuanquanCollectionList]; + }else if (_type == 2) { + [self requestYuanquanPublicList]; + } +} + +- (void)registerCell +{ + [self.tableView registerClass:[TextCell class] forCellReuseIdentifier:NSStringFromClass([TextCell class])]; + [self.tableView registerClass:[PicturesCell class] forCellReuseIdentifier:NSStringFromClass([PicturesCell class])]; + [self.tableView registerClass:[VideoCell class] forCellReuseIdentifier:NSStringFromClass([VideoCell class])]; + [self.tableView registerClass:[TextAndPicturesCell class] forCellReuseIdentifier:NSStringFromClass([TextAndPicturesCell class])]; + [self.tableView registerClass:[TextAndVideoCell class] forCellReuseIdentifier:NSStringFromClass([TextAndVideoCell class])]; +} + +- (NSMutableArray *)collectionArray +{ + if (!_collectionArray) { + _collectionArray = [NSMutableArray arrayWithCapacity:0]; + } + return _collectionArray; +} + +- (NSMutableArray *)publicArray +{ + if (!_publicArray) { + _publicArray = [NSMutableArray arrayWithCapacity:0]; + } + return _publicArray; +} + +- (TopBtnView *)twoBtn +{ + if (!_twoBtn) { + _twoBtn = [[TopBtnView alloc]initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH, 40) showType:@[@"我的收藏",@"我的发布"]]; + _twoBtn.delegate =self; + } + return _twoBtn; +} + +- (void)topBtnSelect:(NSString *)name +{ + if ([name isEqualToString:@"我的收藏"]) { + _type = 1; + self.dataArray = self.collectionArray; + }else if ([name isEqualToString:@"我的发布"]) { + _type = 2; + if (self.publicArray.count == 0) { + [self requestYuanquanPublicList]; + } + self.dataArray = self.publicArray; + } + [self.tableView reloadData]; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + return self.dataArray.count; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + YuanquanModel *model = self.dataArray[indexPath.row]; + return model.cellHeight; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + YuanquanModel *model = self.dataArray[indexPath.row]; + YuanquanBaseCell *cell; + NSString *cellIdentifier; + cellIdentifier = model.cellIdentifier; + cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath]; + cell.delegate = self; + cell.tag = indexPath.row; + cell.selectionStyle = 0; + [cell setYuanquanModel:model]; + return cell; +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + YuanquanModel *model = self.dataArray[indexPath.row]; + YuanquanDetailViewController *yuanquanDetailVC = [[YuanquanDetailViewController alloc] init]; + [yuanquanDetailVC setHidesBottomBarWhenPushed:YES]; + yuanquanDetailVC.yuanquanid = model.yuanquanid; + [self.navigationController pushViewController:yuanquanDetailVC animated:YES]; +} + +-(NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath +{ + return @"删除"; +} + +-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath +{ + if (_type == 1) { + return UITableViewCellEditingStyleNone; + } + return UITableViewCellEditingStyleDelete; +} + +- (void)tableView:(UITableView*)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath*)indexPath +{ + if (editingStyle == UITableViewCellEditingStyleDelete) { + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:NetworkFailure toView:self.view]; + return; + } + YuanquanModel *model = self.dataArray[indexPath.row]; + NSDictionary *parameters = @{ + @"userid":USER_USERID, + @"titleid":model.yuanquanid, + @"version":APP_VERSION, + }; + [MBProgressHUD showMessag:nil toView:self.view]; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_yuanquan_delete block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + [MBProgressHUD hideHUDForView:self.view animated:YES]; + if ([resultDic[@"retcode"] intValue] == 1) { + [self.publicArray removeObjectAtIndex:indexPath.row]; + self.dataArray = self.publicArray; + [self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; + [self.tableView reloadData]; + [MBProgressHUD showSuccess:@"删除成功" toView:self.view]; + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; + } +} + +#pragma mark ———————— 点击头像 ———————— + +- (void)clickAvatar:(id)cell +{ + YuanquanBaseCell *baseCell = (YuanquanBaseCell *)cell; + YuanquanModel *model = self.dataArray[baseCell.tag]; + [ZCTools toPersonalHome:model.userid homeNickname:model.nickname homeSelf:self]; +} + +#pragma mark ———————— 点击话题 ———————— + +- (void)clickTopicLab:(id)cell +{ + YuanquanBaseCell *baseCell = (YuanquanBaseCell *)cell; + YuanquanModel *model = self.dataArray[baseCell.tag]; + TopicDetailViewController *topicDetailVC = [[TopicDetailViewController alloc] init]; + topicDetailVC.titleStr = model.topic; + topicDetailVC.topicid = model.topicid; + [self.navigationController pushViewController:topicDetailVC animated:YES]; +} + +#pragma mark ———————— 点赞 ———————— + +- (void)clickLikeBtn:(id)cell +{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:NetworkFailure toView:self.view]; + return; + } + + YuanquanBaseCell *baseCell = (YuanquanBaseCell *)cell; + NSIndexPath *indexPath = [self.tableView indexPathForCell:baseCell]; + YuanquanModel *model = self.dataArray[indexPath.row]; + + NSString *action;//1赞 2取消 + if ([model.islike intValue] == 0) { + action = @"1"; + model.islike = @"1"; + model.likeNum = [NSString stringWithFormat:@"%d", [model.likeNum intValue]+1]; + }else{ + action = @"2"; + model.islike = @"0"; + model.likeNum = [NSString stringWithFormat:@"%d", [model.likeNum intValue]-1]; + } + + [UIView performWithoutAnimation:^{ + [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone]; + }]; + + NSDictionary *parameters = @{ + @"userid":USER_USERID, + @"titleid":model.yuanquanid, + @"action":action, + @"version":APP_VERSION, + }; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_yuanquan_like block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + if ([resultDic[@"retcode"] intValue] == 1) { + + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; +} + +#pragma mark ———————— 评论 ———————— + +- (void)clickCommentBtn:(id)cell +{ + YuanquanBaseCell *baseCell = (YuanquanBaseCell *)cell; + YuanquanModel *model = self.dataArray[baseCell.tag]; + YuanquanDetailViewController *yuanquanDetailVC = [[YuanquanDetailViewController alloc] init]; + yuanquanDetailVC.yuanquanid = model.yuanquanid; + [self.navigationController pushViewController:yuanquanDetailVC animated:YES]; +} + +- (void)requestYuanquanCollectionList +{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:NetworkFailure toView:self.view]; + return; + } + if (self.curepage == 1) { + [MBProgressHUD showMessag:nil toView:self.view]; + } + NSDictionary *parameters = @{ + @"userid":HaveUserId, + @"limit":@"10", + @"offset":[NSString stringWithFormat:@"%d", self.curepage], + @"version":APP_VERSION, + }; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_user_Collection block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + [MBProgressHUD hideHUDForView:self.view animated:YES]; + if ([resultDic[@"retcode"] intValue] == 1) { + if (self.curepage == 1) { + [self.collectionArray removeAllObjects]; + } + for (NSDictionary *dict in resultDic[@"message"]) { + YuanquanModel *model = [[YuanquanModel alloc] init]; + [model initYuanquanModel:dict]; + [self.collectionArray addObject:model]; + } + self.dataArray = self.collectionArray; + if (self.dataArray.count >= [resultDic[@"number"] intValue]) { + [self endRefreshingWithNoMoreData]; + }else{ + [self tableViewDidFinishTriggerHeader:NO reload:YES]; + } + [self tableViewDidFinishTriggerHeader:YES reload:YES]; + + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; +} + +- (void)requestYuanquanPublicList +{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:NetworkFailure toView:self.view]; + return; + } + if (self.curepage == 1) { + [MBProgressHUD showMessag:nil toView:self.view]; + } + NSDictionary *parameters = @{ + @"userid":HaveUserId, + @"limit":@"10", + @"offset":[NSString stringWithFormat:@"%d", self.curepage], + @"version":APP_VERSION, + }; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_user_Publish block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + [MBProgressHUD hideHUDForView:self.view animated:YES]; + if ([resultDic[@"retcode"] intValue] == 1) { + if (self.curepage == 1) { + [self.publicArray removeAllObjects]; + } + for (NSDictionary *dict in resultDic[@"message"]) { + YuanquanModel *model = [[YuanquanModel alloc] init]; + [model initYuanquanModel:dict]; + if (model.pictures.count <= 4 && (STR_IS_NOT_EMPTY(model.text) || model.pictures.count>0 || [model.videoDict allKeys].count>0)) { + [self.dataArray addObject:model]; + } + [self.publicArray addObject:model]; + } + self.dataArray = self.publicArray; + if (self.dataArray.count >= [resultDic[@"number"] intValue]) { + [self endRefreshingWithNoMoreData]; + }else{ + [self tableViewDidFinishTriggerHeader:NO reload:YES]; + } + [self tableViewDidFinishTriggerHeader:YES reload:YES]; + + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; +} + +- (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/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\347\244\274\347\211\251/MyGiftViewController.h" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\347\244\274\347\211\251/MyGiftViewController.h" new file mode 100644 index 0000000000000000000000000000000000000000..849611e040544555625e3a516adea2232610d225 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\347\244\274\347\211\251/MyGiftViewController.h" @@ -0,0 +1,13 @@ +// +// MyGiftViewController.h +// JQ_ELOVE +// +// Created by chason on 2017/3/22. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import "RootViewController.h" + +@interface MyGiftViewController : RootViewController + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\347\244\274\347\211\251/MyGiftViewController.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\347\244\274\347\211\251/MyGiftViewController.m" new file mode 100644 index 0000000000000000000000000000000000000000..6d477ec5871d2129545f98aeb19f4686fe302d82 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\347\244\274\347\211\251/MyGiftViewController.m" @@ -0,0 +1,226 @@ +// +// MyGiftViewController.m +// JQ_ELOVE +// +// Created by chason on 2017/3/22. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import "MyGiftViewController.h" +#import "GiftCell.h" +#import "PeopleOfGiftViewController.h" +#import "CustomNavigationView.h" + +@interface MyGiftViewController () +{ + NSMutableArray *_topBtnArray; + NSMutableArray *_cellArray; + NSString *_action; +} +@property (nonatomic, strong) CustomNavigationView *customNavigationView; +@property (nonatomic, strong) UIView *topBtnView; +@property (nonatomic, strong) UIButton *topLeftBtn; +@property (nonatomic, strong) UIButton *topRightBtn; +@property (nonatomic, strong) UICollectionView *collectionView; +@property (nonatomic, strong) UIImageView *collectionBlankView; +@property (nonatomic, strong) UILabel *collectionBlankLB; + +@end + +@implementation MyGiftViewController + +static NSString *const cellId = @"cellId"; + +- (void)viewDidLoad { + [super viewDidLoad]; + + _action = @"1"; + _topBtnArray = [NSMutableArray arrayWithCapacity:2]; + _cellArray = [NSMutableArray arrayWithCapacity:0]; + + self.isHidenNaviBar = YES; + [self.view addSubview:self.customNavigationView]; + [self.customNavigationView addSubview:self.topBtnView]; + [self.topBtnView addSubview:self.topLeftBtn]; + [self.topBtnView addSubview:self.topRightBtn]; + [self.view addSubview:self.collectionView]; + [self.collectionView addSubview:self.collectionBlankView]; + [self.collectionView addSubview:self.collectionBlankLB]; + [self loadDataSource]; + +} + +- (CustomNavigationView *)customNavigationView +{ + if (!_customNavigationView) { + _customNavigationView = [[CustomNavigationView alloc] initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH, kTopHeight)]; + _customNavigationView.VC = self; + _customNavigationView.backgroundColor = PURPLECOLOUR; + [_customNavigationView.leftBtn setImage:[UIImage imageNamed:@"back_icon"] forState:UIControlStateNormal]; + } + return _customNavigationView; +} + +- (UIView *)topBtnView{ + if (!_topBtnView) { + _topBtnView = [[UIView alloc] initWithFrame:CGRectMake((KSCREEN_WIDTH-160)/2, kStatusBarHeight, 160, 30)]; + [_topBtnView setImageRoundRadius:15 BorderWidth:1 borderColor:[UIColor whiteColor]]; + } + return _topBtnView; +} + +- (UIButton *)topLeftBtn{ + if (!_topLeftBtn) { + _topLeftBtn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 80, 30)]; + _topLeftBtn.backgroundColor = [UIColor whiteColor]; + [_topLeftBtn setTitleColor:PURPLECOLOUR forState:UIControlStateNormal]; + [_topLeftBtn setTitle:@"收到的" forState:UIControlStateNormal]; + _topLeftBtn.titleLabel.font = [UIFont systemFontOfSize:15]; + _topLeftBtn.tag = 1; + [_topLeftBtn addTarget:self action:@selector(topBtnClicked:) forControlEvents:UIControlEventTouchUpInside]; + [_topBtnArray addObject:_topLeftBtn]; + } + return _topLeftBtn; +} + +- (UIButton *)topRightBtn{ + if (!_topRightBtn) { + _topRightBtn = [[UIButton alloc] initWithFrame:CGRectMake(_topLeftBtn.right, 0, 80, 30)]; + _topRightBtn.backgroundColor = PURPLECOLOUR; + [_topRightBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; + [_topRightBtn setTitle:@"送出的" forState:UIControlStateNormal]; + _topRightBtn.titleLabel.font = [UIFont systemFontOfSize:15]; + _topRightBtn.tag = 2; + [_topRightBtn addTarget:self action:@selector(topBtnClicked:) forControlEvents:UIControlEventTouchUpInside]; + [_topBtnArray addObject:_topRightBtn]; + } + return _topRightBtn; +} + +- (void)topBtnClicked:(UIButton *)btn{ + for (UIButton *b in _topBtnArray) { + if (b.tag == btn.tag) { + b.backgroundColor = [UIColor whiteColor]; + [b setTitleColor:PURPLECOLOUR forState:UIControlStateNormal]; + }else{ + b.backgroundColor = PURPLECOLOUR; + [b setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; + } + } + if (btn.tag == 1) { + _action = @"1"; + }else if (btn.tag == 2) { + _action = @"2"; + } + [self loadDataSource]; +} + +- (UIImageView *)collectionBlankView +{ + if (!_collectionBlankView) { + _collectionBlankView = [[UIImageView alloc] initWithFrame:CGRectMake((self.collectionView.width-110)/2, (self.collectionView.height-110)/2-40, 110, 110)]; + _collectionBlankView.image = [UIImage imageNamed:@"noData"]; + _collectionBlankView.hidden = YES; + } + return _collectionBlankView; +} + +- (UILabel *)collectionBlankLB +{ + if (!_collectionBlankLB) { + _collectionBlankLB = [[UILabel alloc]initWithFrame:CGRectMake(10, _collectionBlankView.bottom, KSCREEN_WIDTH-20,40)]; + _collectionBlankLB.text = @"亲!没数据啦"; + _collectionBlankLB.font = [UIFont systemFontOfSize:14]; + _collectionBlankLB.textAlignment = NSTextAlignmentCenter; + _collectionBlankLB.hidden = YES; + _collectionBlankLB.textColor = UIColorFromRGB(0x9f9f9f); + } + return _collectionBlankLB; +} + +- (UICollectionView *)collectionView{ + if (!_collectionView) { + UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc]init]; + layout.minimumLineSpacing = 20;// 设置最小行间距 + layout.sectionInset = UIEdgeInsetsMake(10,20,10,20); + _collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, _customNavigationView.bottom, KSCREEN_WIDTH, KSCREEN_HEIGHT-64) collectionViewLayout:layout]; + _collectionView.backgroundColor = [UIColor whiteColor]; + _collectionView.showsVerticalScrollIndicator =NO; + _collectionView.delegate = self; + _collectionView.dataSource = self; + _collectionView.alwaysBounceVertical = YES; + [_collectionView registerClass:[GiftCell class] forCellWithReuseIdentifier:cellId]; + } + return _collectionView; +} +//section数量 +- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{ + return 1; +} +//设置元素数量 +- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{ + return _cellArray.count; +} +//设置元素大小 +- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath{ + return CGSizeMake((KSCREEN_WIDTH-60)/2, (KSCREEN_WIDTH-60)/2+20); +} +//元素内容 +- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath +{ + GiftCell *cell = [_collectionView dequeueReusableCellWithReuseIdentifier:cellId forIndexPath:indexPath]; + [cell initGiftCell:_cellArray[indexPath.row]]; + cell.tag = indexPath.row; + return cell; +} +//元素点击事件 +- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{ + GiftCell * cell = (GiftCell *)[collectionView cellForItemAtIndexPath:indexPath]; + PeopleOfGiftViewController *peopleOfGiftVC = [[PeopleOfGiftViewController alloc] init]; + peopleOfGiftVC.name = cell.name; + peopleOfGiftVC.giftName = cell.nicknameLab.text; + peopleOfGiftVC.action = _action; + [self.navigationController pushViewController:peopleOfGiftVC animated:YES]; +} +//请求数据 +- (void)loadDataSource{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:@"网络异常" toView:self.view]; + return; + } + NSDictionary *params = @{ + @"userid":USER_USERID, + @"action":_action + }; +// [MBProgressHUD showMessag:nil toView:self.view]; + [ZCNetRequestManager postRequestWithParameters:params subUrl:URL_user_gift_mygift block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { +// [MBProgressHUD hideHUDForView:self.view animated:YES]; + if ([resultDic[@"retcode"] intValue] == 1) { + [_cellArray removeAllObjects]; + + for (NSDictionary *dict in resultDic[@"message"]) { + [_cellArray addObject:dict]; + } + if (_cellArray.count <= 0) { + _collectionBlankView.hidden = NO; + _collectionBlankLB.hidden = NO; + }else{ + _collectionBlankView.hidden = YES; + _collectionBlankLB.hidden = YES; + } + + [_collectionView reloadData]; + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\347\244\274\347\211\251/PeopleOfGiftViewController.h" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\347\244\274\347\211\251/PeopleOfGiftViewController.h" new file mode 100644 index 0000000000000000000000000000000000000000..f9dde7970df9da9ed62289784df0dbf2939e481e --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\347\244\274\347\211\251/PeopleOfGiftViewController.h" @@ -0,0 +1,17 @@ +// +// PeopleOfGiftViewController.h +// JQ_ELOVE +// +// Created by chason on 2017/3/23. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import "ZCRefreshTableViewController.h" + +@interface PeopleOfGiftViewController : ZCRefreshTableViewController + +@property (nonatomic, copy) NSString *name; +@property (nonatomic, copy) NSString *action; +@property (nonatomic, copy) NSString *giftName; + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\347\244\274\347\211\251/PeopleOfGiftViewController.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\347\244\274\347\211\251/PeopleOfGiftViewController.m" new file mode 100644 index 0000000000000000000000000000000000000000..6b77d1e7aca7fa38e84bc449c5c201aacd166ee2 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\347\244\274\347\211\251/PeopleOfGiftViewController.m" @@ -0,0 +1,100 @@ +// +// PeopleOfGiftViewController.m +// JQ_ELOVE +// +// Created by chason on 2017/3/23. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import "PeopleOfGiftViewController.h" +#import "PeopleOfGiftCell.h" + +@interface PeopleOfGiftViewController () + +@end + +@implementation PeopleOfGiftViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.title = _giftName; + [self setTableViewFrame:CGRectMake(0, 0, KSCREEN_WIDTH, KSCREEN_HEIGHT-kTopHeight)]; + self.showRefreshHeader = YES; + [self loadDataSource]; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ + return self.dataArray.count; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ + return 50; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ + static NSString *myCellStr = @"SyceeCell"; + PeopleOfGiftCell *myCell = [tableView dequeueReusableCellWithIdentifier:myCellStr]; + if (!myCell) { + myCell = [[PeopleOfGiftCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:myCellStr]; + } + [myCell initPeopleOfGiftCell:self.dataArray[indexPath.row]]; + myCell.selectionStyle = 0; + return myCell; +} + +-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + NSDictionary *dict = self.dataArray[indexPath.row]; + [ZCTools toPersonalHome:dict[@"userid"] homeNickname:dict[@"nickname"] homeSelf:self]; +} + +- (void)loadDataSource{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:@"网络异常" toView:self.view]; + return; + } + NSDictionary *params = @{ + @"userid":USER_USERID, + @"name":_name, + @"action":_action + }; + [MBProgressHUD showMessag:nil toView:self.view]; + [ZCNetRequestManager postRequestWithParameters:params subUrl:URL_user_gift_giftsendinfo block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + [MBProgressHUD hideHUDForView:self.view animated:YES]; + if ([resultDic[@"retcode"] intValue] == 1) { + [self.dataArray removeAllObjects]; + for (NSDictionary *dict in resultDic[@"message"]) { + [self.dataArray addObject:dict]; + [self.tableView reloadData]; + } + [self tableViewDidFinishTriggerHeader:YES reload:YES]; + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; +} + +- (void)tableViewDidTriggerHeaderRefresh +{ + [self loadDataSource]; +} + + +- (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/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\256\244\350\257\201/.DS_Store" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\256\244\350\257\201/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..744c6c30748bb5d57073bfb1d9a69261eda63656 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\256\244\350\257\201/.DS_Store" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\256\244\350\257\201/DepartmentNameViewController.h" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\256\244\350\257\201/DepartmentNameViewController.h" new file mode 100644 index 0000000000000000000000000000000000000000..8e51601b0d171e1ea3d617092ed51b834d0bcfed --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\256\244\350\257\201/DepartmentNameViewController.h" @@ -0,0 +1,17 @@ +// +// DepartmentNameViewController.h +// JQQY +// +// Created by chason on 2017/12/12. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "ZCRefreshTableViewController.h" + +@interface DepartmentNameViewController : ZCRefreshTableViewController + +@property (nonatomic, copy) NSString *enterpriseid; + +@property (nonatomic, copy) void (^getDepartment)(NSString *departmentName, NSString *departmentId); + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\256\244\350\257\201/DepartmentNameViewController.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\256\244\350\257\201/DepartmentNameViewController.m" new file mode 100644 index 0000000000000000000000000000000000000000..3c98e4d56fe3656b767aa3fecac1ecaabe3c72c3 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\256\244\350\257\201/DepartmentNameViewController.m" @@ -0,0 +1,183 @@ +// +// DepartmentNameViewController.m +// JQQY +// +// Created by chason on 2017/12/12. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "DepartmentNameViewController.h" +#import "EnterpriseViewController.h" + +@interface DepartmentNameViewController () +{ + NSMutableArray *isOpenArr; +} +@end + +@implementation DepartmentNameViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.title = @"选择部门"; + isOpenArr = [NSMutableArray array]; + for (int i =0; i< 10; i++) { + [isOpenArr addObject:@"1"]; + } + [self setTableViewFrame:CGRectMake(0, 0, KSCREEN_WIDTH, KSCREEN_HEIGHT-kTopHeight)]; + [self requestData]; +} + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView +{ + return self.dataArray.count; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + if([isOpenArr[section] isEqualToString:@"1"]){ + return [self.dataArray[section][@"children"] count]; + }else{ + return 0; + } +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + return 50; +} + +- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section +{ + UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH, 50)]; + headerView.backgroundColor = [UIColor whiteColor]; + + UILabel *titleLab = [[UILabel alloc] initWithFrame:CGRectMake(15, 0, KSCREEN_WIDTH-50, headerView.height)]; + titleLab.text = self.dataArray[section][@"departmentName"]; + titleLab.textColor = MAIN_TEXTCOLOR; + + UIImageView *rightImg = [[UIImageView alloc] initWithFrame:CGRectMake(titleLab.right+5, (headerView.height-15)/2, 15, 15)]; + + UILabel *lineUp = [[UILabel alloc] initWithFrame:CGRectMake(0, headerView.height-0.5, KSCREEN_WIDTH, 0.5)]; + UILabel *lineDown = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH, 0.5)]; + lineUp.backgroundColor = LINECOLOUR; + lineDown.backgroundColor = LINECOLOUR; + [headerView addSubview:titleLab]; + [headerView addSubview:rightImg]; + [headerView addSubview:lineUp]; + [headerView addSubview:lineDown]; + + if ([self.dataArray[section][@"children"] count] > 0) { + rightImg.hidden = NO; + }else{ + rightImg.hidden = YES; + } + if([isOpenArr[section] isEqualToString:@"1"]){ + rightImg.image = [UIImage imageNamed:@"arrow_down"]; + }else{ + rightImg.image = [UIImage imageNamed:@"arrow_up"]; + } + + UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(topgesture:)]; + [headerView addGestureRecognizer:tap]; + headerView.tag = section; + return headerView; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section +{ + return 50; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + static NSString *cellID = @"UITableViewCell"; + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID]; + if (!cell) { + cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID]; + } + cell.selectionStyle = UITableViewCellSelectionStyleNone; + cell.textLabel.font = FFONT16; + cell.textLabel.textColor = UIColorFromRGB(0x9f9f9f); + cell.textLabel.text = [NSString stringWithFormat:@" ·%@", self.dataArray[indexPath.section][@"children"][indexPath.row][@"departmentName"]]; + + return cell; +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + if (self.getDepartment) { + self.getDepartment([NSString stringWithFormat:@"%@\n%@", self.dataArray[indexPath.section][@"departmentName"], + self.dataArray[indexPath.section][@"children"][indexPath.row][@"departmentName"]], + self.dataArray[indexPath.section][@"children"][indexPath.row][@"departmentID"]); + for (UIViewController *VC in self.navigationController.viewControllers) { + if ([VC isKindOfClass:[EnterpriseViewController class]]) { + [self.navigationController popToViewController:VC animated:YES]; + break; + } + } + } +} + +-(void)topgesture:(UITapGestureRecognizer*)tap +{ + NSInteger index = tap.view.tag; + if ([self.dataArray[index][@"children"] count] > 0) { + if ([isOpenArr[index] isEqualToString:@"1"]) { + [isOpenArr replaceObjectAtIndex:index withObject:@"0"]; + }else{ + [isOpenArr replaceObjectAtIndex:index withObject:@"1"]; + } + [self.tableView reloadData]; + }else{ + if (self.getDepartment) { + self.getDepartment([NSString stringWithFormat:@"%@", self.dataArray[index][@"departmentName"]],self.dataArray[index][@"departmentID"]); + for (UIViewController *VC in self.navigationController.viewControllers) { + if ([VC isKindOfClass:[EnterpriseViewController class]]) { + [self.navigationController popToViewController:VC animated:YES]; + break; + } + } + } + } +} + +- (void)requestData +{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:NetworkFailure toView:self.view]; + return; + } + NSDictionary *parameters = @{ + @"enterpriseid":self.enterpriseid, + }; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_user_departmentList block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + if ([resultDic[@"retcode"] intValue] == 1) { + for (NSDictionary *dict in resultDic[@"message"]) { + [self.dataArray addObject:dict]; + } + [self.tableView reloadData]; + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; +} + +- (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/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\256\244\350\257\201/EnterpriseNameViewController.h" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\256\244\350\257\201/EnterpriseNameViewController.h" new file mode 100644 index 0000000000000000000000000000000000000000..fd5f8b5003b5f3d1d89c0d8903625653e402afd6 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\256\244\350\257\201/EnterpriseNameViewController.h" @@ -0,0 +1,17 @@ +// +// EnterpriseNameViewController.h +// JQQY +// +// Created by chason on 2017/12/12. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "ZCRefreshTableViewController.h" + +@interface EnterpriseNameViewController : ZCRefreshTableViewController + +@property (nonatomic, copy) void (^getEnterpriseName)(NSString *enterpriseName, NSString *enterpriseId); + +@property (nonatomic, copy) void (^getEnterpriseAndDepartment)(NSString *enterpriseName, NSString *enterpriseId, NSString *departmentName, NSString *departmentId); + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\256\244\350\257\201/EnterpriseNameViewController.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\256\244\350\257\201/EnterpriseNameViewController.m" new file mode 100644 index 0000000000000000000000000000000000000000..55e5d9b26c3927e983a5d3e236ede4b675ea485b --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\256\244\350\257\201/EnterpriseNameViewController.m" @@ -0,0 +1,139 @@ +// +// EnterpriseNameViewController.m +// JQQY +// +// Created by chason on 2017/12/12. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "EnterpriseNameViewController.h" +#import "DepartmentNameViewController.h" + +@interface EnterpriseNameViewController () + +@end + +@implementation EnterpriseNameViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.title = @"选择单位"; + [self setTableViewFrame:CGRectMake(0, 0, KSCREEN_WIDTH, KSCREEN_HEIGHT-kTopHeight)]; + self.curepage = 1; + self.showRefreshHeader = YES; + self.showRefreshFooter = YES; + [self requestData]; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + return self.dataArray.count; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + return 50; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + static NSString *cellID = @"UITableViewCell"; + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID]; + if (!cell) { + cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID]; + } + + if ([self.dataArray[indexPath.row][@"children"] intValue] != 0) { + cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; + }else{ + cell.accessoryType = UITableViewCellAccessoryNone; + } + cell.selectionStyle = UITableViewCellSelectionStyleNone; + cell.textLabel.font = FFONT16; + cell.textLabel.textColor = MAIN_TEXTCOLOR; + cell.textLabel.text = self.dataArray[indexPath.row][@"enterpriseName"]; + + return cell; +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + if ([self.dataArray[indexPath.row][@"children"] intValue] != 0) { + DepartmentNameViewController *departmentNameVC = [[DepartmentNameViewController alloc] init]; + departmentNameVC.enterpriseid = self.dataArray[indexPath.row][@"enterpriseID"]; + [self.navigationController pushViewController:departmentNameVC animated:YES]; + [departmentNameVC setGetDepartment:^(NSString *departmentName, NSString *departmentId) { + if (self.getEnterpriseAndDepartment) { + self.getEnterpriseAndDepartment(self.dataArray[indexPath.row][@"enterpriseName"], self.dataArray[indexPath.row][@"enterpriseID"], departmentName, departmentId); + } + }]; + }else{ + if (self.getEnterpriseName) { + self.getEnterpriseName(self.dataArray[indexPath.row][@"enterpriseName"], self.dataArray[indexPath.row][@"enterpriseID"]); + [self.navigationController popViewControllerAnimated:YES]; + } + } +} + +- (void)requestData +{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:NetworkFailure toView:self.view]; + return; + } + NSDictionary *parameters = @{ + @"limit":@"15", + @"offset":[NSString stringWithFormat:@"%d", self.curepage], + }; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_user_enterpriseList block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + if ([resultDic[@"retcode"] intValue] == 1) { + if (self.curepage == 1) { + [self.dataArray removeAllObjects]; + } + + for (NSDictionary *dict in resultDic[@"message"]) { + [self.dataArray addObject:dict]; + } + + if (self.dataArray.count >= [resultDic[@"number"] intValue]) { + [self endRefreshingWithNoMoreData]; + }else{ + [self tableViewDidFinishTriggerHeader:NO reload:YES]; + } + [self tableViewDidFinishTriggerHeader:YES reload:YES]; + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; +} + +- (void)tableViewDidTriggerHeaderRefresh +{ + self.curepage = 1; + [self requestData]; +} + +- (void)tableViewDidTriggerFooterRefresh +{ + self.curepage += 1; + [self requestData]; +} + +- (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/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\256\244\350\257\201/EnterpriseViewController.h" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\256\244\350\257\201/EnterpriseViewController.h" new file mode 100644 index 0000000000000000000000000000000000000000..aead1a9892e203425996320524cd4024a9473138 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\256\244\350\257\201/EnterpriseViewController.h" @@ -0,0 +1,13 @@ +// +// EnterpriseViewController.h +// JQQY +// +// Created by Shmily on 2017/12/12. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "RootViewController.h" + +@interface EnterpriseViewController : RootViewController + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\256\244\350\257\201/EnterpriseViewController.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\256\244\350\257\201/EnterpriseViewController.m" new file mode 100644 index 0000000000000000000000000000000000000000..e8318a8075acdb593596fed30ae533ba6dba3185 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\256\244\350\257\201/EnterpriseViewController.m" @@ -0,0 +1,286 @@ +// +// EnterpriseViewController.m +// JQQY +// +// Created by Shmily on 2017/12/12. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "EnterpriseViewController.h" +#import "ZCLabelTextFieldLineView.h" +#import "EnterpriseNameViewController.h" + +@interface EnterpriseViewController () +{ + NSString *_enterpriseId; + NSString *_departmentId; + NSString *_status; +} +@property (nonatomic, strong) ZCLabelTextFieldLineView *nameView; +@property (nonatomic, strong) ZCLabelTextFieldLineView *sexView; +@property (nonatomic, strong) ZCLabelTextFieldLineView *phoneView; +@property (nonatomic, strong) ZCLabelTextFieldLineView *companyView; +@property (nonatomic, strong) UILabel *tipsLab; +@property (nonatomic, strong) UIButton *submitBtn; + +@end + +@implementation EnterpriseViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.title = @"单位认证"; + self.view.backgroundColor = UIColorFromRGB(0xf3f3f3); + [self.view addSubview:self.nameView]; + [self.view addSubview:self.sexView]; + [self.view addSubview:self.phoneView]; + [self.view addSubview:self.companyView]; + [self.view addSubview:self.tipsLab]; + [self.view addSubview:self.submitBtn]; + [self requestData]; +} + +- (ZCLabelTextFieldLineView *)nameView +{ + if (!_nameView) { + _nameView = [[ZCLabelTextFieldLineView alloc] initWithFrame:CGRectMake(0, 10, KSCREEN_WIDTH, 45)]; + _nameView.titleLab.text = @"姓 名:"; + _nameView.textField.enabled = NO; + _nameView.rightImg.hidden = YES; + } + return _nameView; +} + +- (ZCLabelTextFieldLineView *)sexView +{ + if (!_sexView) { + _sexView = [[ZCLabelTextFieldLineView alloc] initWithFrame:CGRectMake(0, _nameView.bottom, KSCREEN_WIDTH, 45)]; + _sexView.titleLab.text = @"性 别:"; + _sexView.textField.enabled = NO; + _sexView.rightImg.hidden = YES; + } + return _sexView; +} + +- (ZCLabelTextFieldLineView *)phoneView +{ + if (!_phoneView) { + _phoneView = [[ZCLabelTextFieldLineView alloc] initWithFrame:CGRectMake(0, _sexView.bottom, KSCREEN_WIDTH, 45)]; + _phoneView.titleLab.text = @"手机号码:"; + _phoneView.textField.placeholder = @"请输入手机号码"; + _phoneView.textField.delegate = self; + _phoneView.textField.keyboardType = UIKeyboardTypeNumberPad; + _phoneView.rightImg.image = [UIImage imageNamed:@"phone_editor"]; + } + return _phoneView; +} + +- (ZCLabelTextFieldLineView *)companyView +{ + if (!_companyView) { + _companyView = [[ZCLabelTextFieldLineView alloc] initWithFrame:CGRectMake(0, _phoneView.bottom, KSCREEN_WIDTH, 45)]; + _companyView.titleLab.text = @"单位/部门:"; + _companyView.textField.hidden = YES; + _companyView.companyContentLab.hidden = NO; + _companyView.rightImg.frame = CGRectMake(_companyView.width-27, (_companyView.height-12)/2, 12, 12); + _companyView.rightImg.image = [UIImage imageNamed:@"Arrow-pointing"]; + _companyView.userInteractionEnabled = YES; + UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(companyViewClicked)]; + [_companyView addGestureRecognizer:tap]; + } + return _companyView; +} + +- (UILabel *)tipsLab +{ + if (!_tipsLab) { + _tipsLab = [[UILabel alloc] initWithFrame:CGRectMake(15, _companyView.bottom+10, KSCREEN_WIDTH-30, 50)]; + _tipsLab.font = FFONT12; + _tipsLab.textColor = [UIColor redColor]; + _tipsLab.textAlignment = NSTextAlignmentCenter; + _tipsLab.numberOfLines = 3; + _tipsLab.hidden = YES; + } + return _tipsLab; +} + +- (UIButton *)submitBtn +{ + if (!_submitBtn) { + _submitBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _submitBtn.frame = CGRectMake(15, _tipsLab.bottom+10, KSCREEN_WIDTH-30, 45); + [_submitBtn setImageRoundRadius:6 BorderWidth:0 borderColor:nil]; + [_submitBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; + [_submitBtn setTitle:@"提交认证" forState:UIControlStateNormal]; + [_submitBtn setBackgroundColor:PURPLECOLOUR]; + [_submitBtn addTarget:self action:@selector(submitBtnClicked) forControlEvents:UIControlEventTouchUpInside]; + } + return _submitBtn; +} + +- (void)requestData +{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:NetworkFailure toView:self.view]; + return; + } + NSDictionary *parameters = @{ + @"userid":USER_USERID, + }; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_user_enterpriseAuthQuery block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + if ([resultDic[@"retcode"] intValue] == 1) { + _nameView.textField.text = resultDic[@"message"][@"name"]; + _sexView.textField.text = [ZCTools judgeSex:resultDic[@"message"][@"sex"]]; + _phoneView.textField.text = resultDic[@"message"][@"phone"]; + _companyView.companyContentLab.text = resultDic[@"message"][@"departname"]; + if (STR_IS_NOT_EMPTY(_companyView.companyContentLab.text)) { + CGFloat labHeight = [ZCTools labelAutoCalculateRectWith:_companyView.companyContentLab.text FontSize:15 MaxSize:CGSizeMake(_companyView.companyContentLab.width, 100)].height; + if (labHeight > 45) { + [_companyView resetFrame:labHeight]; + }else{ + [_companyView resetFrame:25]; + } + _tipsLab.top = _companyView.bottom+10; + _submitBtn.top = _tipsLab.bottom+10; + } + + _enterpriseId = resultDic[@"message"][@"enterprise"]; + _departmentId = resultDic[@"message"][@"department"]; + + _status = resultDic[@"message"][@"status"]; + if ([_status intValue] == -1) {// -1未审核 0待审核 1通过 2失败 + + }else if ([_status intValue] == 0) { + [_submitBtn setTitle:@"等待审核" forState:UIControlStateNormal]; + _submitBtn.enabled = NO; + _phoneView.textField.enabled = NO; + _companyView.userInteractionEnabled = NO; + }else if ([_status intValue] == 1) { + [_submitBtn setTitle:@"审核通过" forState:UIControlStateNormal]; + _submitBtn.enabled = NO; + _phoneView.textField.enabled = NO; + _companyView.userInteractionEnabled = NO; + }else if ([_status intValue] == 2) { + [_submitBtn setTitle:@"审核失败" forState:UIControlStateNormal]; + _tipsLab.text = [NSString stringWithFormat:@"失败原因:%@", resultDic[@"message"][@"reason"]]; + _tipsLab.hidden = NO; + } + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; +} + +- (void)companyViewClicked +{ + EnterpriseNameViewController *enterpriseName = [[EnterpriseNameViewController alloc] init]; + [self.navigationController pushViewController:enterpriseName animated:YES]; + [enterpriseName setGetEnterpriseName:^(NSString *enterpriseName, NSString *enterpriseId) { + _companyView.companyContentLab.text = enterpriseName; + _enterpriseId = enterpriseId; + _departmentId = @""; + if (STR_IS_NOT_EMPTY(_companyView.companyContentLab.text)) { + CGFloat labHeight = [ZCTools labelAutoCalculateRectWith:_companyView.companyContentLab.text FontSize:15 MaxSize:CGSizeMake(_companyView.companyContentLab.width, 100)].height; + if (labHeight > 45) { + [_companyView resetFrame:labHeight]; + }else{ + [_companyView resetFrame:25]; + } + _tipsLab.top = _companyView.bottom+10; + _submitBtn.top = _tipsLab.bottom+10; + } + }]; + + [enterpriseName setGetEnterpriseAndDepartment:^(NSString *enterpriseName, NSString *enterpriseId, NSString *departmentName, NSString *departmentId) { + _companyView.companyContentLab.text = [NSString stringWithFormat:@"%@\n%@", enterpriseName, departmentName]; + _enterpriseId = enterpriseId; + _departmentId = departmentId; + if (STR_IS_NOT_EMPTY(_companyView.companyContentLab.text)) { + CGFloat labHeight = [ZCTools labelAutoCalculateRectWith:_companyView.companyContentLab.text FontSize:15 MaxSize:CGSizeMake(_companyView.companyContentLab.width, 100)].height; + if (labHeight > 45) { + [_companyView resetFrame:labHeight]; + }else{ + [_companyView resetFrame:25]; + } + _tipsLab.top = _companyView.bottom+10; + _submitBtn.top = _tipsLab.bottom+10; + } + }]; +} + +- (void)submitBtnClicked +{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:NetworkFailure toView:self.view]; + return; + } + if (_phoneView.textField.text.length != 11) { + [MBProgressHUD showError:@"请输入正确的手机号码" toView:self.view]; + return; + } + if (!STR_IS_NOT_EMPTY(_companyView.companyContentLab.text)) { + [MBProgressHUD showError:@"单位不能为空" toView:self.view]; + return; + } + NSDictionary *parameters = @{ + @"userid":USER_USERID, + @"phone":ToString(_phoneView.textField.text), + @"enterprise":_enterpriseId, + @"department":_departmentId, + }; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_user_enterpriseAuthReq block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + if ([resultDic[@"retcode"] intValue] == 1) { + [MBProgressHUD showSuccess:@"提交成功" toView:self.view]; + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [self.navigationController popViewControllerAnimated:YES]; + }); + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; +} + +-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ + if (textField == self.phoneView.textField){ + NSUInteger lengthOfString = string.length; + for (NSInteger loopIndex = 0; loopIndex < lengthOfString; loopIndex++) {//只允许数字输入 + unichar character = [string characterAtIndex:loopIndex]; + if (character < 48) return NO; // 48 unichar for 0 + if (character > 57) return NO; // 57 unichar for 9 + } + // Check for total length + NSUInteger proposedNewLength = textField.text.length - range.length + string.length; + if (proposedNewLength > 11) return NO;//限制长度 + return YES; + } + return YES; +} + +- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ + [self.view endEditing:YES]; +} + +- (BOOL)textFieldShouldReturn:(UITextField *)textField{ + return [textField resignFirstResponder]; +} + +- (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/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\256\244\350\257\201/IdentyListViewController.h" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\256\244\350\257\201/IdentyListViewController.h" new file mode 100644 index 0000000000000000000000000000000000000000..d6b4236eb7bc09f4c47bce4fe6647aa4a61cfd75 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\256\244\350\257\201/IdentyListViewController.h" @@ -0,0 +1,23 @@ +// +// IdentyListViewController.h +// JQQY +// +// Created by Shmily on 2017/12/12. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "ZCRefreshTableViewController.h" + +@interface IdentyListViewController : ZCRefreshTableViewController + +@end + +@interface IdentyListModel : NSObject + +@property (nonatomic,copy) NSString *name; +@property (nonatomic,retain) UIImage*image; +@property (nonatomic,copy) NSString *stateName; + + +@end + diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\256\244\350\257\201/IdentyListViewController.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\256\244\350\257\201/IdentyListViewController.m" new file mode 100644 index 0000000000000000000000000000000000000000..32eb4e070db99405e734ff047d490b2931468a37 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\256\244\350\257\201/IdentyListViewController.m" @@ -0,0 +1,221 @@ +// +// IdentyListViewController.m +// JQQY +// +// Created by Shmily on 2017/12/12. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "IdentyListViewController.h" +#import "IdentyViewController.h" +#import "EnterpriseViewController.h" +@interface IdentyListViewController () +{ + BOOL realName; +} +@end + +@implementation IdentyListViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.title = @"我的认证"; + self.showRefreshHeader = YES; + // Do any additional setup after loading the view. +} + + +- (void)viewWillAppear:(BOOL)animated +{ + [super viewWillAppear:animated]; + [self getData]; +} +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + return self.dataArray.count; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + return 50; +} + +- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section +{ + return [[UIView alloc] initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH, 15)]; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section +{ + return 15; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + static NSString *cellID = @"identy"; + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID]; + if (!cell) { + cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellID]; + } + cell.selectionStyle = UITableViewCellSelectionStyleNone; + cell.textLabel.font = FFONT16; + cell.textLabel.textColor = MAIN_TEXTCOLOR; + cell.detailTextLabel.font = [UIFont systemFontOfSize:13]; + + IdentyListModel *model = self.dataArray[indexPath.row]; + cell.textLabel.text = model.name; + cell.imageView.image =model.image; + cell.detailTextLabel.text = model.stateName; + if ([model.stateName isEqualToString:@"已认证"] || + [model.stateName isEqualToString:@"审核中"]) { + cell.detailTextLabel.textColor = PURPLECOLOUR; + }else{ + cell.detailTextLabel.textColor = UIColorFromRGB(0x999999); + } + + if ([model.name isEqualToString:@"手机认证"] || + [model.name isEqualToString:@"青年之声"]) { + cell.accessoryType = UITableViewCellAccessoryNone; + }else{ + cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; + } + return cell; +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + + IdentyListModel *model = self.dataArray[indexPath.row]; + + + + if (indexPath.row ==1) {//实名 + IdentyViewController *identyVC = [[IdentyViewController alloc]init]; + [self.navigationController pushViewController:identyVC animated:YES]; + }else if (indexPath.row ==2){//单位 + if (realName || [model.stateName isEqualToString:@"已认证"] ) { + EnterpriseViewController *enterVC = [[EnterpriseViewController alloc]init]; + [self.navigationController pushViewController:enterVC animated:YES]; + }else{ + [MBProgressHUD showError:@"请先实名认证,才能单位认证哦!" toView:self.view]; + } + } +} + +- (void)tableViewDidTriggerHeaderRefresh +{ + [self getData]; +} + + +- (void)getData{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:@"网络异常" toView:self.view]; + return; + } + NSDictionary *parameters = @{@"userID":USER_USERID, + @"action":@"1", + @"version":APP_VERSION}; + if (!self.isFirst) { + [MBProgressHUD showMessag:nil toView:self.view]; + self.isFirst = YES; + } + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_user_hxinfo block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + [MBProgressHUD hideHUDForView:self.view animated:YES]; + if ([resultDic[@"retcode"] intValue] == 1) { + [self setData:resultDic[@"message"]]; + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; +} + +- (void)setData:(NSDictionary *)dict +{ + NSArray *titleName = @[@"手机认证",@"实名认证",@"单位认证",@"青年之声"]; + [self.dataArray removeAllObjects]; + for (int i=0; i + +{ + NSString *encodedImageStr; + NSInteger status; +} +@property (nonatomic,retain)UIScrollView *mScrollView; +//姓名 +@property (nonatomic, strong) InputTextView *nameView; +//身份证 +@property (nonatomic, strong) InputTextView *codeView; + +@property (nonatomic,retain)UIImageView *idImageView; + +@property (nonatomic,retain)UIButton *submitBtn; +@property (nonatomic,retain)UILabel *reasonLB; +@property (nonatomic,retain)UILabel *tipLB; +@property (nonatomic,retain)UILabel *tishiLB; + + +@property (nonatomic, strong) CameraManager *camer; + +@end + +@implementation IdentyViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.title = @"实名认证"; + + encodedImageStr = @"a"; + + [self.view addSubview:self.mScrollView]; + + [self.mScrollView addSubview:self.nameView]; + [self.mScrollView addSubview:self.codeView]; + [self.mScrollView addSubview:self.tishiLB]; + [self.mScrollView addSubview:self.idImageView]; + [self.mScrollView addSubview:self.reasonLB]; + [self.mScrollView addSubview:self.submitBtn]; + [self.view addSubview:self.tipLB]; + [self requsetData]; + // Do any additional setup after loading the view. +} + +- (UIScrollView *)mScrollView +{ + if (!_mScrollView) { + _mScrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH, KSCREEN_HEIGHT-kTopHeight-15)]; + _mScrollView.backgroundColor = [UIColor clearColor]; + _mScrollView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag; + [_mScrollView setContentSize:CGSizeMake(KSCREEN_WIDTH,KSCREEN_HEIGHT)]; + + } + return _mScrollView; +} + +- (InputTextView *)nameView{ + if (!_nameView) { + _nameView = [[InputTextView alloc] initWithFrame:CGRectMake(15,20, KSCREEN_WIDTH-30, 50)]; + _nameView.textField.placeholder = @"姓名:"; + _nameView.textField.delegate = self; + _nameView.img.width = 20; + _nameView.img.left = 5; + _nameView.img.image = [UIImage imageNamed:@"name"]; + _nameView.textField.returnKeyType = UIReturnKeyDone; + _nameView.textField.keyboardType = UIKeyboardTypeNamePhonePad; + [_nameView.textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged]; + } + return _nameView; +} + +- (InputTextView *)codeView{ + if (!_codeView) { + _codeView = [[InputTextView alloc] initWithFrame:CGRectMake(15, _nameView.bottom, KSCREEN_WIDTH-30, 50)]; + _codeView.textField.placeholder = @"身份证号:"; + _codeView.textField.delegate = self; + _codeView.textField.returnKeyType = UIReturnKeyDone; + _codeView.textField.keyboardType = UIKeyboardTypeNumbersAndPunctuation; + _codeView.img.width = 20; + _codeView.img.left = 5; + _codeView.img.image = [UIImage imageNamed:@"id"]; + [_codeView.textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged]; + } + return _codeView; +} + +- (UILabel *)tishiLB +{ + if (!_tishiLB) { + _tishiLB = [[UILabel alloc]initWithFrame:CGRectMake(15, _codeView.bottom+10,KSCREEN_WIDTH-30,20)]; + _tishiLB.font = [UIFont systemFontOfSize:14]; + _tishiLB.textColor = CTHEMECOLOR; + _tishiLB.attributedText = [ZCTools attributedTextFrom:@"清晰的手持身份证照片" headerStr:@"*** " footerStr:@" ***" value:[UIColor blackColor] textFont:16]; + _tishiLB.textAlignment = NSTextAlignmentCenter; + } + return _tishiLB; +} + + +- (UIImageView *)idImageView +{ + if (!_idImageView) { + _idImageView = [[UIImageView alloc]init]; + _idImageView.frame =CGRectMake(10, _tishiLB.bottom+5,KSCREEN_WIDTH-20,(KSCREEN_WIDTH-20)*54/87); +// _idImageView.backgroundColor = [UIColor redColor]; + [_idImageView setImageRoundRadius:6 BorderWidth:0 borderColor:NULL]; + _idImageView.userInteractionEnabled = YES; + + UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(takeActionPhoto)]; + [_idImageView addGestureRecognizer:tap]; + + } + return _idImageView; +} + +- (UILabel *)reasonLB +{ + if (!_reasonLB) { + _reasonLB = [[UILabel alloc]initWithFrame:CGRectMake(10, _idImageView.bottom+8, KSCREEN_WIDTH-20, 40)]; + _reasonLB.font = [UIFont systemFontOfSize:12]; + } + return _reasonLB; +} + + + +- (UIButton *)submitBtn +{ + if (!_submitBtn) { + _submitBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _submitBtn.frame =CGRectMake(10, _idImageView.bottom+70, KSCREEN_WIDTH-20, 45); + _submitBtn.backgroundColor = PURPLECOLOUR; + [_submitBtn setImageRoundRadius:5 BorderWidth:0 borderColor:NULL]; + [_submitBtn setTitleColor:[UIColor whiteColor] forState:0]; + [_submitBtn setTitle:@"认 证" forState:0]; + [_submitBtn addTarget:self action:@selector(submitData) forControlEvents:UIControlEventTouchUpInside]; + } + return _submitBtn; +} +#pragma mark - **************** dataLoad + +- (void)submitData +{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:NetworkFailure toView:self.view]; + return; + } + NSString *name = _nameView.textField.text; + if (!STR_IS_NOT_EMPTY(name)) { + [MBProgressHUD showError:@"请填写姓名" toView:self.view]; + return; + } + NSString *cardNo = _codeView.textField.text; + if (!STR_IS_NOT_EMPTY(cardNo)) { + [MBProgressHUD showError:@"请填写姓名" toView:self.view]; + return; + } + + if ([encodedImageStr isEqualToString:@"a"]) { + [MBProgressHUD showError:@"请上传清晰的手持身份证图片" toView:self.view]; + return; + } + NSDictionary *parameters = @{ + @"userID":USER_USERID, + @"realName":name, + @"cardNo":cardNo, + @"photo":encodedImageStr, + @"version":APP_VERSION, + }; + [MBProgressHUD showMessag:nil toView:self.view]; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_authReq block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + [MBProgressHUD hideHUDForView:self.view animated:YES]; + + if ([resultDic[@"retcode"] intValue] ==1) { + [self requsetData]; + + }else{ + [MBProgressHUD showSuccess:resultDic[@"explanation"] toView:self.view]; + } + } + }]; +} + +- (void)requsetData +{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:NetworkFailure toView:self.view]; + return; + } + NSDictionary *parameters = @{ + @"userID":USER_USERID, + @"version":APP_VERSION, + }; + [MBProgressHUD showMessag:nil toView:self.view]; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_authQuery block:^(NSDictionary *resultDic, NSError *error) { + [MBProgressHUD hideHUDForView:self.view animated:YES]; + + if ([resultDic[@"retcode"] intValue] ==1) { + + NSDictionary *message = resultDic[@"message"]; + status = [message[@"status"] intValue];// -1未审核 0待审核 1通过 2失败 + + if (status == 0) { + [self.submitBtn setTitle:@"等待审核" forState:0]; + self.submitBtn.enabled = NO; + self.codeView.textField.enabled = NO; + self.nameView.textField.enabled = NO; + self.idImageView.userInteractionEnabled = NO; + + }else if (status ==1){ + [self.submitBtn setTitle:@"审核通过" forState:0]; + self.submitBtn.enabled = NO; + self.codeView.textField.enabled = NO; + self.nameView.textField.enabled = NO; + self.idImageView.userInteractionEnabled = NO; + } + + self.nameView.textField.text = message[@"realName"]; + self.codeView.textField.text = message[@"cardNo"]; + if (STR_IS_NOT_EMPTY(message[@"reason"])) { + self.reasonLB.attributedText = [ZCTools attributedTextFrom:@"认证失败:" headerStr:nil footerStr:message[@"reason"] value:CTHEMECOLOR textFont:14]; + self.reasonLB.hidden = NO; + }else{ + self.reasonLB.hidden = YES; + } + [self.idImageView sd_setImageWithURL:[NSURL URLWithString:message[@"photo"]] placeholderImage:[UIImage imageNamed:@"idnorm"]]; + }else{ + + [MBProgressHUD showSuccess:resultDic[@"explanation"] toView:self.view]; + + } + }]; +} + +- (void)takeActionPhoto +{ + UIActionSheet *actionSheet = [[UIActionSheet alloc] + initWithTitle:nil + delegate:self + cancelButtonTitle:@"取消" + destructiveButtonTitle:nil + otherButtonTitles:@"相册",@"拍照",nil]; + actionSheet.actionSheetStyle = UIActionSheetStyleBlackOpaque; + [actionSheet showInView:self.view]; +} + +- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex +{ + [self.nameView.textField resignFirstResponder]; + [self.codeView.textField resignFirstResponder]; + + CameraManager *camer = [[CameraManager alloc]initWithVC:self andShowType:2]; + if (buttonIndex == 0) {//相册 + [camer startPhoto:1]; + }else if (buttonIndex == 1){//拍照 + [camer startCamera]; + } + __weak typeof(self) weakSelf = self; + [camer setImageBlock:^(NSArray *imageArray) { + UIImage *image = [imageArray firstObject]; + encodedImageStr = [UIImageJPEGRepresentation(image, 0.8) base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength]; + weakSelf.idImageView.image = image; + }]; + _camer = camer; + +} + +- (UILabel *)tipLB +{ + if (!_tipLB) { + _tipLB = [[UILabel alloc]initWithFrame:CGRectMake(0, _mScrollView.bottom, KSCREEN_WIDTH,13)]; + _tipLB.font = [UIFont systemFontOfSize:11]; + _tipLB.textAlignment = NSTextAlignmentCenter; + _tipLB.textColor = UIColorFromRGB(0x666666); + _tipLB.text = @"信息仅用于身份验证,启缘保障您的信息安全"; + } + return _tipLB; +} + + + +- (void)textFieldDidChange:(UITextField *)theTextField +{ + +} + + + +- (BOOL)textFieldShouldReturn:(UITextField *)textField +{ + return [textField resignFirstResponder]; +} + + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/.DS_Store" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..1fe81f87f5919e2d9713a9fa9bd108ddf52138ae Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/.DS_Store" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/CardViewController.h" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/CardViewController.h" new file mode 100644 index 0000000000000000000000000000000000000000..249b617001372207ffd912a964588bcb64bbd0bd --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/CardViewController.h" @@ -0,0 +1,13 @@ +// +// CardViewController.h +// JQQY +// +// Created by Shmily on 2017/11/21. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "ZCRefreshTableViewController.h" + +@interface CardViewController : ZCRefreshTableViewController + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/CardViewController.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/CardViewController.m" new file mode 100644 index 0000000000000000000000000000000000000000..147b9c3b5f561bf58dd8b8c0808013d8959b38a5 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/CardViewController.m" @@ -0,0 +1,513 @@ +// +// CardViewController.m +// JQQY +// +// Created by Shmily on 2017/11/21. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "CardViewController.h" +#import "ALLWebViewController.h" +#import "CommonCell.h" +#import "MyCardModel.h" +#import "QYStarView.h" +#import "QYPickerView.h" +#import "UploadAvatarView.h" +#import "CameraManager.h" + +#import "QYInputToolbar.h" + +@interface CardViewController () +{ + BOOL isChange; +} +@property (nonatomic,retain)UIImageView *headImageView; +@property (nonatomic,retain)UIView *headView; + +@property (nonatomic,retain)UIView *footView; +@property (nonatomic,retain)UIButton *submitBtn; +@property (nonatomic,retain)UILabel *tipLB; +@property (nonatomic,retain)QYStarView *startView; +@property (nonatomic, strong) UploadAvatarView *uploadAvatarView; +@property (nonatomic,retain)CameraManager *camer; +@property (nonatomic,retain)QYInputToolbar *inputToolBar; + +@end + + +@implementation CardViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.title = @"我的名片"; + [self addNavigationItemWithImageNames:@[@"wenhao"] isLeft:NO target:self action:@selector(show) tags:@[@"1"]]; + + [self.tableView registerClass:[CommonCell class] forCellReuseIdentifier:@"CommonCell"]; + + [self setTableViewFrame:CGRectMake(0,0,KSCREEN_WIDTH, KSCREEN_HEIGHT-kTopHeight)]; + + [self loadData]; + } +- (UIView *)headView +{ + if (!_headView) { + _headView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH, KSCREEN_WIDTH+50)]; + _headView.backgroundColor = [UIColor clearColor]; + [_headView addSubview:self.headImageView]; + + } + return _headView; +} + + +- (UIImageView *)headImageView +{ + if (!_headImageView) { + _headImageView = [[UIImageView alloc]initWithFrame:CGRectMake(20, 20, KSCREEN_WIDTH-40, KSCREEN_WIDTH-40)]; + [_headImageView setImageRoundRadius:10 BorderWidth:0 borderColor:NULL]; + _headImageView.userInteractionEnabled = YES; + + + UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(takeActionPhoto)]; + [_headImageView addGestureRecognizer:tap]; + } + return _headImageView; +} + +- (UILabel *)tipLB +{ + if (!_tipLB) { + _tipLB = [[UILabel alloc]initWithFrame:CGRectMake(10, _headImageView.bottom+10, KSCREEN_WIDTH-20,15)]; + _tipLB.font = [UIFont systemFontOfSize:13]; + _tipLB.textAlignment = NSTextAlignmentCenter; + _tipLB.textColor = UIColorFromRGB(0x666666); + [_headView addSubview:_tipLB]; + + } + return _tipLB; +} + +- (QYStarView *)startView +{ + if (!_startView) { + _startView = [[QYStarView alloc]initWithFrame:CGRectMake(10, _tipLB.bottom+7,KSCREEN_WIDTH-20,25) withTotalStar:5 withTotalPoint:100 starSpace:10]; + _startView.starAliment = StarAlimentCenter; + [_headView addSubview:_startView]; + } + return _startView; +} + + + + +- (void)takeActionPhoto +{ + + UploadAvatarView *uploadVC = [[UploadAvatarView alloc]init]; + + CameraManager *camManager = [[CameraManager alloc]initWithVC:self andShowType:1]; + [uploadVC setSheetBlock:^(NSInteger tag) { + + if (tag ==1) { + [camManager startCamera]; + }else if(tag ==2){ + [camManager startPhoto:1]; + } + }]; + __weak typeof(self) weakSelf = self; + [camManager setImageBlock:^(NSArray *imageArray) { + UIImage *image = [imageArray firstObject]; + if (image) { + weakSelf.headImageView.image = image; + [weakSelf checkoutFace:UIImageJPEGRepresentation(image, 0.8)]; + } + }]; + _camer = camManager; + [uploadVC show]; +} + +- (UIView *)footView +{ + if (!_footView) { + _footView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH,60)]; + _footView.backgroundColor = [UIColor clearColor]; + [_footView addSubview:self.submitBtn]; + } + return _footView; +} + +- (UIButton *)submitBtn +{ + if (!_submitBtn) { + _submitBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _submitBtn.frame =CGRectMake(20, 10, KSCREEN_WIDTH-40, 40); + _submitBtn.backgroundColor = PURPLECOLOUR; + [_submitBtn setImageRoundRadius:5 BorderWidth:0 borderColor:NULL]; + [_submitBtn setTitleColor:[UIColor whiteColor] forState:0]; + [_submitBtn setTitle:@"展示自我" forState:0]; + [_submitBtn addTarget:self action:@selector(sunmitData) forControlEvents:UIControlEventTouchUpInside]; + } + return _submitBtn; +} + + + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + return self.dataArray.count; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + return 50; +} +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + CommonCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CommonCell"]; + cell.selectionStyle = 0; + cell.model = self.dataArray[indexPath.row]; + return cell; +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + MyCardModel *mode = self.dataArray[indexPath.row]; + __weak typeof(self) weakSelf = self; + if (indexPath.row ==0) {//昵称 + [self.inputToolBar startEdit:@"请输入昵称"]; + + [self.inputToolBar setInputToolBarBlock:^(NSString *text) { + + if (![ZCTools judgeName:text]) { + [MBProgressHUD showError:@"昵称不合法,请重新输入" toView:weakSelf.view]; + }else{ + mode.name = text; + [weakSelf.dataArray replaceObjectAtIndex:indexPath.row withObject:mode]; + [weakSelf.tableView reloadData]; + isChange = YES; + [weakSelf.inputToolBar sendSuccessEndEditing]; + } + }]; + + }else if (indexPath.row ==2){//年龄 + + if ([mode.enable intValue] ==1) { + return; + } + [self selectNewData:indexPath.row type:QYAgeStyle]; + }else if (indexPath.row ==3){//身高 + [self selectNewData:indexPath.row type:QYHeightStyle]; + }else if (indexPath.row ==4){//学历 + [self selectNewData:indexPath.row type:QYDegreeStyle]; + }else if (indexPath.row ==5){//职业 + [self selectNewData:indexPath.row type:QYProfessionStyle]; + }else if (indexPath.row ==6){//年薪 + [self selectNewData:indexPath.row type:QYSalaryStyle]; + }else if (indexPath.row ==7){//现居地 + [self selectNewData:indexPath.row type:QYRegionStyle]; + } +} + +- (QYInputToolbar *)inputToolBar +{ + if (!_inputToolBar) { + _inputToolBar= [[QYInputToolbar alloc] initWithFrame:CGRectMake(0,0,KSCREEN_WIDTH, KSCREEN_HEIGHT)]; + _inputToolBar.textViewMaxLine =2; + _inputToolBar.delegate = self; + _inputToolBar.Max_Num_TextView = 10; + } + return _inputToolBar; +} + + + + +- (void)selectNewData:(NSInteger)row type:(QYPickerStyle)type +{ + __weak typeof(self) weakSelf = self; + MyCardModel *c_mode = self.dataArray[row]; + QYPickerView *pickerVC = [[QYPickerView alloc]init]; + pickerVC.pickerStyle = type; + [pickerVC setCityBlock:^(PickerModel *model) { + if (STR_IS_NOT_EMPTY(c_mode.unit)) { + c_mode.name = model.nameid; + }else{ + c_mode.name = model.name; + } + c_mode.nameid = model.nameid; + isChange = YES; + [weakSelf.dataArray replaceObjectAtIndex:row withObject:c_mode]; + [weakSelf.tableView reloadData]; + }]; + [pickerVC show]; +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +- (void)show +{ + ALLWebViewController *allWeb = [[ALLWebViewController alloc]init]; + allWeb.titleName = @"名片介绍"; + allWeb.urlStr = [NSString stringWithFormat:@"%@%@",BASE_URL,URL_UER_NAME_CARD]; + [self.navigationController pushViewController:allWeb animated:YES]; +} + +#pragma mark - **************** loadData +- (void)checkoutFace:(NSData *)data{ + + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:NetworkFailure toView:self.view]; + return; + } + NSString *encodedImageStr = [data base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength]; + + NSDictionary *parameters = @{ + @"userid":USER_USERID, + @"file":encodedImageStr, + @"version":APP_VERSION, + }; + [MBProgressHUD showMessag:nil toView:self.view]; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_user_facecard block:^(NSDictionary *resultDic, NSError *error) { + [MBProgressHUD hideHUDForView:self.view animated:YES]; + if (resultDic) { + if ([resultDic[@"retcode"] intValue] == 1) { + NSDictionary *message = resultDic[@"message"]; + [self setFaceScore:message[@"facescore"]]; + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + [self setFaceScore:@"0"]; + if ([USER_SEX intValue] ==1) { + _headImageView.image = [UIImage imageNamed:@"card_boy"]; + }else{ + _headImageView.image = [UIImage imageNamed:@"card_girl"]; + } + + } + } + + }]; +} + +- (void)setFaceScore:(NSString *)face +{ + self.tipLB.attributedText = [ZCTools attributedTextFrom:[NSString stringWithFormat:@"%d%%",[face intValue]] headerStr:@"恭喜!恭喜!您的颜值打败了启缘" footerStr:[NSString stringWithFormat:@"的用户"] value:CTHEMECOLOR textFont:24]; + self.startView.commentPoint = [face doubleValue]; +} + + +- (void)loadData{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:NetworkFailure toView:self.view]; + return; + } + + NSDictionary *parameters = @{ + @"userID":USER_USERID, + @"version":APP_VERSION, + }; + [MBProgressHUD showMessag:nil toView:self.view]; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_CARDQUERY block:^(NSDictionary *resultDic, NSError *error) { + [MBProgressHUD hideHUDForView:self.view animated:YES]; + if (resultDic) { + if ([resultDic[@"retcode"] intValue] == 1) { + + NSArray *arr = @[@"昵称:",@"性别:",@"年龄:",@"身高:",@"学历:",@"职业:",@"年薪:",@"现居地:"]; + + NSDictionary *message = resultDic[@"message"]; + + + self.tableView.tableHeaderView = self.headView; + self.tableView.tableFooterView = self.footView; + + UIImage *placeImage; + if ([USER_SEX intValue] ==1) { + placeImage = [UIImage imageNamed:@"card_boy"]; + }else{ + placeImage = [UIImage imageNamed:@"card_girl"]; + } + + [_headImageView sd_setImageWithURL:[NSURL URLWithString:message[@"avatar"]] placeholderImage:placeImage]; + + if (STR_IS_NOT_EMPTY(ToString(message[@"facescore"]))) { + [self setFaceScore:message[@"facescore"]]; + } + + for (int i=0; i + +@interface HobbyAndMarkItemView : UIView + +- (id)initWithFrame:(CGRect)frame title:(NSString *)title; + + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/HobbyAndMarkItemView.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/HobbyAndMarkItemView.m" new file mode 100644 index 0000000000000000000000000000000000000000..57de4d756dd0970a3c73a366a087e84692cae7df --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/HobbyAndMarkItemView.m" @@ -0,0 +1,70 @@ +// +// HobbyAndMarkItemView.m +// JQ_ELOVE +// +// Created by Shmily on 16/7/4. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "HobbyAndMarkItemView.h" + +#define mFont 16 + +@interface HobbyAndMarkItemView () + +@property (nonatomic, strong) UIImageView *imageV; +@property (nonatomic, strong) UILabel *titleLB; +@property (nonatomic, strong) UILabel *lineLB; + +@end + + +@implementation HobbyAndMarkItemView + +- (id)initWithFrame:(CGRect)frame title:(NSString *)title +{ + self = [super initWithFrame:frame]; + if (self) { + [self addSubview:self.lineLB]; + [self addSubview:self.imageV]; + [self addSubview:self.titleLB]; + CGFloat width = [title calculateSize:CGSizeMake(KSCREEN_WIDTH-50, 44) font:mFont].width; + self.titleLB.text = title; + CGFloat image_x = (self.width-width-30-10)/2; + _imageV.frame = CGRectMake(image_x, (self.height-30)/2, 30, 30); + _titleLB.frame = CGRectMake(_imageV.right+10, (self.height-30)/2, width, 30); + + } + return self; +} + +- (UILabel *)lineLB +{ + if (!_lineLB) { + _lineLB = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, self.width, 0.5)]; + _lineLB.backgroundColor = LINECOLOUR; + } + return _lineLB; +} + +- (UIImageView *)imageV +{ + if (!_imageV) { + _imageV = [[UIImageView alloc]init]; + _imageV.image = [UIImage imageNamed:@"fire"]; + } + return _imageV; +} + +- (UILabel *)titleLB +{ + if (!_titleLB) { + _titleLB = [[UILabel alloc]init]; + _titleLB.font = [UIFont systemFontOfSize:mFont]; + _titleLB.textColor = UIColorFromRGB(0x666666); + } + return _titleLB; +} + + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/HobbyAndMarkViewController.h" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/HobbyAndMarkViewController.h" new file mode 100644 index 0000000000000000000000000000000000000000..992fad16af7a3cb86af4f0c13986710548faedd2 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/HobbyAndMarkViewController.h" @@ -0,0 +1,23 @@ +// +// HobbyAndMarkViewController.h +// JQ_ELOVE +// +// Created by Shmily on 16/7/4. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "RootViewController.h" + +@interface HobbyAndMarkViewController : RootViewController + +@property NSInteger ComeType; //1 兴趣 标签 + +@property (nonatomic, strong) NSString *tuid; + +@property (nonatomic, strong) NSString *titleText; + +@property (nonatomic,copy) void (^markSuccessBlock)(void); + +@property (nonatomic,copy) void(^initHobbyAndTag)(NSMutableArray *hobbyAndTagArray,NSInteger blockType); + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/HobbyAndMarkViewController.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/HobbyAndMarkViewController.m" new file mode 100644 index 0000000000000000000000000000000000000000..9edeeaf0f775694cee46dff63beae5cf0d29eb53 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/HobbyAndMarkViewController.m" @@ -0,0 +1,272 @@ +// +// HobbyAndMarkViewController.m +// JQ_ELOVE +// +// Created by Shmily on 16/7/4. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "HobbyAndMarkViewController.h" +#import "UIButtonListView.h" +#import "HobbyAndMarkItemView.h" + + +@interface HobbyAndMarkViewController () +{ + NSString *typeAction; + NSString *markName; + NSInteger blockType; +} + +@property (nonatomic, strong) UIScrollView *mScrollView; +@property (nonatomic, strong) UIButtonListView *listView; +@property (nonatomic, strong) UIButtonListView *myListView; +@property (nonatomic, strong) NSMutableArray *dataSelectArray; +@property (nonatomic, strong) HobbyAndMarkItemView *itemView; +@end + + +@implementation HobbyAndMarkViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + typeAction = @"1"; + markName = @""; + [self.view addSubview:self.mScrollView]; + [self.mScrollView addSubview:self.listView]; + [self.mScrollView addSubview:self.itemView]; + if (_ComeType ==1) { + self.title = @"兴趣爱好"; + [self loadHobby]; + }else{ + self.title = _titleText; + [self loadSoure]; + + } +} + +- (UIScrollView *)mScrollView +{ + if (!_mScrollView) { + _mScrollView = [[UIScrollView alloc]initWithFrame:self.view.bounds]; + } + return _mScrollView; +} + +- (UIButtonListView *)listView +{ + if (!_listView) { + _listView = [[UIButtonListView alloc]initWithFrame:CGRectMake(0, 10, KSCREEN_WIDTH, 0)]; + _listView.type = _ComeType; + __weak typeof(self) weakSelf =self; + [_listView setListClicekd:^(NSString *name ,NSInteger begin) { + //1 添加 2手写 3删除 + markName = name; + if (_ComeType ==1) {//兴趣 + typeAction =@"2"; + [weakSelf loadHobby]; + }else{ + typeAction =@"2"; + [weakSelf loadSoure]; + + } + }]; + } + return _listView; +} + +- (UIButtonListView *)myListView +{ + if (!_myListView) { + _myListView = [[UIButtonListView alloc]initWithFrame:CGRectMake(0, _itemView.bottom, KSCREEN_WIDTH, 0)]; + __weak typeof(self) weakSelf =self; + _myListView.type = _ComeType; + [_myListView setListClicekd:^(NSString *name,NSInteger begin) { + markName = name; + if (_ComeType ==1) { + typeAction = @"3"; + [weakSelf loadHobby]; + }else{ + if (begin ==2) {//添加按钮 + if(_dataSelectArray.count-1 >=12){ +// [JQTool showFailProgessWithText:@"标签数量已达上限" hasMask:NO]; + return; + } + [weakSelf addMyMark]; + }else{ + typeAction = @"3"; + [weakSelf loadSoure]; + } + } + }]; + [_mScrollView addSubview:_myListView]; + } + return _myListView; +} + +- (void)addMyMark +{ + UIAlertView *messageView = [[UIAlertView alloc]initWithTitle:nil message:@"自定义标签" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确认", nil]; + [messageView setAlertViewStyle:UIAlertViewStylePlainTextInput]; + + UITextField *nameField = [messageView textFieldAtIndex:0]; + nameField.placeholder = @"请输入一个名称"; + [messageView show]; + +} + +- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex +{ + if (buttonIndex) { + UITextField *nameField = [alertView textFieldAtIndex:0]; + markName = nameField.text; + if([markName isEqualToString:@"+"]){ +// [JQTool showFailProgessWithText:@"非法字符" hasMask:NO]; + return; + } + if (markName.length>10 || !STR_IS_NOT_EMPTY(markName)) { +// [JQTool showFailProgessWithText:@"标签字数在2~10字!" hasMask:NO]; + return; + } + typeAction = @"2"; + [self loadSoure]; + } +} + +- (HobbyAndMarkItemView *)itemView +{ + if (!_itemView) { + + if (_ComeType ==1) {//兴趣 + _itemView = [[HobbyAndMarkItemView alloc]initWithFrame:CGRectMake(0, _listView.bottom+10, KSCREEN_WIDTH, 40) title:@"选择你的兴趣,找到志同道合的Ta"]; + }else{ + if([_titleText isEqualToString:@"我的标签"]){ + _itemView = [[HobbyAndMarkItemView alloc]initWithFrame:CGRectMake(0, _listView.bottom+10, KSCREEN_WIDTH, 40) title:@"贴上标签让别人更快认识你噢^_^"]; + }else{ + _itemView = [[HobbyAndMarkItemView alloc]initWithFrame:CGRectMake(0, _listView.bottom+10, KSCREEN_WIDTH, 40) title:@"快给Ta贴标签吧^_^"]; + } + } + _itemView.hidden = YES; + } + return _itemView; +} + +- (NSMutableArray *)dataSelectArray +{ + if (!_dataSelectArray) { + _dataSelectArray = [[NSMutableArray alloc]initWithCapacity:0]; + [_dataSelectArray addObject:@"+"]; + } + return _dataSelectArray; +} + +#pragma mark - 我的标签----- +- (void)loadSoure +{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:@"网络异常" toView:self.view]; + return; + } + + if(!STR_IS_NOT_EMPTY(self.tuid)){ + self.tuid = USER_USERID; + } + + NSDictionary *parameters = @{@"userID":self.tuid, + @"action":typeAction, + @"label":markName, + @"otherID":USER_USERID, + @"version":APP_VERSION}; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_user_mylabel block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + if ([resultDic[@"retcode"] intValue] == 1) { + blockType = 2; + if ([typeAction intValue]==1) {//查询 + [_listView setButtonList:resultDic[@"message"][@"systemlabels"]]; + _itemView.hidden = NO; + _itemView.top = _listView.bottom+10; + for (NSString *name in resultDic[@"message"][@"labels"]) { + [self.dataSelectArray addObject:name]; + } + [self.myListView setDeleteButtonlist:self.dataSelectArray]; + _myListView.top = _itemView.bottom; + }else if ([typeAction intValue] ==2){//添加 + [self.dataSelectArray addObject:markName]; + [_myListView setDeleteButtonlist:self.dataSelectArray]; + if(self.markSuccessBlock){ + self.markSuccessBlock(); + } + }else if([typeAction intValue] ==3){//删除 + [self.dataSelectArray removeObject:markName]; + [_myListView setDeleteButtonlist:self.dataSelectArray]; + } + [_mScrollView setContentSize:CGSizeMake(KSCREEN_WIDTH, _myListView.bottom+10)]; + + if(self.initHobbyAndTag){ + self.initHobbyAndTag(self.dataSelectArray,blockType); + } + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; +} +#pragma mark - 兴趣爱好 +- (void)loadHobby +{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:@"网络异常" toView:self.view]; + return; + } + + if(!STR_IS_NOT_EMPTY(self.tuid)){ + self.tuid = USER_USERID; + } + + NSDictionary *parameters = @{@"userID":_tuid, + @"action":typeAction, + @"hobby":markName, + @"version":APP_VERSION + }; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_user_myhobby block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + if ([resultDic[@"retcode"] intValue] == 1) { + blockType = 1; + if ([typeAction intValue] ==1) {//查询 + [self.listView setButtonList:resultDic[@"message"][@"systemhobby"]]; + _itemView.top = _listView.bottom+10; + _itemView.hidden = NO; + [self.dataSelectArray removeAllObjects]; + for (NSString *name in resultDic[@"message"][@"hobbys"]) { + [self.dataSelectArray addObject:name]; + } + [self.myListView setDeleteButtonlist:self.dataSelectArray]; + _myListView.top = _itemView.bottom+10; + }else if ([typeAction intValue] ==2){//添加 + [self.dataSelectArray addObject:markName]; + [_myListView setDeleteButtonlist:self.dataSelectArray]; + }else if ([typeAction intValue] ==3){//删除 + [self.dataSelectArray removeObject:markName]; + [_myListView setDeleteButtonlist:self.dataSelectArray]; + } + [_mScrollView setContentSize:CGSizeMake(KSCREEN_WIDTH, _myListView.bottom+10)]; + + if(self.initHobbyAndTag){ + self.initHobbyAndTag(self.dataSelectArray,blockType); + } + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; +} + + + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/IntroduceViewController.h" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/IntroduceViewController.h" new file mode 100644 index 0000000000000000000000000000000000000000..36a47152da8161b33c7e7a429b06bc54bc0870da --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/IntroduceViewController.h" @@ -0,0 +1,21 @@ +// +// IntroduceViewController.h +// JQ_ELOVE +// +// Created by Shmily on 16/7/12. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "RootViewController.h" + +@interface IntroduceViewController : RootViewController + +@property NSInteger type;//1交友宣言 2用户 3活动 4缘圈动态 5缘圈评论 +@property (nonatomic, strong) NSString *reportID; +@property (nonatomic, strong) NSString *titleName; +@property (nonatomic, strong) NSString *actType; +@property (nonatomic, strong) NSString *introductionsStr; + +@property (nonatomic, copy) void(^reloadIntroduce)(NSString *introduce); + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/IntroduceViewController.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/IntroduceViewController.m" new file mode 100644 index 0000000000000000000000000000000000000000..a98268b424dcf4190b7d753d91932f6471914ba5 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/IntroduceViewController.m" @@ -0,0 +1,374 @@ +// +// IntroduceViewController.m +// JQ_ELOVE +// +// Created by Shmily on 16/7/12. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "IntroduceViewController.h" +#import "UIPlaceHolderTextView.h" +#import "MapCell.h" +#import "JSONKit.h" +@interface IntroduceViewController () +{ + NSArray *_dataArray; +} +@property (nonatomic, strong) UIPlaceHolderTextView *textView; +@property (nonatomic, strong) UIView *bgView; +@property (nonatomic, strong) UIButton *sureBtn; +@property (nonatomic, strong) UILabel *textNum; +@property (nonatomic, strong) UITableView *mTableView; +@property (nonatomic, strong) NSMutableArray *selectArray; +@end + +@implementation IntroduceViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.title = _titleName; + [self addNavigationItemWithTitles:@[@"保存"] isLeft:NO target:self action:@selector(btnSelect) tags:nil]; + + if (_type == 2 || _type == 3) { + _dataArray = @[@"垃圾营销",@"淫秽色情",@"有害信息",@"违法信息",@"人身攻击",@"身份不实",@"欺诈骗钱",@"头像不真实"]; + [self.view addSubview:self.mTableView]; + }else if (_type ==4 || _type == 5){ + _dataArray = @[@"内容低俗,淫秽色情",@"广告软文,垃圾营销",@"内容质量差,不真实",@"人身攻击,违法犯罪"]; + [self.view addSubview:self.mTableView]; + }else{ + self.view.backgroundColor = UIColorFromRGB(0xf3f3f3); + [self.view addSubview:self.bgView]; + [self.bgView addSubview:self.textView]; + [self.textView addSubview:self.textNum]; + } +} + +- (NSMutableArray *)selectArray +{ + if (!_selectArray) { + _selectArray = [[NSMutableArray alloc]initWithCapacity:0]; + } + return _selectArray; +} + + +- (UITableView *)mTableView{ + if (!_mTableView) { + _mTableView =[[UITableView alloc]initWithFrame:CGRectMake(0, 0,KSCREEN_HEIGHT,KSCREEN_HEIGHT-kTopHeight)]; + _mTableView.delegate = self ; + _mTableView.dataSource = self ; + _mTableView.separatorStyle = UITableViewCellSeparatorStyleNone; + } + return _mTableView; +} + + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ + return 44; +} +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ + return _dataArray.count; +} +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ + return 1; +} +-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ + + static NSString *myCell = @"MapCell"; + MapCell *cell = [tableView dequeueReusableCellWithIdentifier:myCell]; + if (!cell) { + cell = [[MapCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:myCell]; + cell.selectionStyle =0; + } + NSString *text = _dataArray[indexPath.row]; + + cell.itemLB.text =text; + cell.itemLB.top = (44-17)/2; + cell.selectIV.hidden =NO; + if (ARRAY_IS_NOT_EMPTY(self.selectArray)) { + + for (NSString *s in self.selectArray) { + if ([s isEqualToString:text]) { + cell.selectIV.image = [UIImage imageNamed:@"selectDuigou"]; + break; + }else{ + cell.selectIV.image = [UIImage imageNamed:@"norDuigou"]; + } + } + }else{ + cell.selectIV.image = [UIImage imageNamed:@"norDuigou"]; + } + if (!indexPath.row) { + cell.upLineLB.frame = CGRectMake(0, 0, KSCREEN_WIDTH, 0.5); + cell.upLineLB.hidden =NO; + cell.downLineLB.hidden =YES; + }else if (indexPath.row == _dataArray.count-1){ + cell.downLineLB.frame = CGRectMake(0,44-0.5, KSCREEN_WIDTH, 0.5); + cell.downLineLB.hidden =NO; + cell.upLineLB.hidden =NO; + }else{ + cell.upLineLB.hidden =NO; + } + return cell; +} + + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + NSString *reson = [_dataArray objectAtIndex:indexPath.row]; + int num = [self judgeIsExit:reson]; + if (num ==1) { + [self.selectArray addObject:reson]; + }else{ + [self.selectArray removeObject:reson]; + } + [self.mTableView reloadData]; +} + +- (int)judgeIsExit:(NSString *)s +{ + if (ARRAY_IS_NOT_EMPTY(self.selectArray)) { + for (NSString *str in self.selectArray) { + if ([str isEqualToString:s]) { + return 2;//- + } + } + } + return 1; +} + + +- (UIView *)bgView +{ + if (!_bgView) { + _bgView = [[UIView alloc]initWithFrame:CGRectMake(0, 10, KSCREEN_WIDTH, 200)]; + _bgView.backgroundColor = [UIColor whiteColor]; + } + return _bgView; +} + +- (UIPlaceHolderTextView *)textView +{ + if (!_textView) { + _textView = [[UIPlaceHolderTextView alloc]initWithFrame:CGRectMake(10, 5, _bgView.width-20, _bgView.height-10)]; + if(_type == 1){ + _textView.placeholder = @"给大家介绍一下你自己吧~"; + } + _textView.font = [UIFont systemFontOfSize:16]; + __weak typeof(self) weakSelf = self; + [_textView setChangeTextBlock:^{ + int length = 150; + NSString * toBeString = weakSelf.textView.text; + // 键盘输入模式 + NSString * lang = [[UITextInputMode currentInputMode] primaryLanguage]; + if ([lang isEqualToString:@"zh-Hans"]) { + // 简体中文输入,包括简体拼音,健体五笔,简体手写 + UITextRange *selectedRange = [weakSelf.textView markedTextRange]; + //获取高亮部分 + UITextPosition * position = [weakSelf.textView positionFromPosition:selectedRange.start offset:0]; + // 没有高亮选择的字,则对已输入的文字进行字数统计和限制 + if (!position) { + if (toBeString.length > length) { + weakSelf.textView.text = [toBeString substringToIndex:length]; + + } + } + weakSelf.textNum.text = [NSString stringWithFormat:@"%lu/150",(unsigned long)weakSelf.textView.text.length]; + + }else{// 中文输入法以外的直接对其统计限制即可,不考虑其他语种情况 + if (toBeString.length > length) { + weakSelf.textView.text = [toBeString substringToIndex:length]; + + } + weakSelf.textNum.text = [NSString stringWithFormat:@"%lu/150",(unsigned long)weakSelf.textView.text.length]; + + } + }]; + _textView.text = _introductionsStr; + weakSelf.textNum.text = [NSString stringWithFormat:@"%lu/150",(unsigned long)weakSelf.textView.text.length]; + + } + return _textView; +} + +- (UILabel *)textNum{ + if(!_textNum){ + _textNum = [[UILabel alloc]initWithFrame:CGRectMake(_textView.width-50, self.textView.height-20, 50, 20)]; + _textNum.backgroundColor = PURPLECOLOUR; + _textNum.alpha = 0.5; + _textNum.textColor = [UIColor whiteColor]; + [_textNum setImageRoundRadius:5 BorderWidth:0 borderColor:nil]; + _textNum.textAlignment = NSTextAlignmentCenter; + _textNum.font = [UIFont systemFontOfSize:10]; + _textNum.text = @"0/150"; + + } + return _textNum; +} + +- (void)btnSelect +{ + [self loadDataSource1]; +} + +/** + * 修改数据 + */ +- (void)loadDataSource1{ + + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:@"网络异常" toView:self.view]; + return; + } + + if(_type == 1){ + //去除首尾空格 + if (!STR_IS_NOT_EMPTY([_textView.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]])) { + [MBProgressHUD showError:@"写点什么吧~" toView:self.view]; + return; + } + NSDictionary *parameters = @{@"userID":USER_USERID, + @"action":@"2", + @"lovedeclaration":_textView.text, + @"version":APP_VERSION}; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_user_myintroduce block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + if ([resultDic[@"retcode"] intValue] == 1) { + if(self.reloadIntroduce){ + self.reloadIntroduce(_textView.text); + } + [MBProgressHUD showSuccess:@"修改完成" toView:self.view]; + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [self.navigationController popViewControllerAnimated:YES]; + }); + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; + }else if(_type == 2){ + if(!STR_IS_NOT_EMPTY([self jubaoNSString])){ + [MBProgressHUD showError:@"请选择举报理由" toView:self.view]; + return; + } + UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:nil message:@"确定举报此用户?" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"举报", nil]; + alertView.tag = 1000; + [alertView show]; + }else if(_type == 3){ + if(!STR_IS_NOT_EMPTY([self jubaoNSString])){ + [MBProgressHUD showError:@"请选择举报理由" toView:self.view]; + return; + } + UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:nil message:@"确定举报此活动?" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"举报", nil]; + alertView.tag = 1001; + [alertView show]; + }else if(_type == 4){ + if(!STR_IS_NOT_EMPTY([self jubaoNSString])){ + [MBProgressHUD showError:@"请选择举报理由" toView:self.view]; + return; + } + UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:nil message:@"确定举报此动态?" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"举报", nil]; + alertView.tag = 1002; + [alertView show]; + }else if(_type == 5){ + if(!STR_IS_NOT_EMPTY([self jubaoNSString])){ + [MBProgressHUD showError:@"请选择举报理由" toView:self.view]; + return; + } + UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:nil message:@"确定举报此评论?" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"举报", nil]; + alertView.tag = 1003; + [alertView show]; + } +} + +- (NSString *)jubaoNSString +{ + if (ARRAY_IS_NOT_EMPTY(self.selectArray)) { + return [self.selectArray JSONString]; + } + return @""; +} + + +- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ + if(alertView.tag == 1000){ + if(buttonIndex){ + NSDictionary *parameters = @{@"userID":USER_USERID, + @"reportID":_reportID, + @"reason":[self jubaoNSString], + @"version":APP_VERSION}; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_user_reportact block:^(NSDictionary *resultDic, NSError *error) { + if(resultDic){ + if([resultDic[@"retcode"] intValue] == 1){ + [MBProgressHUD showSuccess:@"提交成功" toView:self.view]; + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [self.navigationController popViewControllerAnimated:YES]; + }); + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; + } + }else if (alertView.tag == 1001){ + if (buttonIndex) { + NSDictionary *parameters = @{@"reportid":USER_USERID, + @"actid":_reportID, + @"reason":[self jubaoNSString], + @"type":_actType, + @"version":APP_VERSION}; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_activity_reportact block:^(NSDictionary *resultDic, NSError *error) { + if(resultDic){ + if([resultDic[@"retcode"] intValue] == 1){ + [MBProgressHUD showSuccess:@"提交成功" toView:self.view]; + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [self.navigationController popViewControllerAnimated:YES]; + }); + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; + } + }else if(alertView.tag == 1002){ + if (buttonIndex) { + NSDictionary *params = @{@"userid":USER_USERID, + @"titleid":_reportID, + @"reason":[self jubaoNSString], + @"version":APP_VERSION}; + [ZCNetRequestManager postRequestWithParameters:params subUrl:URL_yuanquan_report block:^(NSDictionary *resultDic, NSError *error) { + if(resultDic){ + if([resultDic[@"retcode"] intValue] == 1){ + [MBProgressHUD showSuccess:@"提交成功" toView:self.view]; + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [self.navigationController popViewControllerAnimated:YES]; + }); + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; + } + }else if(alertView.tag == 1003){ + if (buttonIndex) { + NSDictionary *params = @{@"userid":USER_USERID, + @"recid":_reportID, + @"reason":[self jubaoNSString], + @"version":APP_VERSION}; + [ZCNetRequestManager postRequestWithParameters:params subUrl:URL_yuanquan_commentReport block:^(NSDictionary *resultDic, NSError *error) { + if(resultDic){ + if([resultDic[@"retcode"] intValue] == 1){ + [MBProgressHUD showSuccess:@"提交成功" toView:self.view]; + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [self.navigationController popViewControllerAnimated:YES]; + }); + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; + } + } +} + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/MapCell.h" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/MapCell.h" new file mode 100644 index 0000000000000000000000000000000000000000..97133aae4c8dd3253aa55243d103e6add20beb5b --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/MapCell.h" @@ -0,0 +1,34 @@ +// +// MapCell.h +// JQ_ELOVE +// +// Created by Shmily on 16/7/14. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import + +@interface MapCell : UITableViewCell + +/** + * cell上线 + */ +@property (nonatomic, strong) UILabel *upLineLB; +/** + * cell下线 + */ +@property (nonatomic, strong) UILabel *downLineLB; +/** + * 文字描述 + */ +@property (nonatomic, strong) UILabel *itemLB; + +/** + * 详细内容 + */ +@property (nonatomic, strong) UILabel *itemInfnoLB; + + +@property (nonatomic, strong) UIImageView *selectIV; + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/MapCell.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/MapCell.m" new file mode 100644 index 0000000000000000000000000000000000000000..a423d30f40ea2080ff1b10dc87055c5f390254a7 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/MapCell.m" @@ -0,0 +1,84 @@ +// +// MapCell.m +// JQ_ELOVE +// +// Created by Shmily on 16/7/14. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "MapCell.h" + + +@implementation MapCell + +- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier +{ + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + self.backgroundColor = UIColorFromRGB(0xffffff); + [self.contentView addSubview:self.upLineLB]; + [self.contentView addSubview:self.downLineLB]; + [self.contentView addSubview:self.itemLB]; + [self.contentView addSubview:self.itemInfnoLB]; + [self.contentView addSubview:self.selectIV]; + } + return self; +} + +- (UILabel *)upLineLB +{ + if (!_upLineLB) { + _upLineLB = [[UILabel alloc] init]; + _upLineLB.frame = CGRectMake(15,0, KSCREEN_WIDTH, 0.5); + _upLineLB.hidden = YES; + _upLineLB.backgroundColor = LINECOLOUR; + } + return _upLineLB; +} + +- (UILabel *)downLineLB +{ + if (!_downLineLB) { + _downLineLB = [[UILabel alloc] init]; + _downLineLB.hidden = YES; + _downLineLB.backgroundColor = LINECOLOUR; + } + return _downLineLB; +} + + + +- (UILabel *)itemLB +{ + if (!_itemLB) { + _itemLB = [[UILabel alloc]initWithFrame:CGRectMake(15,7,KSCREEN_WIDTH-30, 17)]; + _itemLB.font = [UIFont systemFontOfSize:16]; + //_itemLB.backgroundColor = [UIColor orangeColor]; + } + return _itemLB; +} + + +- (UILabel *)itemInfnoLB +{ + if (!_itemInfnoLB) { + _itemInfnoLB = [[UILabel alloc]initWithFrame:CGRectMake(15,_itemLB.bottom,KSCREEN_WIDTH-30, 14)]; + _itemInfnoLB.font = [UIFont systemFontOfSize:13]; + // _itemInfnoLB.backgroundColor = [UIColor redColor]; + } + return _itemInfnoLB; +} + +- (UIImageView *)selectIV +{ + if (!_selectIV) { + _selectIV = [[UIImageView alloc]initWithFrame:CGRectMake(KSCREEN_WIDTH-30, (44-20)/2, 20, 20)]; + _selectIV.image = [UIImage imageNamed:@"selectDuigou"]; + _selectIV.hidden = YES; + } + return _selectIV; +} + + + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/MyPhotoAlbumViewController.h" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/MyPhotoAlbumViewController.h" new file mode 100644 index 0000000000000000000000000000000000000000..90bb0fbe8a1c58cc08080195a232a59195877c7d --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/MyPhotoAlbumViewController.h" @@ -0,0 +1,24 @@ +// +// MyPhotoAlbumViewController.h +// JQ_ELOVE +// +// Created by Shmily on 16/7/1. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "RootViewController.h" + +@protocol reloadPhotoDelegate + +- (void)reloadMyPhotos; + +@end + + +@interface MyPhotoAlbumViewController : RootViewController +@property (nonatomic, strong) NSMutableArray *PhotoArray; + +@property (nonatomic,weak)iddelegate; + + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/MyPhotoAlbumViewController.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/MyPhotoAlbumViewController.m" new file mode 100644 index 0000000000000000000000000000000000000000..f5595202867639fcc63b32e97d1f9457aae13510 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/MyPhotoAlbumViewController.m" @@ -0,0 +1,471 @@ +// +// MyPhotoAlbumViewController.m +// JQ_ELOVE +// +// Created by Shmily on 16/7/1. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "MyPhotoAlbumViewController.h" +#import "PhotoCollectionViewCell.h" +#import "CHTCollectionViewWaterfallLayout.h" +#import "PhotoModel.h" +#import "MJPhotoBrowser.h" +#import "MJPhoto.h" +#import "PhotoFooterView.h" +#import "JSONKit.h" +#import +#import +#import "CustomNavigationView.h" +#import "CameraManager.h" + +#define ImageSideMax (KSCREEN_WIDTH/4)*2 +#define ItemSideMax (KSCREEN_WIDTH-6)/4.0f + +static NSString *identify = @"PhotoCollectionViewCell"; + + +@interface MyPhotoAlbumViewController () +{ + int _number; + NSMutableArray *_urlKeyArray; + NSMutableArray *_addArray; +} +@property (nonatomic, strong) CustomNavigationView *customNavigationView; +@property (nonatomic, strong) CameraManager *camer; +@property (nonatomic,strong) UICollectionView *mCollectionView; +@property (nonatomic,strong) CHTCollectionViewWaterfallLayout *layout; +@property (nonatomic, strong) UIButton *sureBtn; +@property (nonatomic, strong) PhotoFooterView *footeView; +@property (nonatomic, strong) UIView *headView; +@property (nonatomic, strong) UIImageView *bigImageView; +@property (nonatomic,strong) NSMutableArray *dataArray; + +@end + + +@implementation MyPhotoAlbumViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.isHidenNaviBar = YES; + [self.view addSubview:self.customNavigationView]; + [self.customNavigationView addSubview:self.sureBtn]; + [self.view addSubview:self.mCollectionView]; + [self.view addSubview:self.footeView]; + + _urlKeyArray = [NSMutableArray arrayWithCapacity:0]; + _addArray = [NSMutableArray arrayWithCapacity:0]; + + [self loadData]; +} + +- (CustomNavigationView *)customNavigationView +{ + if (!_customNavigationView) { + _customNavigationView = [[CustomNavigationView alloc] initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH, kTopHeight)]; + _customNavigationView.backgroundColor = PURPLECOLOUR; + _customNavigationView.VC = self; + _customNavigationView.titleLab.text = @"我的相册"; + _customNavigationView.titleLab.textColor = [UIColor whiteColor]; + [_customNavigationView.leftBtn setImage:[UIImage imageNamed:@"back_icon"] forState:UIControlStateNormal]; + } + return _customNavigationView; +} + +- (PhotoFooterView *)footeView +{ + if (!_footeView) { + _footeView = [[PhotoFooterView alloc]initWithFrame:CGRectMake(0,KSCREEN_HEIGHT-44, KSCREEN_WIDTH,44)]; + [_footeView.delBtn addTarget:self action:@selector(delePhoto) forControlEvents:UIControlEventTouchUpInside]; + [_footeView.allBtn addTarget:self action:@selector(selectAllPhoto) forControlEvents:UIControlEventTouchUpInside]; + _footeView.hidden = YES; + } + return _footeView; +} + +- (UIButton *)sureBtn +{ + if (!_sureBtn) { + _sureBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _sureBtn.frame = CGRectMake(KSCREEN_WIDTH-50, 20, 50, 44); + _sureBtn.titleLabel.font = [UIFont systemFontOfSize:15]; + [_sureBtn setTitle:@"编辑" forState:UIControlStateNormal]; + [_sureBtn setTitle:@"取消" forState:UIControlStateSelected]; + [_sureBtn addTarget:self action:@selector(done:) forControlEvents:UIControlEventTouchUpInside]; + } + return _sureBtn; +} + +- (NSMutableArray *)dataArray{ + if (_dataArray == nil) { + _dataArray =[[NSMutableArray alloc]initWithCapacity:0]; + [_dataArray addObject:@""]; + } + return _dataArray; +} + +- (CHTCollectionViewWaterfallLayout *)layout +{ + if (!_layout) { + _layout = [[CHTCollectionViewWaterfallLayout alloc] init]; + _layout.sectionInset = UIEdgeInsetsMake(2,2,2,1); + _layout.minimumInteritemSpacing=2; + _layout.columnCount = 4; + _layout.minimumColumnSpacing = 2; + } + return _layout; +} + +- (UICollectionView *)mCollectionView +{ + if (!_mCollectionView) { + _mCollectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0,_customNavigationView.bottom, KSCREEN_WIDTH, KSCREEN_HEIGHT-kTopHeight) collectionViewLayout:self.layout]; + [_mCollectionView registerClass:[PhotoCollectionViewCell class] forCellWithReuseIdentifier:identify]; + [_mCollectionView registerNib:[UINib nibWithNibName:@"PhotoCollectionViewCell" bundle:nil] forCellWithReuseIdentifier:identify]; + _mCollectionView.backgroundColor= [UIColor clearColor]; + _mCollectionView.alwaysBounceVertical = YES; + _mCollectionView.showsVerticalScrollIndicator =NO; + _mCollectionView.delegate =self; + _mCollectionView.dataSource =self; + + } + return _mCollectionView; +} + +- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView +{ + return 1; +} + +- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section +{ + return self.dataArray.count; +} + +- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{ + PhotoCollectionViewCell* cell = [collectionView dequeueReusableCellWithReuseIdentifier:identify forIndexPath:indexPath]; + if (indexPath.item ==0) { + cell.addPhoto.hidden =NO; + cell.seletcImageView.hidden = YES; + cell.PhotoIV.hidden =YES; + }else{ + cell.addPhoto.hidden =YES; + cell.PhotoIV.hidden =NO; + PhotoModel *model = [self.dataArray objectAtIndex:indexPath.item]; + if (!STR_IS_NOT_EMPTY(model.picUrl) && !STR_IS_NOT_EMPTY(model.photosId)) { + cell.PhotoIV.image = model.photoIV; + } + [cell.PhotoIV sd_setImageWithURL:[NSURL URLWithString:model.picUrlcut] placeholderImage:PICTURE_DEFAULT]; + + if (_sureBtn.selected) {//编辑状态 + cell.seletcImageView.hidden = NO; + if (model.phSelectID) { + cell.seletcImageView.image = [UIImage imageNamed:@"selectDuigou"]; + }else{ + cell.seletcImageView.image = [UIImage imageNamed:@"norDuigou"]; + } + }else{ + cell.seletcImageView.hidden = YES; + } + } + return cell; +} + +//设置元素大小 +- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath +{ + return CGSizeMake(ItemSideMax,ItemSideMax); +} + +- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{ + PhotoCollectionViewCell * cell = (PhotoCollectionViewCell *)[collectionView cellForItemAtIndexPath:indexPath]; + if (indexPath.item ==0) { + if (self.dataArray.count<10) { + [self showSheetView]; + return; + }else{ + [MBProgressHUD showError:@"您的相册已经满仓了" toView:self.view]; + return; + } + } + [self showBigPhoto:indexPath photoCell:cell]; +} + +- (void)showBigPhoto:(NSIndexPath *)indexPath photoCell:(PhotoCollectionViewCell *)cell +{ + if (_sureBtn.selected) { + [self updateSelectedAsset:indexPath]; + }else{ + //1.创建图片浏览器 + MJPhotoBrowser *brower = [[MJPhotoBrowser alloc] init]; + //2.告诉图片浏览器显示所有的图片 + NSMutableArray *photos = [NSMutableArray array]; + for (int i = 1 ; i < self.dataArray.count; i++) { + PhotoModel *model = self.dataArray[i]; + //传递数据给浏览器 + MJPhoto *photo = [[MJPhoto alloc] init]; + photo.url = [NSURL URLWithString:model.picUrl]; + photo.srcImageView = cell.PhotoIV; //设置来源哪一个UIImageView + [photos addObject:photo]; + } + brower.photos = photos; + //3.设置默认显示的图片索引 + brower.currentPhotoIndex = indexPath.item-1; + //4.显示浏览器 + [brower show]; + } +} + +- (NSMutableArray *)PhotoArray +{ + if (!_PhotoArray) { + _PhotoArray = [[NSMutableArray alloc]initWithCapacity:0]; + } + return _PhotoArray; +} + +//删除图片 +-(void)delePhoto +{ + [_PhotoArray removeAllObjects]; + for (int i=1;i +#import "SectionView.h" + +@interface ApproveView : UIView + +@property (nonatomic, retain) SectionView *approveSectionView; + +@property (nonatomic,retain)NSDictionary *params; + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/ApproveView.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/ApproveView.m" new file mode 100644 index 0000000000000000000000000000000000000000..354ef08a98d5c9ce40adf50cbc17ffecee6c82ca --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/ApproveView.m" @@ -0,0 +1,124 @@ +// +// ApproveView.m +// JQQY +// +// Created by Shmily on 2018/1/4. +// Copyright © 2018年 jiuqi. All rights reserved. +// + +#import "ApproveView.h" +#import "ImageLabelView.h" + + +@interface ApproveView () + +@property (nonatomic,retain)ImageLabelView *phoneView; +@property (nonatomic,retain)ImageLabelView *realNameView; +@property (nonatomic,retain)ImageLabelView *companyView; +@property (nonatomic,retain)ImageLabelView *tuanView; + +@end + + +@implementation ApproveView + + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + self.backgroundColor = [UIColor whiteColor]; + [self addSubview:self.approveSectionView]; + [self addSubview:self.phoneView]; + [self addSubview:self.realNameView]; + [self addSubview:self.companyView]; + [self addSubview:self.tuanView]; + + } + return self; +} + + +- (SectionView *)approveSectionView +{ + if (!_approveSectionView) { + _approveSectionView = [[SectionView alloc]initWithFrame:CGRectMake(0, 0, self.width, 30)]; + _approveSectionView.nameLB.text = @"我的认证"; + _approveSectionView.editorBtn.hidden = YES; + } + return _approveSectionView; +} +- (ImageLabelView *)phoneView +{ + if (!_phoneView) { + _phoneView = [[ImageLabelView alloc]initWithFrame:CGRectMake(0, _approveSectionView.bottom, 78, self.width/4)]; + _phoneView.logoImage.image = [UIImage imageNamed:@"phone_icon"]; + _phoneView.nameLB.text = @"手机认证"; + } + return _phoneView; +} + +- (ImageLabelView *)realNameView +{ + if (!_realNameView) { + _realNameView = [[ImageLabelView alloc]initWithFrame:CGRectMake(_phoneView.right, _phoneView.top, _phoneView.height, self.width/4)]; + _realNameView.logoImage.image = [UIImage imageNamed:@"realname_hui_icon"]; + _realNameView.nameLB.text = @"实名认证"; + } + return _realNameView; +} + +- (ImageLabelView *)companyView +{ + if (!_companyView) { + _companyView = [[ImageLabelView alloc]initWithFrame:CGRectMake(_realNameView.right, _phoneView.top,_phoneView.height, self.width/4)]; + _companyView.logoImage.image = [UIImage imageNamed:@"enterprise_hui_icon"]; + _companyView.nameLB.text = @"单位认证"; + } + return _companyView; +} + +- (ImageLabelView *)tuanView +{ + if (!_tuanView) { + _tuanView = [[ImageLabelView alloc]initWithFrame:CGRectMake(_companyView.right, _phoneView.top, _phoneView.height, self.width/4)]; + _tuanView.logoImage.image = [UIImage imageNamed:@"tuan_hui_icon"]; + _tuanView.nameLB.text = @"青年之声认证"; + } + return _tuanView; +} + +- (void)setParams:(NSDictionary *)params +{ + //实名认证 + if ([params[@"realnametype"] intValue] ==1){ //-1 初始状态 0 审核中 1 通过 2 拒绝 + _realNameView.logoImage.image = [UIImage imageNamed:@"realname_icon"]; + }else{ + _realNameView.logoImage.image = [UIImage imageNamed:@"realname_hui_icon"]; + } + _companyView.companyId = params[@"enterpriseid"]; + if ([params[@"kind"] intValue] ==1) { + _companyView.logoImage.image = [UIImage imageNamed:@"enterprise_icon"]; + }else{ + _companyView.logoImage.image = [UIImage imageNamed:@"enterprise_hui_icon"]; + } + + //团员认证 + if ([params[@"youthLeague"] intValue] ==1) { + _tuanView.logoImage.image = [UIImage imageNamed:@"tuan_icon"]; + }else{ + _tuanView.logoImage.image = [UIImage imageNamed:@"tuan_hui_icon"]; + } + + +} + +/* +// 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/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/DeclarationView.h" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/DeclarationView.h" new file mode 100644 index 0000000000000000000000000000000000000000..96eccb632b0564183f2e0067b34ac8e0ceffa438 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/DeclarationView.h" @@ -0,0 +1,25 @@ +// +// DeclarationView.h +// JQQY +// +// Created by Shmily on 2018/1/3. +// Copyright © 2018年 jiuqi. All rights reserved. +// + +#import +#import "SectionView.h" + +@protocol openDelegate +- (void)openOrClose; +@end + + + +@interface DeclarationView : UIView +@property (nonatomic, retain) SectionView *declarSectionView; + +@property (nonatomic,retain)NSDictionary *params; + +@property (nonatomic,weak)iddelegate; + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/DeclarationView.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/DeclarationView.m" new file mode 100644 index 0000000000000000000000000000000000000000..14ab156f9c96f3ca61f2febccf2db21add4e335d --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/DeclarationView.m" @@ -0,0 +1,153 @@ +// +// DeclarationView.m +// JQQY +// +// Created by Shmily on 2018/1/3. +// Copyright © 2018年 jiuqi. All rights reserved. +// + +#import "DeclarationView.h" + +@interface DeclarationView () +{ + CGFloat org_height; + CGFloat open_height; +} +@property (nonatomic, strong) UILabel *intrLab; + +@property (nonatomic, strong) UIButton *unfoldBtn; + + +@end + + +@implementation DeclarationView + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + self.backgroundColor = [UIColor whiteColor]; + [self addSubview:self.declarSectionView]; + [self addSubview:self.intrLab]; + [self addSubview:self.unfoldBtn]; + } + return self; +} + +- (SectionView *)declarSectionView +{ + if (!_declarSectionView) { + _declarSectionView = [[SectionView alloc]initWithFrame:CGRectMake(0, 0, self.width, 30)]; + _declarSectionView.nameLB.text = @"交友宣言"; + } + return _declarSectionView; +} + +- (UILabel *)intrLab{ + if(!_intrLab){ + _intrLab = [[UILabel alloc] initWithFrame:CGRectMake(5, _declarSectionView.bottom, self.width-10, 44)]; + _intrLab.text = @"介绍一下自己吧~"; + _intrLab.font = [UIFont systemFontOfSize:13]; + _intrLab.textColor = UIColorFromRGB(0xc5c5c5); + _intrLab.numberOfLines = 0; + } + return _intrLab; +} + +- (UIButton *)unfoldBtn +{ + if (!_unfoldBtn) { + _unfoldBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _unfoldBtn.frame = CGRectMake(5, _intrLab.bottom,50,20); + [_unfoldBtn setImage:[UIImage imageNamed:@"n_down"] forState:0]; + [_unfoldBtn setImage:[UIImage imageNamed:@"n_up"] forState:UIControlStateSelected]; + [_unfoldBtn setTitle:@"展开" forState:0]; + [_unfoldBtn setTitle:@"收起" forState:UIControlStateSelected]; + [_unfoldBtn setTitleColor:PURPLECOLOUR forState:0]; + [_unfoldBtn setTitleColor:PURPLECOLOUR forState:UIControlStateSelected]; + _unfoldBtn.titleLabel.font = [UIFont systemFontOfSize:12]; +// _unfoldBtn.backgroundColor = [UIColor orangeColor]; + + CGFloat imgWidth = _unfoldBtn.imageView.bounds.size.width; + CGFloat labWidth = _unfoldBtn.titleLabel.bounds.size.width; + [_unfoldBtn setImageEdgeInsets:UIEdgeInsetsMake(0,labWidth, 0, -labWidth)]; + [_unfoldBtn setTitleEdgeInsets:UIEdgeInsetsMake(0,-imgWidth, 0, imgWidth)]; + [_unfoldBtn addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside]; + + } + return _unfoldBtn; +} +- (void)setParams:(NSDictionary *)params +{ + + NSString *indr; + + if ([[params allKeys] containsObject:@"declaration"]) { + indr =params[@"declaration"]; + } + + if ([[params allKeys] containsObject:@"lovedeclaration"]) { + indr =params[@"lovedeclaration"]; + } + + + if (!STR_IS_NOT_EMPTY(indr)) { + + indr = @"亲! 快来介绍一下自己吧!"; + if ([[params allKeys] containsObject:@"lovedeclaration"]) { + indr = @"亲!Ta这空空如也呀!"; + } + + + _intrLab.height = 44; + _intrLab.textAlignment = NSTextAlignmentCenter; + _unfoldBtn.hidden = YES; + self.height = 30+_intrLab.height; + _intrLab.numberOfLines = 1; + }else{ + _intrLab.textAlignment = NSTextAlignmentLeft; + indr = [NSString stringWithFormat:@" %@",indr]; + CGFloat height = [ZCTools labelAutoCalculateRectWith:indr FontSize:13 MaxSize:CGSizeMake(self.width-10, 9999)].height; + + _intrLab.numberOfLines = 2; + if (height<36) {//大于2行 高度2行 32 + _intrLab.height = height+20; + _unfoldBtn.hidden = YES; + self.height = 30+_intrLab.height; + }else{ + _intrLab.height = 50; + _unfoldBtn.hidden = NO; + _unfoldBtn.top = _intrLab.bottom-5; + self.height = 30+_intrLab.height+20; + + org_height = self.height; + open_height = 30+height+18+20; + } + } + _intrLab.text =indr; +} + +- (void)btnClicked:(UIButton *)b +{ + b.selected = !b.selected; + if (b.selected) { + _intrLab.numberOfLines = 0; + _intrLab.height = open_height-50; + _unfoldBtn.top = _intrLab.bottom-5; + self.height = open_height; + }else{ + _intrLab.numberOfLines = 2; + _intrLab.height = 50; + _unfoldBtn.top = _intrLab.bottom-5; + self.height = org_height; + } + if (_delegate && [_delegate respondsToSelector:@selector(openOrClose)]) { + [_delegate openOrClose]; + } +} + + + + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/DetailView.h" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/DetailView.h" new file mode 100644 index 0000000000000000000000000000000000000000..f0b26eb512d99b60c6829e98f17b88d83416e393 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/DetailView.h" @@ -0,0 +1,22 @@ +// +// DetailView.h +// JQQY +// +// Created by Shmily on 2018/1/4. +// Copyright © 2018年 jiuqi. All rights reserved. +// + +#import +#import "SectionView.h" + +@interface DetailView : UIView + +@property (nonatomic, retain) SectionView *detailSectionView; + +@property (nonatomic,retain)NSDictionary *params; + + +@property (nonatomic,retain)NSDictionary *other_params; + + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/DetailView.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/DetailView.m" new file mode 100644 index 0000000000000000000000000000000000000000..22679df3ed34fd30aa7f3ce3855ed4841b33be84 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/DetailView.m" @@ -0,0 +1,153 @@ +// +// DetailView.m +// JQQY +// +// Created by Shmily on 2018/1/4. +// Copyright © 2018年 jiuqi. All rights reserved. +// + +#import "DetailView.h" + +#import "QYTagView.h" +#import "MyCardModel.h" +#import "QYPickerView.h" + +@interface DetailView () +@property (nonatomic,retain)QYTagView *detailTagView; + +@end + + +@implementation DetailView + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + self.backgroundColor = [UIColor whiteColor]; + [self addSubview:self.detailSectionView]; + [self addSubview:self.detailTagView]; + } + return self; +} + +- (SectionView *)detailSectionView +{ + if (!_detailSectionView) { + _detailSectionView = [[SectionView alloc]initWithFrame:CGRectMake(0, 0, self.width, 30)]; + _detailSectionView.nameLB.text = @"详细资料"; + } + return _detailSectionView; +} + +-(QYTagView *)detailTagView{ + if (!_detailTagView) { + _detailTagView = [[QYTagView alloc]initWithFrame:CGRectMake(0,_detailSectionView.bottom, self.width, 0)]; + _detailTagView.color = PURPLECOLOUR; + } + return _detailTagView; +} +- (void)setParams:(NSDictionary *)params +{ + NSArray *arr = @[@"昵称",@"民族",@"身高",@"体重",@"现居地",@"家乡地",@"婚姻状况",@"购车",@"购房"]; + NSMutableArray *m_arr = [[NSMutableArray alloc]init]; + for (int i=0; i +#import "SectionView.h" + +@interface EduView : UIView + +@property (nonatomic, retain) SectionView *eduSectionView; +@property (nonatomic,retain)NSDictionary *params; + + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/EduView.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/EduView.m" new file mode 100644 index 0000000000000000000000000000000000000000..ad00194e3140810863047fbe59cf97f5dc6869e5 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/EduView.m" @@ -0,0 +1,83 @@ +// +// EduView.m +// JQQY +// +// Created by Shmily on 2018/1/4. +// Copyright © 2018年 jiuqi. All rights reserved. +// + +#import "EduView.h" +#import "QYTagView.h" +#import "MyCardModel.h" +#import "QYPickerView.h" + +@interface EduView () + +@property (nonatomic,retain)QYTagView *eduTagView; +@end + + +@implementation EduView + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + self.backgroundColor = [UIColor whiteColor]; + [self addSubview:self.eduSectionView]; + [self addSubview:self.eduTagView]; + + } + return self; +} + +- (SectionView *)eduSectionView +{ + if (!_eduSectionView) { + _eduSectionView = [[SectionView alloc]initWithFrame:CGRectMake(0, 0, self.width, 30)]; + _eduSectionView.nameLB.text = @"最高教育"; + } + return _eduSectionView; +} + +-(QYTagView *)eduTagView{ + if (!_eduTagView) { + _eduTagView = [[QYTagView alloc]initWithFrame:CGRectMake(0,_eduSectionView.bottom, self.width, 0)]; + } + return _eduTagView; +} + + +- (void)setParams:(NSDictionary *)params +{ + NSArray *arr = @[@"学历",@"毕业院校"]; + NSMutableArray *m_arr = [[NSMutableArray alloc]init]; + for (int i=0; i + +@interface ImageLabelView : UIView + +@property (nonatomic,retain)UIImageView *logoImage; +@property (nonatomic,retain)UILabel *nameLB; +@property (nonatomic,retain)NSString *companyId; + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/ImageLabelView.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/ImageLabelView.m" new file mode 100644 index 0000000000000000000000000000000000000000..dfba2024a7f63e201651ea105df90824ef5fce5c --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/ImageLabelView.m" @@ -0,0 +1,65 @@ +// +// ImageLabelView.m +// JQQY +// +// Created by Shmily on 2018/1/5. +// Copyright © 2018年 jiuqi. All rights reserved. +// + +#import "ImageLabelView.h" +#import "ALLWebViewController.h" + +@implementation ImageLabelView + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + [self addSubview:self.logoImage]; + [self addSubview:self.nameLB]; + + + TapGestureRecognizer *t = [[TapGestureRecognizer alloc]initWithTarget:self action:@selector(certificationViewClicked)]; + [self addGestureRecognizer:t]; + + } + return self; +} + +- (void)certificationViewClicked +{ + ALLWebViewController *webView = [[ALLWebViewController alloc]init]; + if (STR_IS_NOT_EMPTY(_companyId)) { + webView.titleName = @"单位介绍"; + webView.urlStr = [NSString stringWithFormat:@"%@%@enterid=%@",BASE_URL,URL_ENTERPRISE,_companyId]; + }else{ + webView.titleName = @"认证"; + webView.urlStr = [NSString stringWithFormat:@"%@%@",BASE_URL,URL_AUTHENTICATION]; + } + [self.firstViewController.navigationController pushViewController:webView animated:YES]; + // NSLog(@"跳企业H5"); +} + + + +- (UIImageView *)logoImage +{ + if (!_logoImage) { + _logoImage = [[UIImageView alloc]initWithFrame:CGRectMake((self.width-38)/2,(self.height-38-15)/2, 38, 38)]; + } + return _logoImage; +} + +- (UILabel *)nameLB +{ + if (!_nameLB) { + _nameLB = [[UILabel alloc] initWithFrame:CGRectMake(0,_logoImage.bottom+6,self.width,15)]; + _nameLB.textAlignment = NSTextAlignmentCenter; + _nameLB.textColor = UIColorFromRGB(0xb4acbf); + _nameLB.font = [UIFont systemFontOfSize:11]; + } + return _nameLB; +} + + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/InterestView.h" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/InterestView.h" new file mode 100644 index 0000000000000000000000000000000000000000..2b39ed42088b374eec58f436a4fba02acc721959 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/InterestView.h" @@ -0,0 +1,21 @@ +// +// interest.h +// JQQY +// +// Created by Shmily on 2018/1/4. +// Copyright © 2018年 jiuqi. All rights reserved. +// + +#import + +@interface InterestView : UIView + +- (void)setBackColor:(NSInteger)type; + + +@property (nonatomic,retain)NSDictionary *hobbysParams; +@property (nonatomic,retain)NSDictionary *labelsParams; +@property (nonatomic,assign)NSInteger type; + + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/InterestView.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/InterestView.m" new file mode 100644 index 0000000000000000000000000000000000000000..4514620b71555cf66dabd88bd916942b9a03ec36 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/InterestView.m" @@ -0,0 +1,132 @@ +// +// interest.m +// JQQY +// +// Created by Shmily on 2018/1/4. +// Copyright © 2018年 jiuqi. All rights reserved. +// + +#import "InterestView.h" +@interface InterestView () + +@property (nonatomic,retain)UIImageView *logoIV; +@property (nonatomic,retain)UILabel *nameLB; +@property (nonatomic,retain)UILabel *itemNameLB; + +@end + +@implementation InterestView + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + [self addSubview:self.logoIV]; + [self addSubview:self.itemNameLB]; + [self addSubview:self.nameLB]; + } + return self; +} + +- (UIImageView *)logoIV +{ + if (!_logoIV) { + _logoIV = [[UIImageView alloc]initWithFrame:CGRectMake(7,17, 22,22)]; + } + return _logoIV; +} + +- (UILabel *)itemNameLB +{ + if (!_itemNameLB) { + _itemNameLB = [[UILabel alloc]initWithFrame:CGRectMake(_logoIV.right+7,17,65,22)]; + _itemNameLB.textColor = [UIColor whiteColor]; + _itemNameLB.font = [UIFont systemFontOfSize:14]; + } + return _itemNameLB; +} + +- (UILabel *)nameLB +{ + if (!_nameLB) { + _nameLB = [[UILabel alloc]initWithFrame:CGRectMake(_itemNameLB.right+7,17,self.width-_itemNameLB.right-14,22)]; + _nameLB.textColor = [UIColor whiteColor]; + _nameLB.textAlignment = NSTextAlignmentRight; + _nameLB.font = [UIFont systemFontOfSize:12]; + _nameLB.numberOfLines = 0; + } + return _nameLB; +} + + +- (void)setBackColor:(NSInteger)type +{ + CAGradientLayer *gradientLayer = [[CAGradientLayer alloc] init]; + gradientLayer.colors = @[(__bridge id)UIColorFromRGB(0x763cd3).CGColor,(__bridge id)UIColorFromRGB(0xa477f1).CGColor]; + _type = type; + if (type ==1 || type ==3) { + _itemNameLB.text = @"兴趣爱好"; + _logoIV.image = [UIImage imageNamed:@"n_inter"]; + + gradientLayer.startPoint = CGPointMake(0, 0); + gradientLayer.endPoint = CGPointMake(1, 0); + }else{ + _itemNameLB.text = @"标签"; + _logoIV.image = [UIImage imageNamed:@"n_label"]; + gradientLayer.startPoint = CGPointMake(1, 0); + gradientLayer.endPoint = CGPointMake(0, 0); + } + gradientLayer.frame = self.bounds; + [self.layer insertSublayer:gradientLayer atIndex:0]; + + +} + +-(void)setHobbysParams:(NSDictionary *)hobbysParams +{ + + _nameLB.text = [self joint:hobbysParams[@"hobbys"] type:_type]; + _nameLB.height = [self labelHeight]; + self.height = _nameLB.bottom+17; + [self setBackColor:_type]; +} + +-(void)setLabelsParams:(NSDictionary *)labelsParams +{ + _nameLB.text = [self joint:labelsParams[@"labels"] type:_type]; + _nameLB.height = [self labelHeight]; + self.height = _nameLB.bottom+17; + [self setBackColor:_type]; + +} + + +- (CGFloat )labelHeight +{ + CGFloat height = [ZCTools labelAutoCalculateRectWith:_nameLB.text FontSize:12 MaxSize:CGSizeMake(_nameLB.width, 9999)].height; + return MAX(height, 22); +} + +- (NSString *)joint:(NSArray *)arr type:(NSInteger)type +{ + + if (!ARRAY_IS_NOT_EMPTY(arr)) { + if (type ==1) { + return @"亲!快点选择自己的兴趣吧!"; + }else if(type ==2){ + return @"亲!快点给自己打个标签吧!"; + }else if (type ==3){ + return @"抱歉!Ta还没选择自己的兴趣!"; + }else { + return @"抱歉!Ta还没给自己打标签!"; + } + }else{ + NSString *returnStr = [arr firstObject]; + for (int i =1; i +#import "SectionView.h" + +@interface PersonPhotoView : UIView +@property (nonatomic, retain) SectionView *photoSectionView; +@property (nonatomic, strong) UIButton *plusBtn; +- (void)createPhotoList:(NSArray *)photoArray; +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/PersonPhotoView.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/PersonPhotoView.m" new file mode 100644 index 0000000000000000000000000000000000000000..4e76220e4af9ef4470264749845f69238f3ecbcd --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/PersonPhotoView.m" @@ -0,0 +1,125 @@ +// +// PersonPhotoView.m +// JQQY +// +// Created by Shmily on 2018/1/3. +// Copyright © 2018年 jiuqi. All rights reserved. +// + +#import "PersonPhotoView.h" + +#import "MJPhotoBrowser.h" +#import "MJPhoto.h" +#import "TapGestureRecognizer.h" + + +@interface PersonPhotoView () +{ + CGFloat side; +} +@property (nonatomic, strong) UIScrollView *mScrollView; + + + +@end + + + + +@implementation PersonPhotoView + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + + side = self.height-40; + [self addSubview:self.photoSectionView]; + self.backgroundColor = [UIColor whiteColor]; + [self addSubview:self.mScrollView]; + [self addSubview:self.plusBtn]; + } + return self; +} + +- (SectionView *)photoSectionView +{ + if (!_photoSectionView) { + _photoSectionView = [[SectionView alloc]initWithFrame:CGRectMake(0, 0, self.width, 30)]; + _photoSectionView.nameLB.text = @"我的相册"; + } + return _photoSectionView; +} + + + +- (UIScrollView *)mScrollView +{ + if (!_mScrollView) { + _mScrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(0,35, self.width,side)]; + _mScrollView.showsHorizontalScrollIndicator =NO; + } + return _mScrollView; +} + +- (UIButton *)plusBtn{ + if (!_plusBtn) { + _plusBtn = [[UIButton alloc] initWithFrame:CGRectMake(5,35,side, side)]; + [_plusBtn setBackgroundImage:[UIImage imageNamed:@"add_image"] forState:UIControlStateNormal]; + [_plusBtn setBackgroundImage:[UIImage imageNamed:@"add_image"] forState:UIControlStateHighlighted]; + + } + return _plusBtn; +} + +- (void)createPhotoList:(NSArray *)photoArray +{ + _plusBtn.hidden = ARRAY_IS_NOT_EMPTY(photoArray)?1:0; + for (UIView *view in _mScrollView.subviews) { + if ([view isKindOfClass:[UIImageView class]]) { + if (view.tag) { + [view removeFromSuperview]; + } + } + } + for (int i=0; i + +@protocol PersonDelegate +- (void)personInfnoEdit:(NSDictionary *)req actionType:(NSInteger)type; +@end + + + +@interface PersonView : UIView + +@property (nonatomic,retain)NSDictionary *personDict; + +@property (nonatomic,retain)NSArray *photo; + +@property (nonatomic,weak)iddelegate; + +@property (nonatomic, copy) void(^PersonOpenOrClose)(); + + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/PersonView.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/PersonView.m" new file mode 100644 index 0000000000000000000000000000000000000000..029540d304e1e03b41f4856411c8de30c41da2bf --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/PersonView.m" @@ -0,0 +1,254 @@ + +// +// PersonView.m +// JQQY +// +// Created by Shmily on 2018/1/3. +// Copyright © 2018年 jiuqi. All rights reserved. +// + +#import "PersonView.h" +#import "PersonPhotoView.h" +#import "DeclarationView.h" +#import "EduView.h" +#import "WorkView.h" +#import "ApproveView.h" +#import "DetailView.h" +#import "InterestView.h" +#import "VideoView.h" +#import "TapGestureRecognizer.h" + +@interface PersonView () + +@property (nonatomic,retain)PersonPhotoView *photoView; +@property (nonatomic,retain)DeclarationView *declarView; +@property (nonatomic,retain)EduView *eduView; +@property (nonatomic,retain)WorkView *workView; +@property (nonatomic,retain)ApproveView *approveView; +@property (nonatomic,retain)DetailView *detailView; +@property (nonatomic,retain)InterestView *interView; +@property (nonatomic,retain)InterestView *markView; +@property (nonatomic,retain)VideoView *videoView; + + +@end + + +@implementation PersonView + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + self.backgroundColor = UIColorFromRGB(0xf3f3f3); + [self addSubview:self.photoView]; + [self addSubview:self.declarView]; + [self addSubview:self.approveView]; + [self addSubview:self.detailView]; + [self addSubview:self.eduView]; + [self addSubview:self.workView]; + [self addSubview:self.interView]; + [self addSubview:self.markView]; + [self addSubview:self.videoView]; + + } + return self; +} +- (PersonPhotoView *)photoView +{ + if (!_photoView) { + _photoView = [[PersonPhotoView alloc]initWithFrame:CGRectMake(7,0,self.width-14,80+30+10)]; + [_photoView setImageRoundRadius:4 BorderWidth:0 borderColor:NULL]; + __weak typeof(self) weakSelf = self; + [_photoView.photoSectionView setDidBtnAction:^{ + [weakSelf delegateAction:1]; + }]; + [_photoView.plusBtn addTarget:self action:@selector(btnClicked) forControlEvents:UIControlEventTouchUpInside]; + } + return _photoView; +} +- (void)btnClicked +{ + [self delegateAction:1]; +} + + +- (void)setPhoto:(NSArray *)photo +{ + [_photoView createPhotoList:photo]; +} + + +- (DeclarationView *)declarView +{ + if (!_declarView) { + _declarView = [[DeclarationView alloc]initWithFrame:CGRectMake(7, _photoView.bottom+7, self.width-14,74)]; + _declarView.delegate =self; + [_declarView setImageRoundRadius:4 BorderWidth:0 borderColor:NULL]; + __weak typeof(self) weakSelf = self; + [_declarView.declarSectionView setDidBtnAction:^{ + [weakSelf delegateAction:2]; + }]; + } + return _declarView; +} + +- (ApproveView *)approveView +{ + if (!_approveView) { + _approveView = [[ApproveView alloc]initWithFrame:CGRectMake(7, _declarView.bottom+7, self.width-14,110)]; + [_declarView setImageRoundRadius:4 BorderWidth:0 borderColor:NULL]; + } + return _approveView; +} + + +- (DetailView *)detailView +{ + if (!_detailView) { + _detailView = [[DetailView alloc]initWithFrame:CGRectMake(7, _approveView.bottom+7, self.width-14,110)]; + [_detailView setImageRoundRadius:4 BorderWidth:0 borderColor:NULL]; + __weak typeof(self) weakSelf = self; + [_detailView.detailSectionView setDidBtnAction:^{ + [weakSelf delegateAction:3]; + }]; + + } + return _detailView; +} +- (EduView *)eduView +{ + if (!_eduView) { + _eduView = [[EduView alloc]initWithFrame:CGRectMake(7, _detailView.bottom+7, self.width-14,110)]; + [_eduView setImageRoundRadius:4 BorderWidth:0 borderColor:NULL]; + __weak typeof(self) weakSelf = self; + [_eduView.eduSectionView setDidBtnAction:^{ + [weakSelf delegateAction:4]; + }]; + + } + return _eduView; +} + +- (WorkView *)workView +{ + if (!_workView) { + _workView = [[WorkView alloc]initWithFrame:CGRectMake(7, _eduView.bottom+7, self.width-14,150)]; + [_workView setImageRoundRadius:4 BorderWidth:0 borderColor:NULL]; + __weak typeof(self) weakSelf = self; + [_workView.workSectionView setDidBtnAction:^{ + [weakSelf delegateAction:5]; + }]; + + } + return _workView; +} + +- (InterestView *)interView +{ + if (!_interView) { + _interView = [[InterestView alloc]initWithFrame:CGRectMake(7, _workView.bottom+7, self.width-14,56)]; + [_interView setImageRoundRadius:4 BorderWidth:0 borderColor:NULL]; + [_interView setBackColor:1]; + + TapGestureRecognizer *tap = [[TapGestureRecognizer alloc]initWithTarget:self action:@selector(tapAction:)]; + tap.tag = 6; + [_interView addGestureRecognizer:tap]; + } + return _interView; +} + +- (InterestView *)markView +{ + if (!_markView) { + _markView = [[InterestView alloc]initWithFrame:CGRectMake(7, _interView.bottom+7, self.width-14,56)]; + [_markView setImageRoundRadius:4 BorderWidth:0 borderColor:NULL]; + [_markView setBackColor:2]; + + TapGestureRecognizer *tap = [[TapGestureRecognizer alloc]initWithTarget:self action:@selector(tapAction:)]; + tap.tag = 7; + [_markView addGestureRecognizer:tap]; + + } + return _markView; +} + +- (VideoView *)videoView +{ + if (!_videoView) { + _videoView = [[VideoView alloc]initWithFrame:CGRectMake(7, _markView.bottom+7, self.width-14, 150)]; + [_workView setImageRoundRadius:4 BorderWidth:0 borderColor:NULL]; + _videoView.userid = USER_USERID; + + } + return _videoView; +} + + + +- (void)delegateAction:(NSInteger)t +{ + if (_delegate && [_delegate respondsToSelector:@selector(personInfnoEdit:actionType:)]) { + [_delegate personInfnoEdit:_personDict actionType:t]; + } +} + + +- (void)tapAction:(TapGestureRecognizer *)t +{ + if (_delegate && [_delegate respondsToSelector:@selector(personInfnoEdit:actionType:)]) { + [_delegate personInfnoEdit:_personDict actionType:t.tag]; + } +} + +- (void)openOrClose +{ + _approveView.top = _declarView.bottom+7; + _detailView.top = _approveView.bottom+7; + _eduView.top = _detailView.bottom+7; + _workView.top = _eduView.bottom+7; + _interView.top = _workView.bottom+7; + _markView.top = _interView.bottom+7; + _videoView.top = _markView.bottom+7; + self.height = _videoView.bottom+10; + if (self.PersonOpenOrClose) { + self.PersonOpenOrClose(); + } +} + + + + +- (void)setPersonDict:(NSDictionary *)personDict +{ + _personDict= personDict; + + _approveView.params = personDict; + + _declarView.params = personDict; + _approveView.top = _declarView.bottom+7; + + _detailView.top = _approveView.bottom+7; + _detailView.params = personDict; + + _eduView.top = _detailView.bottom+7; + _eduView.params = personDict; + + _workView.top = _eduView.bottom+7; + _workView.params = personDict; + + _interView.top = _workView.bottom+7; + _interView.hobbysParams = personDict; + + _markView.top = _interView.bottom+7; + _markView.labelsParams = personDict; + + _videoView.top = _markView.bottom+7; + _videoView.params = personDict; + + self.height = _videoView.bottom+10; + +} + + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/ProfileHeaderView.h" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/ProfileHeaderView.h" new file mode 100644 index 0000000000000000000000000000000000000000..e1b536261f91da28fcee1823cb2f52708d8cd760 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/ProfileHeaderView.h" @@ -0,0 +1,21 @@ +// +// ProfileHeaderView.h +// JQQY +// +// Created by Shmily on 2018/1/2. +// Copyright © 2018年 jiuqi. All rights reserved. +// + +#import + +@interface ProfileHeaderView : UIView + +@property (nonatomic,retain)UIImageView *headView; +@property (nonatomic,retain)NSDictionary *headInfno; + +- (id)initWithFrame:(CGRect)frame toWho:(NSInteger)type; //1自己 2他人 + + +@property (nonatomic,retain)NSDictionary *otherDict; + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/ProfileHeaderView.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/ProfileHeaderView.m" new file mode 100644 index 0000000000000000000000000000000000000000..8c22fbb96f06add4ed6d54c60204b9a799a21b43 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/ProfileHeaderView.m" @@ -0,0 +1,258 @@ +// +// ProfileHeaderView.m +// JQQY +// +// Created by Shmily on 2018/1/2. +// Copyright © 2018年 jiuqi. All rights reserved. +// + +#import "ProfileHeaderView.h" +#import "MJPhotoBrowser.h" +#import "MJPhoto.h" +#import "VisitorViewController.h" +@interface ProfileHeaderView () +{ + NSString *faceUrl; +} +@property (nonatomic,retain)UILabel *nameLB; +@property (nonatomic,retain)UILabel *numLB; +@property (nonatomic,retain)UILabel *sexLB; +@property (nonatomic,retain)UIImageView *todayIV; +@property (nonatomic,retain)UILabel *todayLB; + +@property (nonatomic,retain)UIImageView *alldayIV; +@property (nonatomic,retain)UILabel *alldayLB; + + + +@end + + +@implementation ProfileHeaderView + +- (id)initWithFrame:(CGRect)frame toWho:(NSInteger)type +{ + self = [super initWithFrame:frame]; + if (self) { + if (type ==1) { + + [self addSubview:self.headView]; + [self addSubview:self.nameLB]; + [self addSubview:self.numLB]; + + + [self addSubview:self.sexLB]; + + [self addSubview:self.todayIV]; + [self addSubview:self.todayLB]; + + [self addSubview:self.alldayIV]; + [self addSubview:self.alldayLB]; + + }else{ + [self addSubview:self.headView]; + [self addSubview:self.nameLB]; + [self addSubview:self.numLB]; + + _headView.frame = CGRectMake((self.width-90)/2,64,90,90); + _nameLB.frame =CGRectMake(0,_headView.bottom+5,self.width,20); + _nameLB.textAlignment = NSTextAlignmentCenter; + _numLB.frame = CGRectMake((self.width-70)/2,_nameLB.bottom+5,70,18); + + + + } + + + } + return self; +} + +- (UIImageView *)headView +{ + if (!_headView) { + _headView = [[UIImageView alloc]initWithFrame:CGRectMake(20,70,90,90)]; + _headView.backgroundColor = LINECOLOUR; + [_headView setImageRoundRadius:8 BorderWidth:2.5 borderColor:UIColorFromRGBWithAlpha(0xffffff, 0.5)]; + _headView.userInteractionEnabled = YES; + + TapGestureRecognizer *tap = [[TapGestureRecognizer alloc]initWithTarget:self action:@selector(showBigPhoto:)]; + tap.imageView = _headView; + [_headView addGestureRecognizer:tap]; + + + } + return _headView; +} + +- (UILabel *)nameLB +{ + if (!_nameLB) { + _nameLB = [[UILabel alloc]initWithFrame:CGRectMake(_headView.right+15,_headView.top+23, self.width-_headView.right-15-7-65-5,20)]; + _nameLB.textColor = [UIColor whiteColor]; + // _nameLB.backgroundColor = [UIColor orangeColor]; + _nameLB.font = [UIFont systemFontOfSize:16]; + } + return _nameLB; +} + +- (UILabel *)numLB +{ + if (!_numLB) { + _numLB = [[UILabel alloc]initWithFrame:CGRectMake(_nameLB.right+7,_nameLB.top+1,65,18)]; + _numLB.textColor = [UIColor whiteColor]; + _numLB.backgroundColor = UIColorFromRGBWithAlpha(0xffffff, 0.3); + _numLB.font = [UIFont systemFontOfSize:12]; + [_numLB setImageRoundRadius:4 BorderWidth:1 borderColor:UIColorFromRGB(0xffffff)]; + _numLB.textAlignment = NSTextAlignmentCenter; + + } + return _numLB; + +} + + +- (UILabel *)sexLB +{ + if (!_sexLB) { + _sexLB = [[UILabel alloc]initWithFrame:CGRectMake(_headView.right+15,_nameLB.bottom+4, 100,20)]; + _sexLB.textColor = [UIColor whiteColor]; +// _sexLB.backgroundColor = [UIColor redColor]; + _sexLB.font = [UIFont systemFontOfSize:14]; + } + return _sexLB; +} + +- (UIImageView *)todayIV +{ + if (!_todayIV) { + _todayIV = [[UIImageView alloc]initWithFrame:CGRectMake(self.width-17-70-15,self.height-65, 17, 17)]; + _todayIV.image = [UIImage imageNamed:@"n_today"]; + + } + return _todayIV; +} + +- (UILabel *)todayLB +{ + if (!_todayLB) { + _todayLB = [[UILabel alloc]initWithFrame:CGRectMake(_todayIV.right+4, _todayIV.top, 70, 17)]; + _todayLB.font = [UIFont systemFontOfSize:10]; + _todayLB.textColor = [UIColor whiteColor]; + _todayLB.userInteractionEnabled = YES; + + TapGestureRecognizer *tap = [[TapGestureRecognizer alloc]initWithTarget:self action:@selector(goVister)]; + [_todayLB addGestureRecognizer:tap]; + + } + return _todayLB; +} + + + +- (UIImageView *)alldayIV +{ + if (!_alldayIV) { + _alldayIV = [[UIImageView alloc]initWithFrame:CGRectMake(_todayIV.left,_todayIV.bottom+5, 17, 17)]; + _alldayIV.image = [UIImage imageNamed:@"n_allday"]; + } + return _alldayIV; +} + +- (UILabel *)alldayLB +{ + if (!_alldayLB) { + _alldayLB = [[UILabel alloc]initWithFrame:CGRectMake(_alldayIV.right+4, _alldayIV.top, 70, 17)]; + _alldayLB.font = [UIFont systemFontOfSize:10]; + _alldayLB.textColor = [UIColor whiteColor]; + _alldayLB.userInteractionEnabled = YES; + + TapGestureRecognizer *tap = [[TapGestureRecognizer alloc]initWithTarget:self action:@selector(goVister)]; + [_alldayLB addGestureRecognizer:tap]; + + } + return _alldayLB; +} + +- (void)setHeadInfno:(NSDictionary *)headInfno +{ + CGFloat nameWidth = [headInfno[@"nickname"] calculateSize:CGSizeMake(_nameLB.width, 20) font:16].width; + _nameLB.width = nameWidth; + _nameLB.text = headInfno[@"nickname"]; + _numLB.text =ToString(headInfno[@"IDNum"]); + _numLB.left = _nameLB.right+7; + NSString *sex = [ZCTools judgeSex:headInfno[@"sex"]]; + NSString *age = [ZCTools judgeIsRight:ToString(headInfno[@"age"]) unit:nil]; + if ([age isEqualToString:@"未填"]) { + _sexLB.text = [NSString stringWithFormat:@"%@ | %@",sex,age]; + }else{ + _sexLB.text = [NSString stringWithFormat:@"%@ | %@岁",sex,age]; + } + NSString *toaday = [NSString stringWithFormat:@"今日访客:%@",headInfno[@"visitortodaynum"]]; + NSString *allday = [NSString stringWithFormat:@"访客总数:%@",headInfno[@"visitornum"]]; + + _todayLB.text = toaday; + _alldayLB.text = allday; + CGFloat t_num = [toaday calculateSize:CGSizeMake(self.width-50, 17) font:10].width; + CGFloat a_num = [allday calculateSize:CGSizeMake(self.width-50, 17) font:10].width; + + faceUrl = headInfno[@"avatar"]; + if (MAX(t_num,a_num)>70) { + _todayIV.left =self.width-17-MAX(t_num, a_num)-15; + _todayLB.left = _todayIV.right+4; + _todayLB.width = MAX(t_num, a_num); + _alldayIV.left = _todayIV.left; + _alldayLB.left = _alldayIV.right+4; + _alldayLB.width = MAX(t_num, a_num); + } +} +- (void)setOtherDict:(NSDictionary *)otherDict +{ + _nameLB.text = otherDict[@"nickname"]; + _numLB.text =ToString(otherDict[@"IDNum"]); + faceUrl = otherDict[@"avatar"]; + +} + + + + + +- (void)showBigPhoto:(TapGestureRecognizer *)tap +{ + //1.创建图片浏览器 + MJPhotoBrowser *brower = [[MJPhotoBrowser alloc] init]; + + //2.告诉图片浏览器显示所有的图片 + NSMutableArray *photos = [NSMutableArray array]; + + MJPhoto *photo = [[MJPhoto alloc] init]; + photo.url = [NSURL URLWithString:faceUrl]; + photo.srcImageView = tap.imageView; //设置来源哪一个UIImageView + [photos addObject:photo]; + + brower.photos = photos; + //3.设置默认显示的图片索引 + brower.currentPhotoIndex = 0; + //4.显示浏览器 + [brower show]; +} + +- (void)goVister +{ + VisitorViewController *visterVC = [[VisitorViewController alloc]init]; + [self.firstViewController.navigationController pushViewController:visterVC animated:YES]; +} + + + + +/* +// 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/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/SectionView.h" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/SectionView.h" new file mode 100644 index 0000000000000000000000000000000000000000..7bca004d01f8b5d4b6e9be489612a45377750671 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/SectionView.h" @@ -0,0 +1,22 @@ +// +// SectionView.h +// JQQY +// +// Created by Shmily on 2018/1/3. +// Copyright © 2018年 jiuqi. All rights reserved. +// + +#import + +@interface SectionView : UIView + + + + +@property (nonatomic,retain)UILabel *nameLB; +@property (nonatomic,retain)UIButton *editorBtn; + +@property (nonatomic, copy) void(^didBtnAction)(); + + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/SectionView.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/SectionView.m" new file mode 100644 index 0000000000000000000000000000000000000000..ed63b8d48b0f2e09be73222ae94cca6d1b72240b --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/SectionView.m" @@ -0,0 +1,83 @@ +// +// SectionView.m +// JQQY +// +// Created by Shmily on 2018/1/3. +// Copyright © 2018年 jiuqi. All rights reserved. +// + +#import "SectionView.h" + +@interface SectionView () + +@property (nonatomic,retain)UILabel *ver_line; +@property (nonatomic,retain)UILabel *hor_line; + + + +@end + +@implementation SectionView + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + [self addSubview:self.ver_line]; + [self addSubview:self.nameLB]; + [self addSubview:self.editorBtn]; + [self addSubview:self.hor_line]; + } + return self; +} + +- (UILabel *)ver_line +{ + if (!_ver_line) { + _ver_line = [[UILabel alloc] initWithFrame:CGRectMake(5,8,2,14)]; + _ver_line.backgroundColor = PURPLECOLOUR; + } + return _ver_line; +} + +- (UILabel *)nameLB +{ + if (!_nameLB) { + _nameLB = [[UILabel alloc] initWithFrame:CGRectMake(_ver_line.right+7,7,200,16)]; + _nameLB.textColor = UIColorFromRGB(0x5e546c); + _nameLB.font = [UIFont systemFontOfSize:14]; + } + return _nameLB; +} + +- (UILabel *)hor_line +{ + if (!_hor_line) { + _hor_line=[[UILabel alloc] initWithFrame:CGRectMake(5,self.height-0.5,self.width-10,0.5)]; + _hor_line.backgroundColor = LINECOLOUR; + } + return _hor_line; +} + +- (UIButton *)editorBtn +{ + if (!_editorBtn) { + _editorBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _editorBtn.frame = CGRectMake(self.width-35, 0, 30, 30); + [_editorBtn setImage:[UIImage imageNamed:@"phone_editor"] forState:0]; + [_editorBtn addTarget:self action:@selector(btnClicekd:) forControlEvents:UIControlEventTouchUpInside]; + } + return _editorBtn; +} + + +- (void)btnClicekd:(UIButton *)b +{ + if (self.didBtnAction) { + self.didBtnAction(); + } +} + + + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/SpouseView.h" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/SpouseView.h" new file mode 100644 index 0000000000000000000000000000000000000000..bd17843ef91b47dc34b302ebd16c927574b9f3c4 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/SpouseView.h" @@ -0,0 +1,29 @@ +// +// SpouseView.h +// JQQY +// +// Created by Shmily on 2018/1/2. +// Copyright © 2018年 jiuqi. All rights reserved. +// + +#import +#import "SectionView.h" +#import "QYTagView.h" + + +@protocol SpouseDelegate +- (void)requestInfnoEdit:(NSDictionary *)req; +@end + + + + +@interface SpouseView : UIView + +@property (nonatomic,retain)NSDictionary *requestDict; +@property (nonatomic,weak)iddelegate; +@property (nonatomic,retain)SectionView *spouseView; +@property (nonatomic,retain)QYTagView *spouseTagView; + + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/SpouseView.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/SpouseView.m" new file mode 100644 index 0000000000000000000000000000000000000000..1d898268d92cc9a28396b20fe1f0ac1712c6ff17 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/SpouseView.m" @@ -0,0 +1,96 @@ +// +// SpouseView.m +// JQQY +// +// Created by Shmily on 2018/1/2. +// Copyright © 2018年 jiuqi. All rights reserved. +// + +#import "SpouseView.h" +#import "QYPickerView.h" +#import "MyCardModel.h" +@interface SpouseView () + + +@end + + + +@implementation SpouseView + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + [self addSubview:self.spouseView]; + [self setImageRoundRadius:6 BorderWidth:0 borderColor:NULL]; + [self addSubview:self.spouseTagView]; + } + return self; +} + +- (SectionView *)spouseView +{ + if (!_spouseView) { + _spouseView = [[SectionView alloc]initWithFrame:CGRectMake(0, 0, self.width, 30)]; + _spouseView.nameLB.text = @"择偶要求"; + __weak typeof(self) weakSelf = self; + [_spouseView setDidBtnAction:^{ + if ([weakSelf.delegate respondsToSelector:@selector(requestInfnoEdit:)]) { + [weakSelf.delegate requestInfnoEdit:weakSelf.requestDict]; + } + }]; + } + return _spouseView; +} + +-(QYTagView *)spouseTagView{ + if (!_spouseTagView) { + _spouseTagView = [[QYTagView alloc]initWithFrame:CGRectMake(0,_spouseView.bottom, self.width, 0)]; + _spouseTagView.color = PURPLECOLOUR; + } + return _spouseTagView; +} +- (void)setRequestDict:(NSDictionary *)requestDict +{ + _requestDict = requestDict; + NSArray *arr = @[@"年龄",@"身高",@"学历",@"年薪",@"购房",@"购车",@"现居地"]; + NSMutableArray *m_arr = [[NSMutableArray alloc]init]; + for (int k=0; k +#import "SectionView.h" + +@interface VideoView : UIView + +@property (nonatomic, retain) SectionView *videoSectionView; + +@property (nonatomic,copy)NSString *userid; +@property (nonatomic,retain)NSDictionary *params; + +@property (nonatomic,retain)NSDictionary *other_params; + + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/VideoView.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/VideoView.m" new file mode 100644 index 0000000000000000000000000000000000000000..1f535106ab4d8834f6baba9532d9d3d882cd6ede --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/VideoView.m" @@ -0,0 +1,133 @@ +// +// VideoView.m +// JQQY +// +// Created by Shmily on 2018/1/4. +// Copyright © 2018年 jiuqi. All rights reserved. +// + +#import "VideoView.h" +#import "VideoViewController.h" +#import "LookVideoViewController.h" + +@interface VideoView () + +@property (nonatomic,retain)UIButton *videoBtn; + +@end + +@implementation VideoView + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + self.backgroundColor = [UIColor whiteColor]; + [self addSubview:self.videoSectionView]; + [self addSubview:self.videoBtn]; + } + return self; +} +- (SectionView *)videoSectionView +{ + if (!_videoSectionView) { + _videoSectionView = [[SectionView alloc]initWithFrame:CGRectMake(0, 0, self.width, 30)]; + _videoSectionView.nameLB.text = @"视频介绍"; + _videoSectionView.editorBtn.hidden = YES; + } + return _videoSectionView; +} + +- (UIButton *)videoBtn +{ + if (!_videoBtn) { + _videoBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _videoBtn.frame = CGRectMake(7,35,110,110); + _videoBtn.backgroundColor = UIColorFromRGBWithAlpha(0x000000, 0.3); + _videoBtn.titleLabel.font = [UIFont systemFontOfSize:12]; + [_videoBtn setTitleColor:[UIColor whiteColor] forState:0]; + _videoBtn.titleLabel.numberOfLines =0; + _videoBtn.titleLabel.textAlignment = NSTextAlignmentCenter; + } + return _videoBtn; +} + +- (void)setParams:(NSDictionary *)params +{ + + _params = params; + if ([params[@"ifvideo"] intValue] ==1 && STR_IS_NOT_EMPTY(params[@"video"])) { + [self setbtnImage:params[@"video"]]; + }else{ + [self.videoBtn setTitle:@"亲!快去录制视频吧" forState:0]; + } + [_videoBtn addTarget:self action:@selector(playVideoBtnClicked) forControlEvents:UIControlEventTouchUpInside]; +} +- (void)playVideoBtnClicked +{ + if([_params[@"ifvideo"] intValue] == 0){ + VideoViewController *videoVC = [[VideoViewController alloc]init]; + [self.firstViewController.navigationController pushViewController:videoVC animated:YES]; + }else{ + LookVideoViewController *lookVideoVC = [[LookVideoViewController alloc]init]; + lookVideoVC.comeType = 1; + lookVideoVC.userid = _userid; + [self.firstViewController.navigationController pushViewController:lookVideoVC animated:YES]; + } +} +- (void)setOther_params:(NSDictionary *)other_params +{ + _other_params = other_params; + if ([other_params[@"ifvideo"] intValue] ==1 && STR_IS_NOT_EMPTY(other_params[@"video"])) { + [self setbtnImage:other_params[@"video"]]; + }else{ + [self.videoBtn setTitle:@"亲!邀请Ta录制视频吧" forState:0]; + } + [_videoBtn addTarget:self action:@selector(otherBtnClicked:) forControlEvents:UIControlEventTouchUpInside]; +} +- (void)otherBtnClicked:(UIButton *)b +{ + if([_other_params[@"ifvideo"] intValue] == 0){ + [self clickVideo]; + }else{ + LookVideoViewController *lookVideoVC = [[LookVideoViewController alloc]init]; + lookVideoVC.comeType = 1; + lookVideoVC.userid = _userid; + [self.firstViewController.navigationController pushViewController:lookVideoVC animated:YES]; + } +} +- (void)setbtnImage:(NSString *)url +{ + dispatch_async(dispatch_get_global_queue(0, 0), ^{ + UIImage *img = [ZCTools thumbnailImageForVideo:[NSURL URLWithString:url]]; + //通知主线程刷新 + dispatch_async(dispatch_get_main_queue(), ^{ + if (img) { + [self.videoBtn setBackgroundImage:img forState:UIControlStateNormal]; + [self.videoBtn setImage:[UIImage imageNamed:(@"n_video")] forState:0]; + } + }); + }); +} +- (void)clickVideo{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:@"网络异常" toView:self.firstViewController.view]; + return; + } + NSDictionary *parameters = @{@"userID":USER_USERID, + @"action":@"1", + @"otherID":_userid}; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_user_auditinvite block:^(NSDictionary *resultDic, NSError *error) { + if(resultDic){ + if([resultDic[@"retcode"] intValue] == 1){ + [MBProgressHUD showSuccess:@"视频认证邀请已发送" toView:self.firstViewController.view]; + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.firstViewController.view]; + } + } + }]; +} + + + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/WorkView.h" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/WorkView.h" new file mode 100644 index 0000000000000000000000000000000000000000..f68852bbe0c2d1bc43c5e28489964c03b2bbff8e --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/WorkView.h" @@ -0,0 +1,18 @@ +// +// WorkView.h +// JQQY +// +// Created by Shmily on 2018/1/4. +// Copyright © 2018年 jiuqi. All rights reserved. +// + +#import +#import "SectionView.h" + +@interface WorkView : UIView + +@property (nonatomic, retain) SectionView *workSectionView; + +@property (nonatomic,retain)NSDictionary *params; + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/WorkView.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/WorkView.m" new file mode 100644 index 0000000000000000000000000000000000000000..973dae7d7b74b7e2956b442328d14be1b07a315f --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/ProfileView/WorkView.m" @@ -0,0 +1,76 @@ +// +// WorkView.m +// JQQY +// +// Created by Shmily on 2018/1/4. +// Copyright © 2018年 jiuqi. All rights reserved. +// + +#import "WorkView.h" +#import "QYTagView.h" +#import "MyCardModel.h" +#import "QYPickerView.h" + +@interface WorkView () +@property (nonatomic,retain)QYTagView *workTagView; + +@end + +@implementation WorkView + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + self.backgroundColor = [UIColor whiteColor]; + [self addSubview:self.workSectionView]; + [self addSubview:self.workTagView]; + } + return self; +} + +- (SectionView *)workSectionView +{ + if (!_workSectionView) { + _workSectionView = [[SectionView alloc]initWithFrame:CGRectMake(0, 0, self.width, 30)]; + _workSectionView.nameLB.text = @"最近工作"; + } + return _workSectionView; +} + +-(QYTagView *)workTagView{ + if (!_workTagView) { + _workTagView = [[QYTagView alloc]initWithFrame:CGRectMake(0,_workSectionView.bottom, self.width, 0)]; + _workTagView.color = PURPLECOLOUR; + } + return _workTagView; +} +- (void)setParams:(NSDictionary *)params +{ + NSArray *arr = @[@"职业",@"年薪",@"公司"]; + NSMutableArray *m_arr = [[NSMutableArray alloc]init]; + for (int i=0; i +{ + CGFloat _scale; +} +@property (nonatomic,retain)UIScrollView *mScrollView; +@property (nonatomic, strong) UIImageView *backGroundIV; +@property (nonatomic,retain)UIView *bgView; + +@property (nonatomic,retain)ProfileHeaderView *profileView; +@property (nonatomic,retain)TopBtnView *topBtnView; +@property (nonatomic,retain)SpouseView *requestView; +@property (nonatomic,retain)PersonView *personView; +@property (nonatomic,retain)JQwaveView *perWaveView; + +@property (nonatomic, strong) CustomNavigationView *NavBarView; + + +@end + +@implementation ProfileViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.isHidenNaviBar = YES; + [self.view addSubview:self.backGroundIV]; + [self.view addSubview:self.bgView]; + [self.view addSubview:self.mScrollView]; + [self.mScrollView addSubview:self.profileView]; + [self.mScrollView addSubview:self.topBtnView]; + self.view.backgroundColor = UIColorFromRGB(0xf3f3f3); + [self loadDataSource]; + [self loadMyPhotos]; + [self.view addSubview:self.NavBarView]; +} + +- (UIScrollView *)mScrollView +{ + if (!_mScrollView) { + _mScrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH, KSCREEN_HEIGHT)]; + _mScrollView.delegate = self; + _mScrollView.showsVerticalScrollIndicator = NO; + _mScrollView.alwaysBounceVertical = YES; + UIView *maskView = [[UIView alloc]initWithFrame:CGRectMake(0,230, KSCREEN_WIDTH, 10000)]; + maskView.backgroundColor = UIColorFromRGB(0xf7f7f7); + [_mScrollView addSubview:maskView]; + } + return _mScrollView; +} + +- (CustomNavigationView *)NavBarView +{ + if (!_NavBarView) { + _NavBarView = [[CustomNavigationView alloc]initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH, 64)]; + [_NavBarView setNewAction:NO]; + [_NavBarView.rightBtn addTarget:self action:@selector(goCard) forControlEvents:UIControlEventTouchUpInside]; + } + return _NavBarView; +} + +- (void)goCard +{ + CardViewController *cardVC = [[CardViewController alloc]init]; + [self.navigationController pushViewController:cardVC animated:YES]; +} + + + +- (void)scrollViewDidScroll:(UIScrollView *)scrollView { + if (scrollView.contentOffset.y < 0) { + // 高度宽度同时拉伸 从中心放大 + CGFloat imgH = _profileView.height - scrollView.contentOffset.y*2; + CGFloat imgW = imgH * _scale; + self.backGroundIV.frame = CGRectMake(scrollView.contentOffset.y * _scale,0, imgW,imgH); + } else { + // 只拉伸高度 + self.backGroundIV.frame = CGRectMake(0, 0, KSCREEN_WIDTH,_profileView.height - scrollView.contentOffset.y); + } + self.bgView.frame = self.backGroundIV.frame; +} +- (UIImageView *)backGroundIV +{ + if (!_backGroundIV) { + _backGroundIV = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH,230)]; + [_backGroundIV setContentScaleFactor:[[UIScreen mainScreen] scale]]; + _backGroundIV.contentMode = UIViewContentModeScaleAspectFill; + _backGroundIV.clipsToBounds = YES; + + } + return _backGroundIV; +} + +- (UIView *)bgView +{ + if (!_bgView) { + _bgView = [[UIView alloc]initWithFrame:_backGroundIV.bounds]; + _bgView.backgroundColor = UIColorFromRGBWithAlpha(0x763cd3, 0.4); + } + return _bgView; +} + +#pragma mark - **************** 头部 + +- (ProfileHeaderView *)profileView +{ + if (!_profileView) { + _profileView = [[ProfileHeaderView alloc]initWithFrame:CGRectMake(0, 0,KSCREEN_WIDTH, 230) toWho:1]; + _scale = _profileView.width/_profileView.height; + } + return _profileView; +} + +- (TopBtnView *)topBtnView +{ + if (!_topBtnView) { + _topBtnView = [[TopBtnView alloc]initWithFrame:CGRectMake(0, _profileView.bottom, KSCREEN_WIDTH,45) showType:@[@"个人资料",@"择偶条件"]]; + _topBtnView.delegate = self; + } + return _topBtnView; +} + +#pragma mark - **************** 择偶要求 +- (SpouseView *)requestView +{ + if (!_requestView) { + _requestView = [[SpouseView alloc]initWithFrame:CGRectMake(7, _topBtnView.bottom+7, KSCREEN_WIDTH-14,7*45+30)]; + _requestView.backgroundColor = [UIColor whiteColor]; + _requestView.hidden = YES; + _requestView.delegate = self; + [_mScrollView addSubview:_requestView]; + } + return _requestView; +} +#pragma mark - **************** 个人信息 +- (PersonView *)personView +{ + if (!_personView) { + _personView = [[PersonView alloc]initWithFrame:CGRectMake(0, _topBtnView.bottom+7, KSCREEN_WIDTH, 1000)]; + _personView.delegate =self; + __weak typeof(self) weakSelf = self; + + [_personView setPersonOpenOrClose:^{ + [weakSelf.mScrollView setContentSize:CGSizeMake(KSCREEN_WIDTH,weakSelf.personView.bottom)]; + }]; + [_mScrollView addSubview:_personView]; + } + return _personView; +} +#pragma mark - **************** 水波纹 +- (JQwaveView *)perWaveView{ + if (!_perWaveView) { + _perWaveView =[[JQwaveView alloc] initWithFrame:CGRectMake(KSCREEN_WIDTH-80,KSCREEN_HEIGHT-80, 60, 60)]; + _perWaveView.firstWaveColor = UIColorFromRGBWithAlpha(0xfe4e77, 0.8); + _perWaveView.secondWaveColor = UIColorFromRGBWithAlpha(0xfe4e77, 0.3); + _perWaveView.speed=0.5; + _perWaveView.waveHeight = 4; + [self.view addSubview:_perWaveView]; + } + return _perWaveView; +} + +- (void)personInfnoEdit:(NSDictionary *)req actionType:(NSInteger)type +{ + NSLog(@"%ld",(long)type); + if (type ==1) {//相册 + MyPhotoAlbumViewController *myphoto = [[MyPhotoAlbumViewController alloc]init]; + myphoto.delegate =self; + [self.navigationController pushViewController:myphoto animated:YES]; + return; + } + __weak typeof(self) weakSelf = self; + if (type ==2){//交友 + IntroduceViewController *introduceVC = [[IntroduceViewController alloc] init]; + introduceVC.type = 1; + introduceVC.titleName = @"交友宣言"; + introduceVC.introductionsStr = req[@"declaration"]; + [self.navigationController pushViewController:introduceVC animated:YES]; + [introduceVC setReloadIntroduce:^(NSString *introduce) { + [weakSelf loadDataSource]; + }]; + return; + } + + + if (type ==6 || type ==7) { + HobbyAndMarkViewController *HobbyVC = [[HobbyAndMarkViewController alloc]init]; + if (type==6) { + HobbyVC.ComeType =1; + }else{ + HobbyVC.ComeType =2; + HobbyVC.titleText = @"我的标签"; + } + [self.navigationController pushViewController:HobbyVC animated:YES]; + [HobbyVC setInitHobbyAndTag:^(NSMutableArray *hobbyAndTagArray, NSInteger blockType) { + [weakSelf loadDataSource]; + }]; + return; +} + + + EditProfileViewController *editVC = [[EditProfileViewController alloc]init]; + editVC.extDict = req; + if (type ==3){ + editVC.showType = 2; + }else if (type ==4){//教育 + editVC.showType = 3; + }else if (type ==5){//工作 + editVC.showType = 4; + } + [editVC setReloadPersonData:^{ + [weakSelf loadDataSource]; + }]; + [self.navigationController pushViewController:editVC animated:YES]; + + + +} + +#pragma mark - **************** btnClicked +- (void)reloadMyPhotos +{ + [self loadMyPhotos]; +} + +- (void)requestInfnoEdit:(NSDictionary *)req +{ + EditProfileViewController *editVC = [[EditProfileViewController alloc]init]; + editVC.showType = 1; + editVC.extDict = req; + __weak typeof(self) weakSelf = self; + [editVC setReloadPersonData:^{ + [weakSelf loadDataSource]; + }]; + [self.navigationController pushViewController:editVC animated:YES]; + +} + + +- (void)topBtnSelect:(NSString *)name +{ + if ([name isEqualToString:@"个人资料"]) { + [self.personView bringSubviewToFront:self.view]; + _requestView.hidden = YES; + _personView.hidden = NO; + }else if ([name isEqualToString:@"择偶条件"]){ + [self.requestView bringSubviewToFront:self.view]; + _requestView.hidden = NO;; + _personView.hidden = YES; + } + [self setScrollViewContenSize]; +} + +#pragma mark - **************** 数据请求-------- + + +- (void)loadDataSource{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:NetworkFailure toView:self.view]; + return; + } + NSDictionary *parameters = @{@"userid":USER_USERID, + @"version":APP_VERSION}; + [MBProgressHUD showMessag:nil toView:self.view]; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_user_myprofilenew block:^(NSDictionary *resultDic, NSError *error) { + if(resultDic){ + [MBProgressHUD hideHUDForView:self.view animated:YES]; + if([resultDic[@"retcode"] intValue] == 1){ + [self getHeadData:resultDic[@"information"]];// 头部数据 + [self getRequestData:resultDic[@"information"]]; + [self getPersonData:resultDic[@"information"]]; + [self setScrollViewContenSize]; + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; +} + +- (void)loadMyPhotos +{ + NSDictionary *parameters = @{@"userID":USER_USERID, + @"version":APP_VERSION, + @"action":@"1"}; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_user_myphoto block:^(NSDictionary *resultDic, NSError *error) { + if(resultDic){ + if([resultDic[@"retcode"] intValue] == 1){ + self.personView.photo =resultDic[@"message"]; + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; +} + + +#pragma mark - **************** 头部数据 +- (void)getHeadData:(NSDictionary *)dict +{ + [self.profileView.headView sd_setImageWithURL:[NSURL URLWithString:dict[@"avatar"]] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { + if (image) { + [_backGroundIV setImageToBlur:image blurRadius:10 completionBlock:nil]; + } + }]; + self.profileView.headInfno = dict; +} + +#pragma mark - **************** 择偶要求 +- (void)getRequestData:(NSDictionary *)dict +{ + self.requestView.requestDict = dict; + +} + +#pragma mark - **************** 个人信息 +- (void)getPersonData:(NSDictionary *)dict +{ + self.personView.personDict = dict; + self.perWaveView.progress= [dict[@"completeness"] floatValue]/100; +} + + +- (void)setScrollViewContenSize +{ + if (self.personView.hidden) { + [_mScrollView setContentSize:CGSizeMake(KSCREEN_WIDTH,_requestView.bottom+10)]; + }else{ + [_mScrollView setContentSize:CGSizeMake(KSCREEN_WIDTH,_personView.bottom)]; + + } + +} + + + + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/UIButtonListView.h" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/UIButtonListView.h" new file mode 100644 index 0000000000000000000000000000000000000000..f04afb70a81099f33e5fb21a22b52b8286fb9508 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/UIButtonListView.h" @@ -0,0 +1,23 @@ +// +// UIButtonListView.h +// JQ_ELOVE +// +// Created by Shmily on 16/7/4. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import + + + +@interface UIButtonListView : UIView + + +- (void)setButtonList:(NSArray *)listArray; +- (void)setDeleteButtonlist:(NSArray *)listArray; +- (void)setPersonDetaillist:(NSArray *)listArray; + +@property (nonatomic, strong) void(^listClicekd)(NSString *name,NSInteger begin); +@property NSInteger type ; + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/UIButtonListView.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/UIButtonListView.m" new file mode 100644 index 0000000000000000000000000000000000000000..14aecac98d7e4dad232b908f47e45ac88e583991 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/UIButtonListView.m" @@ -0,0 +1,235 @@ +// +// UIButtonListView.m +// JQ_ELOVE +// +// Created by Shmily on 16/7/4. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "UIButtonListView.h" +#import "delteButton.h" + +#define x_blank 10 +#define y_blank 10 + + +@interface UIButtonListView () +{ + int mFont; + int h_blank; + int all_width; + +} + +@end + +@implementation UIButtonListView + + + + + + + +- (void)setButtonList:(NSArray *)listArray +{ + if (_type ==1) {//我的爱好 + mFont = 14; + h_blank = 36; + all_width = 20; + }else{ //我的标签 + mFont = 14; + h_blank = 36; + all_width = 20; + } + + for (UIButton *subview in [self subviews]) { + [subview removeFromSuperview]; + } + + + CGFloat height = 0; + CGFloat from_X = x_blank; + CGFloat totalHeight = 0.0; + + //创建button + for (int i = 0; i < listArray.count; i++) { + if(i == 0 && [listArray[i] isEqualToString:@"+"]){ + totalHeight = 50; + continue; + }else{ + delteButton *button = [delteButton buttonWithType:UIButtonTypeCustom]; + CGFloat button_W = [listArray[i] calculateSize:CGSizeMake(self.width-2*x_blank,9999) font:mFont].width+ all_width; + if ((from_X +button_W) > (self.width-2*x_blank)) { + height++; + from_X =x_blank; + } + button.frame = CGRectMake(from_X,(y_blank+h_blank)*height,button_W,h_blank); + from_X += button_W+10; + button.type = 1; + totalHeight = button.bottom; + button.titleLabel.font = [UIFont systemFontOfSize:mFont]; + [button setTitleColor:[ZCTools randomColour] forState:UIControlStateNormal]; + [button setTitle:listArray[i] forState:UIControlStateNormal]; + [button addTarget:self action:@selector(handleButton:) forControlEvents:UIControlEventTouchUpInside]; + button.nameStr = listArray[i]; + [button setImageRoundRadius:8 BorderWidth:.6 borderColor:UIColorFromRGB(0xe0e0e0)]; + [self addSubview:button]; + } + } + self.height = totalHeight; +} + + + + + + + +- (void)setPersonDetaillist:(NSArray *)listArray +{ + mFont = 12; + h_blank = 20; + all_width = 19; + for (UIButton *subview in [self subviews]) { + [subview removeFromSuperview]; + } + + + CGFloat height = 0; + CGFloat from_X = x_blank; + CGFloat totalHeight = 0.0; + + //创建button + for (int i = 0; i < listArray.count; i++) { + if(i == 0 && [listArray[i] isEqualToString:@"+"]){ + totalHeight = 50; + continue; + }else{ + + delteButton *button = [delteButton buttonWithType:UIButtonTypeCustom]; + CGFloat button_W = [listArray[i] calculateSize:CGSizeMake(self.width-2*x_blank,9999) font:mFont].width+ all_width; + if ((from_X +button_W) > (self.width-2*x_blank)) { + height++; + from_X =x_blank; + } + button.frame = CGRectMake(from_X,(y_blank+h_blank)*height,button_W,h_blank); + from_X += button_W+10; + button.type = 1; + totalHeight = button.bottom; + button.titleLabel.font = [UIFont systemFontOfSize:mFont]; + [button setTitleColor:[ZCTools randomColour] forState:UIControlStateNormal]; + [button setTitle:listArray[i] forState:UIControlStateNormal]; + [button addTarget:self action:@selector(handleButton:) forControlEvents:UIControlEventTouchUpInside]; + button.nameStr = listArray[i]; + [button setImageRoundRadius:8 BorderWidth:.6 borderColor:UIColorFromRGB(0xe0e0e0)]; + [self addSubview:button]; + } + } + self.height = totalHeight; +} + +- (void)setDeleteButtonlist:(NSArray *)listArray +{ + + if (_type ==1) {//我的爱好 + mFont = 14; + h_blank = 36; + all_width = 32; + }else{ //我的标签 + mFont = 14; + h_blank = 36; + all_width = 32; + } + + for (UIButton *subview in [self subviews]) { + [subview removeFromSuperview]; + } + + + CGFloat height = 0; + CGFloat from_X = x_blank; + CGFloat totalHeight = 0.0; + + + if (_type ==3) { + for (int i = 0; i < listArray.count; i++) { + delteButton *button = [delteButton buttonWithType:UIButtonTypeCustom]; + CGFloat button_W = [listArray[i] calculateSize:CGSizeMake(self.width-2*x_blank,9999) font:mFont].width+ all_width; + if ((from_X +button_W) > (self.width-2*x_blank)) { + height++; + from_X =x_blank; + } + button.frame = CGRectMake(from_X,(y_blank+h_blank)*height,button_W,h_blank); + if (i==0) { + button.type = 2; + [button setBackgroundImage:[UIImage imageNamed:@"addMark"] forState:0]; + [button addTarget:self action:@selector(handleButton:) forControlEvents:UIControlEventTouchUpInside]; + }else{ + button.titleLabel.font = [UIFont systemFontOfSize:mFont]; + [button setTitleColor:[ZCTools randomColour] forState:UIControlStateNormal]; +// button.backgroundColor = [JQTool randomColour]; + [button setTitle:listArray[i] forState:UIControlStateNormal]; + button.nameStr = listArray[i]; + [button setImageRoundRadius:8 BorderWidth:0 borderColor:nil]; + } + from_X += button_W+10; + totalHeight = button.bottom; + [self addSubview:button]; + } + self.height = totalHeight; + return; + } + + for (int i = 0; i < listArray.count; i++) { + delteButton *button = [[delteButton alloc]init]; + CGFloat button_W = [listArray[i] calculateSize:CGSizeMake(self.width-2*x_blank,9999) font:mFont].width+ all_width; + if ((from_X +button_W) > (self.width-2*x_blank)) { + height++; + from_X =x_blank; + } + button.frame = CGRectMake(from_X,(y_blank+h_blank)*height,button_W,h_blank); + from_X += button_W+10; + totalHeight = button.bottom; + button.linelb_LB.text = listArray[i]; + button.linelb_LB.font = [UIFont systemFontOfSize:mFont]; + button.nameStr = listArray[i]; + button.linelb_LB.frame = CGRectMake(8,0,button_W-all_width, h_blank); + button.image_iv.frame = CGRectMake(button.linelb_LB.right+8,14, 8, 8); + if (_type ==1) {// 我的爱好 + button.type = 3; + button.linelb_LB.frame = CGRectMake(8,0,button_W-all_width, h_blank); + button.image_iv.hidden = NO; + button.linelb_LB.hidden =NO; + button.backgroundColor = CTHEMECOLOR; + }else{ + if (i==0) { + button.type = 2; + [button setBackgroundImage:[UIImage imageNamed:@"addMark"] forState:0]; + button.image_iv.hidden = YES; + button.linelb_LB.hidden = YES; + }else{ + button.type = 3; + button.image_iv.hidden = NO; + button.linelb_LB.hidden =NO; + button.backgroundColor = CTHEMECOLOR; + } + } + [button addTarget:self action:@selector(handleButton:) forControlEvents:UIControlEventTouchUpInside]; + [button setImageRoundRadius:8 BorderWidth:0 borderColor:nil]; + [self addSubview:button]; + } + self.height = totalHeight; + +} + +- (void)handleButton:(delteButton *)b +{ + if (self.listClicekd) { + self.listClicekd(b.nameStr,b.type); + } + +} + + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/UploadAvatarView.h" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/UploadAvatarView.h" new file mode 100644 index 0000000000000000000000000000000000000000..d6d19eede36f2be92fb0ef9d2e54672e3fc037f9 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/UploadAvatarView.h" @@ -0,0 +1,22 @@ +// +// UploadAvatarView.h +// JQ_ELOVE +// +// Created by chason on 2017/2/27. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import + + + +@interface UploadAvatarView : UIView + +@property(nonatomic,copy) void(^SheetBlock)(NSInteger tag); + + + +-(void)show; + + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/UploadAvatarView.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/UploadAvatarView.m" new file mode 100644 index 0000000000000000000000000000000000000000..20dc4381afa9bbbc8892c712aa9f8478b0d8c71f --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/UploadAvatarView.m" @@ -0,0 +1,219 @@ +// +// UploadAvatarView.m +// JQ_ELOVE +// +// Created by chason on 2017/2/27. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import "UploadAvatarView.h" + +@interface UploadAvatarView () + +@property (nonatomic, strong) UIView *bgView; + +@property (nonatomic, strong) UILabel *titleLab; +@property (nonatomic, strong) UILabel *tipsLab; +@property (nonatomic, strong) UIScrollView *illeagelView; +@property (nonatomic, strong) UIButton *takePictureBtn; //拍照 +@property (nonatomic, strong) UIButton *photoAlbumBtn; //本地相册 +@property (nonatomic, strong) UIButton *cancelBtn; //取消 + +@property (nonatomic, strong) UILabel *line1; +@property (nonatomic, strong) UILabel *line2; +@property (nonatomic, strong) UILabel *line3; + +@end + + + + +@implementation UploadAvatarView +{ + NSArray *textArray; +} +- (id)initWithFrame:(CGRect)frame{ + self = [super initWithFrame:frame]; + if (self) { + + [self addSubview:self.bgView]; + self.backgroundColor = UIColorFromRGBWithAlpha(0x000000, 0.6); + textArray = @[@"非人物照",@"五官遮挡",@"模糊不清",@"衣着不当",@"倾斜颠倒",@"非头部照"]; + [self.bgView addSubview:self.titleLab]; + [self.bgView addSubview:self.tipsLab]; + [self.bgView addSubview:self.illeagelView]; + [self.bgView addSubview:self.line1]; + [self.bgView addSubview:self.takePictureBtn]; + [self.bgView addSubview:self.line2]; + [self.bgView addSubview:self.photoAlbumBtn]; + [self.bgView addSubview:self.line3]; + [self.bgView addSubview:self.cancelBtn]; + [self addIlleagelAvatarView]; + } + return self; +} + + +- (UIView *)bgView +{ + if (!_bgView) { + _bgView = [[UIView alloc]init]; + if (iPhone5) { + _bgView.frame = CGRectMake(0, KSCREEN_HEIGHT, KSCREEN_WIDTH, 95+44*3+57); + }else{ + _bgView.frame =CGRectMake(0, KSCREEN_HEIGHT, KSCREEN_WIDTH, 95+44*3+(KSCREEN_WIDTH-35)/6); + } + _bgView.backgroundColor = [UIColor whiteColor]; + } + return _bgView; +} + + + + +- (UILabel *)titleLab{ + if (!_titleLab) { + _titleLab = [[UILabel alloc] initWithFrame:CGRectMake(0, 20, KSCREEN_WIDTH, 20)]; + _titleLab.textAlignment = NSTextAlignmentCenter; + _titleLab.font = [UIFont systemFontOfSize:15]; + _titleLab.textColor = UIColorFromRGB(0x595959); + _titleLab.text = @"上传头像"; + } + return _titleLab; +} + +- (UILabel *)tipsLab{ + if (!_tipsLab) { + _tipsLab = [[UILabel alloc] initWithFrame:CGRectMake(0, _titleLab.bottom+10, KSCREEN_WIDTH, 20)]; + _tipsLab.textAlignment = NSTextAlignmentCenter; + _tipsLab.font = [UIFont systemFontOfSize:12]; + _tipsLab.textColor = UIColorFromRGB(0x595959); + _tipsLab.text = @"(以下照片不会通过审核哦)"; + } + return _tipsLab; +} + +- (UIScrollView *)illeagelView{ + if (!_illeagelView) { + if (iPhone5) { + _illeagelView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, _tipsLab.bottom+10, KSCREEN_WIDTH, 57)]; + [_illeagelView setContentSize:CGSizeMake(57*6+35, 57)]; + }else{ + _illeagelView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, _tipsLab.bottom+10, KSCREEN_WIDTH, (KSCREEN_WIDTH-35)/6)]; + [_illeagelView setContentSize:CGSizeMake(KSCREEN_WIDTH, (KSCREEN_WIDTH-35)/6)]; + } + _illeagelView.showsHorizontalScrollIndicator = NO; + _illeagelView.showsVerticalScrollIndicator = NO; + } + return _illeagelView; +} + +- (UILabel *)line1{ + if (!_line1) { + _line1 = [[UILabel alloc] initWithFrame:CGRectMake(0, _illeagelView.bottom+10, KSCREEN_WIDTH, 0.5)]; + _line1.backgroundColor = LINECOLOUR; + } + return _line1; +} + +- (void)show { + self.frame=[UIScreen mainScreen].bounds; + [[UIApplication sharedApplication].keyWindow addSubview:self]; + [UIView animateWithDuration:0.3 animations:^{ + self.bgView.frame= CGRectMake(0,KSCREEN_HEIGHT-_bgView.height, KSCREEN_WIDTH, _bgView.height); + }]; +} +- (void)dismis { + [UIView animateWithDuration:0.3 animations:^{ + self.bgView.frame= CGRectMake(0,KSCREEN_HEIGHT,KSCREEN_WIDTH, _bgView.height); + } completion:^(BOOL finished) { + if (finished) { + [self removeFromSuperview]; + } + }]; +} + + + +- (UIButton *)takePictureBtn{ + if (!_takePictureBtn) { + _takePictureBtn = [[UIButton alloc] initWithFrame:CGRectMake(0, _line1.bottom, KSCREEN_WIDTH, 44)]; + [_takePictureBtn setTitle:@"拍照" forState:UIControlStateNormal]; + [_takePictureBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; + _takePictureBtn.tag = 1; + [_takePictureBtn addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside]; + + } + return _takePictureBtn; +} + +- (UILabel *)line2{ + if (!_line2) { + _line2 = [[UILabel alloc] initWithFrame:CGRectMake(0, _takePictureBtn.bottom, KSCREEN_WIDTH, 0.5)]; + _line2.backgroundColor = LINECOLOUR; + } + return _line2; +} + +- (UIButton *)photoAlbumBtn{ + if (!_photoAlbumBtn) { + _photoAlbumBtn = [[UIButton alloc] initWithFrame:CGRectMake(0, _line2.bottom, KSCREEN_WIDTH, 44)]; + [_photoAlbumBtn setTitle:@"本地相册" forState:UIControlStateNormal]; + [_photoAlbumBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; + _photoAlbumBtn.tag = 2; + [_photoAlbumBtn addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside]; + + } + return _photoAlbumBtn; +} + +- (UILabel *)line3{ + if (!_line3) { + _line3 = [[UILabel alloc] initWithFrame:CGRectMake(0, _photoAlbumBtn.bottom, KSCREEN_WIDTH, 4)]; + _line3.backgroundColor = UIColorFromRGB(0xf3f3f3); + } + return _line3; +} + + +- (UIButton *)cancelBtn{ + if (!_cancelBtn) { + _cancelBtn = [[UIButton alloc] initWithFrame:CGRectMake(0, _line3.bottom, KSCREEN_WIDTH, 44)]; + [_cancelBtn setTitle:@"取消" forState:UIControlStateNormal]; + [_cancelBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; + [_cancelBtn addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside]; + } + return _cancelBtn; +} + +- (void)btnClicked:(UIButton *)b +{ + [self dismis]; + if (self.SheetBlock) { + self.SheetBlock(b.tag); + } +} + + +- (void)addIlleagelAvatarView{ + for (int i=0; i<6; i++) { + UIImageView *illeagelAvatarView; + if (iPhone5) { + illeagelAvatarView = [[UIImageView alloc] initWithFrame:CGRectMake(5+(5+57)*i, 0, 57, 57)]; + }else{ + illeagelAvatarView = [[UIImageView alloc] initWithFrame:CGRectMake(5+(5+(KSCREEN_WIDTH-35)/6)*i, 0, (KSCREEN_WIDTH-35)/6, (KSCREEN_WIDTH-35)/6)]; + } + illeagelAvatarView.image = [UIImage imageNamed:[NSString stringWithFormat:@"Bitmap%d",i+1]]; + UILabel *textLab = [[UILabel alloc] initWithFrame:CGRectMake(0, illeagelAvatarView.height-(illeagelAvatarView.height/3), illeagelAvatarView.width, illeagelAvatarView.height/3)]; + textLab.backgroundColor = UIColorFromRGBWithAlpha(0x000000, 0.5); + textLab.font = [UIFont systemFontOfSize:12]; + textLab.adjustsFontSizeToFitWidth = YES; + textLab.textColor = [UIColor whiteColor]; + textLab.textAlignment = NSTextAlignmentCenter; + textLab.text = textArray[i]; + [illeagelAvatarView addSubview:textLab]; + [self.illeagelView addSubview:illeagelAvatarView]; + } +} + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/UserBarView.h" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/UserBarView.h" new file mode 100644 index 0000000000000000000000000000000000000000..da1606303dfd18d3a5e56eab4e7c5425e9e3ae5d --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/UserBarView.h" @@ -0,0 +1,16 @@ +// +// UserBarView.h +// JQ_ELOVE +// +// Created by Shmily on 16/7/27. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import + +@interface UserBarView : UIView + +@property (nonatomic, strong) UIButton *backBtn; +@property (nonatomic, strong) UILabel *nameLB; +@property (nonatomic, strong) UIButton *shareBtn; +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/UserBarView.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/UserBarView.m" new file mode 100644 index 0000000000000000000000000000000000000000..b55b86b7fcf4bbd1f4d5fc42d1611a67ed4491f7 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/UserBarView.m" @@ -0,0 +1,71 @@ +// +// UserBarView.m +// JQ_ELOVE +// +// Created by Shmily on 16/7/27. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "UserBarView.h" + + +@implementation UserBarView + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + [self addSubview:self.backBtn]; + [self addSubview:self.nameLB]; + [self addSubview:self.shareBtn]; + } + return self; +} + +-(UIButton *)backBtn +{ + if (!_backBtn){ + _backBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _backBtn.frame = CGRectMake(10, 0, 40, 40); + [_backBtn setImage:[UIImage imageNamed:@"back_icon"] forState:UIControlStateNormal]; + _backBtn.backgroundColor = UIColorFromRGBWithAlpha(0x000000, 0.2); + [_backBtn setImageRoundRadius:20 BorderWidth:0 borderColor:NULL]; + _backBtn.adjustsImageWhenHighlighted = NO; + } + return _backBtn; +} + +-(UILabel *)nameLB +{ + if (!_nameLB){ + _nameLB = [[UILabel alloc] initWithFrame:CGRectMake(30, 0, KSCREEN_WIDTH-60, 44)]; + _nameLB.backgroundColor = [UIColor clearColor]; + _nameLB.textAlignment = NSTextAlignmentCenter; + _nameLB.font = [UIFont systemFontOfSize:18.0]; + _nameLB.textColor = UIColorFromRGB(0xffffff); + } + return _nameLB; +} + +//分享按钮 +- (UIButton *)shareBtn{ + if(!_shareBtn){ + _shareBtn = [[UIButton alloc]initWithFrame:CGRectMake(KSCREEN_WIDTH-50, 0, 40, 40)]; + [_shareBtn setImage:[UIImage imageNamed:@"xuanxiang"] forState:UIControlStateNormal]; + _shareBtn.hidden = YES; + _shareBtn.backgroundColor = UIColorFromRGBWithAlpha(0x000000, 0.2); + [_shareBtn setImageRoundRadius:20 BorderWidth:0 borderColor:NULL]; + } + return _shareBtn; +} + + +/* +// 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/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/VideoViewController.h" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/VideoViewController.h" new file mode 100644 index 0000000000000000000000000000000000000000..1f8c5b767cb8e794858e6726b8b6697c8d2f0d02 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/VideoViewController.h" @@ -0,0 +1,15 @@ +// +// VideoViewController.h +// JQ_ELOVE +// +// Created by chason on 16/9/1. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "RootViewController.h" + +@interface VideoViewController : RootViewController + +@property (nonatomic,retain)RootViewController *vc; + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/VideoViewController.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/VideoViewController.m" new file mode 100644 index 0000000000000000000000000000000000000000..5afa980d811d707b4eeb97e1b3cf5cf68727482c --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/VideoViewController.m" @@ -0,0 +1,145 @@ +// +// VideoViewController.m +// JQ_ELOVE +// +// Created by chason on 16/9/1. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "VideoViewController.h" +#import "PlayViewController.h" +#import +#import +@interface VideoViewController () +@property (nonatomic, strong) UIView *showView; + +@property (nonatomic, strong) UIView *whiteView; +@property (nonatomic, strong) UIButton *clickRecBtn; +@property (nonatomic, strong) UILabel *tipLab; +@end + +@implementation VideoViewController + + +- (void)viewDidAppear:(BOOL)animated +{ + [super viewDidAppear:animated]; +} + +- (void)viewWillDisappear:(BOOL)animated +{ + [super viewWillDisappear:animated]; + +} + + +- (void)viewDidLoad { + [super viewDidLoad]; + self.title = @"视频认证"; + + self.view.backgroundColor = UIColorFromRGB(0xf3f3f3); + [self.view addSubview:self.whiteView]; + [self.view addSubview:self.clickRecBtn]; + [self.view addSubview:self.tipLab]; + +} + +- (void)showMessage:(NSString *)message +{ + UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"提示" message:message delegate:self cancelButtonTitle:@"好" otherButtonTitles:nil, nil]; + alertView.tag = 10010; + [alertView show]; + +} + + + + +- (UIView *)whiteView{ + if(!_whiteView){ + _whiteView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH, KSCREEN_WIDTH)]; + _whiteView.backgroundColor = [UIColor whiteColor]; + } + return _whiteView; +} + +- (UIButton *)clickRecBtn{ + if(!_clickRecBtn){ + _clickRecBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _clickRecBtn.frame = CGRectMake((KSCREEN_WIDTH-150)/2, (KSCREEN_WIDTH-150)/2, 150, 150); + [_clickRecBtn setImage:[UIImage imageNamed:@"luzhi"] forState:UIControlStateNormal]; + [_clickRecBtn setImage:[UIImage imageNamed:@"luzhi"] forState:UIControlStateHighlighted]; + [_clickRecBtn addTarget:self action:@selector(recordFullScreen) forControlEvents:UIControlEventTouchUpInside]; + } + return _clickRecBtn; +} + +- (UILabel *)tipLab{ + if(!_tipLab){ + _tipLab = [[UILabel alloc]initWithFrame:CGRectMake(50, _whiteView.bottom+10, KSCREEN_WIDTH-100, 100)]; + _tipLab.numberOfLines = 0; + _tipLab.font = [UIFont systemFontOfSize:13]; + _tipLab.textAlignment = NSTextAlignmentCenter; + _tipLab.textColor = UIColorFromRGB(0x999999); + _tipLab.text = @"为打造真实可靠、值得信赖的婚恋交友平台。我们通过拍摄一段您本人的真实视频提升您的人气,让更多的TA关注您。"; + } + return _tipLab; +} + +- (UIView *)showView +{ + if (!_showView) { + _showView = [[UIView alloc]initWithFrame:CGRectMake(2, 30, KSCREEN_WIDTH-4, KSCREEN_WIDTH-4)]; + _showView.backgroundColor = UIColorFromRGB(0xffffff); + } + return _showView; +} + +- (void)recordFullScreen +{ + [ZCTools AliyunVideoSelf:self]; + [AliyunVideoBase shared].delegate = self; +} + +-(void)videoBaseRecordVideoExit { + if ([self respondsToSelector:@selector(dismissViewControllerAnimated:completion:)]) { + [self dismissViewControllerAnimated:YES completion:NULL]; + } else if ([self.navigationController respondsToSelector:@selector(popViewControllerAnimated:)]) { + [self.navigationController popViewControllerAnimated:YES]; + } +} + +- (void)videoBase:(AliyunVideoBase *)base recordCompeleteWithRecordViewController:(UIViewController *)recordVC videoPath:(NSString *)videoPath { + NSLog(@"录制完成 %@", videoPath); + if (STR_IS_NOT_EMPTY(videoPath)) { + [MBProgressHUD showMessag:nil toView:self.view]; + } + [self dismissViewControllerAnimated:NO completion:^{ + [MBProgressHUD hideHUDForView:self.view animated:YES]; + if(STR_IS_NOT_EMPTY(videoPath)){ + PlayViewController *playCon = [[PlayViewController alloc] init]; + playCon.videoFileURL = [NSURL fileURLWithPath:videoPath]; + playCon.vc =self; + playCon.fromType = 0; + [self.navigationController pushViewController:playCon animated:YES]; + } + }]; +} + + +- (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/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/delteButton.h" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/delteButton.h" new file mode 100644 index 0000000000000000000000000000000000000000..b294b76c7083a3027ef4fb7995c9cffa8416a4f4 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/delteButton.h" @@ -0,0 +1,19 @@ +// +// delteButton.h +// JQ_ELOVE +// +// Created by Shmily on 16/7/26. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import + +@interface delteButton : UIButton + +@property (nonatomic, strong) UILabel *linelb_LB; +@property (nonatomic, strong) UIImageView *image_iv; + +@property (nonatomic, strong) NSString *nameStr; +@property NSInteger type; //1 添加 2手写 3删除 + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/delteButton.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/delteButton.m" new file mode 100644 index 0000000000000000000000000000000000000000..560d2988814fbd5e13ea8536340546adb0ddba7f --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/delteButton.m" @@ -0,0 +1,50 @@ +// +// delteButton.m +// JQ_ELOVE +// +// Created by Shmily on 16/7/26. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "delteButton.h" + + +@implementation delteButton + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + [self addSubview:self.linelb_LB]; + [self addSubview:self.image_iv]; + } + return self; +} + +- (UILabel *)linelb_LB +{ + if (!_linelb_LB) { + _linelb_LB = [[UILabel alloc]init]; + _linelb_LB.textColor = UIColorFromRGB(0xffffff); + } + return _linelb_LB; +} + +- (UIImageView *)image_iv +{ + if (!_image_iv) { + _image_iv = [[UIImageView alloc]init]; + _image_iv.image = [UIImage imageNamed:@"delete_icon"]; + } + return _image_iv; +} + +/* +// 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/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/\346\257\233\347\216\273\347\222\203/.DS_Store" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/\346\257\233\347\216\273\347\222\203/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/\346\257\233\347\216\273\347\222\203/.DS_Store" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/\346\257\233\347\216\273\347\222\203/UIImage+ImageEffects.h" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/\346\257\233\347\216\273\347\222\203/UIImage+ImageEffects.h" new file mode 100755 index 0000000000000000000000000000000000000000..5e1b10850017ddb61bbc434d4121670d578cdf46 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/\346\257\233\347\216\273\347\222\203/UIImage+ImageEffects.h" @@ -0,0 +1,107 @@ +/* + File: UIImage+ImageEffects.h + Abstract: This is a category of UIImage that adds methods to apply blur and tint effects to an image. This is the code you’ll want to look out to find out how to use vImage to efficiently calculate a blur. + Version: 1.0 + + Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple + Inc. ("Apple") in consideration of your agreement to the following + terms, and your use, installation, modification or redistribution of + this Apple software constitutes acceptance of these terms. If you do + not agree with these terms, please do not use, install, modify or + redistribute this Apple software. + + In consideration of your agreement to abide by the following terms, and + subject to these terms, Apple grants you a personal, non-exclusive + license, under Apple's copyrights in this original Apple software (the + "Apple Software"), to use, reproduce, modify and redistribute the Apple + Software, with or without modifications, in source and/or binary forms; + provided that if you redistribute the Apple Software in its entirety and + without modifications, you must retain this notice and the following + text and disclaimers in all such redistributions of the Apple Software. + Neither the name, trademarks, service marks or logos of Apple Inc. may + be used to endorse or promote products derived from the Apple Software + without specific prior written permission from Apple. Except as + expressly stated in this notice, no other rights or licenses, express or + implied, are granted by Apple herein, including but not limited to any + patent rights that may be infringed by your derivative works or by other + works in which the Apple Software may be incorporated. + + The Apple Software is provided by Apple on an "AS IS" basis. APPLE + MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION + THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS + FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND + OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. + + IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL + OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, + MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED + AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), + STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + + Copyright (C) 2013 Apple Inc. All Rights Reserved. + + + Copyright © 2013 Apple Inc. All rights reserved. + WWDC 2013 License + + NOTE: This Apple Software was supplied by Apple as part of a WWDC 2013 + Session. Please refer to the applicable WWDC 2013 Session for further + information. + + IMPORTANT: This Apple software is supplied to you by Apple Inc. + ("Apple") in consideration of your agreement to the following terms, and + your use, installation, modification or redistribution of this Apple + software constitutes acceptance of these terms. If you do not agree with + these terms, please do not use, install, modify or redistribute this + Apple software. + + In consideration of your agreement to abide by the following terms, and + subject to these terms, Apple grants you a non-exclusive license, under + Apple's copyrights in this original Apple software (the "Apple + Software"), to use, reproduce, modify and redistribute the Apple + Software, with or without modifications, in source and/or binary forms; + provided that if you redistribute the Apple Software in its entirety and + without modifications, you must retain this notice and the following + text and disclaimers in all such redistributions of the Apple Software. + Neither the name, trademarks, service marks or logos of Apple Inc. may + be used to endorse or promote products derived from the Apple Software + without specific prior written permission from Apple. Except as + expressly stated in this notice, no other rights or licenses, express or + implied, are granted by Apple herein, including but not limited to any + patent rights that may be infringed by your derivative works or by other + works in which the Apple Software may be incorporated. + + The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES + NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE + IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND + OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. + + IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL + OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, + MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED + AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), + STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + + EA1002 + 5/3/2013 + */ + +#import + +@interface UIImage (ImageEffects) + +- (UIImage *)applyLightEffect; +- (UIImage *)applyExtraLightEffect; +- (UIImage *)applyDarkEffect; +- (UIImage *)applyTintEffectWithColor:(UIColor *)tintColor; + +- (UIImage *)applyBlurWithRadius:(CGFloat)blurRadius tintColor:(UIColor *)tintColor saturationDeltaFactor:(CGFloat)saturationDeltaFactor maskImage:(UIImage *)maskImage; + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/\346\257\233\347\216\273\347\222\203/UIImage+ImageEffects.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/\346\257\233\347\216\273\347\222\203/UIImage+ImageEffects.m" new file mode 100755 index 0000000000000000000000000000000000000000..e1d6acd2cf5f89dfd5df31f3ddf407fb89ad7fd4 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/\346\257\233\347\216\273\347\222\203/UIImage+ImageEffects.m" @@ -0,0 +1,278 @@ +/* + File: UIImage+ImageEffects.m + Abstract: This is a category of UIImage that adds methods to apply blur and tint effects to an image. This is the code you’ll want to look out to find out how to use vImage to efficiently calculate a blur. + Version: 1.0 + + Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple + Inc. ("Apple") in consideration of your agreement to the following + terms, and your use, installation, modification or redistribution of + this Apple software constitutes acceptance of these terms. If you do + not agree with these terms, please do not use, install, modify or + redistribute this Apple software. + + In consideration of your agreement to abide by the following terms, and + subject to these terms, Apple grants you a personal, non-exclusive + license, under Apple's copyrights in this original Apple software (the + "Apple Software"), to use, reproduce, modify and redistribute the Apple + Software, with or without modifications, in source and/or binary forms; + provided that if you redistribute the Apple Software in its entirety and + without modifications, you must retain this notice and the following + text and disclaimers in all such redistributions of the Apple Software. + Neither the name, trademarks, service marks or logos of Apple Inc. may + be used to endorse or promote products derived from the Apple Software + without specific prior written permission from Apple. Except as + expressly stated in this notice, no other rights or licenses, express or + implied, are granted by Apple herein, including but not limited to any + patent rights that may be infringed by your derivative works or by other + works in which the Apple Software may be incorporated. + + The Apple Software is provided by Apple on an "AS IS" basis. APPLE + MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION + THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS + FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND + OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. + + IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL + OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, + MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED + AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), + STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + + Copyright (C) 2013 Apple Inc. All Rights Reserved. + + + Copyright © 2013 Apple Inc. All rights reserved. + WWDC 2013 License + + NOTE: This Apple Software was supplied by Apple as part of a WWDC 2013 + Session. Please refer to the applicable WWDC 2013 Session for further + information. + + IMPORTANT: This Apple software is supplied to you by Apple Inc. + ("Apple") in consideration of your agreement to the following terms, and + your use, installation, modification or redistribution of this Apple + software constitutes acceptance of these terms. If you do not agree with + these terms, please do not use, install, modify or redistribute this + Apple software. + + In consideration of your agreement to abide by the following terms, and + subject to these terms, Apple grants you a non-exclusive license, under + Apple's copyrights in this original Apple software (the "Apple + Software"), to use, reproduce, modify and redistribute the Apple + Software, with or without modifications, in source and/or binary forms; + provided that if you redistribute the Apple Software in its entirety and + without modifications, you must retain this notice and the following + text and disclaimers in all such redistributions of the Apple Software. + Neither the name, trademarks, service marks or logos of Apple Inc. may + be used to endorse or promote products derived from the Apple Software + without specific prior written permission from Apple. Except as + expressly stated in this notice, no other rights or licenses, express or + implied, are granted by Apple herein, including but not limited to any + patent rights that may be infringed by your derivative works or by other + works in which the Apple Software may be incorporated. + + The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES + NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE + IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND + OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. + + IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL + OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, + MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED + AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), + STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + + EA1002 + 5/3/2013 + */ + +#import "UIImage+ImageEffects.h" + +#import +#import + + +@implementation UIImage (ImageEffects) + + +- (UIImage *)applyLightEffect +{ + UIColor *tintColor = [UIColor colorWithWhite:1.0 alpha:0.3]; + return [self applyBlurWithRadius:30 tintColor:tintColor saturationDeltaFactor:1.8 maskImage:nil]; +} + + +- (UIImage *)applyExtraLightEffect +{ + UIColor *tintColor = [UIColor colorWithWhite:0.97 alpha:0.82]; + return [self applyBlurWithRadius:20 tintColor:tintColor saturationDeltaFactor:1.8 maskImage:nil]; +} + + +- (UIImage *)applyDarkEffect +{ + UIColor *tintColor = [UIColor colorWithWhite:0.11 alpha:0.73]; + return [self applyBlurWithRadius:20 tintColor:tintColor saturationDeltaFactor:1.8 maskImage:nil]; +} + + +- (UIImage *)applyTintEffectWithColor:(UIColor *)tintColor +{ + const CGFloat EffectColorAlpha = 0.6; + UIColor *effectColor = tintColor; + int componentCount = CGColorGetNumberOfComponents(tintColor.CGColor); + if (componentCount == 2) { + CGFloat b; + if ([tintColor getWhite:&b alpha:NULL]) { + effectColor = [UIColor colorWithWhite:b alpha:EffectColorAlpha]; + } + } + else { + CGFloat r, g, b; + if ([tintColor getRed:&r green:&g blue:&b alpha:NULL]) { + effectColor = [UIColor colorWithRed:r green:g blue:b alpha:EffectColorAlpha]; + } + } + return [self applyBlurWithRadius:10 tintColor:effectColor saturationDeltaFactor:-1.0 maskImage:nil]; +} + + +- (UIImage *)applyBlurWithRadius:(CGFloat)blurRadius tintColor:(UIColor *)tintColor saturationDeltaFactor:(CGFloat)saturationDeltaFactor maskImage:(UIImage *)maskImage +{ + // Check pre-conditions. + if (self.size.width < 1 || self.size.height < 1) { + NSLog (@"*** error: invalid size: (%.2f x %.2f). Both dimensions must be >= 1: %@", self.size.width, self.size.height, self); + return nil; + } + if (!self.CGImage) { + NSLog (@"*** error: image must be backed by a CGImage: %@", self); + return nil; + } + if (maskImage && !maskImage.CGImage) { + NSLog (@"*** error: maskImage must be backed by a CGImage: %@", maskImage); + return nil; + } + + CGRect imageRect = { CGPointZero, self.size }; + UIImage *effectImage = self; + + BOOL hasBlur = blurRadius > __FLT_EPSILON__; + BOOL hasSaturationChange = fabs(saturationDeltaFactor - 1.) > __FLT_EPSILON__; + if (hasBlur || hasSaturationChange) { + UIGraphicsBeginImageContextWithOptions(self.size, NO, [[UIScreen mainScreen] scale]); + CGContextRef effectInContext = UIGraphicsGetCurrentContext(); + CGContextScaleCTM(effectInContext, 1.0, -1.0); + CGContextTranslateCTM(effectInContext, 0, -self.size.height); + CGContextDrawImage(effectInContext, imageRect, self.CGImage); + + vImage_Buffer effectInBuffer; + effectInBuffer.data = CGBitmapContextGetData(effectInContext); + effectInBuffer.width = CGBitmapContextGetWidth(effectInContext); + effectInBuffer.height = CGBitmapContextGetHeight(effectInContext); + effectInBuffer.rowBytes = CGBitmapContextGetBytesPerRow(effectInContext); + + UIGraphicsBeginImageContextWithOptions(self.size, NO, [[UIScreen mainScreen] scale]); + CGContextRef effectOutContext = UIGraphicsGetCurrentContext(); + vImage_Buffer effectOutBuffer; + effectOutBuffer.data = CGBitmapContextGetData(effectOutContext); + effectOutBuffer.width = CGBitmapContextGetWidth(effectOutContext); + effectOutBuffer.height = CGBitmapContextGetHeight(effectOutContext); + effectOutBuffer.rowBytes = CGBitmapContextGetBytesPerRow(effectOutContext); + + if (hasBlur) { + // A description of how to compute the box kernel width from the Gaussian + // radius (aka standard deviation) appears in the SVG spec: + // http://www.w3.org/TR/SVG/filters.html#feGaussianBlurElement + // + // For larger values of 's' (s >= 2.0), an approximation can be used: Three + // successive box-blurs build a piece-wise quadratic convolution kernel, which + // approximates the Gaussian kernel to within roughly 3%. + // + // let d = floor(s * 3*sqrt(2*pi)/4 + 0.5) + // + // ... if d is odd, use three box-blurs of size 'd', centered on the output pixel. + // + CGFloat inputRadius = blurRadius * [[UIScreen mainScreen] scale]; + NSUInteger radius = floor(inputRadius * 3. * sqrt(2 * M_PI) / 4 + 0.5); + if (radius % 2 != 1) { + radius += 1; // force radius to be odd so that the three box-blur methodology works. + } + vImageBoxConvolve_ARGB8888(&effectInBuffer, &effectOutBuffer, NULL, 0, 0, radius, radius, 0, kvImageEdgeExtend); + vImageBoxConvolve_ARGB8888(&effectOutBuffer, &effectInBuffer, NULL, 0, 0, radius, radius, 0, kvImageEdgeExtend); + vImageBoxConvolve_ARGB8888(&effectInBuffer, &effectOutBuffer, NULL, 0, 0, radius, radius, 0, kvImageEdgeExtend); + } + BOOL effectImageBuffersAreSwapped = NO; + if (hasSaturationChange) { + CGFloat s = saturationDeltaFactor; + CGFloat floatingPointSaturationMatrix[] = { + 0.0722 + 0.9278 * s, 0.0722 - 0.0722 * s, 0.0722 - 0.0722 * s, 0, + 0.7152 - 0.7152 * s, 0.7152 + 0.2848 * s, 0.7152 - 0.7152 * s, 0, + 0.2126 - 0.2126 * s, 0.2126 - 0.2126 * s, 0.2126 + 0.7873 * s, 0, + 0, 0, 0, 1, + }; + const int32_t divisor = 256; + NSUInteger matrixSize = sizeof(floatingPointSaturationMatrix)/sizeof(floatingPointSaturationMatrix[0]); + int16_t saturationMatrix[matrixSize]; + for (NSUInteger i = 0; i < matrixSize; ++i) { + saturationMatrix[i] = (int16_t)roundf(floatingPointSaturationMatrix[i] * divisor); + } + if (hasBlur) { + vImageMatrixMultiply_ARGB8888(&effectOutBuffer, &effectInBuffer, saturationMatrix, divisor, NULL, NULL, kvImageNoFlags); + effectImageBuffersAreSwapped = YES; + } + else { + vImageMatrixMultiply_ARGB8888(&effectInBuffer, &effectOutBuffer, saturationMatrix, divisor, NULL, NULL, kvImageNoFlags); + } + } + if (!effectImageBuffersAreSwapped) + effectImage = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); + + if (effectImageBuffersAreSwapped) + effectImage = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); + } + + // Set up output context. + UIGraphicsBeginImageContextWithOptions(self.size, NO, [[UIScreen mainScreen] scale]); + CGContextRef outputContext = UIGraphicsGetCurrentContext(); + CGContextScaleCTM(outputContext, 1.0, -1.0); + CGContextTranslateCTM(outputContext, 0, -self.size.height); + + // Draw base image. + CGContextDrawImage(outputContext, imageRect, self.CGImage); + + // Draw effect image. + if (hasBlur) { + CGContextSaveGState(outputContext); + if (maskImage) { + CGContextClipToMask(outputContext, imageRect, maskImage.CGImage); + } + CGContextDrawImage(outputContext, imageRect, effectImage.CGImage); + CGContextRestoreGState(outputContext); + } + + // Add in color tint. + if (tintColor) { + CGContextSaveGState(outputContext); + CGContextSetFillColorWithColor(outputContext, tintColor.CGColor); + CGContextFillRect(outputContext, imageRect); + CGContextRestoreGState(outputContext); + } + + // Output image is ready. + UIImage *outputImage = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); + + return outputImage; +} + + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/\346\257\233\347\216\273\347\222\203/UIImageView+LBBlurredImage.h" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/\346\257\233\347\216\273\347\222\203/UIImageView+LBBlurredImage.h" new file mode 100755 index 0000000000000000000000000000000000000000..f738810f21fec5dfe15d9423ab585ab6b5f6cdfe --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/\346\257\233\347\216\273\347\222\203/UIImageView+LBBlurredImage.h" @@ -0,0 +1,40 @@ +// +// UIImageView+LBBlurredImage.h +// LBBlurredImage +// +// Created by Luca Bernardi on 11/11/12. +// Copyright (c) 2012 Luca Bernardi. All rights reserved. +// + +#import + +typedef void(^LBBlurredImageCompletionBlock)(void); + +extern CGFloat const kLBBlurredImageDefaultBlurRadius; + +@interface UIImageView (LBBlurredImage) + +/** + Set the blurred version of the provided image to the UIImageView + + @param UIImage the image to blur and set as UIImageView's image + @param CGFLoat the radius of the blur used by the Gaussian filter + @param LBBlurredImageCompletionBlock a completion block called after the image + was blurred and set to the UIImageView (the block is dispatched on main thread) + */ +- (void)setImageToBlur:(UIImage *)image + blurRadius:(CGFloat)blurRadius + completionBlock:(LBBlurredImageCompletionBlock)completion; + +/** + Set the blurred version of the provided image to the UIImageView + with the default blur radius + + @param UIImage the image to blur and set as UIImageView's image + @param LBBlurredImageCompletionBlock a completion block called after the image + was blurred and set to the UIImageView (the block is dispatched on main thread) + */ +- (void)setImageToBlur:(UIImage *)image + completionBlock:(LBBlurredImageCompletionBlock)completion; + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/\346\257\233\347\216\273\347\222\203/UIImageView+LBBlurredImage.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/\346\257\233\347\216\273\347\222\203/UIImageView+LBBlurredImage.m" new file mode 100755 index 0000000000000000000000000000000000000000..b60a88556d253ed3a55caf5a463b9c2410fcab5a --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/\346\257\233\347\216\273\347\222\203/UIImageView+LBBlurredImage.m" @@ -0,0 +1,49 @@ +// +// UIImageView+LBBlurredImage.m +// LBBlurredImage +// +// Created by Luca Bernardi on 11/11/12. +// Copyright (c) 2012 Luca Bernardi. All rights reserved. +// + +#import "UIImageView+LBBlurredImage.h" +#import "UIImage+ImageEffects.h" + +CGFloat const kLBBlurredImageDefaultBlurRadius = 20.0; +CGFloat const kLBBlurredImageDefaultSaturationDeltaFactor = 1.8; + +@implementation UIImageView (LBBlurredImage) + +#pragma mark - LBBlurredImage Additions + +- (void)setImageToBlur:(UIImage *)image + completionBlock:(LBBlurredImageCompletionBlock)completion +{ + [self setImageToBlur:image + blurRadius:kLBBlurredImageDefaultBlurRadius + completionBlock:completion]; +} + +- (void)setImageToBlur:(UIImage *)image + blurRadius:(CGFloat)blurRadius + completionBlock:(LBBlurredImageCompletionBlock) completion +{ + NSParameterAssert(image); + NSParameterAssert(blurRadius >= 0); + + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + + UIImage *blurredImage = [image applyBlurWithRadius:blurRadius + tintColor:nil + saturationDeltaFactor:kLBBlurredImageDefaultSaturationDeltaFactor + maskImage:nil]; + dispatch_async(dispatch_get_main_queue(), ^{ + self.image = blurredImage; + if (completion) { + completion(); + } + }); + }); +} + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/\346\260\264\346\263\242\347\272\271/.DS_Store" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/\346\260\264\346\263\242\347\272\271/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..9c376fa4a1161fa87df5193a03c65cb0ec033c34 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/\346\260\264\346\263\242\347\272\271/.DS_Store" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/\346\260\264\346\263\242\347\272\271/JQwaveView.h" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/\346\260\264\346\263\242\347\272\271/JQwaveView.h" new file mode 100644 index 0000000000000000000000000000000000000000..c6a84ca6ed17e9f210438bd75dc7544d7c26856e --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/\346\260\264\346\263\242\347\272\271/JQwaveView.h" @@ -0,0 +1,54 @@ +// +// JQwaveView.h +// JQ_ELOVE +// +// Created by Shmily on 17/3/29. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import + + + + + +@interface JQwaveView : UIView + + +/** + * 进度 0-1 + */ +@property (nonatomic,assign)CGFloat progress; + +/** + * 波动速度,默认 1 + */ +@property (nonatomic,assign)CGFloat speed; + +/** + * 波纹填充颜色 + */ +@property (nonatomic,strong)UIColor * firstWaveColor; +@property (nonatomic,strong)UIColor * secondWaveColor; + +/** + * 波动幅度,默认 5 + */ +@property (nonatomic,assign)CGFloat waveHeight; + +/** + * 进度文字 + */ +@property (nonatomic,strong)UILabel * progressLabel; + +/** + * 是否显示单层波浪,默认NO + */ +@property (nonatomic,assign)BOOL isShowSingleWave; + + + +@end + + + diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/\346\260\264\346\263\242\347\272\271/JQwaveView.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/\346\260\264\346\263\242\347\272\271/JQwaveView.m" new file mode 100644 index 0000000000000000000000000000000000000000..8f37ff647f5664bdfa9a9d61ca82c59e81084df4 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/\346\260\264\346\263\242\347\272\271/JQwaveView.m" @@ -0,0 +1,177 @@ +// +// JQwaveView.m +// JQ_ELOVE +// +// Created by Shmily on 17/3/29. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import "JQwaveView.h" +#import "YYWeakProxy.h" +@interface JQwaveView() + +@property (nonatomic,assign)CGFloat yHeight; +@property (nonatomic,assign)CGFloat offset; +@property (nonatomic,strong)CADisplayLink * timer; +@property (nonatomic,strong)CAShapeLayer * firstWaveLayer; +@property (nonatomic,strong)CAShapeLayer * secondWaveLayer; + +@end + + + +@implementation JQwaveView + +- (instancetype)initWithFrame:(CGRect)frame +{ + + if (self = [super initWithFrame:frame]) { + self.bounds = CGRectMake(0, 0, MIN(frame.size.width, frame.size.height), MIN(frame.size.width, frame.size.height)); + self.layer.cornerRadius = MIN(frame.size.width, frame.size.height) * 0.5; + self.layer.masksToBounds = YES; + self.layer.borderColor = [UIColor colorWithRed:244/255.0 green:244/255.0 blue:248/255.0 alpha:1].CGColor; + self.layer.borderWidth = 5.0f; + + self.waveHeight = 5.0; + self.firstWaveColor = UIColorFromRGBWithAlpha(0xfe4e77, 0.8); + self.secondWaveColor = UIColorFromRGBWithAlpha(0xfe4e77, 0.3); + self.yHeight = self.bounds.size.height; + self.speed=1.0; + + [self.layer addSublayer:self.firstWaveLayer]; + if (!self.isShowSingleWave) { + [self.layer addSublayer:self.secondWaveLayer]; + } + [self addSubview:self.progressLabel]; + } + return self; +} +-(void)setProgress:(CGFloat)progress +{ + _progress = progress; + _progressLabel.text = [NSString stringWithFormat:@"%ld%%",(long)[[NSNumber numberWithFloat:progress * 100] integerValue]]; + _progressLabel.textColor=[UIColor colorWithWhite:progress*1.8 alpha:1]; + self.yHeight = self.bounds.size.height * (1 - progress); + + [self stopWaveAnimation]; + [self startWaveAnimation]; +} + +#pragma mark -- 开始波动动画 +- (void)startWaveAnimation +{ + self.timer = [CADisplayLink displayLinkWithTarget:[YYWeakProxy proxyWithTarget:self] selector:@selector(waveAnimation)]; + [self.timer addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes]; +} + + +#pragma mark -- 停止波动动画 +- (void)stopWaveAnimation +{ + [self.timer invalidate]; + self.timer = nil; +} + +#pragma mark -- 波动动画实现 +- (void)waveAnimation +{ + CGFloat waveHeight = self.waveHeight; + if (self.progress == 0.0f || self.progress == 1.0f) { + waveHeight = 0.f; + } + + self.offset += self.speed; + //第一个波纹 + CGMutablePathRef pathRef = CGPathCreateMutable(); + CGFloat startOffY = waveHeight * sinf(self.offset * M_PI * 2 / self.bounds.size.width); + CGFloat orignOffY = 0.0; + CGPathMoveToPoint(pathRef, NULL, 0, startOffY); + for (CGFloat i = 0.f; i <= self.bounds.size.width; i++) { + orignOffY = waveHeight * sinf(2 * M_PI / self.bounds.size.width * i + self.offset * M_PI * 2 / self.bounds.size.width) + self.yHeight; + CGPathAddLineToPoint(pathRef, NULL, i, orignOffY); + } + + CGPathAddLineToPoint(pathRef, NULL, self.bounds.size.width, orignOffY); + CGPathAddLineToPoint(pathRef, NULL, self.bounds.size.width, self.bounds.size.height); + CGPathAddLineToPoint(pathRef, NULL, 0, self.bounds.size.height); + CGPathAddLineToPoint(pathRef, NULL, 0, startOffY); + CGPathCloseSubpath(pathRef); + self.firstWaveLayer.path = pathRef; + self.firstWaveLayer.fillColor = self.firstWaveColor.CGColor; + CGPathRelease(pathRef); + + //第二个波纹 + if (!self.isShowSingleWave) { + CGMutablePathRef pathRef1 = CGPathCreateMutable(); + CGFloat startOffY1 = waveHeight * sinf(self.offset * M_PI * 2 / self.bounds.size.width); + CGFloat orignOffY1 = 0.0; + CGPathMoveToPoint(pathRef1, NULL, 0, startOffY1); + for (CGFloat i = 0.f; i <= self.bounds.size.width; i++) { + orignOffY1 = waveHeight * cosf(2 * M_PI / self.bounds.size.width * i + self.offset * M_PI * 2 / self.bounds.size.width) + self.yHeight; + CGPathAddLineToPoint(pathRef1, NULL, i, orignOffY1); + } + + CGPathAddLineToPoint(pathRef1, NULL, self.bounds.size.width, orignOffY1); + CGPathAddLineToPoint(pathRef1, NULL, self.bounds.size.width, self.bounds.size.height); + CGPathAddLineToPoint(pathRef1, NULL, 0, self.bounds.size.height); + CGPathAddLineToPoint(pathRef1, NULL, 0, startOffY1); + CGPathCloseSubpath(pathRef1); + self.secondWaveLayer.path = pathRef1; + self.secondWaveLayer.fillColor = self.secondWaveColor.CGColor; + + CGPathRelease(pathRef1); + } + +} + +#pragma mark ----- INITUI ---- +-(CAShapeLayer *)firstWaveLayer{ + if (!_firstWaveLayer) { + _firstWaveLayer = [CAShapeLayer layer]; + _firstWaveLayer.frame = self.bounds; + _firstWaveLayer.fillColor = _firstWaveColor.CGColor; + } + return _firstWaveLayer; +} + +-(CAShapeLayer *)secondWaveLayer{ + if (!_secondWaveLayer) { + _secondWaveLayer = [CAShapeLayer layer]; + _secondWaveLayer.frame = self.bounds; + _secondWaveLayer.fillColor = _secondWaveColor.CGColor; + } + return _secondWaveLayer; +} + +-(UILabel *)progressLabel{ + if (!_progressLabel) { + _progressLabel=[[UILabel alloc] init]; + _progressLabel.text=@"0%"; + _progressLabel.frame=CGRectMake(0, 0, self.bounds.size.width, 30); + _progressLabel.center = CGPointMake(CGRectGetMidX(self.bounds), CGRectGetMidY(self.bounds)); + _progressLabel.font=[UIFont systemFontOfSize:16]; + _progressLabel.textColor=[UIColor colorWithWhite:0 alpha:1]; + _progressLabel.textAlignment=1; + } + return _progressLabel; +} + + + +-(void)dealloc{ + + [self.timer invalidate]; + self.timer = nil; + + if (_firstWaveLayer) { + [_firstWaveLayer removeFromSuperlayer]; + _firstWaveLayer = nil; + } + + if (_secondWaveLayer) { + [_secondWaveLayer removeFromSuperlayer]; + _secondWaveLayer = nil; + } +} + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/\346\260\264\346\263\242\347\272\271/YYWeakProxy.h" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/\346\260\264\346\263\242\347\272\271/YYWeakProxy.h" new file mode 100755 index 0000000000000000000000000000000000000000..525117b04c2c5fb46e00970ddfdacf2d7bee98be --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/\346\260\264\346\263\242\347\272\271/YYWeakProxy.h" @@ -0,0 +1,61 @@ +// +// YYWeakProxy.h +// YYKit +// +// Created by ibireme on 14/10/18. +// Copyright (c) 2015 ibireme. +// +// This source code is licensed under the MIT-style license found in the +// LICENSE file in the root directory of this source tree. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +/** + A proxy used to hold a weak object. + It can be used to avoid retain cycles, such as the target in NSTimer or CADisplayLink. + + sample code: + + @implementation MyView { + NSTimer *_timer; + } + + - (void)initTimer { + YYWeakProxy *proxy = [YYWeakProxy proxyWithTarget:self]; + _timer = [NSTimer timerWithTimeInterval:0.1 target:proxy selector:@selector(tick:) userInfo:nil repeats:YES]; + } + + - (void)tick:(NSTimer *)timer {...} + @end + */ +@interface YYWeakProxy : NSProxy + +/** + The proxy target. + */ +@property (nullable, nonatomic, weak, readonly) id target; + +/** + Creates a new weak proxy for target. + + @param target Target object. + + @return A new proxy object. + */ +- (instancetype)initWithTarget:(id)target; + +/** + Creates a new weak proxy for target. + + @param target Target object. + + @return A new proxy object. + */ ++ (instancetype)proxyWithTarget:(id)target; + +@end + +NS_ASSUME_NONNULL_END diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/\346\260\264\346\263\242\347\272\271/YYWeakProxy.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/\346\260\264\346\263\242\347\272\271/YYWeakProxy.m" new file mode 100755 index 0000000000000000000000000000000000000000..fbf648dffbe9cff43a1b5cebc9c84d5773d2cc0c --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/\346\260\264\346\263\242\347\272\271/YYWeakProxy.m" @@ -0,0 +1,83 @@ +// +// YYWeakProxy.m +// YYKit +// +// Created by ibireme on 14/10/18. +// Copyright (c) 2015 ibireme. +// +// This source code is licensed under the MIT-style license found in the +// LICENSE file in the root directory of this source tree. +// + +#import "YYWeakProxy.h" + + +@implementation YYWeakProxy + +- (instancetype)initWithTarget:(id)target { + _target = target; + return self; +} + ++ (instancetype)proxyWithTarget:(id)target { + return [[YYWeakProxy alloc] initWithTarget:target]; +} + +- (id)forwardingTargetForSelector:(SEL)selector { + return _target; +} + +- (void)forwardInvocation:(NSInvocation *)invocation { + void *null = NULL; + [invocation setReturnValue:&null]; +} + +- (NSMethodSignature *)methodSignatureForSelector:(SEL)selector { + return [NSObject instanceMethodSignatureForSelector:@selector(init)]; +} + +- (BOOL)respondsToSelector:(SEL)aSelector { + return [_target respondsToSelector:aSelector]; +} + +- (BOOL)isEqual:(id)object { + return [_target isEqual:object]; +} + +- (NSUInteger)hash { + return [_target hash]; +} + +- (Class)superclass { + return [_target superclass]; +} + +- (Class)class { + return [_target class]; +} + +- (BOOL)isKindOfClass:(Class)aClass { + return [_target isKindOfClass:aClass]; +} + +- (BOOL)isMemberOfClass:(Class)aClass { + return [_target isMemberOfClass:aClass]; +} + +- (BOOL)conformsToProtocol:(Protocol *)aProtocol { + return [_target conformsToProtocol:aProtocol]; +} + +- (BOOL)isProxy { + return YES; +} + +- (NSString *)description { + return [_target description]; +} + +- (NSString *)debugDescription { + return [_target debugDescription]; +} + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/\347\233\270\345\206\214/.DS_Store" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/\347\233\270\345\206\214/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..73f661a41d0bbe4fc5a283a0ab618548dfaaba3f Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/\347\233\270\345\206\214/.DS_Store" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/\347\233\270\345\206\214/CHTCollectionViewWaterfallLayout.h" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/\347\233\270\345\206\214/CHTCollectionViewWaterfallLayout.h" new file mode 100755 index 0000000000000000000000000000000000000000..5d3d4a8385baad786f4f41efea318e30382d9e4e --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/\347\233\270\345\206\214/CHTCollectionViewWaterfallLayout.h" @@ -0,0 +1,297 @@ +// +// UICollectionViewWaterfallLayout.h +// +// Created by Nelson on 12/11/19. +// Copyright (c) 2012 Nelson Tai. All rights reserved. +// + +#import + +/** + * Enumerated structure to define direction in which items can be rendered. + */ +typedef NS_ENUM (NSUInteger, CHTCollectionViewWaterfallLayoutItemRenderDirection) { + CHTCollectionViewWaterfallLayoutItemRenderDirectionShortestFirst, + CHTCollectionViewWaterfallLayoutItemRenderDirectionLeftToRight, + CHTCollectionViewWaterfallLayoutItemRenderDirectionRightToLeft +}; + +/** + * Constants that specify the types of supplementary views that can be presented using a waterfall layout. + */ + +/// A supplementary view that identifies the header for a given section. +extern NSString *const CHTCollectionElementKindSectionHeader; +/// A supplementary view that identifies the footer for a given section. +extern NSString *const CHTCollectionElementKindSectionFooter; + +#pragma mark - CHTCollectionViewDelegateWaterfallLayout + +@class CHTCollectionViewWaterfallLayout; + +/** + * The CHTCollectionViewDelegateWaterfallLayout protocol defines methods that let you coordinate with a + * CHTCollectionViewWaterfallLayout object to implement a waterfall-based layout. + * The methods of this protocol define the size of items. + * + * The waterfall layout object expects the collection view’s delegate object to adopt this protocol. + * Therefore, implement this protocol on object assigned to your collection view’s delegate property. + */ +@protocol CHTCollectionViewDelegateWaterfallLayout +@required +/** + * Asks the delegate for the size of the specified item’s cell. + * + * @param collectionView + * The collection view object displaying the waterfall layout. + * @param collectionViewLayout + * The layout object requesting the information. + * @param indexPath + * The index path of the item. + * + * @return + * The original size of the specified item. Both width and height must be greater than 0. + */ +- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath; + +@optional +/** + * Asks the delegate for the column count in a section + * + * @param collectionView + * The collection view object displaying the waterfall layout. + * @param collectionViewLayout + * The layout object requesting the information. + * @param section + * The section. + * + * @return + * The original column count for that section. Must be greater than 0. + */ +- (NSInteger)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout columnCountForSection:(NSInteger)section; + +/** + * Asks the delegate for the height of the header view in the specified section. + * + * @param collectionView + * The collection view object displaying the waterfall layout. + * @param collectionViewLayout + * The layout object requesting the information. + * @param section + * The index of the section whose header size is being requested. + * + * @return + * The height of the header. If you return 0, no header is added. + * + * @discussion + * If you do not implement this method, the waterfall layout uses the value in its headerHeight property to set the size of the header. + * + * @see + * headerHeight + */ +- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout heightForHeaderInSection:(NSInteger)section; + +/** + * Asks the delegate for the height of the footer view in the specified section. + * + * @param collectionView + * The collection view object displaying the waterfall layout. + * @param collectionViewLayout + * The layout object requesting the information. + * @param section + * The index of the section whose header size is being requested. + * + * @return + * The height of the footer. If you return 0, no footer is added. + * + * @discussion + * If you do not implement this method, the waterfall layout uses the value in its footerHeight property to set the size of the footer. + * + * @see + * footerHeight + */ +- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout heightForFooterInSection:(NSInteger)section; + +/** + * Asks the delegate for the insets in the specified section. + * + * @param collectionView + * The collection view object displaying the waterfall layout. + * @param collectionViewLayout + * The layout object requesting the information. + * @param section + * The index of the section whose insets are being requested. + * + * @discussion + * If you do not implement this method, the waterfall layout uses the value in its sectionInset property. + * + * @return + * The insets for the section. + */ +- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section; + +/** + * Asks the delegate for the header insets in the specified section. + * + * @param collectionView + * The collection view object displaying the waterfall layout. + * @param collectionViewLayout + * The layout object requesting the information. + * @param section + * The index of the section whose header insets are being requested. + * + * @discussion + * If you do not implement this method, the waterfall layout uses the value in its headerInset property. + * + * @return + * The headerInsets for the section. + */ +- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForHeaderInSection:(NSInteger)section; + +/** + * Asks the delegate for the footer insets in the specified section. + * + * @param collectionView + * The collection view object displaying the waterfall layout. + * @param collectionViewLayout + * The layout object requesting the information. + * @param section + * The index of the section whose footer insets are being requested. + * + * @discussion + * If you do not implement this method, the waterfall layout uses the value in its footerInset property. + * + * @return + * The footerInsets for the section. + */ +- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForFooterInSection:(NSInteger)section; + +/** + * Asks the delegate for the minimum spacing between two items in the same column + * in the specified section. If this method is not implemented, the + * minimumInteritemSpacing property is used for all sections. + * + * @param collectionView + * The collection view object displaying the waterfall layout. + * @param collectionViewLayout + * The layout object requesting the information. + * @param section + * The index of the section whose minimum interitem spacing is being requested. + * + * @discussion + * If you do not implement this method, the waterfall layout uses the value in its minimumInteritemSpacing property to determine the amount of space between items in the same column. + * + * @return + * The minimum interitem spacing. + */ +- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section; + +@end + +#pragma mark - CHTCollectionViewWaterfallLayout + +/** + * The CHTCollectionViewWaterfallLayout class is a concrete layout object that organizes items into waterfall-based grids + * with optional header and footer views for each section. + * + * A waterfall layout works with the collection view’s delegate object to determine the size of items, headers, and footers + * in each section. That delegate object must conform to the `CHTCollectionViewDelegateWaterfallLayout` protocol. + * + * Each section in a waterfall layout can have its own custom header and footer. To configure the header or footer for a view, + * you must configure the height of the header or footer to be non zero. You can do this by implementing the appropriate delegate + * methods or by assigning appropriate values to the `headerHeight` and `footerHeight` properties. + * If the header or footer height is 0, the corresponding view is not added to the collection view. + * + * @note CHTCollectionViewWaterfallLayout doesn't support decoration view, and it supports vertical scrolling direction only. + */ +@interface CHTCollectionViewWaterfallLayout : UICollectionViewLayout + +/** + * @brief How many columns for this layout. + * @discussion Default: 2 + */ +@property (nonatomic, assign) NSInteger columnCount; + +/** + * @brief The minimum spacing to use between successive columns. + * @discussion Default: 10.0 + */ +@property (nonatomic, assign) CGFloat minimumColumnSpacing; + +/** + * @brief The minimum spacing to use between items in the same column. + * @discussion Default: 10.0 + * @note This spacing is not applied to the space between header and columns or between columns and footer. + */ +@property (nonatomic, assign) CGFloat minimumInteritemSpacing; + +/** + * @brief Height for section header + * @discussion + * If your collectionView's delegate doesn't implement `collectionView:layout:heightForHeaderInSection:`, + * then this value will be used. + * + * Default: 0 + */ +@property (nonatomic, assign) CGFloat headerHeight; + +/** + * @brief Height for section footer + * @discussion + * If your collectionView's delegate doesn't implement `collectionView:layout:heightForFooterInSection:`, + * then this value will be used. + * + * Default: 0 + */ +@property (nonatomic, assign) CGFloat footerHeight; + +/** + * @brief The margins that are used to lay out the header for each section. + * @discussion + * These insets are applied to the headers in each section. + * They represent the distance between the top of the collection view and the top of the content items + * They also indicate the spacing on either side of the header. They do not affect the size of the headers or footers themselves. + * + * Default: UIEdgeInsetsZero + */ +@property (nonatomic, assign) UIEdgeInsets headerInset; + +/** + * @brief The margins that are used to lay out the footer for each section. + * @discussion + * These insets are applied to the footers in each section. + * They represent the distance between the top of the collection view and the top of the content items + * They also indicate the spacing on either side of the footer. They do not affect the size of the headers or footers themselves. + * + * Default: UIEdgeInsetsZero + */ +@property (nonatomic, assign) UIEdgeInsets footerInset; + +/** + * @brief The margins that are used to lay out content in each section. + * @discussion + * Section insets are margins applied only to the items in the section. + * They represent the distance between the header view and the columns and between the columns and the footer view. + * They also indicate the spacing on either side of columns. They do not affect the size of the headers or footers themselves. + * + * Default: UIEdgeInsetsZero + */ +@property (nonatomic, assign) UIEdgeInsets sectionInset; + +/** + * @brief The direction in which items will be rendered in subsequent rows. + * @discussion + * The direction in which each item is rendered. This could be left to right (CHTCollectionViewWaterfallLayoutItemRenderDirectionLeftToRight), right to left (CHTCollectionViewWaterfallLayoutItemRenderDirectionRightToLeft), or shortest column fills first (CHTCollectionViewWaterfallLayoutItemRenderDirectionShortestFirst). + * + * Default: CHTCollectionViewWaterfallLayoutItemRenderDirectionShortestFirst + */ +@property (nonatomic, assign) CHTCollectionViewWaterfallLayoutItemRenderDirection itemRenderDirection; + +/** + * @brief The calculated width of an item in the specified section. + * @discussion + * The width of an item is calculated based on number of columns, the collection view width, and the horizontal insets for that section. + */ +- (CGFloat)itemWidthInSectionAtIndex:(NSInteger)section; + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/\347\233\270\345\206\214/CHTCollectionViewWaterfallLayout.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/\347\233\270\345\206\214/CHTCollectionViewWaterfallLayout.m" new file mode 100755 index 0000000000000000000000000000000000000000..ae690f7d5189e8012f4a8eba43acfff11dd72c93 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/\347\233\270\345\206\214/CHTCollectionViewWaterfallLayout.m" @@ -0,0 +1,507 @@ +// +// UICollectionViewWaterfallLayout.m +// +// Created by Nelson on 12/11/19. +// Copyright (c) 2012 Nelson Tai. All rights reserved. +// + +#import "CHTCollectionViewWaterfallLayout.h" + +NSString *const CHTCollectionElementKindSectionHeader = @"CHTCollectionElementKindSectionHeader"; +NSString *const CHTCollectionElementKindSectionFooter = @"CHTCollectionElementKindSectionFooter"; + +@interface CHTCollectionViewWaterfallLayout () +/// The delegate will point to collection view's delegate automatically. +@property (nonatomic, weak) id delegate; +/// Array to store height for each column +@property (nonatomic, strong) NSMutableArray *columnHeights; +/// Array of arrays. Each array stores item attributes for each section +@property (nonatomic, strong) NSMutableArray *sectionItemAttributes; +/// Array to store attributes for all items includes headers, cells, and footers +@property (nonatomic, strong) NSMutableArray *allItemAttributes; +/// Dictionary to store section headers' attribute +@property (nonatomic, strong) NSMutableDictionary *headersAttribute; +/// Dictionary to store section footers' attribute +@property (nonatomic, strong) NSMutableDictionary *footersAttribute; +/// Array to store union rectangles +@property (nonatomic, strong) NSMutableArray *unionRects; +@end + +@implementation CHTCollectionViewWaterfallLayout + +/// How many items to be union into a single rectangle +const NSInteger unionSize = 20; + +#pragma mark - Public Accessors +- (void)setColumnCount:(NSInteger)columnCount { + if (_columnCount != columnCount) { + _columnCount = columnCount; + [self invalidateLayout]; + } +} + +- (void)setMinimumColumnSpacing:(CGFloat)minimumColumnSpacing { + if (_minimumColumnSpacing != minimumColumnSpacing) { + _minimumColumnSpacing = minimumColumnSpacing; + [self invalidateLayout]; + } +} + +- (void)setMinimumInteritemSpacing:(CGFloat)minimumInteritemSpacing { + if (_minimumInteritemSpacing != minimumInteritemSpacing) { + _minimumInteritemSpacing = minimumInteritemSpacing; + [self invalidateLayout]; + } +} + +- (void)setHeaderHeight:(CGFloat)headerHeight { + if (_headerHeight != headerHeight) { + _headerHeight = headerHeight; + [self invalidateLayout]; + } +} + +- (void)setFooterHeight:(CGFloat)footerHeight { + if (_footerHeight != footerHeight) { + _footerHeight = footerHeight; + [self invalidateLayout]; + } +} + +- (void)setHeaderInset:(UIEdgeInsets)headerInset { + if (!UIEdgeInsetsEqualToEdgeInsets(_headerInset, headerInset)) { + _headerInset = headerInset; + [self invalidateLayout]; + } +} + +- (void)setFooterInset:(UIEdgeInsets)footerInset { + if (!UIEdgeInsetsEqualToEdgeInsets(_footerInset, footerInset)) { + _footerInset = footerInset; + [self invalidateLayout]; + } +} + +- (void)setSectionInset:(UIEdgeInsets)sectionInset { + if (!UIEdgeInsetsEqualToEdgeInsets(_sectionInset, sectionInset)) { + _sectionInset = sectionInset; + [self invalidateLayout]; + } +} + +- (void)setItemRenderDirection:(CHTCollectionViewWaterfallLayoutItemRenderDirection)itemRenderDirection { + if (_itemRenderDirection != itemRenderDirection) { + _itemRenderDirection = itemRenderDirection; + [self invalidateLayout]; + } +} + +- (NSInteger)columnCountForSection:(NSInteger)section { + if ([self.delegate respondsToSelector:@selector(collectionView:layout:columnCountForSection:)]) { + return [self.delegate collectionView:self.collectionView layout:self columnCountForSection:section]; + } else { + return self.columnCount; + } +} + +- (CGFloat)itemWidthInSectionAtIndex:(NSInteger)section { + UIEdgeInsets sectionInset; + if ([self.delegate respondsToSelector:@selector(collectionView:layout:insetForSectionAtIndex:)]) { + sectionInset = [self.delegate collectionView:self.collectionView layout:self insetForSectionAtIndex:section]; + } else { + sectionInset = self.sectionInset; + } + CGFloat width = self.collectionView.frame.size.width - sectionInset.left - sectionInset.right; + NSInteger columnCount = [self columnCountForSection:section]; + return floorf((width - (columnCount - 1) * self.minimumColumnSpacing) / columnCount); +} + +#pragma mark - Private Accessors +- (NSMutableDictionary *)headersAttribute { + if (!_headersAttribute) { + _headersAttribute = [NSMutableDictionary dictionary]; + } + return _headersAttribute; +} + +- (NSMutableDictionary *)footersAttribute { + if (!_footersAttribute) { + _footersAttribute = [NSMutableDictionary dictionary]; + } + return _footersAttribute; +} + +- (NSMutableArray *)unionRects { + if (!_unionRects) { + _unionRects = [NSMutableArray array]; + } + return _unionRects; +} + +- (NSMutableArray *)columnHeights { + if (!_columnHeights) { + _columnHeights = [NSMutableArray array]; + } + return _columnHeights; +} + +- (NSMutableArray *)allItemAttributes { + if (!_allItemAttributes) { + _allItemAttributes = [NSMutableArray array]; + } + return _allItemAttributes; +} + +- (NSMutableArray *)sectionItemAttributes { + if (!_sectionItemAttributes) { + _sectionItemAttributes = [NSMutableArray array]; + } + return _sectionItemAttributes; +} + +- (id )delegate { + return (id )self.collectionView.delegate; +} + +#pragma mark - Init +- (void)commonInit { + _columnCount = 2; + _minimumColumnSpacing = 10; + _minimumInteritemSpacing = 10; + _headerHeight = 0; + _footerHeight = 0; + _sectionInset = UIEdgeInsetsZero; + _headerInset = UIEdgeInsetsZero; + _footerInset = UIEdgeInsetsZero; + _itemRenderDirection = CHTCollectionViewWaterfallLayoutItemRenderDirectionShortestFirst; +} + +- (id)init { + if (self = [super init]) { + [self commonInit]; + } + return self; +} + +- (id)initWithCoder:(NSCoder *)aDecoder { + if (self = [super initWithCoder:aDecoder]) { + [self commonInit]; + } + return self; +} + +#pragma mark - Methods to Override +- (void)prepareLayout { + [super prepareLayout]; + + NSInteger numberOfSections = [self.collectionView numberOfSections]; + if (numberOfSections == 0) { + return; + } + + NSAssert([self.delegate conformsToProtocol:@protocol(CHTCollectionViewDelegateWaterfallLayout)], @"UICollectionView's delegate should conform to CHTCollectionViewDelegateWaterfallLayout protocol"); + NSAssert(self.columnCount > 0 || [self.delegate respondsToSelector:@selector(collectionView:layout:columnCountForSection:)], @"UICollectionViewWaterfallLayout's columnCount should be greater than 0, or delegate must implement columnCountForSection:"); + + // Initialize variables + NSInteger idx = 0; + + [self.headersAttribute removeAllObjects]; + [self.footersAttribute removeAllObjects]; + [self.unionRects removeAllObjects]; + [self.columnHeights removeAllObjects]; + [self.allItemAttributes removeAllObjects]; + [self.sectionItemAttributes removeAllObjects]; + + for (NSInteger section = 0; section < numberOfSections; section++) { + NSInteger columnCount = [self columnCountForSection:section]; + NSMutableArray *sectionColumnHeights = [NSMutableArray arrayWithCapacity:columnCount]; + for (idx = 0; idx < columnCount; idx++) { + [sectionColumnHeights addObject:@(0)]; + } + [self.columnHeights addObject:sectionColumnHeights]; + } + // Create attributes + CGFloat top = 0; + UICollectionViewLayoutAttributes *attributes; + + for (NSInteger section = 0; section < numberOfSections; ++section) { + /* + * 1. Get section-specific metrics (minimumInteritemSpacing, sectionInset) + */ + CGFloat minimumInteritemSpacing; + if ([self.delegate respondsToSelector:@selector(collectionView:layout:minimumInteritemSpacingForSectionAtIndex:)]) { + minimumInteritemSpacing = [self.delegate collectionView:self.collectionView layout:self minimumInteritemSpacingForSectionAtIndex:section]; + } else { + minimumInteritemSpacing = self.minimumInteritemSpacing; + } + + UIEdgeInsets sectionInset; + if ([self.delegate respondsToSelector:@selector(collectionView:layout:insetForSectionAtIndex:)]) { + sectionInset = [self.delegate collectionView:self.collectionView layout:self insetForSectionAtIndex:section]; + } else { + sectionInset = self.sectionInset; + } + + CGFloat width = self.collectionView.frame.size.width - sectionInset.left - sectionInset.right; + NSInteger columnCount = [self columnCountForSection:section]; + CGFloat itemWidth = floorf((width - (columnCount - 1) * self.minimumColumnSpacing) / columnCount); + + /* + * 2. Section header + */ + CGFloat headerHeight; + if ([self.delegate respondsToSelector:@selector(collectionView:layout:heightForHeaderInSection:)]) { + headerHeight = [self.delegate collectionView:self.collectionView layout:self heightForHeaderInSection:section]; + } else { + headerHeight = self.headerHeight; + } + + UIEdgeInsets headerInset; + if ([self.delegate respondsToSelector:@selector(collectionView:layout:insetForHeaderInSection:)]) { + headerInset = [self.delegate collectionView:self.collectionView layout:self insetForHeaderInSection:section]; + } else { + headerInset = self.headerInset; + } + + top += headerInset.top; + + if (headerHeight > 0) { + attributes = [UICollectionViewLayoutAttributes layoutAttributesForSupplementaryViewOfKind:CHTCollectionElementKindSectionHeader withIndexPath:[NSIndexPath indexPathForItem:0 inSection:section]]; + attributes.frame = CGRectMake(headerInset.left, + top, + self.collectionView.frame.size.width - (headerInset.left + headerInset.right), + headerHeight); + + self.headersAttribute[@(section)] = attributes; + [self.allItemAttributes addObject:attributes]; + + top = CGRectGetMaxY(attributes.frame) + headerInset.bottom; + } + + top += sectionInset.top; + for (idx = 0; idx < columnCount; idx++) { + self.columnHeights[section][idx] = @(top); + } + + /* + * 3. Section items + */ + NSInteger itemCount = [self.collectionView numberOfItemsInSection:section]; + NSMutableArray *itemAttributes = [NSMutableArray arrayWithCapacity:itemCount]; + + // Item will be put into shortest column. + for (idx = 0; idx < itemCount; idx++) { + NSIndexPath *indexPath = [NSIndexPath indexPathForItem:idx inSection:section]; + NSUInteger columnIndex = [self nextColumnIndexForItem:idx inSection:section]; + CGFloat xOffset = sectionInset.left + (itemWidth + self.minimumColumnSpacing) * columnIndex; + CGFloat yOffset = [self.columnHeights[section][columnIndex] floatValue]; + CGSize itemSize = [self.delegate collectionView:self.collectionView layout:self sizeForItemAtIndexPath:indexPath]; + CGFloat itemHeight = 0; + if (itemSize.height > 0 && itemSize.width > 0) { + itemHeight = floorf(itemSize.height * itemWidth / itemSize.width); + } + + attributes = [UICollectionViewLayoutAttributes layoutAttributesForCellWithIndexPath:indexPath]; + attributes.frame = CGRectMake(xOffset, yOffset, itemWidth, itemHeight); + [itemAttributes addObject:attributes]; + [self.allItemAttributes addObject:attributes]; + self.columnHeights[section][columnIndex] = @(CGRectGetMaxY(attributes.frame) + minimumInteritemSpacing); + } + + [self.sectionItemAttributes addObject:itemAttributes]; + + /* + * 4. Section footer + */ + CGFloat footerHeight; + NSUInteger columnIndex = [self longestColumnIndexInSection:section]; + top = [self.columnHeights[section][columnIndex] floatValue] - minimumInteritemSpacing + sectionInset.bottom; + + if ([self.delegate respondsToSelector:@selector(collectionView:layout:heightForFooterInSection:)]) { + footerHeight = [self.delegate collectionView:self.collectionView layout:self heightForFooterInSection:section]; + } else { + footerHeight = self.footerHeight; + } + + UIEdgeInsets footerInset; + if ([self.delegate respondsToSelector:@selector(collectionView:layout:insetForFooterInSection:)]) { + footerInset = [self.delegate collectionView:self.collectionView layout:self insetForFooterInSection:section]; + } else { + footerInset = self.footerInset; + } + + top += footerInset.top; + + if (footerHeight > 0) { + attributes = [UICollectionViewLayoutAttributes layoutAttributesForSupplementaryViewOfKind:CHTCollectionElementKindSectionFooter withIndexPath:[NSIndexPath indexPathForItem:0 inSection:section]]; + attributes.frame = CGRectMake(footerInset.left, + top, + self.collectionView.frame.size.width - (footerInset.left + footerInset.right), + footerHeight); + + self.footersAttribute[@(section)] = attributes; + [self.allItemAttributes addObject:attributes]; + + top = CGRectGetMaxY(attributes.frame) + footerInset.bottom; + } + + for (idx = 0; idx < columnCount; idx++) { + self.columnHeights[section][idx] = @(top); + } + } // end of for (NSInteger section = 0; section < numberOfSections; ++section) + + // Build union rects + idx = 0; + NSInteger itemCounts = [self.allItemAttributes count]; + while (idx < itemCounts) { + CGRect unionRect = ((UICollectionViewLayoutAttributes *)self.allItemAttributes[idx]).frame; + NSInteger rectEndIndex = MIN(idx + unionSize, itemCounts); + + for (NSInteger i = idx + 1; i < rectEndIndex; i++) { + unionRect = CGRectUnion(unionRect, ((UICollectionViewLayoutAttributes *)self.allItemAttributes[i]).frame); + } + + idx = rectEndIndex; + + [self.unionRects addObject:[NSValue valueWithCGRect:unionRect]]; + } +} + +- (CGSize)collectionViewContentSize { + NSInteger numberOfSections = [self.collectionView numberOfSections]; + if (numberOfSections == 0) { + return CGSizeZero; + } + + CGSize contentSize = self.collectionView.bounds.size; + contentSize.height = [[[self.columnHeights lastObject] firstObject] floatValue]; + + return contentSize; +} + +- (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)path { + if (path.section >= [self.sectionItemAttributes count]) { + return nil; + } + if (path.item >= [self.sectionItemAttributes[path.section] count]) { + return nil; + } + return (self.sectionItemAttributes[path.section])[path.item]; +} + +- (UICollectionViewLayoutAttributes *)layoutAttributesForSupplementaryViewOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath { + UICollectionViewLayoutAttributes *attribute = nil; + if ([kind isEqualToString:CHTCollectionElementKindSectionHeader]) { + attribute = self.headersAttribute[@(indexPath.section)]; + } else if ([kind isEqualToString:CHTCollectionElementKindSectionFooter]) { + attribute = self.footersAttribute[@(indexPath.section)]; + } + return attribute; +} + +- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect { + NSInteger i; + NSInteger begin = 0, end = self.unionRects.count; + NSMutableArray *attrs = [NSMutableArray array]; + + for (i = 0; i < self.unionRects.count; i++) { + if (CGRectIntersectsRect(rect, [self.unionRects[i] CGRectValue])) { + begin = i * unionSize; + break; + } + } + for (i = self.unionRects.count - 1; i >= 0; i--) { + if (CGRectIntersectsRect(rect, [self.unionRects[i] CGRectValue])) { + end = MIN((i + 1) * unionSize, self.allItemAttributes.count); + break; + } + } + for (i = begin; i < end; i++) { + UICollectionViewLayoutAttributes *attr = self.allItemAttributes[i]; + if (CGRectIntersectsRect(rect, attr.frame)) { + [attrs addObject:attr]; + } + } + + return [NSArray arrayWithArray:attrs]; +} + +- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds { + CGRect oldBounds = self.collectionView.bounds; + if (CGRectGetWidth(newBounds) != CGRectGetWidth(oldBounds)) { + return YES; + } + return NO; +} + +#pragma mark - Private Methods + +/** + * Find the shortest column. + * + * @return index for the shortest column + */ +- (NSUInteger)shortestColumnIndexInSection:(NSInteger)section { + __block NSUInteger index = 0; + __block CGFloat shortestHeight = MAXFLOAT; + + [self.columnHeights[section] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { + CGFloat height = [obj floatValue]; + if (height < shortestHeight) { + shortestHeight = height; + index = idx; + } + }]; + + return index; +} + +/** + * Find the longest column. + * + * @return index for the longest column + */ +- (NSUInteger)longestColumnIndexInSection:(NSInteger)section { + __block NSUInteger index = 0; + __block CGFloat longestHeight = 0; + + [self.columnHeights[section] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { + CGFloat height = [obj floatValue]; + if (height > longestHeight) { + longestHeight = height; + index = idx; + } + }]; + + return index; +} + +/** + * Find the index for the next column. + * + * @return index for the next column + */ +- (NSUInteger)nextColumnIndexForItem:(NSInteger)item inSection:(NSInteger)section { + NSUInteger index = 0; + NSInteger columnCount = [self columnCountForSection:section]; + switch (self.itemRenderDirection) { + case CHTCollectionViewWaterfallLayoutItemRenderDirectionShortestFirst: + index = [self shortestColumnIndexInSection:section]; + break; + + case CHTCollectionViewWaterfallLayoutItemRenderDirectionLeftToRight: + index = (item % columnCount); + break; + + case CHTCollectionViewWaterfallLayoutItemRenderDirectionRightToLeft: + index = (columnCount - 1) - (item % columnCount); + break; + + default: + index = [self shortestColumnIndexInSection:section]; + break; + } + return index; +} + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/\347\233\270\345\206\214/PhotoCollectionViewCell.h" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/\347\233\270\345\206\214/PhotoCollectionViewCell.h" new file mode 100644 index 0000000000000000000000000000000000000000..08e8ac90e045f8924391ee2c61505d12b7910685 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/\347\233\270\345\206\214/PhotoCollectionViewCell.h" @@ -0,0 +1,17 @@ +// +// PhotoCollectionViewCell.h +// JQ_ELOVE +// +// Created by Shmily on 16/6/17. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import + +@interface PhotoCollectionViewCell : UICollectionViewCell +@property (weak, nonatomic) IBOutlet UIImageView *PhotoIV; +@property (nonatomic,assign) BOOL selectedStatus; +@property (weak, nonatomic) IBOutlet UIImageView *seletcImageView; +@property (weak, nonatomic) IBOutlet UIImageView *addPhoto; + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/\347\233\270\345\206\214/PhotoCollectionViewCell.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/\347\233\270\345\206\214/PhotoCollectionViewCell.m" new file mode 100644 index 0000000000000000000000000000000000000000..e309b133104787948c534b79c3ceda52d1663a60 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/\347\233\270\345\206\214/PhotoCollectionViewCell.m" @@ -0,0 +1,25 @@ +// +// PhotoCollectionViewCell.m +// JQ_ELOVE +// +// Created by Shmily on 16/6/17. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "PhotoCollectionViewCell.h" + +@implementation PhotoCollectionViewCell + +- (void)awakeFromNib { + [super awakeFromNib]; + _PhotoIV.contentMode = UIViewContentModeScaleAspectFill; + _PhotoIV.clipsToBounds = YES; +} + + +- (void)setSelectedStatus:(BOOL)selectedStatus{ + _selectedStatus = selectedStatus; + self.seletcImageView.hidden = !selectedStatus; +} + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/\347\233\270\345\206\214/PhotoCollectionViewCell.xib" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/\347\233\270\345\206\214/PhotoCollectionViewCell.xib" new file mode 100644 index 0000000000000000000000000000000000000000..b14a7809dd98aea60479d6e8f2d9f39c9b0710b6 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/\347\233\270\345\206\214/PhotoCollectionViewCell.xib" @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/\347\233\270\345\206\214/PhotoFooterView.h" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/\347\233\270\345\206\214/PhotoFooterView.h" new file mode 100644 index 0000000000000000000000000000000000000000..4edbd283a5772123d646d8c6c9b163281930e677 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/\347\233\270\345\206\214/PhotoFooterView.h" @@ -0,0 +1,17 @@ +// +// PhotoFooterView.h +// JQ_ELOVE +// +// Created by Shmily on 16/7/4. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import + +@interface PhotoFooterView : UIView + +@property (nonatomic, strong) UIButton *delBtn; +@property (nonatomic, strong) UIButton *allBtn; + + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/\347\233\270\345\206\214/PhotoFooterView.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/\347\233\270\345\206\214/PhotoFooterView.m" new file mode 100644 index 0000000000000000000000000000000000000000..e8593e10469662860d1f631ed03fab52f270679a --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\350\265\204\346\226\231/\347\233\270\345\206\214/PhotoFooterView.m" @@ -0,0 +1,50 @@ +// +// PhotoFooterView.m +// JQ_ELOVE +// +// Created by Shmily on 16/7/4. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "PhotoFooterView.h" + + +@implementation PhotoFooterView + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + + [self addSubview:self.delBtn]; + [self addSubview:self.allBtn]; + } + return self; +} + +- (UIButton *)delBtn +{ + if (!_delBtn) { + _delBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _delBtn.frame = CGRectMake(0, 0, self.width/2, self.height); + [_delBtn setTitle:@"删除" forState:0]; + _delBtn.backgroundColor = [UIColor lightGrayColor]; + } + return _delBtn; + +} + +- (UIButton *)allBtn +{ + if (!_allBtn) { + _allBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _allBtn.frame = CGRectMake(_delBtn.right, 0, self.width/2, self.height); + [_allBtn setTitle:@"全选" forState:0]; + _allBtn.backgroundColor = [UIColor lightGrayColor]; + } + return _allBtn; + +} + + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\351\222\261\345\214\205/MyTicketViewController.h" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\351\222\261\345\214\205/MyTicketViewController.h" new file mode 100644 index 0000000000000000000000000000000000000000..8adb55fe018fb4e0ea46511a52bb7c1581f968e9 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\351\222\261\345\214\205/MyTicketViewController.h" @@ -0,0 +1,19 @@ +// +// MyTicketViewController.h +// JQ_ELOVE +// +// Created by chason on 2017/3/29. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import "ZCRefreshTableViewController.h" +@class MyTicketModel; + +@interface MyTicketViewController : ZCRefreshTableViewController + +@property (nonatomic, assign) NSInteger fromType; +@property (nonatomic, copy) NSString *actid; +@property (nonatomic, copy) NSString *order_id; +@property (nonatomic, copy) void (^selectTicket)(MyTicketModel *myTicketModel,NSDictionary *myTicketDict); + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\351\222\261\345\214\205/MyTicketViewController.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\351\222\261\345\214\205/MyTicketViewController.m" new file mode 100644 index 0000000000000000000000000000000000000000..9409de95a0f2598a005c21efc0e9d08249fb61a8 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\351\222\261\345\214\205/MyTicketViewController.m" @@ -0,0 +1,141 @@ +// +// MyTicketViewController.m +// JQ_ELOVE +// +// Created by chason on 2017/3/29. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import "MyTicketViewController.h" +#import "MyTicketCell.h" +#import "MyTicketModel.h" + +@interface MyTicketViewController () + +@end + +@implementation MyTicketViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + [self setTableViewFrame:CGRectMake(0, -kTopHeight, KSCREEN_WIDTH, KSCREEN_HEIGHT-kTopHeight-145-45)]; + [self.tableView registerClass:[MyTicketCell class] forCellReuseIdentifier:@"MyTicketCell"]; + self.showRefreshHeader = YES; + [self requestData]; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ + return self.dataArray.count; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ + + return KSCREEN_WIDTH*0.4; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ + MyTicketCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyTicketCell"]; + cell.selectionStyle = UITableViewCellSelectionStyleNone; + [cell initMyTicketCell:self.dataArray[indexPath.row]]; + return cell; +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ + + if (_fromType == 1) { + MyTicketModel *myTicketModel = self.dataArray[indexPath.row]; + if ([myTicketModel.money intValue] != 0) { + NSDictionary *parameters = @{ + @"ordernum":_order_id, + @"ticketid":myTicketModel.ticket, + @"actid":_actid + }; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_user_wallet_trade block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + if ([resultDic[@"retcode"] intValue] == 1) { + if (self.selectTicket) { + self.selectTicket(myTicketModel,resultDic[@"message"]); + [self.navigationController popViewControllerAnimated:YES]; + } + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; + }else{ + if (self.selectTicket) { + self.selectTicket(myTicketModel,nil); + [self.navigationController popViewControllerAnimated:YES]; + } + } + } +} + +- (void)requestData{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:@"网络异常" toView:self.view]; + return; + } + if (_fromType != 1) { + NSDictionary *parameters = @{ + @"userid":USER_USERID + }; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_user_game_myticket block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + if ([resultDic[@"retcode"] intValue] == 1) { + [self.dataArray removeAllObjects]; + for (NSDictionary *dict in resultDic[@"message"]) { + MyTicketModel *myTicketModel = [[MyTicketModel alloc] init]; + [myTicketModel initMyTicketModel:dict]; + [self.dataArray addObject:myTicketModel]; + } + [self tableViewDidFinishTriggerHeader:YES reload:YES]; + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; + }else{ + NSDictionary *parameters = @{ + @"userid":USER_USERID, + @"actid":_actid + }; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_user_game_actticket block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + if ([resultDic[@"retcode"] intValue] == 1) { + [self.dataArray removeAllObjects]; + for (NSDictionary *dict in resultDic[@"message"]) { + MyTicketModel *myTicketModel = [[MyTicketModel alloc] init]; + [myTicketModel initMyTicketModel:dict]; + [self.dataArray addObject:myTicketModel]; + } + [self tableViewDidFinishTriggerHeader:YES reload:YES]; + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; + } +} + +- (void)tableViewDidTriggerHeaderRefresh +{ + [self requestData]; +} + +- (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/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\351\222\261\345\214\205/MyWalletViewController.h" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\351\222\261\345\214\205/MyWalletViewController.h" new file mode 100644 index 0000000000000000000000000000000000000000..6e0bf172fc79607d1fae0f7b4c2a63bece5da984 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\351\222\261\345\214\205/MyWalletViewController.h" @@ -0,0 +1,27 @@ +// +// SyceeStatisticsViewController.h +// JQ_ELOVE +// +// Created by chason on 2017/3/20. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import "ZCRefreshTableViewController.h" + +@interface MyWalletViewController : ZCRefreshTableViewController + +@property (nonatomic, strong) UIButton *rightBtn; + +@property (nonatomic, strong) UIImageView *topView; +@property (nonatomic, strong) UIImageView *avatarView; +@property (nonatomic, strong) UILabel *nicknameLab; +@property (nonatomic, strong) UILabel *allSyceeNumLab; +@property (nonatomic, strong) UILabel *todaySyceeNumLab; + +@property (nonatomic, strong) UIView *CDkeyView; +@property (nonatomic, strong) UITextField *CDkeyTF; +@property (nonatomic, strong) UIButton *exchangeBtn; + +@property (nonatomic, strong) UIView *myTicketView; + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\351\222\261\345\214\205/MyWalletViewController.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\351\222\261\345\214\205/MyWalletViewController.m" new file mode 100644 index 0000000000000000000000000000000000000000..0c26b8c07b3d3e52a22dc928a4b48cb7252e78a6 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\346\210\221\347\232\204\351\222\261\345\214\205/MyWalletViewController.m" @@ -0,0 +1,363 @@ +// +// SyceeStatisticsViewController.m +// JQ_ELOVE +// +// Created by chason on 2017/3/20. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import "MyWalletViewController.h" +#import "SyceeCell.h" +#import "ALLWebViewController.h" +#import "MyTicketViewController.h" +#import "TopBtnView.h" +@interface MyWalletViewController () +{ + float keyBoardHeight; + NSMutableArray *_syceeCellArray; +} +@property (nonatomic, strong) UIButton *bgView; +@property (nonatomic, strong) MyTicketViewController *myTicketVC; +@property (nonatomic,retain)TopBtnView *twoBtnView; +@end + +@implementation MyWalletViewController + +- (void)viewWillAppear:(BOOL)animated +{ + [super viewWillAppear:animated]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil]; +} + +- (void)viewWillDisappear:(BOOL)animated +{ + [super viewWillDisappear:animated]; + [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil]; + [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil]; +} + +#pragma mark 键盘将要显示通知 +-(void)keyboardWillShow:(NSNotification *)notification{ + NSDictionary * info = [notification userInfo]; + CGSize keyBoardSize = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size; + keyBoardHeight = keyBoardSize.height; + [UIView animateWithDuration:0.28 animations:^{ + _bgView.hidden = NO; + _bgView.height = KSCREEN_HEIGHT-45-keyBoardHeight; + _CDkeyView.top = KSCREEN_HEIGHT-kTopHeight-45-keyBoardHeight; + } completion:^(BOOL finished) { + NSLog(@"检查次数"); + }]; +} +#pragma mark 键盘将要消失通知 +-(void)keyboardWillHide:(NSNotification *)notification{ + keyBoardHeight = 0.0; + [UIView animateWithDuration:0.28 animations:^{ + _bgView.hidden = YES; + _CDkeyView.top = KSCREEN_HEIGHT-kTopHeight-45; + } completion:^(BOOL finished) { + + }]; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + self.title = @"我的钱包"; + [self addNavigationItemWithTitles:@[@"奖励规则"] isLeft:NO target:self action:@selector(rightBtnClicked) tags:nil]; + + _syceeCellArray = [[NSMutableArray alloc]init]; + [self.view addSubview:self.topView]; + [self.topView addSubview:self.avatarView]; + [self.topView addSubview:self.nicknameLab]; + [self.topView addSubview:self.allSyceeNumLab]; + [self.topView addSubview:self.todaySyceeNumLab]; + [self.topView addSubview:self.twoBtnView]; + [self.view addSubview:self.myTicketView]; + [self.view addSubview:self.bgView]; + [self.view addSubview:self.CDkeyView]; + [self.CDkeyView addSubview:self.CDkeyTF]; + [self.CDkeyView addSubview:self.exchangeBtn]; + + [self setTableViewFrame:CGRectMake(0, _topView.bottom, KSCREEN_WIDTH, KSCREEN_HEIGHT-kTopHeight-145-45)]; + self.showRefreshHeader = YES; + self.showRefreshFooter = YES; + self.curepage = 1; + [self requestData]; +} + +- (UIButton *)bgView{ + if (!_bgView) { + _bgView = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH, KSCREEN_HEIGHT)]; + _bgView.backgroundColor = UIColorFromRGBWithAlpha(0x000000, 0.3); + _bgView.hidden = YES; + [_bgView addTarget:self action:@selector(hiddenKeyboard) forControlEvents:UIControlEventTouchUpInside]; + } + return _bgView; +} + +- (void)hiddenKeyboard{ + [_CDkeyTF resignFirstResponder]; +} + +- (void)rightBtnClicked{ + ALLWebViewController *myWebView = [[ALLWebViewController alloc]init]; + myWebView.urlStr = [NSString stringWithFormat:@"%@%@",BASE_URL,UEL_AWARD]; + myWebView.titleName = @"奖励规则"; + [self.navigationController pushViewController:myWebView animated:YES]; +} + +- (UIImageView *)topView{ + if (!_topView) { + _topView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH, 145)]; + _topView.backgroundColor = [UIColor whiteColor]; + _topView.userInteractionEnabled = YES; + } + return _topView; +} + +- (UIImageView *)avatarView{ + if (!_avatarView) { + _avatarView = [[UIImageView alloc] initWithFrame:CGRectMake(15, 10, 80, 80)]; + [_avatarView setImageRoundRadius:40 BorderWidth:2 borderColor:UIColorFromRGB(0xeeeeee)]; + [_avatarView sd_setImageWithURL:[NSURL URLWithString:USER_AVATAR] placeholderImage:USER_AVATAR_DEFAULT]; + } + return _avatarView; +} + +- (UILabel *)nicknameLab{ + if (!_nicknameLab) { + _nicknameLab = [[UILabel alloc] initWithFrame:CGRectMake(_avatarView.right+15, 20, KSCREEN_WIDTH-125, 20)]; + _nicknameLab.textColor = UIColorFromRGB(0x595959); + _nicknameLab.font = [UIFont systemFontOfSize:15]; + _nicknameLab.text = USER_NICKNAME; + } + return _nicknameLab; +} + +- (UILabel *)allSyceeNumLab{ + if (!_allSyceeNumLab) { + _allSyceeNumLab = [[UILabel alloc] initWithFrame:CGRectMake(_avatarView.right+15, _avatarView.bottom-30, (KSCREEN_WIDTH-125)/2, 20)]; + _allSyceeNumLab.textColor = UIColorFromRGB(0x595959); + _allSyceeNumLab.font = [UIFont systemFontOfSize:13]; + _allSyceeNumLab.adjustsFontSizeToFitWidth = YES; + } + return _allSyceeNumLab; +} + +- (UILabel *)todaySyceeNumLab{ + if (!_todaySyceeNumLab) { + _todaySyceeNumLab = [[UILabel alloc] initWithFrame:CGRectMake(_allSyceeNumLab.right, _avatarView.bottom-30, (KSCREEN_WIDTH-125)/2, 20)]; + _todaySyceeNumLab.textColor = UIColorFromRGB(0x595959); + _todaySyceeNumLab.font = [UIFont systemFontOfSize:13]; + _todaySyceeNumLab.textAlignment = NSTextAlignmentRight; + _todaySyceeNumLab.adjustsFontSizeToFitWidth = YES; + } + return _todaySyceeNumLab; +} +- (TopBtnView *)twoBtnView +{ + if (!_twoBtnView) { + _twoBtnView = [[TopBtnView alloc]initWithFrame:CGRectMake(0, _avatarView.bottom+10.5, KSCREEN_WIDTH, 44.5) showType:@[@"我的元宝",@"我的卡券"]]; + _twoBtnView.delegate = self; + } + return _twoBtnView; +} + +- (void)topBtnSelect:(NSString *)name +{ + if ([name isEqualToString:@"我的元宝"]) { + self.tableView.hidden = NO; + _myTicketView.hidden = YES; + }else if ([name isEqualToString:@"我的卡券"]){ + self.tableView.hidden = YES; + _myTicketView.hidden = NO; + if (!_myTicketVC) { + _myTicketVC = [[MyTicketViewController alloc] init]; + _myTicketVC.view.frame = self.myTicketView.bounds; + [self addChildViewController:_myTicketVC]; + [self.myTicketView addSubview:_myTicketVC.view]; + }else{ + [self.myTicketView bringSubviewToFront:_myTicketVC.view]; + } + } +} +- (UIView *)myTicketView{ + if (!_myTicketView) { + _myTicketView = [[UIView alloc] initWithFrame:CGRectMake(0, _twoBtnView.bottom, KSCREEN_WIDTH, KSCREEN_HEIGHT-64-145-45)]; + _myTicketView.hidden = YES; + } + return _myTicketView; +} + +- (UIView *)CDkeyView{ + if (!_CDkeyView) { + _CDkeyView = [[UIView alloc] initWithFrame:CGRectMake(0, KSCREEN_HEIGHT-kTopHeight-45, KSCREEN_WIDTH, 45)]; + _CDkeyView.backgroundColor = [UIColor whiteColor]; + } + return _CDkeyView; +} + +- (UITextField *)CDkeyTF{ + if (!_CDkeyTF) { + _CDkeyTF = [[UITextField alloc] initWithFrame:CGRectMake(10, (_CDkeyView.height-35)/2, KSCREEN_WIDTH-95, 35)]; + [_CDkeyTF setImageRoundRadius:5 BorderWidth:0 borderColor:nil]; + _CDkeyTF.backgroundColor = UIColorFromRGB(0xf3f3f3); + _CDkeyTF.placeholder = @" 输入兑换码"; + _CDkeyTF.delegate = self; + _CDkeyTF.font = [UIFont systemFontOfSize:15]; + } + return _CDkeyTF; +} + +- (UIButton *)exchangeBtn{ + if (!_exchangeBtn) { + _exchangeBtn = [[UIButton alloc] initWithFrame:CGRectMake(_CDkeyTF.right+5, (_CDkeyView.height-35)/2, 70, 35)]; + [_exchangeBtn setImageRoundRadius:5 BorderWidth:0 borderColor:nil]; + [_exchangeBtn setTitle:@"提交" forState:UIControlStateNormal]; + [_exchangeBtn setTitleColor:UIColorFromRGB(0xffffff) forState:UIControlStateNormal]; + _exchangeBtn.titleLabel.font = [UIFont systemFontOfSize:15]; + _exchangeBtn.backgroundColor = CTHEMECOLOR; + [_exchangeBtn addTarget:self action:@selector(exchangeBtnClicked) forControlEvents:UIControlEventTouchUpInside]; + } + return _exchangeBtn; +} + +- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{ + UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH, 30)]; + headerView.backgroundColor = UIColorFromRGB(0xf3f3f3); + UILabel *leftTitle = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH/3, 30)]; + leftTitle.textAlignment = NSTextAlignmentCenter; + leftTitle.textColor = UIColorFromRGB(0x595959); + leftTitle.font = [UIFont systemFontOfSize:15]; + leftTitle.text = @"日期"; + UILabel *centerTitle = [[UILabel alloc] initWithFrame:CGRectMake(leftTitle.right, 0, KSCREEN_WIDTH/3, 30)]; + centerTitle.textAlignment = NSTextAlignmentCenter; + centerTitle.textColor = UIColorFromRGB(0x595959); + centerTitle.font = [UIFont systemFontOfSize:15]; + centerTitle.text = @"操作"; + UILabel *rightTitle = [[UILabel alloc] initWithFrame:CGRectMake(centerTitle.right, 0, KSCREEN_WIDTH/3, 30)]; + rightTitle.textAlignment = NSTextAlignmentCenter; + rightTitle.textColor = UIColorFromRGB(0x595959); + rightTitle.font = [UIFont systemFontOfSize:15]; + rightTitle.text = @"元宝"; + [headerView addSubview:leftTitle]; + [headerView addSubview:centerTitle]; + [headerView addSubview:rightTitle]; + return headerView; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{ + return 30; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ + return self.dataArray.count; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ + return 44; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ + static NSString *myCellStr = @"SyceeCell"; + SyceeCell *myCell = [tableView dequeueReusableCellWithIdentifier:myCellStr]; + if (!myCell) { + myCell = [[SyceeCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:myCellStr]; + } + myCell.selectionStyle = 0; + [myCell initSyceeCell:self.dataArray[indexPath.row]]; + return myCell; +} + +- (void)requestData{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:NetworkFailure toView:self.view]; + return; + } + NSDictionary *params = @{ + @"userid":USER_USERID, + @"version":APP_VERSION, + @"pagesize":@"10", + @"pageindex":[NSString stringWithFormat:@"%d",self.curepage] + }; + [ZCNetRequestManager postRequestWithParameters:params subUrl:URL_user_wallet_consumerlistnew block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + if ([resultDic[@"retcode"] intValue] == 1) { + _allSyceeNumLab.text = [NSString stringWithFormat:@"%@元宝",ToString(resultDic[@"message"][@"beannum"])]; + _todaySyceeNumLab.text = [NSString stringWithFormat:@"今日获得%@元宝",ToString(resultDic[@"message"][@"todayredbean"])]; + if (self.curepage == 1) { + [self.dataArray removeAllObjects]; + } + for (NSDictionary *dict in resultDic[@"message"][@"consumerlist"]) { + [self.dataArray addObject:dict]; + } + if (self.dataArray.count>=[resultDic[@"number"] intValue]) { + [self endRefreshingWithNoMoreData]; + }else{ + [self tableViewDidFinishTriggerHeader:NO reload:YES]; + } + [self tableViewDidFinishTriggerHeader:YES reload:YES]; + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; +} + + + +- (void)exchangeBtnClicked{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:NetworkFailure toView:self.view]; + return; + } + if (!STR_IS_NOT_EMPTY(_CDkeyTF.text)) { + [MBProgressHUD showError:@"请输入兑换码" toView:self.view]; + return; + } + NSDictionary *params = @{ + @"userid":USER_USERID, + @"code":_CDkeyTF.text + }; + [MBProgressHUD showMessag:nil toView:self.view]; + [ZCNetRequestManager postRequestWithParameters:params subUrl:URL_user_game_gamecode block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + [MBProgressHUD hideHUDForView:self.view animated:YES]; + if ([resultDic[@"retcode"] intValue] == 1) { + [MBProgressHUD showSuccess:@"提交成功,请等待人工审核." toView:self.view]; + [self hiddenKeyboard]; + _CDkeyTF.text = @""; + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; +} + +-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ + [self.view endEditing:YES]; +} +- (BOOL)textFieldShouldReturn:(UITextField *)textField{ + return [textField resignFirstResponder]; +} + + +- (void)tableViewDidTriggerHeaderRefresh +{ + self.curepage = 1; + [self requestData]; +} + +- (void)tableViewDidTriggerFooterRefresh +{ + self.curepage += 1; + [self requestData]; +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\350\256\276\347\275\256/BindingPhoneViewController.h" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\350\256\276\347\275\256/BindingPhoneViewController.h" new file mode 100644 index 0000000000000000000000000000000000000000..8d1cdc7fe7f8076269560a5c0d690168c86da531 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\350\256\276\347\275\256/BindingPhoneViewController.h" @@ -0,0 +1,13 @@ +// +// BindingPhoneViewController.h +// JQQY +// +// Created by chason on 2017/11/23. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "RootViewController.h" + +@interface BindingPhoneViewController : RootViewController + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\350\256\276\347\275\256/BindingPhoneViewController.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\350\256\276\347\275\256/BindingPhoneViewController.m" new file mode 100644 index 0000000000000000000000000000000000000000..fbdd8fe543a74458ae1fb907ba658b17a4709b58 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\350\256\276\347\275\256/BindingPhoneViewController.m" @@ -0,0 +1,106 @@ +// +// BindingPhoneViewController.m +// JQQY +// +// Created by chason on 2017/11/23. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "BindingPhoneViewController.h" +#import "ZCTextFieldLineView.h" +#import "PhoneCodeViewController.h" + +@interface BindingPhoneViewController () + +@property (nonatomic, strong) ZCTextFieldLineView *phoneView; +@property (nonatomic, strong) UIButton *nextBtn; + +@end + +@implementation BindingPhoneViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.title = @"更换手机"; + + [self.view addSubview:self.phoneView]; + [self.view addSubview:self.nextBtn]; + + [self.phoneView.textField becomeFirstResponder]; +} + +- (ZCTextFieldLineView *)phoneView +{ + if (!_phoneView) { + _phoneView = [[ZCTextFieldLineView alloc] initWithFrame:CGRectMake(0, 10, KSCREEN_WIDTH, 44)]; + _phoneView.textField.delegate = self; + _phoneView.textField.placeholder = @"请输入新手机号"; + _phoneView.textField.keyboardType = UIKeyboardTypeNumberPad; + [_phoneView.textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged]; + } + return _phoneView; +} + +- (UIButton *)nextBtn +{ + if (!_nextBtn) { + _nextBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _nextBtn.frame = CGRectMake(15, _phoneView.bottom+10, KSCREEN_WIDTH-30, 45); + [_nextBtn setImageRoundRadius:3 BorderWidth:0 borderColor:nil]; + _nextBtn.backgroundColor = PURPLECOLOUR; + _nextBtn.alpha = 0.6; + [_nextBtn setTitle:@"下一步" forState:UIControlStateNormal]; + _nextBtn.userInteractionEnabled = NO; + [_nextBtn addTarget:self action:@selector(nextBtnClicked) forControlEvents:UIControlEventTouchUpInside]; + } + return _nextBtn; +} + +- (void)nextBtnClicked +{ + if (_phoneView.textField.text.length != 11) { + [MBProgressHUD showError:@"请输入正确的手机号" toView:self.view]; + return; + } + + PhoneCodeViewController *phoneCodeVC = [[PhoneCodeViewController alloc] init]; + phoneCodeVC.phone = _phoneView.textField.text; + phoneCodeVC.titleStr = @"绑定手机"; + phoneCodeVC.comeType = @"2"; + [self.navigationController pushViewController:phoneCodeVC animated:YES]; +} + +#pragma mark ————— UITextFieldDelegate ————— + +-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ + NSUInteger proposedNewLength = textField.text.length - range.length + string.length; + if ( proposedNewLength > 11) return NO;//限制长度 + return YES; +} + +-(void)textFieldDidChange :(UITextField *)theTextField{ + if (STR_IS_NOT_EMPTY(theTextField.text)) { + _nextBtn.alpha = 1; + _nextBtn.userInteractionEnabled = YES; + }else{ + _nextBtn.alpha = 0.6; + _nextBtn.userInteractionEnabled = NO; + } +} + +- (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/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\350\256\276\347\275\256/FeedbackViewController.h" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\350\256\276\347\275\256/FeedbackViewController.h" new file mode 100644 index 0000000000000000000000000000000000000000..d5e6c44f53b4a9877f543ccbe2cacdc5a20047a7 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\350\256\276\347\275\256/FeedbackViewController.h" @@ -0,0 +1,15 @@ +// +// FeedbackViewController.h +// JQ_ELOVE +// +// Created by Shmily on 16/6/30. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "RootViewController.h" + +@interface FeedbackViewController : RootViewController + + + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\350\256\276\347\275\256/FeedbackViewController.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\350\256\276\347\275\256/FeedbackViewController.m" new file mode 100644 index 0000000000000000000000000000000000000000..0a81281f6f1fe3ad3a8bddfea072d34137ddc7df --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\350\256\276\347\275\256/FeedbackViewController.m" @@ -0,0 +1,210 @@ +// +// FeedbackViewController.m +// JQ_ELOVE +// +// Created by Shmily on 16/6/30. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "FeedbackViewController.h" +#import "UIPlaceHolderTextView.h" +#import "UploadMethod.h" +#import "CameraManager.h" + +@interface FeedbackViewController () +{ + UIImage *Feedimage; +} +@property (nonatomic, strong) UIPlaceHolderTextView *textView; +@property (nonatomic, strong) UIView *bgView; +@property (nonatomic, strong) UIButton *sureBtn; +@property (nonatomic, strong) UIButton *imageSelect; +@property (nonatomic, strong) UILabel *textNumLab; +@property (nonatomic, strong) CameraManager *camer; + +@end + +@implementation FeedbackViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.title = @"意见反馈"; + self.view.backgroundColor = UIColorFromRGB(0xf3f3f3); + [self addNavigationItemWithTitles:@[@"提交"] isLeft:NO target:self action:@selector(btnSelect) tags:nil]; + [self.view addSubview:self.bgView]; + [self.bgView addSubview:self.textView]; + [self.textView addSubview:self.textNumLab]; + [self.view addSubview:self.imageSelect]; +} + +- (UIView *)bgView +{ + if (!_bgView) { + _bgView = [[UIView alloc]initWithFrame:CGRectMake(0, 10, KSCREEN_WIDTH, 200)]; + _bgView.backgroundColor = [UIColor whiteColor]; + } + return _bgView; +} + +- (UIButton *)imageSelect +{ + if (!_imageSelect) { + _imageSelect = [UIButton buttonWithType:UIButtonTypeCustom]; + _imageSelect.frame = CGRectMake(10, _bgView.bottom+10, 80, 80); + [_imageSelect setBackgroundImage:[UIImage imageNamed:@"add_image"] forState:0]; + [_imageSelect setBackgroundImage:[UIImage imageNamed:@"add_image"] forState:UIControlStateHighlighted]; + [_imageSelect addTarget:self action:@selector(showSheetView) forControlEvents:UIControlEventTouchUpInside]; + + } + return _imageSelect; +} + +- (UIPlaceHolderTextView *)textView +{ + if (!_textView) { + _textView = [[UIPlaceHolderTextView alloc]initWithFrame:CGRectMake(10, 5, _bgView.width-20, _bgView.height-10)]; + _textView.placeholder = @"请输入您宝贵的意见,我们将为您不断改进"; + _textView.font = [UIFont systemFontOfSize:16]; + } + return _textView; +} + +- (UILabel *)textNumLab +{ + if (!_textNumLab) { + _textNumLab = [[UILabel alloc] initWithFrame:CGRectMake(self.textView.width-100, self.textView.height-20, 100, 20)]; + _textNumLab.textAlignment = NSTextAlignmentRight; + _textNumLab.font = FFONT12; + _textNumLab.textColor = PURPLECOLOUR; + _textNumLab.text = @"不超过300字"; + } + return _textNumLab; +} + +- (void)showSheetView +{ + if (Feedimage) { + UIActionSheet *actionSheet = [[UIActionSheet alloc] + initWithTitle:nil + delegate:self + cancelButtonTitle:@"取消" + destructiveButtonTitle:nil + otherButtonTitles:@"相机",@"相册",@"删除",nil]; + actionSheet.actionSheetStyle = UIActionSheetStyleBlackOpaque; + [actionSheet showInView:self.view]; + + }else{ + UIActionSheet *actionSheet = [[UIActionSheet alloc] + initWithTitle:nil + delegate:self + cancelButtonTitle:@"取消" + destructiveButtonTitle:nil + otherButtonTitles:@"相机",@"相册",nil]; + actionSheet.actionSheetStyle = UIActionSheetStyleBlackOpaque; + [actionSheet showInView:self.view]; + } +} + +- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex +{ + + CameraManager *camer = [[CameraManager alloc]initWithVC:self andShowType:2]; + if (buttonIndex ==0) {//相机 + [camer startCamera]; + }else if (buttonIndex ==1){//相册 + [camer startPhoto:1]; + }else if (buttonIndex ==2){ + Feedimage = NULL; + [self setSelectImage:[UIImage imageNamed:@"add_image"]]; + } + __weak typeof(self) weekSelf = self; + [camer setImageBlock:^(NSArray *imageArray) { + Feedimage = [imageArray firstObject]; + [weekSelf setSelectImage:Feedimage]; + }]; + _camer = camer; +} + + +- (void)setSelectImage:(UIImage *)image +{ + [_imageSelect setBackgroundImage:image forState:0]; + [_imageSelect setBackgroundImage:image forState:1]; +} + +- (void)btnSelect +{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:@"网络异常" toView:self.view]; + return; + } + _sureBtn.userInteractionEnabled =NO; + if (Feedimage) { + if (!STR_IS_NOT_EMPTY(self.textView.text)) { + self.textView.text = @""; + } + UploadMethod *upload = [[UploadMethod alloc]init]; + upload.type = 6; + [upload transformImageToData:UIImageJPEGRepresentation(Feedimage, 0.8) uploadUrl:URL_user_getfileupurl]; + __weak typeof(self) weakSelf =self; + [upload setUploadImageBlock:^(NSDictionary *imageDict) { + [weakSelf sendSuccest:imageDict[@"filePath"]]; + }]; + + }else{ + if (STR_IS_NOT_EMPTY(self.textView.text)) { + [self sendSuccest:@""]; + }else{ + _sureBtn.userInteractionEnabled =YES; + [MBProgressHUD showError:@"请您填写宝贵的意见或上传图片" toView:self.view]; + } + } +} + +- (void)sendSuccest:(NSString *)imagepath +{ + NSDictionary *parameters = @{ + @"userID":USER_USERID, + @"idea":STR_IS_NOT_EMPTY(self.textView.text) ? self.textView.text :@"", + @"phonetype":ToString([ZCTools getDeviceModel]), + @"phoneversion":[[UIDevice currentDevice] systemVersion], + @"version":ToString(APP_VERSION), + @"version_up":APP_VERSION, + @"ideaphoto":imagepath, + }; + [MBProgressHUD showMessag:nil toView:self.view]; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_user_idea block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + [MBProgressHUD hideHUDForView:self.view animated:YES]; + if ([resultDic[@"retcode"] intValue] == 1) { + [MBProgressHUD showSuccess:@"提交成功,感谢您的反馈。" toView:self.view]; + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [self.navigationController popViewControllerAnimated:YES]; + }); + _sureBtn.userInteractionEnabled =YES; + }else{ + _sureBtn.userInteractionEnabled =YES; + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; + + +} + +- (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/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\350\256\276\347\275\256/ModifyPwdViewController.h" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\350\256\276\347\275\256/ModifyPwdViewController.h" new file mode 100644 index 0000000000000000000000000000000000000000..84d991f664631d7f6ced4fdbd189424b1f1f1143 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\350\256\276\347\275\256/ModifyPwdViewController.h" @@ -0,0 +1,13 @@ +// +// ModifyPwdViewController.h +// JQQY +// +// Created by chason on 2017/11/20. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "RootViewController.h" + +@interface ModifyPwdViewController : RootViewController + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\350\256\276\347\275\256/ModifyPwdViewController.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\350\256\276\347\275\256/ModifyPwdViewController.m" new file mode 100644 index 0000000000000000000000000000000000000000..2143de6870fdf97990c8abdf0a84dad39e2d96c2 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\350\256\276\347\275\256/ModifyPwdViewController.m" @@ -0,0 +1,156 @@ +// +// ModifyPwdViewController.m +// JQQY +// +// Created by chason on 2017/11/20. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "ModifyPwdViewController.h" +#import "SettingView.h" +#import "MineViewController.h" + +@interface ModifyPwdViewController () + +@property (nonatomic, strong) SettingView *NowPassTfView; +@property (nonatomic, strong) SettingView *NewPassTfView; +@property (nonatomic, strong) SettingView *ComPassTfView; +@property (nonatomic, strong) UIButton *sendBtn; + +@end + +@implementation ModifyPwdViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.title = @"修改密码"; + + [self.view addSubview:self.NowPassTfView]; + [self.view addSubview:self.NewPassTfView]; + [self.view addSubview:self.ComPassTfView]; + [self.view addSubview:self.sendBtn]; +} + +- (SettingView *)NowPassTfView +{ + if (!_NowPassTfView) { + _NowPassTfView = [[SettingView alloc]initWithFrame:CGRectMake(0, 20, KSCREEN_WIDTH, 46) andTitle:@"请输入旧密码"]; + _NowPassTfView.firstLB.text = @"旧密码"; + _NowPassTfView.downLineLB.hidden = YES; + _NowPassTfView.titleTF.secureTextEntry = YES; + } + return _NowPassTfView; +} + +- (SettingView *)NewPassTfView +{ + if (!_NewPassTfView) { + _NewPassTfView = [[SettingView alloc]initWithFrame:CGRectMake(0, _NowPassTfView.bottom, KSCREEN_WIDTH, 46) andTitle:@"请输入新密码"]; + _NewPassTfView.upLineLB.left = 15; + _NewPassTfView.firstLB.text = @"新密码"; + _NewPassTfView.upLineLB.hidden = NO; + _NewPassTfView.titleTF.secureTextEntry = YES; + } + return _NewPassTfView; +} + +- (SettingView *)ComPassTfView +{ + if (!_ComPassTfView) { + _ComPassTfView = [[SettingView alloc]initWithFrame:CGRectMake(0, _NewPassTfView.bottom, KSCREEN_WIDTH, 46) andTitle:@"请再次输入新密码"]; + _ComPassTfView.upLineLB.hidden = YES; + _ComPassTfView.firstLB.text = @"确认密码"; + _ComPassTfView.downLineLB.left = 0; + _ComPassTfView.titleTF.secureTextEntry = YES; + } + return _ComPassTfView; +} + +- (UIButton *)sendBtn +{ + if (!_sendBtn) { + _sendBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _sendBtn.backgroundColor = PURPLECOLOUR; + _sendBtn.frame = CGRectMake(20,_ComPassTfView.bottom+30,KSCREEN_WIDTH-40, 40); + [_sendBtn setTitle:@"提交" forState:0]; + [_sendBtn setImageRoundRadius:6 BorderWidth:0 borderColor:NULL]; + [_sendBtn setTitleColor:UIColorFromRGB(0xffffff) forState:0]; + [_sendBtn addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside]; + } + return _sendBtn; +} + +/** + * 修改密码 + */ +- (void)btnClicked:(UIButton *)b +{ + if ([ZCNetRequestManager isConnectionAvailable] == 0) { + [MBProgressHUD showMessag:nil toView:self.view]; + return; + } + + if (!STR_IS_NOT_EMPTY(_NowPassTfView.titleTF.text)) { + [MBProgressHUD showError:@"请输入旧密码" toView:self.view]; + return; + }else if (!STR_IS_NOT_EMPTY(_NewPassTfView.titleTF.text)){ + [MBProgressHUD showError:@"请输入新密码" toView:self.view]; + return; + }else if (!STR_IS_NOT_EMPTY(_ComPassTfView.titleTF.text)){ + [MBProgressHUD showError:@"请再次输入新密码" toView:self.view]; + return; + }else if (![_NewPassTfView.titleTF.text isEqualToString:_ComPassTfView.titleTF.text]){ + [MBProgressHUD showError:@"新密码两次输入不一致" toView:self.view]; + return; + } + [MBProgressHUD showMessag:nil toView:self.view]; + NSDictionary *parameters = @{@"mobilephone":USER_PHONE, + @"password":_NowPassTfView.titleTF.text, + @"newpassword":_ComPassTfView.titleTF.text, + @"version":APP_VERSION}; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_user_modifyPwd block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + [MBProgressHUD hideHUDForView:self.view animated:YES]; + if ([resultDic[@"retcode"] intValue] == 1) { + [MBProgressHUD showSuccess:@"密码已修改,请重新登陆" toView:self.view]; + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + for (UIViewController *VC in self.navigationController.viewControllers) { + if ([VC isKindOfClass:[MineViewController class]]) { + [ZCTools cleanUserDefault]; + [self.navigationController popToViewController:VC animated:YES]; + break; + } + } + }); + + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; +} + +-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ + [self.view endEditing:YES]; +} + +- (BOOL)textFieldShouldReturn:(UITextField *)textField{ + return [textField resignFirstResponder]; +} + +- (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/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\350\256\276\347\275\256/SettingViewController.h" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\350\256\276\347\275\256/SettingViewController.h" new file mode 100644 index 0000000000000000000000000000000000000000..44de300188a46f23532c164baca92308dc07b9bb --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\350\256\276\347\275\256/SettingViewController.h" @@ -0,0 +1,13 @@ +// +// SettingViewController.h +// JQQY +// +// Created by chason on 2017/11/20. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "ZCRefreshTableViewController.h" + +@interface SettingViewController : ZCRefreshTableViewController + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\350\256\276\347\275\256/SettingViewController.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\350\256\276\347\275\256/SettingViewController.m" new file mode 100644 index 0000000000000000000000000000000000000000..f80c0172432eeb648f1eb1912cfafa6a0c5c9042 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Controller/\350\256\276\347\275\256/SettingViewController.m" @@ -0,0 +1,456 @@ +// +// SettingViewController.m +// JQQY +// +// Created by chason on 2017/11/20. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "SettingViewController.h" +#import "ModifyPwdViewController.h" +#import "ALLWebViewController.h" +#import "ZCAlertController.h" +#import "FileTool.h" +#import "FeedbackViewController.h" +#import "PhoneCodeViewController.h" + +#define CachePath [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject] + +@interface SettingViewController () +{ + NSDictionary *thirdDict; + NSString *thirdType; + int type; +} +@property (nonatomic, strong) NSArray *titleArr; +@property (nonatomic, assign) NSInteger totalSize; +@property (nonatomic, retain) UIView *footerView; + +@end + +@implementation SettingViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.title = @"设置"; + [self setTableViewFrame:CGRectMake(0, 0,KSCREEN_WIDTH, KSCREEN_HEIGHT-kTopHeight)]; + + // 获取文件夹尺寸 + [FileTool getFileSize:CachePath completion:^(NSInteger totalSize) { + _totalSize = totalSize; + [self.tableView reloadData]; + }]; + + [self requestData]; +} + +- (void)viewWillAppear:(BOOL)animated +{ + [super viewWillAppear:animated]; + [self.tableView reloadData]; +} + +- (NSArray *)titleArr { + if (!_titleArr) { + _titleArr = @[@[@"手机",@"微信",@"QQ",@"微博"],@[@"修改密码",@"清除缓存",@"意见反馈",@"关于我们"]]; + } + return _titleArr; +} + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView +{ + return [self.titleArr count]; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + return [self.titleArr[section] count]; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + return 50; +} + +- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section +{ + return [[UIView alloc] initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH, 15)]; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section +{ + return 15; +} + +- (UIView *)footerView +{ + if (!_footerView) { + _footerView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH, 90)]; + UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; + btn.frame = CGRectMake(25,30, KSCREEN_WIDTH-50, 40); + btn.backgroundColor = PURPLECOLOUR; + [btn setTitle:@"退 出" forState:0]; + btn.titleLabel.font = [UIFont systemFontOfSize:15]; + [btn setTitleColor:[UIColor whiteColor] forState:0]; + [btn addTarget:self action:@selector(exitApp) forControlEvents:UIControlEventTouchUpInside]; + [btn setImageRoundRadius:6 BorderWidth:0 borderColor:NULL]; + [_footerView addSubview:btn]; + } + return _footerView; +} + + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + static NSString *cellID = @"UITableViewCell"; + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID]; + if (!cell) { + cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellID]; + } + cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; + cell.selectionStyle = UITableViewCellSelectionStyleNone; + cell.textLabel.font = FFONT16; + cell.textLabel.textColor = MAIN_TEXTCOLOR; + cell.textLabel.text = self.titleArr[indexPath.section][indexPath.row]; + cell.detailTextLabel.textColor = UIColorFromRGB(0x9f9f9f); + if (indexPath.section == 0) { + switch (indexPath.row) { + case 0://手机 + { + cell.detailTextLabel.text = USER_PHONESTR; + }break; + + case 1://微信 + { + if([thirdDict[@"wechat"] intValue]==0){ + cell.detailTextLabel.text = @"未绑定"; + cell.detailTextLabel.textColor = UIColorFromRGB(0x3190e8); + }else if([thirdDict[@"wechat"] intValue]==1){ + cell.detailTextLabel.text = @"已绑定"; + cell.detailTextLabel.textColor = UIColorFromRGB(0x9f9f9f); + }else{ + cell.detailTextLabel.text = @""; + } + }break; + + case 2://QQ + { + if([thirdDict[@"qq"] intValue]==0){ + cell.detailTextLabel.text = @"未绑定"; + cell.detailTextLabel.textColor = UIColorFromRGB(0x3190e8); + }else if([thirdDict[@"qq"] intValue]==1){ + cell.detailTextLabel.text = @"已绑定"; + cell.detailTextLabel.textColor = UIColorFromRGB(0x9f9f9f); + }else{ + cell.detailTextLabel.text = @""; + } + }break; + + case 3://微博 + { + if([thirdDict[@"weibo"] intValue]==0){ + cell.detailTextLabel.text = @"未绑定"; + cell.detailTextLabel.textColor = UIColorFromRGB(0x3190e8); + }else if([thirdDict[@"weibo"] intValue]==1){ + cell.detailTextLabel.text = @"已绑定"; + cell.detailTextLabel.textColor = UIColorFromRGB(0x9f9f9f); + }else{ + cell.detailTextLabel.text = @""; + } + }break; + + default: + break; + } + }else if (indexPath.section == 1) { + switch (indexPath.row) { + case 0://修改密码 + { + cell.detailTextLabel.text = @""; + }break; + + case 1://清除缓存 + { + cell.detailTextLabel.text = [self sizeStr]; + }break; + + case 2://意见反馈 + { + cell.detailTextLabel.text = @""; + }break; + + case 3://关于我们 + { + cell.detailTextLabel.text = @""; + }break; + + default: + break; + } + } + return cell; +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + if (indexPath.section == 0) { + switch (indexPath.row) { + case 0://手机 + { + PhoneCodeViewController *phoneCodeVC = [[PhoneCodeViewController alloc] init]; + phoneCodeVC.phone = USER_PHONE; + phoneCodeVC.titleStr = @"换绑手机"; + phoneCodeVC.comeType = @"1"; + [self.navigationController pushViewController:phoneCodeVC animated:YES]; + }break; + + case 1://微信 + { + type = 1; + thirdType = @"微信"; + if([thirdDict[@"wechat"] intValue]==0){ + [self goSocialPlatform:UMShareToWechatSession]; + }else if([thirdDict[@"wechat"] intValue]==1){ + [self cancelBinding]; + } + }break; + + case 2://QQ + { + type = 2; + thirdType = @"QQ"; + if([thirdDict[@"qq"] intValue]==0){ + [self goSocialPlatform:UMShareToQQ]; + }else if([thirdDict[@"qq"] intValue]==1){ + [self cancelBinding]; + } + }break; + + case 3://微博 + { + type = 3; + thirdType = @"微博"; + if([thirdDict[@"weibo"] intValue]==0){ + [self goSocialPlatform:UMShareToSina]; + }else if([thirdDict[@"weibo"] intValue]==1){ + [self cancelBinding]; + } + }break; + + default: + break; + } + }else if (indexPath.section == 1) { + switch (indexPath.row) { + case 0://修改密码 + { + ModifyPwdViewController *modifyPwdVC = [[ModifyPwdViewController alloc] init]; + [self.navigationController pushViewController:modifyPwdVC animated:YES]; + }break; + + case 1://清除缓存 + { + [self clearCache]; + }break; + + case 2://意见反馈 + { + FeedbackViewController *feedbackVC = [[FeedbackViewController alloc] init]; + [self.navigationController pushViewController:feedbackVC animated:YES]; + }break; + + case 3://关于我们 + { + ALLWebViewController *about = [[ALLWebViewController alloc]init]; + about.titleName = @"关于我们"; + about.urlStr = [NSString stringWithFormat:@"%@%@%@",BASE_URL,URL_ABOUT,[ZCTools getAppVersion]]; + [self.navigationController pushViewController:about animated:YES]; + }break; + + default: + break; + } + } +} + +#pragma mark —————— 请求数据(进入设置页面就执行这个方法) —————— +- (void)requestData{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:@"网络异常" toView:self.view]; + return; + } + NSDictionary *parameters = @{ + @"userID":USER_USERID, + @"version":APP_VERSION, + }; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_user_setting block:^(NSDictionary *resultDic, NSError *error) { + if(resultDic){ + if([resultDic[@"retcode"] intValue] == 1){ + thirdDict = resultDic[@"message"]; + self.tableView.tableFooterView = self.footerView; + [self.tableView reloadData]; + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; +} + +#pragma mark —————— 换绑手机 —————— +- (void)changePhone +{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:@"网络异常" toView:self.view]; + return; + } + [MBProgressHUD showMessag:nil toView:self.view]; + NSDictionary *parameters = @{ + @"mobilephone":USER_PHONE, + @"action":@"6", + @"version":APP_VERSION, + }; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_code block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + [MBProgressHUD hideHUDForView:self.view animated:YES]; + if ([resultDic[@"retcode"] intValue] == 1) { + NSLog(@"验证码:%@",resultDic[@"phonecode"]); + PhoneCodeViewController *phoneCodeVC = [[PhoneCodeViewController alloc] init]; + phoneCodeVC.comeType = @"6"; + phoneCodeVC.phone = USER_PHONE; + phoneCodeVC.titleStr = @"换绑手机"; + [self.navigationController pushViewController:phoneCodeVC animated:YES]; + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; +} + + +#pragma mark —————— 绑定第三方 —————— +- (void)goSocialPlatform:(NSString *)snsName +{ + UMSocialSnsPlatform *snsPlatform = [UMSocialSnsPlatformManager getSocialPlatformWithName:snsName]; + snsPlatform.loginClickHandler(self,[UMSocialControllerService defaultControllerService],YES,^(UMSocialResponseEntity *response){ + if (response.responseCode == UMSResponseCodeSuccess) { + UMSocialAccountEntity *snsAccount = [[UMSocialAccountManager socialAccountDictionary] valueForKey:snsPlatform.platformName]; + [self binding:snsAccount]; + } + }); +} + +- (void) binding:(UMSocialAccountEntity *)snsAccount{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showMessag:nil toView:self.view]; + return; + } + NSDictionary *parameters = @{ + @"userID":USER_USERID, + @"usID":snsAccount.usid, + @"action":@"2", + @"type":[NSString stringWithFormat:@"%d",type], + @"version":APP_VERSION, + }; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_user_third_unwrap block:^(NSDictionary *resultDic, NSError *error) { + if(resultDic){ + if([resultDic[@"retcode"] intValue] == 1){ + NSLog(@"%@", resultDic[@"explanation"]); + [MBProgressHUD showSuccess:@"绑定成功" toView:self.view]; + [self requestData]; + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; +} + +#pragma mark —————— 解绑第三方 —————— +- (void)cancelBinding{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showMessag:nil toView:self.view]; + return; + } + NSMutableArray *titleArray = [NSMutableArray arrayWithArray:@[@"取消", @"确定"]]; + ZCAlertController *alertController = [ZCAlertController initZCAlertControllerWithTitle:[NSString stringWithFormat:@"确定解除%@绑定吗?",thirdType] message:nil style:@"1" titleArray:titleArray alertAction:^(NSInteger index) { + if (index == 1) { + NSDictionary *parameters = @{@"userID":USER_USERID, + @"action":@"3", + @"type":[NSString stringWithFormat:@"%d",type], + @"version":APP_VERSION}; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_user_third_unwrap block:^(NSDictionary *resultDic, NSError *error) { + if(resultDic){ + if([resultDic[@"retcode"] intValue] == 1){ + [MBProgressHUD showSuccess:@"解绑成功" toView:self.view]; + [self requestData]; + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.view]; + } + } + }]; + } + }]; + [alertController showZCAlert]; +} + +#pragma mark —————— 获取缓存尺寸字符串 —————— +- (NSString *)sizeStr +{ + NSInteger totalSize = _totalSize; + NSString *sizeStr = @"0KB"; + // MB KB B + if (totalSize > 1000 * 1000) { + // MB + CGFloat sizeF = totalSize / 1000.0 / 1000.0; + sizeStr = [NSString stringWithFormat:@"%.1fMB",sizeF]; + } else if (totalSize > 1000) { + // KB + CGFloat sizeF = totalSize / 1000.0; + sizeStr = [NSString stringWithFormat:@"%.1fKB",sizeF]; + } else if (totalSize > 0) { + // B + sizeStr = [NSString stringWithFormat:@"%.ldB",(long)totalSize]; + } + return sizeStr; +} + +#pragma mark —————— 清理缓存 —————— +- (void)clearCache{ + // 删除文件夹里面所有文件 + [FileTool removeDirectoryPath:CachePath]; + // 删除缓存之后,文件大小显示为0 + _totalSize = 0; + [self.tableView reloadData]; + [MBProgressHUD showSuccess:@"清理成功" toView:self.view]; +} + +#pragma mark —————— 退出 —————— +- (void)exitApp +{ + NSMutableArray *titleArray = [NSMutableArray arrayWithArray:@[@"再待一会",@"去意已决"]]; + ZCAlertController *alertController = [ZCAlertController initZCAlertControllerWithTitle:nil message:@"确定退出吗?" style:@"1" titleArray:titleArray alertAction:^(NSInteger index) { + if (index == 1) { + [ZCTools cleanUserDefault]; + //退出后发送通知刷新首页 + [[NSNotificationCenter defaultCenter] postNotificationName:@"refreshHome" object:nil]; + [self.navigationController popViewControllerAnimated:YES]; + } + }]; + [alertController showZCAlert]; +} + +- (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/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Model/.DS_Store" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Model/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..b61685c9fbccd7043075a986d8c5000dcf58cd8c Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Model/.DS_Store" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Model/MyCardModel.h" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Model/MyCardModel.h" new file mode 100644 index 0000000000000000000000000000000000000000..8999459e34407056b31806a30a20370e904954d0 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Model/MyCardModel.h" @@ -0,0 +1,29 @@ +// +// MyCardModel.h +// JQQY +// +// Created by Shmily on 2017/11/21. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import + +@interface MyCardModel : NSObject + +@property (nonatomic,copy) NSString * name; +@property (nonatomic,copy) NSString *ItemName; +@property (nonatomic,copy) NSString *enable; +@property (nonatomic,copy) NSString *unit; //单位 +@property (nonatomic,copy) NSString *nameid; //id + +@property (nonatomic,retain)NSString *max; +@property (nonatomic,retain)NSString *min; + + + +- (void)initRequest:(NSDictionary *)dict idx:(int)i; +- (void)initEduCation:(NSDictionary *)dict idx:(int)i; +- (void)initWork:(NSDictionary *)dict idx:(int)i; +- (void)initDetail:(NSDictionary *)dict idx:(int)i; + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Model/MyCardModel.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Model/MyCardModel.m" new file mode 100644 index 0000000000000000000000000000000000000000..6abd777a248dac0a9e01c1e53bdc2f66d497322a --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Model/MyCardModel.m" @@ -0,0 +1,153 @@ +// +// CardModel.m +// JQQY +// +// Created by Shmily on 2017/11/21. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "MyCardModel.h" +#import "QYPickerView.h" +@implementation MyCardModel + +- (void)setNameid:(NSString *)nameid +{ + if (_nameid) { + _nameid = nil; + } + _nameid = ToString(nameid); +} + +- (void)initRequest:(NSDictionary *)dict idx:(int)i +{ + switch (i) { + case 0:{ + _name = [ZCTools returnPersonInfoMax:dict[@"maxagerequest"] Min:dict[@"minagerequest"] Unit:@"岁"]; + _max = ToString(dict[@"maxagerequest"]); + _min = ToString(dict[@"minagerequest"]); + } + break; + case 1:{ + _name = [ZCTools returnPersonInfoMax:dict[@"maxheightrequest"] Min:dict[@"minheightrequest"] Unit:@"cm"]; + _max = ToString(dict[@"maxheightrequest"]); + _min = ToString(dict[@"minheightrequest"]); + } + break; + case 2:{ + _name = [QYPickerView degreeChinese:dict[@"degreerequest"] req:YES]; + _nameid = ToString(dict[@"degreerequest"]); + } + break; + case 3:{ + _name = [QYPickerView inComeChinese:dict[@"incomerequest"] req:YES]; + _nameid = ToString(dict[@"incomerequest"]); + + } + break; + case 4:{ + _name = [QYPickerView inHouseChinese:dict[@"houserequest"] req:NO]; + _nameid = ToString(dict[@"houserequest"]); + + } + break; + case 5:{ + _name = [QYPickerView inCarChinese:dict[@"carrequest"] req:NO]; + _nameid = ToString(dict[@"carrequest"]); + } + break; + case 6:{ + _name = dict[@"locationrequest"]; + } + break; + default: + break; + } +} + +- (void)initEduCation:(NSDictionary *)dict idx:(int)i +{ + switch (i) { + case 0:{ + _name = [QYPickerView degreeChinese:dict[@"degree"] req:NO]; + _nameid = ToString(dict[@"degree"]); + } + break; + case 1:{ + _name =[ZCTools judgeIsRight:dict[@"school"] unit:nil]; + } + break; + default: + break; + } +} + +- (void)initWork:(NSDictionary *)dict idx:(int)i +{ + switch (i) { + case 0:{ + _name = [QYPickerView professionChinese:dict[@"profession"] req:NO]; + _nameid = ToString(dict[@"profession"]); + } + break; + case 1:{ + _name = [QYPickerView inComeChinese:dict[@"income"] req:NO]; + _nameid = ToString(dict[@"income"]); + + } + break; + case 2:{ + _name = STR_IS_NOT_EMPTY(dict[@"enterprise"])?dict[@"enterprise"]:@"未认证"; + } + break; + default: + break; + } +} + + +- (void)initDetail:(NSDictionary *)dict idx:(int)i +{ + switch (i) { + + case 0: + _name = [ZCTools judgeIsRight:dict[@"nickname"] unit:nil]; + break; + case 1: + _name = [QYPickerView inNationChinese:dict[@"nation"]]; + _nameid = ToString(dict[@"nation"]); + break; + case 2: + _name = [ZCTools judgeIsRight:dict[@"height"] unit:@"cm"]; + _nameid = ToString(dict[@"height"]); + break; + case 3: + _name = [ZCTools judgeIsRight:dict[@"weight"] unit:@"kg"]; + _nameid = ToString(dict[@"weight"]); + break; + case 4: + _name = [ZCTools judgeIsRight:dict[@"localplace"] unit:nil]; + break; + case 5: + _name = [ZCTools judgeIsRight:dict[@"origo"] unit:nil]; + break; + case 6: + _name = [QYPickerView inMarrageChinese:dict[@"marrige"]]; + _nameid = ToString(dict[@"marrige"]); + break; + case 7: + _name = [QYPickerView inCarChinese:dict[@"ifcar"] req:NO]; + _nameid = ToString(dict[@"ifcar"]); + break; + case 8: + _name = [QYPickerView inHouseChinese:dict[@"ifhouse"] req:NO]; + _nameid = ToString(dict[@"ifhouse"]); + break; + default: + break; + } +} + + + + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Model/MyTicketModel.h" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Model/MyTicketModel.h" new file mode 100644 index 0000000000000000000000000000000000000000..57efb582ed41d963562152f54031c0df5884612f --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Model/MyTicketModel.h" @@ -0,0 +1,24 @@ +// +// MyTicketModel.h +// JQ_ELOVE +// +// Created by chason on 2017/3/30. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import + +@interface MyTicketModel : NSObject + +@property (nonatomic, assign) NSInteger action; +@property (nonatomic, strong) NSString *actaddress; +@property (nonatomic, strong) NSString *acttime; +@property (nonatomic, strong) NSString *acttitle; +@property (nonatomic, strong) NSString *money; +@property (nonatomic, strong) NSString *ticket; +@property (nonatomic, strong) NSString *tickettime; +@property (nonatomic, assign) NSInteger ifuse; // 0正常 1已使用 2已过期 + +- (void)initMyTicketModel:(NSDictionary *)myTicketModelDict; + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Model/MyTicketModel.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Model/MyTicketModel.m" new file mode 100644 index 0000000000000000000000000000000000000000..ce2622997194c3feaebecbcdd2b6c4e610a69797 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Model/MyTicketModel.m" @@ -0,0 +1,26 @@ +// +// MyTicketModel.m +// JQ_ELOVE +// +// Created by chason on 2017/3/30. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import "MyTicketModel.h" + +@implementation MyTicketModel + +- (void)initMyTicketModel:(NSDictionary *)myTicketModelDict{ + if (myTicketModelDict) { + _action = [myTicketModelDict[@"action"] intValue]; + _actaddress = ToString(myTicketModelDict[@"actaddress"]); + _acttime = ToString(myTicketModelDict[@"acttime"]); + _acttitle = ToString(myTicketModelDict[@"acttitle"]); + _money = ToString(myTicketModelDict[@"money"]); + _ticket = ToString(myTicketModelDict[@"ticket"]); + _tickettime = ToString(myTicketModelDict[@"tickettime"]); + _ifuse = [myTicketModelDict[@"ifuse"] intValue]; + } +} + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Model/PersonalInfoModel.h" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Model/PersonalInfoModel.h" new file mode 100644 index 0000000000000000000000000000000000000000..31d28ecc8f968e1c8244c13225078258e44c91c4 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Model/PersonalInfoModel.h" @@ -0,0 +1,130 @@ +// +// PersonalInfoModel.h +// JQ_ELOVE +// +// Created by chason on 2016/11/17. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import + +@interface PersonalInfoModel : NSObject + +/** + * ID + */ +@property (nonatomic, strong) NSString *userid; +/** + * 昵称 + */ +@property (nonatomic, strong) NSString *nickname; +/** + * 性别 + */ +@property (nonatomic, strong) NSString *sex; +/** + * 生日 + */ +@property (nonatomic, strong) NSString *birthday; +/** + * 年龄 + */ +@property (nonatomic, strong) NSString *age; +/** + * 民族 + */ +@property (nonatomic, strong) NSString *nation; +/** + * 故乡 + */ +@property (nonatomic, strong) NSString *hometown; +/** + * 身高 + */ +@property (nonatomic, strong) NSString *height; +/** + * 学历 + */ +@property (nonatomic, strong) NSString *education; +/** + * 职业 + */ +@property (nonatomic, strong) NSString *profession; +/** + * 公司 + */ +@property (nonatomic, strong) NSString *company; +/** + * 年收入 + */ +@property (nonatomic, strong) NSString *income; +/** + * 所在地 + */ +@property (nonatomic, strong) NSString *location; +/** + * 婚姻状况 + */ +@property (nonatomic, strong) NSString *maritalStatus; +/** + * 购房情况 + */ +@property (nonatomic, strong) NSString *house; +/** + * 购车情况 + */ +@property (nonatomic, strong) NSString *car; +/** + * 年龄要求 + */ +@property (nonatomic, strong) NSString *ageRequest; +/** + * 身高要求 + */ +@property (nonatomic, strong) NSString *heightRequest; +/** + * 学历要求 + */ +@property (nonatomic, strong) NSString *educationRequest; +/** + * 年薪要求 + */ +@property (nonatomic, strong) NSString *incomeRequest; +/** + * 地区要求 + */ +@property (nonatomic, strong) NSString *locationRequest; +/** + * 购房要求 + */ +@property (nonatomic, strong) NSString *houseRequest; +/** + * 购车要求 + */ +@property (nonatomic, strong) NSString *carRequest; +/** + * 今日访客 + */ +@property (nonatomic, strong) NSString *visitortodaynum; +/** + * 访客总数 + */ +@property (nonatomic, strong) NSString *visitornum; +/** + * 初始化方法 + */ +@property (nonatomic, strong) NSString *minagerequest; + +@property (nonatomic, strong) NSString *maxagerequest; + + +@property (nonatomic, strong) NSString *minheightrequest; + + +@property (nonatomic, strong) NSString *maxheightrequest; + + + +- (void)initPersonalInfoModel:(NSDictionary *)personalInfoDict; + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Model/PersonalInfoModel.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Model/PersonalInfoModel.m" new file mode 100644 index 0000000000000000000000000000000000000000..c26170b4b500625cd96ade010054b4e45358a9da --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Model/PersonalInfoModel.m" @@ -0,0 +1,154 @@ +// +// PersonalInfoModel.m +// JQ_ELOVE +// +// Created by chason on 2016/11/17. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "PersonalInfoModel.h" +#import "NSString+transform.h" + +@implementation PersonalInfoModel + +- (void)initPersonalInfoModel:(NSDictionary *)personalInfoDict{ + if(personalInfoDict){ + //id + self.userid = ToString(personalInfoDict[@"IDNum"]); + //昵称 + self.nickname = ToString(personalInfoDict[@"nickname"]) ; + //性别 + self.sex = [ZCTools judgeSex:personalInfoDict[@"sex"]]; + //生日 + self.birthday = ToString(personalInfoDict[@"birthday"]); + //年龄 + self.age = ToString(personalInfoDict[@"age"]); + //民族 + if(![ToString(personalInfoDict[@"nation"]) isEqualToString:@"0"]){ + self.nation = [[NSString stringWithFormat:@"%@", ToString(personalInfoDict[@"nation"])] stringNationReplacingChinese]; + }else{ + self.nation = @"未填"; + } + //籍贯 + if(STR_IS_NOT_EMPTY(ToString(personalInfoDict[@"origo"]))){ + self.hometown = ToString(personalInfoDict[@"origo"]); + }else{ + self.hometown = @"未填"; + } + //身高 + if(STR_IS_NOT_EMPTY(ToString(personalInfoDict[@"height"]))){ + self.height = [NSString stringWithFormat:@"%@cm", ToString(personalInfoDict[@"height"])]; + }else{ + self.height = @"未填"; + } + //学历 + self.education = [[NSString stringWithFormat:@"%.1f", [personalInfoDict[@"degree"] floatValue]] stringDegreeByReplacingChinese]; + //职业 + self.profession = [[NSString stringWithFormat:@"%@", ToString(personalInfoDict[@"profession"])] stringProfessionReplacingChinese]; + //公司 + if(STR_IS_NOT_EMPTY(ToString(personalInfoDict[@"enterprise"]))){ + self.company = ToString(personalInfoDict[@"enterprise"]); + }else{ + self.company = @"未认证"; + } + //年收入 + self.income = [[NSString stringWithFormat:@"%.1f", [personalInfoDict[@"income"] floatValue]] stringInComeByReplacingChinese]; + //居住地 + self.location = ToString(personalInfoDict[@"localplace"]); + //婚姻状态 + if(![ToString(personalInfoDict[@"marrige"]) isEqualToString:@"0"]){ + self.maritalStatus = [[NSString stringWithFormat:@"%@", ToString(personalInfoDict[@"marrige"])] stringMarrageByReplacingChinese]; + }else{ + self.maritalStatus = @"未填"; + } + //购房情况 + if([personalInfoDict[@"ifhouse"] intValue] == 2){ + self.house = @"已购房"; + }else if([personalInfoDict[@"ifhouse"] intValue] == 0){ + self.house = @"未填"; + }else{ + self.house = @"未购房"; + } + //购车情况 + if([personalInfoDict[@"ifcar"] intValue] == 2){ + self.car = @"已购车"; + }else if([personalInfoDict[@"ifcar"] intValue] == 0){ + self.car = @"未填"; + }else{ + self.car = @"未购车"; + } + + self.minagerequest = ToString(personalInfoDict[@"minagerequest"]); + self.maxagerequest = ToString(personalInfoDict[@"maxagerequest"]); + self.minheightrequest = ToString(personalInfoDict[@"minheightrequest"]); + self.maxheightrequest = ToString(personalInfoDict[@"maxheightrequest"]); + + + if([personalInfoDict[@"minagerequest"] intValue] == 0 && [personalInfoDict[@"maxagerequest"] intValue] == 0){ + self.ageRequest = @"未填"; + }else if([personalInfoDict[@"minagerequest"] intValue] == -1 && [personalInfoDict[@"maxagerequest"] intValue] == -1){ + self.ageRequest = @"不限"; + }else if([personalInfoDict[@"minagerequest"] intValue] != -1 && [personalInfoDict[@"maxagerequest"] intValue] != -1){ + if([personalInfoDict[@"minagerequest"] intValue] == [personalInfoDict[@"maxagerequest"] intValue]){ + self.ageRequest = [NSString stringWithFormat:@"%@岁",personalInfoDict[@"minagerequest"]]; + }else{ + self.ageRequest = [NSString stringWithFormat:@"%@~%@岁",personalInfoDict[@"minagerequest"],personalInfoDict[@"maxagerequest"]]; + } + }else if([personalInfoDict[@"minagerequest"] intValue] != -1 && [personalInfoDict[@"maxagerequest"] intValue] == -1){ + self.ageRequest = [NSString stringWithFormat:@"%@岁以上",personalInfoDict[@"minagerequest"]]; + }else if([personalInfoDict[@"minagerequest"] intValue] == -1 && [personalInfoDict[@"maxagerequest"] intValue] != -1){ + self.ageRequest = [NSString stringWithFormat:@"%@岁以下",personalInfoDict[@"maxagerequest"]]; + } + + if([personalInfoDict[@"minheightrequest"] intValue] == 0 && [personalInfoDict[@"maxheightrequest"] intValue] == 0){ + self.heightRequest = @"未填"; + }else if([personalInfoDict[@"minheightrequest"] intValue] == -1 && [personalInfoDict[@"maxheightrequest"] intValue] == -1){ + self.heightRequest = @"不限"; + }else if([personalInfoDict[@"minheightrequest"] intValue] != -1 && [personalInfoDict[@"maxheightrequest"] intValue] != -1){ + if([personalInfoDict[@"minheightrequest"] intValue] == [personalInfoDict[@"maxheightrequest"] intValue]){ + self.heightRequest = [NSString stringWithFormat:@"%@cm",personalInfoDict[@"minheightrequest"]]; + }else{ + self.heightRequest = [NSString stringWithFormat:@"%@~%@cm",personalInfoDict[@"minheightrequest"],personalInfoDict[@"maxheightrequest"]]; + } + }else if([personalInfoDict[@"minheightrequest"] intValue] != -1 && [personalInfoDict[@"maxheightrequest"] intValue] == -1){ + self.heightRequest = [NSString stringWithFormat:@"%@cm以上",personalInfoDict[@"minheightrequest"]]; + }else if([personalInfoDict[@"minheightrequest"] intValue] == -1 && [personalInfoDict[@"maxheightrequest"] intValue] != -1){ + self.heightRequest = [NSString stringWithFormat:@"%@cm以下",personalInfoDict[@"maxheightrequest"]]; + } + + self.educationRequest = [[NSString stringWithFormat:@"%.1f", [personalInfoDict[@"degreerequest"] floatValue]] stringDegreeByReplacingChinese]; + + self.incomeRequest = [[NSString stringWithFormat:@"%.1f", [personalInfoDict[@"incomerequest"] floatValue]] stringInComeByReplacingChinese]; + + if(STR_IS_NOT_EMPTY(ToString(personalInfoDict[@"locationrequest"]))){ + if([ToString(personalInfoDict[@"locationrequest"]) isEqualToString:@"-1"]){ + self.locationRequest = @"不限"; + }else{ + self.locationRequest = ToString(personalInfoDict[@"locationrequest"]); + } + }else{ + self.locationRequest = @"未填"; + } + if([personalInfoDict[@"houserequest"] intValue] == 2){ + self.houseRequest = @"已购房"; + }else if([personalInfoDict[@"houserequest"] intValue] == 0){ + self.houseRequest = @"未填"; + }else{ + self.houseRequest = @"不限"; + } + if([personalInfoDict[@"carrequest"] intValue] == 2){ + self.carRequest = @"已购车"; + }else if([personalInfoDict[@"carrequest"] intValue] == 0){ + self.carRequest = @"未填"; + }else{ + self.carRequest = @"不限"; + } + self.visitortodaynum = ToString(personalInfoDict[@"visitortodaynum"]); + self.visitornum = ToString(personalInfoDict[@"visitornum"]); + } +} + + + + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Model/PhotoModel.h" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Model/PhotoModel.h" new file mode 100644 index 0000000000000000000000000000000000000000..54a890e5ddc493f5e806878ef60cbc6a6cd0377a --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Model/PhotoModel.h" @@ -0,0 +1,22 @@ +// +// PhotoModel.h +// JQ_ELOVE +// +// Created by Shmily on 16/7/4. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import +#import +@interface PhotoModel : NSObject + +@property (nonatomic, strong) NSString *photosId; +@property (nonatomic, strong) NSString *picUrl; +@property (nonatomic, strong) NSString *picUrlcut; +@property (nonatomic, strong) UIImage *photoIV; +@property BOOL phSelectID; + +- (void)initData:(NSDictionary *)dict; + + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Model/PhotoModel.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Model/PhotoModel.m" new file mode 100644 index 0000000000000000000000000000000000000000..b388f43a56c750ba3d578571d700ba64830fe432 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Model/PhotoModel.m" @@ -0,0 +1,25 @@ +// +// PhotoModel.m +// JQ_ELOVE +// +// Created by Shmily on 16/7/4. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "PhotoModel.h" + +@implementation PhotoModel + +- (void)initData:(NSDictionary *)dict +{ + if (dict) { + self.picUrl = dict[@"picUrl"]; + self.picUrlcut = dict[@"picUrlcut"]; + self.phSelectID = NO; + self.photosId = dict[@"photosId"]; + } + +} + + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/.DS_Store" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..a1877cc9ecc041a9f958ca8d5cdfbb224f7a31e6 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/.DS_Store" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/addMark@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/addMark@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..3ce48f6dace748fbee8998575373e7c6883a6088 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/addMark@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/addMark@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/addMark@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..27c05137921bd790649c5886f860facd466959aa Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/addMark@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/arrow_down@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/arrow_down@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..d456f7a4b29fe5e16ad1f03f1cabb92ed75f0ccb Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/arrow_down@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/arrow_down@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/arrow_down@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..a315bd21a5c9c4c080f4b51db1a034ce225ce648 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/arrow_down@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/arrow_up@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/arrow_up@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..75e3401a90871db890050b832b2444c1e66cc9e1 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/arrow_up@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/arrow_up@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/arrow_up@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..0790cf3acd2b0b8ee855e2cfc6516811db7edee9 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/arrow_up@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/id@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/id@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..81c4580c532f0696bd2e53e4e67bc532b9215559 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/id@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/id@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/id@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..61e382d119f6faf313f1dfe345663aeac6013eb2 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/id@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/idnorm@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/idnorm@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..25def8ac9856e4e4cabc56b8a6a950b025193dd0 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/idnorm@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/idnorm@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/idnorm@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..c67c992742e981480ae76f981e5be3f61bcd70ab Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/idnorm@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/luzhi@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/luzhi@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..b870bb2e07cb571678bf8eeee50657dd300170a1 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/luzhi@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/luzhi@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/luzhi@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..4a12892bde958951baf1863764f745d95eb20747 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/luzhi@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-as@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-as@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..33ac2fed850c7f43ec9286578bcb9141574195d4 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-as@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-as@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-as@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..881c91ef9057257aff35d7f2fce406dec8d37241 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-as@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-bbt@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-bbt@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..189ade506ff77ac1e29394a8be2c6f288bb2e11f Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-bbt@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-bbt@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-bbt@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..ab27835213647a8eab98605c68693c2344d23241 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-bbt@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-cjd@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-cjd@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..97d48185cf16d6d681074e9b3fe2cb11c17e8207 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-cjd@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-cjd@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-cjd@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..3390e60e3f0f3fd1fe0bd8c6ffb02ccf7159463c Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-cjd@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-dg@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-dg@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..68c37767e0b9d4fae5e7916e4511fa785d2ab8ac Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-dg@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-dg@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-dg@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..e954a191a0d9d89285ccf0f2be3a8987d757f756 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-dg@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-dsg@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-dsg@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..73688fbaca8c57209e99e45810bc4c10d216e1b9 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-dsg@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-dsg@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-dsg@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..0108d91545bca3cf39dc283928fc9e0ca6e1b8e0 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-dsg@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-dz@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-dz@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..6115d652f06e50d827c5fc1d073058e2b2973cf1 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-dz@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-dz@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-dz@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..86774e48d8b16dd2eb2818c2d4c8fb33290057be Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-dz@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-fj@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-fj@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..02ffe4bd0dcb03873885138897b4d8753d916cd8 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-fj@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-fj@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-fj@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..1dd3ee1519c4859d175a421017ed0590727c5125 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-fj@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-fw@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-fw@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..fea37054977b30f8565cab3b2bbd9280aeb79cce Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-fw@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-fw@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-fw@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..e488cc45de2873380e2fd56be423d5d05f9fb74e Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-fw@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-jz@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-jz@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..6ffeb5d1893fda612e9caf7d54e5a44348b35bb2 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-jz@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-jz@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-jz@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..d6ea15a5ef9bab418433c95ae95cee284589f4b8 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-jz@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-kh@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-kh@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..5703a622c85304011924982b3acc2edf4242fb9b Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-kh@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-kh@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-kh@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..6e98b9ba2064e6d5d421e8ca8395a68a88138832 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-kh@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-mg1@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-mg1@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..1b01dad03e0c7c5ff8166eb17640490f19353f99 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-mg1@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-mg1@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-mg1@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..6b26af02a7a7e10c9d9e4b8297c15c374e65508d Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-mg1@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-mg3@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-mg3@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..c41aeab25fb34c930820ded7142751c4aae26305 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-mg3@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-mg3@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-mg3@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..ff479617e77ecd77c959dfea9d966aea63b22eef Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-mg3@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-mg99@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-mg99@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..c9058220b83e9b89e2edfddc2a97d0b63589521e Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-mg99@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-mg99@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-mg99@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..2b4b96595458134b4864f602f193934c2f292df5 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-mg99@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-pj@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-pj@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..1c6924071485ee9db3d6a04fe6f4adf7d536ed80 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-pj@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-pj@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-pj@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..3cfb23fc7d2bdba30c87c6587ed9da6b935f3ff2 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-pj@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-qkl@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-qkl@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..fa7e52f10ef70758c72e7f502f5ff63d4a399282 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-qkl@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-qkl@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-qkl@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..849047e4e566e63abf6545fa1ccb150ff159d782 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-qkl@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-yb@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-yb@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..5aa9b28bb1d225f5ac1ce741f058e55d9e2e8b97 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-yb@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-yb@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-yb@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..dd410e516610d6bb4d836adff53f452663519f80 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-yb@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-yt@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-yt@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..e1f107b56f919f80f5d9656fb0c957f50970379e Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-yt@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-yt@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-yt@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..9eaebbac4ad0e70bcc46f5e30ed39821ee731467 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/lw-yt@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/my_card@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/my_card@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..2be94de7ce9be450d235d309d238c10adf484630 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/my_card@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/my_card@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/my_card@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..7b903bb14ffeac3f39c0c0444356d600bb41af64 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/my_card@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/name@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/name@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..848a93ca81e1d51cf49829c82fa5326fc8411fab Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/name@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/name@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/name@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..9752b0d662635cf5992a1be3ed6c1b22dbf0ae46 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/name@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/nation.plist" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/nation.plist" new file mode 100644 index 0000000000000000000000000000000000000000..5e2002b2cb8d7b17f2f77c52c577e2cbdb065fb8 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/nation.plist" @@ -0,0 +1,62 @@ + + + + + 汉族 + 蒙古族 + 回族 + 藏族 + 维吾尔族 + 苗族 + 彝族 + 壮族 + 布依族 + 朝鲜族 + 满族 + 侗族 + 瑶族 + 白族 + 土家族 + 哈尼族 + 哈萨克族 + 傣族 + 黎族 + 僳僳族 + 佤族 + 畲族 + 高山族 + 拉祜族 + 水族 + 东乡族 + 纳西族 + 景颇族 + 柯尔克孜族 + 土族 + 达斡尔族 + 仫佬族 + 羌族 + 布朗族 + 撒拉族 + 毛南族 + 仡佬族 + 锡伯族 + 阿昌族 + 普米族 + 塔吉克族 + 怒族 + 乌孜别克族 + 俄罗斯族 + 鄂温克族 + 德昂族 + 保安族 + 裕固族 + 京族 + 塔塔尔族 + 独龙族 + 鄂伦春族 + 赫哲族 + 门巴族 + 珞巴族 + 基诺族 + + diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/norDuigou@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/norDuigou@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..c523c82ee2a980b4c80fdd91e7ebcc8727ab9423 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/norDuigou@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/norDuigou@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/norDuigou@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..c523c82ee2a980b4c80fdd91e7ebcc8727ab9423 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/norDuigou@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/phone_editor@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/phone_editor@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..b69a35404142f49c9d12f82bdb50965d78107f20 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/phone_editor@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/phone_editor@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/phone_editor@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..6c12adcfb6ee7cf387ead0d24061d20361ba6982 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/phone_editor@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/qdcg@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/qdcg@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..962822cb74c651d771e8179bc27baeaade6412cc Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/qdcg@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/qdcg@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/qdcg@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..c1c1ac6d2423daa3e61296775ee028c6faa6a659 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/qdcg@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/selectDuigou@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/selectDuigou@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..f7565c0a42efe0f0ea1bd0eb950105c80d601d4e Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/selectDuigou@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/selectDuigou@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/selectDuigou@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..2405bcc2c27e8976c01f5fb9e1d71ab04e59650e Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/selectDuigou@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/setting_icon@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/setting_icon@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..7212428b3e2996586c19543782262ee5be5bdab7 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/setting_icon@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/setting_icon@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/setting_icon@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..524e2ab662c453da4c0df1f74fdf73b6063a2b75 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/setting_icon@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/slw-lwh@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/slw-lwh@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..38547352b99e22f728d1c7e396ca03e4b9304241 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/slw-lwh@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/slw-lwh@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/slw-lwh@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..38547352b99e22f728d1c7e396ca03e4b9304241 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/slw-lwh@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/starBackImage@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/starBackImage@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..caf633478d3e183fc840456414bd234a27529dea Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/starBackImage@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/starBackImage@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/starBackImage@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..b67d1268f7ca1715a15640d82919e51b99a5fe7c Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/starBackImage@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/starImage@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/starImage@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..d703f82f503c5447474c6480d387b9e7bc94c44f Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/starImage@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/starImage@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/starImage@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..54f2c943533579554e603a4210715d6c34cf0df6 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/starImage@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/wdqb-gq@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/wdqb-gq@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..a4b9f9a85f0ab196423539bc761eaec6e3f9b0dd Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/wdqb-gq@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/wdqb-gq@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/wdqb-gq@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..d76dd7aaa26878b42d49d80503cde8f83f56b564 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/wdqb-gq@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/wdqb-rcq-h@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/wdqb-rcq-h@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..5eade0c1d313cfca2acfd38d1a7898595e31aabc Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/wdqb-rcq-h@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/wdqb-rcq-h@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/wdqb-rcq-h@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..42c33d17d596f3cab69d73e51251256d9fb2f2d2 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/wdqb-rcq-h@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/wdqb-rcq@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/wdqb-rcq@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..d7b10edfa46c10a6fa893342e20406a79d8f30a2 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/wdqb-rcq@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/wdqb-rcq@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/wdqb-rcq@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..4c93951ea3fb6397476a043359f443f909a2f6e5 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/wdqb-rcq@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/wdqb-xjq-h@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/wdqb-xjq-h@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..2aec864d96727ff2458c68c9807e124827ac9482 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/wdqb-xjq-h@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/wdqb-xjq-h@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/wdqb-xjq-h@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..9a64cf097260d5c7133fee85a82bdc98a0bce8df Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/wdqb-xjq-h@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/wdqb-xjq@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/wdqb-xjq@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..0822f89f59fa38814a7979f742545286e93bee40 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/wdqb-xjq@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/wdqb-xjq@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/wdqb-xjq@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..1116bbc44e49767a498430dc17bd186be3d8efab Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/wdqb-xjq@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/wdqb-ysy@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/wdqb-ysy@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..27456035568d142972cb85defb4902497419f483 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/wdqb-ysy@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/wdqb-ysy@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/wdqb-ysy@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..f700e5e00a7fc45c4545ab38ce24245a8b987400 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/wdqb-ysy@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/wenhao@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/wenhao@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..62186bb307d758cf7c30b2d5dedbe0df80102675 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/wenhao@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/wenhao@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/wenhao@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..8b49f7b0ebba21b9a20357d6ac4c88d306f846b4 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/wenhao@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/zl-shipin@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/zl-shipin@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..60095ccf1fbfb04c028268b42ec84ebc85c9c655 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/zl-shipin@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/zl-shipin@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/zl-shipin@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..917a8c9587549cfe56516186f4f68b7bf803ee0d Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/zl-shipin@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/zl-shiping@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/zl-shiping@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..9f58f95b3c9aabdc42c97756aadca1c1f7d64f87 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/zl-shiping@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/zl-shiping@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/zl-shiping@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..eb36f5938a3a36535e3262b71011f5aab4757475 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/zl-shiping@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\346\210\221\347\232\204/.DS_Store" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\346\210\221\347\232\204/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..9dea56e3ebda7adaef297b7f70ad8da5bd000494 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\346\210\221\347\232\204/.DS_Store" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\346\210\221\347\232\204/mine_0_0@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\346\210\221\347\232\204/mine_0_0@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..8075950f2d43846c548f5903c6a0fe9aeda06cd3 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\346\210\221\347\232\204/mine_0_0@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\346\210\221\347\232\204/mine_0_0@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\346\210\221\347\232\204/mine_0_0@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..8dd9806c9140d9b878c2645eec3fde3b120a19ee Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\346\210\221\347\232\204/mine_0_0@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\346\210\221\347\232\204/mine_0_1@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\346\210\221\347\232\204/mine_0_1@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..d42f55bfb56eded3171bba00c5cfe2a10930e183 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\346\210\221\347\232\204/mine_0_1@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\346\210\221\347\232\204/mine_0_1@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\346\210\221\347\232\204/mine_0_1@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..b8eb00a0684bb9b8739424407ee4771e2e2f8825 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\346\210\221\347\232\204/mine_0_1@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\346\210\221\347\232\204/mine_1_0@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\346\210\221\347\232\204/mine_1_0@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..990a0af3c8194efbcab7f0e6e69031420bb8d53a Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\346\210\221\347\232\204/mine_1_0@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\346\210\221\347\232\204/mine_1_0@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\346\210\221\347\232\204/mine_1_0@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..b8285f0cb99b72ec882ddb9852516890dabab7b2 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\346\210\221\347\232\204/mine_1_0@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\346\210\221\347\232\204/mine_1_1@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\346\210\221\347\232\204/mine_1_1@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..892222485f72cf7078801b599ecff66a782375fc Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\346\210\221\347\232\204/mine_1_1@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\346\210\221\347\232\204/mine_1_1@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\346\210\221\347\232\204/mine_1_1@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..020ca717338a88fa158851dcea34c2afc134be5d Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\346\210\221\347\232\204/mine_1_1@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\346\210\221\347\232\204/mine_1_2@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\346\210\221\347\232\204/mine_1_2@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..2020a456c1ef2ff0ec5a1b9b27f916eb4c69ddc9 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\346\210\221\347\232\204/mine_1_2@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\346\210\221\347\232\204/mine_1_2@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\346\210\221\347\232\204/mine_1_2@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..75127e9c793ab399394d861014473630861a7b2d Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\346\210\221\347\232\204/mine_1_2@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\346\210\221\347\232\204/mine_2_0@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\346\210\221\347\232\204/mine_2_0@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..87daf949d132a84e0c4fbfb18649a4799183381a Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\346\210\221\347\232\204/mine_2_0@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\346\210\221\347\232\204/mine_2_0@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\346\210\221\347\232\204/mine_2_0@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..8c58b1aee666504c9cda2ac6f915db19179cd6de Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\346\210\221\347\232\204/mine_2_0@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\346\210\221\347\232\204/mine_2_1@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\346\210\221\347\232\204/mine_2_1@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..4973ec8925aae8d2d5f76596f063093a30bb0ab7 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\346\210\221\347\232\204/mine_2_1@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\346\210\221\347\232\204/mine_2_1@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\346\210\221\347\232\204/mine_2_1@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..03bf2784d78934129c119bf211342b34b4202f34 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\346\210\221\347\232\204/mine_2_1@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\350\256\244\350\257\201/Bitmap1@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\350\256\244\350\257\201/Bitmap1@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..6840a57fce0c59bd414d5e41c6348fc73b275f01 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\350\256\244\350\257\201/Bitmap1@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\350\256\244\350\257\201/Bitmap1@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\350\256\244\350\257\201/Bitmap1@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..d8de2c2e9f13305e9b3b74ac30aa8420f5ec2dac Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\350\256\244\350\257\201/Bitmap1@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\350\256\244\350\257\201/Bitmap2@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\350\256\244\350\257\201/Bitmap2@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..ab9ae41d2adde1ae6b7901e0de48c57a29018891 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\350\256\244\350\257\201/Bitmap2@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\350\256\244\350\257\201/Bitmap2@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\350\256\244\350\257\201/Bitmap2@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..049eaadea4544e3f6ba720880354e857b30736eb Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\350\256\244\350\257\201/Bitmap2@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\350\256\244\350\257\201/Bitmap3@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\350\256\244\350\257\201/Bitmap3@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..a6105bedb48e7f1521910bbbaab88aca77a14038 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\350\256\244\350\257\201/Bitmap3@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\350\256\244\350\257\201/Bitmap3@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\350\256\244\350\257\201/Bitmap3@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..9086a3a0339347716a173282f4db29dec1b6c792 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\350\256\244\350\257\201/Bitmap3@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\350\256\244\350\257\201/Bitmap4@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\350\256\244\350\257\201/Bitmap4@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..d4c6fb1629399a792e4645de62693bc53e23d3b2 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\350\256\244\350\257\201/Bitmap4@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\350\256\244\350\257\201/Bitmap4@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\350\256\244\350\257\201/Bitmap4@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..eaae74da09292df28f6cab8388d5275c646f200f Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\350\256\244\350\257\201/Bitmap4@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\350\256\244\350\257\201/Bitmap5@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\350\256\244\350\257\201/Bitmap5@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..06a4efff229a1301e45054cb6dec19af03226067 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\350\256\244\350\257\201/Bitmap5@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\350\256\244\350\257\201/Bitmap5@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\350\256\244\350\257\201/Bitmap5@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..4bd05f70ed0eb460195759b12e2e3f711d729389 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\350\256\244\350\257\201/Bitmap5@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\350\256\244\350\257\201/Bitmap6@2x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\350\256\244\350\257\201/Bitmap6@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..143852cf9b6a9cd39e5cdf558c660acb3cf20b6a Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\350\256\244\350\257\201/Bitmap6@2x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\350\256\244\350\257\201/Bitmap6@3x.png" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\350\256\244\350\257\201/Bitmap6@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..4fd3ddb4cbae7d9579d2d1b6fb0c1d9623f63f91 Binary files /dev/null and "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/Resource/\350\256\244\350\257\201/Bitmap6@3x.png" differ diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/View/CommonCell.h" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/View/CommonCell.h" new file mode 100644 index 0000000000000000000000000000000000000000..eae13d3de7f53cc4d6fb81cfc9623125a4079300 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/View/CommonCell.h" @@ -0,0 +1,21 @@ +// +// CommonCell.h +// JQQY +// +// Created by Shmily on 2017/11/21. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import +@class MyCardModel; + +@interface CommonCell : UITableViewCell + +@property (nonatomic,retain)UILabel *itemLB; +@property (nonatomic,retain)UILabel *itemnameLB; +@property (nonatomic,retain)UIImageView *nextView; +@property (nonatomic,retain)MyCardModel *model; +@property (nonatomic,retain)UILabel *redPoint; + + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/View/CommonCell.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/View/CommonCell.m" new file mode 100644 index 0000000000000000000000000000000000000000..c5d731d61a7915eeb74ddbe62582a3dbe7f6593d --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/View/CommonCell.m" @@ -0,0 +1,95 @@ +// +// CommonCell.m +// JQQY +// +// Created by Shmily on 2017/11/21. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "CommonCell.h" +#import "MyCardModel.h" + +@implementation CommonCell + +- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier +{ + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + [self.contentView addSubview:self.itemLB]; + [self.contentView addSubview:self.itemnameLB]; + [self.contentView addSubview:self.nextView]; + [self.contentView addSubview:self.redPoint]; + } + return self; +} + +- (UILabel *)itemLB +{ + if (!_itemLB) { + _itemLB = [[UILabel alloc]initWithFrame:CGRectMake(20,0,70,50)]; + _itemLB.font = FFONT16; + _itemLB.textColor = MAIN_TEXTCOLOR; +// _itemLB.backgroundColor = [UIColor redColor]; + } + return _itemLB; +} + +- (UILabel *)itemnameLB +{ + if (!_itemnameLB) { + _itemnameLB = [[UILabel alloc]initWithFrame:CGRectMake(_itemLB.right,0,KSCREEN_WIDTH-40-70-12,50)]; + _itemnameLB.font = FFONT16; + _itemnameLB.textColor = MAIN_TEXTCOLOR; + _itemnameLB.text = @"现居地:"; + } + return _itemnameLB; +} + +- (UILabel *)redPoint +{ + if (!_redPoint) { + _redPoint = [[UILabel alloc]initWithFrame:CGRectMake(5,(50-10)/2,8,8)]; + _redPoint.backgroundColor = CTHEMECOLOR; + [_redPoint setImageRoundRadius:4 BorderWidth:0 borderColor:NULL]; + } + return _redPoint; +} +- (UIImageView *)nextView +{ + if (!_nextView) { + _nextView = [[UIImageView alloc]initWithFrame:CGRectMake(_itemnameLB.right,(50-12)/2,12, 12)]; + _nextView.image = [UIImage imageNamed:@"Arrow-pointing"]; + } + return _nextView; +} + +- (void)setModel:(MyCardModel *)model +{ + _model = model; + _itemLB.text = model.ItemName; + + _itemnameLB.text = model.name; + if (STR_IS_NOT_EMPTY(model.unit)) { + if (STR_IS_NOT_EMPTY(model.name)) { + _itemnameLB.text = [NSString stringWithFormat:@"%@ %@",model.name,model.unit]; + } + } + if ([model.enable intValue]) { + _redPoint.hidden = NO; + _nextView.hidden = YES; + }else{ + _redPoint.hidden = YES; + _nextView.hidden = NO; + } +} + + + + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/View/GiftCell.h" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/View/GiftCell.h" new file mode 100644 index 0000000000000000000000000000000000000000..c5a7057a2d4963252c2724bb4d44f21e3b96ccd2 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/View/GiftCell.h" @@ -0,0 +1,20 @@ +// +// GiftCell.h +// JQ_ELOVE +// +// Created by chason on 2017/3/23. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import + +@interface GiftCell : UICollectionViewCell + +@property (nonatomic, strong) UIImageView *giftImgView; +@property (nonatomic, strong) UILabel *nicknameLab; +@property (nonatomic, strong) UILabel *giftNumLab; + +@property (nonatomic, copy) NSString *name; +- (void)initGiftCell:(NSDictionary *)giftCellDict; + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/View/GiftCell.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/View/GiftCell.m" new file mode 100644 index 0000000000000000000000000000000000000000..48ba5477a8b18f3eebf5d2590165fb542572b919 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/View/GiftCell.m" @@ -0,0 +1,61 @@ +// +// GiftCell.m +// JQ_ELOVE +// +// Created by chason on 2017/3/23. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import "GiftCell.h" + +@implementation GiftCell + +- (instancetype)initWithFrame:(CGRect)frame{ + self = [super initWithFrame:frame]; + if (self) { + [self addSubview:self.giftImgView]; + [self addSubview:self.nicknameLab]; + [self.giftImgView addSubview:self.giftNumLab]; + } + return self; +} + +- (UIImageView *)giftImgView{ + if (!_giftImgView) { + _giftImgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, (KSCREEN_WIDTH-60)/2, (KSCREEN_WIDTH-60)/2)]; + [_giftImgView setImageRoundRadius:5 BorderWidth:0.5 borderColor:LINECOLOUR]; + } + return _giftImgView; +} + +- (UILabel *)giftNumLab{ + if (!_giftNumLab) { + _giftNumLab = [[UILabel alloc] initWithFrame:CGRectMake(_giftImgView.width/4*3, _giftImgView.width/4*3, _giftImgView.width/4, _giftImgView.width/4)]; + _giftNumLab.textAlignment = NSTextAlignmentCenter; + _giftNumLab.textColor = [UIColor redColor]; + _giftNumLab.font = [UIFont systemFontOfSize:15]; +// _giftNumLab.backgroundColor = UIColorFromRGBWithAlpha(0x000000, 0.3); +// [_giftNumLab setImageRoundRadius:_giftImgView.width/4/2 BorderWidth:0 borderColor:nil]; + } + return _giftNumLab; +} + +- (UILabel *)nicknameLab{ + if (!_nicknameLab) { + _nicknameLab = [[UILabel alloc] initWithFrame:CGRectMake(0, _giftImgView.bottom, (KSCREEN_WIDTH-60)/2, 20)]; + _nicknameLab.textAlignment = NSTextAlignmentCenter; + _nicknameLab.textColor = UIColorFromRGB(0x595959); + _nicknameLab.font = [UIFont systemFontOfSize:15]; + } + return _nicknameLab; +} + +- (void)initGiftCell:(NSDictionary *)giftCellDict{ + _name = giftCellDict[@"name"]; + _giftNumLab.text = [NSString stringWithFormat:@"x%@",giftCellDict[@"num"]]; + _nicknameLab.text = [giftCellDict[@"name"] stringByReplacingGiftNameChineseWithEnglish]; + _giftImgView.image = [UIImage imageNamed:[giftCellDict[@"name"] stringByReplacingImgNameChineseWithEnglish]]; +} + + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/View/MineTopView.h" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/View/MineTopView.h" new file mode 100644 index 0000000000000000000000000000000000000000..97bd9f8d7e913b62869066779d302623bd4cfe0f --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/View/MineTopView.h" @@ -0,0 +1,56 @@ +// +// MineTopView.h +// JQQY +// +// Created by chason on 2017/11/17. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import +@class AvatarImageView; + +@interface MineTopView : UIView + +@property (nonatomic, strong) UIViewController *VC; + +/** + 登陆按钮 + */ +@property (nonatomic, strong) UIButton *loginBtn; + +/** + 头像 + */ +@property (nonatomic, strong) AvatarImageView *avatarView; + +/** + 昵称 + */ +@property (nonatomic, strong) UILabel *nicknameLab; + +/** + 手机图标 + */ +@property (nonatomic, strong) UIImageView *phoneImage; + +/** + 实名图标 + */ +@property (nonatomic, strong) UIImageView *realNameImage; + +/** + 企业图标 + */ +@property (nonatomic, strong) UIImageView *enterpriseImage; + +/** + 团图标 + */ +@property (nonatomic, strong) UIImageView *tuanImage; + +/** + 签到按钮 + */ +@property (nonatomic, strong) UIButton *qiandaoBtn; + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/View/MineTopView.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/View/MineTopView.m" new file mode 100644 index 0000000000000000000000000000000000000000..b55849ed5883ba4dcf83b32326f3f2c5e539eb8f --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/View/MineTopView.m" @@ -0,0 +1,195 @@ +// +// MineTopView.m +// JQQY +// +// Created by chason on 2017/11/17. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "MineTopView.h" +#import "AvatarImageView.h" +#import "MyWalletViewController.h" +#import "MineViewController.h" +#import "SignInView.h" +#import "CardViewController.h" +#import "IdentyListViewController.h" +#define image_w 30 +#define image_h 30 + +@interface MineTopView() + +@property (nonatomic, strong) UIImagePickerController *imagePickerVc; + +@end + +@implementation MineTopView + +- (instancetype)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + self.backgroundColor = [UIColor whiteColor]; + [self addSubview:self.loginBtn]; + + [self addSubview:self.avatarView]; + [self addSubview:self.nicknameLab]; + [self addSubview:self.phoneImage]; + [self addSubview:self.realNameImage]; + [self addSubview:self.enterpriseImage]; + [self addSubview:self.tuanImage]; + [self addSubview:self.qiandaoBtn]; + } + return self; +} + +- (UIButton *)loginBtn +{ + if (!_loginBtn) { + _loginBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _loginBtn.frame = CGRectMake((self.width-100)/2, (self.height-40)/2, 100, 40); + [_loginBtn setImageRoundRadius:5 BorderWidth:1 borderColor:PURPLECOLOUR]; + [_loginBtn setTitleColor:PURPLECOLOUR forState:UIControlStateNormal]; + [_loginBtn setTitle:@"登录" forState:UIControlStateNormal]; + [_loginBtn addTarget:self action:@selector(loginBtnClicked) forControlEvents:UIControlEventTouchUpInside]; + } + return _loginBtn; +} + +- (AvatarImageView *)avatarView +{ + if (!_avatarView) { + _avatarView = [[AvatarImageView alloc] initWithFrame:CGRectMake(15, (self.height-80)/2, 80, 80)]; + _avatarView.userInteractionEnabled = YES; + UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(avatarViewClicked)]; + [_avatarView addGestureRecognizer:tap]; + } + return _avatarView; +} + +- (UILabel *)nicknameLab +{ + if (!_nicknameLab) { + _nicknameLab = [[UILabel alloc] initWithFrame:CGRectMake(_avatarView.right+20, _avatarView.top+10, self.width-200, 20)]; + _nicknameLab.font = FFONT16; + _nicknameLab.textColor = MAIN_TEXTCOLOR; + } + return _nicknameLab; +} + +- (UIImageView *)phoneImage +{ + if (!_phoneImage) { + _phoneImage = [[UIImageView alloc] initWithFrame:CGRectMake(_nicknameLab.left, _nicknameLab.bottom+10, image_w, image_h)]; + _phoneImage.image = [UIImage imageNamed:@"phone_icon"]; + _phoneImage.userInteractionEnabled = YES; + UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(CertificateImageClicked)]; + [_phoneImage addGestureRecognizer:tap]; + } + return _phoneImage; +} + +- (UIImageView *)realNameImage +{ + if (!_realNameImage) { + _realNameImage = [[UIImageView alloc] initWithFrame:CGRectMake(_phoneImage.right+5, _nicknameLab.bottom+10, image_w, image_h)]; + _realNameImage.image = [UIImage imageNamed:@"realname_hui_icon"]; + _realNameImage.userInteractionEnabled = YES; + UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(CertificateImageClicked)]; + [_realNameImage addGestureRecognizer:tap]; + } + return _realNameImage; +} + +- (UIImageView *)enterpriseImage +{ + if (!_enterpriseImage) { + _enterpriseImage = [[UIImageView alloc] initWithFrame:CGRectMake(_realNameImage.right+5, _nicknameLab.bottom+10, image_w, image_h)]; + _enterpriseImage.image = [UIImage imageNamed:@"enterprise_hui_icon"]; + _enterpriseImage.userInteractionEnabled = YES; + UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(CertificateImageClicked)]; + [_enterpriseImage addGestureRecognizer:tap]; + } + return _enterpriseImage; +} + +- (UIImageView *)tuanImage +{ + if (!_tuanImage) { + _tuanImage = [[UIImageView alloc] initWithFrame:CGRectMake(_enterpriseImage.right+5, _nicknameLab.bottom+10, image_w, image_h)]; + _tuanImage.image = [UIImage imageNamed:@"tuan_hui_icon"]; + _tuanImage.userInteractionEnabled = YES; + UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(CertificateImageClicked)]; + [_tuanImage addGestureRecognizer:tap]; + } + return _tuanImage; +} + +- (UIButton *)qiandaoBtn +{ + if (!_qiandaoBtn) { + _qiandaoBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _qiandaoBtn.frame = CGRectMake(self.width-65, (self.height-30)/2,55, 30); + _qiandaoBtn.titleLabel.font = FFONT12; + [_qiandaoBtn setTitleColor:[UIColor orangeColor] forState:UIControlStateNormal]; + [_qiandaoBtn setTitle:@"签到" forState:UIControlStateNormal]; + [_qiandaoBtn setImageRoundRadius:15 BorderWidth:1 borderColor:[UIColor orangeColor]]; + [_qiandaoBtn addTarget:self action:@selector(qiandaoBtnClicked) forControlEvents:UIControlEventTouchUpInside]; + } + return _qiandaoBtn; +} + + +- (void)loginBtnClicked +{ + __weak typeof(self) weakSelf = self; + [ZCTools goLoginSelf:_VC SeccessBlock:^{ + weakSelf.loginBtn.hidden = YES; + }]; +} + +- (void)qiandaoBtnClicked +{ + if ([_qiandaoBtn.titleLabel.text isEqualToString:@"签到"]) { + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:@"网络异常" toView:self.VC.view]; + return; + } + _qiandaoBtn.userInteractionEnabled = NO; + NSDictionary *params = @{@"userID":USER_USERID}; + [ZCNetRequestManager postRequestWithParameters:params subUrl:URL_user_signin block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + if ([resultDic[@"retcode"] intValue] == 1) { + MineViewController *mineVC = (MineViewController *)self.VC; + mineVC.signInView.hidden = NO; + mineVC.signInView.tipsLab2.attributedText = [ZCTools attributedTextFrom:ToString(resultDic[@"message"][@"redbeannum"]) headerStr:@"+" footerStr:@"元宝" value:[UIColor redColor] textFont:18]; + [_qiandaoBtn setTitle:@"已签到" forState:UIControlStateNormal]; + _qiandaoBtn.userInteractionEnabled = YES; + }else{ + [MBProgressHUD showError:resultDic[@"explanation"] toView:self.VC.view]; + _qiandaoBtn.userInteractionEnabled = YES; + } + } + }]; + }else{ + MyWalletViewController *myWalletVC = [[MyWalletViewController alloc] init]; + [myWalletVC setHidesBottomBarWhenPushed:YES]; + [self.VC.navigationController pushViewController:myWalletVC animated:YES]; + } +} + +- (void)avatarViewClicked +{ + + CardViewController *cardVC = [[CardViewController alloc]init]; + [cardVC setHidesBottomBarWhenPushed:YES]; + [self.firstViewController.navigationController pushViewController:cardVC animated:YES]; +} + +- (void)CertificateImageClicked +{ + IdentyListViewController *identyList = [[IdentyListViewController alloc]init]; + [identyList setHidesBottomBarWhenPushed:YES]; + [self.firstViewController.navigationController pushViewController:identyList animated:YES]; +} + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/View/MyTicketCell.h" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/View/MyTicketCell.h" new file mode 100644 index 0000000000000000000000000000000000000000..d211de5c25cecfec19bbbf96c3eedb0e83d81f7d --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/View/MyTicketCell.h" @@ -0,0 +1,27 @@ +// +// MyTicketCell.h +// JQ_ELOVE +// +// Created by chason on 2017/3/29. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import +@class MyTicketModel; + +@interface MyTicketCell : UITableViewCell + +@property (nonatomic, strong) UILabel *line; +@property (nonatomic, strong) UIImageView *backgroundImgView; +@property (nonatomic, strong) UIImageView *ifuseImgView; +@property (nonatomic, strong) UILabel *acttitle;//活动标题 +@property (nonatomic, strong) UILabel *acttime;//活动时间 +@property (nonatomic, strong) UILabel *actaddress;//活动地址 +@property (nonatomic, strong) UILabel *money; //金额 +@property (nonatomic, strong) UILabel *tickettime;//有效期 +@property (nonatomic, copy) NSString *ticket; //卡券ID +@property (nonatomic, assign) NSInteger action;//1全票 2限额优惠券 + +- (void)initMyTicketCell:(MyTicketModel *)myTicketModel; + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/View/MyTicketCell.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/View/MyTicketCell.m" new file mode 100644 index 0000000000000000000000000000000000000000..aec483c1b3b3a9cb0777bdadecca8c5384195ca3 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/View/MyTicketCell.m" @@ -0,0 +1,162 @@ +// +// MyTicketCell.m +// JQ_ELOVE +// +// Created by chason on 2017/3/29. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import "MyTicketCell.h" +#import "MyTicketModel.h" + +@implementation MyTicketCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{ + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + [self addSubview:self.backgroundImgView]; + [self addSubview:self.ifuseImgView]; + [self addSubview:self.acttitle]; + [self addSubview:self.acttime]; + [self addSubview:self.actaddress]; + [self addSubview:self.money]; + [self addSubview:self.tickettime]; + [self addSubview:self.line]; + } + return self; +} + +- (UIImageView *)backgroundImgView{ + if (!_backgroundImgView) { + _backgroundImgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH, KSCREEN_WIDTH*0.4)]; + } + return _backgroundImgView; +} + +- (UIImageView *)ifuseImgView{ + if (!_ifuseImgView) { + _ifuseImgView = [[UIImageView alloc] initWithFrame:CGRectMake(KSCREEN_WIDTH-150, (KSCREEN_WIDTH*0.4-75)/2, 103, 75)]; + } + return _ifuseImgView; +} + +- (UILabel *)acttitle{ + if (!_acttitle) { + _acttitle = [[UILabel alloc] initWithFrame:CGRectMake(30, KSCREEN_WIDTH*0.4*0.3, KSCREEN_WIDTH*0.7-35, 30)]; + _acttitle.textAlignment = NSTextAlignmentLeft; + _acttitle.textColor = [UIColor whiteColor]; + _acttitle.font = [UIFont systemFontOfSize:22]; + _acttitle.adjustsFontSizeToFitWidth = YES; + } + return _acttitle; +} + +- (UILabel *)acttime{ + if (!_acttime) { + _acttime = [[UILabel alloc] initWithFrame:CGRectMake(30, _acttitle.bottom+5, KSCREEN_WIDTH*0.7-35, 20)]; + _acttime.textAlignment = NSTextAlignmentLeft; + _acttime.textColor = [UIColor blackColor]; + _acttime.font = [UIFont systemFontOfSize:12]; + _acttime.adjustsFontSizeToFitWidth = YES; + } + return _acttime; +} + +- (UILabel *)actaddress{ + if (!_actaddress) { + _actaddress = [[UILabel alloc] initWithFrame:CGRectMake(30, _acttime.bottom, KSCREEN_WIDTH*0.7-35, 20)]; + _actaddress.textAlignment = NSTextAlignmentLeft; + _actaddress.textColor = [UIColor blackColor]; + _actaddress.font = [UIFont systemFontOfSize:12]; + _actaddress.adjustsFontSizeToFitWidth = YES; + } + return _actaddress; +} + +- (UILabel *)money{ + if (!_money) { + _money = [[UILabel alloc] initWithFrame:CGRectMake((KSCREEN_WIDTH-100)/2+10, KSCREEN_WIDTH*0.4/2-10, KSCREEN_WIDTH*0.4/2, KSCREEN_WIDTH*0.4/4)]; + _money.textAlignment = NSTextAlignmentCenter; + _money.textColor = [UIColor whiteColor]; + _money.font = [UIFont systemFontOfSize:40]; + _money.adjustsFontSizeToFitWidth = YES; + } + return _money; +} + +- (UILabel *)tickettime{ + if (!_tickettime) { + _tickettime = [[UILabel alloc] initWithFrame:CGRectMake(0, _money.bottom+10, KSCREEN_WIDTH, 20)]; + _tickettime.textAlignment = NSTextAlignmentCenter; + _tickettime.textColor = [UIColor blackColor]; + _tickettime.font = [UIFont systemFontOfSize:12]; + } + return _tickettime; +} + +- (UILabel *)line{ + if (!_line) { + _line = [[UILabel alloc] initWithFrame:CGRectMake(0, KSCREEN_WIDTH*0.4-0.5, KSCREEN_WIDTH, 0.5)]; + _line.backgroundColor = LINECOLOUR; + } + return _line; +} + +- (void)initMyTicketCell:(MyTicketModel *)myTicketModel{ + _acttitle.text = myTicketModel.acttitle; + _acttime.text = [NSString stringWithFormat:@"开始时间:%@",myTicketModel.acttime]; + _actaddress.text = [NSString stringWithFormat:@"活动地址:%@",myTicketModel.actaddress]; + _tickettime.text = [NSString stringWithFormat:@"到期时间:%@",myTicketModel.tickettime];; + if ([myTicketModel.money intValue] == 0) { +// _money.text = @"全票"; + _acttitle.hidden = NO; + _acttime.hidden = NO; + _actaddress.hidden = NO; + _money.hidden = YES; + _tickettime.hidden = YES; + if (myTicketModel.ifuse == 0) { + _backgroundImgView.image = [UIImage imageNamed:@"wdqb-rcq"]; + _ifuseImgView.hidden = YES; + }else if (myTicketModel.ifuse == 1) { + _backgroundImgView.image = [UIImage imageNamed:@"wdqb-rcq-h"]; + _ifuseImgView.image = [UIImage imageNamed:@"wdqb-ysy"]; + _ifuseImgView.hidden = NO; + }else if (myTicketModel.ifuse == 2) { + _backgroundImgView.image = [UIImage imageNamed:@"wdqb-rcq-h"]; + _ifuseImgView.image = [UIImage imageNamed:@"wdqb-gq"]; + _ifuseImgView.hidden = NO; + } + }else{ + _acttitle.hidden = YES; + _acttime.hidden = YES; + _actaddress.hidden = YES; + _money.hidden = NO; + _tickettime.hidden = NO; + _money.text = myTicketModel.money; + if (myTicketModel.ifuse == 0) { + _backgroundImgView.image = [UIImage imageNamed:@"wdqb-xjq"]; + _ifuseImgView.hidden = YES; + }else if (myTicketModel.ifuse == 1) { + _backgroundImgView.image = [UIImage imageNamed:@"wdqb-xjq-h"]; + _ifuseImgView.image = [UIImage imageNamed:@"wdqb-ysy"]; + _ifuseImgView.hidden = NO; + }else if (myTicketModel.ifuse == 2) { + _backgroundImgView.image = [UIImage imageNamed:@"wdqb-xjq-h"]; + _ifuseImgView.image = [UIImage imageNamed:@"wdqb-gq"]; + _ifuseImgView.hidden = NO; + } + } +} + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/View/PeopleOfGiftCell.h" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/View/PeopleOfGiftCell.h" new file mode 100644 index 0000000000000000000000000000000000000000..36286111d80d9ebe5e8ea135c3d143940a34b4c2 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/View/PeopleOfGiftCell.h" @@ -0,0 +1,22 @@ +// +// PeopleOfGiftCell.h +// JQ_ELOVE +// +// Created by chason on 2017/3/23. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import + +@class AvatarImageView; + +@interface PeopleOfGiftCell : UITableViewCell + +@property (nonatomic, strong) AvatarImageView *avatarView; +@property (nonatomic, strong) UILabel *nicknameLab; +@property (nonatomic, strong) UILabel *timeLab; +@property (nonatomic, strong) UILabel *line; + +- (void)initPeopleOfGiftCell:(NSDictionary *)peopleOfGiftCellDict; + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/View/PeopleOfGiftCell.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/View/PeopleOfGiftCell.m" new file mode 100644 index 0000000000000000000000000000000000000000..91e199f1e51290b571ec889279e905260b57c828 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/View/PeopleOfGiftCell.m" @@ -0,0 +1,78 @@ +// +// PeopleOfGiftCell.m +// JQ_ELOVE +// +// Created by chason on 2017/3/23. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import "PeopleOfGiftCell.h" +#import "AvatarImageView.h" + +@implementation PeopleOfGiftCell + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{ + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + [self addSubview:self.avatarView]; + [self addSubview:self.nicknameLab]; + [self addSubview:self.timeLab]; + [self addSubview:self.line]; + } + return self; +} + +- (AvatarImageView *)avatarView{ + if (!_avatarView) { + _avatarView = [[AvatarImageView alloc] initWithFrame:CGRectMake(15, 5, 40, 40)]; + _avatarView.initialsFont = [UIFont systemFontOfSize:12]; + } + return _avatarView; +} + +- (UILabel *)nicknameLab{ + if (!_nicknameLab) { + _nicknameLab = [[UILabel alloc] initWithFrame:CGRectMake(_avatarView.right+10,15, (KSCREEN_WIDTH-80)/2,20)]; + _nicknameLab.textAlignment = NSTextAlignmentLeft; + _nicknameLab.textColor = UIColorFromRGB(0x595959); + _nicknameLab.font = [UIFont systemFontOfSize:15]; + } + return _nicknameLab; +} + +- (UILabel *)timeLab{ + if (!_timeLab) { + _timeLab = [[UILabel alloc] initWithFrame:CGRectMake(_nicknameLab.right, 15, (KSCREEN_WIDTH-80)/2, 20)]; + _timeLab.textAlignment = NSTextAlignmentRight; + _timeLab.textColor = UIColorFromRGB(0x595959); + _timeLab.font = [UIFont systemFontOfSize:13]; + } + return _timeLab; +} + +- (UILabel *)line{ + if (!_line) { + _line = [[UILabel alloc] initWithFrame:CGRectMake(0, 49.5, KSCREEN_WIDTH, 0.5)]; + _line.backgroundColor = LINECOLOUR; + } + return _line; +} + +- (void)initPeopleOfGiftCell:(NSDictionary *)peopleOfGiftCellDict{ + [_avatarView setTitle:peopleOfGiftCellDict[@"nickname"] imageUrl:peopleOfGiftCellDict[@"avatar"]]; + _nicknameLab.text = peopleOfGiftCellDict[@"nickname"]; + _timeLab.text = peopleOfGiftCellDict[@"time"]; +} + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/View/QYStarView.h" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/View/QYStarView.h" new file mode 100644 index 0000000000000000000000000000000000000000..39c50f30a5ce10a4cdf272b82ea80c59959e1b7e --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/View/QYStarView.h" @@ -0,0 +1,45 @@ +// +// QYStarView.h +// JQQY +// +// Created by Shmily on 2017/11/21. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import + +typedef NS_ENUM(NSInteger,StarAliment) { + StarAlimentDefault, + StarAlimentCenter, + StarAlimentRight +}; + + +@interface QYStarView : UIView + +/** + * 评分 + */ +@property (nonatomic,assign) CGFloat commentPoint; +/** + * 对齐方式 + */ +@property (nonatomic,assign) StarAliment starAliment; + +/** + * 初始化方法 + * + * @param frame 整个星星视图的frame + * @param totalStar 总的星星的个数 + * @param totalPoint 星星表示的总分数 + * @param space 星星之间的间距 + * + * @return QYStarView + */ +- (instancetype)initWithFrame:(CGRect)frame withTotalStar:(NSInteger)totalStar withTotalPoint:(CGFloat)totalPoint starSpace:(NSInteger)space; + + + + + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/View/QYStarView.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/View/QYStarView.m" new file mode 100644 index 0000000000000000000000000000000000000000..f1d0b0ca250a81051661dbd25631f94d606d70a8 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/View/QYStarView.m" @@ -0,0 +1,198 @@ +// +// QYStarView.m +// JQQY +// +// Created by Shmily on 2017/11/21. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "QYStarView.h" + + +@interface QYStarView() +{ + //星星的高度 + CGFloat starHeight; + + //宽度间距 + CGFloat spaceWidth; + + //星星总个数 + NSInteger totalNumber; + + //单个代表的评分 + CGFloat singlePoint; + + //最大分数 + NSInteger maxPoints; + + //星星的tag + NSInteger starBaseTag; + + //填充的视图 + UIView *starView; + + //填充星星的偏移量 + CGFloat starOffset; +} +@end + +@implementation QYStarView + +- (instancetype)initWithFrame:(CGRect)frame withTotalStar:(NSInteger)totalStar withTotalPoint:(CGFloat)totalPoint starSpace:(NSInteger)space +{ + self = [super initWithFrame:frame]; + if (self) { + + //对传进来的frame进行处理,取合适的星星的高度 + + //传进来的高度 + CGFloat height = frame.size.height; + //减去间距后的平均的宽度(我设置的星星 高度=宽度) + CGFloat averageHeight = (frame.size.width-space*(totalStar-1))/totalStar; + + if (height>averageHeight) { + starHeight = averageHeight; + }else{ + starHeight = height; + } + + starBaseTag = 6666; + spaceWidth = space; + totalNumber = totalStar; + singlePoint = totalPoint/totalStar; + maxPoints = totalPoint; + + [self loadCustomViewWithTotal:totalStar]; + + } + return self; +} + +- (void)loadCustomViewWithTotal:(NSInteger)totalStar +{ + //先铺背景图片(空的星星) + for (int i =0 ; i maxPoints) { + commentPoint = maxPoints; + } + + CGFloat showNumber = commentPoint/singlePoint; + + //覆盖的长图 + if (!starView) { + starView = [[UIView alloc]init]; + } + + starView.frame = CGRectZero; + //整颗星星 + NSInteger fullNumber = showNumber/1; + + if (starOffset > 0) { + starView.frame = CGRectMake(starOffset, self.frame.size.height-starHeight, starHeight*showNumber+spaceWidth*fullNumber, starHeight); + + }else{ + starView.frame = CGRectMake(0, self.frame.size.height-starHeight, starHeight*showNumber+spaceWidth*fullNumber, starHeight); + + } + starView.clipsToBounds = YES; + + //在长图上填充完整的星星 + for (int j = 0; j< fullNumber; j++) { + UIImageView *starImageView = [[UIImageView alloc]init]; + starImageView.image = [UIImage imageNamed:@"starImage"]; + starImageView.frame = CGRectMake(j*starHeight+j*spaceWidth, 0, starHeight, starHeight); + [starView addSubview:starImageView]; + } + + CGFloat part = showNumber - fullNumber; + //如果有残缺的星星 则添加 + if (part > 0) { + UIImageView *partImage = [[UIImageView alloc]initWithFrame:CGRectMake(fullNumber*starHeight+fullNumber*spaceWidth, 0, starHeight, starHeight)]; + partImage.image = [UIImage imageNamed:@"starImage"]; + [starView addSubview:partImage]; + } + + [self addSubview:starView]; +} + +//设置星星的对齐方式 +- (void)setStarAliment:(StarAliment)starAliment +{ + _starAliment = starAliment; + + switch (starAliment) { + //居中对齐 + case StarAlimentCenter: + { + CGFloat starRealWidth = totalNumber*starHeight+(totalNumber-1)*spaceWidth; + CGFloat leftWidth = self.frame.size.width-starRealWidth; + + for (int i =0 ; i< totalNumber; i++) { + UIImageView *starImageView = (UIImageView*)[self viewWithTag:i+starBaseTag]; + starImageView.frame = CGRectMake(leftWidth/2+starImageView.frame.origin.x, starImageView.frame.origin.y, starImageView.frame.size.width, starImageView.frame.size.height); + } + starOffset = leftWidth/2; + starView.frame = CGRectMake(leftWidth/2+starView.frame.origin.x, starView.frame.origin.y, starView.frame.size.width, starView.frame.size.height); + + } + break; + //右对齐 + case StarAlimentRight: + { + CGFloat starRealWidth = totalNumber*starHeight+(totalNumber-1)*spaceWidth; + CGFloat leftWidth = self.frame.size.width-starRealWidth; + + for (int i =0 ; i< totalNumber; i++) { + UIImageView *starImageView = (UIImageView*)[self viewWithTag:i+starBaseTag]; + starImageView.frame = CGRectMake(leftWidth+starImageView.frame.origin.x, starImageView.frame.origin.y, starImageView.frame.size.width, starImageView.frame.size.height); + } + starOffset = leftWidth; + starView.frame = CGRectMake(leftWidth+starView.frame.origin.x, starView.frame.origin.y, starView.frame.size.width, starView.frame.size.height); + + } + break; + //默认的左对齐 + case StarAlimentDefault: + { + + for (int i =0 ; i< totalNumber; i++) { + UIImageView *starImageView = (UIImageView*)[self viewWithTag:i+starBaseTag]; + starImageView.frame = CGRectMake(i*starHeight+i*spaceWidth, self.frame.size.height-starHeight, starHeight, starHeight); + } + + + CGFloat showNumber = self.commentPoint/singlePoint; + + //整颗星星 + NSInteger fullNumber = showNumber/1; + starOffset = 0; + starView.frame = CGRectMake(0, self.frame.size.height-starHeight, starHeight*showNumber+spaceWidth*fullNumber, starHeight); + + + } + break; + default: + { + + } + break; + } + + +} + + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/View/SettingView.h" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/View/SettingView.h" new file mode 100644 index 0000000000000000000000000000000000000000..a674f36d034c2a4a70af518c0ee55382b34072ab --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/View/SettingView.h" @@ -0,0 +1,22 @@ +// +// SettingView.h +// JQ_ELOVE +// +// Created by Shmily on 16/6/12. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import + +@interface SettingView : UIView + +@property (nonatomic, strong) UILabel *downLineLB; +@property (nonatomic, strong) UILabel *upLineLB; +@property (nonatomic, strong) UITextField *titleTF; +@property (nonatomic, strong) UILabel *firstLB; + +- (id)initWithFrame:(CGRect)frame andTitle:(NSString *)title; +- (id)initCodeWithFrame:(CGRect)frame; + + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/View/SettingView.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/View/SettingView.m" new file mode 100644 index 0000000000000000000000000000000000000000..2f4d3f77c66d9a4024f70a57b82601e4085e5721 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/View/SettingView.m" @@ -0,0 +1,89 @@ +// +// SettingView.m +// JQ_ELOVE +// +// Created by Shmily on 16/6/12. +// Copyright © 2016年 Shmily. All rights reserved. +// + +#import "SettingView.h" + +@interface SettingView () + +@end + +@implementation SettingView + +- (id)initWithFrame:(CGRect)frame andTitle:(NSString *)title +{ + self = [super initWithFrame:frame]; + if (self) { + self.backgroundColor = [UIColor whiteColor]; + [self addSubview:self.firstLB]; + [self addSubview:self.titleTF]; + _titleTF.frame = CGRectMake(_firstLB.right, (self.height-30)/2, self.width-_firstLB.right-20, 30); + _titleTF.font = [UIFont systemFontOfSize:15]; + _titleTF.placeholder = title; + _titleTF.textAlignment = NSTextAlignmentRight; + [self addSubview:self.upLineLB]; + [self addSubview:self.downLineLB]; + _downLineLB.frame = CGRectMake(15, self.height-0.5, self.width, 0.5); + } + return self; +} + +- (UILabel *)firstLB +{ + if (!_firstLB) { + _firstLB = [[UILabel alloc]initWithFrame:CGRectMake(15,(self.height-30)/2 ,75, 30)]; + _firstLB.font = [UIFont systemFontOfSize:16]; + _firstLB.textColor = UIColorFromRGB(0x666666); + } + return _firstLB; +} + +- (id)initCodeWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + self.backgroundColor = [UIColor whiteColor]; + [self addSubview:self.firstLB]; + [self addSubview:self.titleTF]; + _titleTF.frame = CGRectMake(_firstLB.right, (self.height-30)/2, self.width-_firstLB.right-125, 30); + _titleTF.font = [UIFont systemFontOfSize:15]; + _titleTF.textAlignment = NSTextAlignmentRight; +// _titleTF.keyboardType = UIKeyboardTypeNamePhonePad;//UIKeyboardTypePhonePad + [self addSubview:self.downLineLB]; + + } + return self; +} + +- (UILabel *)downLineLB +{ + if (!_downLineLB) { + _downLineLB = [[UILabel alloc]initWithFrame:CGRectMake(15, self.height-0.5, self.width, 0.5)]; + _downLineLB.backgroundColor = LINECOLOUR; + } + return _downLineLB; +} + +- (UILabel *)upLineLB +{ + if (!_upLineLB) { + _upLineLB = [[UILabel alloc]initWithFrame:CGRectMake(15, 0, self.width, 0.5)]; + _upLineLB.backgroundColor = LINECOLOUR; + } + return _upLineLB; +} + +- (UITextField *)titleTF +{ + if (!_titleTF) { + _titleTF = [[UITextField alloc]init]; + _titleTF.delegate = self; + } + return _titleTF; +} + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/View/SignInView.h" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/View/SignInView.h" new file mode 100644 index 0000000000000000000000000000000000000000..04ec034cd50e6bf639a24d5f43cad7c3b2d34743 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/View/SignInView.h" @@ -0,0 +1,17 @@ +// +// SignInView.h +// JQ_ELOVE +// +// Created by chason on 2017/3/21. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import + +@interface SignInView : UIView + +@property (nonatomic, strong) UIImageView *mainView; +@property (nonatomic, strong) UILabel *tipsLab2; +@property (nonatomic, strong) UIButton *lookBtn; + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/View/SignInView.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/View/SignInView.m" new file mode 100644 index 0000000000000000000000000000000000000000..9d1cab6a3f6d2a08a5289e8586caa1c56fbfd835 --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/View/SignInView.m" @@ -0,0 +1,57 @@ +// +// SignInView.m +// JQ_ELOVE +// +// Created by chason on 2017/3/21. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import "SignInView.h" + +@implementation SignInView + +- (instancetype)initWithFrame:(CGRect)frame{ + self = [super initWithFrame:frame]; + if (self) { + self.backgroundColor = UIColorFromRGBWithAlpha(0x000000, 0.3); + [self addSubview:self.mainView]; + [self.mainView addSubview:self.lookBtn]; + [self.mainView addSubview:self.tipsLab2]; + } + return self; +} + +- (UIImageView *)mainView{ + if (!_mainView) { + _mainView = [[UIImageView alloc] initWithFrame:CGRectMake((KSCREEN_WIDTH-250)/2, (KSCREEN_HEIGHT-325)/2, 250, 325)]; + [_mainView setImageRoundRadius:5 BorderWidth:0 borderColor:nil]; + _mainView.userInteractionEnabled = YES; + _mainView.image = [UIImage imageNamed:@"qdcg"]; + } + return _mainView; +} + +- (UIButton *)lookBtn{ + if (!_lookBtn) { + _lookBtn = [[UIButton alloc] initWithFrame:CGRectMake(40, _mainView.height-40, _mainView.width-80, 30)]; + _lookBtn.backgroundColor = UIColorFromRGB(0xfec110); + [_lookBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; + [_lookBtn setTitle:@"查看" forState:UIControlStateNormal]; + [_lookBtn setImageRoundRadius:15 BorderWidth:0 borderColor:nil]; + } + return _lookBtn; +} + +- (UILabel *)tipsLab2{ + if (!_tipsLab2) { + _tipsLab2 = [[UILabel alloc] initWithFrame:CGRectMake(0, _lookBtn.top-25, _mainView.width, 20)]; + _tipsLab2.textAlignment = NSTextAlignmentCenter; + _tipsLab2.textColor = [UIColor redColor]; + _tipsLab2.font = [UIFont systemFontOfSize:13]; + _tipsLab2.attributedText = [ZCTools attributedTextFrom:@"10" headerStr:@"+" footerStr:@"元宝" value:[UIColor redColor] textFont:18]; + } + return _tipsLab2; +} + + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/View/SyceeCell.h" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/View/SyceeCell.h" new file mode 100644 index 0000000000000000000000000000000000000000..0a629c015a0ef9421fa2af1a8af105e52951547e --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/View/SyceeCell.h" @@ -0,0 +1,20 @@ +// +// SyceeCell.h +// JQ_ELOVE +// +// Created by chason on 2017/3/20. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import + +@interface SyceeCell : UITableViewCell + +@property (nonatomic, strong) UILabel *leftLab; +@property (nonatomic, strong) UILabel *centerLab; +@property (nonatomic, strong) UILabel *rightLab; +@property (nonatomic, strong) UILabel *line; + +- (void)initSyceeCell:(NSDictionary *)syceeCellDict; + +@end diff --git "a/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/View/SyceeCell.m" "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/View/SyceeCell.m" new file mode 100644 index 0000000000000000000000000000000000000000..b2ffc9ffeb26594dddecd8d085c18e49631197fe --- /dev/null +++ "b/JQQY/Modules/Mine\357\274\210\346\210\221\347\232\204\357\274\211/View/SyceeCell.m" @@ -0,0 +1,88 @@ +// +// SyceeCell.m +// JQ_ELOVE +// +// Created by chason on 2017/3/20. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import "SyceeCell.h" + +@implementation SyceeCell + + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{ + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + [self addSubview:self.leftLab]; + [self addSubview:self.centerLab]; + [self addSubview:self.rightLab]; + [self addSubview:self.line]; + } + return self; +} + +- (UILabel *)leftLab{ + if (!_leftLab) { + _leftLab = [[UILabel alloc] initWithFrame:CGRectMake(10, 0, (KSCREEN_WIDTH-40)/3, 44)]; + _leftLab.textAlignment = NSTextAlignmentCenter; + _leftLab.textColor = UIColorFromRGB(0x595959); + _leftLab.font = [UIFont systemFontOfSize:13]; + _leftLab.adjustsFontSizeToFitWidth = YES; + } + return _leftLab; +} + +- (UILabel *)centerLab{ + if (!_centerLab) { + _centerLab = [[UILabel alloc] initWithFrame:CGRectMake(_leftLab.right+10, 0, (KSCREEN_WIDTH-40)/3, 44)]; + _centerLab.textAlignment = NSTextAlignmentCenter; + _centerLab.textColor = UIColorFromRGB(0x595959); + _centerLab.font = [UIFont systemFontOfSize:13]; + _centerLab.adjustsFontSizeToFitWidth = YES; + } + return _centerLab; +} + +- (UILabel *)rightLab{ + if (!_rightLab) { + _rightLab = [[UILabel alloc] initWithFrame:CGRectMake(_centerLab.right+10, 0, (KSCREEN_WIDTH-40)/3, 44)]; + _rightLab.textAlignment = NSTextAlignmentCenter; + _rightLab.font = [UIFont systemFontOfSize:13]; + _rightLab.adjustsFontSizeToFitWidth = YES; + } + return _rightLab; +} + +- (UILabel *)line{ + if (!_line) { + _line = [[UILabel alloc] initWithFrame:CGRectMake(0, 44-0.5, KSCREEN_WIDTH, 0.5)]; + _line.backgroundColor = LINECOLOUR; + } + return _line; +} + +- (void)initSyceeCell:(NSDictionary *)syceeCellDict{ + _leftLab.text = ToString(syceeCellDict[@"ctime"]); + _centerLab.text = ToString(syceeCellDict[@"type"]); + if ([_centerLab.text isEqualToString:@"消费"]) { + _rightLab.textColor = CTHEMECOLOR; + _rightLab.text = [NSString stringWithFormat:@"-%@",syceeCellDict[@"redbean"]]; + }else{ + _rightLab.textColor = UIColorFromRGB(0x595959); + _rightLab.text = [NSString stringWithFormat:@"+%@",syceeCellDict[@"redbean"]]; + } +} + +- (void)awakeFromNib { + [super awakeFromNib]; + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +@end diff --git "a/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/.DS_Store" "b/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..d9d11c8cda8133e7e18e7019035107fc13f5ed51 Binary files /dev/null and "b/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/.DS_Store" differ diff --git "a/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Controller/ForgetPwdViewController.h" "b/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Controller/ForgetPwdViewController.h" new file mode 100644 index 0000000000000000000000000000000000000000..4cf6a7e46df52c3307ee2d361df4bbb0a8a99c42 --- /dev/null +++ "b/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Controller/ForgetPwdViewController.h" @@ -0,0 +1,13 @@ +// +// ForgetPwdViewController.h +// JQQY +// +// Created by chason on 2017/11/22. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "RootViewController.h" + +@interface ForgetPwdViewController : RootViewController + +@end diff --git "a/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Controller/ForgetPwdViewController.m" "b/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Controller/ForgetPwdViewController.m" new file mode 100644 index 0000000000000000000000000000000000000000..81f54fad174179224db7e574153842e5efdd4f52 --- /dev/null +++ "b/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Controller/ForgetPwdViewController.m" @@ -0,0 +1,148 @@ +// +// ForgetPwdViewController.m +// JQQY +// +// Created by chason on 2017/11/22. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "ForgetPwdViewController.h" +#import "ZCTextFieldLineView.h" +#import "PhoneCodeViewController.h" + +@interface ForgetPwdViewController () + +@property (nonatomic, strong) ZCTextFieldLineView *phoneView; +@property (nonatomic, strong) ZCTextFieldLineView *passwordView; +@property (nonatomic, strong) UIButton *nextBtn; + +@end + +@implementation ForgetPwdViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.title = @"重置密码"; + [self.view addSubview:self.phoneView]; + [self.view addSubview:self.passwordView]; + [self.view addSubview:self.nextBtn]; +} + +- (ZCTextFieldLineView *)phoneView +{ + if (!_phoneView) { + _phoneView = [[ZCTextFieldLineView alloc] initWithFrame:CGRectMake(0, 10, KSCREEN_WIDTH, 44)]; + _phoneView.textField.delegate = self; + _phoneView.textField.placeholder = @"请输入手机号"; + _phoneView.textField.keyboardType = UIKeyboardTypeNumberPad; + [_phoneView.textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged]; + } + return _phoneView; +} + +- (ZCTextFieldLineView *)passwordView +{ + if (!_passwordView) { + _passwordView = [[ZCTextFieldLineView alloc] initWithFrame:CGRectMake(0, _phoneView.bottom, KSCREEN_WIDTH, 44)]; + _passwordView.textField.delegate = self; + _passwordView.textField.placeholder = @"请输入新密码"; + _passwordView.textField.secureTextEntry = YES; + [_passwordView.textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged]; + } + return _passwordView; +} + +- (UIButton *)nextBtn +{ + if (!_nextBtn) { + _nextBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _nextBtn.frame = CGRectMake(15, _passwordView.bottom+10, KSCREEN_WIDTH-30, 45); + [_nextBtn setImageRoundRadius:3 BorderWidth:0 borderColor:nil]; + _nextBtn.backgroundColor = PURPLECOLOUR; + _nextBtn.alpha = 0.6; + [_nextBtn setTitle:@"下一步" forState:UIControlStateNormal]; + _nextBtn.userInteractionEnabled = NO; + [_nextBtn addTarget:self action:@selector(nextBtnClicked) forControlEvents:UIControlEventTouchUpInside]; + } + return _nextBtn; +} + +#pragma mark ————— 按钮点击事件 ————— + +- (void)nextBtnClicked +{ + if (_phoneView.textField.text.length<11) { + [MBProgressHUD showError:@"请输入正确的手机号" toView:self.view]; + return; + } + if (_passwordView.textField.text.length<6) { + [MBProgressHUD showError:@"请输入六位以上密码" toView:self.view]; + return; + } + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:@"网络异常" toView:self.view]; + return; + } + + PhoneCodeViewController *phoneCodeVC = [[PhoneCodeViewController alloc] init]; + phoneCodeVC.titleStr = @"重置密码"; + phoneCodeVC.phone = _phoneView.textField.text; + phoneCodeVC.password = _passwordView.textField.text; + phoneCodeVC.comeType = @"4"; + [self.navigationController pushViewController:phoneCodeVC animated:YES]; +} + +#pragma mark ————— UITextFieldDelegate ————— + +-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ + if (textField == self.phoneView.textField){ + NSUInteger lengthOfString = string.length; + for (NSInteger loopIndex = 0; loopIndex < lengthOfString; loopIndex++) {//只允许数字输入 + unichar character = [string characterAtIndex:loopIndex]; + if (character < 48) return NO; // 48 unichar for 0 + if (character > 57) return NO; // 57 unichar for 9 + } + NSUInteger proposedNewLength = textField.text.length - range.length + string.length; + if (proposedNewLength > 11) return NO;//限制长度 + return YES; + }else{ + NSUInteger proposedNewLength = textField.text.length - range.length + string.length; + if ( proposedNewLength > 30) return NO;//限制长度 + return YES; + } +} + +-(void)textFieldDidChange :(UITextField *)theTextField{ + if (STR_IS_NOT_EMPTY(_phoneView.textField.text) && STR_IS_NOT_EMPTY(_passwordView.textField.text)) { + _nextBtn.alpha = 1; + _nextBtn.userInteractionEnabled = YES; + }else{ + _nextBtn.alpha = 0.6; + _nextBtn.userInteractionEnabled = NO; + } +} + +-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ + [self.view endEditing:YES]; +} + +- (BOOL)textFieldShouldReturn:(UITextField *)textField{ + return [textField resignFirstResponder]; +} + +- (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/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Controller/LoginViewController.h" "b/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Controller/LoginViewController.h" new file mode 100644 index 0000000000000000000000000000000000000000..d4ba3abd01d01b3c7f2b9911b6ac8f83bcc87956 --- /dev/null +++ "b/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Controller/LoginViewController.h" @@ -0,0 +1,18 @@ +// +// LoginViewController.h +// JQQY +// +// Created by chason on 2017/11/17. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "RootViewController.h" + +@interface LoginViewController : RootViewController + +/* + 登录成功 + */ +@property(nonatomic,copy)void (^loginSuccessBlock)(); + +@end diff --git "a/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Controller/LoginViewController.m" "b/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Controller/LoginViewController.m" new file mode 100644 index 0000000000000000000000000000000000000000..d471ba141481558921c417c0fa0fd31105ff8f17 --- /dev/null +++ "b/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Controller/LoginViewController.m" @@ -0,0 +1,367 @@ +// +// LoginViewController.m +// JQQY +// +// Created by chason on 2017/11/17. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "LoginViewController.h" +#import "InputTextView.h" +#import "CustomNavigationView.h" +#import "RegisterViewController.h" +#import "ThirdLoginView.h" +#import "ForgetPwdViewController.h" +#import "MineViewController.h" +#import "DiscoverViewController.h" +#import "ActivityListModel.h" +#import "HomeViewController.h" + +@interface LoginViewController () +{ + NSString *_type; +} +//自定义导航栏 +@property (nonatomic, strong) CustomNavigationView *customNavigationView; +//启缘 +@property (nonatomic, strong) UIImageView *qyLogo; +//手机号 +@property (nonatomic, strong) InputTextView *phoneView; +//密码 +@property (nonatomic, strong) InputTextView *passwordView; +//登录按钮 +@property (nonatomic, strong) UIButton *loginBtn; +//忘记密码按钮 +@property (nonatomic, strong) UIButton *forgetPwdBtn; +//新用户注册按钮 +@property (nonatomic, strong) UIButton *registerBtn; +//第三方登录 +@property (nonatomic, strong) ThirdLoginView *thirdLoginView; + +@end + +@implementation LoginViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.title = @"登录"; + + self.isHidenNaviBar = YES; + self.statusBarStyle = UIStatusBarStyleDefault; + + [self.view addSubview:self.customNavigationView]; + [self.view addSubview:self.qyLogo]; + [self.view addSubview:self.phoneView]; + [self.view addSubview:self.passwordView]; + [self.view addSubview:self.loginBtn]; + [self.view addSubview:self.forgetPwdBtn]; + [self.view addSubview:self.thirdLoginView]; + [self.view addSubview:self.registerBtn]; +} + +- (CustomNavigationView *)customNavigationView +{ + if (!_customNavigationView) { + _customNavigationView = [[CustomNavigationView alloc] initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH, kTopHeight)]; + _customNavigationView.VC = self; + [_customNavigationView.leftBtn setImage:[UIImage imageNamed:@"close_icon"] forState:UIControlStateNormal]; + } + return _customNavigationView; +} + +- (UIImageView *)qyLogo +{ + if (!_qyLogo) { + _qyLogo = [[UIImageView alloc] initWithFrame:CGRectMake((KSCREEN_WIDTH-117)/2, _customNavigationView.bottom+10, 117,38)]; + _qyLogo.image = [UIImage imageNamed:@"login_logo"]; + } + return _qyLogo; +} + +- (InputTextView *)phoneView{ + if (!_phoneView) { + _phoneView = [[InputTextView alloc] initWithFrame:CGRectMake(15, kTopHeight*2+20, KSCREEN_WIDTH-30, 50)]; + _phoneView.textField.placeholder = @"手机号"; + _phoneView.textField.delegate = self; + _phoneView.textField.keyboardType = UIKeyboardTypeNumberPad; + _phoneView.img.image = [UIImage imageNamed:@"loginphone_icon"]; + [_phoneView.textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged]; + } + return _phoneView; +} + +- (InputTextView *)passwordView{ + if (!_passwordView) { + _passwordView = [[InputTextView alloc] initWithFrame:CGRectMake(15, _phoneView.bottom, KSCREEN_WIDTH-30, 50)]; + _passwordView.textField.placeholder = @"密码"; + _passwordView.textField.secureTextEntry = YES; + _passwordView.textField.delegate = self; + _passwordView.img.image = [UIImage imageNamed:@"password_icon"]; + [_passwordView.textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged]; + } + return _passwordView; +} + +- (UIButton *)loginBtn{ + if (!_loginBtn) { + _loginBtn = [[UIButton alloc] initWithFrame:CGRectMake(15, _passwordView.bottom+30, KSCREEN_WIDTH-30, 45)]; + [_loginBtn setImageRoundRadius:3 BorderWidth:0 borderColor:nil]; + _loginBtn.backgroundColor = PURPLECOLOUR; + _loginBtn.alpha = 0.6; + [_loginBtn setTitle:@"登录" forState:UIControlStateNormal]; + _loginBtn.tag = 101; + _loginBtn.userInteractionEnabled = NO; + [_loginBtn addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside]; + } + return _loginBtn; +} + +- (UIButton *)forgetPwdBtn +{ + if (!_forgetPwdBtn) { + _forgetPwdBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _forgetPwdBtn.frame = CGRectMake(15, _loginBtn.bottom, KSCREEN_WIDTH-30, 30); + _forgetPwdBtn.titleLabel.font = FFONT16; + [_forgetPwdBtn setTitleColor:UIColorFromRGB(0x9f9f9f) forState:UIControlStateNormal]; + [_forgetPwdBtn setTitle:@"忘记密码?" forState:UIControlStateNormal]; + _forgetPwdBtn.tag = 102; + [_forgetPwdBtn addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside]; + } + return _forgetPwdBtn; +} + +- (ThirdLoginView *)thirdLoginView +{ + if (!_thirdLoginView) { + _thirdLoginView = [[ThirdLoginView alloc] initWithFrame:CGRectMake(15, _forgetPwdBtn.bottom+(KSCREEN_HEIGHT-_forgetPwdBtn.bottom-40-100)/2, KSCREEN_WIDTH-30, 100)]; + _thirdLoginView.delegate = self; + } + return _thirdLoginView; +} + +- (UIButton *)registerBtn +{ + if (!_registerBtn) { + _registerBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _registerBtn.frame = CGRectMake(15, self.view.height-40, KSCREEN_WIDTH-30, 30); + _registerBtn.titleLabel.font = FFONT16; + [_registerBtn setTitleColor:[UIColor orangeColor] forState:UIControlStateNormal]; + [_registerBtn setTitle:@"新用户注册" forState:UIControlStateNormal]; + _registerBtn.tag = 103; + [_registerBtn addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside]; + } + return _registerBtn; +} + +#pragma mark ————— 按钮点击事件 ————— + +- (void)btnClicked:(UIButton *)btn +{ + switch (btn.tag) { + case 101:{//登录 + [self loginBtnClicked]; + }break; + + case 102:{//忘记密码 + ForgetPwdViewController *forgetPwdVC = [[ForgetPwdViewController alloc] init]; + [self.navigationController pushViewController:forgetPwdVC animated:YES]; + }break; + + case 103:{//新用户注册 + RegisterViewController *registerVC = [[RegisterViewController alloc] init]; + [self.navigationController pushViewController:registerVC animated:YES]; + }break; + + default: + break; + } +} + +#pragma mark ————— 点击了第三方登录 ————— + +- (void)thirdBtnClicked:(UIButton *)btn +{ + switch (btn.tag) { + case 1://微信 + { + _type = @"1"; + [self goSocialPlatform:UMShareToWechatSession]; + }break; + + case 2://QQ + { + _type = @"2"; + [self goSocialPlatform:UMShareToQQ]; + }break; + + case 3://微博 + { + _type = @"3"; + [self goSocialPlatform:UMShareToSina]; + }break; + + default: + break; + } +} + +- (void)goSocialPlatform:(NSString *)snsName +{ + UMSocialSnsPlatform *snsPlatform = [UMSocialSnsPlatformManager getSocialPlatformWithName:snsName]; + snsPlatform.loginClickHandler(self,[UMSocialControllerService defaultControllerService],YES,^(UMSocialResponseEntity *response){ + if (response.responseCode == UMSResponseCodeSuccess) { + UMSocialAccountEntity *snsAccount = [[UMSocialAccountManager socialAccountDictionary] valueForKey:snsPlatform.platformName]; + [self sendThirdMsg:snsAccount]; + } + }); +} + +- (void)sendThirdMsg:(UMSocialAccountEntity *)snsAccount{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:@"网络异常" toView:self.view]; + return; + } + NSDictionary *parameters = @{ + @"usID":snsAccount.usid, + @"version":APP_VERSION, + }; + [MBProgressHUD showMessag:nil toView:self.view]; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_user_third block:^(NSDictionary *resultDic, NSError *error) { + if(resultDic){ + [MBProgressHUD hideHUDForView:self.view animated:YES]; + if ([resultDic[@"retcode"] intValue] == 1) {//直接登陆成功 + [self initUserDefaults:resultDic]; + + if (self.loginSuccessBlock) { + self.loginSuccessBlock(); + } + if (self.presentingViewController) { + [self dismissViewControllerAnimated:YES completion:nil]; + }else{ + for (UIViewController *VC in self.navigationController.viewControllers) { + if ([VC isKindOfClass:[MineViewController class]]) { + [self.navigationController popToViewController:VC animated:YES]; + break; + } + if ([VC isKindOfClass:[DiscoverViewController class]]) { + [self.navigationController popToViewController:VC animated:YES]; + break; + } + if ([VC isKindOfClass:[UIActivityViewController class]]) { + [self.navigationController popToViewController:VC animated:YES]; + break; + } + if ([VC isKindOfClass:[HomeViewController class]]) { + [self.navigationController popToViewController:VC animated:YES]; + break; + } + } + } + }else if ([resultDic[@"retcode"] intValue] == 900) {//去注册 + RegisterViewController *registerVC = [[RegisterViewController alloc] init]; + registerVC.usid = snsAccount.usid; + registerVC.type = _type; + [self.navigationController pushViewController:registerVC animated:YES]; + }else{ + [MBProgressHUD showError:resultDic[@"explanation"]toView:self.view]; + } + } + }]; +} + +#pragma mark ————— 点击了登录按钮 ————— + +- (void)loginBtnClicked +{ + if ([ZCNetRequestManager isConnectionAvailable] == NO) { + [MBProgressHUD showError:@"网络异常" toView:self.view]; + return; + } + if (_phoneView.textField.text.length != 11) { + [MBProgressHUD showError:@"请输入正确的手机号" toView:self.view]; + return; + } + NSDictionary *parameters = @{@"mobilephone":_phoneView.textField.text, + @"password":_passwordView.textField.text, + @"version":APP_VERSION}; + [MBProgressHUD showMessag:nil toView:self.view]; + [ZCNetRequestManager postRequestWithParameters:parameters subUrl:URL_user_login block:^(NSDictionary *resultDic, NSError *error) { + if (resultDic) { + [MBProgressHUD hideHUDForView:self.view animated:YES]; + if ([resultDic[@"retcode"] intValue] == 1) { + [self initUserDefaults:resultDic]; + if (self.loginSuccessBlock) { + self.loginSuccessBlock(); + } + [self.navigationController popViewControllerAnimated:YES]; + [self dismissViewControllerAnimated:YES completion:nil]; + }else{ + [MBProgressHUD showError:resultDic[@"explanation"]toView:self.view]; + } + } + }]; +} + +- (void)initUserDefaults:(NSDictionary *)dict +{ + [ZCTools saveUserMessage:dict[@"message"]]; + [ZCTools loginHuanxin]; + [ZCTools loginZhiTong]; + //登录成功后发送通知刷新首页 + [[NSNotificationCenter defaultCenter] postNotificationName:@"refreshHome" object:nil]; +} + +#pragma mark ————— UITextFieldDelegate ————— + +-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ + if (textField == self.phoneView.textField){ + NSUInteger lengthOfString = string.length; + for (NSInteger loopIndex = 0; loopIndex < lengthOfString; loopIndex++) {//只允许数字输入 + unichar character = [string characterAtIndex:loopIndex]; + if (character < 48) return NO; // 48 unichar for 0 + if (character > 57) return NO; // 57 unichar for 9 + } + NSUInteger proposedNewLength = textField.text.length - range.length + string.length; + if (proposedNewLength > 11) return NO;//限制长度 + return YES; + }else{ + NSUInteger proposedNewLength = textField.text.length - range.length + string.length; + if ( proposedNewLength > 30) return NO;//限制长度 + return YES; + } +} + +-(void)textFieldDidChange :(UITextField *)theTextField{ + if (STR_IS_NOT_EMPTY(_phoneView.textField.text) && STR_IS_NOT_EMPTY(_passwordView.textField.text)) { + _loginBtn.alpha = 1; + _loginBtn.userInteractionEnabled = YES; + }else{ + _loginBtn.alpha = 0.6; + _loginBtn.userInteractionEnabled = NO; + } +} + +-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ + [self.view endEditing:YES]; +} + +- (BOOL)textFieldShouldReturn:(UITextField *)textField{ + return [textField resignFirstResponder]; +} + +- (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/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Controller/RegisterViewController.h" "b/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Controller/RegisterViewController.h" new file mode 100644 index 0000000000000000000000000000000000000000..9a87741ecc4a36adc481c48b36dff0ce89bb3d69 --- /dev/null +++ "b/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Controller/RegisterViewController.h" @@ -0,0 +1,24 @@ +// +// RegisterViewController.h +// JQQY +// +// Created by chason on 2017/11/17. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "RootViewController.h" + +@interface RegisterViewController : RootViewController + + +/** + 第三方的ID + */ +@property (nonatomic, copy) NSString *usid; + +/** + 1微信 2QQ 3微博 + */ +@property (nonatomic, copy) NSString *type; + +@end diff --git "a/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Controller/RegisterViewController.m" "b/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Controller/RegisterViewController.m" new file mode 100644 index 0000000000000000000000000000000000000000..e9e232bdf83a4997a2f661c2216d011b6a045c25 --- /dev/null +++ "b/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Controller/RegisterViewController.m" @@ -0,0 +1,283 @@ +// +// RegisterViewController.m +// JQQY +// +// Created by chason on 2017/11/17. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "RegisterViewController.h" +#import "CustomNavigationView.h" +#import "InputTextView.h" +#import "PhoneCodeViewController.h" +#import "ALLWebViewController.h" +#import "QYPickerView.h" + +@interface RegisterViewController () + +//自定义导航栏 +@property (nonatomic, strong) CustomNavigationView *customNavigationView; +//启缘 +@property (nonatomic, strong) UIImageView *qyLogo; +//手机号 +@property (nonatomic, strong) InputTextView *phoneView; +//密码 +@property (nonatomic, strong) InputTextView *passwordView; +//性别 +@property (nonatomic, strong) InputTextView *sexView; +//注册按钮 +@property (nonatomic, strong) UIButton *registerBtn; +//用户注册协议 +@property (nonatomic, strong) UIButton *agreementBtn; +//已有帐号登录按钮 +@property (nonatomic, strong) UIButton *backLoginBtn; + +@end + +@implementation RegisterViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.isHidenNaviBar = YES; + self.statusBarStyle = UIStatusBarStyleDefault; + + [self.view addSubview:self.customNavigationView]; + [self.view addSubview:self.qyLogo]; + [self.view addSubview:self.phoneView]; + [self.view addSubview:self.passwordView]; + [self.view addSubview:self.sexView]; + [self.view addSubview:self.registerBtn]; + [self.view addSubview:self.agreementBtn]; + [self.view addSubview:self.backLoginBtn]; +} + +- (CustomNavigationView *)customNavigationView +{ + if (!_customNavigationView) { + _customNavigationView = [[CustomNavigationView alloc] initWithFrame:CGRectMake(0, 0, KSCREEN_WIDTH, kTopHeight)]; + _customNavigationView.VC = self; + [_customNavigationView.leftBtn setImage:[UIImage imageNamed:@"close_icon"] forState:UIControlStateNormal]; + } + return _customNavigationView; +} + +- (UIImageView *)qyLogo +{ + if (!_qyLogo) { + _qyLogo = [[UIImageView alloc] initWithFrame:CGRectMake((KSCREEN_WIDTH-117)/2, _customNavigationView.bottom+10, 117,38)]; + _qyLogo.image = [UIImage imageNamed:@"login_logo"]; + } + return _qyLogo; +} + +- (InputTextView *)phoneView{ + if (!_phoneView) { + _phoneView = [[InputTextView alloc] initWithFrame:CGRectMake(15, kTopHeight*2+20, KSCREEN_WIDTH-30, 50)]; + _phoneView.textField.placeholder = @"手机号"; + _phoneView.textField.delegate = self; + _phoneView.textField.keyboardType = UIKeyboardTypeNumberPad; + _phoneView.img.image = [UIImage imageNamed:@"loginphone_icon"]; + [_phoneView.textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged]; + } + return _phoneView; +} + +- (InputTextView *)passwordView +{ + if (!_passwordView) { + _passwordView = [[InputTextView alloc] initWithFrame:CGRectMake(15, _phoneView.bottom, KSCREEN_WIDTH-30, 50)]; + _passwordView.textField.placeholder = @"设置密码"; + _passwordView.textField.delegate = self; + _passwordView.textField.secureTextEntry = YES; + _passwordView.img.image = [UIImage imageNamed:@"password_icon"]; + [_passwordView.textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged]; + } + return _passwordView; +} + +- (InputTextView *)sexView +{ + if (!_sexView) { + _sexView = [[InputTextView alloc] initWithFrame:CGRectMake(15, _passwordView.bottom, KSCREEN_WIDTH-30, 50)]; + _sexView.textField.placeholder = @"选择性别"; + _sexView.textField.delegate = self; + _sexView.textField.enabled = NO; + _sexView.textField.clearButtonMode = UITextFieldViewModeNever; + _sexView.img.image = [UIImage imageNamed:@"sex_icon"]; + UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(sexViewClicked)]; + [_sexView addGestureRecognizer:tap]; + } + return _sexView; +} + +- (UIButton *)registerBtn +{ + if (!_registerBtn) { + _registerBtn = [[UIButton alloc] initWithFrame:CGRectMake(15, _sexView.bottom+30, KSCREEN_WIDTH-30, 45)]; + [_registerBtn setImageRoundRadius:3 BorderWidth:0 borderColor:nil]; + _registerBtn.backgroundColor = PURPLECOLOUR; + _registerBtn.alpha = 0.6; + _registerBtn.userInteractionEnabled = NO; + [_registerBtn setTitle:@"注册" forState:UIControlStateNormal]; + _registerBtn.tag = 101; + [_registerBtn addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside]; + } + return _registerBtn; +} + +- (UIButton *)agreementBtn +{ + if (!_agreementBtn) { + _agreementBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _agreementBtn.frame = CGRectMake(_registerBtn.left, _registerBtn.bottom+10, _registerBtn.width, 20); + _agreementBtn.titleLabel.textAlignment = NSTextAlignmentLeft; + _agreementBtn.titleLabel.font = FFONT12; + [_agreementBtn setImageEdgeInsets:UIEdgeInsetsMake(0, -10, 0, 0)]; + [_agreementBtn setTitleEdgeInsets:UIEdgeInsetsMake(0, -10, 0, -10)]; + [_agreementBtn setTitleColor:UIColorFromRGB(0x9f9f9f) forState:UIControlStateNormal]; + [_agreementBtn setTitle:@"点击注册即表示您已经阅读并同意《用户注册协议》" forState:UIControlStateNormal]; + [_agreementBtn setImage:[UIImage imageNamed:@"selectDuigou"] forState:UIControlStateNormal]; + [_agreementBtn setImage:[UIImage imageNamed:@"selectDuigou"] forState:UIControlStateHighlighted]; + [_agreementBtn addTarget:self action:@selector(agreementBtnClicded) forControlEvents:UIControlEventTouchUpInside]; + } + return _agreementBtn; +} + +- (UIButton *)backLoginBtn +{ + if (!_backLoginBtn) { + _backLoginBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _backLoginBtn.frame = CGRectMake(15, self.view.height-40, KSCREEN_WIDTH-30, 30); + _backLoginBtn.titleLabel.font = FFONT16; + [_backLoginBtn setTitleColor:[UIColor orangeColor] forState:UIControlStateNormal]; + [_backLoginBtn setTitle:@"已有账号登录" forState:UIControlStateNormal]; + _backLoginBtn.tag = 102; + [_backLoginBtn addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside]; + } + return _backLoginBtn; +} + +#pragma mark ————— 按钮点击事件 ————— + +- (void)btnClicked:(UIButton *)btn +{ + switch (btn.tag) { + case 101:{ + NSLog(@"点击了注册按钮"); + + if (_phoneView.textField.text.length != 11) { + [MBProgressHUD showError:@"请输入正确的手机号" toView:self.view]; + return; + } + if (_passwordView.textField.text.length<6) { + [MBProgressHUD showError:@"请输入六位以上密码" toView:self.view]; + return; + } + + PhoneCodeViewController *phoneCodeVC = [[PhoneCodeViewController alloc] init]; + phoneCodeVC.titleStr = @"手机验证"; + phoneCodeVC.phone = _phoneView.textField.text; + phoneCodeVC.password = _passwordView.textField.text; + phoneCodeVC.sex = [_sexView.textField.text isEqualToString:@"男"] ? @"1" : @"0"; + phoneCodeVC.usid = _usid; + phoneCodeVC.comeType = @"3"; + phoneCodeVC.type = _type; + [self.navigationController pushViewController:phoneCodeVC animated:YES]; + }break; + + case 102:{ + NSLog(@"点击了已有账号登录"); + [self.navigationController popViewControllerAnimated:YES]; + }break; + + + default: + break; + } +} + +- (void)sexViewClicked{ + __weak typeof(self) weakSelf = self; + QYPickerView *pickerVC = [[QYPickerView alloc]init]; + pickerVC.pickerStyle = QYGenderStyle; + [pickerVC setCityBlock:^(PickerModel *model) { + weakSelf.sexView.textField.text = model.p_name; + if (STR_IS_NOT_EMPTY(_phoneView.textField.text) && STR_IS_NOT_EMPTY(_passwordView.textField.text) && STR_IS_NOT_EMPTY(_sexView.textField.text)) { + _registerBtn.alpha = 1; + _registerBtn.userInteractionEnabled = YES; + } + + }]; + [pickerVC show]; +} + +#pragma mark ————— 点击用户注册协议 ————— + +- (void)agreementBtnClicded +{ + ALLWebViewController *webVC = [[ALLWebViewController alloc] init]; + webVC.titleName = @"用户注册协议"; + webVC.urlStr = [NSString stringWithFormat:@"%@about/registrationAgreement.html",BASE_URL]; + [self.navigationController pushViewController:webVC animated:YES]; +} + +#pragma mark ————— UITextFieldDelegate ————— + +-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ + if (textField == self.sexView.textField) { + NSUInteger proposedNewLength = textField.text.length - range.length + string.length; + if ( proposedNewLength > 8) return NO;//限制长度 + return YES; + }else if (textField == self.phoneView.textField){ + NSUInteger lengthOfString = string.length; + for (NSInteger loopIndex = 0; loopIndex < lengthOfString; loopIndex++) {//只允许数字输入 + unichar character = [string characterAtIndex:loopIndex]; + if (character < 48) return NO; // 48 unichar for 0 + if (character > 57) return NO; // 57 unichar for 9 + } + // Check for total length + NSUInteger proposedNewLength = textField.text.length - range.length + string.length; + if (proposedNewLength > 11) return NO;//限制长度 + return YES; + }else{ + NSUInteger proposedNewLength = textField.text.length - range.length + string.length; + if ( proposedNewLength > 30) return NO;//限制长度 + return YES; + } +} + +-(void)textFieldDidChange :(UITextField *)theTextField{ + if (STR_IS_NOT_EMPTY(_phoneView.textField.text) && STR_IS_NOT_EMPTY(_passwordView.textField.text) && STR_IS_NOT_EMPTY(_sexView.textField.text)) { + _registerBtn.alpha = 1; + _registerBtn.userInteractionEnabled = YES; + }else{ + _registerBtn.alpha = 0.6; + _registerBtn.userInteractionEnabled = NO; + } +} + +-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ + [self.view endEditing:YES]; +} + +- (BOOL)textFieldShouldReturn:(UITextField *)textField{ + return [textField resignFirstResponder]; +} + +- (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/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Resource/.DS_Store" "b/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Resource/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..de335eee5c0adf379459d314fa02ffa46624e814 Binary files /dev/null and "b/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Resource/.DS_Store" differ diff --git "a/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Resource/login_logo@2x.png" "b/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Resource/login_logo@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..8edf47a59d2b84523dbcb5701b7b8174c9a3413d Binary files /dev/null and "b/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Resource/login_logo@2x.png" differ diff --git "a/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Resource/login_logo@3x.png" "b/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Resource/login_logo@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..84cdad12c9c10b3e3b2402817769db6f1944d615 Binary files /dev/null and "b/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Resource/login_logo@3x.png" differ diff --git "a/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Resource/loginphone_icon@2x.png" "b/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Resource/loginphone_icon@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..5377042e02c83ecf2a76d54a1386d7bbc5df06ee Binary files /dev/null and "b/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Resource/loginphone_icon@2x.png" differ diff --git "a/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Resource/loginphone_icon@3x.png" "b/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Resource/loginphone_icon@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..2b851bb972868e81654c8f695ba63a3a157ad0e6 Binary files /dev/null and "b/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Resource/loginphone_icon@3x.png" differ diff --git "a/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Resource/password_icon@2x.png" "b/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Resource/password_icon@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..8c465cc489d2d06178cf8e9743a291c373f51b39 Binary files /dev/null and "b/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Resource/password_icon@2x.png" differ diff --git "a/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Resource/password_icon@3x.png" "b/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Resource/password_icon@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..7df81a2d9a3abe7f2ac89807219ad14c558c6155 Binary files /dev/null and "b/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Resource/password_icon@3x.png" differ diff --git "a/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Resource/qq_icon@2x.png" "b/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Resource/qq_icon@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..700bf58ff22f6685973f7d0af7304f8889825b53 Binary files /dev/null and "b/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Resource/qq_icon@2x.png" differ diff --git "a/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Resource/qq_icon@3x.png" "b/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Resource/qq_icon@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..aa3d7dad23dcc00130b4900b06bf16e5b5ffe079 Binary files /dev/null and "b/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Resource/qq_icon@3x.png" differ diff --git "a/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Resource/sex_icon@2x.png" "b/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Resource/sex_icon@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..e3778c24cf8ab2503435133d0efce0e147cc450b Binary files /dev/null and "b/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Resource/sex_icon@2x.png" differ diff --git "a/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Resource/sex_icon@3x.png" "b/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Resource/sex_icon@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..045730c105d360afb18969433252e355d7b809a6 Binary files /dev/null and "b/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Resource/sex_icon@3x.png" differ diff --git "a/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Resource/weibo_icon@2x.png" "b/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Resource/weibo_icon@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..ab44e64d878f1716b91f7a19303c14fddc6fe5d8 Binary files /dev/null and "b/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Resource/weibo_icon@2x.png" differ diff --git "a/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Resource/weibo_icon@3x.png" "b/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Resource/weibo_icon@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..98af220c25ba9ed998c1ce132c3ccf5afc99931a Binary files /dev/null and "b/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Resource/weibo_icon@3x.png" differ diff --git "a/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Resource/weixin_icon@2x.png" "b/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Resource/weixin_icon@2x.png" new file mode 100644 index 0000000000000000000000000000000000000000..b33a010f5d270dee5bd0f62bc62004ab95ea632c Binary files /dev/null and "b/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Resource/weixin_icon@2x.png" differ diff --git "a/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Resource/weixin_icon@3x.png" "b/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Resource/weixin_icon@3x.png" new file mode 100644 index 0000000000000000000000000000000000000000..cc3cdc5072fd1fd6a61b48a1fbba63ff3c84459f Binary files /dev/null and "b/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/Resource/weixin_icon@3x.png" differ diff --git "a/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/View/InputTextView.h" "b/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/View/InputTextView.h" new file mode 100644 index 0000000000000000000000000000000000000000..29a4e5947d7fb0f65446fd98f2ecbb5ce0b71c8e --- /dev/null +++ "b/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/View/InputTextView.h" @@ -0,0 +1,18 @@ +// +// InputTextView.h +// JQ_ELOVE +// +// Created by chason on 2017/2/9. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import + +@interface InputTextView : UIView + +@property (nonatomic, strong) UIImageView *img; +@property (nonatomic, strong) UITextField *textField; +@property (nonatomic, strong) UILabel *line_H; +@property (nonatomic, strong) UILabel *line_V; + +@end diff --git "a/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/View/InputTextView.m" "b/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/View/InputTextView.m" new file mode 100644 index 0000000000000000000000000000000000000000..8c61bb7070f1ec5ec6fb062093810ab74adfe906 --- /dev/null +++ "b/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/View/InputTextView.m" @@ -0,0 +1,57 @@ +// +// InputTextView.m +// JQ_ELOVE +// +// Created by chason on 2017/2/9. +// Copyright © 2017年 Shmily. All rights reserved. +// + +#import "InputTextView.h" + +@implementation InputTextView + +- (id)initWithFrame:(CGRect)frame{ + self = [super initWithFrame:frame]; + if (self) { + [self addSubview:self.img]; + [self addSubview:self.line_V]; + [self addSubview:self.textField]; + [self addSubview:self.line_H]; + } + return self; +} + +- (UIImageView *)img{ + if (!_img) { + _img = [[UIImageView alloc] initWithFrame:CGRectMake(10, (self.height-20)/2, 20, 20)]; + } + return _img; +} + +- (UILabel *)line_V{ + if (!_line_V) { + _line_V = [[UILabel alloc] initWithFrame:CGRectMake(_img.right+10, (self.height-20)/2, 1, 20)]; + _line_V.backgroundColor = LINECOLOUR; + } + return _line_V; +} + +- (UITextField *)textField{ + if (!_textField) { + _textField = [[UITextField alloc] initWithFrame:CGRectMake(_line_V.right+10, (self.height-30)/2, self.width-(10+20+10+1+10), 30)]; + _textField.clearButtonMode = UITextFieldViewModeAlways; + _textField.textColor = MAIN_TEXTCOLOR; + _textField.font = FFONT16; + } + return _textField; +} + +- (UILabel *)line_H{ + if (!_line_H) { + _line_H = [[UILabel alloc] initWithFrame:CGRectMake(0, self.height-0.5, self.width, 0.5)]; + _line_H.backgroundColor = LINECOLOUR; + } + return _line_H; +} + +@end diff --git "a/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/View/ThirdLoginView.h" "b/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/View/ThirdLoginView.h" new file mode 100644 index 0000000000000000000000000000000000000000..c18380f7d25061a4a6b15c2bd29347e072b0fca2 --- /dev/null +++ "b/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/View/ThirdLoginView.h" @@ -0,0 +1,26 @@ +// +// ThirdLoginView.h +// JQQY +// +// Created by chason on 2017/11/18. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import + +@protocol ThirdLoginViewDelegate + +- (void)thirdBtnClicked:(UIButton *)btn; + +@end + +@interface ThirdLoginView : UIView + +@property (assign, nonatomic) id delegate; + +@property (nonatomic, strong) UILabel *titleLab; +@property (nonatomic, strong) UIButton *wechatBtn; +@property (nonatomic, strong) UIButton *qqBtn; +@property (nonatomic, strong) UIButton *weiboBtn; + +@end diff --git "a/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/View/ThirdLoginView.m" "b/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/View/ThirdLoginView.m" new file mode 100644 index 0000000000000000000000000000000000000000..7e231af9e3fd20db0d7b6767b93490d060969dec --- /dev/null +++ "b/JQQY/Modules/RegisterAndLogin\357\274\210\346\263\250\345\206\214\345\222\214\347\231\273\345\275\225\357\274\211/View/ThirdLoginView.m" @@ -0,0 +1,87 @@ +// +// ThirdLoginView.m +// JQQY +// +// Created by chason on 2017/11/18. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#import "ThirdLoginView.h" + +@implementation ThirdLoginView + +- (instancetype)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + [self addSubview:self.titleLab]; + [self addSubview:self.qqBtn]; + [self addSubview:self.wechatBtn]; + [self addSubview:self.weiboBtn]; + } + return self; +} + +- (UILabel *)titleLab +{ + if (!_titleLab) { + _titleLab = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, self.width, 20)]; + _titleLab.textAlignment = NSTextAlignmentCenter; + _titleLab.textColor = UIColorFromRGB(0xdbdbdb); + _titleLab.font = FFONT12; + _titleLab.text = @"———— 其他方式登录 ————"; + } + return _titleLab; +} + +- (UIButton *)qqBtn +{ + if (!_qqBtn) { + _qqBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _qqBtn.frame = CGRectMake((self.width-45)/2, _titleLab.bottom+10, 45, 45); + _qqBtn.backgroundColor = UIColorFromRGB(0x498ad5); + [_qqBtn setImage:[UIImage imageNamed:@"qq_icon"] forState:UIControlStateNormal]; + [_qqBtn setImageRoundRadius:_qqBtn.width/2 BorderWidth:0 borderColor:nil]; + _qqBtn.tag = 2; + [_qqBtn addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside]; + } + return _qqBtn; +} + +- (UIButton *)wechatBtn +{ + if (!_wechatBtn) { + _wechatBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _wechatBtn.frame = CGRectMake(_qqBtn.left-75, _qqBtn.top, _qqBtn.width, _qqBtn.height); + _wechatBtn.backgroundColor = UIColorFromRGB(0x00bb29); + [_wechatBtn setImage:[UIImage imageNamed:@"weixin_icon"] forState:UIControlStateNormal]; + [_wechatBtn setImageRoundRadius:_qqBtn.width/2 BorderWidth:0 borderColor:nil]; + _wechatBtn.tag = 1; + [_wechatBtn addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside]; + } + return _wechatBtn; +} + +- (UIButton *)weiboBtn +{ + if (!_weiboBtn) { + _weiboBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _weiboBtn.frame = CGRectMake(_qqBtn.right+30, _qqBtn.top, _qqBtn.width, _qqBtn.height); + _weiboBtn.backgroundColor = UIColorFromRGB(0xe05244); + [_weiboBtn setImage:[UIImage imageNamed:@"weibo_icon"] forState:UIControlStateNormal]; + [_weiboBtn setImageRoundRadius:_qqBtn.width/2 BorderWidth:0 borderColor:nil]; + _weiboBtn.tag = 3; + [_weiboBtn addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside]; + } + return _weiboBtn; +} + +- (void)btnClicked:(UIButton *)btn +{ + if ([_delegate respondsToSelector:@selector(thirdBtnClicked:)]) { + [_delegate thirdBtnClicked:btn]; + } +} + + +@end diff --git "a/JQQY/Modules/\345\206\205\350\264\255/BuyBeanController.h" "b/JQQY/Modules/\345\206\205\350\264\255/BuyBeanController.h" new file mode 100644 index 0000000000000000000000000000000000000000..aa631f744863a6a87231447649bdd11cd59713d1 --- /dev/null +++ "b/JQQY/Modules/\345\206\205\350\264\255/BuyBeanController.h" @@ -0,0 +1,26 @@ +// +// BuyBeanController.h +// JQQY +// +// Created by Shmily on 2018/2/6. +// Copyright © 2018年 jiuqi. All rights reserved. +// + +#import +#import "ZCRefreshTableViewController.h" +@interface BuyBeanController : ZCRefreshTableViewController + +@end + + + +@interface ProductModel : NSObject + + +@property (nonatomic,retain)NSString *product_name; +@property (nonatomic,retain)NSString *product_price; +@property (nonatomic,retain)NSString *product_nameId; + + +@end + diff --git "a/JQQY/Modules/\345\206\205\350\264\255/BuyBeanController.m" "b/JQQY/Modules/\345\206\205\350\264\255/BuyBeanController.m" new file mode 100644 index 0000000000000000000000000000000000000000..7a7d925142ed2b89e2d502c5281cbca8f1abac19 --- /dev/null +++ "b/JQQY/Modules/\345\206\205\350\264\255/BuyBeanController.m" @@ -0,0 +1,265 @@ +// +// BuyBeanController.m +// JQQY +// +// Created by Shmily on 2018/2/6. +// Copyright © 2018年 jiuqi. All rights reserved. +// + +#import "BuyBeanController.h" + +#import + + +#define ProductID_6 @"6_jiuqi_baidou" +#define ProductID_18 @"18_jiuqi_baidou" +#define ProductID_30 @"30_jiuqi_baidou" +#define ProductID_88 @"88_jiuqi_baidou" +#define ProductID_288 @"288_jiuqi_baidou" + + + +@interface BuyBeanController () +{ + NSString *_productId; +} +@end + +@implementation BuyBeanController + + +- (void)viewDidLoad +{ + [super viewDidLoad]; + self.title = @"充值"; + + [[SKPaymentQueue defaultQueue]addTransactionObserver:self]; + [self saveData]; + +} + +- (void)saveData +{ + for (int i=0; i<5; i++) { + ProductModel *model = [[ProductModel alloc]init]; + switch (i) { + case 0:{ + model.product_name = @"6百豆"; + model.product_price = @"6元"; + model.product_nameId = ProductID_6; + } + break; + case 1:{ + model.product_name = @"18百豆"; + model.product_price = @"18元"; + model.product_nameId = ProductID_18; + } + break; + case 2:{ + model.product_name = @"30百豆"; + model.product_price = @"30元"; + model.product_nameId = ProductID_30; + } + break; + case 3:{ + model.product_name = @"88百豆"; + model.product_price = @"88元"; + model.product_nameId = ProductID_88; + } + break; + case 4:{ + model.product_name = @"288百豆"; + model.product_price = @"288元"; + model.product_nameId = ProductID_288; + } + break; + default: + break; + } + [self.dataArray addObject:model]; + } + [self.tableView reloadData]; +} + + + + + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + static NSString *CellIdentifier = @"myCell"; + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; + if (!cell) { + cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]; + } + ProductModel *model = self.dataArray[indexPath.row]; + cell.textLabel.text = model.product_name; + cell.detailTextLabel.text = model.product_price; + + cell.selectionStyle =0; + return cell; +} + +- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + return self.dataArray.count; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + return 50; +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + ProductModel *model = self.dataArray[indexPath.row]; + if ([SKPaymentQueue canMakePayments]) { + [self RequestProductData:model]; + }else{ + UIAlertView *alerView = [[UIAlertView alloc] initWithTitle:@"提示" message:@"您的手机没有打开程序内付费购买" delegate:nil cancelButtonTitle:@"关闭" otherButtonTitles:nil]; + [alerView show]; + } +} + + +-(void)RequestProductData:(ProductModel *)mo{ + + [MBProgressHUD showMessag:nil toView:self.view]; + _productId = mo.product_nameId; + NSArray *product = [[NSArray alloc] initWithObjects:mo.product_nameId,nil]; + NSSet *nsset = [NSSet setWithArray:product]; + SKProductsRequest *request=[[SKProductsRequest alloc] initWithProductIdentifiers: nsset]; + request.delegate=self; + [request start];} + +- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response +{ + NSArray *myProduct = response.products; + SKProduct *p = nil; + for(SKProduct *product in myProduct){ + NSLog(@"Product id: %@" , product.productIdentifier); + if ([product.productIdentifier isEqualToString:_productId]) { + p = product; + } + } + SKPayment *payment = [SKPayment paymentWithProduct:p]; + [[SKPaymentQueue defaultQueue] addPayment:payment]; + +} + +//弹出错误信息 +- (void)request:(SKRequest *)request didFailWithError:(NSError *)error +{ + NSLog(@"------------------错误-----------------:%@", error); + [MBProgressHUD hideHUDForView:self.view animated:YES]; +} + +-(void) requestDidFinish:(SKRequest *)request{ + + NSLog(@"----------反馈信息结束--------------"); + +} + +-(void) PurchasedTransaction: (SKPaymentTransaction *)transaction{ + + NSArray *transactions =[[NSArray alloc] initWithObjects:transaction, nil]; + [ self paymentQueue:[SKPaymentQueue defaultQueue] updatedTransactions:transactions]; +} + +//千万不要忘记绑定,代码如下: + +- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions//交易结果 +{ + for (SKPaymentTransaction *transaction in transactions) { + switch (transaction.transactionState) { + case SKPaymentTransactionStatePurchased: + { + [self completeTransaction:transaction]; + + } break; + case SKPaymentTransactionStateFailed:{ + [MBProgressHUD hideHUDForView:self.view animated:YES]; + [self failedTransaction:transaction]; + + }break; + + case SKPaymentTransactionStateRestored://已经购买过该商品 + + + case SKPaymentTransactionStatePurchasing://商品添加进列表 + + + break + ; + default: + [[SKPaymentQueue defaultQueue] finishTransaction:transaction];//结束支付事务 + break; + } + } +} + +- (void)completeTransaction: (SKPaymentTransaction *)transaction{ + + [MBProgressHUD hideHUDForView:self.view animated:YES]; + NSURL *receiptURL = [[NSBundle mainBundle] appStoreReceiptURL]; + NSData *receipt = [NSData dataWithContentsOfURL:receiptURL]; + if (!receipt) { + NSLog(@"receipt 本地数据不存在"); + return; + } + + NSString *base64_receipt = [receipt base64EncodedStringWithOptions:0]; + NSString *Identifier=transaction.transactionIdentifier; + + NSLog(@"%@-----%@",base64_receipt,Identifier); + + [[SKPaymentQueue defaultQueue] finishTransaction:transaction]; + +} + + + + +- (void) failedTransaction: (SKPaymentTransaction *)transaction +{ + + if (transaction.error.code != SKErrorPaymentCancelled) + { + [MBProgressHUD showError:@"交易失败" toView:self.view]; + }else{ + [MBProgressHUD showError:@"取消交易" toView:self.view]; + } + [[SKPaymentQueue defaultQueue] finishTransaction: transaction]; +} + +-(void) paymentQueueRestoreCompletedTransactionsFinished: (SKPaymentTransaction *)transaction{ + +} + + +- (void) restoreTransaction: (SKPaymentTransaction *)transaction{ + NSLog(@" 交易恢复处理"); +} + +-(void) paymentQueue:(SKPaymentQueue *) paymentQueue restoreCompletedTransactionsFailedWithError:(NSError *)error{ + NSLog(@"-------paymentQueue----"); +} + +- (void)dealloc +{ + [[SKPaymentQueue defaultQueue] removeTransactionObserver:self]; +} + + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; +} + + +@end + +@implementation ProductModel + + +@end + diff --git a/JQQY/PrefixHeader.pch b/JQQY/PrefixHeader.pch new file mode 100644 index 0000000000000000000000000000000000000000..6eb0ca7236574259409e3f95b8f8efed984e4565 --- /dev/null +++ b/JQQY/PrefixHeader.pch @@ -0,0 +1,68 @@ +// +// PrefixHeader.pch +// JQQY +// +// Created by chason on 2017/11/16. +// Copyright © 2017年 jiuqi. All rights reserved. +// + +#ifndef PrefixHeader_pch +#define PrefixHeader_pch + + + +#endif /* PrefixHeader_pch */ + + +#ifdef __OBJC__ + +/** 全局宏 */ +#import "UtilsMacros.h" +#import "FontAndColorMacros.h" +#import "URLMacros.h" +#import "UserInfoMacros.h" + +/** 基础类 */ +#import "AppDelegate.h" +#import "AppDelegate+AppService.h" +#import "RootViewController.h" +#import "RootNavigationController.h" +#import "UIView+ZCExtension.h" +#import "UIView+FirstViewController.h" +#import "AppDelegate+AppTripartite.h" +#import "UIView+RadiusView.h" +#import "TapGestureRecognizer.h" + +#import "UIButton+Ext.h" +#import "NSString+transform.h" +#import "NSString+Ext.h" +#import "ZCTools.h" +#import + +#import "LoginViewController.h" + + +/** 第三方 */ +#import "UIImageView+WebCache.h" +#import "ZCNetRequestManager.h" +#import "JSONKit.h" +#import "MBProgressHUD+Add.h" +//资讯 +#import "NewsAgent.h" +//百度 +#import "MapManager.h" +#import + + +//友盟 +#import "UMMobClick/MobClick.h" +#import "UMSocial.h" +#import "UMSocialWechatHandler.h" +#import "UMSocialQQHandler.h" +#import "UMSocialSinaSSOHandler.h" + + +#import +#import + +#endif diff --git a/JQQY/Resource/.DS_Store b/JQQY/Resource/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..f02991b90ad2345c298804410ae6f8d0ecbf9fe5 Binary files /dev/null and b/JQQY/Resource/.DS_Store differ diff --git a/JQQY/Resource/avatar_default@2x.png b/JQQY/Resource/avatar_default@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b50d9a98078e6acd23dde62830cef0d2476bc589 Binary files /dev/null and b/JQQY/Resource/avatar_default@2x.png differ diff --git a/JQQY/Resource/avatar_default@3x.png b/JQQY/Resource/avatar_default@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..5ca7cb52eb3c07129aabb2a53800479c52cbeb73 Binary files /dev/null and b/JQQY/Resource/avatar_default@3x.png differ diff --git a/JQQY/Resource/back_icon@2x.png b/JQQY/Resource/back_icon@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..a41cfaad317eb0c293b850c79584c93623a8d83d Binary files /dev/null and b/JQQY/Resource/back_icon@2x.png differ diff --git a/JQQY/Resource/back_icon@3x.png b/JQQY/Resource/back_icon@3x.png new file mode 100755 index 0000000000000000000000000000000000000000..a7299357d63d2ead058efc9033c7ce9f97fa9ddb Binary files /dev/null and b/JQQY/Resource/back_icon@3x.png differ diff --git a/JQQY/Resource/close_icon@2x.png b/JQQY/Resource/close_icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..49f85c2c5422f0444ebea78ffac2c12a8b3c9de8 Binary files /dev/null and b/JQQY/Resource/close_icon@2x.png differ diff --git a/JQQY/Resource/close_icon@3x.png b/JQQY/Resource/close_icon@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..d2a91c7893cd96051df72280ef3b55f3c768b653 Binary files /dev/null and b/JQQY/Resource/close_icon@3x.png differ diff --git a/JQQY/Resource/enterprise_hui_icon@2x.png b/JQQY/Resource/enterprise_hui_icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..05357f484bcb1e70d84530b4d6e85e7d8edcb932 Binary files /dev/null and b/JQQY/Resource/enterprise_hui_icon@2x.png differ diff --git a/JQQY/Resource/enterprise_hui_icon@3x.png b/JQQY/Resource/enterprise_hui_icon@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..e671b3fc517320f2a9f0d53a4a9192bb94582ba1 Binary files /dev/null and b/JQQY/Resource/enterprise_hui_icon@3x.png differ diff --git a/JQQY/Resource/enterprise_icon@2x.png b/JQQY/Resource/enterprise_icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..3d619d08cb75de39a8ca783a62093407108ea275 Binary files /dev/null and b/JQQY/Resource/enterprise_icon@2x.png differ diff --git a/JQQY/Resource/enterprise_icon@3x.png b/JQQY/Resource/enterprise_icon@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..24bb8f4edc5b535838a0903127f396ebdc072c8b Binary files /dev/null and b/JQQY/Resource/enterprise_icon@3x.png differ diff --git a/JQQY/Resource/icon2_1@2x.png b/JQQY/Resource/icon2_1@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a8970de85a451a3adf51a54dad813ddbfce0fc92 Binary files /dev/null and b/JQQY/Resource/icon2_1@2x.png differ diff --git a/JQQY/Resource/icon2_1@3x.png b/JQQY/Resource/icon2_1@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..93cdf36de8bd4ccdd1970e4972a800bba3fd03e6 Binary files /dev/null and b/JQQY/Resource/icon2_1@3x.png differ diff --git a/JQQY/Resource/icon2_2@2x.png b/JQQY/Resource/icon2_2@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..e79cf53672419fb8c6bc4e1f61183233af16899e Binary files /dev/null and b/JQQY/Resource/icon2_2@2x.png differ diff --git a/JQQY/Resource/icon2_2@3x.png b/JQQY/Resource/icon2_2@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..5c503d26ad6001adfcebb34a10578d07cfd55caa Binary files /dev/null and b/JQQY/Resource/icon2_2@3x.png differ diff --git a/JQQY/Resource/icon2_3@2x.png b/JQQY/Resource/icon2_3@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..ae6d8c7e67b3a5307a6c76b10dc4fc20ac719d8b Binary files /dev/null and b/JQQY/Resource/icon2_3@2x.png differ diff --git a/JQQY/Resource/icon2_3@3x.png b/JQQY/Resource/icon2_3@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..57eac5c4cf67d9e0a2e98a897b1159e352ab9a3e Binary files /dev/null and b/JQQY/Resource/icon2_3@3x.png differ diff --git a/JQQY/Resource/icon2_4@2x.png b/JQQY/Resource/icon2_4@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b97d8573785138a73f9a64f46ea97871b3162588 Binary files /dev/null and b/JQQY/Resource/icon2_4@2x.png differ diff --git a/JQQY/Resource/icon2_4@3x.png b/JQQY/Resource/icon2_4@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..8c727984433bcbd34ccf122f04a94d0cd614adba Binary files /dev/null and b/JQQY/Resource/icon2_4@3x.png differ diff --git a/JQQY/Resource/icon2_5@2x.png b/JQQY/Resource/icon2_5@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..fc0f2ba36034304d5adc9f41c99a48388477dd99 Binary files /dev/null and b/JQQY/Resource/icon2_5@2x.png differ diff --git a/JQQY/Resource/icon2_5@3x.png b/JQQY/Resource/icon2_5@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..efb189a00d790fcdb3e9d464aaaad3b42b988c81 Binary files /dev/null and b/JQQY/Resource/icon2_5@3x.png differ diff --git a/JQQY/Resource/new_enterprise_hui_icon@2x.png b/JQQY/Resource/new_enterprise_hui_icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..14ab584dd9e5036e335a4eb54b60d5b66dd0c0a6 Binary files /dev/null and b/JQQY/Resource/new_enterprise_hui_icon@2x.png differ diff --git a/JQQY/Resource/new_enterprise_hui_icon@3x.png b/JQQY/Resource/new_enterprise_hui_icon@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..9dee798f3abf5b6b0b06698eb7dd430f1e268d41 Binary files /dev/null and b/JQQY/Resource/new_enterprise_hui_icon@3x.png differ diff --git a/JQQY/Resource/new_enterprise_icon@2x.png b/JQQY/Resource/new_enterprise_icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..852fb669f2702f3dc2928744d26c3cafbfd1456a Binary files /dev/null and b/JQQY/Resource/new_enterprise_icon@2x.png differ diff --git a/JQQY/Resource/new_enterprise_icon@3x.png b/JQQY/Resource/new_enterprise_icon@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..8e0c0ac6425c6a163d25196b9fee72997864fb85 Binary files /dev/null and b/JQQY/Resource/new_enterprise_icon@3x.png differ diff --git a/JQQY/Resource/new_phone_hui_icon@2x.png b/JQQY/Resource/new_phone_hui_icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d0c6ddd807d76858996f2d3a8d141f6f8b92eabd Binary files /dev/null and b/JQQY/Resource/new_phone_hui_icon@2x.png differ diff --git a/JQQY/Resource/new_phone_hui_icon@3x.png b/JQQY/Resource/new_phone_hui_icon@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..3b3b01b66aeee15f0947f8378e91d0a3d0f583d0 Binary files /dev/null and b/JQQY/Resource/new_phone_hui_icon@3x.png differ diff --git a/JQQY/Resource/new_phone_icon@2x.png b/JQQY/Resource/new_phone_icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..3603e015195e51231434495937742d7068522e23 Binary files /dev/null and b/JQQY/Resource/new_phone_icon@2x.png differ diff --git a/JQQY/Resource/new_phone_icon@3x.png b/JQQY/Resource/new_phone_icon@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..9819a3c23baa5b0b525df8b706248dc73f8be5cc Binary files /dev/null and b/JQQY/Resource/new_phone_icon@3x.png differ diff --git a/JQQY/Resource/new_realname_hui_icon@2x.png b/JQQY/Resource/new_realname_hui_icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..2b425005ca07473b5f3652e89d314f220bfd6cc0 Binary files /dev/null and b/JQQY/Resource/new_realname_hui_icon@2x.png differ diff --git a/JQQY/Resource/new_realname_hui_icon@3x.png b/JQQY/Resource/new_realname_hui_icon@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..08c4214f62976d3c484f8e51b8bdfc9d4201134a Binary files /dev/null and b/JQQY/Resource/new_realname_hui_icon@3x.png differ diff --git a/JQQY/Resource/new_realname_icon@2x.png b/JQQY/Resource/new_realname_icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..1919e812a7c3a4e0e7f896ef314969d8d9da285a Binary files /dev/null and b/JQQY/Resource/new_realname_icon@2x.png differ diff --git a/JQQY/Resource/new_realname_icon@3x.png b/JQQY/Resource/new_realname_icon@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..09673da314ac9069f28586eeaab778a60751c65f Binary files /dev/null and b/JQQY/Resource/new_realname_icon@3x.png differ diff --git a/JQQY/Resource/new_tuan_hui_icon@2x.png b/JQQY/Resource/new_tuan_hui_icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9947381ede452b6ae32910967f798252f499d9cb Binary files /dev/null and b/JQQY/Resource/new_tuan_hui_icon@2x.png differ diff --git a/JQQY/Resource/new_tuan_hui_icon@3x.png b/JQQY/Resource/new_tuan_hui_icon@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..0f36cc05320713ebe97db4da4ab001c6c209ab4a Binary files /dev/null and b/JQQY/Resource/new_tuan_hui_icon@3x.png differ diff --git a/JQQY/Resource/new_tuan_icon@2x.png b/JQQY/Resource/new_tuan_icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..69cfa71eaf03dab93828466e93063ec3222fba00 Binary files /dev/null and b/JQQY/Resource/new_tuan_icon@2x.png differ diff --git a/JQQY/Resource/new_tuan_icon@3x.png b/JQQY/Resource/new_tuan_icon@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..fb44d26a1496bcbc8c133ffef1bb7ca3c00c7f9d Binary files /dev/null and b/JQQY/Resource/new_tuan_icon@3x.png differ diff --git a/JQQY/Resource/noData@2x.png b/JQQY/Resource/noData@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c0295fe069c31c927cd721d813d7be6c624664ea Binary files /dev/null and b/JQQY/Resource/noData@2x.png differ diff --git a/JQQY/Resource/noData@3x.png b/JQQY/Resource/noData@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..bfbee870e5fced7765b72cb68869fe76a247828c Binary files /dev/null and b/JQQY/Resource/noData@3x.png differ diff --git a/JQQY/Resource/phone_hui_icon@2x.png b/JQQY/Resource/phone_hui_icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..2376b39e4f4332971f383d0dd77987aadb501114 Binary files /dev/null and b/JQQY/Resource/phone_hui_icon@2x.png differ diff --git a/JQQY/Resource/phone_hui_icon@3x.png b/JQQY/Resource/phone_hui_icon@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..aa153160c3b39d65369004033e397d779642c005 Binary files /dev/null and b/JQQY/Resource/phone_hui_icon@3x.png differ diff --git a/JQQY/Resource/phone_icon@2x.png b/JQQY/Resource/phone_icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..e1641b24b14fd0191299a1ccb96dfb9c299eef16 Binary files /dev/null and b/JQQY/Resource/phone_icon@2x.png differ diff --git a/JQQY/Resource/phone_icon@3x.png b/JQQY/Resource/phone_icon@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..d60771a2cef83872ecb4faa059e65672516e1166 Binary files /dev/null and b/JQQY/Resource/phone_icon@3x.png differ diff --git a/JQQY/Resource/picture_default@2x.png b/JQQY/Resource/picture_default@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..13a0f9e0c7eb9055761b8b4731d5bb8784051da9 Binary files /dev/null and b/JQQY/Resource/picture_default@2x.png differ diff --git a/JQQY/Resource/picture_default@3x.png b/JQQY/Resource/picture_default@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..a6a9f70b332965d8ba56e9173f736e59ef44dd9a Binary files /dev/null and b/JQQY/Resource/picture_default@3x.png differ diff --git a/JQQY/Resource/realname_hui_icon@2x.png b/JQQY/Resource/realname_hui_icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..804e60179bbf8d669088c32e04d8a08b82cfbcb1 Binary files /dev/null and b/JQQY/Resource/realname_hui_icon@2x.png differ diff --git a/JQQY/Resource/realname_hui_icon@3x.png b/JQQY/Resource/realname_hui_icon@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..3dac02b993abd2defbabe5dd031e79e3bd9b84dd Binary files /dev/null and b/JQQY/Resource/realname_hui_icon@3x.png differ diff --git a/JQQY/Resource/realname_icon@2x.png b/JQQY/Resource/realname_icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..11055d829e1beca5c5e8776ac49b6725e7eb4b43 Binary files /dev/null and b/JQQY/Resource/realname_icon@2x.png differ diff --git a/JQQY/Resource/realname_icon@3x.png b/JQQY/Resource/realname_icon@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..13f16be462d99bcba1439e82c53b72e38f960888 Binary files /dev/null and b/JQQY/Resource/realname_icon@3x.png differ diff --git a/JQQY/Resource/share_white_icon@2x.png b/JQQY/Resource/share_white_icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a7f5976efafc38a704beef99c9df0a1800ee4cb5 Binary files /dev/null and b/JQQY/Resource/share_white_icon@2x.png differ diff --git a/JQQY/Resource/share_white_icon@3x.png b/JQQY/Resource/share_white_icon@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..5a95a13c5d24c4e92b6414d439606b1c92b6ebf4 Binary files /dev/null and b/JQQY/Resource/share_white_icon@3x.png differ diff --git a/JQQY/Resource/tabbar/activity@2x.png b/JQQY/Resource/tabbar/activity@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9be1f77af39d17767216f7b5f3153b4c64f66b14 Binary files /dev/null and b/JQQY/Resource/tabbar/activity@2x.png differ diff --git a/JQQY/Resource/tabbar/activity@3x.png b/JQQY/Resource/tabbar/activity@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..40eab6819aeb13b36fc0eca519fc1be1e47c8a10 Binary files /dev/null and b/JQQY/Resource/tabbar/activity@3x.png differ diff --git a/JQQY/Resource/tabbar/activity_hui@2x.png b/JQQY/Resource/tabbar/activity_hui@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..5b254c72306d58b27b77b6846f1af30d2d1d98c7 Binary files /dev/null and b/JQQY/Resource/tabbar/activity_hui@2x.png differ diff --git a/JQQY/Resource/tabbar/activity_hui@3x.png b/JQQY/Resource/tabbar/activity_hui@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..e7e3457662e2054b5d29fdb1b2b1f8755be3b345 Binary files /dev/null and b/JQQY/Resource/tabbar/activity_hui@3x.png differ diff --git a/JQQY/Resource/tabbar/discover@2x.png b/JQQY/Resource/tabbar/discover@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..2e35a683cd9d397cdd638c41424909625edcd610 Binary files /dev/null and b/JQQY/Resource/tabbar/discover@2x.png differ diff --git a/JQQY/Resource/tabbar/discover@3x.png b/JQQY/Resource/tabbar/discover@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..619d833926b4b3870b6b85753ba84ae03e615f46 Binary files /dev/null and b/JQQY/Resource/tabbar/discover@3x.png differ diff --git a/JQQY/Resource/tabbar/discover_hui@2x.png b/JQQY/Resource/tabbar/discover_hui@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..09e7d3928a6a953cd8ef6196d88eb21bdb72829a Binary files /dev/null and b/JQQY/Resource/tabbar/discover_hui@2x.png differ diff --git a/JQQY/Resource/tabbar/discover_hui@3x.png b/JQQY/Resource/tabbar/discover_hui@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..3e20d726ae1092573f50f30b8eef747131d8ee92 Binary files /dev/null and b/JQQY/Resource/tabbar/discover_hui@3x.png differ diff --git a/JQQY/Resource/tabbar/home@2x.png b/JQQY/Resource/tabbar/home@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..ede5c2a97d127c208ad07b96e0a08671532a5cd7 Binary files /dev/null and b/JQQY/Resource/tabbar/home@2x.png differ diff --git a/JQQY/Resource/tabbar/home@3x.png b/JQQY/Resource/tabbar/home@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..fba81b3136a41c1f9bc268cbe7778d24f5d44ad6 Binary files /dev/null and b/JQQY/Resource/tabbar/home@3x.png differ diff --git a/JQQY/Resource/tabbar/home_hui@2x.png b/JQQY/Resource/tabbar/home_hui@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..1375448af36c6e415b6898b1d31b453312310a76 Binary files /dev/null and b/JQQY/Resource/tabbar/home_hui@2x.png differ diff --git a/JQQY/Resource/tabbar/home_hui@3x.png b/JQQY/Resource/tabbar/home_hui@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..e81c2ae334fdf33bbf54a02c70d4dd916b885c7f Binary files /dev/null and b/JQQY/Resource/tabbar/home_hui@3x.png differ diff --git a/JQQY/Resource/tabbar/mine@2x.png b/JQQY/Resource/tabbar/mine@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c4f10b89008fb4dca4eb879ce10c93233d67ccb3 Binary files /dev/null and b/JQQY/Resource/tabbar/mine@2x.png differ diff --git a/JQQY/Resource/tabbar/mine@3x.png b/JQQY/Resource/tabbar/mine@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..193c5c9eb541d88b0c33dfc45893d88e137e2165 Binary files /dev/null and b/JQQY/Resource/tabbar/mine@3x.png differ diff --git a/JQQY/Resource/tabbar/mine_hui@2x.png b/JQQY/Resource/tabbar/mine_hui@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..38911d021e663165ddcc0d6ea470b01402296a57 Binary files /dev/null and b/JQQY/Resource/tabbar/mine_hui@2x.png differ diff --git a/JQQY/Resource/tabbar/mine_hui@3x.png b/JQQY/Resource/tabbar/mine_hui@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..35b8ff3bf98400f2e2634835a4720d3e191b58fc Binary files /dev/null and b/JQQY/Resource/tabbar/mine_hui@3x.png differ diff --git a/JQQY/Resource/tuan_hui_icon@2x.png b/JQQY/Resource/tuan_hui_icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..2274af1aa8c2f25bc69731e0e38217bc3273536d Binary files /dev/null and b/JQQY/Resource/tuan_hui_icon@2x.png differ diff --git a/JQQY/Resource/tuan_hui_icon@3x.png b/JQQY/Resource/tuan_hui_icon@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..23020eabdb8cd92e18ba407d422ccdae5cdbc360 Binary files /dev/null and b/JQQY/Resource/tuan_hui_icon@3x.png differ diff --git a/JQQY/Resource/tuan_icon@2x.png b/JQQY/Resource/tuan_icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..da71afa609ecb2c2b441dc1be03b6cbf83c6e6fa Binary files /dev/null and b/JQQY/Resource/tuan_icon@2x.png differ diff --git a/JQQY/Resource/tuan_icon@3x.png b/JQQY/Resource/tuan_icon@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..e76b247091b7304d5f05b113ae9fefa3a173a958 Binary files /dev/null and b/JQQY/Resource/tuan_icon@3x.png differ diff --git a/JQQY/Resource/xx@2x.png b/JQQY/Resource/xx@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..469b76b3b6ab22ac4b04b0849650a59655f96508 Binary files /dev/null and b/JQQY/Resource/xx@2x.png differ diff --git a/JQQY/Resource/xx@3x.png b/JQQY/Resource/xx@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..59a9dd6099f7919e296f3a20c80aef5c3666caa5 Binary files /dev/null and b/JQQY/Resource/xx@3x.png differ diff --git "a/JQQY/Resource/\345\274\225\345\257\274\351\241\265/.DS_Store" "b/JQQY/Resource/\345\274\225\345\257\274\351\241\265/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..26ef886cc28d35a4d1c2e4377ce1007823781ef6 Binary files /dev/null and "b/JQQY/Resource/\345\274\225\345\257\274\351\241\265/.DS_Store" differ diff --git "a/JQQY/Resource/\345\274\225\345\257\274\351\241\265/4/.DS_Store" "b/JQQY/Resource/\345\274\225\345\257\274\351\241\265/4/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..8d3921a653c3f877f867ab7797840bc6f09a88ef Binary files /dev/null and "b/JQQY/Resource/\345\274\225\345\257\274\351\241\265/4/.DS_Store" differ diff --git "a/JQQY/Resource/\345\274\225\345\257\274\351\241\265/4/launch_4_1.png" "b/JQQY/Resource/\345\274\225\345\257\274\351\241\265/4/launch_4_1.png" new file mode 100755 index 0000000000000000000000000000000000000000..c12c1684f3ab9c8fb8976f9727a4ccf90b527df5 Binary files /dev/null and "b/JQQY/Resource/\345\274\225\345\257\274\351\241\265/4/launch_4_1.png" differ diff --git "a/JQQY/Resource/\345\274\225\345\257\274\351\241\265/4/launch_4_2.png" "b/JQQY/Resource/\345\274\225\345\257\274\351\241\265/4/launch_4_2.png" new file mode 100755 index 0000000000000000000000000000000000000000..bd9d6ced2b11787950244aaea08517ca79afaabb Binary files /dev/null and "b/JQQY/Resource/\345\274\225\345\257\274\351\241\265/4/launch_4_2.png" differ diff --git "a/JQQY/Resource/\345\274\225\345\257\274\351\241\265/4/launch_4_3.png" "b/JQQY/Resource/\345\274\225\345\257\274\351\241\265/4/launch_4_3.png" new file mode 100755 index 0000000000000000000000000000000000000000..31e6ef1f0170db3861d247ea08269e6df7c30c46 Binary files /dev/null and "b/JQQY/Resource/\345\274\225\345\257\274\351\241\265/4/launch_4_3.png" differ diff --git "a/JQQY/Resource/\345\274\225\345\257\274\351\241\265/4/launch_4_4.png" "b/JQQY/Resource/\345\274\225\345\257\274\351\241\265/4/launch_4_4.png" new file mode 100755 index 0000000000000000000000000000000000000000..d43f674979447ff14ff5f762ff4a7a7a1b415496 Binary files /dev/null and "b/JQQY/Resource/\345\274\225\345\257\274\351\241\265/4/launch_4_4.png" differ diff --git "a/JQQY/Resource/\345\274\225\345\257\274\351\241\265/5/.DS_Store" "b/JQQY/Resource/\345\274\225\345\257\274\351\241\265/5/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..0b366c5f454ba9a7ccda65507884f7288aac21fb Binary files /dev/null and "b/JQQY/Resource/\345\274\225\345\257\274\351\241\265/5/.DS_Store" differ diff --git "a/JQQY/Resource/\345\274\225\345\257\274\351\241\265/5/launch_5_1.png" "b/JQQY/Resource/\345\274\225\345\257\274\351\241\265/5/launch_5_1.png" new file mode 100755 index 0000000000000000000000000000000000000000..3afbbc91493f2ca458cae06c5defbecc9f98eefa Binary files /dev/null and "b/JQQY/Resource/\345\274\225\345\257\274\351\241\265/5/launch_5_1.png" differ diff --git "a/JQQY/Resource/\345\274\225\345\257\274\351\241\265/5/launch_5_2.png" "b/JQQY/Resource/\345\274\225\345\257\274\351\241\265/5/launch_5_2.png" new file mode 100755 index 0000000000000000000000000000000000000000..c20af48e93ee80e2fe211919e8e74ae562c83248 Binary files /dev/null and "b/JQQY/Resource/\345\274\225\345\257\274\351\241\265/5/launch_5_2.png" differ diff --git "a/JQQY/Resource/\345\274\225\345\257\274\351\241\265/5/launch_5_3.png" "b/JQQY/Resource/\345\274\225\345\257\274\351\241\265/5/launch_5_3.png" new file mode 100755 index 0000000000000000000000000000000000000000..de893c1bc30ad4fd688db361fcc5461606174952 Binary files /dev/null and "b/JQQY/Resource/\345\274\225\345\257\274\351\241\265/5/launch_5_3.png" differ diff --git "a/JQQY/Resource/\345\274\225\345\257\274\351\241\265/5/launch_5_4.png" "b/JQQY/Resource/\345\274\225\345\257\274\351\241\265/5/launch_5_4.png" new file mode 100755 index 0000000000000000000000000000000000000000..6aea4de21d824729dfb595be964f2462c6631041 Binary files /dev/null and "b/JQQY/Resource/\345\274\225\345\257\274\351\241\265/5/launch_5_4.png" differ diff --git "a/JQQY/Resource/\345\274\225\345\257\274\351\241\265/6/.DS_Store" "b/JQQY/Resource/\345\274\225\345\257\274\351\241\265/6/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..f1d399616db73114f2e7a9c4fa8b03b21b9a1b31 Binary files /dev/null and "b/JQQY/Resource/\345\274\225\345\257\274\351\241\265/6/.DS_Store" differ diff --git "a/JQQY/Resource/\345\274\225\345\257\274\351\241\265/6/launch_6_1.png" "b/JQQY/Resource/\345\274\225\345\257\274\351\241\265/6/launch_6_1.png" new file mode 100755 index 0000000000000000000000000000000000000000..e623cd7a956c5da0291def5ffc1805fe0e4a0aac Binary files /dev/null and "b/JQQY/Resource/\345\274\225\345\257\274\351\241\265/6/launch_6_1.png" differ diff --git "a/JQQY/Resource/\345\274\225\345\257\274\351\241\265/6/launch_6_2.png" "b/JQQY/Resource/\345\274\225\345\257\274\351\241\265/6/launch_6_2.png" new file mode 100755 index 0000000000000000000000000000000000000000..dbd26baa2b2b587c8dd05fe91909342f89964890 Binary files /dev/null and "b/JQQY/Resource/\345\274\225\345\257\274\351\241\265/6/launch_6_2.png" differ diff --git "a/JQQY/Resource/\345\274\225\345\257\274\351\241\265/6/launch_6_3.png" "b/JQQY/Resource/\345\274\225\345\257\274\351\241\265/6/launch_6_3.png" new file mode 100755 index 0000000000000000000000000000000000000000..540889765631945e4ad00d9f3bfcd54508f1e527 Binary files /dev/null and "b/JQQY/Resource/\345\274\225\345\257\274\351\241\265/6/launch_6_3.png" differ diff --git "a/JQQY/Resource/\345\274\225\345\257\274\351\241\265/6/launch_6_4.png" "b/JQQY/Resource/\345\274\225\345\257\274\351\241\265/6/launch_6_4.png" new file mode 100755 index 0000000000000000000000000000000000000000..add9e62dff3a39fd52080804c2ec9a75061eec4d Binary files /dev/null and "b/JQQY/Resource/\345\274\225\345\257\274\351\241\265/6/launch_6_4.png" differ diff --git "a/JQQY/Resource/\345\274\225\345\257\274\351\241\265/6p/.DS_Store" "b/JQQY/Resource/\345\274\225\345\257\274\351\241\265/6p/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..2f02ee3d2234310beeda70e2302296646a46ba35 Binary files /dev/null and "b/JQQY/Resource/\345\274\225\345\257\274\351\241\265/6p/.DS_Store" differ diff --git "a/JQQY/Resource/\345\274\225\345\257\274\351\241\265/6p/launch_6p_1.png" "b/JQQY/Resource/\345\274\225\345\257\274\351\241\265/6p/launch_6p_1.png" new file mode 100755 index 0000000000000000000000000000000000000000..f0fa9b9f4bfb7a8a73bf4a23186036b4bca5f28c Binary files /dev/null and "b/JQQY/Resource/\345\274\225\345\257\274\351\241\265/6p/launch_6p_1.png" differ diff --git "a/JQQY/Resource/\345\274\225\345\257\274\351\241\265/6p/launch_6p_2.png" "b/JQQY/Resource/\345\274\225\345\257\274\351\241\265/6p/launch_6p_2.png" new file mode 100755 index 0000000000000000000000000000000000000000..2247d7ffa5b320aa51c513fb50ddba476ee3dc0c Binary files /dev/null and "b/JQQY/Resource/\345\274\225\345\257\274\351\241\265/6p/launch_6p_2.png" differ diff --git "a/JQQY/Resource/\345\274\225\345\257\274\351\241\265/6p/launch_6p_3.png" "b/JQQY/Resource/\345\274\225\345\257\274\351\241\265/6p/launch_6p_3.png" new file mode 100755 index 0000000000000000000000000000000000000000..9df5622e8a2911e86d9d5cb401fd0ffe0b849ba0 Binary files /dev/null and "b/JQQY/Resource/\345\274\225\345\257\274\351\241\265/6p/launch_6p_3.png" differ diff --git "a/JQQY/Resource/\345\274\225\345\257\274\351\241\265/6p/launch_6p_4.png" "b/JQQY/Resource/\345\274\225\345\257\274\351\241\265/6p/launch_6p_4.png" new file mode 100755 index 0000000000000000000000000000000000000000..8c24563a291d19e6e14e1f71269e6b3d566f1f31 Binary files /dev/null and "b/JQQY/Resource/\345\274\225\345\257\274\351\241\265/6p/launch_6p_4.png" differ diff --git "a/JQQY/Resource/\345\274\225\345\257\274\351\241\265/X/launch_X_1.png" "b/JQQY/Resource/\345\274\225\345\257\274\351\241\265/X/launch_X_1.png" new file mode 100755 index 0000000000000000000000000000000000000000..4176c4ec8423e46feb78c89c7f143fbe0b4d4054 Binary files /dev/null and "b/JQQY/Resource/\345\274\225\345\257\274\351\241\265/X/launch_X_1.png" differ diff --git "a/JQQY/Resource/\345\274\225\345\257\274\351\241\265/X/launch_X_2.png" "b/JQQY/Resource/\345\274\225\345\257\274\351\241\265/X/launch_X_2.png" new file mode 100755 index 0000000000000000000000000000000000000000..08508328dd6caa18312dc2a1f99efe89ee4e2519 Binary files /dev/null and "b/JQQY/Resource/\345\274\225\345\257\274\351\241\265/X/launch_X_2.png" differ diff --git "a/JQQY/Resource/\345\274\225\345\257\274\351\241\265/X/launch_X_3.png" "b/JQQY/Resource/\345\274\225\345\257\274\351\241\265/X/launch_X_3.png" new file mode 100755 index 0000000000000000000000000000000000000000..11272aff93f9c019814a2c50c7328b8c53000f50 Binary files /dev/null and "b/JQQY/Resource/\345\274\225\345\257\274\351\241\265/X/launch_X_3.png" differ diff --git "a/JQQY/Resource/\345\274\225\345\257\274\351\241\265/X/launch_X_4.png" "b/JQQY/Resource/\345\274\225\345\257\274\351\241\265/X/launch_X_4.png" new file mode 100755 index 0000000000000000000000000000000000000000..c6d48eec98a1eb42871a00955232b075e2449f14 Binary files /dev/null and "b/JQQY/Resource/\345\274\225\345\257\274\351\241\265/X/launch_X_4.png" differ diff --git a/JQQY/ThirdParty/.DS_Store b/JQQY/ThirdParty/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..257d4e93d4d59439aac0cacab6f69470dd06836c Binary files /dev/null and b/JQQY/ThirdParty/.DS_Store differ diff --git a/JQQY/ThirdParty/AFNetworking/.DS_Store b/JQQY/ThirdParty/AFNetworking/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..75c969b739ff437c87c5ed2956256d2023ca26b3 Binary files /dev/null and b/JQQY/ThirdParty/AFNetworking/.DS_Store differ diff --git a/JQQY/ThirdParty/AFNetworking/AFHTTPSessionManager.h b/JQQY/ThirdParty/AFNetworking/AFHTTPSessionManager.h new file mode 100755 index 0000000000000000000000000000000000000000..05c6ff308b5bf60fecfcb11960dd75be31aecec0 --- /dev/null +++ b/JQQY/ThirdParty/AFNetworking/AFHTTPSessionManager.h @@ -0,0 +1,295 @@ +// AFHTTPSessionManager.h +// Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) +// +// 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 !TARGET_OS_WATCH +#import +#endif +#import + +#if TARGET_OS_IOS || TARGET_OS_WATCH || TARGET_OS_TV +#import +#else +#import +#endif + +#import "AFURLSessionManager.h" + +/** + `AFHTTPSessionManager` is a subclass of `AFURLSessionManager` with convenience methods for making HTTP requests. When a `baseURL` is provided, requests made with the `GET` / `POST` / et al. convenience methods can be made with relative paths. + + ## Subclassing Notes + + Developers targeting iOS 7 or Mac OS X 10.9 or later that deal extensively with a web service are encouraged to subclass `AFHTTPSessionManager`, providing a class method that returns a shared singleton object on which authentication and other configuration can be shared across the application. + + For developers targeting iOS 6 or Mac OS X 10.8 or earlier, `AFHTTPRequestOperationManager` may be used to similar effect. + + ## Methods to Override + + To change the behavior of all data task operation construction, which is also used in the `GET` / `POST` / et al. convenience methods, override `dataTaskWithRequest:uploadProgress:downloadProgress:completionHandler:`. + + ## Serialization + + Requests created by an HTTP client will contain default headers and encode parameters according to the `requestSerializer` property, which is an object conforming to ``. + + Responses received from the server are automatically validated and serialized by the `responseSerializers` property, which is an object conforming to `` + + ## URL Construction Using Relative Paths + + For HTTP convenience methods, the request serializer constructs URLs from the path relative to the `-baseURL`, using `NSURL +URLWithString:relativeToURL:`, when provided. If `baseURL` is `nil`, `path` needs to resolve to a valid `NSURL` object using `NSURL +URLWithString:`. + + Below are a few examples of how `baseURL` and relative paths interact: + + NSURL *baseURL = [NSURL URLWithString:@"http://example.com/v1/"]; + [NSURL URLWithString:@"foo" relativeToURL:baseURL]; // http://example.com/v1/foo + [NSURL URLWithString:@"foo?bar=baz" relativeToURL:baseURL]; // http://example.com/v1/foo?bar=baz + [NSURL URLWithString:@"/foo" relativeToURL:baseURL]; // http://example.com/foo + [NSURL URLWithString:@"foo/" relativeToURL:baseURL]; // http://example.com/v1/foo + [NSURL URLWithString:@"/foo/" relativeToURL:baseURL]; // http://example.com/foo/ + [NSURL URLWithString:@"http://example2.com/" relativeToURL:baseURL]; // http://example2.com/ + + Also important to note is that a trailing slash will be added to any `baseURL` without one. This would otherwise cause unexpected behavior when constructing URLs using paths without a leading slash. + + @warning Managers for background sessions must be owned for the duration of their use. This can be accomplished by creating an application-wide or shared singleton instance. + */ + +NS_ASSUME_NONNULL_BEGIN + +@interface AFHTTPSessionManager : AFURLSessionManager + +/** + The URL used to construct requests from relative paths in methods like `requestWithMethod:URLString:parameters:`, and the `GET` / `POST` / et al. convenience methods. + */ +@property (readonly, nonatomic, strong, nullable) NSURL *baseURL; + +/** + Requests created with `requestWithMethod:URLString:parameters:` & `multipartFormRequestWithMethod:URLString:parameters:constructingBodyWithBlock:` are constructed with a set of default headers using a parameter serialization specified by this property. By default, this is set to an instance of `AFHTTPRequestSerializer`, which serializes query string parameters for `GET`, `HEAD`, and `DELETE` requests, or otherwise URL-form-encodes HTTP message bodies. + + @warning `requestSerializer` must not be `nil`. + */ +@property (nonatomic, strong) AFHTTPRequestSerializer * requestSerializer; + +/** + Responses sent from the server in data tasks created with `dataTaskWithRequest:success:failure:` and run using the `GET` / `POST` / et al. convenience methods are automatically validated and serialized by the response serializer. By default, this property is set to an instance of `AFJSONResponseSerializer`. + + @warning `responseSerializer` must not be `nil`. + */ +@property (nonatomic, strong) AFHTTPResponseSerializer * responseSerializer; + +///--------------------- +/// @name Initialization +///--------------------- + +/** + Creates and returns an `AFHTTPSessionManager` object. + */ ++ (instancetype)manager; + +/** + Initializes an `AFHTTPSessionManager` object with the specified base URL. + + @param url The base URL for the HTTP client. + + @return The newly-initialized HTTP client + */ +- (instancetype)initWithBaseURL:(nullable NSURL *)url; + +/** + Initializes an `AFHTTPSessionManager` object with the specified base URL. + + This is the designated initializer. + + @param url The base URL for the HTTP client. + @param configuration The configuration used to create the managed session. + + @return The newly-initialized HTTP client + */ +- (instancetype)initWithBaseURL:(nullable NSURL *)url + sessionConfiguration:(nullable NSURLSessionConfiguration *)configuration NS_DESIGNATED_INITIALIZER; + +///--------------------------- +/// @name Making HTTP Requests +///--------------------------- + +/** + Creates and runs an `NSURLSessionDataTask` with a `GET` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. + @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. + + @see -dataTaskWithRequest:completionHandler: + */ +- (nullable NSURLSessionDataTask *)GET:(NSString *)URLString + parameters:(nullable id)parameters + success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success + failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure DEPRECATED_ATTRIBUTE; + + +/** + Creates and runs an `NSURLSessionDataTask` with a `GET` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param downloadProgress A block object to be executed when the download progress is updated. Note this block is called on the session queue, not the main queue. + @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. + @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. + + @see -dataTaskWithRequest:uploadProgress:downloadProgress:completionHandler: + */ +- (nullable NSURLSessionDataTask *)GET:(NSString *)URLString + parameters:(nullable id)parameters + progress:(nullable void (^)(NSProgress *downloadProgress))downloadProgress + success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success + failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure; + +/** + Creates and runs an `NSURLSessionDataTask` with a `HEAD` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param success A block object to be executed when the task finishes successfully. This block has no return value and takes a single arguments: the data task. + @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. + + @see -dataTaskWithRequest:completionHandler: + */ +- (nullable NSURLSessionDataTask *)HEAD:(NSString *)URLString + parameters:(nullable id)parameters + success:(nullable void (^)(NSURLSessionDataTask *task))success + failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure; + +/** + Creates and runs an `NSURLSessionDataTask` with a `POST` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. + @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. + + @see -dataTaskWithRequest:completionHandler: + */ +- (nullable NSURLSessionDataTask *)POST:(NSString *)URLString + parameters:(nullable id)parameters + success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success + failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure DEPRECATED_ATTRIBUTE; + +/** + Creates and runs an `NSURLSessionDataTask` with a `POST` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param uploadProgress A block object to be executed when the upload progress is updated. Note this block is called on the session queue, not the main queue. + @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. + @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. + + @see -dataTaskWithRequest:uploadProgress:downloadProgress:completionHandler: + */ +- (nullable NSURLSessionDataTask *)POST:(NSString *)URLString + parameters:(nullable id)parameters + progress:(nullable void (^)(NSProgress *uploadProgress))uploadProgress + success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success + failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure; + +/** + Creates and runs an `NSURLSessionDataTask` with a multipart `POST` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param block A block that takes a single argument and appends data to the HTTP body. The block argument is an object adopting the `AFMultipartFormData` protocol. + @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. + @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. + + @see -dataTaskWithRequest:completionHandler: + */ +- (nullable NSURLSessionDataTask *)POST:(NSString *)URLString + parameters:(nullable id)parameters + constructingBodyWithBlock:(nullable void (^)(id formData))block + success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success + failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure DEPRECATED_ATTRIBUTE; + +/** + Creates and runs an `NSURLSessionDataTask` with a multipart `POST` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param block A block that takes a single argument and appends data to the HTTP body. The block argument is an object adopting the `AFMultipartFormData` protocol. + @param uploadProgress A block object to be executed when the upload progress is updated. Note this block is called on the session queue, not the main queue. + @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. + @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. + + @see -dataTaskWithRequest:uploadProgress:downloadProgress:completionHandler: + */ +- (nullable NSURLSessionDataTask *)POST:(NSString *)URLString + parameters:(nullable id)parameters + constructingBodyWithBlock:(nullable void (^)(id formData))block + progress:(nullable void (^)(NSProgress *uploadProgress))uploadProgress + success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success + failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure; + +/** + Creates and runs an `NSURLSessionDataTask` with a `PUT` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. + @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. + + @see -dataTaskWithRequest:completionHandler: + */ +- (nullable NSURLSessionDataTask *)PUT:(NSString *)URLString + parameters:(nullable id)parameters + success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success + failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure; + +/** + Creates and runs an `NSURLSessionDataTask` with a `PATCH` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. + @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. + + @see -dataTaskWithRequest:completionHandler: + */ +- (nullable NSURLSessionDataTask *)PATCH:(NSString *)URLString + parameters:(nullable id)parameters + success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success + failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure; + +/** + Creates and runs an `NSURLSessionDataTask` with a `DELETE` request. + + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded according to the client request serializer. + @param success A block object to be executed when the task finishes successfully. This block has no return value and takes two arguments: the data task, and the response object created by the client response serializer. + @param failure A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred. + + @see -dataTaskWithRequest:completionHandler: + */ +- (nullable NSURLSessionDataTask *)DELETE:(NSString *)URLString + parameters:(nullable id)parameters + success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success + failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure; + +@end + +NS_ASSUME_NONNULL_END diff --git a/JQQY/ThirdParty/AFNetworking/AFHTTPSessionManager.m b/JQQY/ThirdParty/AFNetworking/AFHTTPSessionManager.m new file mode 100755 index 0000000000000000000000000000000000000000..2b0c1d090b049a3d4cf57b2e3e6abbeb45953421 --- /dev/null +++ b/JQQY/ThirdParty/AFNetworking/AFHTTPSessionManager.m @@ -0,0 +1,355 @@ +// AFHTTPSessionManager.m +// Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) +// +// 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 "AFHTTPSessionManager.h" + +#import "AFURLRequestSerialization.h" +#import "AFURLResponseSerialization.h" + +#import +#import +#import + +#import +#import +#import +#import +#import + +#if TARGET_OS_IOS || TARGET_OS_TV +#import +#elif TARGET_OS_WATCH +#import +#endif + +@interface AFHTTPSessionManager () +@property (readwrite, nonatomic, strong) NSURL *baseURL; +@end + +@implementation AFHTTPSessionManager +@dynamic responseSerializer; + ++ (instancetype)manager { + return [[[self class] alloc] initWithBaseURL:nil]; +} + +- (instancetype)init { + return [self initWithBaseURL:nil]; +} + +- (instancetype)initWithBaseURL:(NSURL *)url { + return [self initWithBaseURL:url sessionConfiguration:nil]; +} + +- (instancetype)initWithSessionConfiguration:(NSURLSessionConfiguration *)configuration { + return [self initWithBaseURL:nil sessionConfiguration:configuration]; +} + +- (instancetype)initWithBaseURL:(NSURL *)url + sessionConfiguration:(NSURLSessionConfiguration *)configuration +{ + self = [super initWithSessionConfiguration:configuration]; + if (!self) { + return nil; + } + + // Ensure terminal slash for baseURL path, so that NSURL +URLWithString:relativeToURL: works as expected + if ([[url path] length] > 0 && ![[url absoluteString] hasSuffix:@"/"]) { + url = [url URLByAppendingPathComponent:@""]; + } + + self.baseURL = url; + + self.requestSerializer = [AFHTTPRequestSerializer serializer]; + self.responseSerializer = [AFJSONResponseSerializer serializer]; + + return self; +} + +#pragma mark - + +- (void)setRequestSerializer:(AFHTTPRequestSerializer *)requestSerializer { + NSParameterAssert(requestSerializer); + + _requestSerializer = requestSerializer; +} + +- (void)setResponseSerializer:(AFHTTPResponseSerializer *)responseSerializer { + NSParameterAssert(responseSerializer); + + [super setResponseSerializer:responseSerializer]; +} + +#pragma mark - + +- (NSURLSessionDataTask *)GET:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(NSURLSessionDataTask *task, id responseObject))success + failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure +{ + + return [self GET:URLString parameters:parameters progress:nil success:success failure:failure]; +} + +- (NSURLSessionDataTask *)GET:(NSString *)URLString + parameters:(id)parameters + progress:(void (^)(NSProgress * _Nonnull))downloadProgress + success:(void (^)(NSURLSessionDataTask * _Nonnull, id _Nullable))success + failure:(void (^)(NSURLSessionDataTask * _Nullable, NSError * _Nonnull))failure +{ + + NSURLSessionDataTask *dataTask = [self dataTaskWithHTTPMethod:@"GET" + URLString:URLString + parameters:parameters + uploadProgress:nil + downloadProgress:downloadProgress + success:success + failure:failure]; + + [dataTask resume]; + + return dataTask; +} + +- (NSURLSessionDataTask *)HEAD:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(NSURLSessionDataTask *task))success + failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure +{ + NSURLSessionDataTask *dataTask = [self dataTaskWithHTTPMethod:@"HEAD" URLString:URLString parameters:parameters uploadProgress:nil downloadProgress:nil success:^(NSURLSessionDataTask *task, __unused id responseObject) { + if (success) { + success(task); + } + } failure:failure]; + + [dataTask resume]; + + return dataTask; +} + +- (NSURLSessionDataTask *)POST:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(NSURLSessionDataTask *task, id responseObject))success + failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure +{ + return [self POST:URLString parameters:parameters progress:nil success:success failure:failure]; +} + +- (NSURLSessionDataTask *)POST:(NSString *)URLString + parameters:(id)parameters + progress:(void (^)(NSProgress * _Nonnull))uploadProgress + success:(void (^)(NSURLSessionDataTask * _Nonnull, id _Nullable))success + failure:(void (^)(NSURLSessionDataTask * _Nullable, NSError * _Nonnull))failure +{ + NSURLSessionDataTask *dataTask = [self dataTaskWithHTTPMethod:@"POST" URLString:URLString parameters:parameters uploadProgress:uploadProgress downloadProgress:nil success:success failure:failure]; + + [dataTask resume]; + + return dataTask; +} + +- (NSURLSessionDataTask *)POST:(NSString *)URLString + parameters:(nullable id)parameters + constructingBodyWithBlock:(nullable void (^)(id _Nonnull))block + success:(nullable void (^)(NSURLSessionDataTask * _Nonnull, id _Nullable))success + failure:(nullable void (^)(NSURLSessionDataTask * _Nullable, NSError * _Nonnull))failure +{ + return [self POST:URLString parameters:parameters constructingBodyWithBlock:block progress:nil success:success failure:failure]; +} + +- (NSURLSessionDataTask *)POST:(NSString *)URLString + parameters:(id)parameters + constructingBodyWithBlock:(void (^)(id formData))block + progress:(nullable void (^)(NSProgress * _Nonnull))uploadProgress + success:(void (^)(NSURLSessionDataTask *task, id responseObject))success + failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure +{ + NSError *serializationError = nil; + NSMutableURLRequest *request = [self.requestSerializer multipartFormRequestWithMethod:@"POST" URLString:[[NSURL URLWithString:URLString relativeToURL:self.baseURL] absoluteString] parameters:parameters constructingBodyWithBlock:block error:&serializationError]; + if (serializationError) { + if (failure) { + dispatch_async(self.completionQueue ?: dispatch_get_main_queue(), ^{ + failure(nil, serializationError); + }); + } + + return nil; + } + + __block NSURLSessionDataTask *task = [self uploadTaskWithStreamedRequest:request progress:uploadProgress completionHandler:^(NSURLResponse * __unused response, id responseObject, NSError *error) { + if (error) { + if (failure) { + failure(task, error); + } + } else { + if (success) { + success(task, responseObject); + } + } + }]; + + [task resume]; + + return task; +} + +- (NSURLSessionDataTask *)PUT:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(NSURLSessionDataTask *task, id responseObject))success + failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure +{ + NSURLSessionDataTask *dataTask = [self dataTaskWithHTTPMethod:@"PUT" URLString:URLString parameters:parameters uploadProgress:nil downloadProgress:nil success:success failure:failure]; + + [dataTask resume]; + + return dataTask; +} + +- (NSURLSessionDataTask *)PATCH:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(NSURLSessionDataTask *task, id responseObject))success + failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure +{ + NSURLSessionDataTask *dataTask = [self dataTaskWithHTTPMethod:@"PATCH" URLString:URLString parameters:parameters uploadProgress:nil downloadProgress:nil success:success failure:failure]; + + [dataTask resume]; + + return dataTask; +} + +- (NSURLSessionDataTask *)DELETE:(NSString *)URLString + parameters:(id)parameters + success:(void (^)(NSURLSessionDataTask *task, id responseObject))success + failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure +{ + NSURLSessionDataTask *dataTask = [self dataTaskWithHTTPMethod:@"DELETE" URLString:URLString parameters:parameters uploadProgress:nil downloadProgress:nil success:success failure:failure]; + + [dataTask resume]; + + return dataTask; +} + +- (NSURLSessionDataTask *)dataTaskWithHTTPMethod:(NSString *)method + URLString:(NSString *)URLString + parameters:(id)parameters + uploadProgress:(nullable void (^)(NSProgress *uploadProgress)) uploadProgress + downloadProgress:(nullable void (^)(NSProgress *downloadProgress)) downloadProgress + success:(void (^)(NSURLSessionDataTask *, id))success + failure:(void (^)(NSURLSessionDataTask *, NSError *))failure +{ + NSError *serializationError = nil; + NSMutableURLRequest *request = [self.requestSerializer requestWithMethod:method URLString:[[NSURL URLWithString:URLString relativeToURL:self.baseURL] absoluteString] parameters:parameters error:&serializationError]; + if (serializationError) { + if (failure) { + dispatch_async(self.completionQueue ?: dispatch_get_main_queue(), ^{ + failure(nil, serializationError); + }); + } + + return nil; + } + + __block NSURLSessionDataTask *dataTask = nil; + dataTask = [self dataTaskWithRequest:request + uploadProgress:uploadProgress + downloadProgress:downloadProgress + completionHandler:^(NSURLResponse * __unused response, id responseObject, NSError *error) { + if (error) { + if (failure) { + failure(dataTask, error); + } + } else { + if (success) { + success(dataTask, responseObject); + } + } + }]; + + return dataTask; +} + +#pragma mark - NSObject + +- (NSString *)description { + return [NSString stringWithFormat:@"<%@: %p, baseURL: %@, session: %@, operationQueue: %@>", NSStringFromClass([self class]), self, [self.baseURL absoluteString], self.session, self.operationQueue]; +} + +#pragma mark - NSSecureCoding + ++ (BOOL)supportsSecureCoding { + return YES; +} + +- (instancetype)initWithCoder:(NSCoder *)decoder { + NSURL *baseURL = [decoder decodeObjectOfClass:[NSURL class] forKey:NSStringFromSelector(@selector(baseURL))]; + NSURLSessionConfiguration *configuration = [decoder decodeObjectOfClass:[NSURLSessionConfiguration class] forKey:@"sessionConfiguration"]; + if (!configuration) { + NSString *configurationIdentifier = [decoder decodeObjectOfClass:[NSString class] forKey:@"identifier"]; + if (configurationIdentifier) { +#if (defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 1100) + configuration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:configurationIdentifier]; +#else + configuration = [NSURLSessionConfiguration backgroundSessionConfiguration:configurationIdentifier]; +#endif + } + } + + self = [self initWithBaseURL:baseURL sessionConfiguration:configuration]; + if (!self) { + return nil; + } + + self.requestSerializer = [decoder decodeObjectOfClass:[AFHTTPRequestSerializer class] forKey:NSStringFromSelector(@selector(requestSerializer))]; + self.responseSerializer = [decoder decodeObjectOfClass:[AFHTTPResponseSerializer class] forKey:NSStringFromSelector(@selector(responseSerializer))]; + AFSecurityPolicy *decodedPolicy = [decoder decodeObjectOfClass:[AFSecurityPolicy class] forKey:NSStringFromSelector(@selector(securityPolicy))]; + if (decodedPolicy) { + self.securityPolicy = decodedPolicy; + } + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [super encodeWithCoder:coder]; + + [coder encodeObject:self.baseURL forKey:NSStringFromSelector(@selector(baseURL))]; + if ([self.session.configuration conformsToProtocol:@protocol(NSCoding)]) { + [coder encodeObject:self.session.configuration forKey:@"sessionConfiguration"]; + } else { + [coder encodeObject:self.session.configuration.identifier forKey:@"identifier"]; + } + [coder encodeObject:self.requestSerializer forKey:NSStringFromSelector(@selector(requestSerializer))]; + [coder encodeObject:self.responseSerializer forKey:NSStringFromSelector(@selector(responseSerializer))]; + [coder encodeObject:self.securityPolicy forKey:NSStringFromSelector(@selector(securityPolicy))]; +} + +#pragma mark - NSCopying + +- (instancetype)copyWithZone:(NSZone *)zone { + AFHTTPSessionManager *HTTPClient = [[[self class] allocWithZone:zone] initWithBaseURL:self.baseURL sessionConfiguration:self.session.configuration]; + + HTTPClient.requestSerializer = [self.requestSerializer copyWithZone:zone]; + HTTPClient.responseSerializer = [self.responseSerializer copyWithZone:zone]; + HTTPClient.securityPolicy = [self.securityPolicy copyWithZone:zone]; + return HTTPClient; +} + +@end diff --git a/JQQY/ThirdParty/AFNetworking/AFNetworkReachabilityManager.h b/JQQY/ThirdParty/AFNetworking/AFNetworkReachabilityManager.h new file mode 100755 index 0000000000000000000000000000000000000000..0feb18d3950167d4f8ad3af59d20ca3f8883c6bb --- /dev/null +++ b/JQQY/ThirdParty/AFNetworking/AFNetworkReachabilityManager.h @@ -0,0 +1,206 @@ +// AFNetworkReachabilityManager.h +// Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) +// +// 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 !TARGET_OS_WATCH +#import + +typedef NS_ENUM(NSInteger, AFNetworkReachabilityStatus) { + AFNetworkReachabilityStatusUnknown = -1, + AFNetworkReachabilityStatusNotReachable = 0, + AFNetworkReachabilityStatusReachableViaWWAN = 1, + AFNetworkReachabilityStatusReachableViaWiFi = 2, +}; + +NS_ASSUME_NONNULL_BEGIN + +/** + `AFNetworkReachabilityManager` monitors the reachability of domains, and addresses for both WWAN and WiFi network interfaces. + + Reachability can be used to determine background information about why a network operation failed, or to trigger a network operation retrying when a connection is established. It should not be used to prevent a user from initiating a network request, as it's possible that an initial request may be required to establish reachability. + + See Apple's Reachability Sample Code ( https://developer.apple.com/library/ios/samplecode/reachability/ ) + + @warning Instances of `AFNetworkReachabilityManager` must be started with `-startMonitoring` before reachability status can be determined. + */ +@interface AFNetworkReachabilityManager : NSObject + +/** + The current network reachability status. + */ +@property (readonly, nonatomic, assign) AFNetworkReachabilityStatus networkReachabilityStatus; + +/** + Whether or not the network is currently reachable. + */ +@property (readonly, nonatomic, assign, getter = isReachable) BOOL reachable; + +/** + Whether or not the network is currently reachable via WWAN. + */ +@property (readonly, nonatomic, assign, getter = isReachableViaWWAN) BOOL reachableViaWWAN; + +/** + Whether or not the network is currently reachable via WiFi. + */ +@property (readonly, nonatomic, assign, getter = isReachableViaWiFi) BOOL reachableViaWiFi; + +///--------------------- +/// @name Initialization +///--------------------- + +/** + Returns the shared network reachability manager. + */ ++ (instancetype)sharedManager; + +/** + Creates and returns a network reachability manager with the default socket address. + + @return An initialized network reachability manager, actively monitoring the default socket address. + */ ++ (instancetype)manager; + +/** + Creates and returns a network reachability manager for the specified domain. + + @param domain The domain used to evaluate network reachability. + + @return An initialized network reachability manager, actively monitoring the specified domain. + */ ++ (instancetype)managerForDomain:(NSString *)domain; + +/** + Creates and returns a network reachability manager for the socket address. + + @param address The socket address (`sockaddr_in6`) used to evaluate network reachability. + + @return An initialized network reachability manager, actively monitoring the specified socket address. + */ ++ (instancetype)managerForAddress:(const void *)address; + +/** + Initializes an instance of a network reachability manager from the specified reachability object. + + @param reachability The reachability object to monitor. + + @return An initialized network reachability manager, actively monitoring the specified reachability. + */ +- (instancetype)initWithReachability:(SCNetworkReachabilityRef)reachability NS_DESIGNATED_INITIALIZER; + +///-------------------------------------------------- +/// @name Starting & Stopping Reachability Monitoring +///-------------------------------------------------- + +/** + Starts monitoring for changes in network reachability status. + */ +- (void)startMonitoring; + +/** + Stops monitoring for changes in network reachability status. + */ +- (void)stopMonitoring; + +///------------------------------------------------- +/// @name Getting Localized Reachability Description +///------------------------------------------------- + +/** + Returns a localized string representation of the current network reachability status. + */ +- (NSString *)localizedNetworkReachabilityStatusString; + +///--------------------------------------------------- +/// @name Setting Network Reachability Change Callback +///--------------------------------------------------- + +/** + Sets a callback to be executed when the network availability of the `baseURL` host changes. + + @param block A block object to be executed when the network availability of the `baseURL` host changes.. This block has no return value and takes a single argument which represents the various reachability states from the device to the `baseURL`. + */ +- (void)setReachabilityStatusChangeBlock:(nullable void (^)(AFNetworkReachabilityStatus status))block; + +@end + +///---------------- +/// @name Constants +///---------------- + +/** + ## Network Reachability + + The following constants are provided by `AFNetworkReachabilityManager` as possible network reachability statuses. + + enum { + AFNetworkReachabilityStatusUnknown, + AFNetworkReachabilityStatusNotReachable, + AFNetworkReachabilityStatusReachableViaWWAN, + AFNetworkReachabilityStatusReachableViaWiFi, + } + + `AFNetworkReachabilityStatusUnknown` + The `baseURL` host reachability is not known. + + `AFNetworkReachabilityStatusNotReachable` + The `baseURL` host cannot be reached. + + `AFNetworkReachabilityStatusReachableViaWWAN` + The `baseURL` host can be reached via a cellular connection, such as EDGE or GPRS. + + `AFNetworkReachabilityStatusReachableViaWiFi` + The `baseURL` host can be reached via a Wi-Fi connection. + + ### Keys for Notification UserInfo Dictionary + + Strings that are used as keys in a `userInfo` dictionary in a network reachability status change notification. + + `AFNetworkingReachabilityNotificationStatusItem` + A key in the userInfo dictionary in a `AFNetworkingReachabilityDidChangeNotification` notification. + The corresponding value is an `NSNumber` object representing the `AFNetworkReachabilityStatus` value for the current reachability status. + */ + +///-------------------- +/// @name Notifications +///-------------------- + +/** + Posted when network reachability changes. + This notification assigns no notification object. The `userInfo` dictionary contains an `NSNumber` object under the `AFNetworkingReachabilityNotificationStatusItem` key, representing the `AFNetworkReachabilityStatus` value for the current network reachability. + + @warning In order for network reachability to be monitored, include the `SystemConfiguration` framework in the active target's "Link Binary With Library" build phase, and add `#import ` to the header prefix of the project (`Prefix.pch`). + */ +FOUNDATION_EXPORT NSString * const AFNetworkingReachabilityDidChangeNotification; +FOUNDATION_EXPORT NSString * const AFNetworkingReachabilityNotificationStatusItem; + +///-------------------- +/// @name Functions +///-------------------- + +/** + Returns a localized string representation of an `AFNetworkReachabilityStatus` value. + */ +FOUNDATION_EXPORT NSString * AFStringFromNetworkReachabilityStatus(AFNetworkReachabilityStatus status); + +NS_ASSUME_NONNULL_END +#endif diff --git a/JQQY/ThirdParty/AFNetworking/AFNetworkReachabilityManager.m b/JQQY/ThirdParty/AFNetworking/AFNetworkReachabilityManager.m new file mode 100755 index 0000000000000000000000000000000000000000..d45836485da73f380968f872a3e2e8f4991a453d --- /dev/null +++ b/JQQY/ThirdParty/AFNetworking/AFNetworkReachabilityManager.m @@ -0,0 +1,263 @@ +// AFNetworkReachabilityManager.m +// Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) +// +// 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 "AFNetworkReachabilityManager.h" +#if !TARGET_OS_WATCH + +#import +#import +#import +#import +#import + +NSString * const AFNetworkingReachabilityDidChangeNotification = @"com.alamofire.networking.reachability.change"; +NSString * const AFNetworkingReachabilityNotificationStatusItem = @"AFNetworkingReachabilityNotificationStatusItem"; + +typedef void (^AFNetworkReachabilityStatusBlock)(AFNetworkReachabilityStatus status); + +NSString * AFStringFromNetworkReachabilityStatus(AFNetworkReachabilityStatus status) { + switch (status) { + case AFNetworkReachabilityStatusNotReachable: + return NSLocalizedStringFromTable(@"Not Reachable", @"AFNetworking", nil); + case AFNetworkReachabilityStatusReachableViaWWAN: + return NSLocalizedStringFromTable(@"Reachable via WWAN", @"AFNetworking", nil); + case AFNetworkReachabilityStatusReachableViaWiFi: + return NSLocalizedStringFromTable(@"Reachable via WiFi", @"AFNetworking", nil); + case AFNetworkReachabilityStatusUnknown: + default: + return NSLocalizedStringFromTable(@"Unknown", @"AFNetworking", nil); + } +} + +static AFNetworkReachabilityStatus AFNetworkReachabilityStatusForFlags(SCNetworkReachabilityFlags flags) { + BOOL isReachable = ((flags & kSCNetworkReachabilityFlagsReachable) != 0); + BOOL needsConnection = ((flags & kSCNetworkReachabilityFlagsConnectionRequired) != 0); + BOOL canConnectionAutomatically = (((flags & kSCNetworkReachabilityFlagsConnectionOnDemand ) != 0) || ((flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) != 0)); + BOOL canConnectWithoutUserInteraction = (canConnectionAutomatically && (flags & kSCNetworkReachabilityFlagsInterventionRequired) == 0); + BOOL isNetworkReachable = (isReachable && (!needsConnection || canConnectWithoutUserInteraction)); + + AFNetworkReachabilityStatus status = AFNetworkReachabilityStatusUnknown; + if (isNetworkReachable == NO) { + status = AFNetworkReachabilityStatusNotReachable; + } +#if TARGET_OS_IPHONE + else if ((flags & kSCNetworkReachabilityFlagsIsWWAN) != 0) { + status = AFNetworkReachabilityStatusReachableViaWWAN; + } +#endif + else { + status = AFNetworkReachabilityStatusReachableViaWiFi; + } + + return status; +} + +/** + * Queue a status change notification for the main thread. + * + * This is done to ensure that the notifications are received in the same order + * as they are sent. If notifications are sent directly, it is possible that + * a queued notification (for an earlier status condition) is processed after + * the later update, resulting in the listener being left in the wrong state. + */ +static void AFPostReachabilityStatusChange(SCNetworkReachabilityFlags flags, AFNetworkReachabilityStatusBlock block) { + AFNetworkReachabilityStatus status = AFNetworkReachabilityStatusForFlags(flags); + dispatch_async(dispatch_get_main_queue(), ^{ + if (block) { + block(status); + } + NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; + NSDictionary *userInfo = @{ AFNetworkingReachabilityNotificationStatusItem: @(status) }; + [notificationCenter postNotificationName:AFNetworkingReachabilityDidChangeNotification object:nil userInfo:userInfo]; + }); +} + +static void AFNetworkReachabilityCallback(SCNetworkReachabilityRef __unused target, SCNetworkReachabilityFlags flags, void *info) { + AFPostReachabilityStatusChange(flags, (__bridge AFNetworkReachabilityStatusBlock)info); +} + + +static const void * AFNetworkReachabilityRetainCallback(const void *info) { + return Block_copy(info); +} + +static void AFNetworkReachabilityReleaseCallback(const void *info) { + if (info) { + Block_release(info); + } +} + +@interface AFNetworkReachabilityManager () +@property (readonly, nonatomic, assign) SCNetworkReachabilityRef networkReachability; +@property (readwrite, nonatomic, assign) AFNetworkReachabilityStatus networkReachabilityStatus; +@property (readwrite, nonatomic, copy) AFNetworkReachabilityStatusBlock networkReachabilityStatusBlock; +@end + +@implementation AFNetworkReachabilityManager + ++ (instancetype)sharedManager { + static AFNetworkReachabilityManager *_sharedManager = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + _sharedManager = [self manager]; + }); + + return _sharedManager; +} + ++ (instancetype)managerForDomain:(NSString *)domain { + SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(kCFAllocatorDefault, [domain UTF8String]); + + AFNetworkReachabilityManager *manager = [[self alloc] initWithReachability:reachability]; + + CFRelease(reachability); + + return manager; +} + ++ (instancetype)managerForAddress:(const void *)address { + SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, (const struct sockaddr *)address); + AFNetworkReachabilityManager *manager = [[self alloc] initWithReachability:reachability]; + + CFRelease(reachability); + + return manager; +} + ++ (instancetype)manager +{ +#if (defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 90000) || (defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101100) + struct sockaddr_in6 address; + bzero(&address, sizeof(address)); + address.sin6_len = sizeof(address); + address.sin6_family = AF_INET6; +#else + struct sockaddr_in address; + bzero(&address, sizeof(address)); + address.sin_len = sizeof(address); + address.sin_family = AF_INET; +#endif + return [self managerForAddress:&address]; +} + +- (instancetype)initWithReachability:(SCNetworkReachabilityRef)reachability { + self = [super init]; + if (!self) { + return nil; + } + + _networkReachability = CFRetain(reachability); + self.networkReachabilityStatus = AFNetworkReachabilityStatusUnknown; + + return self; +} + +- (instancetype)init NS_UNAVAILABLE +{ + return nil; +} + +- (void)dealloc { + [self stopMonitoring]; + + if (_networkReachability != NULL) { + CFRelease(_networkReachability); + } +} + +#pragma mark - + +- (BOOL)isReachable { + return [self isReachableViaWWAN] || [self isReachableViaWiFi]; +} + +- (BOOL)isReachableViaWWAN { + return self.networkReachabilityStatus == AFNetworkReachabilityStatusReachableViaWWAN; +} + +- (BOOL)isReachableViaWiFi { + return self.networkReachabilityStatus == AFNetworkReachabilityStatusReachableViaWiFi; +} + +#pragma mark - + +- (void)startMonitoring { + [self stopMonitoring]; + + if (!self.networkReachability) { + return; + } + + __weak __typeof(self)weakSelf = self; + AFNetworkReachabilityStatusBlock callback = ^(AFNetworkReachabilityStatus status) { + __strong __typeof(weakSelf)strongSelf = weakSelf; + + strongSelf.networkReachabilityStatus = status; + if (strongSelf.networkReachabilityStatusBlock) { + strongSelf.networkReachabilityStatusBlock(status); + } + + }; + + SCNetworkReachabilityContext context = {0, (__bridge void *)callback, AFNetworkReachabilityRetainCallback, AFNetworkReachabilityReleaseCallback, NULL}; + SCNetworkReachabilitySetCallback(self.networkReachability, AFNetworkReachabilityCallback, &context); + SCNetworkReachabilityScheduleWithRunLoop(self.networkReachability, CFRunLoopGetMain(), kCFRunLoopCommonModes); + + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0),^{ + SCNetworkReachabilityFlags flags; + if (SCNetworkReachabilityGetFlags(self.networkReachability, &flags)) { + AFPostReachabilityStatusChange(flags, callback); + } + }); +} + +- (void)stopMonitoring { + if (!self.networkReachability) { + return; + } + + SCNetworkReachabilityUnscheduleFromRunLoop(self.networkReachability, CFRunLoopGetMain(), kCFRunLoopCommonModes); +} + +#pragma mark - + +- (NSString *)localizedNetworkReachabilityStatusString { + return AFStringFromNetworkReachabilityStatus(self.networkReachabilityStatus); +} + +#pragma mark - + +- (void)setReachabilityStatusChangeBlock:(void (^)(AFNetworkReachabilityStatus status))block { + self.networkReachabilityStatusBlock = block; +} + +#pragma mark - NSKeyValueObserving + ++ (NSSet *)keyPathsForValuesAffectingValueForKey:(NSString *)key { + if ([key isEqualToString:@"reachable"] || [key isEqualToString:@"reachableViaWWAN"] || [key isEqualToString:@"reachableViaWiFi"]) { + return [NSSet setWithObject:@"networkReachabilityStatus"]; + } + + return [super keyPathsForValuesAffectingValueForKey:key]; +} + +@end +#endif diff --git a/JQQY/ThirdParty/AFNetworking/AFNetworking.h b/JQQY/ThirdParty/AFNetworking/AFNetworking.h new file mode 100755 index 0000000000000000000000000000000000000000..e2fb2f44e61205b271b8541c95d688abc51de591 --- /dev/null +++ b/JQQY/ThirdParty/AFNetworking/AFNetworking.h @@ -0,0 +1,41 @@ +// AFNetworking.h +// +// Copyright (c) 2013 AFNetworking (http://afnetworking.com/) +// +// 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 + +#ifndef _AFNETWORKING_ + #define _AFNETWORKING_ + + #import "AFURLRequestSerialization.h" + #import "AFURLResponseSerialization.h" + #import "AFSecurityPolicy.h" + +#if !TARGET_OS_WATCH + #import "AFNetworkReachabilityManager.h" +#endif + + #import "AFURLSessionManager.h" + #import "AFHTTPSessionManager.h" + +#endif /* _AFNETWORKING_ */ diff --git a/JQQY/ThirdParty/AFNetworking/AFSecurityPolicy.h b/JQQY/ThirdParty/AFNetworking/AFSecurityPolicy.h new file mode 100755 index 0000000000000000000000000000000000000000..c005efa81bb848169e38e26afdd922fd5f9e96bf --- /dev/null +++ b/JQQY/ThirdParty/AFNetworking/AFSecurityPolicy.h @@ -0,0 +1,154 @@ +// AFSecurityPolicy.h +// Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) +// +// 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 + +typedef NS_ENUM(NSUInteger, AFSSLPinningMode) { + AFSSLPinningModeNone, + AFSSLPinningModePublicKey, + AFSSLPinningModeCertificate, +}; + +/** + `AFSecurityPolicy` evaluates server trust against pinned X.509 certificates and public keys over secure connections. + + Adding pinned SSL certificates to your app helps prevent man-in-the-middle attacks and other vulnerabilities. Applications dealing with sensitive customer data or financial information are strongly encouraged to route all communication over an HTTPS connection with SSL pinning configured and enabled. + */ + +NS_ASSUME_NONNULL_BEGIN + +@interface AFSecurityPolicy : NSObject + +/** + The criteria by which server trust should be evaluated against the pinned SSL certificates. Defaults to `AFSSLPinningModeNone`. + */ +@property (readonly, nonatomic, assign) AFSSLPinningMode SSLPinningMode; + +/** + The certificates used to evaluate server trust according to the SSL pinning mode. + + By default, this property is set to any (`.cer`) certificates included in the target compiling AFNetworking. Note that if you are using AFNetworking as embedded framework, no certificates will be pinned by default. Use `certificatesInBundle` to load certificates from your target, and then create a new policy by calling `policyWithPinningMode:withPinnedCertificates`. + + Note that if pinning is enabled, `evaluateServerTrust:forDomain:` will return true if any pinned certificate matches. + */ +@property (nonatomic, strong, nullable) NSSet *pinnedCertificates; + +/** + Whether or not to trust servers with an invalid or expired SSL certificates. Defaults to `NO`. + */ +@property (nonatomic, assign) BOOL allowInvalidCertificates; + +/** + Whether or not to validate the domain name in the certificate's CN field. Defaults to `YES`. + */ +@property (nonatomic, assign) BOOL validatesDomainName; + +///----------------------------------------- +/// @name Getting Certificates from the Bundle +///----------------------------------------- + +/** + Returns any certificates included in the bundle. If you are using AFNetworking as an embedded framework, you must use this method to find the certificates you have included in your app bundle, and use them when creating your security policy by calling `policyWithPinningMode:withPinnedCertificates`. + + @return The certificates included in the given bundle. + */ ++ (NSSet *)certificatesInBundle:(NSBundle *)bundle; + +///----------------------------------------- +/// @name Getting Specific Security Policies +///----------------------------------------- + +/** + Returns the shared default security policy, which does not allow invalid certificates, validates domain name, and does not validate against pinned certificates or public keys. + + @return The default security policy. + */ ++ (instancetype)defaultPolicy; + +///--------------------- +/// @name Initialization +///--------------------- + +/** + Creates and returns a security policy with the specified pinning mode. + + @param pinningMode The SSL pinning mode. + + @return A new security policy. + */ ++ (instancetype)policyWithPinningMode:(AFSSLPinningMode)pinningMode; + +/** + Creates and returns a security policy with the specified pinning mode. + + @param pinningMode The SSL pinning mode. + @param pinnedCertificates The certificates to pin against. + + @return A new security policy. + */ ++ (instancetype)policyWithPinningMode:(AFSSLPinningMode)pinningMode withPinnedCertificates:(NSSet *)pinnedCertificates; + +///------------------------------ +/// @name Evaluating Server Trust +///------------------------------ + +/** + Whether or not the specified server trust should be accepted, based on the security policy. + + This method should be used when responding to an authentication challenge from a server. + + @param serverTrust The X.509 certificate trust of the server. + @param domain The domain of serverTrust. If `nil`, the domain will not be validated. + + @return Whether or not to trust the server. + */ +- (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust + forDomain:(nullable NSString *)domain; + +@end + +NS_ASSUME_NONNULL_END + +///---------------- +/// @name Constants +///---------------- + +/** + ## SSL Pinning Modes + + The following constants are provided by `AFSSLPinningMode` as possible SSL pinning modes. + + enum { + AFSSLPinningModeNone, + AFSSLPinningModePublicKey, + AFSSLPinningModeCertificate, + } + + `AFSSLPinningModeNone` + Do not used pinned certificates to validate servers. + + `AFSSLPinningModePublicKey` + Validate host certificates against public keys of pinned certificates. + + `AFSSLPinningModeCertificate` + Validate host certificates against pinned certificates. +*/ diff --git a/JQQY/ThirdParty/AFNetworking/AFSecurityPolicy.m b/JQQY/ThirdParty/AFNetworking/AFSecurityPolicy.m new file mode 100755 index 0000000000000000000000000000000000000000..ec81d377c6a1a56cfc3cd53ab33f63bbed209544 --- /dev/null +++ b/JQQY/ThirdParty/AFNetworking/AFSecurityPolicy.m @@ -0,0 +1,353 @@ +// AFSecurityPolicy.m +// Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) +// +// 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 "AFSecurityPolicy.h" + +#import + +#if !TARGET_OS_IOS && !TARGET_OS_WATCH && !TARGET_OS_TV +static NSData * AFSecKeyGetData(SecKeyRef key) { + CFDataRef data = NULL; + + __Require_noErr_Quiet(SecItemExport(key, kSecFormatUnknown, kSecItemPemArmour, NULL, &data), _out); + + return (__bridge_transfer NSData *)data; + +_out: + if (data) { + CFRelease(data); + } + + return nil; +} +#endif + +static BOOL AFSecKeyIsEqualToKey(SecKeyRef key1, SecKeyRef key2) { +#if TARGET_OS_IOS || TARGET_OS_WATCH || TARGET_OS_TV + return [(__bridge id)key1 isEqual:(__bridge id)key2]; +#else + return [AFSecKeyGetData(key1) isEqual:AFSecKeyGetData(key2)]; +#endif +} + +static id AFPublicKeyForCertificate(NSData *certificate) { + id allowedPublicKey = nil; + SecCertificateRef allowedCertificate; + SecCertificateRef allowedCertificates[1]; + CFArrayRef tempCertificates = nil; + SecPolicyRef policy = nil; + SecTrustRef allowedTrust = nil; + SecTrustResultType result; + + allowedCertificate = SecCertificateCreateWithData(NULL, (__bridge CFDataRef)certificate); + __Require_Quiet(allowedCertificate != NULL, _out); + + allowedCertificates[0] = allowedCertificate; + tempCertificates = CFArrayCreate(NULL, (const void **)allowedCertificates, 1, NULL); + + policy = SecPolicyCreateBasicX509(); + __Require_noErr_Quiet(SecTrustCreateWithCertificates(tempCertificates, policy, &allowedTrust), _out); + __Require_noErr_Quiet(SecTrustEvaluate(allowedTrust, &result), _out); + + allowedPublicKey = (__bridge_transfer id)SecTrustCopyPublicKey(allowedTrust); + +_out: + if (allowedTrust) { + CFRelease(allowedTrust); + } + + if (policy) { + CFRelease(policy); + } + + if (tempCertificates) { + CFRelease(tempCertificates); + } + + if (allowedCertificate) { + CFRelease(allowedCertificate); + } + + return allowedPublicKey; +} + +static BOOL AFServerTrustIsValid(SecTrustRef serverTrust) { + BOOL isValid = NO; + SecTrustResultType result; + __Require_noErr_Quiet(SecTrustEvaluate(serverTrust, &result), _out); + + isValid = (result == kSecTrustResultUnspecified || result == kSecTrustResultProceed); + +_out: + return isValid; +} + +static NSArray * AFCertificateTrustChainForServerTrust(SecTrustRef serverTrust) { + CFIndex certificateCount = SecTrustGetCertificateCount(serverTrust); + NSMutableArray *trustChain = [NSMutableArray arrayWithCapacity:(NSUInteger)certificateCount]; + + for (CFIndex i = 0; i < certificateCount; i++) { + SecCertificateRef certificate = SecTrustGetCertificateAtIndex(serverTrust, i); + [trustChain addObject:(__bridge_transfer NSData *)SecCertificateCopyData(certificate)]; + } + + return [NSArray arrayWithArray:trustChain]; +} + +static NSArray * AFPublicKeyTrustChainForServerTrust(SecTrustRef serverTrust) { + SecPolicyRef policy = SecPolicyCreateBasicX509(); + CFIndex certificateCount = SecTrustGetCertificateCount(serverTrust); + NSMutableArray *trustChain = [NSMutableArray arrayWithCapacity:(NSUInteger)certificateCount]; + for (CFIndex i = 0; i < certificateCount; i++) { + SecCertificateRef certificate = SecTrustGetCertificateAtIndex(serverTrust, i); + + SecCertificateRef someCertificates[] = {certificate}; + CFArrayRef certificates = CFArrayCreate(NULL, (const void **)someCertificates, 1, NULL); + + SecTrustRef trust; + __Require_noErr_Quiet(SecTrustCreateWithCertificates(certificates, policy, &trust), _out); + + SecTrustResultType result; + __Require_noErr_Quiet(SecTrustEvaluate(trust, &result), _out); + + [trustChain addObject:(__bridge_transfer id)SecTrustCopyPublicKey(trust)]; + + _out: + if (trust) { + CFRelease(trust); + } + + if (certificates) { + CFRelease(certificates); + } + + continue; + } + CFRelease(policy); + + return [NSArray arrayWithArray:trustChain]; +} + +#pragma mark - + +@interface AFSecurityPolicy() +@property (readwrite, nonatomic, assign) AFSSLPinningMode SSLPinningMode; +@property (readwrite, nonatomic, strong) NSSet *pinnedPublicKeys; +@end + +@implementation AFSecurityPolicy + ++ (NSSet *)certificatesInBundle:(NSBundle *)bundle { + NSArray *paths = [bundle pathsForResourcesOfType:@"cer" inDirectory:@"."]; + + NSMutableSet *certificates = [NSMutableSet setWithCapacity:[paths count]]; + for (NSString *path in paths) { + NSData *certificateData = [NSData dataWithContentsOfFile:path]; + [certificates addObject:certificateData]; + } + + return [NSSet setWithSet:certificates]; +} + ++ (NSSet *)defaultPinnedCertificates { + static NSSet *_defaultPinnedCertificates = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + NSBundle *bundle = [NSBundle bundleForClass:[self class]]; + _defaultPinnedCertificates = [self certificatesInBundle:bundle]; + }); + + return _defaultPinnedCertificates; +} + ++ (instancetype)defaultPolicy { + AFSecurityPolicy *securityPolicy = [[self alloc] init]; + securityPolicy.SSLPinningMode = AFSSLPinningModeNone; + + return securityPolicy; +} + ++ (instancetype)policyWithPinningMode:(AFSSLPinningMode)pinningMode { + return [self policyWithPinningMode:pinningMode withPinnedCertificates:[self defaultPinnedCertificates]]; +} + ++ (instancetype)policyWithPinningMode:(AFSSLPinningMode)pinningMode withPinnedCertificates:(NSSet *)pinnedCertificates { + AFSecurityPolicy *securityPolicy = [[self alloc] init]; + securityPolicy.SSLPinningMode = pinningMode; + + [securityPolicy setPinnedCertificates:pinnedCertificates]; + + return securityPolicy; +} + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + self.validatesDomainName = YES; + + return self; +} + +- (void)setPinnedCertificates:(NSSet *)pinnedCertificates { + _pinnedCertificates = pinnedCertificates; + + if (self.pinnedCertificates) { + NSMutableSet *mutablePinnedPublicKeys = [NSMutableSet setWithCapacity:[self.pinnedCertificates count]]; + for (NSData *certificate in self.pinnedCertificates) { + id publicKey = AFPublicKeyForCertificate(certificate); + if (!publicKey) { + continue; + } + [mutablePinnedPublicKeys addObject:publicKey]; + } + self.pinnedPublicKeys = [NSSet setWithSet:mutablePinnedPublicKeys]; + } else { + self.pinnedPublicKeys = nil; + } +} + +#pragma mark - + +- (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust + forDomain:(NSString *)domain +{ + if (domain && self.allowInvalidCertificates && self.validatesDomainName && (self.SSLPinningMode == AFSSLPinningModeNone || [self.pinnedCertificates count] == 0)) { + // https://developer.apple.com/library/mac/documentation/NetworkingInternet/Conceptual/NetworkingTopics/Articles/OverridingSSLChainValidationCorrectly.html + // According to the docs, you should only trust your provided certs for evaluation. + // Pinned certificates are added to the trust. Without pinned certificates, + // there is nothing to evaluate against. + // + // From Apple Docs: + // "Do not implicitly trust self-signed certificates as anchors (kSecTrustOptionImplicitAnchors). + // Instead, add your own (self-signed) CA certificate to the list of trusted anchors." + NSLog(@"In order to validate a domain name for self signed certificates, you MUST use pinning."); + return NO; + } + + NSMutableArray *policies = [NSMutableArray array]; + if (self.validatesDomainName) { + [policies addObject:(__bridge_transfer id)SecPolicyCreateSSL(true, (__bridge CFStringRef)domain)]; + } else { + [policies addObject:(__bridge_transfer id)SecPolicyCreateBasicX509()]; + } + + SecTrustSetPolicies(serverTrust, (__bridge CFArrayRef)policies); + + if (self.SSLPinningMode == AFSSLPinningModeNone) { + return self.allowInvalidCertificates || AFServerTrustIsValid(serverTrust); + } else if (!AFServerTrustIsValid(serverTrust) && !self.allowInvalidCertificates) { + return NO; + } + + switch (self.SSLPinningMode) { + case AFSSLPinningModeNone: + default: + return NO; + case AFSSLPinningModeCertificate: { + NSMutableArray *pinnedCertificates = [NSMutableArray array]; + for (NSData *certificateData in self.pinnedCertificates) { + [pinnedCertificates addObject:(__bridge_transfer id)SecCertificateCreateWithData(NULL, (__bridge CFDataRef)certificateData)]; + } + SecTrustSetAnchorCertificates(serverTrust, (__bridge CFArrayRef)pinnedCertificates); + + if (!AFServerTrustIsValid(serverTrust)) { + return NO; + } + + // obtain the chain after being validated, which *should* contain the pinned certificate in the last position (if it's the Root CA) + NSArray *serverCertificates = AFCertificateTrustChainForServerTrust(serverTrust); + + for (NSData *trustChainCertificate in [serverCertificates reverseObjectEnumerator]) { + if ([self.pinnedCertificates containsObject:trustChainCertificate]) { + return YES; + } + } + + return NO; + } + case AFSSLPinningModePublicKey: { + NSUInteger trustedPublicKeyCount = 0; + NSArray *publicKeys = AFPublicKeyTrustChainForServerTrust(serverTrust); + + for (id trustChainPublicKey in publicKeys) { + for (id pinnedPublicKey in self.pinnedPublicKeys) { + if (AFSecKeyIsEqualToKey((__bridge SecKeyRef)trustChainPublicKey, (__bridge SecKeyRef)pinnedPublicKey)) { + trustedPublicKeyCount += 1; + } + } + } + return trustedPublicKeyCount > 0; + } + } + + return NO; +} + +#pragma mark - NSKeyValueObserving + ++ (NSSet *)keyPathsForValuesAffectingPinnedPublicKeys { + return [NSSet setWithObject:@"pinnedCertificates"]; +} + +#pragma mark - NSSecureCoding + ++ (BOOL)supportsSecureCoding { + return YES; +} + +- (instancetype)initWithCoder:(NSCoder *)decoder { + + self = [self init]; + if (!self) { + return nil; + } + + self.SSLPinningMode = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(SSLPinningMode))] unsignedIntegerValue]; + self.allowInvalidCertificates = [decoder decodeBoolForKey:NSStringFromSelector(@selector(allowInvalidCertificates))]; + self.validatesDomainName = [decoder decodeBoolForKey:NSStringFromSelector(@selector(validatesDomainName))]; + self.pinnedCertificates = [decoder decodeObjectOfClass:[NSArray class] forKey:NSStringFromSelector(@selector(pinnedCertificates))]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [coder encodeObject:[NSNumber numberWithUnsignedInteger:self.SSLPinningMode] forKey:NSStringFromSelector(@selector(SSLPinningMode))]; + [coder encodeBool:self.allowInvalidCertificates forKey:NSStringFromSelector(@selector(allowInvalidCertificates))]; + [coder encodeBool:self.validatesDomainName forKey:NSStringFromSelector(@selector(validatesDomainName))]; + [coder encodeObject:self.pinnedCertificates forKey:NSStringFromSelector(@selector(pinnedCertificates))]; +} + +#pragma mark - NSCopying + +- (instancetype)copyWithZone:(NSZone *)zone { + AFSecurityPolicy *securityPolicy = [[[self class] allocWithZone:zone] init]; + securityPolicy.SSLPinningMode = self.SSLPinningMode; + securityPolicy.allowInvalidCertificates = self.allowInvalidCertificates; + securityPolicy.validatesDomainName = self.validatesDomainName; + securityPolicy.pinnedCertificates = [self.pinnedCertificates copyWithZone:zone]; + + return securityPolicy; +} + +@end diff --git a/JQQY/ThirdParty/AFNetworking/AFURLRequestSerialization.h b/JQQY/ThirdParty/AFNetworking/AFURLRequestSerialization.h new file mode 100755 index 0000000000000000000000000000000000000000..694696b9aa43e9b59212d5a18b43a09e25522d05 --- /dev/null +++ b/JQQY/ThirdParty/AFNetworking/AFURLRequestSerialization.h @@ -0,0 +1,479 @@ +// AFURLRequestSerialization.h +// Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) +// +// 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 + +#if TARGET_OS_IOS || TARGET_OS_TV +#import +#elif TARGET_OS_WATCH +#import +#endif + +NS_ASSUME_NONNULL_BEGIN + +/** + Returns a percent-escaped string following RFC 3986 for a query string key or value. + RFC 3986 states that the following characters are "reserved" characters. + - General Delimiters: ":", "#", "[", "]", "@", "?", "/" + - Sub-Delimiters: "!", "$", "&", "'", "(", ")", "*", "+", ",", ";", "=" + + In RFC 3986 - Section 3.4, it states that the "?" and "/" characters should not be escaped to allow + query strings to include a URL. Therefore, all "reserved" characters with the exception of "?" and "/" + should be percent-escaped in the query string. + + @param string The string to be percent-escaped. + + @return The percent-escaped string. + */ +FOUNDATION_EXPORT NSString * AFPercentEscapedStringFromString(NSString *string); + +/** + A helper method to generate encoded url query parameters for appending to the end of a URL. + + @param parameters A dictionary of key/values to be encoded. + + @return A url encoded query string + */ +FOUNDATION_EXPORT NSString * AFQueryStringFromParameters(NSDictionary *parameters); + +/** + The `AFURLRequestSerialization` protocol is adopted by an object that encodes parameters for a specified HTTP requests. Request serializers may encode parameters as query strings, HTTP bodies, setting the appropriate HTTP header fields as necessary. + + For example, a JSON request serializer may set the HTTP body of the request to a JSON representation, and set the `Content-Type` HTTP header field value to `application/json`. + */ +@protocol AFURLRequestSerialization + +/** + Returns a request with the specified parameters encoded into a copy of the original request. + + @param request The original request. + @param parameters The parameters to be encoded. + @param error The error that occurred while attempting to encode the request parameters. + + @return A serialized request. + */ +- (nullable NSURLRequest *)requestBySerializingRequest:(NSURLRequest *)request + withParameters:(nullable id)parameters + error:(NSError * _Nullable __autoreleasing *)error NS_SWIFT_NOTHROW; + +@end + +#pragma mark - + +/** + + */ +typedef NS_ENUM(NSUInteger, AFHTTPRequestQueryStringSerializationStyle) { + AFHTTPRequestQueryStringDefaultStyle = 0, +}; + +@protocol AFMultipartFormData; + +/** + `AFHTTPRequestSerializer` conforms to the `AFURLRequestSerialization` & `AFURLResponseSerialization` protocols, offering a concrete base implementation of query string / URL form-encoded parameter serialization and default request headers, as well as response status code and content type validation. + + Any request or response serializer dealing with HTTP is encouraged to subclass `AFHTTPRequestSerializer` in order to ensure consistent default behavior. + */ +@interface AFHTTPRequestSerializer : NSObject + +/** + The string encoding used to serialize parameters. `NSUTF8StringEncoding` by default. + */ +@property (nonatomic, assign) NSStringEncoding stringEncoding; + +/** + Whether created requests can use the device’s cellular radio (if present). `YES` by default. + + @see NSMutableURLRequest -setAllowsCellularAccess: + */ +@property (nonatomic, assign) BOOL allowsCellularAccess; + +/** + The cache policy of created requests. `NSURLRequestUseProtocolCachePolicy` by default. + + @see NSMutableURLRequest -setCachePolicy: + */ +@property (nonatomic, assign) NSURLRequestCachePolicy cachePolicy; + +/** + Whether created requests should use the default cookie handling. `YES` by default. + + @see NSMutableURLRequest -setHTTPShouldHandleCookies: + */ +@property (nonatomic, assign) BOOL HTTPShouldHandleCookies; + +/** + Whether created requests can continue transmitting data before receiving a response from an earlier transmission. `NO` by default + + @see NSMutableURLRequest -setHTTPShouldUsePipelining: + */ +@property (nonatomic, assign) BOOL HTTPShouldUsePipelining; + +/** + The network service type for created requests. `NSURLNetworkServiceTypeDefault` by default. + + @see NSMutableURLRequest -setNetworkServiceType: + */ +@property (nonatomic, assign) NSURLRequestNetworkServiceType networkServiceType; + +/** + The timeout interval, in seconds, for created requests. The default timeout interval is 60 seconds. + + @see NSMutableURLRequest -setTimeoutInterval: + */ +@property (nonatomic, assign) NSTimeInterval timeoutInterval; + +///--------------------------------------- +/// @name Configuring HTTP Request Headers +///--------------------------------------- + +/** + Default HTTP header field values to be applied to serialized requests. By default, these include the following: + + - `Accept-Language` with the contents of `NSLocale +preferredLanguages` + - `User-Agent` with the contents of various bundle identifiers and OS designations + + @discussion To add or remove default request headers, use `setValue:forHTTPHeaderField:`. + */ +@property (readonly, nonatomic, strong) NSDictionary *HTTPRequestHeaders; + +/** + Creates and returns a serializer with default configuration. + */ ++ (instancetype)serializer; + +/** + Sets the value for the HTTP headers set in request objects made by the HTTP client. If `nil`, removes the existing value for that header. + + @param field The HTTP header to set a default value for + @param value The value set as default for the specified header, or `nil` + */ +- (void)setValue:(nullable NSString *)value +forHTTPHeaderField:(NSString *)field; + +/** + Returns the value for the HTTP headers set in the request serializer. + + @param field The HTTP header to retrieve the default value for + + @return The value set as default for the specified header, or `nil` + */ +- (nullable NSString *)valueForHTTPHeaderField:(NSString *)field; + +/** + Sets the "Authorization" HTTP header set in request objects made by the HTTP client to a basic authentication value with Base64-encoded username and password. This overwrites any existing value for this header. + + @param username The HTTP basic auth username + @param password The HTTP basic auth password + */ +- (void)setAuthorizationHeaderFieldWithUsername:(NSString *)username + password:(NSString *)password; + +/** + Clears any existing value for the "Authorization" HTTP header. + */ +- (void)clearAuthorizationHeader; + +///------------------------------------------------------- +/// @name Configuring Query String Parameter Serialization +///------------------------------------------------------- + +/** + HTTP methods for which serialized requests will encode parameters as a query string. `GET`, `HEAD`, and `DELETE` by default. + */ +@property (nonatomic, strong) NSSet *HTTPMethodsEncodingParametersInURI; + +/** + Set the method of query string serialization according to one of the pre-defined styles. + + @param style The serialization style. + + @see AFHTTPRequestQueryStringSerializationStyle + */ +- (void)setQueryStringSerializationWithStyle:(AFHTTPRequestQueryStringSerializationStyle)style; + +/** + Set the a custom method of query string serialization according to the specified block. + + @param block A block that defines a process of encoding parameters into a query string. This block returns the query string and takes three arguments: the request, the parameters to encode, and the error that occurred when attempting to encode parameters for the given request. + */ +- (void)setQueryStringSerializationWithBlock:(nullable NSString * (^)(NSURLRequest *request, id parameters, NSError * __autoreleasing *error))block; + +///------------------------------- +/// @name Creating Request Objects +///------------------------------- + +/** + Creates an `NSMutableURLRequest` object with the specified HTTP method and URL string. + + If the HTTP method is `GET`, `HEAD`, or `DELETE`, the parameters will be used to construct a url-encoded query string that is appended to the request's URL. Otherwise, the parameters will be encoded according to the value of the `parameterEncoding` property, and set as the request body. + + @param method The HTTP method for the request, such as `GET`, `POST`, `PUT`, or `DELETE`. This parameter must not be `nil`. + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be either set as a query string for `GET` requests, or the request HTTP body. + @param error The error that occurred while constructing the request. + + @return An `NSMutableURLRequest` object. + */ +- (NSMutableURLRequest *)requestWithMethod:(NSString *)method + URLString:(NSString *)URLString + parameters:(nullable id)parameters + error:(NSError * _Nullable __autoreleasing *)error; + +/** + Creates an `NSMutableURLRequest` object with the specified HTTP method and URLString, and constructs a `multipart/form-data` HTTP body, using the specified parameters and multipart form data block. See http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4.2 + + Multipart form requests are automatically streamed, reading files directly from disk along with in-memory data in a single HTTP body. The resulting `NSMutableURLRequest` object has an `HTTPBodyStream` property, so refrain from setting `HTTPBodyStream` or `HTTPBody` on this request object, as it will clear out the multipart form body stream. + + @param method The HTTP method for the request. This parameter must not be `GET` or `HEAD`, or `nil`. + @param URLString The URL string used to create the request URL. + @param parameters The parameters to be encoded and set in the request HTTP body. + @param block A block that takes a single argument and appends data to the HTTP body. The block argument is an object adopting the `AFMultipartFormData` protocol. + @param error The error that occurred while constructing the request. + + @return An `NSMutableURLRequest` object + */ +- (NSMutableURLRequest *)multipartFormRequestWithMethod:(NSString *)method + URLString:(NSString *)URLString + parameters:(nullable NSDictionary *)parameters + constructingBodyWithBlock:(nullable void (^)(id formData))block + error:(NSError * _Nullable __autoreleasing *)error; + +/** + Creates an `NSMutableURLRequest` by removing the `HTTPBodyStream` from a request, and asynchronously writing its contents into the specified file, invoking the completion handler when finished. + + @param request The multipart form request. The `HTTPBodyStream` property of `request` must not be `nil`. + @param fileURL The file URL to write multipart form contents to. + @param handler A handler block to execute. + + @discussion There is a bug in `NSURLSessionTask` that causes requests to not send a `Content-Length` header when streaming contents from an HTTP body, which is notably problematic when interacting with the Amazon S3 webservice. As a workaround, this method takes a request constructed with `multipartFormRequestWithMethod:URLString:parameters:constructingBodyWithBlock:error:`, or any other request with an `HTTPBodyStream`, writes the contents to the specified file and returns a copy of the original request with the `HTTPBodyStream` property set to `nil`. From here, the file can either be passed to `AFURLSessionManager -uploadTaskWithRequest:fromFile:progress:completionHandler:`, or have its contents read into an `NSData` that's assigned to the `HTTPBody` property of the request. + + @see https://github.com/AFNetworking/AFNetworking/issues/1398 + */ +- (NSMutableURLRequest *)requestWithMultipartFormRequest:(NSURLRequest *)request + writingStreamContentsToFile:(NSURL *)fileURL + completionHandler:(nullable void (^)(NSError * _Nullable error))handler; + +@end + +#pragma mark - + +/** + The `AFMultipartFormData` protocol defines the methods supported by the parameter in the block argument of `AFHTTPRequestSerializer -multipartFormRequestWithMethod:URLString:parameters:constructingBodyWithBlock:`. + */ +@protocol AFMultipartFormData + +/** + Appends the HTTP header `Content-Disposition: file; filename=#{generated filename}; name=#{name}"` and `Content-Type: #{generated mimeType}`, followed by the encoded file data and the multipart form boundary. + + The filename and MIME type for this data in the form will be automatically generated, using the last path component of the `fileURL` and system associated MIME type for the `fileURL` extension, respectively. + + @param fileURL The URL corresponding to the file whose content will be appended to the form. This parameter must not be `nil`. + @param name The name to be associated with the specified data. This parameter must not be `nil`. + @param error If an error occurs, upon return contains an `NSError` object that describes the problem. + + @return `YES` if the file data was successfully appended, otherwise `NO`. + */ +- (BOOL)appendPartWithFileURL:(NSURL *)fileURL + name:(NSString *)name + error:(NSError * _Nullable __autoreleasing *)error; + +/** + Appends the HTTP header `Content-Disposition: file; filename=#{filename}; name=#{name}"` and `Content-Type: #{mimeType}`, followed by the encoded file data and the multipart form boundary. + + @param fileURL The URL corresponding to the file whose content will be appended to the form. This parameter must not be `nil`. + @param name The name to be associated with the specified data. This parameter must not be `nil`. + @param fileName The file name to be used in the `Content-Disposition` header. This parameter must not be `nil`. + @param mimeType The declared MIME type of the file data. This parameter must not be `nil`. + @param error If an error occurs, upon return contains an `NSError` object that describes the problem. + + @return `YES` if the file data was successfully appended otherwise `NO`. + */ +- (BOOL)appendPartWithFileURL:(NSURL *)fileURL + name:(NSString *)name + fileName:(NSString *)fileName + mimeType:(NSString *)mimeType + error:(NSError * _Nullable __autoreleasing *)error; + +/** + Appends the HTTP header `Content-Disposition: file; filename=#{filename}; name=#{name}"` and `Content-Type: #{mimeType}`, followed by the data from the input stream and the multipart form boundary. + + @param inputStream The input stream to be appended to the form data + @param name The name to be associated with the specified input stream. This parameter must not be `nil`. + @param fileName The filename to be associated with the specified input stream. This parameter must not be `nil`. + @param length The length of the specified input stream in bytes. + @param mimeType The MIME type of the specified data. (For example, the MIME type for a JPEG image is image/jpeg.) For a list of valid MIME types, see http://www.iana.org/assignments/media-types/. This parameter must not be `nil`. + */ +- (void)appendPartWithInputStream:(nullable NSInputStream *)inputStream + name:(NSString *)name + fileName:(NSString *)fileName + length:(int64_t)length + mimeType:(NSString *)mimeType; + +/** + Appends the HTTP header `Content-Disposition: file; filename=#{filename}; name=#{name}"` and `Content-Type: #{mimeType}`, followed by the encoded file data and the multipart form boundary. + + @param data The data to be encoded and appended to the form data. + @param name The name to be associated with the specified data. This parameter must not be `nil`. + @param fileName The filename to be associated with the specified data. This parameter must not be `nil`. + @param mimeType The MIME type of the specified data. (For example, the MIME type for a JPEG image is image/jpeg.) For a list of valid MIME types, see http://www.iana.org/assignments/media-types/. This parameter must not be `nil`. + */ +- (void)appendPartWithFileData:(NSData *)data + name:(NSString *)name + fileName:(NSString *)fileName + mimeType:(NSString *)mimeType; + +/** + Appends the HTTP headers `Content-Disposition: form-data; name=#{name}"`, followed by the encoded data and the multipart form boundary. + + @param data The data to be encoded and appended to the form data. + @param name The name to be associated with the specified data. This parameter must not be `nil`. + */ + +- (void)appendPartWithFormData:(NSData *)data + name:(NSString *)name; + + +/** + Appends HTTP headers, followed by the encoded data and the multipart form boundary. + + @param headers The HTTP headers to be appended to the form data. + @param body The data to be encoded and appended to the form data. This parameter must not be `nil`. + */ +- (void)appendPartWithHeaders:(nullable NSDictionary *)headers + body:(NSData *)body; + +/** + Throttles request bandwidth by limiting the packet size and adding a delay for each chunk read from the upload stream. + + When uploading over a 3G or EDGE connection, requests may fail with "request body stream exhausted". Setting a maximum packet size and delay according to the recommended values (`kAFUploadStream3GSuggestedPacketSize` and `kAFUploadStream3GSuggestedDelay`) lowers the risk of the input stream exceeding its allocated bandwidth. Unfortunately, there is no definite way to distinguish between a 3G, EDGE, or LTE connection over `NSURLConnection`. As such, it is not recommended that you throttle bandwidth based solely on network reachability. Instead, you should consider checking for the "request body stream exhausted" in a failure block, and then retrying the request with throttled bandwidth. + + @param numberOfBytes Maximum packet size, in number of bytes. The default packet size for an input stream is 16kb. + @param delay Duration of delay each time a packet is read. By default, no delay is set. + */ +- (void)throttleBandwidthWithPacketSize:(NSUInteger)numberOfBytes + delay:(NSTimeInterval)delay; + +@end + +#pragma mark - + +/** + `AFJSONRequestSerializer` is a subclass of `AFHTTPRequestSerializer` that encodes parameters as JSON using `NSJSONSerialization`, setting the `Content-Type` of the encoded request to `application/json`. + */ +@interface AFJSONRequestSerializer : AFHTTPRequestSerializer + +/** + Options for writing the request JSON data from Foundation objects. For possible values, see the `NSJSONSerialization` documentation section "NSJSONWritingOptions". `0` by default. + */ +@property (nonatomic, assign) NSJSONWritingOptions writingOptions; + +/** + Creates and returns a JSON serializer with specified reading and writing options. + + @param writingOptions The specified JSON writing options. + */ ++ (instancetype)serializerWithWritingOptions:(NSJSONWritingOptions)writingOptions; + +@end + +#pragma mark - + +/** + `AFPropertyListRequestSerializer` is a subclass of `AFHTTPRequestSerializer` that encodes parameters as JSON using `NSPropertyListSerializer`, setting the `Content-Type` of the encoded request to `application/x-plist`. + */ +@interface AFPropertyListRequestSerializer : AFHTTPRequestSerializer + +/** + The property list format. Possible values are described in "NSPropertyListFormat". + */ +@property (nonatomic, assign) NSPropertyListFormat format; + +/** + @warning The `writeOptions` property is currently unused. + */ +@property (nonatomic, assign) NSPropertyListWriteOptions writeOptions; + +/** + Creates and returns a property list serializer with a specified format, read options, and write options. + + @param format The property list format. + @param writeOptions The property list write options. + + @warning The `writeOptions` property is currently unused. + */ ++ (instancetype)serializerWithFormat:(NSPropertyListFormat)format + writeOptions:(NSPropertyListWriteOptions)writeOptions; + +@end + +#pragma mark - + +///---------------- +/// @name Constants +///---------------- + +/** + ## Error Domains + + The following error domain is predefined. + + - `NSString * const AFURLRequestSerializationErrorDomain` + + ### Constants + + `AFURLRequestSerializationErrorDomain` + AFURLRequestSerializer errors. Error codes for `AFURLRequestSerializationErrorDomain` correspond to codes in `NSURLErrorDomain`. + */ +FOUNDATION_EXPORT NSString * const AFURLRequestSerializationErrorDomain; + +/** + ## User info dictionary keys + + These keys may exist in the user info dictionary, in addition to those defined for NSError. + + - `NSString * const AFNetworkingOperationFailingURLRequestErrorKey` + + ### Constants + + `AFNetworkingOperationFailingURLRequestErrorKey` + The corresponding value is an `NSURLRequest` containing the request of the operation associated with an error. This key is only present in the `AFURLRequestSerializationErrorDomain`. + */ +FOUNDATION_EXPORT NSString * const AFNetworkingOperationFailingURLRequestErrorKey; + +/** + ## Throttling Bandwidth for HTTP Request Input Streams + + @see -throttleBandwidthWithPacketSize:delay: + + ### Constants + + `kAFUploadStream3GSuggestedPacketSize` + Maximum packet size, in number of bytes. Equal to 16kb. + + `kAFUploadStream3GSuggestedDelay` + Duration of delay each time a packet is read. Equal to 0.2 seconds. + */ +FOUNDATION_EXPORT NSUInteger const kAFUploadStream3GSuggestedPacketSize; +FOUNDATION_EXPORT NSTimeInterval const kAFUploadStream3GSuggestedDelay; + +NS_ASSUME_NONNULL_END diff --git a/JQQY/ThirdParty/AFNetworking/AFURLRequestSerialization.m b/JQQY/ThirdParty/AFNetworking/AFURLRequestSerialization.m new file mode 100755 index 0000000000000000000000000000000000000000..a47e2e6eaffbdde37dca53e8edce38fab7719f4e --- /dev/null +++ b/JQQY/ThirdParty/AFNetworking/AFURLRequestSerialization.m @@ -0,0 +1,1355 @@ +// AFURLRequestSerialization.m +// Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) +// +// 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 "AFURLRequestSerialization.h" + +#if TARGET_OS_IOS || TARGET_OS_WATCH || TARGET_OS_TV +#import +#else +#import +#endif + +NSString * const AFURLRequestSerializationErrorDomain = @"com.alamofire.error.serialization.request"; +NSString * const AFNetworkingOperationFailingURLRequestErrorKey = @"com.alamofire.serialization.request.error.response"; + +typedef NSString * (^AFQueryStringSerializationBlock)(NSURLRequest *request, id parameters, NSError *__autoreleasing *error); + +/** + Returns a percent-escaped string following RFC 3986 for a query string key or value. + RFC 3986 states that the following characters are "reserved" characters. + - General Delimiters: ":", "#", "[", "]", "@", "?", "/" + - Sub-Delimiters: "!", "$", "&", "'", "(", ")", "*", "+", ",", ";", "=" + + In RFC 3986 - Section 3.4, it states that the "?" and "/" characters should not be escaped to allow + query strings to include a URL. Therefore, all "reserved" characters with the exception of "?" and "/" + should be percent-escaped in the query string. + - parameter string: The string to be percent-escaped. + - returns: The percent-escaped string. + */ +NSString * AFPercentEscapedStringFromString(NSString *string) { + static NSString * const kAFCharactersGeneralDelimitersToEncode = @":#[]@"; // does not include "?" or "/" due to RFC 3986 - Section 3.4 + static NSString * const kAFCharactersSubDelimitersToEncode = @"!$&'()*+,;="; + + NSMutableCharacterSet * allowedCharacterSet = [[NSCharacterSet URLQueryAllowedCharacterSet] mutableCopy]; + [allowedCharacterSet removeCharactersInString:[kAFCharactersGeneralDelimitersToEncode stringByAppendingString:kAFCharactersSubDelimitersToEncode]]; + + // FIXME: https://github.com/AFNetworking/AFNetworking/pull/3028 + // return [string stringByAddingPercentEncodingWithAllowedCharacters:allowedCharacterSet]; + + static NSUInteger const batchSize = 50; + + NSUInteger index = 0; + NSMutableString *escaped = @"".mutableCopy; + + while (index < string.length) { + NSUInteger length = MIN(string.length - index, batchSize); + NSRange range = NSMakeRange(index, length); + + // To avoid breaking up character sequences such as 👴🏻👮🏽 + range = [string rangeOfComposedCharacterSequencesForRange:range]; + + NSString *substring = [string substringWithRange:range]; + NSString *encoded = [substring stringByAddingPercentEncodingWithAllowedCharacters:allowedCharacterSet]; + [escaped appendString:encoded]; + + index += range.length; + } + + return escaped; +} + +#pragma mark - + +@interface AFQueryStringPair : NSObject +@property (readwrite, nonatomic, strong) id field; +@property (readwrite, nonatomic, strong) id value; + +- (instancetype)initWithField:(id)field value:(id)value; + +- (NSString *)URLEncodedStringValue; +@end + +@implementation AFQueryStringPair + +- (instancetype)initWithField:(id)field value:(id)value { + self = [super init]; + if (!self) { + return nil; + } + + self.field = field; + self.value = value; + + return self; +} + +- (NSString *)URLEncodedStringValue { + if (!self.value || [self.value isEqual:[NSNull null]]) { + return AFPercentEscapedStringFromString([self.field description]); + } else { + return [NSString stringWithFormat:@"%@=%@", AFPercentEscapedStringFromString([self.field description]), AFPercentEscapedStringFromString([self.value description])]; + } +} + +@end + +#pragma mark - + +FOUNDATION_EXPORT NSArray * AFQueryStringPairsFromDictionary(NSDictionary *dictionary); +FOUNDATION_EXPORT NSArray * AFQueryStringPairsFromKeyAndValue(NSString *key, id value); + +NSString * AFQueryStringFromParameters(NSDictionary *parameters) { + NSMutableArray *mutablePairs = [NSMutableArray array]; + for (AFQueryStringPair *pair in AFQueryStringPairsFromDictionary(parameters)) { + [mutablePairs addObject:[pair URLEncodedStringValue]]; + } + + return [mutablePairs componentsJoinedByString:@"&"]; +} + +NSArray * AFQueryStringPairsFromDictionary(NSDictionary *dictionary) { + return AFQueryStringPairsFromKeyAndValue(nil, dictionary); +} + +NSArray * AFQueryStringPairsFromKeyAndValue(NSString *key, id value) { + NSMutableArray *mutableQueryStringComponents = [NSMutableArray array]; + + NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"description" ascending:YES selector:@selector(compare:)]; + + if ([value isKindOfClass:[NSDictionary class]]) { + NSDictionary *dictionary = value; + // Sort dictionary keys to ensure consistent ordering in query string, which is important when deserializing potentially ambiguous sequences, such as an array of dictionaries + for (id nestedKey in [dictionary.allKeys sortedArrayUsingDescriptors:@[ sortDescriptor ]]) { + id nestedValue = dictionary[nestedKey]; + if (nestedValue) { + [mutableQueryStringComponents addObjectsFromArray:AFQueryStringPairsFromKeyAndValue((key ? [NSString stringWithFormat:@"%@[%@]", key, nestedKey] : nestedKey), nestedValue)]; + } + } + } else if ([value isKindOfClass:[NSArray class]]) { + NSArray *array = value; + for (id nestedValue in array) { + [mutableQueryStringComponents addObjectsFromArray:AFQueryStringPairsFromKeyAndValue([NSString stringWithFormat:@"%@[]", key], nestedValue)]; + } + } else if ([value isKindOfClass:[NSSet class]]) { + NSSet *set = value; + for (id obj in [set sortedArrayUsingDescriptors:@[ sortDescriptor ]]) { + [mutableQueryStringComponents addObjectsFromArray:AFQueryStringPairsFromKeyAndValue(key, obj)]; + } + } else { + [mutableQueryStringComponents addObject:[[AFQueryStringPair alloc] initWithField:key value:value]]; + } + + return mutableQueryStringComponents; +} + +#pragma mark - + +@interface AFStreamingMultipartFormData : NSObject +- (instancetype)initWithURLRequest:(NSMutableURLRequest *)urlRequest + stringEncoding:(NSStringEncoding)encoding; + +- (NSMutableURLRequest *)requestByFinalizingMultipartFormData; +@end + +#pragma mark - + +static NSArray * AFHTTPRequestSerializerObservedKeyPaths() { + static NSArray *_AFHTTPRequestSerializerObservedKeyPaths = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + _AFHTTPRequestSerializerObservedKeyPaths = @[NSStringFromSelector(@selector(allowsCellularAccess)), NSStringFromSelector(@selector(cachePolicy)), NSStringFromSelector(@selector(HTTPShouldHandleCookies)), NSStringFromSelector(@selector(HTTPShouldUsePipelining)), NSStringFromSelector(@selector(networkServiceType)), NSStringFromSelector(@selector(timeoutInterval))]; + }); + + return _AFHTTPRequestSerializerObservedKeyPaths; +} + +static void *AFHTTPRequestSerializerObserverContext = &AFHTTPRequestSerializerObserverContext; + +@interface AFHTTPRequestSerializer () +@property (readwrite, nonatomic, strong) NSMutableSet *mutableObservedChangedKeyPaths; +@property (readwrite, nonatomic, strong) NSMutableDictionary *mutableHTTPRequestHeaders; +@property (readwrite, nonatomic, assign) AFHTTPRequestQueryStringSerializationStyle queryStringSerializationStyle; +@property (readwrite, nonatomic, copy) AFQueryStringSerializationBlock queryStringSerialization; +@end + +@implementation AFHTTPRequestSerializer + ++ (instancetype)serializer { + return [[self alloc] init]; +} + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + self.stringEncoding = NSUTF8StringEncoding; + + self.mutableHTTPRequestHeaders = [NSMutableDictionary dictionary]; + + // Accept-Language HTTP Header; see http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.4 + NSMutableArray *acceptLanguagesComponents = [NSMutableArray array]; + [[NSLocale preferredLanguages] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { + float q = 1.0f - (idx * 0.1f); + [acceptLanguagesComponents addObject:[NSString stringWithFormat:@"%@;q=%0.1g", obj, q]]; + *stop = q <= 0.5f; + }]; + [self setValue:[acceptLanguagesComponents componentsJoinedByString:@", "] forHTTPHeaderField:@"Accept-Language"]; + + NSString *userAgent = nil; +#if TARGET_OS_IOS + // User-Agent Header; see http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.43 + userAgent = [NSString stringWithFormat:@"%@/%@ (%@; iOS %@; Scale/%0.2f)", [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleExecutableKey] ?: [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleIdentifierKey], [[NSBundle mainBundle] infoDictionary][@"CFBundleShortVersionString"] ?: [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleVersionKey], [[UIDevice currentDevice] model], [[UIDevice currentDevice] systemVersion], [[UIScreen mainScreen] scale]]; +#elif TARGET_OS_WATCH + // User-Agent Header; see http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.43 + userAgent = [NSString stringWithFormat:@"%@/%@ (%@; watchOS %@; Scale/%0.2f)", [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleExecutableKey] ?: [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleIdentifierKey], [[NSBundle mainBundle] infoDictionary][@"CFBundleShortVersionString"] ?: [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleVersionKey], [[WKInterfaceDevice currentDevice] model], [[WKInterfaceDevice currentDevice] systemVersion], [[WKInterfaceDevice currentDevice] screenScale]]; +#elif defined(__MAC_OS_X_VERSION_MIN_REQUIRED) + userAgent = [NSString stringWithFormat:@"%@/%@ (Mac OS X %@)", [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleExecutableKey] ?: [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleIdentifierKey], [[NSBundle mainBundle] infoDictionary][@"CFBundleShortVersionString"] ?: [[NSBundle mainBundle] infoDictionary][(__bridge NSString *)kCFBundleVersionKey], [[NSProcessInfo processInfo] operatingSystemVersionString]]; +#endif + if (userAgent) { + if (![userAgent canBeConvertedToEncoding:NSASCIIStringEncoding]) { + NSMutableString *mutableUserAgent = [userAgent mutableCopy]; + if (CFStringTransform((__bridge CFMutableStringRef)(mutableUserAgent), NULL, (__bridge CFStringRef)@"Any-Latin; Latin-ASCII; [:^ASCII:] Remove", false)) { + userAgent = mutableUserAgent; + } + } + [self setValue:userAgent forHTTPHeaderField:@"User-Agent"]; + } + + // HTTP Method Definitions; see http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html + self.HTTPMethodsEncodingParametersInURI = [NSSet setWithObjects:@"GET", @"HEAD", @"DELETE", nil]; + + self.mutableObservedChangedKeyPaths = [NSMutableSet set]; + for (NSString *keyPath in AFHTTPRequestSerializerObservedKeyPaths()) { + if ([self respondsToSelector:NSSelectorFromString(keyPath)]) { + [self addObserver:self forKeyPath:keyPath options:NSKeyValueObservingOptionNew context:AFHTTPRequestSerializerObserverContext]; + } + } + + return self; +} + +- (void)dealloc { + for (NSString *keyPath in AFHTTPRequestSerializerObservedKeyPaths()) { + if ([self respondsToSelector:NSSelectorFromString(keyPath)]) { + [self removeObserver:self forKeyPath:keyPath context:AFHTTPRequestSerializerObserverContext]; + } + } +} + +#pragma mark - + +// Workarounds for crashing behavior using Key-Value Observing with XCTest +// See https://github.com/AFNetworking/AFNetworking/issues/2523 + +- (void)setAllowsCellularAccess:(BOOL)allowsCellularAccess { + [self willChangeValueForKey:NSStringFromSelector(@selector(allowsCellularAccess))]; + _allowsCellularAccess = allowsCellularAccess; + [self didChangeValueForKey:NSStringFromSelector(@selector(allowsCellularAccess))]; +} + +- (void)setCachePolicy:(NSURLRequestCachePolicy)cachePolicy { + [self willChangeValueForKey:NSStringFromSelector(@selector(cachePolicy))]; + _cachePolicy = cachePolicy; + [self didChangeValueForKey:NSStringFromSelector(@selector(cachePolicy))]; +} + +- (void)setHTTPShouldHandleCookies:(BOOL)HTTPShouldHandleCookies { + [self willChangeValueForKey:NSStringFromSelector(@selector(HTTPShouldHandleCookies))]; + _HTTPShouldHandleCookies = HTTPShouldHandleCookies; + [self didChangeValueForKey:NSStringFromSelector(@selector(HTTPShouldHandleCookies))]; +} + +- (void)setHTTPShouldUsePipelining:(BOOL)HTTPShouldUsePipelining { + [self willChangeValueForKey:NSStringFromSelector(@selector(HTTPShouldUsePipelining))]; + _HTTPShouldUsePipelining = HTTPShouldUsePipelining; + [self didChangeValueForKey:NSStringFromSelector(@selector(HTTPShouldUsePipelining))]; +} + +- (void)setNetworkServiceType:(NSURLRequestNetworkServiceType)networkServiceType { + [self willChangeValueForKey:NSStringFromSelector(@selector(networkServiceType))]; + _networkServiceType = networkServiceType; + [self didChangeValueForKey:NSStringFromSelector(@selector(networkServiceType))]; +} + +- (void)setTimeoutInterval:(NSTimeInterval)timeoutInterval { + [self willChangeValueForKey:NSStringFromSelector(@selector(timeoutInterval))]; + _timeoutInterval = timeoutInterval; + [self didChangeValueForKey:NSStringFromSelector(@selector(timeoutInterval))]; +} + +#pragma mark - + +- (NSDictionary *)HTTPRequestHeaders { + return [NSDictionary dictionaryWithDictionary:self.mutableHTTPRequestHeaders]; +} + +- (void)setValue:(NSString *)value +forHTTPHeaderField:(NSString *)field +{ + [self.mutableHTTPRequestHeaders setValue:value forKey:field]; +} + +- (NSString *)valueForHTTPHeaderField:(NSString *)field { + return [self.mutableHTTPRequestHeaders valueForKey:field]; +} + +- (void)setAuthorizationHeaderFieldWithUsername:(NSString *)username + password:(NSString *)password +{ + NSData *basicAuthCredentials = [[NSString stringWithFormat:@"%@:%@", username, password] dataUsingEncoding:NSUTF8StringEncoding]; + NSString *base64AuthCredentials = [basicAuthCredentials base64EncodedStringWithOptions:(NSDataBase64EncodingOptions)0]; + [self setValue:[NSString stringWithFormat:@"Basic %@", base64AuthCredentials] forHTTPHeaderField:@"Authorization"]; +} + +- (void)clearAuthorizationHeader { + [self.mutableHTTPRequestHeaders removeObjectForKey:@"Authorization"]; +} + +#pragma mark - + +- (void)setQueryStringSerializationWithStyle:(AFHTTPRequestQueryStringSerializationStyle)style { + self.queryStringSerializationStyle = style; + self.queryStringSerialization = nil; +} + +- (void)setQueryStringSerializationWithBlock:(NSString *(^)(NSURLRequest *, id, NSError *__autoreleasing *))block { + self.queryStringSerialization = block; +} + +#pragma mark - + +- (NSMutableURLRequest *)requestWithMethod:(NSString *)method + URLString:(NSString *)URLString + parameters:(id)parameters + error:(NSError *__autoreleasing *)error +{ + NSParameterAssert(method); + NSParameterAssert(URLString); + + NSURL *url = [NSURL URLWithString:URLString]; + + NSParameterAssert(url); + + NSMutableURLRequest *mutableRequest = [[NSMutableURLRequest alloc] initWithURL:url]; + mutableRequest.HTTPMethod = method; + + for (NSString *keyPath in AFHTTPRequestSerializerObservedKeyPaths()) { + if ([self.mutableObservedChangedKeyPaths containsObject:keyPath]) { + [mutableRequest setValue:[self valueForKeyPath:keyPath] forKey:keyPath]; + } + } + + mutableRequest = [[self requestBySerializingRequest:mutableRequest withParameters:parameters error:error] mutableCopy]; + + return mutableRequest; +} + +- (NSMutableURLRequest *)multipartFormRequestWithMethod:(NSString *)method + URLString:(NSString *)URLString + parameters:(NSDictionary *)parameters + constructingBodyWithBlock:(void (^)(id formData))block + error:(NSError *__autoreleasing *)error +{ + NSParameterAssert(method); + NSParameterAssert(![method isEqualToString:@"GET"] && ![method isEqualToString:@"HEAD"]); + + NSMutableURLRequest *mutableRequest = [self requestWithMethod:method URLString:URLString parameters:nil error:error]; + + __block AFStreamingMultipartFormData *formData = [[AFStreamingMultipartFormData alloc] initWithURLRequest:mutableRequest stringEncoding:NSUTF8StringEncoding]; + + if (parameters) { + for (AFQueryStringPair *pair in AFQueryStringPairsFromDictionary(parameters)) { + NSData *data = nil; + if ([pair.value isKindOfClass:[NSData class]]) { + data = pair.value; + } else if ([pair.value isEqual:[NSNull null]]) { + data = [NSData data]; + } else { + data = [[pair.value description] dataUsingEncoding:self.stringEncoding]; + } + + if (data) { + [formData appendPartWithFormData:data name:[pair.field description]]; + } + } + } + + if (block) { + block(formData); + } + + return [formData requestByFinalizingMultipartFormData]; +} + +- (NSMutableURLRequest *)requestWithMultipartFormRequest:(NSURLRequest *)request + writingStreamContentsToFile:(NSURL *)fileURL + completionHandler:(void (^)(NSError *error))handler +{ + NSParameterAssert(request.HTTPBodyStream); + NSParameterAssert([fileURL isFileURL]); + + NSInputStream *inputStream = request.HTTPBodyStream; + NSOutputStream *outputStream = [[NSOutputStream alloc] initWithURL:fileURL append:NO]; + __block NSError *error = nil; + + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + [inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; + [outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; + + [inputStream open]; + [outputStream open]; + + while ([inputStream hasBytesAvailable] && [outputStream hasSpaceAvailable]) { + uint8_t buffer[1024]; + + NSInteger bytesRead = [inputStream read:buffer maxLength:1024]; + if (inputStream.streamError || bytesRead < 0) { + error = inputStream.streamError; + break; + } + + NSInteger bytesWritten = [outputStream write:buffer maxLength:(NSUInteger)bytesRead]; + if (outputStream.streamError || bytesWritten < 0) { + error = outputStream.streamError; + break; + } + + if (bytesRead == 0 && bytesWritten == 0) { + break; + } + } + + [outputStream close]; + [inputStream close]; + + if (handler) { + dispatch_async(dispatch_get_main_queue(), ^{ + handler(error); + }); + } + }); + + NSMutableURLRequest *mutableRequest = [request mutableCopy]; + mutableRequest.HTTPBodyStream = nil; + + return mutableRequest; +} + +#pragma mark - AFURLRequestSerialization + +- (NSURLRequest *)requestBySerializingRequest:(NSURLRequest *)request + withParameters:(id)parameters + error:(NSError *__autoreleasing *)error +{ + NSParameterAssert(request); + + NSMutableURLRequest *mutableRequest = [request mutableCopy]; + + [self.HTTPRequestHeaders enumerateKeysAndObjectsUsingBlock:^(id field, id value, BOOL * __unused stop) { + if (![request valueForHTTPHeaderField:field]) { + [mutableRequest setValue:value forHTTPHeaderField:field]; + } + }]; + + NSString *query = nil; + if (parameters) { + if (self.queryStringSerialization) { + NSError *serializationError; + query = self.queryStringSerialization(request, parameters, &serializationError); + + if (serializationError) { + if (error) { + *error = serializationError; + } + + return nil; + } + } else { + switch (self.queryStringSerializationStyle) { + case AFHTTPRequestQueryStringDefaultStyle: + query = AFQueryStringFromParameters(parameters); + break; + } + } + } + + if ([self.HTTPMethodsEncodingParametersInURI containsObject:[[request HTTPMethod] uppercaseString]]) { + if (query && query.length > 0) { + mutableRequest.URL = [NSURL URLWithString:[[mutableRequest.URL absoluteString] stringByAppendingFormat:mutableRequest.URL.query ? @"&%@" : @"?%@", query]]; + } + } else { + // #2864: an empty string is a valid x-www-form-urlencoded payload + if (!query) { + query = @""; + } + if (![mutableRequest valueForHTTPHeaderField:@"Content-Type"]) { + [mutableRequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; + } + [mutableRequest setHTTPBody:[query dataUsingEncoding:self.stringEncoding]]; + } + + return mutableRequest; +} + +#pragma mark - NSKeyValueObserving + ++ (BOOL)automaticallyNotifiesObserversForKey:(NSString *)key { + if ([AFHTTPRequestSerializerObservedKeyPaths() containsObject:key]) { + return NO; + } + + return [super automaticallyNotifiesObserversForKey:key]; +} + +- (void)observeValueForKeyPath:(NSString *)keyPath + ofObject:(__unused id)object + change:(NSDictionary *)change + context:(void *)context +{ + if (context == AFHTTPRequestSerializerObserverContext) { + if ([change[NSKeyValueChangeNewKey] isEqual:[NSNull null]]) { + [self.mutableObservedChangedKeyPaths removeObject:keyPath]; + } else { + [self.mutableObservedChangedKeyPaths addObject:keyPath]; + } + } +} + +#pragma mark - NSSecureCoding + ++ (BOOL)supportsSecureCoding { + return YES; +} + +- (instancetype)initWithCoder:(NSCoder *)decoder { + self = [self init]; + if (!self) { + return nil; + } + + self.mutableHTTPRequestHeaders = [[decoder decodeObjectOfClass:[NSDictionary class] forKey:NSStringFromSelector(@selector(mutableHTTPRequestHeaders))] mutableCopy]; + self.queryStringSerializationStyle = (AFHTTPRequestQueryStringSerializationStyle)[[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(queryStringSerializationStyle))] unsignedIntegerValue]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [coder encodeObject:self.mutableHTTPRequestHeaders forKey:NSStringFromSelector(@selector(mutableHTTPRequestHeaders))]; + [coder encodeInteger:self.queryStringSerializationStyle forKey:NSStringFromSelector(@selector(queryStringSerializationStyle))]; +} + +#pragma mark - NSCopying + +- (instancetype)copyWithZone:(NSZone *)zone { + AFHTTPRequestSerializer *serializer = [[[self class] allocWithZone:zone] init]; + serializer.mutableHTTPRequestHeaders = [self.mutableHTTPRequestHeaders mutableCopyWithZone:zone]; + serializer.queryStringSerializationStyle = self.queryStringSerializationStyle; + serializer.queryStringSerialization = self.queryStringSerialization; + + return serializer; +} + +@end + +#pragma mark - + +static NSString * AFCreateMultipartFormBoundary() { + return [NSString stringWithFormat:@"Boundary+%08X%08X", arc4random(), arc4random()]; +} + +static NSString * const kAFMultipartFormCRLF = @"\r\n"; + +static inline NSString * AFMultipartFormInitialBoundary(NSString *boundary) { + return [NSString stringWithFormat:@"--%@%@", boundary, kAFMultipartFormCRLF]; +} + +static inline NSString * AFMultipartFormEncapsulationBoundary(NSString *boundary) { + return [NSString stringWithFormat:@"%@--%@%@", kAFMultipartFormCRLF, boundary, kAFMultipartFormCRLF]; +} + +static inline NSString * AFMultipartFormFinalBoundary(NSString *boundary) { + return [NSString stringWithFormat:@"%@--%@--%@", kAFMultipartFormCRLF, boundary, kAFMultipartFormCRLF]; +} + +static inline NSString * AFContentTypeForPathExtension(NSString *extension) { + NSString *UTI = (__bridge_transfer NSString *)UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (__bridge CFStringRef)extension, NULL); + NSString *contentType = (__bridge_transfer NSString *)UTTypeCopyPreferredTagWithClass((__bridge CFStringRef)UTI, kUTTagClassMIMEType); + if (!contentType) { + return @"application/octet-stream"; + } else { + return contentType; + } +} + +NSUInteger const kAFUploadStream3GSuggestedPacketSize = 1024 * 16; +NSTimeInterval const kAFUploadStream3GSuggestedDelay = 0.2; + +@interface AFHTTPBodyPart : NSObject +@property (nonatomic, assign) NSStringEncoding stringEncoding; +@property (nonatomic, strong) NSDictionary *headers; +@property (nonatomic, copy) NSString *boundary; +@property (nonatomic, strong) id body; +@property (nonatomic, assign) unsigned long long bodyContentLength; +@property (nonatomic, strong) NSInputStream *inputStream; + +@property (nonatomic, assign) BOOL hasInitialBoundary; +@property (nonatomic, assign) BOOL hasFinalBoundary; + +@property (readonly, nonatomic, assign, getter = hasBytesAvailable) BOOL bytesAvailable; +@property (readonly, nonatomic, assign) unsigned long long contentLength; + +- (NSInteger)read:(uint8_t *)buffer + maxLength:(NSUInteger)length; +@end + +@interface AFMultipartBodyStream : NSInputStream +@property (nonatomic, assign) NSUInteger numberOfBytesInPacket; +@property (nonatomic, assign) NSTimeInterval delay; +@property (nonatomic, strong) NSInputStream *inputStream; +@property (readonly, nonatomic, assign) unsigned long long contentLength; +@property (readonly, nonatomic, assign, getter = isEmpty) BOOL empty; + +- (instancetype)initWithStringEncoding:(NSStringEncoding)encoding; +- (void)setInitialAndFinalBoundaries; +- (void)appendHTTPBodyPart:(AFHTTPBodyPart *)bodyPart; +@end + +#pragma mark - + +@interface AFStreamingMultipartFormData () +@property (readwrite, nonatomic, copy) NSMutableURLRequest *request; +@property (readwrite, nonatomic, assign) NSStringEncoding stringEncoding; +@property (readwrite, nonatomic, copy) NSString *boundary; +@property (readwrite, nonatomic, strong) AFMultipartBodyStream *bodyStream; +@end + +@implementation AFStreamingMultipartFormData + +- (instancetype)initWithURLRequest:(NSMutableURLRequest *)urlRequest + stringEncoding:(NSStringEncoding)encoding +{ + self = [super init]; + if (!self) { + return nil; + } + + self.request = urlRequest; + self.stringEncoding = encoding; + self.boundary = AFCreateMultipartFormBoundary(); + self.bodyStream = [[AFMultipartBodyStream alloc] initWithStringEncoding:encoding]; + + return self; +} + +- (BOOL)appendPartWithFileURL:(NSURL *)fileURL + name:(NSString *)name + error:(NSError * __autoreleasing *)error +{ + NSParameterAssert(fileURL); + NSParameterAssert(name); + + NSString *fileName = [fileURL lastPathComponent]; + NSString *mimeType = AFContentTypeForPathExtension([fileURL pathExtension]); + + return [self appendPartWithFileURL:fileURL name:name fileName:fileName mimeType:mimeType error:error]; +} + +- (BOOL)appendPartWithFileURL:(NSURL *)fileURL + name:(NSString *)name + fileName:(NSString *)fileName + mimeType:(NSString *)mimeType + error:(NSError * __autoreleasing *)error +{ + NSParameterAssert(fileURL); + NSParameterAssert(name); + NSParameterAssert(fileName); + NSParameterAssert(mimeType); + + if (![fileURL isFileURL]) { + NSDictionary *userInfo = @{NSLocalizedFailureReasonErrorKey: NSLocalizedStringFromTable(@"Expected URL to be a file URL", @"AFNetworking", nil)}; + if (error) { + *error = [[NSError alloc] initWithDomain:AFURLRequestSerializationErrorDomain code:NSURLErrorBadURL userInfo:userInfo]; + } + + return NO; + } else if ([fileURL checkResourceIsReachableAndReturnError:error] == NO) { + NSDictionary *userInfo = @{NSLocalizedFailureReasonErrorKey: NSLocalizedStringFromTable(@"File URL not reachable.", @"AFNetworking", nil)}; + if (error) { + *error = [[NSError alloc] initWithDomain:AFURLRequestSerializationErrorDomain code:NSURLErrorBadURL userInfo:userInfo]; + } + + return NO; + } + + NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:[fileURL path] error:error]; + if (!fileAttributes) { + return NO; + } + + NSMutableDictionary *mutableHeaders = [NSMutableDictionary dictionary]; + [mutableHeaders setValue:[NSString stringWithFormat:@"form-data; name=\"%@\"; filename=\"%@\"", name, fileName] forKey:@"Content-Disposition"]; + [mutableHeaders setValue:mimeType forKey:@"Content-Type"]; + + AFHTTPBodyPart *bodyPart = [[AFHTTPBodyPart alloc] init]; + bodyPart.stringEncoding = self.stringEncoding; + bodyPart.headers = mutableHeaders; + bodyPart.boundary = self.boundary; + bodyPart.body = fileURL; + bodyPart.bodyContentLength = [fileAttributes[NSFileSize] unsignedLongLongValue]; + [self.bodyStream appendHTTPBodyPart:bodyPart]; + + return YES; +} + +- (void)appendPartWithInputStream:(NSInputStream *)inputStream + name:(NSString *)name + fileName:(NSString *)fileName + length:(int64_t)length + mimeType:(NSString *)mimeType +{ + NSParameterAssert(name); + NSParameterAssert(fileName); + NSParameterAssert(mimeType); + + NSMutableDictionary *mutableHeaders = [NSMutableDictionary dictionary]; + [mutableHeaders setValue:[NSString stringWithFormat:@"form-data; name=\"%@\"; filename=\"%@\"", name, fileName] forKey:@"Content-Disposition"]; + [mutableHeaders setValue:mimeType forKey:@"Content-Type"]; + + AFHTTPBodyPart *bodyPart = [[AFHTTPBodyPart alloc] init]; + bodyPart.stringEncoding = self.stringEncoding; + bodyPart.headers = mutableHeaders; + bodyPart.boundary = self.boundary; + bodyPart.body = inputStream; + + bodyPart.bodyContentLength = (unsigned long long)length; + + [self.bodyStream appendHTTPBodyPart:bodyPart]; +} + +- (void)appendPartWithFileData:(NSData *)data + name:(NSString *)name + fileName:(NSString *)fileName + mimeType:(NSString *)mimeType +{ + NSParameterAssert(name); + NSParameterAssert(fileName); + NSParameterAssert(mimeType); + + NSMutableDictionary *mutableHeaders = [NSMutableDictionary dictionary]; + [mutableHeaders setValue:[NSString stringWithFormat:@"form-data; name=\"%@\"; filename=\"%@\"", name, fileName] forKey:@"Content-Disposition"]; + [mutableHeaders setValue:mimeType forKey:@"Content-Type"]; + + [self appendPartWithHeaders:mutableHeaders body:data]; +} + +- (void)appendPartWithFormData:(NSData *)data + name:(NSString *)name +{ + NSParameterAssert(name); + + NSMutableDictionary *mutableHeaders = [NSMutableDictionary dictionary]; + [mutableHeaders setValue:[NSString stringWithFormat:@"form-data; name=\"%@\"", name] forKey:@"Content-Disposition"]; + + [self appendPartWithHeaders:mutableHeaders body:data]; +} + +- (void)appendPartWithHeaders:(NSDictionary *)headers + body:(NSData *)body +{ + NSParameterAssert(body); + + AFHTTPBodyPart *bodyPart = [[AFHTTPBodyPart alloc] init]; + bodyPart.stringEncoding = self.stringEncoding; + bodyPart.headers = headers; + bodyPart.boundary = self.boundary; + bodyPart.bodyContentLength = [body length]; + bodyPart.body = body; + + [self.bodyStream appendHTTPBodyPart:bodyPart]; +} + +- (void)throttleBandwidthWithPacketSize:(NSUInteger)numberOfBytes + delay:(NSTimeInterval)delay +{ + self.bodyStream.numberOfBytesInPacket = numberOfBytes; + self.bodyStream.delay = delay; +} + +- (NSMutableURLRequest *)requestByFinalizingMultipartFormData { + if ([self.bodyStream isEmpty]) { + return self.request; + } + + // Reset the initial and final boundaries to ensure correct Content-Length + [self.bodyStream setInitialAndFinalBoundaries]; + [self.request setHTTPBodyStream:self.bodyStream]; + + [self.request setValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@", self.boundary] forHTTPHeaderField:@"Content-Type"]; + [self.request setValue:[NSString stringWithFormat:@"%llu", [self.bodyStream contentLength]] forHTTPHeaderField:@"Content-Length"]; + + return self.request; +} + +@end + +#pragma mark - + +@interface NSStream () +@property (readwrite) NSStreamStatus streamStatus; +@property (readwrite, copy) NSError *streamError; +@end + +@interface AFMultipartBodyStream () +@property (readwrite, nonatomic, assign) NSStringEncoding stringEncoding; +@property (readwrite, nonatomic, strong) NSMutableArray *HTTPBodyParts; +@property (readwrite, nonatomic, strong) NSEnumerator *HTTPBodyPartEnumerator; +@property (readwrite, nonatomic, strong) AFHTTPBodyPart *currentHTTPBodyPart; +@property (readwrite, nonatomic, strong) NSOutputStream *outputStream; +@property (readwrite, nonatomic, strong) NSMutableData *buffer; +@end + +@implementation AFMultipartBodyStream +#if (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000) || (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 1100) +@synthesize delegate; +#endif +@synthesize streamStatus; +@synthesize streamError; + +- (instancetype)initWithStringEncoding:(NSStringEncoding)encoding { + self = [super init]; + if (!self) { + return nil; + } + + self.stringEncoding = encoding; + self.HTTPBodyParts = [NSMutableArray array]; + self.numberOfBytesInPacket = NSIntegerMax; + + return self; +} + +- (void)setInitialAndFinalBoundaries { + if ([self.HTTPBodyParts count] > 0) { + for (AFHTTPBodyPart *bodyPart in self.HTTPBodyParts) { + bodyPart.hasInitialBoundary = NO; + bodyPart.hasFinalBoundary = NO; + } + + [[self.HTTPBodyParts firstObject] setHasInitialBoundary:YES]; + [[self.HTTPBodyParts lastObject] setHasFinalBoundary:YES]; + } +} + +- (void)appendHTTPBodyPart:(AFHTTPBodyPart *)bodyPart { + [self.HTTPBodyParts addObject:bodyPart]; +} + +- (BOOL)isEmpty { + return [self.HTTPBodyParts count] == 0; +} + +#pragma mark - NSInputStream + +- (NSInteger)read:(uint8_t *)buffer + maxLength:(NSUInteger)length +{ + if ([self streamStatus] == NSStreamStatusClosed) { + return 0; + } + + NSInteger totalNumberOfBytesRead = 0; + + while ((NSUInteger)totalNumberOfBytesRead < MIN(length, self.numberOfBytesInPacket)) { + if (!self.currentHTTPBodyPart || ![self.currentHTTPBodyPart hasBytesAvailable]) { + if (!(self.currentHTTPBodyPart = [self.HTTPBodyPartEnumerator nextObject])) { + break; + } + } else { + NSUInteger maxLength = MIN(length, self.numberOfBytesInPacket) - (NSUInteger)totalNumberOfBytesRead; + NSInteger numberOfBytesRead = [self.currentHTTPBodyPart read:&buffer[totalNumberOfBytesRead] maxLength:maxLength]; + if (numberOfBytesRead == -1) { + self.streamError = self.currentHTTPBodyPart.inputStream.streamError; + break; + } else { + totalNumberOfBytesRead += numberOfBytesRead; + + if (self.delay > 0.0f) { + [NSThread sleepForTimeInterval:self.delay]; + } + } + } + } + + return totalNumberOfBytesRead; +} + +- (BOOL)getBuffer:(__unused uint8_t **)buffer + length:(__unused NSUInteger *)len +{ + return NO; +} + +- (BOOL)hasBytesAvailable { + return [self streamStatus] == NSStreamStatusOpen; +} + +#pragma mark - NSStream + +- (void)open { + if (self.streamStatus == NSStreamStatusOpen) { + return; + } + + self.streamStatus = NSStreamStatusOpen; + + [self setInitialAndFinalBoundaries]; + self.HTTPBodyPartEnumerator = [self.HTTPBodyParts objectEnumerator]; +} + +- (void)close { + self.streamStatus = NSStreamStatusClosed; +} + +- (id)propertyForKey:(__unused NSString *)key { + return nil; +} + +- (BOOL)setProperty:(__unused id)property + forKey:(__unused NSString *)key +{ + return NO; +} + +- (void)scheduleInRunLoop:(__unused NSRunLoop *)aRunLoop + forMode:(__unused NSString *)mode +{} + +- (void)removeFromRunLoop:(__unused NSRunLoop *)aRunLoop + forMode:(__unused NSString *)mode +{} + +- (unsigned long long)contentLength { + unsigned long long length = 0; + for (AFHTTPBodyPart *bodyPart in self.HTTPBodyParts) { + length += [bodyPart contentLength]; + } + + return length; +} + +#pragma mark - Undocumented CFReadStream Bridged Methods + +- (void)_scheduleInCFRunLoop:(__unused CFRunLoopRef)aRunLoop + forMode:(__unused CFStringRef)aMode +{} + +- (void)_unscheduleFromCFRunLoop:(__unused CFRunLoopRef)aRunLoop + forMode:(__unused CFStringRef)aMode +{} + +- (BOOL)_setCFClientFlags:(__unused CFOptionFlags)inFlags + callback:(__unused CFReadStreamClientCallBack)inCallback + context:(__unused CFStreamClientContext *)inContext { + return NO; +} + +#pragma mark - NSCopying + +- (instancetype)copyWithZone:(NSZone *)zone { + AFMultipartBodyStream *bodyStreamCopy = [[[self class] allocWithZone:zone] initWithStringEncoding:self.stringEncoding]; + + for (AFHTTPBodyPart *bodyPart in self.HTTPBodyParts) { + [bodyStreamCopy appendHTTPBodyPart:[bodyPart copy]]; + } + + [bodyStreamCopy setInitialAndFinalBoundaries]; + + return bodyStreamCopy; +} + +@end + +#pragma mark - + +typedef enum { + AFEncapsulationBoundaryPhase = 1, + AFHeaderPhase = 2, + AFBodyPhase = 3, + AFFinalBoundaryPhase = 4, +} AFHTTPBodyPartReadPhase; + +@interface AFHTTPBodyPart () { + AFHTTPBodyPartReadPhase _phase; + NSInputStream *_inputStream; + unsigned long long _phaseReadOffset; +} + +- (BOOL)transitionToNextPhase; +- (NSInteger)readData:(NSData *)data + intoBuffer:(uint8_t *)buffer + maxLength:(NSUInteger)length; +@end + +@implementation AFHTTPBodyPart + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + [self transitionToNextPhase]; + + return self; +} + +- (void)dealloc { + if (_inputStream) { + [_inputStream close]; + _inputStream = nil; + } +} + +- (NSInputStream *)inputStream { + if (!_inputStream) { + if ([self.body isKindOfClass:[NSData class]]) { + _inputStream = [NSInputStream inputStreamWithData:self.body]; + } else if ([self.body isKindOfClass:[NSURL class]]) { + _inputStream = [NSInputStream inputStreamWithURL:self.body]; + } else if ([self.body isKindOfClass:[NSInputStream class]]) { + _inputStream = self.body; + } else { + _inputStream = [NSInputStream inputStreamWithData:[NSData data]]; + } + } + + return _inputStream; +} + +- (NSString *)stringForHeaders { + NSMutableString *headerString = [NSMutableString string]; + for (NSString *field in [self.headers allKeys]) { + [headerString appendString:[NSString stringWithFormat:@"%@: %@%@", field, [self.headers valueForKey:field], kAFMultipartFormCRLF]]; + } + [headerString appendString:kAFMultipartFormCRLF]; + + return [NSString stringWithString:headerString]; +} + +- (unsigned long long)contentLength { + unsigned long long length = 0; + + NSData *encapsulationBoundaryData = [([self hasInitialBoundary] ? AFMultipartFormInitialBoundary(self.boundary) : AFMultipartFormEncapsulationBoundary(self.boundary)) dataUsingEncoding:self.stringEncoding]; + length += [encapsulationBoundaryData length]; + + NSData *headersData = [[self stringForHeaders] dataUsingEncoding:self.stringEncoding]; + length += [headersData length]; + + length += _bodyContentLength; + + NSData *closingBoundaryData = ([self hasFinalBoundary] ? [AFMultipartFormFinalBoundary(self.boundary) dataUsingEncoding:self.stringEncoding] : [NSData data]); + length += [closingBoundaryData length]; + + return length; +} + +- (BOOL)hasBytesAvailable { + // Allows `read:maxLength:` to be called again if `AFMultipartFormFinalBoundary` doesn't fit into the available buffer + if (_phase == AFFinalBoundaryPhase) { + return YES; + } + + switch (self.inputStream.streamStatus) { + case NSStreamStatusNotOpen: + case NSStreamStatusOpening: + case NSStreamStatusOpen: + case NSStreamStatusReading: + case NSStreamStatusWriting: + return YES; + case NSStreamStatusAtEnd: + case NSStreamStatusClosed: + case NSStreamStatusError: + default: + return NO; + } +} + +- (NSInteger)read:(uint8_t *)buffer + maxLength:(NSUInteger)length +{ + NSInteger totalNumberOfBytesRead = 0; + + if (_phase == AFEncapsulationBoundaryPhase) { + NSData *encapsulationBoundaryData = [([self hasInitialBoundary] ? AFMultipartFormInitialBoundary(self.boundary) : AFMultipartFormEncapsulationBoundary(self.boundary)) dataUsingEncoding:self.stringEncoding]; + totalNumberOfBytesRead += [self readData:encapsulationBoundaryData intoBuffer:&buffer[totalNumberOfBytesRead] maxLength:(length - (NSUInteger)totalNumberOfBytesRead)]; + } + + if (_phase == AFHeaderPhase) { + NSData *headersData = [[self stringForHeaders] dataUsingEncoding:self.stringEncoding]; + totalNumberOfBytesRead += [self readData:headersData intoBuffer:&buffer[totalNumberOfBytesRead] maxLength:(length - (NSUInteger)totalNumberOfBytesRead)]; + } + + if (_phase == AFBodyPhase) { + NSInteger numberOfBytesRead = 0; + + numberOfBytesRead = [self.inputStream read:&buffer[totalNumberOfBytesRead] maxLength:(length - (NSUInteger)totalNumberOfBytesRead)]; + if (numberOfBytesRead == -1) { + return -1; + } else { + totalNumberOfBytesRead += numberOfBytesRead; + + if ([self.inputStream streamStatus] >= NSStreamStatusAtEnd) { + [self transitionToNextPhase]; + } + } + } + + if (_phase == AFFinalBoundaryPhase) { + NSData *closingBoundaryData = ([self hasFinalBoundary] ? [AFMultipartFormFinalBoundary(self.boundary) dataUsingEncoding:self.stringEncoding] : [NSData data]); + totalNumberOfBytesRead += [self readData:closingBoundaryData intoBuffer:&buffer[totalNumberOfBytesRead] maxLength:(length - (NSUInteger)totalNumberOfBytesRead)]; + } + + return totalNumberOfBytesRead; +} + +- (NSInteger)readData:(NSData *)data + intoBuffer:(uint8_t *)buffer + maxLength:(NSUInteger)length +{ + NSRange range = NSMakeRange((NSUInteger)_phaseReadOffset, MIN([data length] - ((NSUInteger)_phaseReadOffset), length)); + [data getBytes:buffer range:range]; + + _phaseReadOffset += range.length; + + if (((NSUInteger)_phaseReadOffset) >= [data length]) { + [self transitionToNextPhase]; + } + + return (NSInteger)range.length; +} + +- (BOOL)transitionToNextPhase { + if (![[NSThread currentThread] isMainThread]) { + dispatch_sync(dispatch_get_main_queue(), ^{ + [self transitionToNextPhase]; + }); + return YES; + } + + switch (_phase) { + case AFEncapsulationBoundaryPhase: + _phase = AFHeaderPhase; + break; + case AFHeaderPhase: + [self.inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes]; + [self.inputStream open]; + _phase = AFBodyPhase; + break; + case AFBodyPhase: + [self.inputStream close]; + _phase = AFFinalBoundaryPhase; + break; + case AFFinalBoundaryPhase: + default: + _phase = AFEncapsulationBoundaryPhase; + break; + } + _phaseReadOffset = 0; + + return YES; +} + +#pragma mark - NSCopying + +- (instancetype)copyWithZone:(NSZone *)zone { + AFHTTPBodyPart *bodyPart = [[[self class] allocWithZone:zone] init]; + + bodyPart.stringEncoding = self.stringEncoding; + bodyPart.headers = self.headers; + bodyPart.bodyContentLength = self.bodyContentLength; + bodyPart.body = self.body; + bodyPart.boundary = self.boundary; + + return bodyPart; +} + +@end + +#pragma mark - + +@implementation AFJSONRequestSerializer + ++ (instancetype)serializer { + return [self serializerWithWritingOptions:(NSJSONWritingOptions)0]; +} + ++ (instancetype)serializerWithWritingOptions:(NSJSONWritingOptions)writingOptions +{ + AFJSONRequestSerializer *serializer = [[self alloc] init]; + serializer.writingOptions = writingOptions; + + return serializer; +} + +#pragma mark - AFURLRequestSerialization + +- (NSURLRequest *)requestBySerializingRequest:(NSURLRequest *)request + withParameters:(id)parameters + error:(NSError *__autoreleasing *)error +{ + NSParameterAssert(request); + + if ([self.HTTPMethodsEncodingParametersInURI containsObject:[[request HTTPMethod] uppercaseString]]) { + return [super requestBySerializingRequest:request withParameters:parameters error:error]; + } + + NSMutableURLRequest *mutableRequest = [request mutableCopy]; + + [self.HTTPRequestHeaders enumerateKeysAndObjectsUsingBlock:^(id field, id value, BOOL * __unused stop) { + if (![request valueForHTTPHeaderField:field]) { + [mutableRequest setValue:value forHTTPHeaderField:field]; + } + }]; + + if (parameters) { + if (![mutableRequest valueForHTTPHeaderField:@"Content-Type"]) { + [mutableRequest setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; + } + + [mutableRequest setHTTPBody:[NSJSONSerialization dataWithJSONObject:parameters options:self.writingOptions error:error]]; + } + + return mutableRequest; +} + +#pragma mark - NSSecureCoding + +- (instancetype)initWithCoder:(NSCoder *)decoder { + self = [super initWithCoder:decoder]; + if (!self) { + return nil; + } + + self.writingOptions = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(writingOptions))] unsignedIntegerValue]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [super encodeWithCoder:coder]; + + [coder encodeInteger:self.writingOptions forKey:NSStringFromSelector(@selector(writingOptions))]; +} + +#pragma mark - NSCopying + +- (instancetype)copyWithZone:(NSZone *)zone { + AFJSONRequestSerializer *serializer = [super copyWithZone:zone]; + serializer.writingOptions = self.writingOptions; + + return serializer; +} + +@end + +#pragma mark - + +@implementation AFPropertyListRequestSerializer + ++ (instancetype)serializer { + return [self serializerWithFormat:NSPropertyListXMLFormat_v1_0 writeOptions:0]; +} + ++ (instancetype)serializerWithFormat:(NSPropertyListFormat)format + writeOptions:(NSPropertyListWriteOptions)writeOptions +{ + AFPropertyListRequestSerializer *serializer = [[self alloc] init]; + serializer.format = format; + serializer.writeOptions = writeOptions; + + return serializer; +} + +#pragma mark - AFURLRequestSerializer + +- (NSURLRequest *)requestBySerializingRequest:(NSURLRequest *)request + withParameters:(id)parameters + error:(NSError *__autoreleasing *)error +{ + NSParameterAssert(request); + + if ([self.HTTPMethodsEncodingParametersInURI containsObject:[[request HTTPMethod] uppercaseString]]) { + return [super requestBySerializingRequest:request withParameters:parameters error:error]; + } + + NSMutableURLRequest *mutableRequest = [request mutableCopy]; + + [self.HTTPRequestHeaders enumerateKeysAndObjectsUsingBlock:^(id field, id value, BOOL * __unused stop) { + if (![request valueForHTTPHeaderField:field]) { + [mutableRequest setValue:value forHTTPHeaderField:field]; + } + }]; + + if (parameters) { + if (![mutableRequest valueForHTTPHeaderField:@"Content-Type"]) { + [mutableRequest setValue:@"application/x-plist" forHTTPHeaderField:@"Content-Type"]; + } + + [mutableRequest setHTTPBody:[NSPropertyListSerialization dataWithPropertyList:parameters format:self.format options:self.writeOptions error:error]]; + } + + return mutableRequest; +} + +#pragma mark - NSSecureCoding + +- (instancetype)initWithCoder:(NSCoder *)decoder { + self = [super initWithCoder:decoder]; + if (!self) { + return nil; + } + + self.format = (NSPropertyListFormat)[[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(format))] unsignedIntegerValue]; + self.writeOptions = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(writeOptions))] unsignedIntegerValue]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [super encodeWithCoder:coder]; + + [coder encodeInteger:self.format forKey:NSStringFromSelector(@selector(format))]; + [coder encodeObject:@(self.writeOptions) forKey:NSStringFromSelector(@selector(writeOptions))]; +} + +#pragma mark - NSCopying + +- (instancetype)copyWithZone:(NSZone *)zone { + AFPropertyListRequestSerializer *serializer = [super copyWithZone:zone]; + serializer.format = self.format; + serializer.writeOptions = self.writeOptions; + + return serializer; +} + +@end diff --git a/JQQY/ThirdParty/AFNetworking/AFURLResponseSerialization.h b/JQQY/ThirdParty/AFNetworking/AFURLResponseSerialization.h new file mode 100755 index 0000000000000000000000000000000000000000..a9430addbf848aa350c14f5ac6358f4bb86d27a3 --- /dev/null +++ b/JQQY/ThirdParty/AFNetworking/AFURLResponseSerialization.h @@ -0,0 +1,311 @@ +// AFURLResponseSerialization.h +// Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) +// +// 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 + +NS_ASSUME_NONNULL_BEGIN + +/** + The `AFURLResponseSerialization` protocol is adopted by an object that decodes data into a more useful object representation, according to details in the server response. Response serializers may additionally perform validation on the incoming response and data. + + For example, a JSON response serializer may check for an acceptable status code (`2XX` range) and content type (`application/json`), decoding a valid JSON response into an object. + */ +@protocol AFURLResponseSerialization + +/** + The response object decoded from the data associated with a specified response. + + @param response The response to be processed. + @param data The response data to be decoded. + @param error The error that occurred while attempting to decode the response data. + + @return The object decoded from the specified response data. + */ +- (nullable id)responseObjectForResponse:(nullable NSURLResponse *)response + data:(nullable NSData *)data + error:(NSError * _Nullable __autoreleasing *)error NS_SWIFT_NOTHROW; + +@end + +#pragma mark - + +/** + `AFHTTPResponseSerializer` conforms to the `AFURLRequestSerialization` & `AFURLResponseSerialization` protocols, offering a concrete base implementation of query string / URL form-encoded parameter serialization and default request headers, as well as response status code and content type validation. + + Any request or response serializer dealing with HTTP is encouraged to subclass `AFHTTPResponseSerializer` in order to ensure consistent default behavior. + */ +@interface AFHTTPResponseSerializer : NSObject + +- (instancetype)init; + +/** + The string encoding used to serialize data received from the server, when no string encoding is specified by the response. `NSUTF8StringEncoding` by default. + */ +@property (nonatomic, assign) NSStringEncoding stringEncoding; + +/** + Creates and returns a serializer with default configuration. + */ ++ (instancetype)serializer; + +///----------------------------------------- +/// @name Configuring Response Serialization +///----------------------------------------- + +/** + The acceptable HTTP status codes for responses. When non-`nil`, responses with status codes not contained by the set will result in an error during validation. + + See http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html + */ +@property (nonatomic, copy, nullable) NSIndexSet *acceptableStatusCodes; + +/** + The acceptable MIME types for responses. When non-`nil`, responses with a `Content-Type` with MIME types that do not intersect with the set will result in an error during validation. + */ +@property (nonatomic, copy, nullable) NSSet *acceptableContentTypes; + +/** + Validates the specified response and data. + + In its base implementation, this method checks for an acceptable status code and content type. Subclasses may wish to add other domain-specific checks. + + @param response The response to be validated. + @param data The data associated with the response. + @param error The error that occurred while attempting to validate the response. + + @return `YES` if the response is valid, otherwise `NO`. + */ +- (BOOL)validateResponse:(nullable NSHTTPURLResponse *)response + data:(nullable NSData *)data + error:(NSError * _Nullable __autoreleasing *)error; + +@end + +#pragma mark - + + +/** + `AFJSONResponseSerializer` is a subclass of `AFHTTPResponseSerializer` that validates and decodes JSON responses. + + By default, `AFJSONResponseSerializer` accepts the following MIME types, which includes the official standard, `application/json`, as well as other commonly-used types: + + - `application/json` + - `text/json` + - `text/javascript` + */ +@interface AFJSONResponseSerializer : AFHTTPResponseSerializer + +- (instancetype)init; + +/** + Options for reading the response JSON data and creating the Foundation objects. For possible values, see the `NSJSONSerialization` documentation section "NSJSONReadingOptions". `0` by default. + */ +@property (nonatomic, assign) NSJSONReadingOptions readingOptions; + +/** + Whether to remove keys with `NSNull` values from response JSON. Defaults to `NO`. + */ +@property (nonatomic, assign) BOOL removesKeysWithNullValues; + +/** + Creates and returns a JSON serializer with specified reading and writing options. + + @param readingOptions The specified JSON reading options. + */ ++ (instancetype)serializerWithReadingOptions:(NSJSONReadingOptions)readingOptions; + +@end + +#pragma mark - + +/** + `AFXMLParserResponseSerializer` is a subclass of `AFHTTPResponseSerializer` that validates and decodes XML responses as an `NSXMLParser` objects. + + By default, `AFXMLParserResponseSerializer` accepts the following MIME types, which includes the official standard, `application/xml`, as well as other commonly-used types: + + - `application/xml` + - `text/xml` + */ +@interface AFXMLParserResponseSerializer : AFHTTPResponseSerializer + +@end + +#pragma mark - + +#ifdef __MAC_OS_X_VERSION_MIN_REQUIRED + +/** + `AFXMLDocumentResponseSerializer` is a subclass of `AFHTTPResponseSerializer` that validates and decodes XML responses as an `NSXMLDocument` objects. + + By default, `AFXMLDocumentResponseSerializer` accepts the following MIME types, which includes the official standard, `application/xml`, as well as other commonly-used types: + + - `application/xml` + - `text/xml` + */ +@interface AFXMLDocumentResponseSerializer : AFHTTPResponseSerializer + +- (instancetype)init; + +/** + Input and output options specifically intended for `NSXMLDocument` objects. For possible values, see the `NSJSONSerialization` documentation section "NSJSONReadingOptions". `0` by default. + */ +@property (nonatomic, assign) NSUInteger options; + +/** + Creates and returns an XML document serializer with the specified options. + + @param mask The XML document options. + */ ++ (instancetype)serializerWithXMLDocumentOptions:(NSUInteger)mask; + +@end + +#endif + +#pragma mark - + +/** + `AFPropertyListResponseSerializer` is a subclass of `AFHTTPResponseSerializer` that validates and decodes XML responses as an `NSXMLDocument` objects. + + By default, `AFPropertyListResponseSerializer` accepts the following MIME types: + + - `application/x-plist` + */ +@interface AFPropertyListResponseSerializer : AFHTTPResponseSerializer + +- (instancetype)init; + +/** + The property list format. Possible values are described in "NSPropertyListFormat". + */ +@property (nonatomic, assign) NSPropertyListFormat format; + +/** + The property list reading options. Possible values are described in "NSPropertyListMutabilityOptions." + */ +@property (nonatomic, assign) NSPropertyListReadOptions readOptions; + +/** + Creates and returns a property list serializer with a specified format, read options, and write options. + + @param format The property list format. + @param readOptions The property list reading options. + */ ++ (instancetype)serializerWithFormat:(NSPropertyListFormat)format + readOptions:(NSPropertyListReadOptions)readOptions; + +@end + +#pragma mark - + +/** + `AFImageResponseSerializer` is a subclass of `AFHTTPResponseSerializer` that validates and decodes image responses. + + By default, `AFImageResponseSerializer` accepts the following MIME types, which correspond to the image formats supported by UIImage or NSImage: + + - `image/tiff` + - `image/jpeg` + - `image/gif` + - `image/png` + - `image/ico` + - `image/x-icon` + - `image/bmp` + - `image/x-bmp` + - `image/x-xbitmap` + - `image/x-win-bitmap` + */ +@interface AFImageResponseSerializer : AFHTTPResponseSerializer + +#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_WATCH +/** + The scale factor used when interpreting the image data to construct `responseImage`. Specifying a scale factor of 1.0 results in an image whose size matches the pixel-based dimensions of the image. Applying a different scale factor changes the size of the image as reported by the size property. This is set to the value of scale of the main screen by default, which automatically scales images for retina displays, for instance. + */ +@property (nonatomic, assign) CGFloat imageScale; + +/** + Whether to automatically inflate response image data for compressed formats (such as PNG or JPEG). Enabling this can significantly improve drawing performance on iOS when used with `setCompletionBlockWithSuccess:failure:`, as it allows a bitmap representation to be constructed in the background rather than on the main thread. `YES` by default. + */ +@property (nonatomic, assign) BOOL automaticallyInflatesResponseImage; +#endif + +@end + +#pragma mark - + +/** + `AFCompoundSerializer` is a subclass of `AFHTTPResponseSerializer` that delegates the response serialization to the first `AFHTTPResponseSerializer` object that returns an object for `responseObjectForResponse:data:error:`, falling back on the default behavior of `AFHTTPResponseSerializer`. This is useful for supporting multiple potential types and structures of server responses with a single serializer. + */ +@interface AFCompoundResponseSerializer : AFHTTPResponseSerializer + +/** + The component response serializers. + */ +@property (readonly, nonatomic, copy) NSArray > *responseSerializers; + +/** + Creates and returns a compound serializer comprised of the specified response serializers. + + @warning Each response serializer specified must be a subclass of `AFHTTPResponseSerializer`, and response to `-validateResponse:data:error:`. + */ ++ (instancetype)compoundSerializerWithResponseSerializers:(NSArray > *)responseSerializers; + +@end + +///---------------- +/// @name Constants +///---------------- + +/** + ## Error Domains + + The following error domain is predefined. + + - `NSString * const AFURLResponseSerializationErrorDomain` + + ### Constants + + `AFURLResponseSerializationErrorDomain` + AFURLResponseSerializer errors. Error codes for `AFURLResponseSerializationErrorDomain` correspond to codes in `NSURLErrorDomain`. + */ +FOUNDATION_EXPORT NSString * const AFURLResponseSerializationErrorDomain; + +/** + ## User info dictionary keys + + These keys may exist in the user info dictionary, in addition to those defined for NSError. + + - `NSString * const AFNetworkingOperationFailingURLResponseErrorKey` + - `NSString * const AFNetworkingOperationFailingURLResponseDataErrorKey` + + ### Constants + + `AFNetworkingOperationFailingURLResponseErrorKey` + The corresponding value is an `NSURLResponse` containing the response of the operation associated with an error. This key is only present in the `AFURLResponseSerializationErrorDomain`. + + `AFNetworkingOperationFailingURLResponseDataErrorKey` + The corresponding value is an `NSData` containing the original data of the operation associated with an error. This key is only present in the `AFURLResponseSerializationErrorDomain`. + */ +FOUNDATION_EXPORT NSString * const AFNetworkingOperationFailingURLResponseErrorKey; + +FOUNDATION_EXPORT NSString * const AFNetworkingOperationFailingURLResponseDataErrorKey; + +NS_ASSUME_NONNULL_END diff --git a/JQQY/ThirdParty/AFNetworking/AFURLResponseSerialization.m b/JQQY/ThirdParty/AFNetworking/AFURLResponseSerialization.m new file mode 100755 index 0000000000000000000000000000000000000000..5e4679928d82af8797b1b3574a35ebeecc27de11 --- /dev/null +++ b/JQQY/ThirdParty/AFNetworking/AFURLResponseSerialization.m @@ -0,0 +1,805 @@ +// AFURLResponseSerialization.m +// Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) +// +// 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 "AFURLResponseSerialization.h" + +#import + +#if TARGET_OS_IOS +#import +#elif TARGET_OS_WATCH +#import +#elif defined(__MAC_OS_X_VERSION_MIN_REQUIRED) +#import +#endif + +NSString * const AFURLResponseSerializationErrorDomain = @"com.alamofire.error.serialization.response"; +NSString * const AFNetworkingOperationFailingURLResponseErrorKey = @"com.alamofire.serialization.response.error.response"; +NSString * const AFNetworkingOperationFailingURLResponseDataErrorKey = @"com.alamofire.serialization.response.error.data"; + +static NSError * AFErrorWithUnderlyingError(NSError *error, NSError *underlyingError) { + if (!error) { + return underlyingError; + } + + if (!underlyingError || error.userInfo[NSUnderlyingErrorKey]) { + return error; + } + + NSMutableDictionary *mutableUserInfo = [error.userInfo mutableCopy]; + mutableUserInfo[NSUnderlyingErrorKey] = underlyingError; + + return [[NSError alloc] initWithDomain:error.domain code:error.code userInfo:mutableUserInfo]; +} + +static BOOL AFErrorOrUnderlyingErrorHasCodeInDomain(NSError *error, NSInteger code, NSString *domain) { + if ([error.domain isEqualToString:domain] && error.code == code) { + return YES; + } else if (error.userInfo[NSUnderlyingErrorKey]) { + return AFErrorOrUnderlyingErrorHasCodeInDomain(error.userInfo[NSUnderlyingErrorKey], code, domain); + } + + return NO; +} + +static id AFJSONObjectByRemovingKeysWithNullValues(id JSONObject, NSJSONReadingOptions readingOptions) { + if ([JSONObject isKindOfClass:[NSArray class]]) { + NSMutableArray *mutableArray = [NSMutableArray arrayWithCapacity:[(NSArray *)JSONObject count]]; + for (id value in (NSArray *)JSONObject) { + [mutableArray addObject:AFJSONObjectByRemovingKeysWithNullValues(value, readingOptions)]; + } + + return (readingOptions & NSJSONReadingMutableContainers) ? mutableArray : [NSArray arrayWithArray:mutableArray]; + } else if ([JSONObject isKindOfClass:[NSDictionary class]]) { + NSMutableDictionary *mutableDictionary = [NSMutableDictionary dictionaryWithDictionary:JSONObject]; + for (id key in [(NSDictionary *)JSONObject allKeys]) { + id value = (NSDictionary *)JSONObject[key]; + if (!value || [value isEqual:[NSNull null]]) { + [mutableDictionary removeObjectForKey:key]; + } else if ([value isKindOfClass:[NSArray class]] || [value isKindOfClass:[NSDictionary class]]) { + mutableDictionary[key] = AFJSONObjectByRemovingKeysWithNullValues(value, readingOptions); + } + } + + return (readingOptions & NSJSONReadingMutableContainers) ? mutableDictionary : [NSDictionary dictionaryWithDictionary:mutableDictionary]; + } + + return JSONObject; +} + +@implementation AFHTTPResponseSerializer + ++ (instancetype)serializer { + return [[self alloc] init]; +} + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + self.stringEncoding = NSUTF8StringEncoding; + + self.acceptableStatusCodes = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(200, 100)]; + self.acceptableContentTypes = nil; + + return self; +} + +#pragma mark - + +- (BOOL)validateResponse:(NSHTTPURLResponse *)response + data:(NSData *)data + error:(NSError * __autoreleasing *)error +{ + BOOL responseIsValid = YES; + NSError *validationError = nil; + + if (response && [response isKindOfClass:[NSHTTPURLResponse class]]) { + if (self.acceptableContentTypes && ![self.acceptableContentTypes containsObject:[response MIMEType]] && + !([response MIMEType] == nil && [data length] == 0)) { + + if ([data length] > 0 && [response URL]) { + NSMutableDictionary *mutableUserInfo = [@{ + NSLocalizedDescriptionKey: [NSString stringWithFormat:NSLocalizedStringFromTable(@"Request failed: unacceptable content-type: %@", @"AFNetworking", nil), [response MIMEType]], + NSURLErrorFailingURLErrorKey:[response URL], + AFNetworkingOperationFailingURLResponseErrorKey: response, + } mutableCopy]; + if (data) { + mutableUserInfo[AFNetworkingOperationFailingURLResponseDataErrorKey] = data; + } + + validationError = AFErrorWithUnderlyingError([NSError errorWithDomain:AFURLResponseSerializationErrorDomain code:NSURLErrorCannotDecodeContentData userInfo:mutableUserInfo], validationError); + } + + responseIsValid = NO; + } + + if (self.acceptableStatusCodes && ![self.acceptableStatusCodes containsIndex:(NSUInteger)response.statusCode] && [response URL]) { + NSMutableDictionary *mutableUserInfo = [@{ + NSLocalizedDescriptionKey: [NSString stringWithFormat:NSLocalizedStringFromTable(@"Request failed: %@ (%ld)", @"AFNetworking", nil), [NSHTTPURLResponse localizedStringForStatusCode:response.statusCode], (long)response.statusCode], + NSURLErrorFailingURLErrorKey:[response URL], + AFNetworkingOperationFailingURLResponseErrorKey: response, + } mutableCopy]; + + if (data) { + mutableUserInfo[AFNetworkingOperationFailingURLResponseDataErrorKey] = data; + } + + validationError = AFErrorWithUnderlyingError([NSError errorWithDomain:AFURLResponseSerializationErrorDomain code:NSURLErrorBadServerResponse userInfo:mutableUserInfo], validationError); + + responseIsValid = NO; + } + } + + if (error && !responseIsValid) { + *error = validationError; + } + + return responseIsValid; +} + +#pragma mark - AFURLResponseSerialization + +- (id)responseObjectForResponse:(NSURLResponse *)response + data:(NSData *)data + error:(NSError *__autoreleasing *)error +{ + [self validateResponse:(NSHTTPURLResponse *)response data:data error:error]; + + return data; +} + +#pragma mark - NSSecureCoding + ++ (BOOL)supportsSecureCoding { + return YES; +} + +- (instancetype)initWithCoder:(NSCoder *)decoder { + self = [self init]; + if (!self) { + return nil; + } + + self.acceptableStatusCodes = [decoder decodeObjectOfClass:[NSIndexSet class] forKey:NSStringFromSelector(@selector(acceptableStatusCodes))]; + self.acceptableContentTypes = [decoder decodeObjectOfClass:[NSIndexSet class] forKey:NSStringFromSelector(@selector(acceptableContentTypes))]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [coder encodeObject:self.acceptableStatusCodes forKey:NSStringFromSelector(@selector(acceptableStatusCodes))]; + [coder encodeObject:self.acceptableContentTypes forKey:NSStringFromSelector(@selector(acceptableContentTypes))]; +} + +#pragma mark - NSCopying + +- (instancetype)copyWithZone:(NSZone *)zone { + AFHTTPResponseSerializer *serializer = [[[self class] allocWithZone:zone] init]; + serializer.acceptableStatusCodes = [self.acceptableStatusCodes copyWithZone:zone]; + serializer.acceptableContentTypes = [self.acceptableContentTypes copyWithZone:zone]; + + return serializer; +} + +@end + +#pragma mark - + +@implementation AFJSONResponseSerializer + ++ (instancetype)serializer { + return [self serializerWithReadingOptions:(NSJSONReadingOptions)0]; +} + ++ (instancetype)serializerWithReadingOptions:(NSJSONReadingOptions)readingOptions { + AFJSONResponseSerializer *serializer = [[self alloc] init]; + serializer.readingOptions = readingOptions; + + return serializer; +} + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + self.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", nil]; + + return self; +} + +#pragma mark - AFURLResponseSerialization + +- (id)responseObjectForResponse:(NSURLResponse *)response + data:(NSData *)data + error:(NSError *__autoreleasing *)error +{ + if (![self validateResponse:(NSHTTPURLResponse *)response data:data error:error]) { + if (!error || AFErrorOrUnderlyingErrorHasCodeInDomain(*error, NSURLErrorCannotDecodeContentData, AFURLResponseSerializationErrorDomain)) { + return nil; + } + } + + id responseObject = nil; + NSError *serializationError = nil; + // Workaround for behavior of Rails to return a single space for `head :ok` (a workaround for a bug in Safari), which is not interpreted as valid input by NSJSONSerialization. + // See https://github.com/rails/rails/issues/1742 + BOOL isSpace = [data isEqualToData:[NSData dataWithBytes:" " length:1]]; + if (data.length > 0 && !isSpace) { + responseObject = [NSJSONSerialization JSONObjectWithData:data options:self.readingOptions error:&serializationError]; + } else { + return nil; + } + + if (self.removesKeysWithNullValues && responseObject) { + responseObject = AFJSONObjectByRemovingKeysWithNullValues(responseObject, self.readingOptions); + } + + if (error) { + *error = AFErrorWithUnderlyingError(serializationError, *error); + } + + return responseObject; +} + +#pragma mark - NSSecureCoding + +- (instancetype)initWithCoder:(NSCoder *)decoder { + self = [super initWithCoder:decoder]; + if (!self) { + return nil; + } + + self.readingOptions = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(readingOptions))] unsignedIntegerValue]; + self.removesKeysWithNullValues = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(removesKeysWithNullValues))] boolValue]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [super encodeWithCoder:coder]; + + [coder encodeObject:@(self.readingOptions) forKey:NSStringFromSelector(@selector(readingOptions))]; + [coder encodeObject:@(self.removesKeysWithNullValues) forKey:NSStringFromSelector(@selector(removesKeysWithNullValues))]; +} + +#pragma mark - NSCopying + +- (instancetype)copyWithZone:(NSZone *)zone { + AFJSONResponseSerializer *serializer = [[[self class] allocWithZone:zone] init]; + serializer.readingOptions = self.readingOptions; + serializer.removesKeysWithNullValues = self.removesKeysWithNullValues; + + return serializer; +} + +@end + +#pragma mark - + +@implementation AFXMLParserResponseSerializer + ++ (instancetype)serializer { + AFXMLParserResponseSerializer *serializer = [[self alloc] init]; + + return serializer; +} + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + self.acceptableContentTypes = [[NSSet alloc] initWithObjects:@"application/xml", @"text/xml", nil]; + + return self; +} + +#pragma mark - AFURLResponseSerialization + +- (id)responseObjectForResponse:(NSHTTPURLResponse *)response + data:(NSData *)data + error:(NSError *__autoreleasing *)error +{ + if (![self validateResponse:(NSHTTPURLResponse *)response data:data error:error]) { + if (!error || AFErrorOrUnderlyingErrorHasCodeInDomain(*error, NSURLErrorCannotDecodeContentData, AFURLResponseSerializationErrorDomain)) { + return nil; + } + } + + return [[NSXMLParser alloc] initWithData:data]; +} + +@end + +#pragma mark - + +#ifdef __MAC_OS_X_VERSION_MIN_REQUIRED + +@implementation AFXMLDocumentResponseSerializer + ++ (instancetype)serializer { + return [self serializerWithXMLDocumentOptions:0]; +} + ++ (instancetype)serializerWithXMLDocumentOptions:(NSUInteger)mask { + AFXMLDocumentResponseSerializer *serializer = [[self alloc] init]; + serializer.options = mask; + + return serializer; +} + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + self.acceptableContentTypes = [[NSSet alloc] initWithObjects:@"application/xml", @"text/xml", nil]; + + return self; +} + +#pragma mark - AFURLResponseSerialization + +- (id)responseObjectForResponse:(NSURLResponse *)response + data:(NSData *)data + error:(NSError *__autoreleasing *)error +{ + if (![self validateResponse:(NSHTTPURLResponse *)response data:data error:error]) { + if (!error || AFErrorOrUnderlyingErrorHasCodeInDomain(*error, NSURLErrorCannotDecodeContentData, AFURLResponseSerializationErrorDomain)) { + return nil; + } + } + + NSError *serializationError = nil; + NSXMLDocument *document = [[NSXMLDocument alloc] initWithData:data options:self.options error:&serializationError]; + + if (error) { + *error = AFErrorWithUnderlyingError(serializationError, *error); + } + + return document; +} + +#pragma mark - NSSecureCoding + +- (instancetype)initWithCoder:(NSCoder *)decoder { + self = [super initWithCoder:decoder]; + if (!self) { + return nil; + } + + self.options = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(options))] unsignedIntegerValue]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [super encodeWithCoder:coder]; + + [coder encodeObject:@(self.options) forKey:NSStringFromSelector(@selector(options))]; +} + +#pragma mark - NSCopying + +- (instancetype)copyWithZone:(NSZone *)zone { + AFXMLDocumentResponseSerializer *serializer = [[[self class] allocWithZone:zone] init]; + serializer.options = self.options; + + return serializer; +} + +@end + +#endif + +#pragma mark - + +@implementation AFPropertyListResponseSerializer + ++ (instancetype)serializer { + return [self serializerWithFormat:NSPropertyListXMLFormat_v1_0 readOptions:0]; +} + ++ (instancetype)serializerWithFormat:(NSPropertyListFormat)format + readOptions:(NSPropertyListReadOptions)readOptions +{ + AFPropertyListResponseSerializer *serializer = [[self alloc] init]; + serializer.format = format; + serializer.readOptions = readOptions; + + return serializer; +} + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + self.acceptableContentTypes = [[NSSet alloc] initWithObjects:@"application/x-plist", nil]; + + return self; +} + +#pragma mark - AFURLResponseSerialization + +- (id)responseObjectForResponse:(NSURLResponse *)response + data:(NSData *)data + error:(NSError *__autoreleasing *)error +{ + if (![self validateResponse:(NSHTTPURLResponse *)response data:data error:error]) { + if (!error || AFErrorOrUnderlyingErrorHasCodeInDomain(*error, NSURLErrorCannotDecodeContentData, AFURLResponseSerializationErrorDomain)) { + return nil; + } + } + + id responseObject; + NSError *serializationError = nil; + + if (data) { + responseObject = [NSPropertyListSerialization propertyListWithData:data options:self.readOptions format:NULL error:&serializationError]; + } + + if (error) { + *error = AFErrorWithUnderlyingError(serializationError, *error); + } + + return responseObject; +} + +#pragma mark - NSSecureCoding + +- (instancetype)initWithCoder:(NSCoder *)decoder { + self = [super initWithCoder:decoder]; + if (!self) { + return nil; + } + + self.format = (NSPropertyListFormat)[[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(format))] unsignedIntegerValue]; + self.readOptions = [[decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(readOptions))] unsignedIntegerValue]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [super encodeWithCoder:coder]; + + [coder encodeObject:@(self.format) forKey:NSStringFromSelector(@selector(format))]; + [coder encodeObject:@(self.readOptions) forKey:NSStringFromSelector(@selector(readOptions))]; +} + +#pragma mark - NSCopying + +- (instancetype)copyWithZone:(NSZone *)zone { + AFPropertyListResponseSerializer *serializer = [[[self class] allocWithZone:zone] init]; + serializer.format = self.format; + serializer.readOptions = self.readOptions; + + return serializer; +} + +@end + +#pragma mark - + +#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_WATCH +#import +#import + +@interface UIImage (AFNetworkingSafeImageLoading) ++ (UIImage *)af_safeImageWithData:(NSData *)data; +@end + +static NSLock* imageLock = nil; + +@implementation UIImage (AFNetworkingSafeImageLoading) + ++ (UIImage *)af_safeImageWithData:(NSData *)data { + UIImage* image = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + imageLock = [[NSLock alloc] init]; + }); + + [imageLock lock]; + image = [UIImage imageWithData:data]; + [imageLock unlock]; + return image; +} + +@end + +static UIImage * AFImageWithDataAtScale(NSData *data, CGFloat scale) { + UIImage *image = [UIImage af_safeImageWithData:data]; + if (image.images) { + return image; + } + + return [[UIImage alloc] initWithCGImage:[image CGImage] scale:scale orientation:image.imageOrientation]; +} + +static UIImage * AFInflatedImageFromResponseWithDataAtScale(NSHTTPURLResponse *response, NSData *data, CGFloat scale) { + if (!data || [data length] == 0) { + return nil; + } + + CGImageRef imageRef = NULL; + CGDataProviderRef dataProvider = CGDataProviderCreateWithCFData((__bridge CFDataRef)data); + + if ([response.MIMEType isEqualToString:@"image/png"]) { + imageRef = CGImageCreateWithPNGDataProvider(dataProvider, NULL, true, kCGRenderingIntentDefault); + } else if ([response.MIMEType isEqualToString:@"image/jpeg"]) { + imageRef = CGImageCreateWithJPEGDataProvider(dataProvider, NULL, true, kCGRenderingIntentDefault); + + if (imageRef) { + CGColorSpaceRef imageColorSpace = CGImageGetColorSpace(imageRef); + CGColorSpaceModel imageColorSpaceModel = CGColorSpaceGetModel(imageColorSpace); + + // CGImageCreateWithJPEGDataProvider does not properly handle CMKY, so fall back to AFImageWithDataAtScale + if (imageColorSpaceModel == kCGColorSpaceModelCMYK) { + CGImageRelease(imageRef); + imageRef = NULL; + } + } + } + + CGDataProviderRelease(dataProvider); + + UIImage *image = AFImageWithDataAtScale(data, scale); + if (!imageRef) { + if (image.images || !image) { + return image; + } + + imageRef = CGImageCreateCopy([image CGImage]); + if (!imageRef) { + return nil; + } + } + + size_t width = CGImageGetWidth(imageRef); + size_t height = CGImageGetHeight(imageRef); + size_t bitsPerComponent = CGImageGetBitsPerComponent(imageRef); + + if (width * height > 1024 * 1024 || bitsPerComponent > 8) { + CGImageRelease(imageRef); + + return image; + } + + // CGImageGetBytesPerRow() calculates incorrectly in iOS 5.0, so defer to CGBitmapContextCreate + size_t bytesPerRow = 0; + CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); + CGColorSpaceModel colorSpaceModel = CGColorSpaceGetModel(colorSpace); + CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(imageRef); + + if (colorSpaceModel == kCGColorSpaceModelRGB) { + uint32_t alpha = (bitmapInfo & kCGBitmapAlphaInfoMask); +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wassign-enum" + if (alpha == kCGImageAlphaNone) { + bitmapInfo &= ~kCGBitmapAlphaInfoMask; + bitmapInfo |= kCGImageAlphaNoneSkipFirst; + } else if (!(alpha == kCGImageAlphaNoneSkipFirst || alpha == kCGImageAlphaNoneSkipLast)) { + bitmapInfo &= ~kCGBitmapAlphaInfoMask; + bitmapInfo |= kCGImageAlphaPremultipliedFirst; + } +#pragma clang diagnostic pop + } + + CGContextRef context = CGBitmapContextCreate(NULL, width, height, bitsPerComponent, bytesPerRow, colorSpace, bitmapInfo); + + CGColorSpaceRelease(colorSpace); + + if (!context) { + CGImageRelease(imageRef); + + return image; + } + + CGContextDrawImage(context, CGRectMake(0.0f, 0.0f, width, height), imageRef); + CGImageRef inflatedImageRef = CGBitmapContextCreateImage(context); + + CGContextRelease(context); + + UIImage *inflatedImage = [[UIImage alloc] initWithCGImage:inflatedImageRef scale:scale orientation:image.imageOrientation]; + + CGImageRelease(inflatedImageRef); + CGImageRelease(imageRef); + + return inflatedImage; +} +#endif + + +@implementation AFImageResponseSerializer + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + self.acceptableContentTypes = [[NSSet alloc] initWithObjects:@"image/tiff", @"image/jpeg", @"image/gif", @"image/png", @"image/ico", @"image/x-icon", @"image/bmp", @"image/x-bmp", @"image/x-xbitmap", @"image/x-win-bitmap", nil]; + +#if TARGET_OS_IOS || TARGET_OS_TV + self.imageScale = [[UIScreen mainScreen] scale]; + self.automaticallyInflatesResponseImage = YES; +#elif TARGET_OS_WATCH + self.imageScale = [[WKInterfaceDevice currentDevice] screenScale]; + self.automaticallyInflatesResponseImage = YES; +#endif + + return self; +} + +#pragma mark - AFURLResponseSerializer + +- (id)responseObjectForResponse:(NSURLResponse *)response + data:(NSData *)data + error:(NSError *__autoreleasing *)error +{ + if (![self validateResponse:(NSHTTPURLResponse *)response data:data error:error]) { + if (!error || AFErrorOrUnderlyingErrorHasCodeInDomain(*error, NSURLErrorCannotDecodeContentData, AFURLResponseSerializationErrorDomain)) { + return nil; + } + } + +#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_WATCH + if (self.automaticallyInflatesResponseImage) { + return AFInflatedImageFromResponseWithDataAtScale((NSHTTPURLResponse *)response, data, self.imageScale); + } else { + return AFImageWithDataAtScale(data, self.imageScale); + } +#else + // Ensure that the image is set to it's correct pixel width and height + NSBitmapImageRep *bitimage = [[NSBitmapImageRep alloc] initWithData:data]; + NSImage *image = [[NSImage alloc] initWithSize:NSMakeSize([bitimage pixelsWide], [bitimage pixelsHigh])]; + [image addRepresentation:bitimage]; + + return image; +#endif + + return nil; +} + +#pragma mark - NSSecureCoding + +- (instancetype)initWithCoder:(NSCoder *)decoder { + self = [super initWithCoder:decoder]; + if (!self) { + return nil; + } + +#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_WATCH + NSNumber *imageScale = [decoder decodeObjectOfClass:[NSNumber class] forKey:NSStringFromSelector(@selector(imageScale))]; +#if CGFLOAT_IS_DOUBLE + self.imageScale = [imageScale doubleValue]; +#else + self.imageScale = [imageScale floatValue]; +#endif + + self.automaticallyInflatesResponseImage = [decoder decodeBoolForKey:NSStringFromSelector(@selector(automaticallyInflatesResponseImage))]; +#endif + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [super encodeWithCoder:coder]; + +#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_WATCH + [coder encodeObject:@(self.imageScale) forKey:NSStringFromSelector(@selector(imageScale))]; + [coder encodeBool:self.automaticallyInflatesResponseImage forKey:NSStringFromSelector(@selector(automaticallyInflatesResponseImage))]; +#endif +} + +#pragma mark - NSCopying + +- (instancetype)copyWithZone:(NSZone *)zone { + AFImageResponseSerializer *serializer = [[[self class] allocWithZone:zone] init]; + +#if TARGET_OS_IOS || TARGET_OS_TV || TARGET_OS_WATCH + serializer.imageScale = self.imageScale; + serializer.automaticallyInflatesResponseImage = self.automaticallyInflatesResponseImage; +#endif + + return serializer; +} + +@end + +#pragma mark - + +@interface AFCompoundResponseSerializer () +@property (readwrite, nonatomic, copy) NSArray *responseSerializers; +@end + +@implementation AFCompoundResponseSerializer + ++ (instancetype)compoundSerializerWithResponseSerializers:(NSArray *)responseSerializers { + AFCompoundResponseSerializer *serializer = [[self alloc] init]; + serializer.responseSerializers = responseSerializers; + + return serializer; +} + +#pragma mark - AFURLResponseSerialization + +- (id)responseObjectForResponse:(NSURLResponse *)response + data:(NSData *)data + error:(NSError *__autoreleasing *)error +{ + for (id serializer in self.responseSerializers) { + if (![serializer isKindOfClass:[AFHTTPResponseSerializer class]]) { + continue; + } + + NSError *serializerError = nil; + id responseObject = [serializer responseObjectForResponse:response data:data error:&serializerError]; + if (responseObject) { + if (error) { + *error = AFErrorWithUnderlyingError(serializerError, *error); + } + + return responseObject; + } + } + + return [super responseObjectForResponse:response data:data error:error]; +} + +#pragma mark - NSSecureCoding + +- (instancetype)initWithCoder:(NSCoder *)decoder { + self = [super initWithCoder:decoder]; + if (!self) { + return nil; + } + + self.responseSerializers = [decoder decodeObjectOfClass:[NSArray class] forKey:NSStringFromSelector(@selector(responseSerializers))]; + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [super encodeWithCoder:coder]; + + [coder encodeObject:self.responseSerializers forKey:NSStringFromSelector(@selector(responseSerializers))]; +} + +#pragma mark - NSCopying + +- (instancetype)copyWithZone:(NSZone *)zone { + AFCompoundResponseSerializer *serializer = [[[self class] allocWithZone:zone] init]; + serializer.responseSerializers = self.responseSerializers; + + return serializer; +} + +@end diff --git a/JQQY/ThirdParty/AFNetworking/AFURLSessionManager.h b/JQQY/ThirdParty/AFNetworking/AFURLSessionManager.h new file mode 100755 index 0000000000000000000000000000000000000000..3824736a78574e343cb76ee0cf54363652a19c0e --- /dev/null +++ b/JQQY/ThirdParty/AFNetworking/AFURLSessionManager.h @@ -0,0 +1,500 @@ +// AFURLSessionManager.h +// Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) +// +// 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 "AFURLResponseSerialization.h" +#import "AFURLRequestSerialization.h" +#import "AFSecurityPolicy.h" +#if !TARGET_OS_WATCH +#import "AFNetworkReachabilityManager.h" +#endif + +/** + `AFURLSessionManager` creates and manages an `NSURLSession` object based on a specified `NSURLSessionConfiguration` object, which conforms to ``, ``, ``, and ``. + + ## Subclassing Notes + + This is the base class for `AFHTTPSessionManager`, which adds functionality specific to making HTTP requests. If you are looking to extend `AFURLSessionManager` specifically for HTTP, consider subclassing `AFHTTPSessionManager` instead. + + ## NSURLSession & NSURLSessionTask Delegate Methods + + `AFURLSessionManager` implements the following delegate methods: + + ### `NSURLSessionDelegate` + + - `URLSession:didBecomeInvalidWithError:` + - `URLSession:didReceiveChallenge:completionHandler:` + - `URLSessionDidFinishEventsForBackgroundURLSession:` + + ### `NSURLSessionTaskDelegate` + + - `URLSession:willPerformHTTPRedirection:newRequest:completionHandler:` + - `URLSession:task:didReceiveChallenge:completionHandler:` + - `URLSession:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:` + - `URLSession:task:needNewBodyStream:` + - `URLSession:task:didCompleteWithError:` + + ### `NSURLSessionDataDelegate` + + - `URLSession:dataTask:didReceiveResponse:completionHandler:` + - `URLSession:dataTask:didBecomeDownloadTask:` + - `URLSession:dataTask:didReceiveData:` + - `URLSession:dataTask:willCacheResponse:completionHandler:` + + ### `NSURLSessionDownloadDelegate` + + - `URLSession:downloadTask:didFinishDownloadingToURL:` + - `URLSession:downloadTask:didWriteData:totalBytesWritten:totalBytesWritten:totalBytesExpectedToWrite:` + - `URLSession:downloadTask:didResumeAtOffset:expectedTotalBytes:` + + If any of these methods are overridden in a subclass, they _must_ call the `super` implementation first. + + ## Network Reachability Monitoring + + Network reachability status and change monitoring is available through the `reachabilityManager` property. Applications may choose to monitor network reachability conditions in order to prevent or suspend any outbound requests. See `AFNetworkReachabilityManager` for more details. + + ## NSCoding Caveats + + - Encoded managers do not include any block properties. Be sure to set delegate callback blocks when using `-initWithCoder:` or `NSKeyedUnarchiver`. + + ## NSCopying Caveats + + - `-copy` and `-copyWithZone:` return a new manager with a new `NSURLSession` created from the configuration of the original. + - Operation copies do not include any delegate callback blocks, as they often strongly captures a reference to `self`, which would otherwise have the unintuitive side-effect of pointing to the _original_ session manager when copied. + + @warning Managers for background sessions must be owned for the duration of their use. This can be accomplished by creating an application-wide or shared singleton instance. + */ + +NS_ASSUME_NONNULL_BEGIN + +@interface AFURLSessionManager : NSObject + +/** + The managed session. + */ +@property (readonly, nonatomic, strong) NSURLSession *session; + +/** + The operation queue on which delegate callbacks are run. + */ +@property (readonly, nonatomic, strong) NSOperationQueue *operationQueue; + +/** + Responses sent from the server in data tasks created with `dataTaskWithRequest:success:failure:` and run using the `GET` / `POST` / et al. convenience methods are automatically validated and serialized by the response serializer. By default, this property is set to an instance of `AFJSONResponseSerializer`. + + @warning `responseSerializer` must not be `nil`. + */ +@property (nonatomic, strong) id responseSerializer; + +///------------------------------- +/// @name Managing Security Policy +///------------------------------- + +/** + The security policy used by created session to evaluate server trust for secure connections. `AFURLSessionManager` uses the `defaultPolicy` unless otherwise specified. + */ +@property (nonatomic, strong) AFSecurityPolicy *securityPolicy; + +#if !TARGET_OS_WATCH +///-------------------------------------- +/// @name Monitoring Network Reachability +///-------------------------------------- + +/** + The network reachability manager. `AFURLSessionManager` uses the `sharedManager` by default. + */ +@property (readwrite, nonatomic, strong) AFNetworkReachabilityManager *reachabilityManager; +#endif + +///---------------------------- +/// @name Getting Session Tasks +///---------------------------- + +/** + The data, upload, and download tasks currently run by the managed session. + */ +@property (readonly, nonatomic, strong) NSArray *tasks; + +/** + The data tasks currently run by the managed session. + */ +@property (readonly, nonatomic, strong) NSArray *dataTasks; + +/** + The upload tasks currently run by the managed session. + */ +@property (readonly, nonatomic, strong) NSArray *uploadTasks; + +/** + The download tasks currently run by the managed session. + */ +@property (readonly, nonatomic, strong) NSArray *downloadTasks; + +///------------------------------- +/// @name Managing Callback Queues +///------------------------------- + +/** + The dispatch queue for `completionBlock`. If `NULL` (default), the main queue is used. + */ +@property (nonatomic, strong, nullable) dispatch_queue_t completionQueue; + +/** + The dispatch group for `completionBlock`. If `NULL` (default), a private dispatch group is used. + */ +@property (nonatomic, strong, nullable) dispatch_group_t completionGroup; + +///--------------------------------- +/// @name Working Around System Bugs +///--------------------------------- + +/** + Whether to attempt to retry creation of upload tasks for background sessions when initial call returns `nil`. `NO` by default. + + @bug As of iOS 7.0, there is a bug where upload tasks created for background tasks are sometimes `nil`. As a workaround, if this property is `YES`, AFNetworking will follow Apple's recommendation to try creating the task again. + + @see https://github.com/AFNetworking/AFNetworking/issues/1675 + */ +@property (nonatomic, assign) BOOL attemptsToRecreateUploadTasksForBackgroundSessions; + +///--------------------- +/// @name Initialization +///--------------------- + +/** + Creates and returns a manager for a session created with the specified configuration. This is the designated initializer. + + @param configuration The configuration used to create the managed session. + + @return A manager for a newly-created session. + */ +- (instancetype)initWithSessionConfiguration:(nullable NSURLSessionConfiguration *)configuration NS_DESIGNATED_INITIALIZER; + +/** + Invalidates the managed session, optionally canceling pending tasks. + + @param cancelPendingTasks Whether or not to cancel pending tasks. + */ +- (void)invalidateSessionCancelingTasks:(BOOL)cancelPendingTasks; + +///------------------------- +/// @name Running Data Tasks +///------------------------- + +/** + Creates an `NSURLSessionDataTask` with the specified request. + + @param request The HTTP request for the request. + @param completionHandler A block object to be executed when the task finishes. This block has no return value and takes three arguments: the server response, the response object created by that serializer, and the error that occurred, if any. + */ +- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request + completionHandler:(nullable void (^)(NSURLResponse *response, id _Nullable responseObject, NSError * _Nullable error))completionHandler DEPRECATED_ATTRIBUTE; + +/** + Creates an `NSURLSessionDataTask` with the specified request. + + @param request The HTTP request for the request. + @param uploadProgressBlock A block object to be executed when the upload progress is updated. Note this block is called on the session queue, not the main queue. + @param downloadProgressBlock A block object to be executed when the download progress is updated. Note this block is called on the session queue, not the main queue. + @param completionHandler A block object to be executed when the task finishes. This block has no return value and takes three arguments: the server response, the response object created by that serializer, and the error that occurred, if any. + */ +- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request + uploadProgress:(nullable void (^)(NSProgress *uploadProgress))uploadProgressBlock + downloadProgress:(nullable void (^)(NSProgress *downloadProgress))downloadProgressBlock + completionHandler:(nullable void (^)(NSURLResponse *response, id _Nullable responseObject, NSError * _Nullable error))completionHandler; + +///--------------------------- +/// @name Running Upload Tasks +///--------------------------- + +/** + Creates an `NSURLSessionUploadTask` with the specified request for a local file. + + @param request The HTTP request for the request. + @param fileURL A URL to the local file to be uploaded. + @param uploadProgressBlock A block object to be executed when the upload progress is updated. Note this block is called on the session queue, not the main queue. + @param completionHandler A block object to be executed when the task finishes. This block has no return value and takes three arguments: the server response, the response object created by that serializer, and the error that occurred, if any. + + @see `attemptsToRecreateUploadTasksForBackgroundSessions` + */ +- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request + fromFile:(NSURL *)fileURL + progress:(nullable void (^)(NSProgress *uploadProgress))uploadProgressBlock + completionHandler:(nullable void (^)(NSURLResponse *response, id _Nullable responseObject, NSError * _Nullable error))completionHandler; + +/** + Creates an `NSURLSessionUploadTask` with the specified request for an HTTP body. + + @param request The HTTP request for the request. + @param bodyData A data object containing the HTTP body to be uploaded. + @param uploadProgressBlock A block object to be executed when the upload progress is updated. Note this block is called on the session queue, not the main queue. + @param completionHandler A block object to be executed when the task finishes. This block has no return value and takes three arguments: the server response, the response object created by that serializer, and the error that occurred, if any. + */ +- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request + fromData:(nullable NSData *)bodyData + progress:(nullable void (^)(NSProgress *uploadProgress))uploadProgressBlock + completionHandler:(nullable void (^)(NSURLResponse *response, id _Nullable responseObject, NSError * _Nullable error))completionHandler; + +/** + Creates an `NSURLSessionUploadTask` with the specified streaming request. + + @param request The HTTP request for the request. + @param uploadProgressBlock A block object to be executed when the upload progress is updated. Note this block is called on the session queue, not the main queue. + @param completionHandler A block object to be executed when the task finishes. This block has no return value and takes three arguments: the server response, the response object created by that serializer, and the error that occurred, if any. + */ +- (NSURLSessionUploadTask *)uploadTaskWithStreamedRequest:(NSURLRequest *)request + progress:(nullable void (^)(NSProgress *uploadProgress))uploadProgressBlock + completionHandler:(nullable void (^)(NSURLResponse *response, id _Nullable responseObject, NSError * _Nullable error))completionHandler; + +///----------------------------- +/// @name Running Download Tasks +///----------------------------- + +/** + Creates an `NSURLSessionDownloadTask` with the specified request. + + @param request The HTTP request for the request. + @param downloadProgressBlock A block object to be executed when the download progress is updated. Note this block is called on the session queue, not the main queue. + @param destination A block object to be executed in order to determine the destination of the downloaded file. This block takes two arguments, the target path & the server response, and returns the desired file URL of the resulting download. The temporary file used during the download will be automatically deleted after being moved to the returned URL. + @param completionHandler A block to be executed when a task finishes. This block has no return value and takes three arguments: the server response, the path of the downloaded file, and the error describing the network or parsing error that occurred, if any. + + @warning If using a background `NSURLSessionConfiguration` on iOS, these blocks will be lost when the app is terminated. Background sessions may prefer to use `-setDownloadTaskDidFinishDownloadingBlock:` to specify the URL for saving the downloaded file, rather than the destination block of this method. + */ +- (NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request + progress:(nullable void (^)(NSProgress *downloadProgress))downloadProgressBlock + destination:(nullable NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination + completionHandler:(nullable void (^)(NSURLResponse *response, NSURL * _Nullable filePath, NSError * _Nullable error))completionHandler; + +/** + Creates an `NSURLSessionDownloadTask` with the specified resume data. + + @param resumeData The data used to resume downloading. + @param downloadProgressBlock A block object to be executed when the download progress is updated. Note this block is called on the session queue, not the main queue. + @param destination A block object to be executed in order to determine the destination of the downloaded file. This block takes two arguments, the target path & the server response, and returns the desired file URL of the resulting download. The temporary file used during the download will be automatically deleted after being moved to the returned URL. + @param completionHandler A block to be executed when a task finishes. This block has no return value and takes three arguments: the server response, the path of the downloaded file, and the error describing the network or parsing error that occurred, if any. + */ +- (NSURLSessionDownloadTask *)downloadTaskWithResumeData:(NSData *)resumeData + progress:(nullable void (^)(NSProgress *downloadProgress))downloadProgressBlock + destination:(nullable NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination + completionHandler:(nullable void (^)(NSURLResponse *response, NSURL * _Nullable filePath, NSError * _Nullable error))completionHandler; + +///--------------------------------- +/// @name Getting Progress for Tasks +///--------------------------------- + +/** + Returns the upload progress of the specified task. + + @param task The session task. Must not be `nil`. + + @return An `NSProgress` object reporting the upload progress of a task, or `nil` if the progress is unavailable. + */ +- (nullable NSProgress *)uploadProgressForTask:(NSURLSessionTask *)task; + +/** + Returns the download progress of the specified task. + + @param task The session task. Must not be `nil`. + + @return An `NSProgress` object reporting the download progress of a task, or `nil` if the progress is unavailable. + */ +- (nullable NSProgress *)downloadProgressForTask:(NSURLSessionTask *)task; + +///----------------------------------------- +/// @name Setting Session Delegate Callbacks +///----------------------------------------- + +/** + Sets a block to be executed when the managed session becomes invalid, as handled by the `NSURLSessionDelegate` method `URLSession:didBecomeInvalidWithError:`. + + @param block A block object to be executed when the managed session becomes invalid. The block has no return value, and takes two arguments: the session, and the error related to the cause of invalidation. + */ +- (void)setSessionDidBecomeInvalidBlock:(nullable void (^)(NSURLSession *session, NSError *error))block; + +/** + Sets a block to be executed when a connection level authentication challenge has occurred, as handled by the `NSURLSessionDelegate` method `URLSession:didReceiveChallenge:completionHandler:`. + + @param block A block object to be executed when a connection level authentication challenge has occurred. The block returns the disposition of the authentication challenge, and takes three arguments: the session, the authentication challenge, and a pointer to the credential that should be used to resolve the challenge. + */ +- (void)setSessionDidReceiveAuthenticationChallengeBlock:(nullable NSURLSessionAuthChallengeDisposition (^)(NSURLSession *session, NSURLAuthenticationChallenge *challenge, NSURLCredential * _Nullable __autoreleasing * _Nullable credential))block; + +///-------------------------------------- +/// @name Setting Task Delegate Callbacks +///-------------------------------------- + +/** + Sets a block to be executed when a task requires a new request body stream to send to the remote server, as handled by the `NSURLSessionTaskDelegate` method `URLSession:task:needNewBodyStream:`. + + @param block A block object to be executed when a task requires a new request body stream. + */ +- (void)setTaskNeedNewBodyStreamBlock:(nullable NSInputStream * (^)(NSURLSession *session, NSURLSessionTask *task))block; + +/** + Sets a block to be executed when an HTTP request is attempting to perform a redirection to a different URL, as handled by the `NSURLSessionTaskDelegate` method `URLSession:willPerformHTTPRedirection:newRequest:completionHandler:`. + + @param block A block object to be executed when an HTTP request is attempting to perform a redirection to a different URL. The block returns the request to be made for the redirection, and takes four arguments: the session, the task, the redirection response, and the request corresponding to the redirection response. + */ +- (void)setTaskWillPerformHTTPRedirectionBlock:(nullable NSURLRequest * (^)(NSURLSession *session, NSURLSessionTask *task, NSURLResponse *response, NSURLRequest *request))block; + +/** + Sets a block to be executed when a session task has received a request specific authentication challenge, as handled by the `NSURLSessionTaskDelegate` method `URLSession:task:didReceiveChallenge:completionHandler:`. + + @param block A block object to be executed when a session task has received a request specific authentication challenge. The block returns the disposition of the authentication challenge, and takes four arguments: the session, the task, the authentication challenge, and a pointer to the credential that should be used to resolve the challenge. + */ +- (void)setTaskDidReceiveAuthenticationChallengeBlock:(nullable NSURLSessionAuthChallengeDisposition (^)(NSURLSession *session, NSURLSessionTask *task, NSURLAuthenticationChallenge *challenge, NSURLCredential * _Nullable __autoreleasing * _Nullable credential))block; + +/** + Sets a block to be executed periodically to track upload progress, as handled by the `NSURLSessionTaskDelegate` method `URLSession:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:`. + + @param block A block object to be called when an undetermined number of bytes have been uploaded to the server. This block has no return value and takes five arguments: the session, the task, the number of bytes written since the last time the upload progress block was called, the total bytes written, and the total bytes expected to be written during the request, as initially determined by the length of the HTTP body. This block may be called multiple times, and will execute on the main thread. + */ +- (void)setTaskDidSendBodyDataBlock:(nullable void (^)(NSURLSession *session, NSURLSessionTask *task, int64_t bytesSent, int64_t totalBytesSent, int64_t totalBytesExpectedToSend))block; + +/** + Sets a block to be executed as the last message related to a specific task, as handled by the `NSURLSessionTaskDelegate` method `URLSession:task:didCompleteWithError:`. + + @param block A block object to be executed when a session task is completed. The block has no return value, and takes three arguments: the session, the task, and any error that occurred in the process of executing the task. + */ +- (void)setTaskDidCompleteBlock:(nullable void (^)(NSURLSession *session, NSURLSessionTask *task, NSError * _Nullable error))block; + +///------------------------------------------- +/// @name Setting Data Task Delegate Callbacks +///------------------------------------------- + +/** + Sets a block to be executed when a data task has received a response, as handled by the `NSURLSessionDataDelegate` method `URLSession:dataTask:didReceiveResponse:completionHandler:`. + + @param block A block object to be executed when a data task has received a response. The block returns the disposition of the session response, and takes three arguments: the session, the data task, and the received response. + */ +- (void)setDataTaskDidReceiveResponseBlock:(nullable NSURLSessionResponseDisposition (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLResponse *response))block; + +/** + Sets a block to be executed when a data task has become a download task, as handled by the `NSURLSessionDataDelegate` method `URLSession:dataTask:didBecomeDownloadTask:`. + + @param block A block object to be executed when a data task has become a download task. The block has no return value, and takes three arguments: the session, the data task, and the download task it has become. + */ +- (void)setDataTaskDidBecomeDownloadTaskBlock:(nullable void (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLSessionDownloadTask *downloadTask))block; + +/** + Sets a block to be executed when a data task receives data, as handled by the `NSURLSessionDataDelegate` method `URLSession:dataTask:didReceiveData:`. + + @param block A block object to be called when an undetermined number of bytes have been downloaded from the server. This block has no return value and takes three arguments: the session, the data task, and the data received. This block may be called multiple times, and will execute on the session manager operation queue. + */ +- (void)setDataTaskDidReceiveDataBlock:(nullable void (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSData *data))block; + +/** + Sets a block to be executed to determine the caching behavior of a data task, as handled by the `NSURLSessionDataDelegate` method `URLSession:dataTask:willCacheResponse:completionHandler:`. + + @param block A block object to be executed to determine the caching behavior of a data task. The block returns the response to cache, and takes three arguments: the session, the data task, and the proposed cached URL response. + */ +- (void)setDataTaskWillCacheResponseBlock:(nullable NSCachedURLResponse * (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSCachedURLResponse *proposedResponse))block; + +/** + Sets a block to be executed once all messages enqueued for a session have been delivered, as handled by the `NSURLSessionDataDelegate` method `URLSessionDidFinishEventsForBackgroundURLSession:`. + + @param block A block object to be executed once all messages enqueued for a session have been delivered. The block has no return value and takes a single argument: the session. + */ +- (void)setDidFinishEventsForBackgroundURLSessionBlock:(nullable void (^)(NSURLSession *session))block; + +///----------------------------------------------- +/// @name Setting Download Task Delegate Callbacks +///----------------------------------------------- + +/** + Sets a block to be executed when a download task has completed a download, as handled by the `NSURLSessionDownloadDelegate` method `URLSession:downloadTask:didFinishDownloadingToURL:`. + + @param block A block object to be executed when a download task has completed. The block returns the URL the download should be moved to, and takes three arguments: the session, the download task, and the temporary location of the downloaded file. If the file manager encounters an error while attempting to move the temporary file to the destination, an `AFURLSessionDownloadTaskDidFailToMoveFileNotification` will be posted, with the download task as its object, and the user info of the error. + */ +- (void)setDownloadTaskDidFinishDownloadingBlock:(nullable NSURL * _Nullable (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, NSURL *location))block; + +/** + Sets a block to be executed periodically to track download progress, as handled by the `NSURLSessionDownloadDelegate` method `URLSession:downloadTask:didWriteData:totalBytesWritten:totalBytesWritten:totalBytesExpectedToWrite:`. + + @param block A block object to be called when an undetermined number of bytes have been downloaded from the server. This block has no return value and takes five arguments: the session, the download task, the number of bytes read since the last time the download progress block was called, the total bytes read, and the total bytes expected to be read during the request, as initially determined by the expected content size of the `NSHTTPURLResponse` object. This block may be called multiple times, and will execute on the session manager operation queue. + */ +- (void)setDownloadTaskDidWriteDataBlock:(nullable void (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t bytesWritten, int64_t totalBytesWritten, int64_t totalBytesExpectedToWrite))block; + +/** + Sets a block to be executed when a download task has been resumed, as handled by the `NSURLSessionDownloadDelegate` method `URLSession:downloadTask:didResumeAtOffset:expectedTotalBytes:`. + + @param block A block object to be executed when a download task has been resumed. The block has no return value and takes four arguments: the session, the download task, the file offset of the resumed download, and the total number of bytes expected to be downloaded. + */ +- (void)setDownloadTaskDidResumeBlock:(nullable void (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t fileOffset, int64_t expectedTotalBytes))block; + +@end + +///-------------------- +/// @name Notifications +///-------------------- + +/** + Posted when a task resumes. + */ +FOUNDATION_EXPORT NSString * const AFNetworkingTaskDidResumeNotification; + +/** + Posted when a task finishes executing. Includes a userInfo dictionary with additional information about the task. + */ +FOUNDATION_EXPORT NSString * const AFNetworkingTaskDidCompleteNotification; + +/** + Posted when a task suspends its execution. + */ +FOUNDATION_EXPORT NSString * const AFNetworkingTaskDidSuspendNotification; + +/** + Posted when a session is invalidated. + */ +FOUNDATION_EXPORT NSString * const AFURLSessionDidInvalidateNotification; + +/** + Posted when a session download task encountered an error when moving the temporary download file to a specified destination. + */ +FOUNDATION_EXPORT NSString * const AFURLSessionDownloadTaskDidFailToMoveFileNotification; + +/** + The raw response data of the task. Included in the userInfo dictionary of the `AFNetworkingTaskDidCompleteNotification` if response data exists for the task. + */ +FOUNDATION_EXPORT NSString * const AFNetworkingTaskDidCompleteResponseDataKey; + +/** + The serialized response object of the task. Included in the userInfo dictionary of the `AFNetworkingTaskDidCompleteNotification` if the response was serialized. + */ +FOUNDATION_EXPORT NSString * const AFNetworkingTaskDidCompleteSerializedResponseKey; + +/** + The response serializer used to serialize the response. Included in the userInfo dictionary of the `AFNetworkingTaskDidCompleteNotification` if the task has an associated response serializer. + */ +FOUNDATION_EXPORT NSString * const AFNetworkingTaskDidCompleteResponseSerializerKey; + +/** + The file path associated with the download task. Included in the userInfo dictionary of the `AFNetworkingTaskDidCompleteNotification` if an the response data has been stored directly to disk. + */ +FOUNDATION_EXPORT NSString * const AFNetworkingTaskDidCompleteAssetPathKey; + +/** + Any error associated with the task, or the serialization of the response. Included in the userInfo dictionary of the `AFNetworkingTaskDidCompleteNotification` if an error exists. + */ +FOUNDATION_EXPORT NSString * const AFNetworkingTaskDidCompleteErrorKey; + +NS_ASSUME_NONNULL_END diff --git a/JQQY/ThirdParty/AFNetworking/AFURLSessionManager.m b/JQQY/ThirdParty/AFNetworking/AFURLSessionManager.m new file mode 100755 index 0000000000000000000000000000000000000000..ef52968b359552af6d907320602fd3b490bcf1c4 --- /dev/null +++ b/JQQY/ThirdParty/AFNetworking/AFURLSessionManager.m @@ -0,0 +1,1239 @@ +// AFURLSessionManager.m +// Copyright (c) 2011–2016 Alamofire Software Foundation ( http://alamofire.org/ ) +// +// 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 "AFURLSessionManager.h" +#import + +#ifndef NSFoundationVersionNumber_iOS_8_0 +#define NSFoundationVersionNumber_With_Fixed_5871104061079552_bug 1140.11 +#else +#define NSFoundationVersionNumber_With_Fixed_5871104061079552_bug NSFoundationVersionNumber_iOS_8_0 +#endif + +static dispatch_queue_t url_session_manager_creation_queue() { + static dispatch_queue_t af_url_session_manager_creation_queue; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + af_url_session_manager_creation_queue = dispatch_queue_create("com.alamofire.networking.session.manager.creation", DISPATCH_QUEUE_SERIAL); + }); + + return af_url_session_manager_creation_queue; +} + +static void url_session_manager_create_task_safely(dispatch_block_t block) { + if (NSFoundationVersionNumber < NSFoundationVersionNumber_With_Fixed_5871104061079552_bug) { + // Fix of bug + // Open Radar:http://openradar.appspot.com/radar?id=5871104061079552 (status: Fixed in iOS8) + // Issue about:https://github.com/AFNetworking/AFNetworking/issues/2093 + dispatch_sync(url_session_manager_creation_queue(), block); + } else { + block(); + } +} + +static dispatch_queue_t url_session_manager_processing_queue() { + static dispatch_queue_t af_url_session_manager_processing_queue; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + af_url_session_manager_processing_queue = dispatch_queue_create("com.alamofire.networking.session.manager.processing", DISPATCH_QUEUE_CONCURRENT); + }); + + return af_url_session_manager_processing_queue; +} + +static dispatch_group_t url_session_manager_completion_group() { + static dispatch_group_t af_url_session_manager_completion_group; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + af_url_session_manager_completion_group = dispatch_group_create(); + }); + + return af_url_session_manager_completion_group; +} + +NSString * const AFNetworkingTaskDidResumeNotification = @"com.alamofire.networking.task.resume"; +NSString * const AFNetworkingTaskDidCompleteNotification = @"com.alamofire.networking.task.complete"; +NSString * const AFNetworkingTaskDidSuspendNotification = @"com.alamofire.networking.task.suspend"; +NSString * const AFURLSessionDidInvalidateNotification = @"com.alamofire.networking.session.invalidate"; +NSString * const AFURLSessionDownloadTaskDidFailToMoveFileNotification = @"com.alamofire.networking.session.download.file-manager-error"; + +NSString * const AFNetworkingTaskDidCompleteSerializedResponseKey = @"com.alamofire.networking.task.complete.serializedresponse"; +NSString * const AFNetworkingTaskDidCompleteResponseSerializerKey = @"com.alamofire.networking.task.complete.responseserializer"; +NSString * const AFNetworkingTaskDidCompleteResponseDataKey = @"com.alamofire.networking.complete.finish.responsedata"; +NSString * const AFNetworkingTaskDidCompleteErrorKey = @"com.alamofire.networking.task.complete.error"; +NSString * const AFNetworkingTaskDidCompleteAssetPathKey = @"com.alamofire.networking.task.complete.assetpath"; + +static NSString * const AFURLSessionManagerLockName = @"com.alamofire.networking.session.manager.lock"; + +static NSUInteger const AFMaximumNumberOfAttemptsToRecreateBackgroundSessionUploadTask = 3; + +typedef void (^AFURLSessionDidBecomeInvalidBlock)(NSURLSession *session, NSError *error); +typedef NSURLSessionAuthChallengeDisposition (^AFURLSessionDidReceiveAuthenticationChallengeBlock)(NSURLSession *session, NSURLAuthenticationChallenge *challenge, NSURLCredential * __autoreleasing *credential); + +typedef NSURLRequest * (^AFURLSessionTaskWillPerformHTTPRedirectionBlock)(NSURLSession *session, NSURLSessionTask *task, NSURLResponse *response, NSURLRequest *request); +typedef NSURLSessionAuthChallengeDisposition (^AFURLSessionTaskDidReceiveAuthenticationChallengeBlock)(NSURLSession *session, NSURLSessionTask *task, NSURLAuthenticationChallenge *challenge, NSURLCredential * __autoreleasing *credential); +typedef void (^AFURLSessionDidFinishEventsForBackgroundURLSessionBlock)(NSURLSession *session); + +typedef NSInputStream * (^AFURLSessionTaskNeedNewBodyStreamBlock)(NSURLSession *session, NSURLSessionTask *task); +typedef void (^AFURLSessionTaskDidSendBodyDataBlock)(NSURLSession *session, NSURLSessionTask *task, int64_t bytesSent, int64_t totalBytesSent, int64_t totalBytesExpectedToSend); +typedef void (^AFURLSessionTaskDidCompleteBlock)(NSURLSession *session, NSURLSessionTask *task, NSError *error); + +typedef NSURLSessionResponseDisposition (^AFURLSessionDataTaskDidReceiveResponseBlock)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLResponse *response); +typedef void (^AFURLSessionDataTaskDidBecomeDownloadTaskBlock)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLSessionDownloadTask *downloadTask); +typedef void (^AFURLSessionDataTaskDidReceiveDataBlock)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSData *data); +typedef NSCachedURLResponse * (^AFURLSessionDataTaskWillCacheResponseBlock)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSCachedURLResponse *proposedResponse); + +typedef NSURL * (^AFURLSessionDownloadTaskDidFinishDownloadingBlock)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, NSURL *location); +typedef void (^AFURLSessionDownloadTaskDidWriteDataBlock)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t bytesWritten, int64_t totalBytesWritten, int64_t totalBytesExpectedToWrite); +typedef void (^AFURLSessionDownloadTaskDidResumeBlock)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t fileOffset, int64_t expectedTotalBytes); +typedef void (^AFURLSessionTaskProgressBlock)(NSProgress *); + +typedef void (^AFURLSessionTaskCompletionHandler)(NSURLResponse *response, id responseObject, NSError *error); + + +#pragma mark - + +@interface AFURLSessionManagerTaskDelegate : NSObject +@property (nonatomic, weak) AFURLSessionManager *manager; +@property (nonatomic, strong) NSMutableData *mutableData; +@property (nonatomic, strong) NSProgress *uploadProgress; +@property (nonatomic, strong) NSProgress *downloadProgress; +@property (nonatomic, copy) NSURL *downloadFileURL; +@property (nonatomic, copy) AFURLSessionDownloadTaskDidFinishDownloadingBlock downloadTaskDidFinishDownloading; +@property (nonatomic, copy) AFURLSessionTaskProgressBlock uploadProgressBlock; +@property (nonatomic, copy) AFURLSessionTaskProgressBlock downloadProgressBlock; +@property (nonatomic, copy) AFURLSessionTaskCompletionHandler completionHandler; +@end + +@implementation AFURLSessionManagerTaskDelegate + +- (instancetype)init { + self = [super init]; + if (!self) { + return nil; + } + + self.mutableData = [NSMutableData data]; + self.uploadProgress = [[NSProgress alloc] initWithParent:nil userInfo:nil]; + self.uploadProgress.totalUnitCount = NSURLSessionTransferSizeUnknown; + + self.downloadProgress = [[NSProgress alloc] initWithParent:nil userInfo:nil]; + self.downloadProgress.totalUnitCount = NSURLSessionTransferSizeUnknown; + return self; +} + +#pragma mark - NSProgress Tracking + +- (void)setupProgressForTask:(NSURLSessionTask *)task { + __weak __typeof__(task) weakTask = task; + + self.uploadProgress.totalUnitCount = task.countOfBytesExpectedToSend; + self.downloadProgress.totalUnitCount = task.countOfBytesExpectedToReceive; + [self.uploadProgress setCancellable:YES]; + [self.uploadProgress setCancellationHandler:^{ + __typeof__(weakTask) strongTask = weakTask; + [strongTask cancel]; + }]; + [self.uploadProgress setPausable:YES]; + [self.uploadProgress setPausingHandler:^{ + __typeof__(weakTask) strongTask = weakTask; + [strongTask suspend]; + }]; + if ([self.uploadProgress respondsToSelector:@selector(setResumingHandler:)]) { + [self.uploadProgress setResumingHandler:^{ + __typeof__(weakTask) strongTask = weakTask; + [strongTask resume]; + }]; + } + + [self.downloadProgress setCancellable:YES]; + [self.downloadProgress setCancellationHandler:^{ + __typeof__(weakTask) strongTask = weakTask; + [strongTask cancel]; + }]; + [self.downloadProgress setPausable:YES]; + [self.downloadProgress setPausingHandler:^{ + __typeof__(weakTask) strongTask = weakTask; + [strongTask suspend]; + }]; + + if ([self.downloadProgress respondsToSelector:@selector(setResumingHandler:)]) { + [self.downloadProgress setResumingHandler:^{ + __typeof__(weakTask) strongTask = weakTask; + [strongTask resume]; + }]; + } + + [task addObserver:self + forKeyPath:NSStringFromSelector(@selector(countOfBytesReceived)) + options:NSKeyValueObservingOptionNew + context:NULL]; + [task addObserver:self + forKeyPath:NSStringFromSelector(@selector(countOfBytesExpectedToReceive)) + options:NSKeyValueObservingOptionNew + context:NULL]; + + [task addObserver:self + forKeyPath:NSStringFromSelector(@selector(countOfBytesSent)) + options:NSKeyValueObservingOptionNew + context:NULL]; + [task addObserver:self + forKeyPath:NSStringFromSelector(@selector(countOfBytesExpectedToSend)) + options:NSKeyValueObservingOptionNew + context:NULL]; + + [self.downloadProgress addObserver:self + forKeyPath:NSStringFromSelector(@selector(fractionCompleted)) + options:NSKeyValueObservingOptionNew + context:NULL]; + [self.uploadProgress addObserver:self + forKeyPath:NSStringFromSelector(@selector(fractionCompleted)) + options:NSKeyValueObservingOptionNew + context:NULL]; +} + +- (void)cleanUpProgressForTask:(NSURLSessionTask *)task { + [task removeObserver:self forKeyPath:NSStringFromSelector(@selector(countOfBytesReceived))]; + [task removeObserver:self forKeyPath:NSStringFromSelector(@selector(countOfBytesExpectedToReceive))]; + [task removeObserver:self forKeyPath:NSStringFromSelector(@selector(countOfBytesSent))]; + [task removeObserver:self forKeyPath:NSStringFromSelector(@selector(countOfBytesExpectedToSend))]; + [self.downloadProgress removeObserver:self forKeyPath:NSStringFromSelector(@selector(fractionCompleted))]; + [self.uploadProgress removeObserver:self forKeyPath:NSStringFromSelector(@selector(fractionCompleted))]; +} + +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { + if ([object isKindOfClass:[NSURLSessionTask class]] || [object isKindOfClass:[NSURLSessionDownloadTask class]]) { + if ([keyPath isEqualToString:NSStringFromSelector(@selector(countOfBytesReceived))]) { + self.downloadProgress.completedUnitCount = [change[NSKeyValueChangeNewKey] longLongValue]; + } else if ([keyPath isEqualToString:NSStringFromSelector(@selector(countOfBytesExpectedToReceive))]) { + self.downloadProgress.totalUnitCount = [change[NSKeyValueChangeNewKey] longLongValue]; + } else if ([keyPath isEqualToString:NSStringFromSelector(@selector(countOfBytesSent))]) { + self.uploadProgress.completedUnitCount = [change[NSKeyValueChangeNewKey] longLongValue]; + } else if ([keyPath isEqualToString:NSStringFromSelector(@selector(countOfBytesExpectedToSend))]) { + self.uploadProgress.totalUnitCount = [change[NSKeyValueChangeNewKey] longLongValue]; + } + } + else if ([object isEqual:self.downloadProgress]) { + if (self.downloadProgressBlock) { + self.downloadProgressBlock(object); + } + } + else if ([object isEqual:self.uploadProgress]) { + if (self.uploadProgressBlock) { + self.uploadProgressBlock(object); + } + } +} + +#pragma mark - NSURLSessionTaskDelegate + +- (void)URLSession:(__unused NSURLSession *)session + task:(NSURLSessionTask *)task +didCompleteWithError:(NSError *)error +{ + __strong AFURLSessionManager *manager = self.manager; + + __block id responseObject = nil; + + __block NSMutableDictionary *userInfo = [NSMutableDictionary dictionary]; + userInfo[AFNetworkingTaskDidCompleteResponseSerializerKey] = manager.responseSerializer; + + //Performance Improvement from #2672 + NSData *data = nil; + if (self.mutableData) { + data = [self.mutableData copy]; + //We no longer need the reference, so nil it out to gain back some memory. + self.mutableData = nil; + } + + if (self.downloadFileURL) { + userInfo[AFNetworkingTaskDidCompleteAssetPathKey] = self.downloadFileURL; + } else if (data) { + userInfo[AFNetworkingTaskDidCompleteResponseDataKey] = data; + } + + if (error) { + userInfo[AFNetworkingTaskDidCompleteErrorKey] = error; + + dispatch_group_async(manager.completionGroup ?: url_session_manager_completion_group(), manager.completionQueue ?: dispatch_get_main_queue(), ^{ + if (self.completionHandler) { + self.completionHandler(task.response, responseObject, error); + } + + dispatch_async(dispatch_get_main_queue(), ^{ + [[NSNotificationCenter defaultCenter] postNotificationName:AFNetworkingTaskDidCompleteNotification object:task userInfo:userInfo]; + }); + }); + } else { + dispatch_async(url_session_manager_processing_queue(), ^{ + NSError *serializationError = nil; + responseObject = [manager.responseSerializer responseObjectForResponse:task.response data:data error:&serializationError]; + + if (self.downloadFileURL) { + responseObject = self.downloadFileURL; + } + + if (responseObject) { + userInfo[AFNetworkingTaskDidCompleteSerializedResponseKey] = responseObject; + } + + if (serializationError) { + userInfo[AFNetworkingTaskDidCompleteErrorKey] = serializationError; + } + + dispatch_group_async(manager.completionGroup ?: url_session_manager_completion_group(), manager.completionQueue ?: dispatch_get_main_queue(), ^{ + if (self.completionHandler) { + self.completionHandler(task.response, responseObject, serializationError); + } + + dispatch_async(dispatch_get_main_queue(), ^{ + [[NSNotificationCenter defaultCenter] postNotificationName:AFNetworkingTaskDidCompleteNotification object:task userInfo:userInfo]; + }); + }); + }); + } +} + +#pragma mark - NSURLSessionDataTaskDelegate + +- (void)URLSession:(__unused NSURLSession *)session + dataTask:(__unused NSURLSessionDataTask *)dataTask + didReceiveData:(NSData *)data +{ + [self.mutableData appendData:data]; +} + +#pragma mark - NSURLSessionDownloadTaskDelegate + +- (void)URLSession:(NSURLSession *)session + downloadTask:(NSURLSessionDownloadTask *)downloadTask +didFinishDownloadingToURL:(NSURL *)location +{ + NSError *fileManagerError = nil; + self.downloadFileURL = nil; + + if (self.downloadTaskDidFinishDownloading) { + self.downloadFileURL = self.downloadTaskDidFinishDownloading(session, downloadTask, location); + if (self.downloadFileURL) { + [[NSFileManager defaultManager] moveItemAtURL:location toURL:self.downloadFileURL error:&fileManagerError]; + + if (fileManagerError) { + [[NSNotificationCenter defaultCenter] postNotificationName:AFURLSessionDownloadTaskDidFailToMoveFileNotification object:downloadTask userInfo:fileManagerError.userInfo]; + } + } + } +} + +@end + +#pragma mark - + +/** + * A workaround for issues related to key-value observing the `state` of an `NSURLSessionTask`. + * + * See: + * - https://github.com/AFNetworking/AFNetworking/issues/1477 + * - https://github.com/AFNetworking/AFNetworking/issues/2638 + * - https://github.com/AFNetworking/AFNetworking/pull/2702 + */ + +static inline void af_swizzleSelector(Class theClass, SEL originalSelector, SEL swizzledSelector) { + Method originalMethod = class_getInstanceMethod(theClass, originalSelector); + Method swizzledMethod = class_getInstanceMethod(theClass, swizzledSelector); + method_exchangeImplementations(originalMethod, swizzledMethod); +} + +static inline BOOL af_addMethod(Class theClass, SEL selector, Method method) { + return class_addMethod(theClass, selector, method_getImplementation(method), method_getTypeEncoding(method)); +} + +static NSString * const AFNSURLSessionTaskDidResumeNotification = @"com.alamofire.networking.nsurlsessiontask.resume"; +static NSString * const AFNSURLSessionTaskDidSuspendNotification = @"com.alamofire.networking.nsurlsessiontask.suspend"; + +@interface _AFURLSessionTaskSwizzling : NSObject + +@end + +@implementation _AFURLSessionTaskSwizzling + ++ (void)load { + /** + WARNING: Trouble Ahead + https://github.com/AFNetworking/AFNetworking/pull/2702 + */ + + if (NSClassFromString(@"NSURLSessionTask")) { + /** + iOS 7 and iOS 8 differ in NSURLSessionTask implementation, which makes the next bit of code a bit tricky. + Many Unit Tests have been built to validate as much of this behavior has possible. + Here is what we know: + - NSURLSessionTasks are implemented with class clusters, meaning the class you request from the API isn't actually the type of class you will get back. + - Simply referencing `[NSURLSessionTask class]` will not work. You need to ask an `NSURLSession` to actually create an object, and grab the class from there. + - On iOS 7, `localDataTask` is a `__NSCFLocalDataTask`, which inherits from `__NSCFLocalSessionTask`, which inherits from `__NSCFURLSessionTask`. + - On iOS 8, `localDataTask` is a `__NSCFLocalDataTask`, which inherits from `__NSCFLocalSessionTask`, which inherits from `NSURLSessionTask`. + - On iOS 7, `__NSCFLocalSessionTask` and `__NSCFURLSessionTask` are the only two classes that have their own implementations of `resume` and `suspend`, and `__NSCFLocalSessionTask` DOES NOT CALL SUPER. This means both classes need to be swizzled. + - On iOS 8, `NSURLSessionTask` is the only class that implements `resume` and `suspend`. This means this is the only class that needs to be swizzled. + - Because `NSURLSessionTask` is not involved in the class hierarchy for every version of iOS, its easier to add the swizzled methods to a dummy class and manage them there. + + Some Assumptions: + - No implementations of `resume` or `suspend` call super. If this were to change in a future version of iOS, we'd need to handle it. + - No background task classes override `resume` or `suspend` + + The current solution: + 1) Grab an instance of `__NSCFLocalDataTask` by asking an instance of `NSURLSession` for a data task. + 2) Grab a pointer to the original implementation of `af_resume` + 3) Check to see if the current class has an implementation of resume. If so, continue to step 4. + 4) Grab the super class of the current class. + 5) Grab a pointer for the current class to the current implementation of `resume`. + 6) Grab a pointer for the super class to the current implementation of `resume`. + 7) If the current class implementation of `resume` is not equal to the super class implementation of `resume` AND the current implementation of `resume` is not equal to the original implementation of `af_resume`, THEN swizzle the methods + 8) Set the current class to the super class, and repeat steps 3-8 + */ + NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration ephemeralSessionConfiguration]; + NSURLSession * session = [NSURLSession sessionWithConfiguration:configuration]; +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wnonnull" + NSURLSessionDataTask *localDataTask = [session dataTaskWithURL:nil]; +#pragma clang diagnostic pop + IMP originalAFResumeIMP = method_getImplementation(class_getInstanceMethod([self class], @selector(af_resume))); + Class currentClass = [localDataTask class]; + + while (class_getInstanceMethod(currentClass, @selector(resume))) { + Class superClass = [currentClass superclass]; + IMP classResumeIMP = method_getImplementation(class_getInstanceMethod(currentClass, @selector(resume))); + IMP superclassResumeIMP = method_getImplementation(class_getInstanceMethod(superClass, @selector(resume))); + if (classResumeIMP != superclassResumeIMP && + originalAFResumeIMP != classResumeIMP) { + [self swizzleResumeAndSuspendMethodForClass:currentClass]; + } + currentClass = [currentClass superclass]; + } + + [localDataTask cancel]; + [session finishTasksAndInvalidate]; + } +} + ++ (void)swizzleResumeAndSuspendMethodForClass:(Class)theClass { + Method afResumeMethod = class_getInstanceMethod(self, @selector(af_resume)); + Method afSuspendMethod = class_getInstanceMethod(self, @selector(af_suspend)); + + if (af_addMethod(theClass, @selector(af_resume), afResumeMethod)) { + af_swizzleSelector(theClass, @selector(resume), @selector(af_resume)); + } + + if (af_addMethod(theClass, @selector(af_suspend), afSuspendMethod)) { + af_swizzleSelector(theClass, @selector(suspend), @selector(af_suspend)); + } +} + +- (NSURLSessionTaskState)state { + NSAssert(NO, @"State method should never be called in the actual dummy class"); + return NSURLSessionTaskStateCanceling; +} + +- (void)af_resume { + NSAssert([self respondsToSelector:@selector(state)], @"Does not respond to state"); + NSURLSessionTaskState state = [self state]; + [self af_resume]; + + if (state != NSURLSessionTaskStateRunning) { + [[NSNotificationCenter defaultCenter] postNotificationName:AFNSURLSessionTaskDidResumeNotification object:self]; + } +} + +- (void)af_suspend { + NSAssert([self respondsToSelector:@selector(state)], @"Does not respond to state"); + NSURLSessionTaskState state = [self state]; + [self af_suspend]; + + if (state != NSURLSessionTaskStateSuspended) { + [[NSNotificationCenter defaultCenter] postNotificationName:AFNSURLSessionTaskDidSuspendNotification object:self]; + } +} +@end + +#pragma mark - + +@interface AFURLSessionManager () +@property (readwrite, nonatomic, strong) NSURLSessionConfiguration *sessionConfiguration; +@property (readwrite, nonatomic, strong) NSOperationQueue *operationQueue; +@property (readwrite, nonatomic, strong) NSURLSession *session; +@property (readwrite, nonatomic, strong) NSMutableDictionary *mutableTaskDelegatesKeyedByTaskIdentifier; +@property (readonly, nonatomic, copy) NSString *taskDescriptionForSessionTasks; +@property (readwrite, nonatomic, strong) NSLock *lock; +@property (readwrite, nonatomic, copy) AFURLSessionDidBecomeInvalidBlock sessionDidBecomeInvalid; +@property (readwrite, nonatomic, copy) AFURLSessionDidReceiveAuthenticationChallengeBlock sessionDidReceiveAuthenticationChallenge; +@property (readwrite, nonatomic, copy) AFURLSessionDidFinishEventsForBackgroundURLSessionBlock didFinishEventsForBackgroundURLSession; +@property (readwrite, nonatomic, copy) AFURLSessionTaskWillPerformHTTPRedirectionBlock taskWillPerformHTTPRedirection; +@property (readwrite, nonatomic, copy) AFURLSessionTaskDidReceiveAuthenticationChallengeBlock taskDidReceiveAuthenticationChallenge; +@property (readwrite, nonatomic, copy) AFURLSessionTaskNeedNewBodyStreamBlock taskNeedNewBodyStream; +@property (readwrite, nonatomic, copy) AFURLSessionTaskDidSendBodyDataBlock taskDidSendBodyData; +@property (readwrite, nonatomic, copy) AFURLSessionTaskDidCompleteBlock taskDidComplete; +@property (readwrite, nonatomic, copy) AFURLSessionDataTaskDidReceiveResponseBlock dataTaskDidReceiveResponse; +@property (readwrite, nonatomic, copy) AFURLSessionDataTaskDidBecomeDownloadTaskBlock dataTaskDidBecomeDownloadTask; +@property (readwrite, nonatomic, copy) AFURLSessionDataTaskDidReceiveDataBlock dataTaskDidReceiveData; +@property (readwrite, nonatomic, copy) AFURLSessionDataTaskWillCacheResponseBlock dataTaskWillCacheResponse; +@property (readwrite, nonatomic, copy) AFURLSessionDownloadTaskDidFinishDownloadingBlock downloadTaskDidFinishDownloading; +@property (readwrite, nonatomic, copy) AFURLSessionDownloadTaskDidWriteDataBlock downloadTaskDidWriteData; +@property (readwrite, nonatomic, copy) AFURLSessionDownloadTaskDidResumeBlock downloadTaskDidResume; +@end + +@implementation AFURLSessionManager + +- (instancetype)init { + return [self initWithSessionConfiguration:nil]; +} + +- (instancetype)initWithSessionConfiguration:(NSURLSessionConfiguration *)configuration { + self = [super init]; + if (!self) { + return nil; + } + + if (!configuration) { + configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; + } + + self.sessionConfiguration = configuration; + + self.operationQueue = [[NSOperationQueue alloc] init]; + self.operationQueue.maxConcurrentOperationCount = 1; + + self.session = [NSURLSession sessionWithConfiguration:self.sessionConfiguration delegate:self delegateQueue:self.operationQueue]; + + self.responseSerializer = [AFJSONResponseSerializer serializer]; + + self.securityPolicy = [AFSecurityPolicy defaultPolicy]; + +#if !TARGET_OS_WATCH + self.reachabilityManager = [AFNetworkReachabilityManager sharedManager]; +#endif + + self.mutableTaskDelegatesKeyedByTaskIdentifier = [[NSMutableDictionary alloc] init]; + + self.lock = [[NSLock alloc] init]; + self.lock.name = AFURLSessionManagerLockName; + + [self.session getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks) { + for (NSURLSessionDataTask *task in dataTasks) { + [self addDelegateForDataTask:task uploadProgress:nil downloadProgress:nil completionHandler:nil]; + } + + for (NSURLSessionUploadTask *uploadTask in uploadTasks) { + [self addDelegateForUploadTask:uploadTask progress:nil completionHandler:nil]; + } + + for (NSURLSessionDownloadTask *downloadTask in downloadTasks) { + [self addDelegateForDownloadTask:downloadTask progress:nil destination:nil completionHandler:nil]; + } + }]; + + return self; +} + +- (void)dealloc { + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + +#pragma mark - + +- (NSString *)taskDescriptionForSessionTasks { + return [NSString stringWithFormat:@"%p", self]; +} + +- (void)taskDidResume:(NSNotification *)notification { + NSURLSessionTask *task = notification.object; + if ([task respondsToSelector:@selector(taskDescription)]) { + if ([task.taskDescription isEqualToString:self.taskDescriptionForSessionTasks]) { + dispatch_async(dispatch_get_main_queue(), ^{ + [[NSNotificationCenter defaultCenter] postNotificationName:AFNetworkingTaskDidResumeNotification object:task]; + }); + } + } +} + +- (void)taskDidSuspend:(NSNotification *)notification { + NSURLSessionTask *task = notification.object; + if ([task respondsToSelector:@selector(taskDescription)]) { + if ([task.taskDescription isEqualToString:self.taskDescriptionForSessionTasks]) { + dispatch_async(dispatch_get_main_queue(), ^{ + [[NSNotificationCenter defaultCenter] postNotificationName:AFNetworkingTaskDidSuspendNotification object:task]; + }); + } + } +} + +#pragma mark - + +- (AFURLSessionManagerTaskDelegate *)delegateForTask:(NSURLSessionTask *)task { + NSParameterAssert(task); + + AFURLSessionManagerTaskDelegate *delegate = nil; + [self.lock lock]; + delegate = self.mutableTaskDelegatesKeyedByTaskIdentifier[@(task.taskIdentifier)]; + [self.lock unlock]; + + return delegate; +} + +- (void)setDelegate:(AFURLSessionManagerTaskDelegate *)delegate + forTask:(NSURLSessionTask *)task +{ + NSParameterAssert(task); + NSParameterAssert(delegate); + + [self.lock lock]; + self.mutableTaskDelegatesKeyedByTaskIdentifier[@(task.taskIdentifier)] = delegate; + [delegate setupProgressForTask:task]; + [self addNotificationObserverForTask:task]; + [self.lock unlock]; +} + +- (void)addDelegateForDataTask:(NSURLSessionDataTask *)dataTask + uploadProgress:(nullable void (^)(NSProgress *uploadProgress)) uploadProgressBlock + downloadProgress:(nullable void (^)(NSProgress *downloadProgress)) downloadProgressBlock + completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler +{ + AFURLSessionManagerTaskDelegate *delegate = [[AFURLSessionManagerTaskDelegate alloc] init]; + delegate.manager = self; + delegate.completionHandler = completionHandler; + + dataTask.taskDescription = self.taskDescriptionForSessionTasks; + [self setDelegate:delegate forTask:dataTask]; + + delegate.uploadProgressBlock = uploadProgressBlock; + delegate.downloadProgressBlock = downloadProgressBlock; +} + +- (void)addDelegateForUploadTask:(NSURLSessionUploadTask *)uploadTask + progress:(void (^)(NSProgress *uploadProgress)) uploadProgressBlock + completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler +{ + AFURLSessionManagerTaskDelegate *delegate = [[AFURLSessionManagerTaskDelegate alloc] init]; + delegate.manager = self; + delegate.completionHandler = completionHandler; + + uploadTask.taskDescription = self.taskDescriptionForSessionTasks; + + [self setDelegate:delegate forTask:uploadTask]; + + delegate.uploadProgressBlock = uploadProgressBlock; +} + +- (void)addDelegateForDownloadTask:(NSURLSessionDownloadTask *)downloadTask + progress:(void (^)(NSProgress *downloadProgress)) downloadProgressBlock + destination:(NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination + completionHandler:(void (^)(NSURLResponse *response, NSURL *filePath, NSError *error))completionHandler +{ + AFURLSessionManagerTaskDelegate *delegate = [[AFURLSessionManagerTaskDelegate alloc] init]; + delegate.manager = self; + delegate.completionHandler = completionHandler; + + if (destination) { + delegate.downloadTaskDidFinishDownloading = ^NSURL * (NSURLSession * __unused session, NSURLSessionDownloadTask *task, NSURL *location) { + return destination(location, task.response); + }; + } + + downloadTask.taskDescription = self.taskDescriptionForSessionTasks; + + [self setDelegate:delegate forTask:downloadTask]; + + delegate.downloadProgressBlock = downloadProgressBlock; +} + +- (void)removeDelegateForTask:(NSURLSessionTask *)task { + NSParameterAssert(task); + + AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:task]; + [self.lock lock]; + [delegate cleanUpProgressForTask:task]; + [self removeNotificationObserverForTask:task]; + [self.mutableTaskDelegatesKeyedByTaskIdentifier removeObjectForKey:@(task.taskIdentifier)]; + [self.lock unlock]; +} + +#pragma mark - + +- (NSArray *)tasksForKeyPath:(NSString *)keyPath { + __block NSArray *tasks = nil; + dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); + [self.session getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks) { + if ([keyPath isEqualToString:NSStringFromSelector(@selector(dataTasks))]) { + tasks = dataTasks; + } else if ([keyPath isEqualToString:NSStringFromSelector(@selector(uploadTasks))]) { + tasks = uploadTasks; + } else if ([keyPath isEqualToString:NSStringFromSelector(@selector(downloadTasks))]) { + tasks = downloadTasks; + } else if ([keyPath isEqualToString:NSStringFromSelector(@selector(tasks))]) { + tasks = [@[dataTasks, uploadTasks, downloadTasks] valueForKeyPath:@"@unionOfArrays.self"]; + } + + dispatch_semaphore_signal(semaphore); + }]; + + dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); + + return tasks; +} + +- (NSArray *)tasks { + return [self tasksForKeyPath:NSStringFromSelector(_cmd)]; +} + +- (NSArray *)dataTasks { + return [self tasksForKeyPath:NSStringFromSelector(_cmd)]; +} + +- (NSArray *)uploadTasks { + return [self tasksForKeyPath:NSStringFromSelector(_cmd)]; +} + +- (NSArray *)downloadTasks { + return [self tasksForKeyPath:NSStringFromSelector(_cmd)]; +} + +#pragma mark - + +- (void)invalidateSessionCancelingTasks:(BOOL)cancelPendingTasks { + dispatch_async(dispatch_get_main_queue(), ^{ + if (cancelPendingTasks) { + [self.session invalidateAndCancel]; + } else { + [self.session finishTasksAndInvalidate]; + } + }); +} + +#pragma mark - + +- (void)setResponseSerializer:(id )responseSerializer { + NSParameterAssert(responseSerializer); + + _responseSerializer = responseSerializer; +} + +#pragma mark - +- (void)addNotificationObserverForTask:(NSURLSessionTask *)task { + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(taskDidResume:) name:AFNSURLSessionTaskDidResumeNotification object:task]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(taskDidSuspend:) name:AFNSURLSessionTaskDidSuspendNotification object:task]; +} + +- (void)removeNotificationObserverForTask:(NSURLSessionTask *)task { + [[NSNotificationCenter defaultCenter] removeObserver:self name:AFNSURLSessionTaskDidSuspendNotification object:task]; + [[NSNotificationCenter defaultCenter] removeObserver:self name:AFNSURLSessionTaskDidResumeNotification object:task]; +} + +#pragma mark - + +- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request + completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler +{ + return [self dataTaskWithRequest:request uploadProgress:nil downloadProgress:nil completionHandler:completionHandler]; +} + +- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request + uploadProgress:(nullable void (^)(NSProgress *uploadProgress)) uploadProgressBlock + downloadProgress:(nullable void (^)(NSProgress *downloadProgress)) downloadProgressBlock + completionHandler:(nullable void (^)(NSURLResponse *response, id _Nullable responseObject, NSError * _Nullable error))completionHandler { + + __block NSURLSessionDataTask *dataTask = nil; + url_session_manager_create_task_safely(^{ + dataTask = [self.session dataTaskWithRequest:request]; + }); + + [self addDelegateForDataTask:dataTask uploadProgress:uploadProgressBlock downloadProgress:downloadProgressBlock completionHandler:completionHandler]; + + return dataTask; +} + +#pragma mark - + +- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request + fromFile:(NSURL *)fileURL + progress:(void (^)(NSProgress *uploadProgress)) uploadProgressBlock + completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler +{ + __block NSURLSessionUploadTask *uploadTask = nil; + url_session_manager_create_task_safely(^{ + uploadTask = [self.session uploadTaskWithRequest:request fromFile:fileURL]; + }); + + if (!uploadTask && self.attemptsToRecreateUploadTasksForBackgroundSessions && self.session.configuration.identifier) { + for (NSUInteger attempts = 0; !uploadTask && attempts < AFMaximumNumberOfAttemptsToRecreateBackgroundSessionUploadTask; attempts++) { + uploadTask = [self.session uploadTaskWithRequest:request fromFile:fileURL]; + } + } + + [self addDelegateForUploadTask:uploadTask progress:uploadProgressBlock completionHandler:completionHandler]; + + return uploadTask; +} + +- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request + fromData:(NSData *)bodyData + progress:(void (^)(NSProgress *uploadProgress)) uploadProgressBlock + completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler +{ + __block NSURLSessionUploadTask *uploadTask = nil; + url_session_manager_create_task_safely(^{ + uploadTask = [self.session uploadTaskWithRequest:request fromData:bodyData]; + }); + + [self addDelegateForUploadTask:uploadTask progress:uploadProgressBlock completionHandler:completionHandler]; + + return uploadTask; +} + +- (NSURLSessionUploadTask *)uploadTaskWithStreamedRequest:(NSURLRequest *)request + progress:(void (^)(NSProgress *uploadProgress)) uploadProgressBlock + completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler +{ + __block NSURLSessionUploadTask *uploadTask = nil; + url_session_manager_create_task_safely(^{ + uploadTask = [self.session uploadTaskWithStreamedRequest:request]; + }); + + [self addDelegateForUploadTask:uploadTask progress:uploadProgressBlock completionHandler:completionHandler]; + + return uploadTask; +} + +#pragma mark - + +- (NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request + progress:(void (^)(NSProgress *downloadProgress)) downloadProgressBlock + destination:(NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination + completionHandler:(void (^)(NSURLResponse *response, NSURL *filePath, NSError *error))completionHandler +{ + __block NSURLSessionDownloadTask *downloadTask = nil; + url_session_manager_create_task_safely(^{ + downloadTask = [self.session downloadTaskWithRequest:request]; + }); + + [self addDelegateForDownloadTask:downloadTask progress:downloadProgressBlock destination:destination completionHandler:completionHandler]; + + return downloadTask; +} + +- (NSURLSessionDownloadTask *)downloadTaskWithResumeData:(NSData *)resumeData + progress:(void (^)(NSProgress *downloadProgress)) downloadProgressBlock + destination:(NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination + completionHandler:(void (^)(NSURLResponse *response, NSURL *filePath, NSError *error))completionHandler +{ + __block NSURLSessionDownloadTask *downloadTask = nil; + url_session_manager_create_task_safely(^{ + downloadTask = [self.session downloadTaskWithResumeData:resumeData]; + }); + + [self addDelegateForDownloadTask:downloadTask progress:downloadProgressBlock destination:destination completionHandler:completionHandler]; + + return downloadTask; +} + +#pragma mark - +- (NSProgress *)uploadProgressForTask:(NSURLSessionTask *)task { + return [[self delegateForTask:task] uploadProgress]; +} + +- (NSProgress *)downloadProgressForTask:(NSURLSessionTask *)task { + return [[self delegateForTask:task] downloadProgress]; +} + +#pragma mark - + +- (void)setSessionDidBecomeInvalidBlock:(void (^)(NSURLSession *session, NSError *error))block { + self.sessionDidBecomeInvalid = block; +} + +- (void)setSessionDidReceiveAuthenticationChallengeBlock:(NSURLSessionAuthChallengeDisposition (^)(NSURLSession *session, NSURLAuthenticationChallenge *challenge, NSURLCredential * __autoreleasing *credential))block { + self.sessionDidReceiveAuthenticationChallenge = block; +} + +- (void)setDidFinishEventsForBackgroundURLSessionBlock:(void (^)(NSURLSession *session))block { + self.didFinishEventsForBackgroundURLSession = block; +} + +#pragma mark - + +- (void)setTaskNeedNewBodyStreamBlock:(NSInputStream * (^)(NSURLSession *session, NSURLSessionTask *task))block { + self.taskNeedNewBodyStream = block; +} + +- (void)setTaskWillPerformHTTPRedirectionBlock:(NSURLRequest * (^)(NSURLSession *session, NSURLSessionTask *task, NSURLResponse *response, NSURLRequest *request))block { + self.taskWillPerformHTTPRedirection = block; +} + +- (void)setTaskDidReceiveAuthenticationChallengeBlock:(NSURLSessionAuthChallengeDisposition (^)(NSURLSession *session, NSURLSessionTask *task, NSURLAuthenticationChallenge *challenge, NSURLCredential * __autoreleasing *credential))block { + self.taskDidReceiveAuthenticationChallenge = block; +} + +- (void)setTaskDidSendBodyDataBlock:(void (^)(NSURLSession *session, NSURLSessionTask *task, int64_t bytesSent, int64_t totalBytesSent, int64_t totalBytesExpectedToSend))block { + self.taskDidSendBodyData = block; +} + +- (void)setTaskDidCompleteBlock:(void (^)(NSURLSession *session, NSURLSessionTask *task, NSError *error))block { + self.taskDidComplete = block; +} + +#pragma mark - + +- (void)setDataTaskDidReceiveResponseBlock:(NSURLSessionResponseDisposition (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLResponse *response))block { + self.dataTaskDidReceiveResponse = block; +} + +- (void)setDataTaskDidBecomeDownloadTaskBlock:(void (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSURLSessionDownloadTask *downloadTask))block { + self.dataTaskDidBecomeDownloadTask = block; +} + +- (void)setDataTaskDidReceiveDataBlock:(void (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSData *data))block { + self.dataTaskDidReceiveData = block; +} + +- (void)setDataTaskWillCacheResponseBlock:(NSCachedURLResponse * (^)(NSURLSession *session, NSURLSessionDataTask *dataTask, NSCachedURLResponse *proposedResponse))block { + self.dataTaskWillCacheResponse = block; +} + +#pragma mark - + +- (void)setDownloadTaskDidFinishDownloadingBlock:(NSURL * (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, NSURL *location))block { + self.downloadTaskDidFinishDownloading = block; +} + +- (void)setDownloadTaskDidWriteDataBlock:(void (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t bytesWritten, int64_t totalBytesWritten, int64_t totalBytesExpectedToWrite))block { + self.downloadTaskDidWriteData = block; +} + +- (void)setDownloadTaskDidResumeBlock:(void (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t fileOffset, int64_t expectedTotalBytes))block { + self.downloadTaskDidResume = block; +} + +#pragma mark - NSObject + +- (NSString *)description { + return [NSString stringWithFormat:@"<%@: %p, session: %@, operationQueue: %@>", NSStringFromClass([self class]), self, self.session, self.operationQueue]; +} + +- (BOOL)respondsToSelector:(SEL)selector { + if (selector == @selector(URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:)) { + return self.taskWillPerformHTTPRedirection != nil; + } else if (selector == @selector(URLSession:dataTask:didReceiveResponse:completionHandler:)) { + return self.dataTaskDidReceiveResponse != nil; + } else if (selector == @selector(URLSession:dataTask:willCacheResponse:completionHandler:)) { + return self.dataTaskWillCacheResponse != nil; + } else if (selector == @selector(URLSessionDidFinishEventsForBackgroundURLSession:)) { + return self.didFinishEventsForBackgroundURLSession != nil; + } + + return [[self class] instancesRespondToSelector:selector]; +} + +#pragma mark - NSURLSessionDelegate + +- (void)URLSession:(NSURLSession *)session +didBecomeInvalidWithError:(NSError *)error +{ + if (self.sessionDidBecomeInvalid) { + self.sessionDidBecomeInvalid(session, error); + } + + [[NSNotificationCenter defaultCenter] postNotificationName:AFURLSessionDidInvalidateNotification object:session]; +} + +- (void)URLSession:(NSURLSession *)session +didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge + completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler +{ + NSURLSessionAuthChallengeDisposition disposition = NSURLSessionAuthChallengePerformDefaultHandling; + __block NSURLCredential *credential = nil; + + if (self.sessionDidReceiveAuthenticationChallenge) { + disposition = self.sessionDidReceiveAuthenticationChallenge(session, challenge, &credential); + } else { + if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) { + if ([self.securityPolicy evaluateServerTrust:challenge.protectionSpace.serverTrust forDomain:challenge.protectionSpace.host]) { + credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]; + if (credential) { + disposition = NSURLSessionAuthChallengeUseCredential; + } else { + disposition = NSURLSessionAuthChallengePerformDefaultHandling; + } + } else { + disposition = NSURLSessionAuthChallengeCancelAuthenticationChallenge; + } + } else { + disposition = NSURLSessionAuthChallengePerformDefaultHandling; + } + } + + if (completionHandler) { + completionHandler(disposition, credential); + } +} + +#pragma mark - NSURLSessionTaskDelegate + +- (void)URLSession:(NSURLSession *)session + task:(NSURLSessionTask *)task +willPerformHTTPRedirection:(NSHTTPURLResponse *)response + newRequest:(NSURLRequest *)request + completionHandler:(void (^)(NSURLRequest *))completionHandler +{ + NSURLRequest *redirectRequest = request; + + if (self.taskWillPerformHTTPRedirection) { + redirectRequest = self.taskWillPerformHTTPRedirection(session, task, response, request); + } + + if (completionHandler) { + completionHandler(redirectRequest); + } +} + +- (void)URLSession:(NSURLSession *)session + task:(NSURLSessionTask *)task +didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge + completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler +{ + NSURLSessionAuthChallengeDisposition disposition = NSURLSessionAuthChallengePerformDefaultHandling; + __block NSURLCredential *credential = nil; + + if (self.taskDidReceiveAuthenticationChallenge) { + disposition = self.taskDidReceiveAuthenticationChallenge(session, task, challenge, &credential); + } else { + if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) { + if ([self.securityPolicy evaluateServerTrust:challenge.protectionSpace.serverTrust forDomain:challenge.protectionSpace.host]) { + disposition = NSURLSessionAuthChallengeUseCredential; + credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]; + } else { + disposition = NSURLSessionAuthChallengeCancelAuthenticationChallenge; + } + } else { + disposition = NSURLSessionAuthChallengePerformDefaultHandling; + } + } + + if (completionHandler) { + completionHandler(disposition, credential); + } +} + +- (void)URLSession:(NSURLSession *)session + task:(NSURLSessionTask *)task + needNewBodyStream:(void (^)(NSInputStream *bodyStream))completionHandler +{ + NSInputStream *inputStream = nil; + + if (self.taskNeedNewBodyStream) { + inputStream = self.taskNeedNewBodyStream(session, task); + } else if (task.originalRequest.HTTPBodyStream && [task.originalRequest.HTTPBodyStream conformsToProtocol:@protocol(NSCopying)]) { + inputStream = [task.originalRequest.HTTPBodyStream copy]; + } + + if (completionHandler) { + completionHandler(inputStream); + } +} + +- (void)URLSession:(NSURLSession *)session + task:(NSURLSessionTask *)task + didSendBodyData:(int64_t)bytesSent + totalBytesSent:(int64_t)totalBytesSent +totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend +{ + + int64_t totalUnitCount = totalBytesExpectedToSend; + if(totalUnitCount == NSURLSessionTransferSizeUnknown) { + NSString *contentLength = [task.originalRequest valueForHTTPHeaderField:@"Content-Length"]; + if(contentLength) { + totalUnitCount = (int64_t) [contentLength longLongValue]; + } + } + + if (self.taskDidSendBodyData) { + self.taskDidSendBodyData(session, task, bytesSent, totalBytesSent, totalUnitCount); + } +} + +- (void)URLSession:(NSURLSession *)session + task:(NSURLSessionTask *)task +didCompleteWithError:(NSError *)error +{ + AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:task]; + + // delegate may be nil when completing a task in the background + if (delegate) { + [delegate URLSession:session task:task didCompleteWithError:error]; + + [self removeDelegateForTask:task]; + } + + if (self.taskDidComplete) { + self.taskDidComplete(session, task, error); + } +} + +#pragma mark - NSURLSessionDataDelegate + +- (void)URLSession:(NSURLSession *)session + dataTask:(NSURLSessionDataTask *)dataTask +didReceiveResponse:(NSURLResponse *)response + completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler +{ + NSURLSessionResponseDisposition disposition = NSURLSessionResponseAllow; + + if (self.dataTaskDidReceiveResponse) { + disposition = self.dataTaskDidReceiveResponse(session, dataTask, response); + } + + if (completionHandler) { + completionHandler(disposition); + } +} + +- (void)URLSession:(NSURLSession *)session + dataTask:(NSURLSessionDataTask *)dataTask +didBecomeDownloadTask:(NSURLSessionDownloadTask *)downloadTask +{ + AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:dataTask]; + if (delegate) { + [self removeDelegateForTask:dataTask]; + [self setDelegate:delegate forTask:downloadTask]; + } + + if (self.dataTaskDidBecomeDownloadTask) { + self.dataTaskDidBecomeDownloadTask(session, dataTask, downloadTask); + } +} + +- (void)URLSession:(NSURLSession *)session + dataTask:(NSURLSessionDataTask *)dataTask + didReceiveData:(NSData *)data +{ + + AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:dataTask]; + [delegate URLSession:session dataTask:dataTask didReceiveData:data]; + + if (self.dataTaskDidReceiveData) { + self.dataTaskDidReceiveData(session, dataTask, data); + } +} + +- (void)URLSession:(NSURLSession *)session + dataTask:(NSURLSessionDataTask *)dataTask + willCacheResponse:(NSCachedURLResponse *)proposedResponse + completionHandler:(void (^)(NSCachedURLResponse *cachedResponse))completionHandler +{ + NSCachedURLResponse *cachedResponse = proposedResponse; + + if (self.dataTaskWillCacheResponse) { + cachedResponse = self.dataTaskWillCacheResponse(session, dataTask, proposedResponse); + } + + if (completionHandler) { + completionHandler(cachedResponse); + } +} + +- (void)URLSessionDidFinishEventsForBackgroundURLSession:(NSURLSession *)session { + if (self.didFinishEventsForBackgroundURLSession) { + dispatch_async(dispatch_get_main_queue(), ^{ + self.didFinishEventsForBackgroundURLSession(session); + }); + } +} + +#pragma mark - NSURLSessionDownloadDelegate + +- (void)URLSession:(NSURLSession *)session + downloadTask:(NSURLSessionDownloadTask *)downloadTask +didFinishDownloadingToURL:(NSURL *)location +{ + AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:downloadTask]; + if (self.downloadTaskDidFinishDownloading) { + NSURL *fileURL = self.downloadTaskDidFinishDownloading(session, downloadTask, location); + if (fileURL) { + delegate.downloadFileURL = fileURL; + NSError *error = nil; + [[NSFileManager defaultManager] moveItemAtURL:location toURL:fileURL error:&error]; + if (error) { + [[NSNotificationCenter defaultCenter] postNotificationName:AFURLSessionDownloadTaskDidFailToMoveFileNotification object:downloadTask userInfo:error.userInfo]; + } + + return; + } + } + + if (delegate) { + [delegate URLSession:session downloadTask:downloadTask didFinishDownloadingToURL:location]; + } +} + +- (void)URLSession:(NSURLSession *)session + downloadTask:(NSURLSessionDownloadTask *)downloadTask + didWriteData:(int64_t)bytesWritten + totalBytesWritten:(int64_t)totalBytesWritten +totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite +{ + if (self.downloadTaskDidWriteData) { + self.downloadTaskDidWriteData(session, downloadTask, bytesWritten, totalBytesWritten, totalBytesExpectedToWrite); + } +} + +- (void)URLSession:(NSURLSession *)session + downloadTask:(NSURLSessionDownloadTask *)downloadTask + didResumeAtOffset:(int64_t)fileOffset +expectedTotalBytes:(int64_t)expectedTotalBytes +{ + if (self.downloadTaskDidResume) { + self.downloadTaskDidResume(session, downloadTask, fileOffset, expectedTotalBytes); + } +} + +#pragma mark - NSSecureCoding + ++ (BOOL)supportsSecureCoding { + return YES; +} + +- (instancetype)initWithCoder:(NSCoder *)decoder { + NSURLSessionConfiguration *configuration = [decoder decodeObjectOfClass:[NSURLSessionConfiguration class] forKey:@"sessionConfiguration"]; + + self = [self initWithSessionConfiguration:configuration]; + if (!self) { + return nil; + } + + return self; +} + +- (void)encodeWithCoder:(NSCoder *)coder { + [coder encodeObject:self.session.configuration forKey:@"sessionConfiguration"]; +} + +#pragma mark - NSCopying + +- (instancetype)copyWithZone:(NSZone *)zone { + return [[[self class] allocWithZone:zone] initWithSessionConfiguration:self.session.configuration]; +} + +@end diff --git a/JQQY/ThirdParty/AFNetworking/JSONKit.h b/JQQY/ThirdParty/AFNetworking/JSONKit.h new file mode 100755 index 0000000000000000000000000000000000000000..71bd0c3b7ba9611cda1eb8197742ac42a0dd7d73 --- /dev/null +++ b/JQQY/ThirdParty/AFNetworking/JSONKit.h @@ -0,0 +1,251 @@ +// +// JSONKit.h +// http://github.com/johnezang/JSONKit +// Dual licensed under either the terms of the BSD License, or alternatively +// under the terms of the Apache License, Version 2.0, as specified below. +// + +/* + Copyright (c) 2011, John Engelhart + + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the Zang Industries nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/* + Copyright 2011 John Engelhart + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +#include +#include +#include +#include +#include + +#ifdef __OBJC__ +#import +#import +#import +#import +#import +#import +#endif // __OBJC__ + +#ifdef __cplusplus +extern "C" { +#endif + + +// For Mac OS X < 10.5. +#ifndef NSINTEGER_DEFINED +#define NSINTEGER_DEFINED +#if defined(__LP64__) || defined(NS_BUILD_32_LIKE_64) +typedef long NSInteger; +typedef unsigned long NSUInteger; +#define NSIntegerMin LONG_MIN +#define NSIntegerMax LONG_MAX +#define NSUIntegerMax ULONG_MAX +#else // defined(__LP64__) || defined(NS_BUILD_32_LIKE_64) +typedef int NSInteger; +typedef unsigned int NSUInteger; +#define NSIntegerMin INT_MIN +#define NSIntegerMax INT_MAX +#define NSUIntegerMax UINT_MAX +#endif // defined(__LP64__) || defined(NS_BUILD_32_LIKE_64) +#endif // NSINTEGER_DEFINED + + +#ifndef _JSONKIT_H_ +#define _JSONKIT_H_ + +#if defined(__GNUC__) && (__GNUC__ >= 4) && defined(__APPLE_CC__) && (__APPLE_CC__ >= 5465) +#define JK_DEPRECATED_ATTRIBUTE __attribute__((deprecated)) +#else +#define JK_DEPRECATED_ATTRIBUTE +#endif + +#define JSONKIT_VERSION_MAJOR 1 +#define JSONKIT_VERSION_MINOR 4 + +typedef NSUInteger JKFlags; + +/* + JKParseOptionComments : Allow C style // and /_* ... *_/ (without a _, obviously) comments in JSON. + JKParseOptionUnicodeNewlines : Allow Unicode recommended (?:\r\n|[\n\v\f\r\x85\p{Zl}\p{Zp}]) newlines. + JKParseOptionLooseUnicode : Normally the decoder will stop with an error at any malformed Unicode. + This option allows JSON with malformed Unicode to be parsed without reporting an error. + Any malformed Unicode is replaced with \uFFFD, or "REPLACEMENT CHARACTER". + */ + +enum { + JKParseOptionNone = 0, + JKParseOptionStrict = 0, + JKParseOptionComments = (1 << 0), + JKParseOptionUnicodeNewlines = (1 << 1), + JKParseOptionLooseUnicode = (1 << 2), + JKParseOptionPermitTextAfterValidJSON = (1 << 3), + JKParseOptionValidFlags = (JKParseOptionComments | JKParseOptionUnicodeNewlines | JKParseOptionLooseUnicode | JKParseOptionPermitTextAfterValidJSON), +}; +typedef JKFlags JKParseOptionFlags; + +enum { + JKSerializeOptionNone = 0, + JKSerializeOptionPretty = (1 << 0), + JKSerializeOptionEscapeUnicode = (1 << 1), + JKSerializeOptionEscapeForwardSlashes = (1 << 4), + JKSerializeOptionValidFlags = (JKSerializeOptionPretty | JKSerializeOptionEscapeUnicode | JKSerializeOptionEscapeForwardSlashes), +}; +typedef JKFlags JKSerializeOptionFlags; + +#ifdef __OBJC__ + +typedef struct JKParseState JKParseState; // Opaque internal, private type. + +// As a general rule of thumb, if you use a method that doesn't accept a JKParseOptionFlags argument, it defaults to JKParseOptionStrict + +@interface JSONDecoder : NSObject { + JKParseState *parseState; +} ++ (id)decoder; ++ (id)decoderWithParseOptions:(JKParseOptionFlags)parseOptionFlags; +- (id)initWithParseOptions:(JKParseOptionFlags)parseOptionFlags; +- (void)clearCache; + +// The parse... methods were deprecated in v1.4 in favor of the v1.4 objectWith... methods. +- (id)parseUTF8String:(const unsigned char *)string length:(size_t)length JK_DEPRECATED_ATTRIBUTE; // Deprecated in JSONKit v1.4. Use objectWithUTF8String:length: instead. +- (id)parseUTF8String:(const unsigned char *)string length:(size_t)length error:(NSError **)error JK_DEPRECATED_ATTRIBUTE; // Deprecated in JSONKit v1.4. Use objectWithUTF8String:length:error: instead. +// The NSData MUST be UTF8 encoded JSON. +- (id)parseJSONData:(NSData *)jsonData JK_DEPRECATED_ATTRIBUTE; // Deprecated in JSONKit v1.4. Use objectWithData: instead. +- (id)parseJSONData:(NSData *)jsonData error:(NSError **)error JK_DEPRECATED_ATTRIBUTE; // Deprecated in JSONKit v1.4. Use objectWithData:error: instead. + +// Methods that return immutable collection objects. +- (id)objectWithUTF8String:(const unsigned char *)string length:(NSUInteger)length; +- (id)objectWithUTF8String:(const unsigned char *)string length:(NSUInteger)length error:(NSError **)error; +// The NSData MUST be UTF8 encoded JSON. +- (id)objectWithData:(NSData *)jsonData; +- (id)objectWithData:(NSData *)jsonData error:(NSError **)error; + +// Methods that return mutable collection objects. +- (id)mutableObjectWithUTF8String:(const unsigned char *)string length:(NSUInteger)length; +- (id)mutableObjectWithUTF8String:(const unsigned char *)string length:(NSUInteger)length error:(NSError **)error; +// The NSData MUST be UTF8 encoded JSON. +- (id)mutableObjectWithData:(NSData *)jsonData; +- (id)mutableObjectWithData:(NSData *)jsonData error:(NSError **)error; + +@end + +//////////// +#pragma mark Deserializing methods +//////////// + +@interface NSString (JSONKitDeserializing) +- (id)objectFromJSONString; +- (id)objectFromJSONStringWithParseOptions:(JKParseOptionFlags)parseOptionFlags; +- (id)objectFromJSONStringWithParseOptions:(JKParseOptionFlags)parseOptionFlags error:(NSError **)error; +- (id)mutableObjectFromJSONString; +- (id)mutableObjectFromJSONStringWithParseOptions:(JKParseOptionFlags)parseOptionFlags; +- (id)mutableObjectFromJSONStringWithParseOptions:(JKParseOptionFlags)parseOptionFlags error:(NSError **)error; +@end + +@interface NSData (JSONKitDeserializing) +// The NSData MUST be UTF8 encoded JSON. +- (id)objectFromJSONData; +- (id)objectFromJSONDataWithParseOptions:(JKParseOptionFlags)parseOptionFlags; +- (id)objectFromJSONDataWithParseOptions:(JKParseOptionFlags)parseOptionFlags error:(NSError **)error; +- (id)mutableObjectFromJSONData; +- (id)mutableObjectFromJSONDataWithParseOptions:(JKParseOptionFlags)parseOptionFlags; +- (id)mutableObjectFromJSONDataWithParseOptions:(JKParseOptionFlags)parseOptionFlags error:(NSError **)error; +@end + +//////////// +#pragma mark Serializing methods +//////////// + +@interface NSString (JSONKitSerializing) +// Convenience methods for those that need to serialize the receiving NSString (i.e., instead of having to serialize a NSArray with a single NSString, you can "serialize to JSON" just the NSString). +// Normally, a string that is serialized to JSON has quotation marks surrounding it, which you may or may not want when serializing a single string, and can be controlled with includeQuotes: +// includeQuotes:YES `a "test"...` -> `"a \"test\"..."` +// includeQuotes:NO `a "test"...` -> `a \"test\"...` +- (NSData *)JSONData; // Invokes JSONDataWithOptions:JKSerializeOptionNone includeQuotes:YES +- (NSData *)JSONDataWithOptions:(JKSerializeOptionFlags)serializeOptions includeQuotes:(BOOL)includeQuotes error:(NSError **)error; +- (NSString *)JSONString; // Invokes JSONStringWithOptions:JKSerializeOptionNone includeQuotes:YES +- (NSString *)JSONStringWithOptions:(JKSerializeOptionFlags)serializeOptions includeQuotes:(BOOL)includeQuotes error:(NSError **)error; +@end + +@interface NSArray (JSONKitSerializing) +- (NSData *)JSONData; +- (NSData *)JSONDataWithOptions:(JKSerializeOptionFlags)serializeOptions error:(NSError **)error; +- (NSData *)JSONDataWithOptions:(JKSerializeOptionFlags)serializeOptions serializeUnsupportedClassesUsingDelegate:(id)delegate selector:(SEL)selector error:(NSError **)error; +- (NSString *)JSONString; +- (NSString *)JSONStringWithOptions:(JKSerializeOptionFlags)serializeOptions error:(NSError **)error; +- (NSString *)JSONStringWithOptions:(JKSerializeOptionFlags)serializeOptions serializeUnsupportedClassesUsingDelegate:(id)delegate selector:(SEL)selector error:(NSError **)error; +@end + +@interface NSDictionary (JSONKitSerializing) +- (NSData *)JSONData; +- (NSData *)JSONDataWithOptions:(JKSerializeOptionFlags)serializeOptions error:(NSError **)error; +- (NSData *)JSONDataWithOptions:(JKSerializeOptionFlags)serializeOptions serializeUnsupportedClassesUsingDelegate:(id)delegate selector:(SEL)selector error:(NSError **)error; +- (NSString *)JSONString; +- (NSString *)JSONStringWithOptions:(JKSerializeOptionFlags)serializeOptions error:(NSError **)error; +- (NSString *)JSONStringWithOptions:(JKSerializeOptionFlags)serializeOptions serializeUnsupportedClassesUsingDelegate:(id)delegate selector:(SEL)selector error:(NSError **)error; +@end + +#ifdef __BLOCKS__ + +@interface NSArray (JSONKitSerializingBlockAdditions) +- (NSData *)JSONDataWithOptions:(JKSerializeOptionFlags)serializeOptions serializeUnsupportedClassesUsingBlock:(id(^)(id object))block error:(NSError **)error; +- (NSString *)JSONStringWithOptions:(JKSerializeOptionFlags)serializeOptions serializeUnsupportedClassesUsingBlock:(id(^)(id object))block error:(NSError **)error; +@end + +@interface NSDictionary (JSONKitSerializingBlockAdditions) +- (NSData *)JSONDataWithOptions:(JKSerializeOptionFlags)serializeOptions serializeUnsupportedClassesUsingBlock:(id(^)(id object))block error:(NSError **)error; +- (NSString *)JSONStringWithOptions:(JKSerializeOptionFlags)serializeOptions serializeUnsupportedClassesUsingBlock:(id(^)(id object))block error:(NSError **)error; +@end + +#endif + + +#endif // __OBJC__ + +#endif // _JSONKIT_H_ + +#ifdef __cplusplus +} // extern "C" +#endif diff --git a/JQQY/ThirdParty/AFNetworking/JSONKit.m b/JQQY/ThirdParty/AFNetworking/JSONKit.m new file mode 100755 index 0000000000000000000000000000000000000000..735c5e8793d9b27acff6f1407afecb346dfe7824 --- /dev/null +++ b/JQQY/ThirdParty/AFNetworking/JSONKit.m @@ -0,0 +1,3059 @@ +// +// JSONKit.m +// http://github.com/johnezang/JSONKit +// Dual licensed under either the terms of the BSD License, or alternatively +// under the terms of the Apache License, Version 2.0, as specified below. +// + +/* + Copyright (c) 2011, John Engelhart + + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the Zang Industries nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/* + Copyright 2011 John Engelhart + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + + +/* + Acknowledgments: + + The bulk of the UTF8 / UTF32 conversion and verification comes + from ConvertUTF.[hc]. It has been modified from the original sources. + + The original sources were obtained from http://www.unicode.org/. + However, the web site no longer seems to host the files. Instead, + the Unicode FAQ http://www.unicode.org/faq//utf_bom.html#gen4 + points to International Components for Unicode (ICU) + http://site.icu-project.org/ as an example of how to write a UTF + converter. + + The decision to use the ConvertUTF.[ch] code was made to leverage + "proven" code. Hopefully the local modifications are bug free. + + The code in isValidCodePoint() is derived from the ICU code in + utf.h for the macros U_IS_UNICODE_NONCHAR and U_IS_UNICODE_CHAR. + + From the original ConvertUTF.[ch]: + + * Copyright 2001-2004 Unicode, Inc. + * + * Disclaimer + * + * This source code is provided as is by Unicode, Inc. No claims are + * made as to fitness for any particular purpose. No warranties of any + * kind are expressed or implied. The recipient agrees to determine + * applicability of information provided. If this file has been + * purchased on magnetic or optical media from Unicode, Inc., the + * sole remedy for any claim will be exchange of defective media + * within 90 days of receipt. + * + * Limitations on Rights to Redistribute This Code + * + * Unicode, Inc. hereby grants the right to freely use the information + * supplied in this file in the creation of products supporting the + * Unicode Standard, and to make copies of this file in any form + * for internal or external distribution as long as this notice + * remains attached. + +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#import "JSONKit.h" + +//#include +#include +#include +#include +#include + +//#import +#import +#import +#import +#import +#import +#import +#import + +#ifndef __has_feature +#define __has_feature(x) 0 +#endif + +#ifdef JK_ENABLE_CF_TRANSFER_OWNERSHIP_CALLBACKS +#warning As of JSONKit v1.4, JK_ENABLE_CF_TRANSFER_OWNERSHIP_CALLBACKS is no longer required. It is no longer a valid option. +#endif + +#ifdef __OBJC_GC__ +#error JSONKit does not support Objective-C Garbage Collection +#endif + +#if __has_feature(objc_arc) +#error JSONKit does not support Objective-C Automatic Reference Counting (ARC) +#endif + +// The following checks are really nothing more than sanity checks. +// JSONKit technically has a few problems from a "strictly C99 conforming" standpoint, though they are of the pedantic nitpicking variety. +// In practice, though, for the compilers and architectures we can reasonably expect this code to be compiled for, these pedantic nitpicks aren't really a problem. +// Since we're limited as to what we can do with pre-processor #if checks, these checks are not nearly as through as they should be. + +#if (UINT_MAX != 0xffffffffU) || (INT_MIN != (-0x7fffffff-1)) || (ULLONG_MAX != 0xffffffffffffffffULL) || (LLONG_MIN != (-0x7fffffffffffffffLL-1LL)) +#error JSONKit requires the C 'int' and 'long long' types to be 32 and 64 bits respectively. +#endif + +#if !defined(__LP64__) && ((UINT_MAX != ULONG_MAX) || (INT_MAX != LONG_MAX) || (INT_MIN != LONG_MIN) || (WORD_BIT != LONG_BIT)) +#error JSONKit requires the C 'int' and 'long' types to be the same on 32-bit architectures. +#endif + +// Cocoa / Foundation uses NS*Integer as the type for a lot of arguments. We make sure that NS*Integer is something we are expecting and is reasonably compatible with size_t / ssize_t + +#if (NSUIntegerMax != ULONG_MAX) || (NSIntegerMax != LONG_MAX) || (NSIntegerMin != LONG_MIN) +#error JSONKit requires NSInteger and NSUInteger to be the same size as the C 'long' type. +#endif + +#if (NSUIntegerMax != SIZE_MAX) || (NSIntegerMax != SSIZE_MAX) +#error JSONKit requires NSInteger and NSUInteger to be the same size as the C 'size_t' type. +#endif + + +// For DJB hash. +#define JK_HASH_INIT (1402737925UL) + +// Use __builtin_clz() instead of trailingBytesForUTF8[] table lookup. +#define JK_FAST_TRAILING_BYTES + +// JK_CACHE_SLOTS must be a power of 2. Default size is 1024 slots. +#define JK_CACHE_SLOTS_BITS (10) +#define JK_CACHE_SLOTS (1UL << JK_CACHE_SLOTS_BITS) +// JK_CACHE_PROBES is the number of probe attempts. +#define JK_CACHE_PROBES (4UL) +// JK_INIT_CACHE_AGE must be (1 << AGE) - 1 +#define JK_INIT_CACHE_AGE (0) + +// JK_TOKENBUFFER_SIZE is the default stack size for the temporary buffer used to hold "non-simple" strings (i.e., contains \ escapes) +#define JK_TOKENBUFFER_SIZE (1024UL * 2UL) + +// JK_STACK_OBJS is the default number of spaces reserved on the stack for temporarily storing pointers to Obj-C objects before they can be transferred to a NSArray / NSDictionary. +#define JK_STACK_OBJS (1024UL * 1UL) + +#define JK_JSONBUFFER_SIZE (1024UL * 4UL) +#define JK_UTF8BUFFER_SIZE (1024UL * 16UL) + +#define JK_ENCODE_CACHE_SLOTS (1024UL) + + +#if defined (__GNUC__) && (__GNUC__ >= 4) +#define JK_ATTRIBUTES(attr, ...) __attribute__((attr, ##__VA_ARGS__)) +#define JK_EXPECTED(cond, expect) __builtin_expect((long)(cond), (expect)) +#define JK_EXPECT_T(cond) JK_EXPECTED(cond, 1U) +#define JK_EXPECT_F(cond) JK_EXPECTED(cond, 0U) +#define JK_PREFETCH(ptr) __builtin_prefetch(ptr) +#else // defined (__GNUC__) && (__GNUC__ >= 4) +#define JK_ATTRIBUTES(attr, ...) +#define JK_EXPECTED(cond, expect) (cond) +#define JK_EXPECT_T(cond) (cond) +#define JK_EXPECT_F(cond) (cond) +#define JK_PREFETCH(ptr) +#endif // defined (__GNUC__) && (__GNUC__ >= 4) + +#define JK_STATIC_INLINE static __inline__ JK_ATTRIBUTES(always_inline) +#define JK_ALIGNED(arg) JK_ATTRIBUTES(aligned(arg)) +#define JK_UNUSED_ARG JK_ATTRIBUTES(unused) +#define JK_WARN_UNUSED JK_ATTRIBUTES(warn_unused_result) +#define JK_WARN_UNUSED_CONST JK_ATTRIBUTES(warn_unused_result, const) +#define JK_WARN_UNUSED_PURE JK_ATTRIBUTES(warn_unused_result, pure) +#define JK_WARN_UNUSED_SENTINEL JK_ATTRIBUTES(warn_unused_result, sentinel) +#define JK_NONNULL_ARGS(arg, ...) JK_ATTRIBUTES(nonnull(arg, ##__VA_ARGS__)) +#define JK_WARN_UNUSED_NONNULL_ARGS(arg, ...) JK_ATTRIBUTES(warn_unused_result, nonnull(arg, ##__VA_ARGS__)) +#define JK_WARN_UNUSED_CONST_NONNULL_ARGS(arg, ...) JK_ATTRIBUTES(warn_unused_result, const, nonnull(arg, ##__VA_ARGS__)) +#define JK_WARN_UNUSED_PURE_NONNULL_ARGS(arg, ...) JK_ATTRIBUTES(warn_unused_result, pure, nonnull(arg, ##__VA_ARGS__)) + +#if defined (__GNUC__) && (__GNUC__ >= 4) && (__GNUC_MINOR__ >= 3) +#define JK_ALLOC_SIZE_NON_NULL_ARGS_WARN_UNUSED(as, nn, ...) JK_ATTRIBUTES(warn_unused_result, nonnull(nn, ##__VA_ARGS__), alloc_size(as)) +#else // defined (__GNUC__) && (__GNUC__ >= 4) && (__GNUC_MINOR__ >= 3) +#define JK_ALLOC_SIZE_NON_NULL_ARGS_WARN_UNUSED(as, nn, ...) JK_ATTRIBUTES(warn_unused_result, nonnull(nn, ##__VA_ARGS__)) +#endif // defined (__GNUC__) && (__GNUC__ >= 4) && (__GNUC_MINOR__ >= 3) + + +@class JKArray, JKDictionaryEnumerator, JKDictionary; + +enum { + JSONNumberStateStart = 0, + JSONNumberStateFinished = 1, + JSONNumberStateError = 2, + JSONNumberStateWholeNumberStart = 3, + JSONNumberStateWholeNumberMinus = 4, + JSONNumberStateWholeNumberZero = 5, + JSONNumberStateWholeNumber = 6, + JSONNumberStatePeriod = 7, + JSONNumberStateFractionalNumberStart = 8, + JSONNumberStateFractionalNumber = 9, + JSONNumberStateExponentStart = 10, + JSONNumberStateExponentPlusMinus = 11, + JSONNumberStateExponent = 12, +}; + +enum { + JSONStringStateStart = 0, + JSONStringStateParsing = 1, + JSONStringStateFinished = 2, + JSONStringStateError = 3, + JSONStringStateEscape = 4, + JSONStringStateEscapedUnicode1 = 5, + JSONStringStateEscapedUnicode2 = 6, + JSONStringStateEscapedUnicode3 = 7, + JSONStringStateEscapedUnicode4 = 8, + JSONStringStateEscapedUnicodeSurrogate1 = 9, + JSONStringStateEscapedUnicodeSurrogate2 = 10, + JSONStringStateEscapedUnicodeSurrogate3 = 11, + JSONStringStateEscapedUnicodeSurrogate4 = 12, + JSONStringStateEscapedNeedEscapeForSurrogate = 13, + JSONStringStateEscapedNeedEscapedUForSurrogate = 14, +}; + +enum { + JKParseAcceptValue = (1 << 0), + JKParseAcceptComma = (1 << 1), + JKParseAcceptEnd = (1 << 2), + JKParseAcceptValueOrEnd = (JKParseAcceptValue | JKParseAcceptEnd), + JKParseAcceptCommaOrEnd = (JKParseAcceptComma | JKParseAcceptEnd), +}; + +enum { + JKClassUnknown = 0, + JKClassString = 1, + JKClassNumber = 2, + JKClassArray = 3, + JKClassDictionary = 4, + JKClassNull = 5, +}; + +enum { + JKManagedBufferOnStack = 1, + JKManagedBufferOnHeap = 2, + JKManagedBufferLocationMask = (0x3), + JKManagedBufferLocationShift = (0), + + JKManagedBufferMustFree = (1 << 2), +}; +typedef JKFlags JKManagedBufferFlags; + +enum { + JKObjectStackOnStack = 1, + JKObjectStackOnHeap = 2, + JKObjectStackLocationMask = (0x3), + JKObjectStackLocationShift = (0), + + JKObjectStackMustFree = (1 << 2), +}; +typedef JKFlags JKObjectStackFlags; + +enum { + JKTokenTypeInvalid = 0, + JKTokenTypeNumber = 1, + JKTokenTypeString = 2, + JKTokenTypeObjectBegin = 3, + JKTokenTypeObjectEnd = 4, + JKTokenTypeArrayBegin = 5, + JKTokenTypeArrayEnd = 6, + JKTokenTypeSeparator = 7, + JKTokenTypeComma = 8, + JKTokenTypeTrue = 9, + JKTokenTypeFalse = 10, + JKTokenTypeNull = 11, + JKTokenTypeWhiteSpace = 12, +}; +typedef NSUInteger JKTokenType; + +// These are prime numbers to assist with hash slot probing. +enum { + JKValueTypeNone = 0, + JKValueTypeString = 5, + JKValueTypeLongLong = 7, + JKValueTypeUnsignedLongLong = 11, + JKValueTypeDouble = 13, +}; +typedef NSUInteger JKValueType; + +enum { + JKEncodeOptionAsData = 1, + JKEncodeOptionAsString = 2, + JKEncodeOptionAsTypeMask = 0x7, + JKEncodeOptionCollectionObj = (1 << 3), + JKEncodeOptionStringObj = (1 << 4), + JKEncodeOptionStringObjTrimQuotes = (1 << 5), + +}; +typedef NSUInteger JKEncodeOptionType; + +typedef NSUInteger JKHash; + +typedef struct JKTokenCacheItem JKTokenCacheItem; +typedef struct JKTokenCache JKTokenCache; +typedef struct JKTokenValue JKTokenValue; +typedef struct JKParseToken JKParseToken; +typedef struct JKPtrRange JKPtrRange; +typedef struct JKObjectStack JKObjectStack; +typedef struct JKBuffer JKBuffer; +typedef struct JKConstBuffer JKConstBuffer; +typedef struct JKConstPtrRange JKConstPtrRange; +typedef struct JKRange JKRange; +typedef struct JKManagedBuffer JKManagedBuffer; +typedef struct JKFastClassLookup JKFastClassLookup; +typedef struct JKEncodeCache JKEncodeCache; +typedef struct JKEncodeState JKEncodeState; +typedef struct JKObjCImpCache JKObjCImpCache; +typedef struct JKHashTableEntry JKHashTableEntry; + +typedef id (*NSNumberAllocImp)(id receiver, SEL selector); +typedef id (*NSNumberInitWithUnsignedLongLongImp)(id receiver, SEL selector, unsigned long long value); +typedef id (*JKClassFormatterIMP)(id receiver, SEL selector, id object); +#ifdef __BLOCKS__ +typedef id (^JKClassFormatterBlock)(id formatObject); +#endif + + +struct JKPtrRange { + unsigned char *ptr; + size_t length; +}; + +struct JKConstPtrRange { + const unsigned char *ptr; + size_t length; +}; + +struct JKRange { + size_t location, length; +}; + +struct JKManagedBuffer { + JKPtrRange bytes; + JKManagedBufferFlags flags; + size_t roundSizeUpToMultipleOf; +}; + +struct JKObjectStack { + void **objects, **keys; + CFHashCode *cfHashes; + size_t count, index, roundSizeUpToMultipleOf; + JKObjectStackFlags flags; +}; + +struct JKBuffer { + JKPtrRange bytes; +}; + +struct JKConstBuffer { + JKConstPtrRange bytes; +}; + +struct JKTokenValue { + JKConstPtrRange ptrRange; + JKValueType type; + JKHash hash; + union { + long long longLongValue; + unsigned long long unsignedLongLongValue; + double doubleValue; + } number; + JKTokenCacheItem *cacheItem; +}; + +struct JKParseToken { + JKConstPtrRange tokenPtrRange; + JKTokenType type; + JKTokenValue value; + JKManagedBuffer tokenBuffer; +}; + +struct JKTokenCacheItem { + void *object; + JKHash hash; + CFHashCode cfHash; + size_t size; + unsigned char *bytes; + JKValueType type; +}; + +struct JKTokenCache { + JKTokenCacheItem *items; + size_t count; + unsigned int prng_lfsr; + unsigned char age[JK_CACHE_SLOTS]; +}; + +struct JKObjCImpCache { + Class NSNumberClass; + NSNumberAllocImp NSNumberAlloc; + NSNumberInitWithUnsignedLongLongImp NSNumberInitWithUnsignedLongLong; +}; + +struct JKParseState { + JKParseOptionFlags parseOptionFlags; + JKConstBuffer stringBuffer; + size_t atIndex, lineNumber, lineStartIndex; + size_t prev_atIndex, prev_lineNumber, prev_lineStartIndex; + JKParseToken token; + JKObjectStack objectStack; + JKTokenCache cache; + JKObjCImpCache objCImpCache; + NSError *error; + int errorIsPrev; + BOOL mutableCollections; +}; + +struct JKFastClassLookup { + void *stringClass; + void *numberClass; + void *arrayClass; + void *dictionaryClass; + void *nullClass; +}; + +struct JKEncodeCache { + id object; + size_t offset; + size_t length; +}; + +struct JKEncodeState { + JKManagedBuffer utf8ConversionBuffer; + JKManagedBuffer stringBuffer; + size_t atIndex; + JKFastClassLookup fastClassLookup; + JKEncodeCache cache[JK_ENCODE_CACHE_SLOTS]; + JKSerializeOptionFlags serializeOptionFlags; + JKEncodeOptionType encodeOption; + size_t depth; + NSError *error; + id classFormatterDelegate; + SEL classFormatterSelector; + JKClassFormatterIMP classFormatterIMP; +#ifdef __BLOCKS__ + JKClassFormatterBlock classFormatterBlock; +#endif +}; + +// This is a JSONKit private class. +@interface JKSerializer : NSObject { + JKEncodeState *encodeState; +} + +#ifdef __BLOCKS__ +#define JKSERIALIZER_BLOCKS_PROTO id(^)(id object) +#else +#define JKSERIALIZER_BLOCKS_PROTO id +#endif + ++ (id)serializeObject:(id)object options:(JKSerializeOptionFlags)optionFlags encodeOption:(JKEncodeOptionType)encodeOption block:(JKSERIALIZER_BLOCKS_PROTO)block delegate:(id)delegate selector:(SEL)selector error:(NSError **)error; +- (id)serializeObject:(id)object options:(JKSerializeOptionFlags)optionFlags encodeOption:(JKEncodeOptionType)encodeOption block:(JKSERIALIZER_BLOCKS_PROTO)block delegate:(id)delegate selector:(SEL)selector error:(NSError **)error; +- (void)releaseState; + +@end + +struct JKHashTableEntry { + NSUInteger keyHash; + id key, object; +}; + + +typedef uint32_t UTF32; /* at least 32 bits */ +typedef uint16_t UTF16; /* at least 16 bits */ +typedef uint8_t UTF8; /* typically 8 bits */ + +typedef enum { + conversionOK, /* conversion successful */ + sourceExhausted, /* partial character in source, but hit end */ + targetExhausted, /* insuff. room in target for conversion */ + sourceIllegal /* source sequence is illegal/malformed */ +} ConversionResult; + +#define UNI_REPLACEMENT_CHAR (UTF32)0x0000FFFD +#define UNI_MAX_BMP (UTF32)0x0000FFFF +#define UNI_MAX_UTF16 (UTF32)0x0010FFFF +#define UNI_MAX_UTF32 (UTF32)0x7FFFFFFF +#define UNI_MAX_LEGAL_UTF32 (UTF32)0x0010FFFF +#define UNI_SUR_HIGH_START (UTF32)0xD800 +#define UNI_SUR_HIGH_END (UTF32)0xDBFF +#define UNI_SUR_LOW_START (UTF32)0xDC00 +#define UNI_SUR_LOW_END (UTF32)0xDFFF + + +#if !defined(JK_FAST_TRAILING_BYTES) +static const char trailingBytesForUTF8[256] = { + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5 +}; +#endif + +static const UTF32 offsetsFromUTF8[6] = { 0x00000000UL, 0x00003080UL, 0x000E2080UL, 0x03C82080UL, 0xFA082080UL, 0x82082080UL }; +static const UTF8 firstByteMark[7] = { 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC }; + +#define JK_AT_STRING_PTR(x) (&((x)->stringBuffer.bytes.ptr[(x)->atIndex])) +#define JK_END_STRING_PTR(x) (&((x)->stringBuffer.bytes.ptr[(x)->stringBuffer.bytes.length])) + + +static JKArray *_JKArrayCreate(id *objects, NSUInteger count, BOOL mutableCollection); +static void _JKArrayInsertObjectAtIndex(JKArray *array, id newObject, NSUInteger objectIndex); +static void _JKArrayReplaceObjectAtIndexWithObject(JKArray *array, NSUInteger objectIndex, id newObject); +static void _JKArrayRemoveObjectAtIndex(JKArray *array, NSUInteger objectIndex); + + +static NSUInteger _JKDictionaryCapacityForCount(NSUInteger count); +static JKDictionary *_JKDictionaryCreate(id *keys, NSUInteger *keyHashes, id *objects, NSUInteger count, BOOL mutableCollection); +static JKHashTableEntry *_JKDictionaryHashEntry(JKDictionary *dictionary); +static NSUInteger _JKDictionaryCapacity(JKDictionary *dictionary); +static void _JKDictionaryResizeIfNeccessary(JKDictionary *dictionary); +static void _JKDictionaryRemoveObjectWithEntry(JKDictionary *dictionary, JKHashTableEntry *entry); +static void _JKDictionaryAddObject(JKDictionary *dictionary, NSUInteger keyHash, id key, id object); +static JKHashTableEntry *_JKDictionaryHashTableEntryForKey(JKDictionary *dictionary, id aKey); + + +static void _JSONDecoderCleanup(JSONDecoder *decoder); + +static id _NSStringObjectFromJSONString(NSString *jsonString, JKParseOptionFlags parseOptionFlags, NSError **error, BOOL mutableCollection); + + +static void jk_managedBuffer_release(JKManagedBuffer *managedBuffer); +static void jk_managedBuffer_setToStackBuffer(JKManagedBuffer *managedBuffer, unsigned char *ptr, size_t length); +static unsigned char *jk_managedBuffer_resize(JKManagedBuffer *managedBuffer, size_t newSize); +static void jk_objectStack_release(JKObjectStack *objectStack); +static void jk_objectStack_setToStackBuffer(JKObjectStack *objectStack, void **objects, void **keys, CFHashCode *cfHashes, size_t count); +static int jk_objectStack_resize(JKObjectStack *objectStack, size_t newCount); + +static void jk_error(JKParseState *parseState, NSString *format, ...); +static int jk_parse_string(JKParseState *parseState); +static int jk_parse_number(JKParseState *parseState); +static size_t jk_parse_is_newline(JKParseState *parseState, const unsigned char *atCharacterPtr); +JK_STATIC_INLINE int jk_parse_skip_newline(JKParseState *parseState); +JK_STATIC_INLINE void jk_parse_skip_whitespace(JKParseState *parseState); +static int jk_parse_next_token(JKParseState *parseState); +static void jk_error_parse_accept_or3(JKParseState *parseState, int state, NSString *or1String, NSString *or2String, NSString *or3String); +static void *jk_create_dictionary(JKParseState *parseState, size_t startingObjectIndex); +static void *jk_parse_dictionary(JKParseState *parseState); +static void *jk_parse_array(JKParseState *parseState); +static void *jk_object_for_token(JKParseState *parseState); +static void *jk_cachedObjects(JKParseState *parseState); +JK_STATIC_INLINE void jk_cache_age(JKParseState *parseState); +JK_STATIC_INLINE void jk_set_parsed_token(JKParseState *parseState, const unsigned char *ptr, size_t length, JKTokenType type, size_t advanceBy); + + +static void jk_encode_error(JKEncodeState *encodeState, NSString *format, ...); +static int jk_encode_printf(JKEncodeState *encodeState, JKEncodeCache *cacheSlot, size_t startingAtIndex, id object, const char *format, ...); +static int jk_encode_write(JKEncodeState *encodeState, JKEncodeCache *cacheSlot, size_t startingAtIndex, id object, const char *format); +static int jk_encode_writePrettyPrintWhiteSpace(JKEncodeState *encodeState); +static int jk_encode_write1slow(JKEncodeState *encodeState, ssize_t depthChange, const char *format); +static int jk_encode_write1fast(JKEncodeState *encodeState, ssize_t depthChange JK_UNUSED_ARG, const char *format); +static int jk_encode_writen(JKEncodeState *encodeState, JKEncodeCache *cacheSlot, size_t startingAtIndex, id object, const char *format, size_t length); +JK_STATIC_INLINE JKHash jk_encode_object_hash(void *objectPtr); +JK_STATIC_INLINE void jk_encode_updateCache(JKEncodeState *encodeState, JKEncodeCache *cacheSlot, size_t startingAtIndex, id object); +static int jk_encode_add_atom_to_buffer(JKEncodeState *encodeState, void *objectPtr); + +#define jk_encode_write1(es, dc, f) (JK_EXPECT_F(_jk_encode_prettyPrint) ? jk_encode_write1slow(es, dc, f) : jk_encode_write1fast(es, dc, f)) + + +JK_STATIC_INLINE size_t jk_min(size_t a, size_t b); +JK_STATIC_INLINE size_t jk_max(size_t a, size_t b); +JK_STATIC_INLINE JKHash calculateHash(JKHash currentHash, unsigned char c); + +// JSONKit v1.4 used both a JKArray : NSArray and JKMutableArray : NSMutableArray, and the same for the dictionary collection type. +// However, Louis Gerbarg (via cocoa-dev) pointed out that Cocoa / Core Foundation actually implements only a single class that inherits from the +// mutable version, and keeps an ivar bit for whether or not that instance is mutable. This means that the immutable versions of the collection +// classes receive the mutating methods, but this is handled by having those methods throw an exception when the ivar bit is set to immutable. +// We adopt the same strategy here. It's both cleaner and gets rid of the method swizzling hackery used in JSONKit v1.4. + + +// This is a workaround for issue #23 https://github.com/johnezang/JSONKit/pull/23 +// Basically, there seem to be a problem with using +load in static libraries on iOS. However, __attribute__ ((constructor)) does work correctly. +// Since we do not require anything "special" that +load provides, and we can accomplish the same thing using __attribute__ ((constructor)), the +load logic was moved here. + +static Class _JKArrayClass = NULL; +static size_t _JKArrayInstanceSize = 0UL; +static Class _JKDictionaryClass = NULL; +static size_t _JKDictionaryInstanceSize = 0UL; + +// For JSONDecoder... +static Class _jk_NSNumberClass = NULL; +static NSNumberAllocImp _jk_NSNumberAllocImp = NULL; +static NSNumberInitWithUnsignedLongLongImp _jk_NSNumberInitWithUnsignedLongLongImp = NULL; + +extern void jk_collectionClassLoadTimeInitialization(void) __attribute__ ((constructor)); + +void jk_collectionClassLoadTimeInitialization(void) { + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; // Though technically not required, the run time environment at load time initialization may be less than ideal. + + _JKArrayClass = objc_getClass("JKArray"); + _JKArrayInstanceSize = jk_max(16UL, class_getInstanceSize(_JKArrayClass)); + + _JKDictionaryClass = objc_getClass("JKDictionary"); + _JKDictionaryInstanceSize = jk_max(16UL, class_getInstanceSize(_JKDictionaryClass)); + + // For JSONDecoder... + _jk_NSNumberClass = [NSNumber class]; + _jk_NSNumberAllocImp = (NSNumberAllocImp)[NSNumber methodForSelector:@selector(alloc)]; + + // Hacktacular. Need to do it this way due to the nature of class clusters. + id temp_NSNumber = [NSNumber alloc]; + _jk_NSNumberInitWithUnsignedLongLongImp = (NSNumberInitWithUnsignedLongLongImp)[temp_NSNumber methodForSelector:@selector(initWithUnsignedLongLong:)]; + [[temp_NSNumber init] release]; + temp_NSNumber = NULL; + + [pool release]; pool = NULL; +} + + +#pragma mark - +@interface JKArray : NSMutableArray { + id *objects; + NSUInteger count, capacity, mutations; +} +@end + +@implementation JKArray + ++ (id)allocWithZone:(NSZone *)zone +{ +#pragma unused(zone) + [NSException raise:NSInvalidArgumentException format:@"*** - [%@ %@]: The %@ class is private to JSONKit and should not be used in this fashion.", NSStringFromClass([self class]), NSStringFromSelector(_cmd), NSStringFromClass([self class])]; + return(NULL); +} + +static JKArray *_JKArrayCreate(id *objects, NSUInteger count, BOOL mutableCollection) { + NSCParameterAssert((objects != NULL) && (_JKArrayClass != NULL) && (_JKArrayInstanceSize > 0UL)); + JKArray *array = NULL; + if(JK_EXPECT_T((array = (JKArray *)calloc(1UL, _JKArrayInstanceSize)) != NULL)) { // Directly allocate the JKArray instance via calloc. + object_setClass(array, _JKArrayClass); + if((array = [array init]) == NULL) { return(NULL); } + array->capacity = count; + array->count = count; + if(JK_EXPECT_F((array->objects = (id *)malloc(sizeof(id) * array->capacity)) == NULL)) { [array autorelease]; return(NULL); } + memcpy(array->objects, objects, array->capacity * sizeof(id)); + array->mutations = (mutableCollection == NO) ? 0UL : 1UL; + } + return(array); +} + +// Note: The caller is responsible for -retaining the object that is to be added. +static void _JKArrayInsertObjectAtIndex(JKArray *array, id newObject, NSUInteger objectIndex) { + NSCParameterAssert((array != NULL) && (array->objects != NULL) && (array->count <= array->capacity) && (objectIndex <= array->count) && (newObject != NULL)); + if(!((array != NULL) && (array->objects != NULL) && (objectIndex <= array->count) && (newObject != NULL))) { [newObject autorelease]; return; } + if((array->count + 1UL) >= array->capacity) { + id *newObjects = NULL; + if((newObjects = (id *)realloc(array->objects, sizeof(id) * (array->capacity + 16UL))) == NULL) { [NSException raise:NSMallocException format:@"Unable to resize objects array."]; } + array->objects = newObjects; + array->capacity += 16UL; + memset(&array->objects[array->count], 0, sizeof(id) * (array->capacity - array->count)); + } + array->count++; + if((objectIndex + 1UL) < array->count) { memmove(&array->objects[objectIndex + 1UL], &array->objects[objectIndex], sizeof(id) * ((array->count - 1UL) - objectIndex)); array->objects[objectIndex] = NULL; } + array->objects[objectIndex] = newObject; +} + +// Note: The caller is responsible for -retaining the object that is to be added. +static void _JKArrayReplaceObjectAtIndexWithObject(JKArray *array, NSUInteger objectIndex, id newObject) { + NSCParameterAssert((array != NULL) && (array->objects != NULL) && (array->count <= array->capacity) && (objectIndex < array->count) && (array->objects[objectIndex] != NULL) && (newObject != NULL)); + if(!((array != NULL) && (array->objects != NULL) && (objectIndex < array->count) && (array->objects[objectIndex] != NULL) && (newObject != NULL))) { [newObject autorelease]; return; } + CFRelease(array->objects[objectIndex]); + array->objects[objectIndex] = NULL; + array->objects[objectIndex] = newObject; +} + +static void _JKArrayRemoveObjectAtIndex(JKArray *array, NSUInteger objectIndex) { + NSCParameterAssert((array != NULL) && (array->objects != NULL) && (array->count > 0UL) && (array->count <= array->capacity) && (objectIndex < array->count) && (array->objects[objectIndex] != NULL)); + if(!((array != NULL) && (array->objects != NULL) && (array->count > 0UL) && (array->count <= array->capacity) && (objectIndex < array->count) && (array->objects[objectIndex] != NULL))) { return; } + CFRelease(array->objects[objectIndex]); + array->objects[objectIndex] = NULL; + if((objectIndex + 1UL) < array->count) { memmove(&array->objects[objectIndex], &array->objects[objectIndex + 1UL], sizeof(id) * ((array->count - 1UL) - objectIndex)); array->objects[array->count - 1UL] = NULL; } + array->count--; +} + +- (void)dealloc +{ + if(JK_EXPECT_T(objects != NULL)) { + NSUInteger atObject = 0UL; + for(atObject = 0UL; atObject < count; atObject++) { if(JK_EXPECT_T(objects[atObject] != NULL)) { CFRelease(objects[atObject]); objects[atObject] = NULL; } } + free(objects); objects = NULL; + } + + [super dealloc]; +} + +- (NSUInteger)count +{ + NSParameterAssert((objects != NULL) && (count <= capacity)); + return(count); +} + +- (void)getObjects:(id *)objectsPtr range:(NSRange)range +{ + NSParameterAssert((objects != NULL) && (count <= capacity)); + if((objectsPtr == NULL) && (NSMaxRange(range) > 0UL)) { [NSException raise:NSRangeException format:@"*** -[%@ %@]: pointer to objects array is NULL but range length is %lu", NSStringFromClass([self class]), NSStringFromSelector(_cmd), (unsigned long)NSMaxRange(range)]; } + if((range.location > count) || (NSMaxRange(range) > count)) { [NSException raise:NSRangeException format:@"*** -[%@ %@]: index (%lu) beyond bounds (%lu)", NSStringFromClass([self class]), NSStringFromSelector(_cmd), (unsigned long)NSMaxRange(range), (unsigned long)count]; } + memcpy(objectsPtr, objects + range.location, range.length * sizeof(id)); +} + +- (id)objectAtIndex:(NSUInteger)objectIndex +{ + if(objectIndex >= count) { [NSException raise:NSRangeException format:@"*** -[%@ %@]: index (%lu) beyond bounds (%lu)", NSStringFromClass([self class]), NSStringFromSelector(_cmd), (unsigned long)objectIndex, (unsigned long)count]; } + NSParameterAssert((objects != NULL) && (count <= capacity) && (objects[objectIndex] != NULL)); + return(objects[objectIndex]); +} + +- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(id *)stackbuf count:(NSUInteger)len +{ + NSParameterAssert((state != NULL) && (stackbuf != NULL) && (len > 0UL) && (objects != NULL) && (count <= capacity)); + if(JK_EXPECT_F(state->state == 0UL)) { state->mutationsPtr = (unsigned long *)&mutations; state->itemsPtr = stackbuf; } + if(JK_EXPECT_F(state->state >= count)) { return(0UL); } + + NSUInteger enumeratedCount = 0UL; + while(JK_EXPECT_T(enumeratedCount < len) && JK_EXPECT_T(state->state < count)) { NSParameterAssert(objects[state->state] != NULL); stackbuf[enumeratedCount++] = objects[state->state++]; } + + return(enumeratedCount); +} + +- (void)insertObject:(id)anObject atIndex:(NSUInteger)objectIndex +{ + if(mutations == 0UL) { [NSException raise:NSInternalInconsistencyException format:@"*** -[%@ %@]: mutating method sent to immutable object", NSStringFromClass([self class]), NSStringFromSelector(_cmd)]; } + if(anObject == NULL) { [NSException raise:NSInvalidArgumentException format:@"*** -[%@ %@]: attempt to insert nil", NSStringFromClass([self class]), NSStringFromSelector(_cmd)]; } + if(objectIndex > count) { [NSException raise:NSRangeException format:@"*** -[%@ %@]: index (%lu) beyond bounds (%lu)", NSStringFromClass([self class]), NSStringFromSelector(_cmd), (unsigned long)objectIndex, count + 1UL]; } +#ifdef __clang_analyzer__ + [anObject retain]; // Stupid clang analyzer... Issue #19. +#else + anObject = [anObject retain]; +#endif + _JKArrayInsertObjectAtIndex(self, anObject, objectIndex); + mutations = (mutations == NSUIntegerMax) ? 1UL : mutations + 1UL; +} + +- (void)removeObjectAtIndex:(NSUInteger)objectIndex +{ + if(mutations == 0UL) { [NSException raise:NSInternalInconsistencyException format:@"*** -[%@ %@]: mutating method sent to immutable object", NSStringFromClass([self class]), NSStringFromSelector(_cmd)]; } + if(objectIndex >= count) { [NSException raise:NSRangeException format:@"*** -[%@ %@]: index (%lu) beyond bounds (%lu)", NSStringFromClass([self class]), NSStringFromSelector(_cmd), (unsigned long)objectIndex, (unsigned long)count]; } + _JKArrayRemoveObjectAtIndex(self, objectIndex); + mutations = (mutations == NSUIntegerMax) ? 1UL : mutations + 1UL; +} + +- (void)replaceObjectAtIndex:(NSUInteger)objectIndex withObject:(id)anObject +{ + if(mutations == 0UL) { [NSException raise:NSInternalInconsistencyException format:@"*** -[%@ %@]: mutating method sent to immutable object", NSStringFromClass([self class]), NSStringFromSelector(_cmd)]; } + if(anObject == NULL) { [NSException raise:NSInvalidArgumentException format:@"*** -[%@ %@]: attempt to insert nil", NSStringFromClass([self class]), NSStringFromSelector(_cmd)]; } + if(objectIndex >= count) { [NSException raise:NSRangeException format:@"*** -[%@ %@]: index (%lu) beyond bounds (%lu)", NSStringFromClass([self class]), NSStringFromSelector(_cmd), (unsigned long)objectIndex, (unsigned long)count]; } +#ifdef __clang_analyzer__ + [anObject retain]; // Stupid clang analyzer... Issue #19. +#else + anObject = [anObject retain]; +#endif + _JKArrayReplaceObjectAtIndexWithObject(self, objectIndex, anObject); + mutations = (mutations == NSUIntegerMax) ? 1UL : mutations + 1UL; +} + +- (id)copyWithZone:(NSZone *)zone +{ + NSParameterAssert((objects != NULL) && (count <= capacity)); + return((mutations == 0UL) ? [self retain] : [(NSArray *)[NSArray allocWithZone:zone] initWithObjects:objects count:count]); +} + +- (id)mutableCopyWithZone:(NSZone *)zone +{ + NSParameterAssert((objects != NULL) && (count <= capacity)); + return([(NSMutableArray *)[NSMutableArray allocWithZone:zone] initWithObjects:objects count:count]); +} + +@end + + +#pragma mark - +@interface JKDictionaryEnumerator : NSEnumerator { + id collection; + NSUInteger nextObject; +} + +- (id)initWithJKDictionary:(JKDictionary *)initDictionary; +- (NSArray *)allObjects; +- (id)nextObject; + +@end + +@implementation JKDictionaryEnumerator + +- (id)initWithJKDictionary:(JKDictionary *)initDictionary +{ + NSParameterAssert(initDictionary != NULL); + if((self = [super init]) == NULL) { return(NULL); } + if((collection = (id)CFRetain(initDictionary)) == NULL) { [self autorelease]; return(NULL); } + return(self); +} + +- (void)dealloc +{ + if(collection != NULL) { CFRelease(collection); collection = NULL; } + [super dealloc]; +} + +- (NSArray *)allObjects +{ + NSParameterAssert(collection != NULL); + NSUInteger count = [(NSDictionary *)collection count], atObject = 0UL; + id objects[count]; + + while((objects[atObject] = [self nextObject]) != NULL) { NSParameterAssert(atObject < count); atObject++; } + + return([NSArray arrayWithObjects:objects count:atObject]); +} + +- (id)nextObject +{ + NSParameterAssert((collection != NULL) && (_JKDictionaryHashEntry(collection) != NULL)); + JKHashTableEntry *entry = _JKDictionaryHashEntry(collection); + NSUInteger capacity = _JKDictionaryCapacity(collection); + id returnObject = NULL; + + if(entry != NULL) { while((nextObject < capacity) && ((returnObject = entry[nextObject++].key) == NULL)) { /* ... */ } } + + return(returnObject); +} + +@end + +#pragma mark - +@interface JKDictionary : NSMutableDictionary { + NSUInteger count, capacity, mutations; + JKHashTableEntry *entry; +} +@end + +@implementation JKDictionary + ++ (id)allocWithZone:(NSZone *)zone +{ +#pragma unused(zone) + [NSException raise:NSInvalidArgumentException format:@"*** - [%@ %@]: The %@ class is private to JSONKit and should not be used in this fashion.", NSStringFromClass([self class]), NSStringFromSelector(_cmd), NSStringFromClass([self class])]; + return(NULL); +} + +// These values are taken from Core Foundation CF-550 CFBasicHash.m. As a bonus, they align very well with our JKHashTableEntry struct too. +static const NSUInteger jk_dictionaryCapacities[] = { + 0UL, 3UL, 7UL, 13UL, 23UL, 41UL, 71UL, 127UL, 191UL, 251UL, 383UL, 631UL, 1087UL, 1723UL, + 2803UL, 4523UL, 7351UL, 11959UL, 19447UL, 31231UL, 50683UL, 81919UL, 132607UL, + 214519UL, 346607UL, 561109UL, 907759UL, 1468927UL, 2376191UL, 3845119UL, + 6221311UL, 10066421UL, 16287743UL, 26354171UL, 42641881UL, 68996069UL, + 111638519UL, 180634607UL, 292272623UL, 472907251UL +}; + +static NSUInteger _JKDictionaryCapacityForCount(NSUInteger count) { + NSUInteger bottom = 0UL, top = sizeof(jk_dictionaryCapacities) / sizeof(NSUInteger), mid = 0UL, tableSize = lround(floor((count) * 1.33)); + while(top > bottom) { mid = (top + bottom) / 2UL; if(jk_dictionaryCapacities[mid] < tableSize) { bottom = mid + 1UL; } else { top = mid; } } + return(jk_dictionaryCapacities[bottom]); +} + +static void _JKDictionaryResizeIfNeccessary(JKDictionary *dictionary) { + NSCParameterAssert((dictionary != NULL) && (dictionary->entry != NULL) && (dictionary->count <= dictionary->capacity)); + + NSUInteger capacityForCount = 0UL; + if(dictionary->capacity < (capacityForCount = _JKDictionaryCapacityForCount(dictionary->count + 1UL))) { // resize + NSUInteger oldCapacity = dictionary->capacity; +#ifndef NS_BLOCK_ASSERTIONS + NSUInteger oldCount = dictionary->count; +#endif + JKHashTableEntry *oldEntry = dictionary->entry; + if(JK_EXPECT_F((dictionary->entry = (JKHashTableEntry *)calloc(1UL, sizeof(JKHashTableEntry) * capacityForCount)) == NULL)) { [NSException raise:NSMallocException format:@"Unable to allocate memory for hash table."]; } + dictionary->capacity = capacityForCount; + dictionary->count = 0UL; + + NSUInteger idx = 0UL; + for(idx = 0UL; idx < oldCapacity; idx++) { if(oldEntry[idx].key != NULL) { _JKDictionaryAddObject(dictionary, oldEntry[idx].keyHash, oldEntry[idx].key, oldEntry[idx].object); oldEntry[idx].keyHash = 0UL; oldEntry[idx].key = NULL; oldEntry[idx].object = NULL; } } + NSCParameterAssert((oldCount == dictionary->count)); + free(oldEntry); oldEntry = NULL; + } +} + +static JKDictionary *_JKDictionaryCreate(id *keys, NSUInteger *keyHashes, id *objects, NSUInteger count, BOOL mutableCollection) { + NSCParameterAssert((keys != NULL) && (keyHashes != NULL) && (objects != NULL) && (_JKDictionaryClass != NULL) && (_JKDictionaryInstanceSize > 0UL)); + JKDictionary *dictionary = NULL; + if(JK_EXPECT_T((dictionary = (JKDictionary *)calloc(1UL, _JKDictionaryInstanceSize)) != NULL)) { // Directly allocate the JKDictionary instance via calloc. + object_setClass(dictionary, _JKDictionaryClass); + if((dictionary = [dictionary init]) == NULL) { return(NULL); } + dictionary->capacity = _JKDictionaryCapacityForCount(count); + dictionary->count = 0UL; + + if(JK_EXPECT_F((dictionary->entry = (JKHashTableEntry *)calloc(1UL, sizeof(JKHashTableEntry) * dictionary->capacity)) == NULL)) { [dictionary autorelease]; return(NULL); } + + NSUInteger idx = 0UL; + for(idx = 0UL; idx < count; idx++) { _JKDictionaryAddObject(dictionary, keyHashes[idx], keys[idx], objects[idx]); } + + dictionary->mutations = (mutableCollection == NO) ? 0UL : 1UL; + } + return(dictionary); +} + +- (void)dealloc +{ + if(JK_EXPECT_T(entry != NULL)) { + NSUInteger atEntry = 0UL; + for(atEntry = 0UL; atEntry < capacity; atEntry++) { + if(JK_EXPECT_T(entry[atEntry].key != NULL)) { CFRelease(entry[atEntry].key); entry[atEntry].key = NULL; } + if(JK_EXPECT_T(entry[atEntry].object != NULL)) { CFRelease(entry[atEntry].object); entry[atEntry].object = NULL; } + } + + free(entry); entry = NULL; + } + + [super dealloc]; +} + +static JKHashTableEntry *_JKDictionaryHashEntry(JKDictionary *dictionary) { + NSCParameterAssert(dictionary != NULL); + return(dictionary->entry); +} + +static NSUInteger _JKDictionaryCapacity(JKDictionary *dictionary) { + NSCParameterAssert(dictionary != NULL); + return(dictionary->capacity); +} + +static void _JKDictionaryRemoveObjectWithEntry(JKDictionary *dictionary, JKHashTableEntry *entry) { + NSCParameterAssert((dictionary != NULL) && (entry != NULL) && (entry->key != NULL) && (entry->object != NULL) && (dictionary->count > 0UL) && (dictionary->count <= dictionary->capacity)); + CFRelease(entry->key); entry->key = NULL; + CFRelease(entry->object); entry->object = NULL; + entry->keyHash = 0UL; + dictionary->count--; + // In order for certain invariants that are used to speed up the search for a particular key, we need to "re-add" all the entries in the hash table following this entry until we hit a NULL entry. + NSUInteger removeIdx = entry - dictionary->entry, idx = 0UL; + NSCParameterAssert((removeIdx < dictionary->capacity)); + for(idx = 0UL; idx < dictionary->capacity; idx++) { + NSUInteger entryIdx = (removeIdx + idx + 1UL) % dictionary->capacity; + JKHashTableEntry *atEntry = &dictionary->entry[entryIdx]; + if(atEntry->key == NULL) { break; } + NSUInteger keyHash = atEntry->keyHash; + id key = atEntry->key, object = atEntry->object; + NSCParameterAssert(object != NULL); + atEntry->keyHash = 0UL; + atEntry->key = NULL; + atEntry->object = NULL; + NSUInteger addKeyEntry = keyHash % dictionary->capacity, addIdx = 0UL; + for(addIdx = 0UL; addIdx < dictionary->capacity; addIdx++) { + JKHashTableEntry *atAddEntry = &dictionary->entry[((addKeyEntry + addIdx) % dictionary->capacity)]; + if(JK_EXPECT_T(atAddEntry->key == NULL)) { NSCParameterAssert((atAddEntry->keyHash == 0UL) && (atAddEntry->object == NULL)); atAddEntry->key = key; atAddEntry->object = object; atAddEntry->keyHash = keyHash; break; } + } + } +} + +static void _JKDictionaryAddObject(JKDictionary *dictionary, NSUInteger keyHash, id key, id object) { + NSCParameterAssert((dictionary != NULL) && (key != NULL) && (object != NULL) && (dictionary->count < dictionary->capacity) && (dictionary->entry != NULL)); + NSUInteger keyEntry = keyHash % dictionary->capacity, idx = 0UL; + for(idx = 0UL; idx < dictionary->capacity; idx++) { + NSUInteger entryIdx = (keyEntry + idx) % dictionary->capacity; + JKHashTableEntry *atEntry = &dictionary->entry[entryIdx]; + if(JK_EXPECT_F(atEntry->keyHash == keyHash) && JK_EXPECT_T(atEntry->key != NULL) && (JK_EXPECT_F(key == atEntry->key) || JK_EXPECT_F(CFEqual(atEntry->key, key)))) { _JKDictionaryRemoveObjectWithEntry(dictionary, atEntry); } + if(JK_EXPECT_T(atEntry->key == NULL)) { NSCParameterAssert((atEntry->keyHash == 0UL) && (atEntry->object == NULL)); atEntry->key = key; atEntry->object = object; atEntry->keyHash = keyHash; dictionary->count++; return; } + } + + // We should never get here. If we do, we -release the key / object because it's our responsibility. + CFRelease(key); + CFRelease(object); +} + +- (NSUInteger)count +{ + return(count); +} + +static JKHashTableEntry *_JKDictionaryHashTableEntryForKey(JKDictionary *dictionary, id aKey) { + NSCParameterAssert((dictionary != NULL) && (dictionary->entry != NULL) && (dictionary->count <= dictionary->capacity)); + if((aKey == NULL) || (dictionary->capacity == 0UL)) { return(NULL); } + NSUInteger keyHash = CFHash(aKey), keyEntry = (keyHash % dictionary->capacity), idx = 0UL; + JKHashTableEntry *atEntry = NULL; + for(idx = 0UL; idx < dictionary->capacity; idx++) { + atEntry = &dictionary->entry[(keyEntry + idx) % dictionary->capacity]; + if(JK_EXPECT_T(atEntry->keyHash == keyHash) && JK_EXPECT_T(atEntry->key != NULL) && ((atEntry->key == aKey) || CFEqual(atEntry->key, aKey))) { NSCParameterAssert(atEntry->object != NULL); return(atEntry); break; } + if(JK_EXPECT_F(atEntry->key == NULL)) { NSCParameterAssert(atEntry->object == NULL); return(NULL); break; } // If the key was in the table, we would have found it by now. + } + return(NULL); +} + +- (id)objectForKey:(id)aKey +{ + NSParameterAssert((entry != NULL) && (count <= capacity)); + JKHashTableEntry *entryForKey = _JKDictionaryHashTableEntryForKey(self, aKey); + return((entryForKey != NULL) ? entryForKey->object : NULL); +} + +- (void)getObjects:(id *)objects andKeys:(id *)keys +{ + NSParameterAssert((entry != NULL) && (count <= capacity)); + NSUInteger atEntry = 0UL; NSUInteger arrayIdx = 0UL; + for(atEntry = 0UL; atEntry < capacity; atEntry++) { + if(JK_EXPECT_T(entry[atEntry].key != NULL)) { + NSCParameterAssert((entry[atEntry].object != NULL) && (arrayIdx < count)); + if(JK_EXPECT_T(keys != NULL)) { keys[arrayIdx] = entry[atEntry].key; } + if(JK_EXPECT_T(objects != NULL)) { objects[arrayIdx] = entry[atEntry].object; } + arrayIdx++; + } + } +} + +- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(id *)stackbuf count:(NSUInteger)len +{ + NSParameterAssert((state != NULL) && (stackbuf != NULL) && (len > 0UL) && (entry != NULL) && (count <= capacity)); + if(JK_EXPECT_F(state->state == 0UL)) { state->mutationsPtr = (unsigned long *)&mutations; state->itemsPtr = stackbuf; } + if(JK_EXPECT_F(state->state >= capacity)) { return(0UL); } + + NSUInteger enumeratedCount = 0UL; + while(JK_EXPECT_T(enumeratedCount < len) && JK_EXPECT_T(state->state < capacity)) { if(JK_EXPECT_T(entry[state->state].key != NULL)) { stackbuf[enumeratedCount++] = entry[state->state].key; } state->state++; } + + return(enumeratedCount); +} + +- (NSEnumerator *)keyEnumerator +{ + return([[[JKDictionaryEnumerator alloc] initWithJKDictionary:self] autorelease]); +} + +- (void)setObject:(id)anObject forKey:(id)aKey +{ + if(mutations == 0UL) { [NSException raise:NSInternalInconsistencyException format:@"*** -[%@ %@]: mutating method sent to immutable object", NSStringFromClass([self class]), NSStringFromSelector(_cmd)]; } + if(aKey == NULL) { [NSException raise:NSInvalidArgumentException format:@"*** -[%@ %@]: attempt to insert nil key", NSStringFromClass([self class]), NSStringFromSelector(_cmd)]; } + if(anObject == NULL) { [NSException raise:NSInvalidArgumentException format:@"*** -[%@ %@]: attempt to insert nil value (key: %@)", NSStringFromClass([self class]), NSStringFromSelector(_cmd), aKey]; } + + _JKDictionaryResizeIfNeccessary(self); +#ifndef __clang_analyzer__ + aKey = [aKey copy]; // Why on earth would clang complain that this -copy "might leak", + anObject = [anObject retain]; // but this -retain doesn't!? +#endif // __clang_analyzer__ + _JKDictionaryAddObject(self, CFHash(aKey), aKey, anObject); + mutations = (mutations == NSUIntegerMax) ? 1UL : mutations + 1UL; +} + +- (void)removeObjectForKey:(id)aKey +{ + if(mutations == 0UL) { [NSException raise:NSInternalInconsistencyException format:@"*** -[%@ %@]: mutating method sent to immutable object", NSStringFromClass([self class]), NSStringFromSelector(_cmd)]; } + if(aKey == NULL) { [NSException raise:NSInvalidArgumentException format:@"*** -[%@ %@]: attempt to remove nil key", NSStringFromClass([self class]), NSStringFromSelector(_cmd)]; } + JKHashTableEntry *entryForKey = _JKDictionaryHashTableEntryForKey(self, aKey); + if(entryForKey != NULL) { + _JKDictionaryRemoveObjectWithEntry(self, entryForKey); + mutations = (mutations == NSUIntegerMax) ? 1UL : mutations + 1UL; + } +} + +- (id)copyWithZone:(NSZone *)zone +{ + NSParameterAssert((entry != NULL) && (count <= capacity)); + return((mutations == 0UL) ? [self retain] : [[NSDictionary allocWithZone:zone] initWithDictionary:self]); +} + +- (id)mutableCopyWithZone:(NSZone *)zone +{ + NSParameterAssert((entry != NULL) && (count <= capacity)); + return([[NSMutableDictionary allocWithZone:zone] initWithDictionary:self]); +} + +@end + + + +#pragma mark - + +JK_STATIC_INLINE size_t jk_min(size_t a, size_t b) { return((a < b) ? a : b); } +JK_STATIC_INLINE size_t jk_max(size_t a, size_t b) { return((a > b) ? a : b); } + +JK_STATIC_INLINE JKHash calculateHash(JKHash currentHash, unsigned char c) { return(((currentHash << 5) + currentHash) + c); } + +static void jk_error(JKParseState *parseState, NSString *format, ...) { + NSCParameterAssert((parseState != NULL) && (format != NULL)); + + va_list varArgsList; + va_start(varArgsList, format); + NSString *formatString = [[[NSString alloc] initWithFormat:format arguments:varArgsList] autorelease]; + va_end(varArgsList); + +#if 0 + const unsigned char *lineStart = parseState->stringBuffer.bytes.ptr + parseState->lineStartIndex; + const unsigned char *lineEnd = lineStart; + const unsigned char *atCharacterPtr = NULL; + + for(atCharacterPtr = lineStart; atCharacterPtr < JK_END_STRING_PTR(parseState); atCharacterPtr++) { lineEnd = atCharacterPtr; if(jk_parse_is_newline(parseState, atCharacterPtr)) { break; } } + + NSString *lineString = @"", *carretString = @""; + if(lineStart < JK_END_STRING_PTR(parseState)) { + lineString = [[[NSString alloc] initWithBytes:lineStart length:(lineEnd - lineStart) encoding:NSUTF8StringEncoding] autorelease]; + carretString = [NSString stringWithFormat:@"%*.*s^", (int)(parseState->atIndex - parseState->lineStartIndex), (int)(parseState->atIndex - parseState->lineStartIndex), " "]; + } +#endif + + if(parseState->error == NULL) { + parseState->error = [NSError errorWithDomain:@"JKErrorDomain" code:-1L userInfo: + [NSDictionary dictionaryWithObjectsAndKeys: + formatString, NSLocalizedDescriptionKey, + [NSNumber numberWithUnsignedLong:parseState->atIndex], @"JKAtIndexKey", + [NSNumber numberWithUnsignedLong:parseState->lineNumber], @"JKLineNumberKey", + //lineString, @"JKErrorLine0Key", + //carretString, @"JKErrorLine1Key", + NULL]]; + } +} + +#pragma mark - +#pragma mark Buffer and Object Stack management functions + +static void jk_managedBuffer_release(JKManagedBuffer *managedBuffer) { + if((managedBuffer->flags & JKManagedBufferMustFree)) { + if(managedBuffer->bytes.ptr != NULL) { free(managedBuffer->bytes.ptr); managedBuffer->bytes.ptr = NULL; } + managedBuffer->flags &= ~JKManagedBufferMustFree; + } + + managedBuffer->bytes.ptr = NULL; + managedBuffer->bytes.length = 0UL; + managedBuffer->flags &= ~JKManagedBufferLocationMask; +} + +static void jk_managedBuffer_setToStackBuffer(JKManagedBuffer *managedBuffer, unsigned char *ptr, size_t length) { + jk_managedBuffer_release(managedBuffer); + managedBuffer->bytes.ptr = ptr; + managedBuffer->bytes.length = length; + managedBuffer->flags = (managedBuffer->flags & ~JKManagedBufferLocationMask) | JKManagedBufferOnStack; +} + +static unsigned char *jk_managedBuffer_resize(JKManagedBuffer *managedBuffer, size_t newSize) { + size_t roundedUpNewSize = newSize; + + if(managedBuffer->roundSizeUpToMultipleOf > 0UL) { roundedUpNewSize = newSize + ((managedBuffer->roundSizeUpToMultipleOf - (newSize % managedBuffer->roundSizeUpToMultipleOf)) % managedBuffer->roundSizeUpToMultipleOf); } + + if((roundedUpNewSize != managedBuffer->bytes.length) && (roundedUpNewSize > managedBuffer->bytes.length)) { + if((managedBuffer->flags & JKManagedBufferLocationMask) == JKManagedBufferOnStack) { + NSCParameterAssert((managedBuffer->flags & JKManagedBufferMustFree) == 0); + unsigned char *newBuffer = NULL, *oldBuffer = managedBuffer->bytes.ptr; + + if((newBuffer = (unsigned char *)malloc(roundedUpNewSize)) == NULL) { return(NULL); } + memcpy(newBuffer, oldBuffer, jk_min(managedBuffer->bytes.length, roundedUpNewSize)); + managedBuffer->flags = (managedBuffer->flags & ~JKManagedBufferLocationMask) | (JKManagedBufferOnHeap | JKManagedBufferMustFree); + managedBuffer->bytes.ptr = newBuffer; + managedBuffer->bytes.length = roundedUpNewSize; + } else { + NSCParameterAssert(((managedBuffer->flags & JKManagedBufferMustFree) != 0) && ((managedBuffer->flags & JKManagedBufferLocationMask) == JKManagedBufferOnHeap)); + if((managedBuffer->bytes.ptr = (unsigned char *)reallocf(managedBuffer->bytes.ptr, roundedUpNewSize)) == NULL) { return(NULL); } + managedBuffer->bytes.length = roundedUpNewSize; + } + } + + return(managedBuffer->bytes.ptr); +} + + + +static void jk_objectStack_release(JKObjectStack *objectStack) { + NSCParameterAssert(objectStack != NULL); + + NSCParameterAssert(objectStack->index <= objectStack->count); + size_t atIndex = 0UL; + for(atIndex = 0UL; atIndex < objectStack->index; atIndex++) { + if(objectStack->objects[atIndex] != NULL) { CFRelease(objectStack->objects[atIndex]); objectStack->objects[atIndex] = NULL; } + if(objectStack->keys[atIndex] != NULL) { CFRelease(objectStack->keys[atIndex]); objectStack->keys[atIndex] = NULL; } + } + objectStack->index = 0UL; + + if(objectStack->flags & JKObjectStackMustFree) { + NSCParameterAssert((objectStack->flags & JKObjectStackLocationMask) == JKObjectStackOnHeap); + if(objectStack->objects != NULL) { free(objectStack->objects); objectStack->objects = NULL; } + if(objectStack->keys != NULL) { free(objectStack->keys); objectStack->keys = NULL; } + if(objectStack->cfHashes != NULL) { free(objectStack->cfHashes); objectStack->cfHashes = NULL; } + objectStack->flags &= ~JKObjectStackMustFree; + } + + objectStack->objects = NULL; + objectStack->keys = NULL; + objectStack->cfHashes = NULL; + + objectStack->count = 0UL; + objectStack->flags &= ~JKObjectStackLocationMask; +} + +static void jk_objectStack_setToStackBuffer(JKObjectStack *objectStack, void **objects, void **keys, CFHashCode *cfHashes, size_t count) { + NSCParameterAssert((objectStack != NULL) && (objects != NULL) && (keys != NULL) && (cfHashes != NULL) && (count > 0UL)); + jk_objectStack_release(objectStack); + objectStack->objects = objects; + objectStack->keys = keys; + objectStack->cfHashes = cfHashes; + objectStack->count = count; + objectStack->flags = (objectStack->flags & ~JKObjectStackLocationMask) | JKObjectStackOnStack; +#ifndef NS_BLOCK_ASSERTIONS + size_t idx; + for(idx = 0UL; idx < objectStack->count; idx++) { objectStack->objects[idx] = NULL; objectStack->keys[idx] = NULL; objectStack->cfHashes[idx] = 0UL; } +#endif +} + +static int jk_objectStack_resize(JKObjectStack *objectStack, size_t newCount) { + size_t roundedUpNewCount = newCount; + int returnCode = 0; + + void **newObjects = NULL, **newKeys = NULL; + CFHashCode *newCFHashes = NULL; + + if(objectStack->roundSizeUpToMultipleOf > 0UL) { roundedUpNewCount = newCount + ((objectStack->roundSizeUpToMultipleOf - (newCount % objectStack->roundSizeUpToMultipleOf)) % objectStack->roundSizeUpToMultipleOf); } + + if((roundedUpNewCount != objectStack->count) && (roundedUpNewCount > objectStack->count)) { + if((objectStack->flags & JKObjectStackLocationMask) == JKObjectStackOnStack) { + NSCParameterAssert((objectStack->flags & JKObjectStackMustFree) == 0); + + if((newObjects = (void ** )calloc(1UL, roundedUpNewCount * sizeof(void * ))) == NULL) { returnCode = 1; goto errorExit; } + memcpy(newObjects, objectStack->objects, jk_min(objectStack->count, roundedUpNewCount) * sizeof(void *)); + if((newKeys = (void ** )calloc(1UL, roundedUpNewCount * sizeof(void * ))) == NULL) { returnCode = 1; goto errorExit; } + memcpy(newKeys, objectStack->keys, jk_min(objectStack->count, roundedUpNewCount) * sizeof(void *)); + + if((newCFHashes = (CFHashCode *)calloc(1UL, roundedUpNewCount * sizeof(CFHashCode))) == NULL) { returnCode = 1; goto errorExit; } + memcpy(newCFHashes, objectStack->cfHashes, jk_min(objectStack->count, roundedUpNewCount) * sizeof(CFHashCode)); + + objectStack->flags = (objectStack->flags & ~JKObjectStackLocationMask) | (JKObjectStackOnHeap | JKObjectStackMustFree); + objectStack->objects = newObjects; newObjects = NULL; + objectStack->keys = newKeys; newKeys = NULL; + objectStack->cfHashes = newCFHashes; newCFHashes = NULL; + objectStack->count = roundedUpNewCount; + } else { + NSCParameterAssert(((objectStack->flags & JKObjectStackMustFree) != 0) && ((objectStack->flags & JKObjectStackLocationMask) == JKObjectStackOnHeap)); + if((newObjects = (void ** )realloc(objectStack->objects, roundedUpNewCount * sizeof(void * ))) != NULL) { objectStack->objects = newObjects; newObjects = NULL; } else { returnCode = 1; goto errorExit; } + if((newKeys = (void ** )realloc(objectStack->keys, roundedUpNewCount * sizeof(void * ))) != NULL) { objectStack->keys = newKeys; newKeys = NULL; } else { returnCode = 1; goto errorExit; } + if((newCFHashes = (CFHashCode *)realloc(objectStack->cfHashes, roundedUpNewCount * sizeof(CFHashCode))) != NULL) { objectStack->cfHashes = newCFHashes; newCFHashes = NULL; } else { returnCode = 1; goto errorExit; } + +#ifndef NS_BLOCK_ASSERTIONS + size_t idx; + for(idx = objectStack->count; idx < roundedUpNewCount; idx++) { objectStack->objects[idx] = NULL; objectStack->keys[idx] = NULL; objectStack->cfHashes[idx] = 0UL; } +#endif + objectStack->count = roundedUpNewCount; + } + } + + errorExit: + if(newObjects != NULL) { free(newObjects); newObjects = NULL; } + if(newKeys != NULL) { free(newKeys); newKeys = NULL; } + if(newCFHashes != NULL) { free(newCFHashes); newCFHashes = NULL; } + + return(returnCode); +} + +//////////// +#pragma mark - +#pragma mark Unicode related functions + +JK_STATIC_INLINE ConversionResult isValidCodePoint(UTF32 *u32CodePoint) { + ConversionResult result = conversionOK; + UTF32 ch = *u32CodePoint; + + if(JK_EXPECT_F(ch >= UNI_SUR_HIGH_START) && (JK_EXPECT_T(ch <= UNI_SUR_LOW_END))) { result = sourceIllegal; ch = UNI_REPLACEMENT_CHAR; goto finished; } + if(JK_EXPECT_F(ch >= 0xFDD0U) && (JK_EXPECT_F(ch <= 0xFDEFU) || JK_EXPECT_F((ch & 0xFFFEU) == 0xFFFEU)) && JK_EXPECT_T(ch <= 0x10FFFFU)) { result = sourceIllegal; ch = UNI_REPLACEMENT_CHAR; goto finished; } + if(JK_EXPECT_F(ch == 0U)) { result = sourceIllegal; ch = UNI_REPLACEMENT_CHAR; goto finished; } + + finished: + *u32CodePoint = ch; + return(result); +} + + +static int isLegalUTF8(const UTF8 *source, size_t length) { + const UTF8 *srcptr = source + length; + UTF8 a; + + switch(length) { + default: return(0); // Everything else falls through when "true"... + case 4: if(JK_EXPECT_F(((a = (*--srcptr)) < 0x80) || (a > 0xBF))) { return(0); } + case 3: if(JK_EXPECT_F(((a = (*--srcptr)) < 0x80) || (a > 0xBF))) { return(0); } + case 2: if(JK_EXPECT_F( (a = (*--srcptr)) > 0xBF )) { return(0); } + + switch(*source) { // no fall-through in this inner switch + case 0xE0: if(JK_EXPECT_F(a < 0xA0)) { return(0); } break; + case 0xED: if(JK_EXPECT_F(a > 0x9F)) { return(0); } break; + case 0xF0: if(JK_EXPECT_F(a < 0x90)) { return(0); } break; + case 0xF4: if(JK_EXPECT_F(a > 0x8F)) { return(0); } break; + default: if(JK_EXPECT_F(a < 0x80)) { return(0); } + } + + case 1: if(JK_EXPECT_F((JK_EXPECT_T(*source < 0xC2)) && JK_EXPECT_F(*source >= 0x80))) { return(0); } + } + + if(JK_EXPECT_F(*source > 0xF4)) { return(0); } + + return(1); +} + +static ConversionResult ConvertSingleCodePointInUTF8(const UTF8 *sourceStart, const UTF8 *sourceEnd, UTF8 const **nextUTF8, UTF32 *convertedUTF32) { + ConversionResult result = conversionOK; + const UTF8 *source = sourceStart; + UTF32 ch = 0UL; + +#if !defined(JK_FAST_TRAILING_BYTES) + unsigned short extraBytesToRead = trailingBytesForUTF8[*source]; +#else + unsigned short extraBytesToRead = __builtin_clz(((*source)^0xff) << 25); +#endif + + if(JK_EXPECT_F((source + extraBytesToRead + 1) > sourceEnd) || JK_EXPECT_F(!isLegalUTF8(source, extraBytesToRead + 1))) { + source++; + while((source < sourceEnd) && (((*source) & 0xc0) == 0x80) && ((source - sourceStart) < (extraBytesToRead + 1))) { source++; } + NSCParameterAssert(source <= sourceEnd); + result = ((source < sourceEnd) && (((*source) & 0xc0) != 0x80)) ? sourceIllegal : ((sourceStart + extraBytesToRead + 1) > sourceEnd) ? sourceExhausted : sourceIllegal; + ch = UNI_REPLACEMENT_CHAR; + goto finished; + } + + switch(extraBytesToRead) { // The cases all fall through. + case 5: ch += *source++; ch <<= 6; + case 4: ch += *source++; ch <<= 6; + case 3: ch += *source++; ch <<= 6; + case 2: ch += *source++; ch <<= 6; + case 1: ch += *source++; ch <<= 6; + case 0: ch += *source++; + } + ch -= offsetsFromUTF8[extraBytesToRead]; + + result = isValidCodePoint(&ch); + + finished: + *nextUTF8 = source; + *convertedUTF32 = ch; + + return(result); +} + + +static ConversionResult ConvertUTF32toUTF8 (UTF32 u32CodePoint, UTF8 **targetStart, UTF8 *targetEnd) { + const UTF32 byteMask = 0xBF, byteMark = 0x80; + ConversionResult result = conversionOK; + UTF8 *target = *targetStart; + UTF32 ch = u32CodePoint; + unsigned short bytesToWrite = 0; + + result = isValidCodePoint(&ch); + + // Figure out how many bytes the result will require. Turn any illegally large UTF32 things (> Plane 17) into replacement chars. + if(ch < (UTF32)0x80) { bytesToWrite = 1; } + else if(ch < (UTF32)0x800) { bytesToWrite = 2; } + else if(ch < (UTF32)0x10000) { bytesToWrite = 3; } + else if(ch <= UNI_MAX_LEGAL_UTF32) { bytesToWrite = 4; } + else { bytesToWrite = 3; ch = UNI_REPLACEMENT_CHAR; result = sourceIllegal; } + + target += bytesToWrite; + if (target > targetEnd) { target -= bytesToWrite; result = targetExhausted; goto finished; } + + switch (bytesToWrite) { // note: everything falls through. + case 4: *--target = (UTF8)((ch | byteMark) & byteMask); ch >>= 6; + case 3: *--target = (UTF8)((ch | byteMark) & byteMask); ch >>= 6; + case 2: *--target = (UTF8)((ch | byteMark) & byteMask); ch >>= 6; + case 1: *--target = (UTF8) (ch | firstByteMark[bytesToWrite]); + } + + target += bytesToWrite; + + finished: + *targetStart = target; + return(result); +} + +JK_STATIC_INLINE int jk_string_add_unicodeCodePoint(JKParseState *parseState, uint32_t unicodeCodePoint, size_t *tokenBufferIdx, JKHash *stringHash) { + UTF8 *u8s = &parseState->token.tokenBuffer.bytes.ptr[*tokenBufferIdx]; + ConversionResult result; + + if((result = ConvertUTF32toUTF8(unicodeCodePoint, &u8s, (parseState->token.tokenBuffer.bytes.ptr + parseState->token.tokenBuffer.bytes.length))) != conversionOK) { if(result == targetExhausted) { return(1); } } + size_t utf8len = u8s - &parseState->token.tokenBuffer.bytes.ptr[*tokenBufferIdx], nextIdx = (*tokenBufferIdx) + utf8len; + + while(*tokenBufferIdx < nextIdx) { *stringHash = calculateHash(*stringHash, parseState->token.tokenBuffer.bytes.ptr[(*tokenBufferIdx)++]); } + + return(0); +} + +//////////// +#pragma mark - +#pragma mark Decoding / parsing / deserializing functions + +static int jk_parse_string(JKParseState *parseState) { + NSCParameterAssert((parseState != NULL) && (JK_AT_STRING_PTR(parseState) <= JK_END_STRING_PTR(parseState))); + const unsigned char *stringStart = JK_AT_STRING_PTR(parseState) + 1; + const unsigned char *endOfBuffer = JK_END_STRING_PTR(parseState); + const unsigned char *atStringCharacter = stringStart; + unsigned char *tokenBuffer = parseState->token.tokenBuffer.bytes.ptr; + size_t tokenStartIndex = parseState->atIndex; + size_t tokenBufferIdx = 0UL; + + int onlySimpleString = 1, stringState = JSONStringStateStart; + uint16_t escapedUnicode1 = 0U, escapedUnicode2 = 0U; + uint32_t escapedUnicodeCodePoint = 0U; + JKHash stringHash = JK_HASH_INIT; + + while(1) { + unsigned long currentChar; + + if(JK_EXPECT_F(atStringCharacter == endOfBuffer)) { /* XXX Add error message */ stringState = JSONStringStateError; goto finishedParsing; } + + if(JK_EXPECT_F((currentChar = *atStringCharacter++) >= 0x80UL)) { + const unsigned char *nextValidCharacter = NULL; + UTF32 u32ch = 0U; + ConversionResult result; + + if(JK_EXPECT_F((result = ConvertSingleCodePointInUTF8(atStringCharacter - 1, endOfBuffer, (UTF8 const **)&nextValidCharacter, &u32ch)) != conversionOK)) { goto switchToSlowPath; } + stringHash = calculateHash(stringHash, currentChar); + while(atStringCharacter < nextValidCharacter) { NSCParameterAssert(JK_AT_STRING_PTR(parseState) <= JK_END_STRING_PTR(parseState)); stringHash = calculateHash(stringHash, *atStringCharacter++); } + continue; + } else { + if(JK_EXPECT_F(currentChar == (unsigned long)'"')) { stringState = JSONStringStateFinished; goto finishedParsing; } + + if(JK_EXPECT_F(currentChar == (unsigned long)'\\')) { + switchToSlowPath: + onlySimpleString = 0; + stringState = JSONStringStateParsing; + tokenBufferIdx = (atStringCharacter - stringStart) - 1L; + if(JK_EXPECT_F((tokenBufferIdx + 16UL) > parseState->token.tokenBuffer.bytes.length)) { if((tokenBuffer = jk_managedBuffer_resize(&parseState->token.tokenBuffer, tokenBufferIdx + 1024UL)) == NULL) { jk_error(parseState, @"Internal error: Unable to resize temporary buffer. %@ line #%ld", [NSString stringWithUTF8String:__FILE__], (long)__LINE__); stringState = JSONStringStateError; goto finishedParsing; } } + memcpy(tokenBuffer, stringStart, tokenBufferIdx); + goto slowMatch; + } + + if(JK_EXPECT_F(currentChar < 0x20UL)) { jk_error(parseState, @"Invalid character < 0x20 found in string: 0x%2.2x.", currentChar); stringState = JSONStringStateError; goto finishedParsing; } + + stringHash = calculateHash(stringHash, currentChar); + } + } + + slowMatch: + + for(atStringCharacter = (stringStart + ((atStringCharacter - stringStart) - 1L)); (atStringCharacter < endOfBuffer) && (tokenBufferIdx < parseState->token.tokenBuffer.bytes.length); atStringCharacter++) { + if((tokenBufferIdx + 16UL) > parseState->token.tokenBuffer.bytes.length) { if((tokenBuffer = jk_managedBuffer_resize(&parseState->token.tokenBuffer, tokenBufferIdx + 1024UL)) == NULL) { jk_error(parseState, @"Internal error: Unable to resize temporary buffer. %@ line #%ld", [NSString stringWithUTF8String:__FILE__], (long)__LINE__); stringState = JSONStringStateError; goto finishedParsing; } } + + NSCParameterAssert(tokenBufferIdx < parseState->token.tokenBuffer.bytes.length); + + unsigned long currentChar = (*atStringCharacter), escapedChar; + + if(JK_EXPECT_T(stringState == JSONStringStateParsing)) { + if(JK_EXPECT_T(currentChar >= 0x20UL)) { + if(JK_EXPECT_T(currentChar < (unsigned long)0x80)) { // Not a UTF8 sequence + if(JK_EXPECT_F(currentChar == (unsigned long)'"')) { stringState = JSONStringStateFinished; atStringCharacter++; goto finishedParsing; } + if(JK_EXPECT_F(currentChar == (unsigned long)'\\')) { stringState = JSONStringStateEscape; continue; } + stringHash = calculateHash(stringHash, currentChar); + tokenBuffer[tokenBufferIdx++] = currentChar; + continue; + } else { // UTF8 sequence + const unsigned char *nextValidCharacter = NULL; + UTF32 u32ch = 0U; + ConversionResult result; + + if(JK_EXPECT_F((result = ConvertSingleCodePointInUTF8(atStringCharacter, endOfBuffer, (UTF8 const **)&nextValidCharacter, &u32ch)) != conversionOK)) { + if((result == sourceIllegal) && ((parseState->parseOptionFlags & JKParseOptionLooseUnicode) == 0)) { jk_error(parseState, @"Illegal UTF8 sequence found in \"\" string."); stringState = JSONStringStateError; goto finishedParsing; } + if(result == sourceExhausted) { jk_error(parseState, @"End of buffer reached while parsing UTF8 in \"\" string."); stringState = JSONStringStateError; goto finishedParsing; } + if(jk_string_add_unicodeCodePoint(parseState, u32ch, &tokenBufferIdx, &stringHash)) { jk_error(parseState, @"Internal error: Unable to add UTF8 sequence to internal string buffer. %@ line #%ld", [NSString stringWithUTF8String:__FILE__], (long)__LINE__); stringState = JSONStringStateError; goto finishedParsing; } + atStringCharacter = nextValidCharacter - 1; + continue; + } else { + while(atStringCharacter < nextValidCharacter) { tokenBuffer[tokenBufferIdx++] = *atStringCharacter; stringHash = calculateHash(stringHash, *atStringCharacter++); } + atStringCharacter--; + continue; + } + } + } else { // currentChar < 0x20 + jk_error(parseState, @"Invalid character < 0x20 found in string: 0x%2.2x.", currentChar); stringState = JSONStringStateError; goto finishedParsing; + } + + } else { // stringState != JSONStringStateParsing + int isSurrogate = 1; + + switch(stringState) { + case JSONStringStateEscape: + switch(currentChar) { + case 'u': escapedUnicode1 = 0U; escapedUnicode2 = 0U; escapedUnicodeCodePoint = 0U; stringState = JSONStringStateEscapedUnicode1; break; + + case 'b': escapedChar = '\b'; goto parsedEscapedChar; + case 'f': escapedChar = '\f'; goto parsedEscapedChar; + case 'n': escapedChar = '\n'; goto parsedEscapedChar; + case 'r': escapedChar = '\r'; goto parsedEscapedChar; + case 't': escapedChar = '\t'; goto parsedEscapedChar; + case '\\': escapedChar = '\\'; goto parsedEscapedChar; + case '/': escapedChar = '/'; goto parsedEscapedChar; + case '"': escapedChar = '"'; goto parsedEscapedChar; + + parsedEscapedChar: + stringState = JSONStringStateParsing; + stringHash = calculateHash(stringHash, escapedChar); + tokenBuffer[tokenBufferIdx++] = escapedChar; + break; + + default: jk_error(parseState, @"Invalid escape sequence found in \"\" string."); stringState = JSONStringStateError; goto finishedParsing; break; + } + break; + + case JSONStringStateEscapedUnicode1: + case JSONStringStateEscapedUnicode2: + case JSONStringStateEscapedUnicode3: + case JSONStringStateEscapedUnicode4: isSurrogate = 0; + case JSONStringStateEscapedUnicodeSurrogate1: + case JSONStringStateEscapedUnicodeSurrogate2: + case JSONStringStateEscapedUnicodeSurrogate3: + case JSONStringStateEscapedUnicodeSurrogate4: + { + uint16_t hexValue = 0U; + + switch(currentChar) { + case '0' ... '9': hexValue = currentChar - '0'; goto parsedHex; + case 'a' ... 'f': hexValue = (currentChar - 'a') + 10U; goto parsedHex; + case 'A' ... 'F': hexValue = (currentChar - 'A') + 10U; goto parsedHex; + + parsedHex: + if(!isSurrogate) { escapedUnicode1 = (escapedUnicode1 << 4) | hexValue; } else { escapedUnicode2 = (escapedUnicode2 << 4) | hexValue; } + + if(stringState == JSONStringStateEscapedUnicode4) { + if(((escapedUnicode1 >= 0xD800U) && (escapedUnicode1 < 0xE000U))) { + if((escapedUnicode1 >= 0xD800U) && (escapedUnicode1 < 0xDC00U)) { stringState = JSONStringStateEscapedNeedEscapeForSurrogate; } + else if((escapedUnicode1 >= 0xDC00U) && (escapedUnicode1 < 0xE000U)) { + if((parseState->parseOptionFlags & JKParseOptionLooseUnicode)) { escapedUnicodeCodePoint = UNI_REPLACEMENT_CHAR; } + else { jk_error(parseState, @"Illegal \\u Unicode escape sequence."); stringState = JSONStringStateError; goto finishedParsing; } + } + } + else { escapedUnicodeCodePoint = escapedUnicode1; } + } + + if(stringState == JSONStringStateEscapedUnicodeSurrogate4) { + if((escapedUnicode2 < 0xdc00) || (escapedUnicode2 > 0xdfff)) { + if((parseState->parseOptionFlags & JKParseOptionLooseUnicode)) { escapedUnicodeCodePoint = UNI_REPLACEMENT_CHAR; } + else { jk_error(parseState, @"Illegal \\u Unicode escape sequence."); stringState = JSONStringStateError; goto finishedParsing; } + } + else { escapedUnicodeCodePoint = ((escapedUnicode1 - 0xd800) * 0x400) + (escapedUnicode2 - 0xdc00) + 0x10000; } + } + + if((stringState == JSONStringStateEscapedUnicode4) || (stringState == JSONStringStateEscapedUnicodeSurrogate4)) { + if((isValidCodePoint(&escapedUnicodeCodePoint) == sourceIllegal) && ((parseState->parseOptionFlags & JKParseOptionLooseUnicode) == 0)) { jk_error(parseState, @"Illegal \\u Unicode escape sequence."); stringState = JSONStringStateError; goto finishedParsing; } + stringState = JSONStringStateParsing; + if(jk_string_add_unicodeCodePoint(parseState, escapedUnicodeCodePoint, &tokenBufferIdx, &stringHash)) { jk_error(parseState, @"Internal error: Unable to add UTF8 sequence to internal string buffer. %@ line #%ld", [NSString stringWithUTF8String:__FILE__], (long)__LINE__); stringState = JSONStringStateError; goto finishedParsing; } + } + else if((stringState >= JSONStringStateEscapedUnicode1) && (stringState <= JSONStringStateEscapedUnicodeSurrogate4)) { stringState++; } + break; + + default: jk_error(parseState, @"Unexpected character found in \\u Unicode escape sequence. Found '%c', expected [0-9a-fA-F].", currentChar); stringState = JSONStringStateError; goto finishedParsing; break; + } + } + break; + + case JSONStringStateEscapedNeedEscapeForSurrogate: + if(currentChar == '\\') { stringState = JSONStringStateEscapedNeedEscapedUForSurrogate; } + else { + if((parseState->parseOptionFlags & JKParseOptionLooseUnicode) == 0) { jk_error(parseState, @"Required a second \\u Unicode escape sequence following a surrogate \\u Unicode escape sequence."); stringState = JSONStringStateError; goto finishedParsing; } + else { stringState = JSONStringStateParsing; atStringCharacter--; if(jk_string_add_unicodeCodePoint(parseState, UNI_REPLACEMENT_CHAR, &tokenBufferIdx, &stringHash)) { jk_error(parseState, @"Internal error: Unable to add UTF8 sequence to internal string buffer. %@ line #%ld", [NSString stringWithUTF8String:__FILE__], (long)__LINE__); stringState = JSONStringStateError; goto finishedParsing; } } + } + break; + + case JSONStringStateEscapedNeedEscapedUForSurrogate: + if(currentChar == 'u') { stringState = JSONStringStateEscapedUnicodeSurrogate1; } + else { + if((parseState->parseOptionFlags & JKParseOptionLooseUnicode) == 0) { jk_error(parseState, @"Required a second \\u Unicode escape sequence following a surrogate \\u Unicode escape sequence."); stringState = JSONStringStateError; goto finishedParsing; } + else { stringState = JSONStringStateParsing; atStringCharacter -= 2; if(jk_string_add_unicodeCodePoint(parseState, UNI_REPLACEMENT_CHAR, &tokenBufferIdx, &stringHash)) { jk_error(parseState, @"Internal error: Unable to add UTF8 sequence to internal string buffer. %@ line #%ld", [NSString stringWithUTF8String:__FILE__], (long)__LINE__); stringState = JSONStringStateError; goto finishedParsing; } } + } + break; + + default: jk_error(parseState, @"Internal error: Unknown stringState. %@ line #%ld", [NSString stringWithUTF8String:__FILE__], (long)__LINE__); stringState = JSONStringStateError; goto finishedParsing; break; + } + } + } + +finishedParsing: + + if(JK_EXPECT_T(stringState == JSONStringStateFinished)) { + NSCParameterAssert((parseState->stringBuffer.bytes.ptr + tokenStartIndex) < atStringCharacter); + + parseState->token.tokenPtrRange.ptr = parseState->stringBuffer.bytes.ptr + tokenStartIndex; + parseState->token.tokenPtrRange.length = (atStringCharacter - parseState->token.tokenPtrRange.ptr); + + if(JK_EXPECT_T(onlySimpleString)) { + NSCParameterAssert(((parseState->token.tokenPtrRange.ptr + 1) < endOfBuffer) && (parseState->token.tokenPtrRange.length >= 2UL) && (((parseState->token.tokenPtrRange.ptr + 1) + (parseState->token.tokenPtrRange.length - 2)) < endOfBuffer)); + parseState->token.value.ptrRange.ptr = parseState->token.tokenPtrRange.ptr + 1; + parseState->token.value.ptrRange.length = parseState->token.tokenPtrRange.length - 2UL; + } else { + parseState->token.value.ptrRange.ptr = parseState->token.tokenBuffer.bytes.ptr; + parseState->token.value.ptrRange.length = tokenBufferIdx; + } + + parseState->token.value.hash = stringHash; + parseState->token.value.type = JKValueTypeString; + parseState->atIndex = (atStringCharacter - parseState->stringBuffer.bytes.ptr); + } + + if(JK_EXPECT_F(stringState != JSONStringStateFinished)) { jk_error(parseState, @"Invalid string."); } + return(JK_EXPECT_T(stringState == JSONStringStateFinished) ? 0 : 1); +} + +static int jk_parse_number(JKParseState *parseState) { + NSCParameterAssert((parseState != NULL) && (JK_AT_STRING_PTR(parseState) <= JK_END_STRING_PTR(parseState))); + const unsigned char *numberStart = JK_AT_STRING_PTR(parseState); + const unsigned char *endOfBuffer = JK_END_STRING_PTR(parseState); + const unsigned char *atNumberCharacter = NULL; + int numberState = JSONNumberStateWholeNumberStart, isFloatingPoint = 0, isNegative = 0, backup = 0; + size_t startingIndex = parseState->atIndex; + + for(atNumberCharacter = numberStart; (JK_EXPECT_T(atNumberCharacter < endOfBuffer)) && (JK_EXPECT_T(!(JK_EXPECT_F(numberState == JSONNumberStateFinished) || JK_EXPECT_F(numberState == JSONNumberStateError)))); atNumberCharacter++) { + unsigned long currentChar = (unsigned long)(*atNumberCharacter), lowerCaseCC = currentChar | 0x20UL; + + switch(numberState) { + case JSONNumberStateWholeNumberStart: if (currentChar == '-') { numberState = JSONNumberStateWholeNumberMinus; isNegative = 1; break; } + case JSONNumberStateWholeNumberMinus: if (currentChar == '0') { numberState = JSONNumberStateWholeNumberZero; break; } + else if( (currentChar >= '1') && (currentChar <= '9')) { numberState = JSONNumberStateWholeNumber; break; } + else { /* XXX Add error message */ numberState = JSONNumberStateError; break; } + case JSONNumberStateExponentStart: if( (currentChar == '+') || (currentChar == '-')) { numberState = JSONNumberStateExponentPlusMinus; break; } + case JSONNumberStateFractionalNumberStart: + case JSONNumberStateExponentPlusMinus:if(!((currentChar >= '0') && (currentChar <= '9'))) { /* XXX Add error message */ numberState = JSONNumberStateError; break; } + else { if(numberState == JSONNumberStateFractionalNumberStart) { numberState = JSONNumberStateFractionalNumber; } + else { numberState = JSONNumberStateExponent; } break; } + case JSONNumberStateWholeNumberZero: + case JSONNumberStateWholeNumber: if (currentChar == '.') { numberState = JSONNumberStateFractionalNumberStart; isFloatingPoint = 1; break; } + case JSONNumberStateFractionalNumber: if (lowerCaseCC == 'e') { numberState = JSONNumberStateExponentStart; isFloatingPoint = 1; break; } + case JSONNumberStateExponent: if(!((currentChar >= '0') && (currentChar <= '9')) || (numberState == JSONNumberStateWholeNumberZero)) { numberState = JSONNumberStateFinished; backup = 1; break; } + break; + default: /* XXX Add error message */ numberState = JSONNumberStateError; break; + } + } + + parseState->token.tokenPtrRange.ptr = parseState->stringBuffer.bytes.ptr + startingIndex; + parseState->token.tokenPtrRange.length = (atNumberCharacter - parseState->token.tokenPtrRange.ptr) - backup; + parseState->atIndex = (parseState->token.tokenPtrRange.ptr + parseState->token.tokenPtrRange.length) - parseState->stringBuffer.bytes.ptr; + + if(JK_EXPECT_T(numberState == JSONNumberStateFinished)) { + unsigned char numberTempBuf[parseState->token.tokenPtrRange.length + 4UL]; + unsigned char *endOfNumber = NULL; + + memcpy(numberTempBuf, parseState->token.tokenPtrRange.ptr, parseState->token.tokenPtrRange.length); + numberTempBuf[parseState->token.tokenPtrRange.length] = 0; + + errno = 0; + + // Treat "-0" as a floating point number, which is capable of representing negative zeros. + if(JK_EXPECT_F(parseState->token.tokenPtrRange.length == 2UL) && JK_EXPECT_F(numberTempBuf[1] == '0') && JK_EXPECT_F(isNegative)) { isFloatingPoint = 1; } + + if(isFloatingPoint) { + parseState->token.value.number.doubleValue = strtod((const char *)numberTempBuf, (char **)&endOfNumber); // strtod is documented to return U+2261 (identical to) 0.0 on an underflow error (along with setting errno to ERANGE). + parseState->token.value.type = JKValueTypeDouble; + parseState->token.value.ptrRange.ptr = (const unsigned char *)&parseState->token.value.number.doubleValue; + parseState->token.value.ptrRange.length = sizeof(double); + parseState->token.value.hash = (JK_HASH_INIT + parseState->token.value.type); + } else { + if(isNegative) { + parseState->token.value.number.longLongValue = strtoll((const char *)numberTempBuf, (char **)&endOfNumber, 10); + parseState->token.value.type = JKValueTypeLongLong; + parseState->token.value.ptrRange.ptr = (const unsigned char *)&parseState->token.value.number.longLongValue; + parseState->token.value.ptrRange.length = sizeof(long long); + parseState->token.value.hash = (JK_HASH_INIT + parseState->token.value.type) + (JKHash)parseState->token.value.number.longLongValue; + } else { + parseState->token.value.number.unsignedLongLongValue = strtoull((const char *)numberTempBuf, (char **)&endOfNumber, 10); + parseState->token.value.type = JKValueTypeUnsignedLongLong; + parseState->token.value.ptrRange.ptr = (const unsigned char *)&parseState->token.value.number.unsignedLongLongValue; + parseState->token.value.ptrRange.length = sizeof(unsigned long long); + parseState->token.value.hash = (JK_HASH_INIT + parseState->token.value.type) + (JKHash)parseState->token.value.number.unsignedLongLongValue; + } + } + + if(JK_EXPECT_F(errno != 0)) { + numberState = JSONNumberStateError; + if(errno == ERANGE) { + switch(parseState->token.value.type) { + case JKValueTypeDouble: jk_error(parseState, @"The value '%s' could not be represented as a 'double' due to %s.", numberTempBuf, (parseState->token.value.number.doubleValue == 0.0) ? "underflow" : "overflow"); break; // see above for == 0.0. + case JKValueTypeLongLong: jk_error(parseState, @"The value '%s' exceeded the minimum value that could be represented: %lld.", numberTempBuf, parseState->token.value.number.longLongValue); break; + case JKValueTypeUnsignedLongLong: jk_error(parseState, @"The value '%s' exceeded the maximum value that could be represented: %llu.", numberTempBuf, parseState->token.value.number.unsignedLongLongValue); break; + default: jk_error(parseState, @"Internal error: Unknown token value type. %@ line #%ld", [NSString stringWithUTF8String:__FILE__], (long)__LINE__); break; + } + } + } + if(JK_EXPECT_F(endOfNumber != &numberTempBuf[parseState->token.tokenPtrRange.length]) && JK_EXPECT_F(numberState != JSONNumberStateError)) { numberState = JSONNumberStateError; jk_error(parseState, @"The conversion function did not consume all of the number tokens characters."); } + + size_t hashIndex = 0UL; + for(hashIndex = 0UL; hashIndex < parseState->token.value.ptrRange.length; hashIndex++) { parseState->token.value.hash = calculateHash(parseState->token.value.hash, parseState->token.value.ptrRange.ptr[hashIndex]); } + } + + if(JK_EXPECT_F(numberState != JSONNumberStateFinished)) { jk_error(parseState, @"Invalid number."); } + return(JK_EXPECT_T((numberState == JSONNumberStateFinished)) ? 0 : 1); +} + +JK_STATIC_INLINE void jk_set_parsed_token(JKParseState *parseState, const unsigned char *ptr, size_t length, JKTokenType type, size_t advanceBy) { + parseState->token.tokenPtrRange.ptr = ptr; + parseState->token.tokenPtrRange.length = length; + parseState->token.type = type; + parseState->atIndex += advanceBy; +} + +static size_t jk_parse_is_newline(JKParseState *parseState, const unsigned char *atCharacterPtr) { + NSCParameterAssert((parseState != NULL) && (atCharacterPtr != NULL) && (atCharacterPtr >= parseState->stringBuffer.bytes.ptr) && (atCharacterPtr < JK_END_STRING_PTR(parseState))); + const unsigned char *endOfStringPtr = JK_END_STRING_PTR(parseState); + + if(JK_EXPECT_F(atCharacterPtr >= endOfStringPtr)) { return(0UL); } + + if(JK_EXPECT_F((*(atCharacterPtr + 0)) == '\n')) { return(1UL); } + if(JK_EXPECT_F((*(atCharacterPtr + 0)) == '\r')) { if((JK_EXPECT_T((atCharacterPtr + 1) < endOfStringPtr)) && ((*(atCharacterPtr + 1)) == '\n')) { return(2UL); } return(1UL); } + if(parseState->parseOptionFlags & JKParseOptionUnicodeNewlines) { + if((JK_EXPECT_F((*(atCharacterPtr + 0)) == 0xc2)) && (((atCharacterPtr + 1) < endOfStringPtr) && ((*(atCharacterPtr + 1)) == 0x85))) { return(2UL); } + if((JK_EXPECT_F((*(atCharacterPtr + 0)) == 0xe2)) && (((atCharacterPtr + 2) < endOfStringPtr) && ((*(atCharacterPtr + 1)) == 0x80) && (((*(atCharacterPtr + 2)) == 0xa8) || ((*(atCharacterPtr + 2)) == 0xa9)))) { return(3UL); } + } + + return(0UL); +} + +JK_STATIC_INLINE int jk_parse_skip_newline(JKParseState *parseState) { + size_t newlineAdvanceAtIndex = 0UL; + if(JK_EXPECT_F((newlineAdvanceAtIndex = jk_parse_is_newline(parseState, JK_AT_STRING_PTR(parseState))) > 0UL)) { parseState->lineNumber++; parseState->atIndex += (newlineAdvanceAtIndex - 1UL); parseState->lineStartIndex = parseState->atIndex + 1UL; return(1); } + return(0); +} + +JK_STATIC_INLINE void jk_parse_skip_whitespace(JKParseState *parseState) { +#ifndef __clang_analyzer__ + NSCParameterAssert((parseState != NULL) && (JK_AT_STRING_PTR(parseState) <= JK_END_STRING_PTR(parseState))); + const unsigned char *atCharacterPtr = NULL; + const unsigned char *endOfStringPtr = JK_END_STRING_PTR(parseState); + + for(atCharacterPtr = JK_AT_STRING_PTR(parseState); (JK_EXPECT_T((atCharacterPtr = JK_AT_STRING_PTR(parseState)) < endOfStringPtr)); parseState->atIndex++) { + if(((*(atCharacterPtr + 0)) == ' ') || ((*(atCharacterPtr + 0)) == '\t')) { continue; } + if(jk_parse_skip_newline(parseState)) { continue; } + if(parseState->parseOptionFlags & JKParseOptionComments) { + if((JK_EXPECT_F((*(atCharacterPtr + 0)) == '/')) && (JK_EXPECT_T((atCharacterPtr + 1) < endOfStringPtr))) { + if((*(atCharacterPtr + 1)) == '/') { + parseState->atIndex++; + for(atCharacterPtr = JK_AT_STRING_PTR(parseState); (JK_EXPECT_T((atCharacterPtr = JK_AT_STRING_PTR(parseState)) < endOfStringPtr)); parseState->atIndex++) { if(jk_parse_skip_newline(parseState)) { break; } } + continue; + } + if((*(atCharacterPtr + 1)) == '*') { + parseState->atIndex++; + for(atCharacterPtr = JK_AT_STRING_PTR(parseState); (JK_EXPECT_T((atCharacterPtr = JK_AT_STRING_PTR(parseState)) < endOfStringPtr)); parseState->atIndex++) { + if(jk_parse_skip_newline(parseState)) { continue; } + if(((*(atCharacterPtr + 0)) == '*') && (((atCharacterPtr + 1) < endOfStringPtr) && ((*(atCharacterPtr + 1)) == '/'))) { parseState->atIndex++; break; } + } + continue; + } + } + } + break; + } +#endif +} + +static int jk_parse_next_token(JKParseState *parseState) { + NSCParameterAssert((parseState != NULL) && (JK_AT_STRING_PTR(parseState) <= JK_END_STRING_PTR(parseState))); + const unsigned char *atCharacterPtr = NULL; + const unsigned char *endOfStringPtr = JK_END_STRING_PTR(parseState); + unsigned char currentCharacter = 0U; + int stopParsing = 0; + + parseState->prev_atIndex = parseState->atIndex; + parseState->prev_lineNumber = parseState->lineNumber; + parseState->prev_lineStartIndex = parseState->lineStartIndex; + + jk_parse_skip_whitespace(parseState); + + if((JK_AT_STRING_PTR(parseState) == endOfStringPtr)) { stopParsing = 1; } + + if((JK_EXPECT_T(stopParsing == 0)) && (JK_EXPECT_T((atCharacterPtr = JK_AT_STRING_PTR(parseState)) < endOfStringPtr))) { + currentCharacter = *atCharacterPtr; + + if(JK_EXPECT_T(currentCharacter == '"')) { if(JK_EXPECT_T((stopParsing = jk_parse_string(parseState)) == 0)) { jk_set_parsed_token(parseState, parseState->token.tokenPtrRange.ptr, parseState->token.tokenPtrRange.length, JKTokenTypeString, 0UL); } } + else if(JK_EXPECT_T(currentCharacter == ':')) { jk_set_parsed_token(parseState, atCharacterPtr, 1UL, JKTokenTypeSeparator, 1UL); } + else if(JK_EXPECT_T(currentCharacter == ',')) { jk_set_parsed_token(parseState, atCharacterPtr, 1UL, JKTokenTypeComma, 1UL); } + else if((JK_EXPECT_T(currentCharacter >= '0') && JK_EXPECT_T(currentCharacter <= '9')) || JK_EXPECT_T(currentCharacter == '-')) { if(JK_EXPECT_T((stopParsing = jk_parse_number(parseState)) == 0)) { jk_set_parsed_token(parseState, parseState->token.tokenPtrRange.ptr, parseState->token.tokenPtrRange.length, JKTokenTypeNumber, 0UL); } } + else if(JK_EXPECT_T(currentCharacter == '{')) { jk_set_parsed_token(parseState, atCharacterPtr, 1UL, JKTokenTypeObjectBegin, 1UL); } + else if(JK_EXPECT_T(currentCharacter == '}')) { jk_set_parsed_token(parseState, atCharacterPtr, 1UL, JKTokenTypeObjectEnd, 1UL); } + else if(JK_EXPECT_T(currentCharacter == '[')) { jk_set_parsed_token(parseState, atCharacterPtr, 1UL, JKTokenTypeArrayBegin, 1UL); } + else if(JK_EXPECT_T(currentCharacter == ']')) { jk_set_parsed_token(parseState, atCharacterPtr, 1UL, JKTokenTypeArrayEnd, 1UL); } + + else if(JK_EXPECT_T(currentCharacter == 't')) { if(!((JK_EXPECT_T((atCharacterPtr + 4UL) < endOfStringPtr)) && (JK_EXPECT_T(atCharacterPtr[1] == 'r')) && (JK_EXPECT_T(atCharacterPtr[2] == 'u')) && (JK_EXPECT_T(atCharacterPtr[3] == 'e')))) { stopParsing = 1; /* XXX Add error message */ } else { jk_set_parsed_token(parseState, atCharacterPtr, 4UL, JKTokenTypeTrue, 4UL); } } + else if(JK_EXPECT_T(currentCharacter == 'f')) { if(!((JK_EXPECT_T((atCharacterPtr + 5UL) < endOfStringPtr)) && (JK_EXPECT_T(atCharacterPtr[1] == 'a')) && (JK_EXPECT_T(atCharacterPtr[2] == 'l')) && (JK_EXPECT_T(atCharacterPtr[3] == 's')) && (JK_EXPECT_T(atCharacterPtr[4] == 'e')))) { stopParsing = 1; /* XXX Add error message */ } else { jk_set_parsed_token(parseState, atCharacterPtr, 5UL, JKTokenTypeFalse, 5UL); } } + else if(JK_EXPECT_T(currentCharacter == 'n')) { if(!((JK_EXPECT_T((atCharacterPtr + 4UL) < endOfStringPtr)) && (JK_EXPECT_T(atCharacterPtr[1] == 'u')) && (JK_EXPECT_T(atCharacterPtr[2] == 'l')) && (JK_EXPECT_T(atCharacterPtr[3] == 'l')))) { stopParsing = 1; /* XXX Add error message */ } else { jk_set_parsed_token(parseState, atCharacterPtr, 4UL, JKTokenTypeNull, 4UL); } } + else { stopParsing = 1; /* XXX Add error message */ } + } + + if(JK_EXPECT_F(stopParsing)) { jk_error(parseState, @"Unexpected token, wanted '{', '}', '[', ']', ',', ':', 'true', 'false', 'null', '\"STRING\"', 'NUMBER'."); } + return(stopParsing); +} + +static void jk_error_parse_accept_or3(JKParseState *parseState, int state, NSString *or1String, NSString *or2String, NSString *or3String) { + NSString *acceptStrings[16]; + int acceptIdx = 0; + if(state & JKParseAcceptValue) { acceptStrings[acceptIdx++] = or1String; } + if(state & JKParseAcceptComma) { acceptStrings[acceptIdx++] = or2String; } + if(state & JKParseAcceptEnd) { acceptStrings[acceptIdx++] = or3String; } + if(acceptIdx == 1) { jk_error(parseState, @"Expected %@, not '%*.*s'", acceptStrings[0], (int)parseState->token.tokenPtrRange.length, (int)parseState->token.tokenPtrRange.length, parseState->token.tokenPtrRange.ptr); } + else if(acceptIdx == 2) { jk_error(parseState, @"Expected %@ or %@, not '%*.*s'", acceptStrings[0], acceptStrings[1], (int)parseState->token.tokenPtrRange.length, (int)parseState->token.tokenPtrRange.length, parseState->token.tokenPtrRange.ptr); } + else if(acceptIdx == 3) { jk_error(parseState, @"Expected %@, %@, or %@, not '%*.*s", acceptStrings[0], acceptStrings[1], acceptStrings[2], (int)parseState->token.tokenPtrRange.length, (int)parseState->token.tokenPtrRange.length, parseState->token.tokenPtrRange.ptr); } +} + +static void *jk_parse_array(JKParseState *parseState) { + size_t startingObjectIndex = parseState->objectStack.index; + int arrayState = JKParseAcceptValueOrEnd, stopParsing = 0; + void *parsedArray = NULL; + + while(JK_EXPECT_T((JK_EXPECT_T(stopParsing == 0)) && (JK_EXPECT_T(parseState->atIndex < parseState->stringBuffer.bytes.length)))) { + if(JK_EXPECT_F(parseState->objectStack.index > (parseState->objectStack.count - 4UL))) { if(jk_objectStack_resize(&parseState->objectStack, parseState->objectStack.count + 128UL)) { jk_error(parseState, @"Internal error: [array] objectsIndex > %zu, resize failed? %@ line %#ld", (parseState->objectStack.count - 4UL), [NSString stringWithUTF8String:__FILE__], (long)__LINE__); break; } } + + if(JK_EXPECT_T((stopParsing = jk_parse_next_token(parseState)) == 0)) { + void *object = NULL; +#ifndef NS_BLOCK_ASSERTIONS + parseState->objectStack.objects[parseState->objectStack.index] = NULL; + parseState->objectStack.keys [parseState->objectStack.index] = NULL; +#endif + switch(parseState->token.type) { + case JKTokenTypeNumber: + case JKTokenTypeString: + case JKTokenTypeTrue: + case JKTokenTypeFalse: + case JKTokenTypeNull: + case JKTokenTypeArrayBegin: + case JKTokenTypeObjectBegin: + if(JK_EXPECT_F((arrayState & JKParseAcceptValue) == 0)) { parseState->errorIsPrev = 1; jk_error(parseState, @"Unexpected value."); stopParsing = 1; break; } + if(JK_EXPECT_F((object = jk_object_for_token(parseState)) == NULL)) { jk_error(parseState, @"Internal error: Object == NULL"); stopParsing = 1; break; } else { parseState->objectStack.objects[parseState->objectStack.index++] = object; arrayState = JKParseAcceptCommaOrEnd; } + break; + case JKTokenTypeArrayEnd: if(JK_EXPECT_T(arrayState & JKParseAcceptEnd)) { NSCParameterAssert(parseState->objectStack.index >= startingObjectIndex); parsedArray = (void *)_JKArrayCreate((id *)&parseState->objectStack.objects[startingObjectIndex], (parseState->objectStack.index - startingObjectIndex), parseState->mutableCollections); } else { parseState->errorIsPrev = 1; jk_error(parseState, @"Unexpected ']'."); } stopParsing = 1; break; + case JKTokenTypeComma: if(JK_EXPECT_T(arrayState & JKParseAcceptComma)) { arrayState = JKParseAcceptValue; } else { parseState->errorIsPrev = 1; jk_error(parseState, @"Unexpected ','."); stopParsing = 1; } break; + default: parseState->errorIsPrev = 1; jk_error_parse_accept_or3(parseState, arrayState, @"a value", @"a comma", @"a ']'"); stopParsing = 1; break; + } + } + } + + if(JK_EXPECT_F(parsedArray == NULL)) { size_t idx = 0UL; for(idx = startingObjectIndex; idx < parseState->objectStack.index; idx++) { if(parseState->objectStack.objects[idx] != NULL) { CFRelease(parseState->objectStack.objects[idx]); parseState->objectStack.objects[idx] = NULL; } } } +#if !defined(NS_BLOCK_ASSERTIONS) + else { size_t idx = 0UL; for(idx = startingObjectIndex; idx < parseState->objectStack.index; idx++) { parseState->objectStack.objects[idx] = NULL; parseState->objectStack.keys[idx] = NULL; } } +#endif + + parseState->objectStack.index = startingObjectIndex; + return(parsedArray); +} + +static void *jk_create_dictionary(JKParseState *parseState, size_t startingObjectIndex) { + void *parsedDictionary = NULL; + + parseState->objectStack.index--; + + parsedDictionary = _JKDictionaryCreate((id *)&parseState->objectStack.keys[startingObjectIndex], (NSUInteger *)&parseState->objectStack.cfHashes[startingObjectIndex], (id *)&parseState->objectStack.objects[startingObjectIndex], (parseState->objectStack.index - startingObjectIndex), parseState->mutableCollections); + + return(parsedDictionary); +} + +static void *jk_parse_dictionary(JKParseState *parseState) { + size_t startingObjectIndex = parseState->objectStack.index; + int dictState = JKParseAcceptValueOrEnd, stopParsing = 0; + void *parsedDictionary = NULL; + + while(JK_EXPECT_T((JK_EXPECT_T(stopParsing == 0)) && (JK_EXPECT_T(parseState->atIndex < parseState->stringBuffer.bytes.length)))) { + if(JK_EXPECT_F(parseState->objectStack.index > (parseState->objectStack.count - 4UL))) { if(jk_objectStack_resize(&parseState->objectStack, parseState->objectStack.count + 128UL)) { jk_error(parseState, @"Internal error: [dictionary] objectsIndex > %zu, resize failed? %@ line #%ld", (parseState->objectStack.count - 4UL), [NSString stringWithUTF8String:__FILE__], (long)__LINE__); break; } } + + size_t objectStackIndex = parseState->objectStack.index++; + parseState->objectStack.keys[objectStackIndex] = NULL; + parseState->objectStack.objects[objectStackIndex] = NULL; + void *key = NULL, *object = NULL; + + if(JK_EXPECT_T((JK_EXPECT_T(stopParsing == 0)) && (JK_EXPECT_T((stopParsing = jk_parse_next_token(parseState)) == 0)))) { + switch(parseState->token.type) { + case JKTokenTypeString: + if(JK_EXPECT_F((dictState & JKParseAcceptValue) == 0)) { parseState->errorIsPrev = 1; jk_error(parseState, @"Unexpected string."); stopParsing = 1; break; } + if(JK_EXPECT_F((key = jk_object_for_token(parseState)) == NULL)) { jk_error(parseState, @"Internal error: Key == NULL."); stopParsing = 1; break; } + else { + parseState->objectStack.keys[objectStackIndex] = key; + if(JK_EXPECT_T(parseState->token.value.cacheItem != NULL)) { if(JK_EXPECT_F(parseState->token.value.cacheItem->cfHash == 0UL)) { parseState->token.value.cacheItem->cfHash = CFHash(key); } parseState->objectStack.cfHashes[objectStackIndex] = parseState->token.value.cacheItem->cfHash; } + else { parseState->objectStack.cfHashes[objectStackIndex] = CFHash(key); } + } + break; + + case JKTokenTypeObjectEnd: if((JK_EXPECT_T(dictState & JKParseAcceptEnd))) { NSCParameterAssert(parseState->objectStack.index >= startingObjectIndex); parsedDictionary = jk_create_dictionary(parseState, startingObjectIndex); } else { parseState->errorIsPrev = 1; jk_error(parseState, @"Unexpected '}'."); } stopParsing = 1; break; + case JKTokenTypeComma: if((JK_EXPECT_T(dictState & JKParseAcceptComma))) { dictState = JKParseAcceptValue; parseState->objectStack.index--; continue; } else { parseState->errorIsPrev = 1; jk_error(parseState, @"Unexpected ','."); stopParsing = 1; } break; + + default: parseState->errorIsPrev = 1; jk_error_parse_accept_or3(parseState, dictState, @"a \"STRING\"", @"a comma", @"a '}'"); stopParsing = 1; break; + } + } + + if(JK_EXPECT_T(stopParsing == 0)) { + if(JK_EXPECT_T((stopParsing = jk_parse_next_token(parseState)) == 0)) { if(JK_EXPECT_F(parseState->token.type != JKTokenTypeSeparator)) { parseState->errorIsPrev = 1; jk_error(parseState, @"Expected ':'."); stopParsing = 1; } } + } + + if((JK_EXPECT_T(stopParsing == 0)) && (JK_EXPECT_T((stopParsing = jk_parse_next_token(parseState)) == 0))) { + switch(parseState->token.type) { + case JKTokenTypeNumber: + case JKTokenTypeString: + case JKTokenTypeTrue: + case JKTokenTypeFalse: + case JKTokenTypeNull: + case JKTokenTypeArrayBegin: + case JKTokenTypeObjectBegin: + if(JK_EXPECT_F((dictState & JKParseAcceptValue) == 0)) { parseState->errorIsPrev = 1; jk_error(parseState, @"Unexpected value."); stopParsing = 1; break; } + if(JK_EXPECT_F((object = jk_object_for_token(parseState)) == NULL)) { jk_error(parseState, @"Internal error: Object == NULL."); stopParsing = 1; break; } else { parseState->objectStack.objects[objectStackIndex] = object; dictState = JKParseAcceptCommaOrEnd; } + break; + default: parseState->errorIsPrev = 1; jk_error_parse_accept_or3(parseState, dictState, @"a value", @"a comma", @"a '}'"); stopParsing = 1; break; + } + } + } + + if(JK_EXPECT_F(parsedDictionary == NULL)) { size_t idx = 0UL; for(idx = startingObjectIndex; idx < parseState->objectStack.index; idx++) { if(parseState->objectStack.keys[idx] != NULL) { CFRelease(parseState->objectStack.keys[idx]); parseState->objectStack.keys[idx] = NULL; } if(parseState->objectStack.objects[idx] != NULL) { CFRelease(parseState->objectStack.objects[idx]); parseState->objectStack.objects[idx] = NULL; } } } +#if !defined(NS_BLOCK_ASSERTIONS) + else { size_t idx = 0UL; for(idx = startingObjectIndex; idx < parseState->objectStack.index; idx++) { parseState->objectStack.objects[idx] = NULL; parseState->objectStack.keys[idx] = NULL; } } +#endif + + parseState->objectStack.index = startingObjectIndex; + return(parsedDictionary); +} + +static id json_parse_it(JKParseState *parseState) { + id parsedObject = NULL; + int stopParsing = 0; + + while((JK_EXPECT_T(stopParsing == 0)) && (JK_EXPECT_T(parseState->atIndex < parseState->stringBuffer.bytes.length))) { + if((JK_EXPECT_T(stopParsing == 0)) && (JK_EXPECT_T((stopParsing = jk_parse_next_token(parseState)) == 0))) { + switch(parseState->token.type) { + case JKTokenTypeArrayBegin: + case JKTokenTypeObjectBegin: parsedObject = [(id)jk_object_for_token(parseState) autorelease]; stopParsing = 1; break; + default: jk_error(parseState, @"Expected either '[' or '{'."); stopParsing = 1; break; + } + } + } + + NSCParameterAssert((parseState->objectStack.index == 0) && (JK_AT_STRING_PTR(parseState) <= JK_END_STRING_PTR(parseState))); + + if((parsedObject == NULL) && (JK_AT_STRING_PTR(parseState) == JK_END_STRING_PTR(parseState))) { jk_error(parseState, @"Reached the end of the buffer."); } + if(parsedObject == NULL) { jk_error(parseState, @"Unable to parse JSON."); } + + if((parsedObject != NULL) && (JK_AT_STRING_PTR(parseState) < JK_END_STRING_PTR(parseState))) { + jk_parse_skip_whitespace(parseState); + if((parsedObject != NULL) && ((parseState->parseOptionFlags & JKParseOptionPermitTextAfterValidJSON) == 0) && (JK_AT_STRING_PTR(parseState) < JK_END_STRING_PTR(parseState))) { + jk_error(parseState, @"A valid JSON object was parsed but there were additional non-white-space characters remaining."); + parsedObject = NULL; + } + } + + return(parsedObject); +} + +//////////// +#pragma mark - +#pragma mark Object cache + +// This uses a Galois Linear Feedback Shift Register (LFSR) PRNG to pick which item in the cache to age. It has a period of (2^32)-1. +// NOTE: A LFSR *MUST* be initialized to a non-zero value and must always have a non-zero value. +JK_STATIC_INLINE void jk_cache_age(JKParseState *parseState) { + NSCParameterAssert((parseState != NULL) && (parseState->cache.prng_lfsr != 0U)); + parseState->cache.prng_lfsr = (parseState->cache.prng_lfsr >> 1) ^ ((0U - (parseState->cache.prng_lfsr & 1U)) & 0x80200003U); + parseState->cache.age[parseState->cache.prng_lfsr & (parseState->cache.count - 1UL)] >>= 1; +} + +// The object cache is nothing more than a hash table with open addressing collision resolution that is bounded by JK_CACHE_PROBES attempts. +// +// The hash table is a linear C array of JKTokenCacheItem. The terms "item" and "bucket" are synonymous with the index in to the cache array, i.e. cache.items[bucket]. +// +// Items in the cache have an age associated with them. The age is the number of rightmost 1 bits, i.e. 0000 = 0, 0001 = 1, 0011 = 2, 0111 = 3, 1111 = 4. +// This allows us to use left and right shifts to add or subtract from an items age. Add = (age << 1) | 1. Subtract = age >> 0. Subtract is synonymous with "age" (i.e., age an item). +// The reason for this is it allows us to perform saturated adds and subtractions and is branchless. +// The primitive C type MUST be unsigned. It is currently a "char", which allows (at a minimum and in practice) 8 bits. +// +// A "useable bucket" is a bucket that is not in use (never populated), or has an age == 0. +// +// When an item is found in the cache, it's age is incremented. +// If a useable bucket hasn't been found, the current item (bucket) is aged along with two random items. +// +// If a value is not found in the cache, and no useable bucket has been found, that value is not added to the cache. + +static void *jk_cachedObjects(JKParseState *parseState) { + unsigned long bucket = parseState->token.value.hash & (parseState->cache.count - 1UL), setBucket = 0UL, useableBucket = 0UL, x = 0UL; + void *parsedAtom = NULL; + + if(JK_EXPECT_F(parseState->token.value.ptrRange.length == 0UL) && JK_EXPECT_T(parseState->token.value.type == JKValueTypeString)) { return(@""); } + + for(x = 0UL; x < JK_CACHE_PROBES; x++) { + if(JK_EXPECT_F(parseState->cache.items[bucket].object == NULL)) { setBucket = 1UL; useableBucket = bucket; break; } + + if((JK_EXPECT_T(parseState->cache.items[bucket].hash == parseState->token.value.hash)) && (JK_EXPECT_T(parseState->cache.items[bucket].size == parseState->token.value.ptrRange.length)) && (JK_EXPECT_T(parseState->cache.items[bucket].type == parseState->token.value.type)) && (JK_EXPECT_T(parseState->cache.items[bucket].bytes != NULL)) && (JK_EXPECT_T(memcmp(parseState->cache.items[bucket].bytes, parseState->token.value.ptrRange.ptr, parseState->token.value.ptrRange.length) == 0U))) { + parseState->cache.age[bucket] = (parseState->cache.age[bucket] << 1) | 1U; + parseState->token.value.cacheItem = &parseState->cache.items[bucket]; + NSCParameterAssert(parseState->cache.items[bucket].object != NULL); + return((void *)CFRetain(parseState->cache.items[bucket].object)); + } else { + if(JK_EXPECT_F(setBucket == 0UL) && JK_EXPECT_F(parseState->cache.age[bucket] == 0U)) { setBucket = 1UL; useableBucket = bucket; } + if(JK_EXPECT_F(setBucket == 0UL)) { parseState->cache.age[bucket] >>= 1; jk_cache_age(parseState); jk_cache_age(parseState); } + // This is the open addressing function. The values length and type are used as a form of "double hashing" to distribute values with the same effective value hash across different object cache buckets. + // The values type is a prime number that is relatively coprime to the other primes in the set of value types and the number of hash table buckets. + bucket = (parseState->token.value.hash + (parseState->token.value.ptrRange.length * (x + 1UL)) + (parseState->token.value.type * (x + 1UL)) + (3UL * (x + 1UL))) & (parseState->cache.count - 1UL); + } + } + + switch(parseState->token.value.type) { + case JKValueTypeString: parsedAtom = (void *)CFStringCreateWithBytes(NULL, parseState->token.value.ptrRange.ptr, parseState->token.value.ptrRange.length, kCFStringEncodingUTF8, 0); break; + case JKValueTypeLongLong: parsedAtom = (void *)CFNumberCreate(NULL, kCFNumberLongLongType, &parseState->token.value.number.longLongValue); break; + case JKValueTypeUnsignedLongLong: + if(parseState->token.value.number.unsignedLongLongValue <= LLONG_MAX) { parsedAtom = (void *)CFNumberCreate(NULL, kCFNumberLongLongType, &parseState->token.value.number.unsignedLongLongValue); } + else { parsedAtom = (void *)parseState->objCImpCache.NSNumberInitWithUnsignedLongLong(parseState->objCImpCache.NSNumberAlloc(parseState->objCImpCache.NSNumberClass, @selector(alloc)), @selector(initWithUnsignedLongLong:), parseState->token.value.number.unsignedLongLongValue); } + break; + case JKValueTypeDouble: parsedAtom = (void *)CFNumberCreate(NULL, kCFNumberDoubleType, &parseState->token.value.number.doubleValue); break; + default: jk_error(parseState, @"Internal error: Unknown token value type. %@ line #%ld", [NSString stringWithUTF8String:__FILE__], (long)__LINE__); break; + } + + if(JK_EXPECT_T(setBucket) && (JK_EXPECT_T(parsedAtom != NULL))) { + bucket = useableBucket; + if(JK_EXPECT_T((parseState->cache.items[bucket].object != NULL))) { CFRelease(parseState->cache.items[bucket].object); parseState->cache.items[bucket].object = NULL; } + + if(JK_EXPECT_T((parseState->cache.items[bucket].bytes = (unsigned char *)reallocf(parseState->cache.items[bucket].bytes, parseState->token.value.ptrRange.length)) != NULL)) { + memcpy(parseState->cache.items[bucket].bytes, parseState->token.value.ptrRange.ptr, parseState->token.value.ptrRange.length); + parseState->cache.items[bucket].object = (void *)CFRetain(parsedAtom); + parseState->cache.items[bucket].hash = parseState->token.value.hash; + parseState->cache.items[bucket].cfHash = 0UL; + parseState->cache.items[bucket].size = parseState->token.value.ptrRange.length; + parseState->cache.items[bucket].type = parseState->token.value.type; + parseState->token.value.cacheItem = &parseState->cache.items[bucket]; + parseState->cache.age[bucket] = JK_INIT_CACHE_AGE; + } else { // The realloc failed, so clear the appropriate fields. + parseState->cache.items[bucket].hash = 0UL; + parseState->cache.items[bucket].cfHash = 0UL; + parseState->cache.items[bucket].size = 0UL; + parseState->cache.items[bucket].type = 0UL; + } + } + + return(parsedAtom); +} + + +static void *jk_object_for_token(JKParseState *parseState) { + void *parsedAtom = NULL; + + parseState->token.value.cacheItem = NULL; + switch(parseState->token.type) { + case JKTokenTypeString: parsedAtom = jk_cachedObjects(parseState); break; + case JKTokenTypeNumber: parsedAtom = jk_cachedObjects(parseState); break; + case JKTokenTypeObjectBegin: parsedAtom = jk_parse_dictionary(parseState); break; + case JKTokenTypeArrayBegin: parsedAtom = jk_parse_array(parseState); break; + case JKTokenTypeTrue: parsedAtom = (void *)kCFBooleanTrue; break; + case JKTokenTypeFalse: parsedAtom = (void *)kCFBooleanFalse; break; + case JKTokenTypeNull: parsedAtom = (void *)kCFNull; break; + default: jk_error(parseState, @"Internal error: Unknown token type. %@ line #%ld", [NSString stringWithUTF8String:__FILE__], (long)__LINE__); break; + } + + return(parsedAtom); +} + +#pragma mark - +@implementation JSONDecoder + ++ (id)decoder +{ + return([self decoderWithParseOptions:JKParseOptionStrict]); +} + ++ (id)decoderWithParseOptions:(JKParseOptionFlags)parseOptionFlags +{ + return([[[self alloc] initWithParseOptions:parseOptionFlags] autorelease]); +} + +- (id)init +{ + return([self initWithParseOptions:JKParseOptionStrict]); +} + +- (id)initWithParseOptions:(JKParseOptionFlags)parseOptionFlags +{ + if((self = [super init]) == NULL) { return(NULL); } + + if(parseOptionFlags & ~JKParseOptionValidFlags) { [self autorelease]; [NSException raise:NSInvalidArgumentException format:@"Invalid parse options."]; } + + if((parseState = (JKParseState *)calloc(1UL, sizeof(JKParseState))) == NULL) { goto errorExit; } + + parseState->parseOptionFlags = parseOptionFlags; + + parseState->token.tokenBuffer.roundSizeUpToMultipleOf = 4096UL; + parseState->objectStack.roundSizeUpToMultipleOf = 2048UL; + + parseState->objCImpCache.NSNumberClass = _jk_NSNumberClass; + parseState->objCImpCache.NSNumberAlloc = _jk_NSNumberAllocImp; + parseState->objCImpCache.NSNumberInitWithUnsignedLongLong = _jk_NSNumberInitWithUnsignedLongLongImp; + + parseState->cache.prng_lfsr = 1U; + parseState->cache.count = JK_CACHE_SLOTS; + if((parseState->cache.items = (JKTokenCacheItem *)calloc(1UL, sizeof(JKTokenCacheItem) * parseState->cache.count)) == NULL) { goto errorExit; } + + return(self); + + errorExit: + if(self) { [self autorelease]; self = NULL; } + return(NULL); +} + +// This is here primarily to support the NSString and NSData convenience functions so the autoreleased JSONDecoder can release most of its resources before the pool pops. +static void _JSONDecoderCleanup(JSONDecoder *decoder) { + if((decoder != NULL) && (decoder->parseState != NULL)) { + jk_managedBuffer_release(&decoder->parseState->token.tokenBuffer); + jk_objectStack_release(&decoder->parseState->objectStack); + + [decoder clearCache]; + if(decoder->parseState->cache.items != NULL) { free(decoder->parseState->cache.items); decoder->parseState->cache.items = NULL; } + + free(decoder->parseState); decoder->parseState = NULL; + } +} + +- (void)dealloc +{ + _JSONDecoderCleanup(self); + [super dealloc]; +} + +- (void)clearCache +{ + if(JK_EXPECT_T(parseState != NULL)) { + if(JK_EXPECT_T(parseState->cache.items != NULL)) { + size_t idx = 0UL; + for(idx = 0UL; idx < parseState->cache.count; idx++) { + if(JK_EXPECT_T(parseState->cache.items[idx].object != NULL)) { CFRelease(parseState->cache.items[idx].object); parseState->cache.items[idx].object = NULL; } + if(JK_EXPECT_T(parseState->cache.items[idx].bytes != NULL)) { free(parseState->cache.items[idx].bytes); parseState->cache.items[idx].bytes = NULL; } + memset(&parseState->cache.items[idx], 0, sizeof(JKTokenCacheItem)); + parseState->cache.age[idx] = 0U; + } + } + } +} + +// This needs to be completely rewritten. +static id _JKParseUTF8String(JKParseState *parseState, BOOL mutableCollections, const unsigned char *string, size_t length, NSError **error) { + NSCParameterAssert((parseState != NULL) && (string != NULL) && (parseState->cache.prng_lfsr != 0U)); + parseState->stringBuffer.bytes.ptr = string; + parseState->stringBuffer.bytes.length = length; + parseState->atIndex = 0UL; + parseState->lineNumber = 1UL; + parseState->lineStartIndex = 0UL; + parseState->prev_atIndex = 0UL; + parseState->prev_lineNumber = 1UL; + parseState->prev_lineStartIndex = 0UL; + parseState->error = NULL; + parseState->errorIsPrev = 0; + parseState->mutableCollections = (mutableCollections == NO) ? NO : YES; + + unsigned char stackTokenBuffer[JK_TOKENBUFFER_SIZE] JK_ALIGNED(64); + jk_managedBuffer_setToStackBuffer(&parseState->token.tokenBuffer, stackTokenBuffer, sizeof(stackTokenBuffer)); + + void *stackObjects [JK_STACK_OBJS] JK_ALIGNED(64); + void *stackKeys [JK_STACK_OBJS] JK_ALIGNED(64); + CFHashCode stackCFHashes[JK_STACK_OBJS] JK_ALIGNED(64); + jk_objectStack_setToStackBuffer(&parseState->objectStack, stackObjects, stackKeys, stackCFHashes, JK_STACK_OBJS); + + id parsedJSON = json_parse_it(parseState); + + if((error != NULL) && (parseState->error != NULL)) { *error = parseState->error; } + + jk_managedBuffer_release(&parseState->token.tokenBuffer); + jk_objectStack_release(&parseState->objectStack); + + parseState->stringBuffer.bytes.ptr = NULL; + parseState->stringBuffer.bytes.length = 0UL; + parseState->atIndex = 0UL; + parseState->lineNumber = 1UL; + parseState->lineStartIndex = 0UL; + parseState->prev_atIndex = 0UL; + parseState->prev_lineNumber = 1UL; + parseState->prev_lineStartIndex = 0UL; + parseState->error = NULL; + parseState->errorIsPrev = 0; + parseState->mutableCollections = NO; + + return(parsedJSON); +} + +//////////// +#pragma mark Deprecated as of v1.4 +//////////// + +// Deprecated in JSONKit v1.4. Use objectWithUTF8String:length: instead. +- (id)parseUTF8String:(const unsigned char *)string length:(size_t)length +{ + return([self objectWithUTF8String:string length:length error:NULL]); +} + +// Deprecated in JSONKit v1.4. Use objectWithUTF8String:length:error: instead. +- (id)parseUTF8String:(const unsigned char *)string length:(size_t)length error:(NSError **)error +{ + return([self objectWithUTF8String:string length:length error:error]); +} + +// Deprecated in JSONKit v1.4. Use objectWithData: instead. +- (id)parseJSONData:(NSData *)jsonData +{ + return([self objectWithData:jsonData error:NULL]); +} + +// Deprecated in JSONKit v1.4. Use objectWithData:error: instead. +- (id)parseJSONData:(NSData *)jsonData error:(NSError **)error +{ + return([self objectWithData:jsonData error:error]); +} + +//////////// +#pragma mark Methods that return immutable collection objects +//////////// + +- (id)objectWithUTF8String:(const unsigned char *)string length:(NSUInteger)length +{ + return([self objectWithUTF8String:string length:length error:NULL]); +} + +- (id)objectWithUTF8String:(const unsigned char *)string length:(NSUInteger)length error:(NSError **)error +{ + if(parseState == NULL) { [NSException raise:NSInternalInconsistencyException format:@"parseState is NULL."]; } + if(string == NULL) { [NSException raise:NSInvalidArgumentException format:@"The string argument is NULL."]; } + + return(_JKParseUTF8String(parseState, NO, string, (size_t)length, error)); +} + +- (id)objectWithData:(NSData *)jsonData +{ + return([self objectWithData:jsonData error:NULL]); +} + +- (id)objectWithData:(NSData *)jsonData error:(NSError **)error +{ + if(jsonData == NULL) { [NSException raise:NSInvalidArgumentException format:@"The jsonData argument is NULL."]; } + return([self objectWithUTF8String:(const unsigned char *)[jsonData bytes] length:[jsonData length] error:error]); +} + +//////////// +#pragma mark Methods that return mutable collection objects +//////////// + +- (id)mutableObjectWithUTF8String:(const unsigned char *)string length:(NSUInteger)length +{ + return([self mutableObjectWithUTF8String:string length:length error:NULL]); +} + +- (id)mutableObjectWithUTF8String:(const unsigned char *)string length:(NSUInteger)length error:(NSError **)error +{ + if(parseState == NULL) { [NSException raise:NSInternalInconsistencyException format:@"parseState is NULL."]; } + if(string == NULL) { [NSException raise:NSInvalidArgumentException format:@"The string argument is NULL."]; } + + return(_JKParseUTF8String(parseState, YES, string, (size_t)length, error)); +} + +- (id)mutableObjectWithData:(NSData *)jsonData +{ + return([self mutableObjectWithData:jsonData error:NULL]); +} + +- (id)mutableObjectWithData:(NSData *)jsonData error:(NSError **)error +{ + if(jsonData == NULL) { [NSException raise:NSInvalidArgumentException format:@"The jsonData argument is NULL."]; } + return([self mutableObjectWithUTF8String:(const unsigned char *)[jsonData bytes] length:[jsonData length] error:error]); +} + +@end + +/* + The NSString and NSData convenience methods need a little bit of explanation. + + Prior to JSONKit v1.4, the NSString -objectFromJSONStringWithParseOptions:error: method looked like + + const unsigned char *utf8String = (const unsigned char *)[self UTF8String]; + if(utf8String == NULL) { return(NULL); } + size_t utf8Length = strlen((const char *)utf8String); + return([[JSONDecoder decoderWithParseOptions:parseOptionFlags] parseUTF8String:utf8String length:utf8Length error:error]); + + This changed with v1.4 to a more complicated method. The reason for this is to keep the amount of memory that is + allocated, but not yet freed because it is dependent on the autorelease pool to pop before it can be reclaimed. + + In the simpler v1.3 code, this included all the bytes used to store the -UTF8String along with the JSONDecoder and all its overhead. + + Now we use an autoreleased CFMutableData that is sized to the UTF8 length of the NSString in question and is used to hold the UTF8 + conversion of said string. + + Once parsed, the CFMutableData has its length set to 0. This should, hopefully, allow the CFMutableData to realloc and/or free + the buffer. + + Another change made was a slight modification to JSONDecoder so that most of the cleanup work that was done in -dealloc was moved + to a private, internal function. These convenience routines keep the pointer to the autoreleased JSONDecoder and calls + _JSONDecoderCleanup() to early release the decoders resources since we already know that particular decoder is not going to be used + again. + + If everything goes smoothly, this will most likely result in perhaps a few hundred bytes that are allocated but waiting for the + autorelease pool to pop. This is compared to the thousands and easily hundreds of thousands of bytes that would have been in + autorelease limbo. It's more complicated for us, but a win for the user. + + Autorelease objects are used in case things don't go smoothly. By having them autoreleased, we effectively guarantee that our + requirement to -release the object is always met, not matter what goes wrong. The downside is having a an object or two in + autorelease limbo, but we've done our best to minimize that impact, so it all balances out. + */ + +@implementation NSString (JSONKitDeserializing) + +static id _NSStringObjectFromJSONString(NSString *jsonString, JKParseOptionFlags parseOptionFlags, NSError **error, BOOL mutableCollection) { + id returnObject = NULL; + CFMutableDataRef mutableData = NULL; + JSONDecoder *decoder = NULL; + + CFIndex stringLength = CFStringGetLength((CFStringRef)jsonString); + NSUInteger stringUTF8Length = [jsonString lengthOfBytesUsingEncoding:NSUTF8StringEncoding]; + + if((mutableData = (CFMutableDataRef)[(id)CFDataCreateMutable(NULL, (NSUInteger)stringUTF8Length) autorelease]) != NULL) { + UInt8 *utf8String = CFDataGetMutableBytePtr(mutableData); + CFIndex usedBytes = 0L, convertedCount = 0L; + + convertedCount = CFStringGetBytes((CFStringRef)jsonString, CFRangeMake(0L, stringLength), kCFStringEncodingUTF8, '?', NO, utf8String, (NSUInteger)stringUTF8Length, &usedBytes); + if(JK_EXPECT_F(convertedCount != stringLength) || JK_EXPECT_F(usedBytes < 0L)) { if(error != NULL) { *error = [NSError errorWithDomain:@"JKErrorDomain" code:-1L userInfo:[NSDictionary dictionaryWithObject:@"An error occurred converting the contents of a NSString to UTF8." forKey:NSLocalizedDescriptionKey]]; } goto exitNow; } + + if(mutableCollection == NO) { returnObject = [(decoder = [JSONDecoder decoderWithParseOptions:parseOptionFlags]) objectWithUTF8String:(const unsigned char *)utf8String length:(size_t)usedBytes error:error]; } + else { returnObject = [(decoder = [JSONDecoder decoderWithParseOptions:parseOptionFlags]) mutableObjectWithUTF8String:(const unsigned char *)utf8String length:(size_t)usedBytes error:error]; } + } + +exitNow: + if(mutableData != NULL) { CFDataSetLength(mutableData, 0L); } + if(decoder != NULL) { _JSONDecoderCleanup(decoder); } + return(returnObject); +} + +- (id)objectFromJSONString +{ + return([self objectFromJSONStringWithParseOptions:JKParseOptionStrict error:NULL]); +} + +- (id)objectFromJSONStringWithParseOptions:(JKParseOptionFlags)parseOptionFlags +{ + return([self objectFromJSONStringWithParseOptions:parseOptionFlags error:NULL]); +} + +- (id)objectFromJSONStringWithParseOptions:(JKParseOptionFlags)parseOptionFlags error:(NSError **)error +{ + return(_NSStringObjectFromJSONString(self, parseOptionFlags, error, NO)); +} + + +- (id)mutableObjectFromJSONString +{ + return([self mutableObjectFromJSONStringWithParseOptions:JKParseOptionStrict error:NULL]); +} + +- (id)mutableObjectFromJSONStringWithParseOptions:(JKParseOptionFlags)parseOptionFlags +{ + return([self mutableObjectFromJSONStringWithParseOptions:parseOptionFlags error:NULL]); +} + +- (id)mutableObjectFromJSONStringWithParseOptions:(JKParseOptionFlags)parseOptionFlags error:(NSError **)error +{ + return(_NSStringObjectFromJSONString(self, parseOptionFlags, error, YES)); +} + +@end + +@implementation NSData (JSONKitDeserializing) + +- (id)objectFromJSONData +{ + return([self objectFromJSONDataWithParseOptions:JKParseOptionStrict error:NULL]); +} + +- (id)objectFromJSONDataWithParseOptions:(JKParseOptionFlags)parseOptionFlags +{ + return([self objectFromJSONDataWithParseOptions:parseOptionFlags error:NULL]); +} + +- (id)objectFromJSONDataWithParseOptions:(JKParseOptionFlags)parseOptionFlags error:(NSError **)error +{ + JSONDecoder *decoder = NULL; + id returnObject = [(decoder = [JSONDecoder decoderWithParseOptions:parseOptionFlags]) objectWithData:self error:error]; + if(decoder != NULL) { _JSONDecoderCleanup(decoder); } + return(returnObject); +} + +- (id)mutableObjectFromJSONData +{ + return([self mutableObjectFromJSONDataWithParseOptions:JKParseOptionStrict error:NULL]); +} + +- (id)mutableObjectFromJSONDataWithParseOptions:(JKParseOptionFlags)parseOptionFlags +{ + return([self mutableObjectFromJSONDataWithParseOptions:parseOptionFlags error:NULL]); +} + +- (id)mutableObjectFromJSONDataWithParseOptions:(JKParseOptionFlags)parseOptionFlags error:(NSError **)error +{ + JSONDecoder *decoder = NULL; + id returnObject = [(decoder = [JSONDecoder decoderWithParseOptions:parseOptionFlags]) mutableObjectWithData:self error:error]; + if(decoder != NULL) { _JSONDecoderCleanup(decoder); } + return(returnObject); +} + + +@end + +//////////// +#pragma mark - +#pragma mark Encoding / deserializing functions + +static void jk_encode_error(JKEncodeState *encodeState, NSString *format, ...) { + NSCParameterAssert((encodeState != NULL) && (format != NULL)); + + va_list varArgsList; + va_start(varArgsList, format); + NSString *formatString = [[[NSString alloc] initWithFormat:format arguments:varArgsList] autorelease]; + va_end(varArgsList); + + if(encodeState->error == NULL) { + encodeState->error = [NSError errorWithDomain:@"JKErrorDomain" code:-1L userInfo: + [NSDictionary dictionaryWithObjectsAndKeys: + formatString, NSLocalizedDescriptionKey, + NULL]]; + } +} + +JK_STATIC_INLINE void jk_encode_updateCache(JKEncodeState *encodeState, JKEncodeCache *cacheSlot, size_t startingAtIndex, id object) { + NSCParameterAssert(encodeState != NULL); + if(JK_EXPECT_T(cacheSlot != NULL)) { + NSCParameterAssert((object != NULL) && (startingAtIndex <= encodeState->atIndex)); + cacheSlot->object = object; + cacheSlot->offset = startingAtIndex; + cacheSlot->length = (size_t)(encodeState->atIndex - startingAtIndex); + } +} + +static int jk_encode_printf(JKEncodeState *encodeState, JKEncodeCache *cacheSlot, size_t startingAtIndex, id object, const char *format, ...) { + va_list varArgsList, varArgsListCopy; + va_start(varArgsList, format); + va_copy(varArgsListCopy, varArgsList); + + NSCParameterAssert((encodeState != NULL) && (encodeState->atIndex < encodeState->stringBuffer.bytes.length) && (startingAtIndex <= encodeState->atIndex) && (format != NULL)); + + ssize_t formattedStringLength = 0L; + int returnValue = 0; + + if(JK_EXPECT_T((formattedStringLength = vsnprintf((char *)&encodeState->stringBuffer.bytes.ptr[encodeState->atIndex], (encodeState->stringBuffer.bytes.length - encodeState->atIndex), format, varArgsList)) >= (ssize_t)(encodeState->stringBuffer.bytes.length - encodeState->atIndex))) { + NSCParameterAssert(((encodeState->atIndex + (formattedStringLength * 2UL) + 256UL) > encodeState->stringBuffer.bytes.length)); + if(JK_EXPECT_F(((encodeState->atIndex + (formattedStringLength * 2UL) + 256UL) > encodeState->stringBuffer.bytes.length)) && JK_EXPECT_F((jk_managedBuffer_resize(&encodeState->stringBuffer, encodeState->atIndex + (formattedStringLength * 2UL)+ 4096UL) == NULL))) { jk_encode_error(encodeState, @"Unable to resize temporary buffer."); returnValue = 1; goto exitNow; } + if(JK_EXPECT_F((formattedStringLength = vsnprintf((char *)&encodeState->stringBuffer.bytes.ptr[encodeState->atIndex], (encodeState->stringBuffer.bytes.length - encodeState->atIndex), format, varArgsListCopy)) >= (ssize_t)(encodeState->stringBuffer.bytes.length - encodeState->atIndex))) { jk_encode_error(encodeState, @"vsnprintf failed unexpectedly."); returnValue = 1; goto exitNow; } + } + +exitNow: + va_end(varArgsList); + va_end(varArgsListCopy); + if(JK_EXPECT_T(returnValue == 0)) { encodeState->atIndex += formattedStringLength; jk_encode_updateCache(encodeState, cacheSlot, startingAtIndex, object); } + return(returnValue); +} + +static int jk_encode_write(JKEncodeState *encodeState, JKEncodeCache *cacheSlot, size_t startingAtIndex, id object, const char *format) { + NSCParameterAssert((encodeState != NULL) && (encodeState->atIndex < encodeState->stringBuffer.bytes.length) && (startingAtIndex <= encodeState->atIndex) && (format != NULL)); + if(JK_EXPECT_F(((encodeState->atIndex + strlen(format) + 256UL) > encodeState->stringBuffer.bytes.length)) && JK_EXPECT_F((jk_managedBuffer_resize(&encodeState->stringBuffer, encodeState->atIndex + strlen(format) + 1024UL) == NULL))) { jk_encode_error(encodeState, @"Unable to resize temporary buffer."); return(1); } + + size_t formatIdx = 0UL; + for(formatIdx = 0UL; format[formatIdx] != 0; formatIdx++) { NSCParameterAssert(encodeState->atIndex < encodeState->stringBuffer.bytes.length); encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = format[formatIdx]; } + jk_encode_updateCache(encodeState, cacheSlot, startingAtIndex, object); + return(0); +} + +static int jk_encode_writePrettyPrintWhiteSpace(JKEncodeState *encodeState) { + NSCParameterAssert((encodeState != NULL) && ((encodeState->serializeOptionFlags & JKSerializeOptionPretty) != 0UL)); + if(JK_EXPECT_F((encodeState->atIndex + ((encodeState->depth + 1UL) * 2UL) + 16UL) > encodeState->stringBuffer.bytes.length) && JK_EXPECT_T(jk_managedBuffer_resize(&encodeState->stringBuffer, encodeState->atIndex + ((encodeState->depth + 1UL) * 2UL) + 4096UL) == NULL)) { jk_encode_error(encodeState, @"Unable to resize temporary buffer."); return(1); } + encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = '\n'; + size_t depthWhiteSpace = 0UL; + for(depthWhiteSpace = 0UL; depthWhiteSpace < (encodeState->depth * 2UL); depthWhiteSpace++) { NSCParameterAssert(encodeState->atIndex < encodeState->stringBuffer.bytes.length); encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = ' '; } + return(0); +} + +static int jk_encode_write1slow(JKEncodeState *encodeState, ssize_t depthChange, const char *format) { + NSCParameterAssert((encodeState != NULL) && (encodeState->atIndex < encodeState->stringBuffer.bytes.length) && (format != NULL) && ((depthChange >= -1L) && (depthChange <= 1L)) && ((encodeState->depth == 0UL) ? (depthChange >= 0L) : 1) && ((encodeState->serializeOptionFlags & JKSerializeOptionPretty) != 0UL)); + if(JK_EXPECT_F((encodeState->atIndex + ((encodeState->depth + 1UL) * 2UL) + 16UL) > encodeState->stringBuffer.bytes.length) && JK_EXPECT_F(jk_managedBuffer_resize(&encodeState->stringBuffer, encodeState->atIndex + ((encodeState->depth + 1UL) * 2UL) + 4096UL) == NULL)) { jk_encode_error(encodeState, @"Unable to resize temporary buffer."); return(1); } + encodeState->depth += depthChange; + if(JK_EXPECT_T(format[0] == ':')) { encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = format[0]; encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = ' '; } + else { + if(JK_EXPECT_F(depthChange == -1L)) { if(JK_EXPECT_F(jk_encode_writePrettyPrintWhiteSpace(encodeState))) { return(1); } } + encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = format[0]; + if(JK_EXPECT_T(depthChange != -1L)) { if(JK_EXPECT_F(jk_encode_writePrettyPrintWhiteSpace(encodeState))) { return(1); } } + } + NSCParameterAssert(encodeState->atIndex < encodeState->stringBuffer.bytes.length); + return(0); +} + +static int jk_encode_write1fast(JKEncodeState *encodeState, ssize_t depthChange JK_UNUSED_ARG, const char *format) { + NSCParameterAssert((encodeState != NULL) && (encodeState->atIndex < encodeState->stringBuffer.bytes.length) && ((encodeState->serializeOptionFlags & JKSerializeOptionPretty) == 0UL)); + if(JK_EXPECT_T((encodeState->atIndex + 4UL) < encodeState->stringBuffer.bytes.length)) { encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = format[0]; } + else { return(jk_encode_write(encodeState, NULL, 0UL, NULL, format)); } + return(0); +} + +static int jk_encode_writen(JKEncodeState *encodeState, JKEncodeCache *cacheSlot, size_t startingAtIndex, id object, const char *format, size_t length) { + NSCParameterAssert((encodeState != NULL) && (encodeState->atIndex < encodeState->stringBuffer.bytes.length) && (startingAtIndex <= encodeState->atIndex)); + if(JK_EXPECT_F((encodeState->stringBuffer.bytes.length - encodeState->atIndex) < (length + 4UL))) { if(jk_managedBuffer_resize(&encodeState->stringBuffer, encodeState->atIndex + 4096UL + length) == NULL) { jk_encode_error(encodeState, @"Unable to resize temporary buffer."); return(1); } } + memcpy(encodeState->stringBuffer.bytes.ptr + encodeState->atIndex, format, length); + encodeState->atIndex += length; + jk_encode_updateCache(encodeState, cacheSlot, startingAtIndex, object); + return(0); +} + +JK_STATIC_INLINE JKHash jk_encode_object_hash(void *objectPtr) { + return( ( (((JKHash)objectPtr) >> 21) ^ (((JKHash)objectPtr) >> 9) ) + (((JKHash)objectPtr) >> 4) ); +} + +static int jk_encode_add_atom_to_buffer(JKEncodeState *encodeState, void *objectPtr) { + NSCParameterAssert((encodeState != NULL) && (encodeState->atIndex < encodeState->stringBuffer.bytes.length) && (objectPtr != NULL)); + + id object = (id)objectPtr, encodeCacheObject = object; + int isClass = JKClassUnknown; + size_t startingAtIndex = encodeState->atIndex; + + JKHash objectHash = jk_encode_object_hash(objectPtr); + JKEncodeCache *cacheSlot = &encodeState->cache[objectHash % JK_ENCODE_CACHE_SLOTS]; + + if(JK_EXPECT_T(cacheSlot->object == object)) { + NSCParameterAssert((cacheSlot->object != NULL) && + (cacheSlot->offset < encodeState->atIndex) && ((cacheSlot->offset + cacheSlot->length) < encodeState->atIndex) && + (cacheSlot->offset < encodeState->stringBuffer.bytes.length) && ((cacheSlot->offset + cacheSlot->length) < encodeState->stringBuffer.bytes.length) && + ((encodeState->stringBuffer.bytes.ptr + encodeState->atIndex) < (encodeState->stringBuffer.bytes.ptr + encodeState->stringBuffer.bytes.length)) && + ((encodeState->stringBuffer.bytes.ptr + cacheSlot->offset) < (encodeState->stringBuffer.bytes.ptr + encodeState->stringBuffer.bytes.length)) && + ((encodeState->stringBuffer.bytes.ptr + cacheSlot->offset + cacheSlot->length) < (encodeState->stringBuffer.bytes.ptr + encodeState->stringBuffer.bytes.length))); + if(JK_EXPECT_F(((encodeState->atIndex + cacheSlot->length + 256UL) > encodeState->stringBuffer.bytes.length)) && JK_EXPECT_F((jk_managedBuffer_resize(&encodeState->stringBuffer, encodeState->atIndex + cacheSlot->length + 1024UL) == NULL))) { jk_encode_error(encodeState, @"Unable to resize temporary buffer."); return(1); } + NSCParameterAssert(((encodeState->atIndex + cacheSlot->length) < encodeState->stringBuffer.bytes.length) && + ((encodeState->stringBuffer.bytes.ptr + encodeState->atIndex) < (encodeState->stringBuffer.bytes.ptr + encodeState->stringBuffer.bytes.length)) && + ((encodeState->stringBuffer.bytes.ptr + encodeState->atIndex + cacheSlot->length) < (encodeState->stringBuffer.bytes.ptr + encodeState->stringBuffer.bytes.length)) && + ((encodeState->stringBuffer.bytes.ptr + cacheSlot->offset) < (encodeState->stringBuffer.bytes.ptr + encodeState->stringBuffer.bytes.length)) && + ((encodeState->stringBuffer.bytes.ptr + cacheSlot->offset + cacheSlot->length) < (encodeState->stringBuffer.bytes.ptr + encodeState->stringBuffer.bytes.length)) && + ((encodeState->stringBuffer.bytes.ptr + cacheSlot->offset + cacheSlot->length) < (encodeState->stringBuffer.bytes.ptr + encodeState->atIndex))); + memcpy(encodeState->stringBuffer.bytes.ptr + encodeState->atIndex, encodeState->stringBuffer.bytes.ptr + cacheSlot->offset, cacheSlot->length); + encodeState->atIndex += cacheSlot->length; + return(0); + } + + // When we encounter a class that we do not handle, and we have either a delegate or block that the user supplied to format unsupported classes, + // we "re-run" the object check. However, we re-run the object check exactly ONCE. If the user supplies an object that isn't one of the + // supported classes, we fail the second time (i.e., double fault error). + BOOL rerunningAfterClassFormatter = NO; + rerunAfterClassFormatter:; + + // XXX XXX XXX XXX + // + // We need to work around a bug in 10.7, which breaks ABI compatibility with Objective-C going back not just to 10.0, but OpenStep and even NextStep. + // + // It has long been documented that "the very first thing that a pointer to an Objective-C object "points to" is a pointer to that objects class". + // + // This is euphemistically called "tagged pointers". There are a number of highly technical problems with this, most involving long passages from + // the C standard(s). In short, one can make a strong case, couched from the perspective of the C standard(s), that that 10.7 "tagged pointers" are + // fundamentally Wrong and Broken, and should have never been implemented. Assuming those points are glossed over, because the change is very clearly + // breaking ABI compatibility, this should have resulted in a minimum of a "minimum version required" bump in various shared libraries to prevent + // causes code that used to work just fine to suddenly break without warning. + // + // In fact, the C standard says that the hack below is "undefined behavior"- there is no requirement that the 10.7 tagged pointer hack of setting the + // "lower, unused bits" must be preserved when casting the result to an integer type, but this "works" because for most architectures + // `sizeof(long) == sizeof(void *)` and the compiler uses the same representation for both. (note: this is informal, not meant to be + // normative or pedantically correct). + // + // In other words, while this "works" for now, technically the compiler is not obligated to do "what we want", and a later version of the compiler + // is not required in any way to produce the same results or behavior that earlier versions of the compiler did for the statement below. + // + // Fan-fucking-tastic. + // + // Why not just use `object_getClass()`? Because `object->isa` reduces to (typically) a *single* instruction. Calling `object_getClass()` requires + // that the compiler potentially spill registers, establish a function call frame / environment, and finally execute a "jump subroutine" instruction. + // Then, the called subroutine must spend half a dozen instructions in its prolog, however many instructions doing whatever it does, then half a dozen + // instructions in its prolog. One instruction compared to dozens, maybe a hundred instructions. + // + // Yes, that's one to two orders of magnitude difference. Which is compelling in its own right. When going for performance, you're often happy with + // gains in the two to three percent range. + // + // XXX XXX XXX XXX + + BOOL workAroundMacOSXABIBreakingBug = NO; + if(JK_EXPECT_F(((NSUInteger)object) & 0x1)) { workAroundMacOSXABIBreakingBug = YES; goto slowClassLookup; } + + if(JK_EXPECT_T(object_getClass(object) == encodeState->fastClassLookup.stringClass)) { isClass = JKClassString; } + else if(JK_EXPECT_T(object_getClass(object) == encodeState->fastClassLookup.numberClass)) { isClass = JKClassNumber; } + else if(JK_EXPECT_T(object_getClass(object) == encodeState->fastClassLookup.dictionaryClass)) { isClass = JKClassDictionary; } + else if(JK_EXPECT_T(object_getClass(object) == encodeState->fastClassLookup.arrayClass)) { isClass = JKClassArray; } + else if(JK_EXPECT_T(object_getClass(object) == encodeState->fastClassLookup.nullClass)) { isClass = JKClassNull; } + else { + slowClassLookup: + if(JK_EXPECT_T([object isKindOfClass:[NSString class]])) { if(workAroundMacOSXABIBreakingBug == NO) { encodeState->fastClassLookup.stringClass = object_getClass(object); } isClass = JKClassString; } + else if(JK_EXPECT_T([object isKindOfClass:[NSNumber class]])) { if(workAroundMacOSXABIBreakingBug == NO) { encodeState->fastClassLookup.numberClass = object_getClass(object); } isClass = JKClassNumber; } + else if(JK_EXPECT_T([object isKindOfClass:[NSDictionary class]])) { if(workAroundMacOSXABIBreakingBug == NO) { encodeState->fastClassLookup.dictionaryClass = object_getClass(object); } isClass = JKClassDictionary; } + else if(JK_EXPECT_T([object isKindOfClass:[NSArray class]])) { if(workAroundMacOSXABIBreakingBug == NO) { encodeState->fastClassLookup.arrayClass = object_getClass(object); } isClass = JKClassArray; } + else if(JK_EXPECT_T([object isKindOfClass:[NSNull class]])) { if(workAroundMacOSXABIBreakingBug == NO) { encodeState->fastClassLookup.nullClass = object_getClass(object); } isClass = JKClassNull; } + else { + if((rerunningAfterClassFormatter == NO) && ( +#ifdef __BLOCKS__ + ((encodeState->classFormatterBlock) && ((object = encodeState->classFormatterBlock(object)) != NULL)) || +#endif + ((encodeState->classFormatterIMP) && ((object = encodeState->classFormatterIMP(encodeState->classFormatterDelegate, encodeState->classFormatterSelector, object)) != NULL)) )) { rerunningAfterClassFormatter = YES; goto rerunAfterClassFormatter; } + + if(rerunningAfterClassFormatter == NO) { jk_encode_error(encodeState, @"Unable to serialize object class %@.", NSStringFromClass([encodeCacheObject class])); return(1); } + else { jk_encode_error(encodeState, @"Unable to serialize object class %@ that was returned by the unsupported class formatter. Original object class was %@.", (object == NULL) ? @"NULL" : NSStringFromClass([object class]), NSStringFromClass([encodeCacheObject class])); return(1); } + } + } + + // This is here for the benefit of the optimizer. It allows the optimizer to do loop invariant code motion for the JKClassArray + // and JKClassDictionary cases when printing simple, single characters via jk_encode_write(), which is actually a macro: + // #define jk_encode_write1(es, dc, f) (_jk_encode_prettyPrint ? jk_encode_write1slow(es, dc, f) : jk_encode_write1fast(es, dc, f)) + int _jk_encode_prettyPrint = JK_EXPECT_T((encodeState->serializeOptionFlags & JKSerializeOptionPretty) == 0) ? 0 : 1; + + switch(isClass) { + case JKClassString: + { + { + const unsigned char *cStringPtr = (const unsigned char *)CFStringGetCStringPtr((CFStringRef)object, kCFStringEncodingMacRoman); + if(cStringPtr != NULL) { + const unsigned char *utf8String = cStringPtr; + size_t utf8Idx = 0UL; + + CFIndex stringLength = CFStringGetLength((CFStringRef)object); + if(JK_EXPECT_F(((encodeState->atIndex + (stringLength * 2UL) + 256UL) > encodeState->stringBuffer.bytes.length)) && JK_EXPECT_F((jk_managedBuffer_resize(&encodeState->stringBuffer, encodeState->atIndex + (stringLength * 2UL) + 1024UL) == NULL))) { jk_encode_error(encodeState, @"Unable to resize temporary buffer."); return(1); } + + if(JK_EXPECT_T((encodeState->encodeOption & JKEncodeOptionStringObjTrimQuotes) == 0UL)) { encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = '\"'; } + for(utf8Idx = 0UL; utf8String[utf8Idx] != 0U; utf8Idx++) { + NSCParameterAssert(((&encodeState->stringBuffer.bytes.ptr[encodeState->atIndex]) - encodeState->stringBuffer.bytes.ptr) < (ssize_t)encodeState->stringBuffer.bytes.length); + NSCParameterAssert(encodeState->atIndex < encodeState->stringBuffer.bytes.length); + if(JK_EXPECT_F(utf8String[utf8Idx] >= 0x80U)) { encodeState->atIndex = startingAtIndex; goto slowUTF8Path; } + if(JK_EXPECT_F(utf8String[utf8Idx] < 0x20U)) { + switch(utf8String[utf8Idx]) { + case '\b': encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = '\\'; encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = 'b'; break; + case '\f': encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = '\\'; encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = 'f'; break; + case '\n': encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = '\\'; encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = 'n'; break; + case '\r': encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = '\\'; encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = 'r'; break; + case '\t': encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = '\\'; encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = 't'; break; + default: if(JK_EXPECT_F(jk_encode_printf(encodeState, NULL, 0UL, NULL, "\\u%4.4x", utf8String[utf8Idx]))) { return(1); } break; + } + } else { + if(JK_EXPECT_F(utf8String[utf8Idx] == '\"') || JK_EXPECT_F(utf8String[utf8Idx] == '\\') || (JK_EXPECT_F(encodeState->serializeOptionFlags & JKSerializeOptionEscapeForwardSlashes) && JK_EXPECT_F(utf8String[utf8Idx] == '/'))) { encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = '\\'; } + encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = utf8String[utf8Idx]; + } + } + NSCParameterAssert((encodeState->atIndex + 1UL) < encodeState->stringBuffer.bytes.length); + if(JK_EXPECT_T((encodeState->encodeOption & JKEncodeOptionStringObjTrimQuotes) == 0UL)) { encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = '\"'; } + jk_encode_updateCache(encodeState, cacheSlot, startingAtIndex, encodeCacheObject); + return(0); + } + } + + slowUTF8Path: + { + CFIndex stringLength = CFStringGetLength((CFStringRef)object); + CFIndex maxStringUTF8Length = CFStringGetMaximumSizeForEncoding(stringLength, kCFStringEncodingUTF8) + 32L; + + if(JK_EXPECT_F((size_t)maxStringUTF8Length > encodeState->utf8ConversionBuffer.bytes.length) && JK_EXPECT_F(jk_managedBuffer_resize(&encodeState->utf8ConversionBuffer, maxStringUTF8Length + 1024UL) == NULL)) { jk_encode_error(encodeState, @"Unable to resize temporary buffer."); return(1); } + + CFIndex usedBytes = 0L, convertedCount = 0L; + convertedCount = CFStringGetBytes((CFStringRef)object, CFRangeMake(0L, stringLength), kCFStringEncodingUTF8, '?', NO, encodeState->utf8ConversionBuffer.bytes.ptr, encodeState->utf8ConversionBuffer.bytes.length - 16L, &usedBytes); + if(JK_EXPECT_F(convertedCount != stringLength) || JK_EXPECT_F(usedBytes < 0L)) { jk_encode_error(encodeState, @"An error occurred converting the contents of a NSString to UTF8."); return(1); } + + if(JK_EXPECT_F((encodeState->atIndex + (maxStringUTF8Length * 2UL) + 256UL) > encodeState->stringBuffer.bytes.length) && JK_EXPECT_F(jk_managedBuffer_resize(&encodeState->stringBuffer, encodeState->atIndex + (maxStringUTF8Length * 2UL) + 1024UL) == NULL)) { jk_encode_error(encodeState, @"Unable to resize temporary buffer."); return(1); } + + const unsigned char *utf8String = encodeState->utf8ConversionBuffer.bytes.ptr; + + size_t utf8Idx = 0UL; + if(JK_EXPECT_T((encodeState->encodeOption & JKEncodeOptionStringObjTrimQuotes) == 0UL)) { encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = '\"'; } + for(utf8Idx = 0UL; utf8Idx < (size_t)usedBytes; utf8Idx++) { + NSCParameterAssert(((&encodeState->stringBuffer.bytes.ptr[encodeState->atIndex]) - encodeState->stringBuffer.bytes.ptr) < (ssize_t)encodeState->stringBuffer.bytes.length); + NSCParameterAssert(encodeState->atIndex < encodeState->stringBuffer.bytes.length); + NSCParameterAssert((CFIndex)utf8Idx < usedBytes); + if(JK_EXPECT_F(utf8String[utf8Idx] < 0x20U)) { + switch(utf8String[utf8Idx]) { + case '\b': encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = '\\'; encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = 'b'; break; + case '\f': encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = '\\'; encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = 'f'; break; + case '\n': encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = '\\'; encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = 'n'; break; + case '\r': encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = '\\'; encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = 'r'; break; + case '\t': encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = '\\'; encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = 't'; break; + default: if(JK_EXPECT_F(jk_encode_printf(encodeState, NULL, 0UL, NULL, "\\u%4.4x", utf8String[utf8Idx]))) { return(1); } break; + } + } else { + if(JK_EXPECT_F(utf8String[utf8Idx] >= 0x80U) && (encodeState->serializeOptionFlags & JKSerializeOptionEscapeUnicode)) { + const unsigned char *nextValidCharacter = NULL; + UTF32 u32ch = 0U; + ConversionResult result; + + if(JK_EXPECT_F((result = ConvertSingleCodePointInUTF8(&utf8String[utf8Idx], &utf8String[usedBytes], (UTF8 const **)&nextValidCharacter, &u32ch)) != conversionOK)) { jk_encode_error(encodeState, @"Error converting UTF8."); return(1); } + else { + utf8Idx = (nextValidCharacter - utf8String) - 1UL; + if(JK_EXPECT_T(u32ch <= 0xffffU)) { if(JK_EXPECT_F(jk_encode_printf(encodeState, NULL, 0UL, NULL, "\\u%4.4x", u32ch))) { return(1); } } + else { if(JK_EXPECT_F(jk_encode_printf(encodeState, NULL, 0UL, NULL, "\\u%4.4x\\u%4.4x", (0xd7c0U + (u32ch >> 10)), (0xdc00U + (u32ch & 0x3ffU))))) { return(1); } } + } + } else { + if(JK_EXPECT_F(utf8String[utf8Idx] == '\"') || JK_EXPECT_F(utf8String[utf8Idx] == '\\') || (JK_EXPECT_F(encodeState->serializeOptionFlags & JKSerializeOptionEscapeForwardSlashes) && JK_EXPECT_F(utf8String[utf8Idx] == '/'))) { encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = '\\'; } + encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = utf8String[utf8Idx]; + } + } + } + NSCParameterAssert((encodeState->atIndex + 1UL) < encodeState->stringBuffer.bytes.length); + if(JK_EXPECT_T((encodeState->encodeOption & JKEncodeOptionStringObjTrimQuotes) == 0UL)) { encodeState->stringBuffer.bytes.ptr[encodeState->atIndex++] = '\"'; } + jk_encode_updateCache(encodeState, cacheSlot, startingAtIndex, encodeCacheObject); + return(0); + } + } + break; + + case JKClassNumber: + { + if(object == (id)kCFBooleanTrue) { return(jk_encode_writen(encodeState, cacheSlot, startingAtIndex, encodeCacheObject, "true", 4UL)); } + else if(object == (id)kCFBooleanFalse) { return(jk_encode_writen(encodeState, cacheSlot, startingAtIndex, encodeCacheObject, "false", 5UL)); } + + const char *objCType = [object objCType]; + char anum[256], *aptr = &anum[255]; + int isNegative = 0; + unsigned long long ullv; + long long llv; + + if(JK_EXPECT_F(objCType == NULL) || JK_EXPECT_F(objCType[0] == 0) || JK_EXPECT_F(objCType[1] != 0)) { jk_encode_error(encodeState, @"NSNumber conversion error, unknown type. Type: '%s'", (objCType == NULL) ? "" : objCType); return(1); } + + switch(objCType[0]) { + case 'c': case 'i': case 's': case 'l': case 'q': + if(JK_EXPECT_T(CFNumberGetValue((CFNumberRef)object, kCFNumberLongLongType, &llv))) { + if(llv < 0LL) { ullv = -llv; isNegative = 1; } else { ullv = llv; isNegative = 0; } + goto convertNumber; + } else { jk_encode_error(encodeState, @"Unable to get scalar value from number object."); return(1); } + break; + case 'C': case 'I': case 'S': case 'L': case 'Q': case 'B': + if(JK_EXPECT_T(CFNumberGetValue((CFNumberRef)object, kCFNumberLongLongType, &ullv))) { + convertNumber: + if(JK_EXPECT_F(ullv < 10ULL)) { *--aptr = ullv + '0'; } else { while(JK_EXPECT_T(ullv > 0ULL)) { *--aptr = (ullv % 10ULL) + '0'; ullv /= 10ULL; NSCParameterAssert(aptr > anum); } } + if(isNegative) { *--aptr = '-'; } + NSCParameterAssert(aptr > anum); + return(jk_encode_writen(encodeState, cacheSlot, startingAtIndex, encodeCacheObject, aptr, &anum[255] - aptr)); + } else { jk_encode_error(encodeState, @"Unable to get scalar value from number object."); return(1); } + break; + case 'f': case 'd': + { + double dv; + if(JK_EXPECT_T(CFNumberGetValue((CFNumberRef)object, kCFNumberDoubleType, &dv))) { + if(JK_EXPECT_F(!isfinite(dv))) { jk_encode_error(encodeState, @"Floating point values must be finite. JSON does not support NaN or Infinity."); return(1); } + return(jk_encode_printf(encodeState, cacheSlot, startingAtIndex, encodeCacheObject, "%.17g", dv)); + } else { jk_encode_error(encodeState, @"Unable to get floating point value from number object."); return(1); } + } + break; + default: jk_encode_error(encodeState, @"NSNumber conversion error, unknown type. Type: '%c' / 0x%2.2x", objCType[0], objCType[0]); return(1); break; + } + } + break; + + case JKClassArray: + { + int printComma = 0; + CFIndex arrayCount = CFArrayGetCount((CFArrayRef)object), idx = 0L; + if(JK_EXPECT_F(jk_encode_write1(encodeState, 1L, "["))) { return(1); } + if(JK_EXPECT_F(arrayCount > 1020L)) { + for(id arrayObject in object) { if(JK_EXPECT_T(printComma)) { if(JK_EXPECT_F(jk_encode_write1(encodeState, 0L, ","))) { return(1); } } printComma = 1; if(JK_EXPECT_F(jk_encode_add_atom_to_buffer(encodeState, arrayObject))) { return(1); } } + } else { + void *objects[1024]; + CFArrayGetValues((CFArrayRef)object, CFRangeMake(0L, arrayCount), (const void **)objects); + for(idx = 0L; idx < arrayCount; idx++) { if(JK_EXPECT_T(printComma)) { if(JK_EXPECT_F(jk_encode_write1(encodeState, 0L, ","))) { return(1); } } printComma = 1; if(JK_EXPECT_F(jk_encode_add_atom_to_buffer(encodeState, objects[idx]))) { return(1); } } + } + return(jk_encode_write1(encodeState, -1L, "]")); + } + break; + + case JKClassDictionary: + { + int printComma = 0; + CFIndex dictionaryCount = CFDictionaryGetCount((CFDictionaryRef)object), idx = 0L; + id enumerateObject = JK_EXPECT_F(_jk_encode_prettyPrint) ? [[object allKeys] sortedArrayUsingSelector:@selector(compare:)] : object; + + if(JK_EXPECT_F(jk_encode_write1(encodeState, 1L, "{"))) { return(1); } + if(JK_EXPECT_F(_jk_encode_prettyPrint) || JK_EXPECT_F(dictionaryCount > 1020L)) { + for(id keyObject in enumerateObject) { + if(JK_EXPECT_T(printComma)) { if(JK_EXPECT_F(jk_encode_write1(encodeState, 0L, ","))) { return(1); } } + printComma = 1; + if(JK_EXPECT_F((object_getClass(keyObject) != encodeState->fastClassLookup.stringClass)) && JK_EXPECT_F(([keyObject isKindOfClass:[NSString class]] == NO))) { jk_encode_error(encodeState, @"Key must be a string object."); return(1); } + if(JK_EXPECT_F(jk_encode_add_atom_to_buffer(encodeState, keyObject))) { return(1); } + if(JK_EXPECT_F(jk_encode_write1(encodeState, 0L, ":"))) { return(1); } + if(JK_EXPECT_F(jk_encode_add_atom_to_buffer(encodeState, (void *)CFDictionaryGetValue((CFDictionaryRef)object, keyObject)))) { return(1); } + } + } else { + void *keys[1024], *objects[1024]; + CFDictionaryGetKeysAndValues((CFDictionaryRef)object, (const void **)keys, (const void **)objects); + for(idx = 0L; idx < dictionaryCount; idx++) { + if(JK_EXPECT_T(printComma)) { if(JK_EXPECT_F(jk_encode_write1(encodeState, 0L, ","))) { return(1); } } + printComma = 1; + if(JK_EXPECT_F(object_getClass(((id)keys[idx])) != encodeState->fastClassLookup.stringClass) && JK_EXPECT_F([(id)keys[idx] isKindOfClass:[NSString class]] == NO)) { jk_encode_error(encodeState, @"Key must be a string object."); return(1); } + if(JK_EXPECT_F(jk_encode_add_atom_to_buffer(encodeState, keys[idx]))) { return(1); } + if(JK_EXPECT_F(jk_encode_write1(encodeState, 0L, ":"))) { return(1); } + if(JK_EXPECT_F(jk_encode_add_atom_to_buffer(encodeState, objects[idx]))) { return(1); } + } + } + return(jk_encode_write1(encodeState, -1L, "}")); + } + break; + + case JKClassNull: return(jk_encode_writen(encodeState, cacheSlot, startingAtIndex, encodeCacheObject, "null", 4UL)); break; + + default: jk_encode_error(encodeState, @"Unable to serialize object class %@.", NSStringFromClass([object class])); return(1); break; + } + + return(0); +} + + +@implementation JKSerializer + ++ (id)serializeObject:(id)object options:(JKSerializeOptionFlags)optionFlags encodeOption:(JKEncodeOptionType)encodeOption block:(JKSERIALIZER_BLOCKS_PROTO)block delegate:(id)delegate selector:(SEL)selector error:(NSError **)error +{ + return([[[[self alloc] init] autorelease] serializeObject:object options:optionFlags encodeOption:encodeOption block:block delegate:delegate selector:selector error:error]); +} + +- (id)serializeObject:(id)object options:(JKSerializeOptionFlags)optionFlags encodeOption:(JKEncodeOptionType)encodeOption block:(JKSERIALIZER_BLOCKS_PROTO)block delegate:(id)delegate selector:(SEL)selector error:(NSError **)error +{ +#ifndef __BLOCKS__ +#pragma unused(block) +#endif + NSParameterAssert((object != NULL) && (encodeState == NULL) && ((delegate != NULL) ? (block == NULL) : 1) && ((block != NULL) ? (delegate == NULL) : 1) && + (((encodeOption & JKEncodeOptionCollectionObj) != 0UL) ? (((encodeOption & JKEncodeOptionStringObj) == 0UL) && ((encodeOption & JKEncodeOptionStringObjTrimQuotes) == 0UL)) : 1) && + (((encodeOption & JKEncodeOptionStringObj) != 0UL) ? ((encodeOption & JKEncodeOptionCollectionObj) == 0UL) : 1)); + + id returnObject = NULL; + + if(encodeState != NULL) { [self releaseState]; } + if((encodeState = (struct JKEncodeState *)calloc(1UL, sizeof(JKEncodeState))) == NULL) { [NSException raise:NSMallocException format:@"Unable to allocate state structure."]; return(NULL); } + + if((error != NULL) && (*error != NULL)) { *error = NULL; } + + if(delegate != NULL) { + if(selector == NULL) { [NSException raise:NSInvalidArgumentException format:@"The delegate argument is not NULL, but the selector argument is NULL."]; } + if([delegate respondsToSelector:selector] == NO) { [NSException raise:NSInvalidArgumentException format:@"The serializeUnsupportedClassesUsingDelegate: delegate does not respond to the selector argument."]; } + encodeState->classFormatterDelegate = delegate; + encodeState->classFormatterSelector = selector; + encodeState->classFormatterIMP = (JKClassFormatterIMP)[delegate methodForSelector:selector]; + NSCParameterAssert(encodeState->classFormatterIMP != NULL); + } + +#ifdef __BLOCKS__ + encodeState->classFormatterBlock = block; +#endif + encodeState->serializeOptionFlags = optionFlags; + encodeState->encodeOption = encodeOption; + encodeState->stringBuffer.roundSizeUpToMultipleOf = (1024UL * 32UL); + encodeState->utf8ConversionBuffer.roundSizeUpToMultipleOf = 4096UL; + + unsigned char stackJSONBuffer[JK_JSONBUFFER_SIZE] JK_ALIGNED(64); + jk_managedBuffer_setToStackBuffer(&encodeState->stringBuffer, stackJSONBuffer, sizeof(stackJSONBuffer)); + + unsigned char stackUTF8Buffer[JK_UTF8BUFFER_SIZE] JK_ALIGNED(64); + jk_managedBuffer_setToStackBuffer(&encodeState->utf8ConversionBuffer, stackUTF8Buffer, sizeof(stackUTF8Buffer)); + + if(((encodeOption & JKEncodeOptionCollectionObj) != 0UL) && (([object isKindOfClass:[NSArray class]] == NO) && ([object isKindOfClass:[NSDictionary class]] == NO))) { jk_encode_error(encodeState, @"Unable to serialize object class %@, expected a NSArray or NSDictionary.", NSStringFromClass([object class])); goto errorExit; } + if(((encodeOption & JKEncodeOptionStringObj) != 0UL) && ([object isKindOfClass:[NSString class]] == NO)) { jk_encode_error(encodeState, @"Unable to serialize object class %@, expected a NSString.", NSStringFromClass([object class])); goto errorExit; } + + if(jk_encode_add_atom_to_buffer(encodeState, object) == 0) { + BOOL stackBuffer = ((encodeState->stringBuffer.flags & JKManagedBufferMustFree) == 0UL) ? YES : NO; + + if((encodeState->atIndex < 2UL)) + if((stackBuffer == NO) && ((encodeState->stringBuffer.bytes.ptr = (unsigned char *)reallocf(encodeState->stringBuffer.bytes.ptr, encodeState->atIndex + 16UL)) == NULL)) { jk_encode_error(encodeState, @"Unable to realloc buffer"); goto errorExit; } + + switch((encodeOption & JKEncodeOptionAsTypeMask)) { + case JKEncodeOptionAsData: + if(stackBuffer == YES) { if((returnObject = [(id)CFDataCreate( NULL, encodeState->stringBuffer.bytes.ptr, (CFIndex)encodeState->atIndex) autorelease]) == NULL) { jk_encode_error(encodeState, @"Unable to create NSData object"); } } + else { if((returnObject = [(id)CFDataCreateWithBytesNoCopy( NULL, encodeState->stringBuffer.bytes.ptr, (CFIndex)encodeState->atIndex, NULL) autorelease]) == NULL) { jk_encode_error(encodeState, @"Unable to create NSData object"); } } + break; + + case JKEncodeOptionAsString: + if(stackBuffer == YES) { if((returnObject = [(id)CFStringCreateWithBytes( NULL, (const UInt8 *)encodeState->stringBuffer.bytes.ptr, (CFIndex)encodeState->atIndex, kCFStringEncodingUTF8, NO) autorelease]) == NULL) { jk_encode_error(encodeState, @"Unable to create NSString object"); } } + else { if((returnObject = [(id)CFStringCreateWithBytesNoCopy(NULL, (const UInt8 *)encodeState->stringBuffer.bytes.ptr, (CFIndex)encodeState->atIndex, kCFStringEncodingUTF8, NO, NULL) autorelease]) == NULL) { jk_encode_error(encodeState, @"Unable to create NSString object"); } } + break; + + default: jk_encode_error(encodeState, @"Unknown encode as type."); break; + } + + if((returnObject != NULL) && (stackBuffer == NO)) { encodeState->stringBuffer.flags &= ~JKManagedBufferMustFree; encodeState->stringBuffer.bytes.ptr = NULL; encodeState->stringBuffer.bytes.length = 0UL; } + } + +errorExit: + if((encodeState != NULL) && (error != NULL) && (encodeState->error != NULL)) { *error = encodeState->error; encodeState->error = NULL; } + [self releaseState]; + + return(returnObject); +} + +- (void)releaseState +{ + if(encodeState != NULL) { + jk_managedBuffer_release(&encodeState->stringBuffer); + jk_managedBuffer_release(&encodeState->utf8ConversionBuffer); + free(encodeState); encodeState = NULL; + } +} + +- (void)dealloc +{ + [self releaseState]; + [super dealloc]; +} + +@end + +@implementation NSString (JSONKitSerializing) + +//////////// +#pragma mark Methods for serializing a single NSString. +//////////// + +// Useful for those who need to serialize just a NSString. Otherwise you would have to do something like [NSArray arrayWithObject:stringToBeJSONSerialized], serializing the array, and then chopping of the extra ^\[.*\]$ square brackets. + +// NSData returning methods... + +- (NSData *)JSONData +{ + return([self JSONDataWithOptions:JKSerializeOptionNone includeQuotes:YES error:NULL]); +} + +- (NSData *)JSONDataWithOptions:(JKSerializeOptionFlags)serializeOptions includeQuotes:(BOOL)includeQuotes error:(NSError **)error +{ + return([JKSerializer serializeObject:self options:serializeOptions encodeOption:(JKEncodeOptionAsData | ((includeQuotes == NO) ? JKEncodeOptionStringObjTrimQuotes : 0UL) | JKEncodeOptionStringObj) block:NULL delegate:NULL selector:NULL error:error]); +} + +// NSString returning methods... + +- (NSString *)JSONString +{ + return([self JSONStringWithOptions:JKSerializeOptionNone includeQuotes:YES error:NULL]); +} + +- (NSString *)JSONStringWithOptions:(JKSerializeOptionFlags)serializeOptions includeQuotes:(BOOL)includeQuotes error:(NSError **)error +{ + return([JKSerializer serializeObject:self options:serializeOptions encodeOption:(JKEncodeOptionAsString | ((includeQuotes == NO) ? JKEncodeOptionStringObjTrimQuotes : 0UL) | JKEncodeOptionStringObj) block:NULL delegate:NULL selector:NULL error:error]); +} + +@end + +@implementation NSArray (JSONKitSerializing) + +// NSData returning methods... + +- (NSData *)JSONData +{ + return([JKSerializer serializeObject:self options:JKSerializeOptionNone encodeOption:(JKEncodeOptionAsData | JKEncodeOptionCollectionObj) block:NULL delegate:NULL selector:NULL error:NULL]); +} + +- (NSData *)JSONDataWithOptions:(JKSerializeOptionFlags)serializeOptions error:(NSError **)error +{ + return([JKSerializer serializeObject:self options:serializeOptions encodeOption:(JKEncodeOptionAsData | JKEncodeOptionCollectionObj) block:NULL delegate:NULL selector:NULL error:error]); +} + +- (NSData *)JSONDataWithOptions:(JKSerializeOptionFlags)serializeOptions serializeUnsupportedClassesUsingDelegate:(id)delegate selector:(SEL)selector error:(NSError **)error +{ + return([JKSerializer serializeObject:self options:serializeOptions encodeOption:(JKEncodeOptionAsData | JKEncodeOptionCollectionObj) block:NULL delegate:delegate selector:selector error:error]); +} + +// NSString returning methods... + +- (NSString *)JSONString +{ + return([JKSerializer serializeObject:self options:JKSerializeOptionNone encodeOption:(JKEncodeOptionAsString | JKEncodeOptionCollectionObj) block:NULL delegate:NULL selector:NULL error:NULL]); +} + +- (NSString *)JSONStringWithOptions:(JKSerializeOptionFlags)serializeOptions error:(NSError **)error +{ + return([JKSerializer serializeObject:self options:serializeOptions encodeOption:(JKEncodeOptionAsString | JKEncodeOptionCollectionObj) block:NULL delegate:NULL selector:NULL error:error]); +} + +- (NSString *)JSONStringWithOptions:(JKSerializeOptionFlags)serializeOptions serializeUnsupportedClassesUsingDelegate:(id)delegate selector:(SEL)selector error:(NSError **)error +{ + return([JKSerializer serializeObject:self options:serializeOptions encodeOption:(JKEncodeOptionAsString | JKEncodeOptionCollectionObj) block:NULL delegate:delegate selector:selector error:error]); +} + +@end + +@implementation NSDictionary (JSONKitSerializing) + +// NSData returning methods... + +- (NSData *)JSONData +{ + return([JKSerializer serializeObject:self options:JKSerializeOptionNone encodeOption:(JKEncodeOptionAsData | JKEncodeOptionCollectionObj) block:NULL delegate:NULL selector:NULL error:NULL]); +} + +- (NSData *)JSONDataWithOptions:(JKSerializeOptionFlags)serializeOptions error:(NSError **)error +{ + return([JKSerializer serializeObject:self options:serializeOptions encodeOption:(JKEncodeOptionAsData | JKEncodeOptionCollectionObj) block:NULL delegate:NULL selector:NULL error:error]); +} + +- (NSData *)JSONDataWithOptions:(JKSerializeOptionFlags)serializeOptions serializeUnsupportedClassesUsingDelegate:(id)delegate selector:(SEL)selector error:(NSError **)error +{ + return([JKSerializer serializeObject:self options:serializeOptions encodeOption:(JKEncodeOptionAsData | JKEncodeOptionCollectionObj) block:NULL delegate:delegate selector:selector error:error]); +} + +// NSString returning methods... + +- (NSString *)JSONString +{ + return([JKSerializer serializeObject:self options:JKSerializeOptionNone encodeOption:(JKEncodeOptionAsString | JKEncodeOptionCollectionObj) block:NULL delegate:NULL selector:NULL error:NULL]); +} + +- (NSString *)JSONStringWithOptions:(JKSerializeOptionFlags)serializeOptions error:(NSError **)error +{ + return([JKSerializer serializeObject:self options:serializeOptions encodeOption:(JKEncodeOptionAsString | JKEncodeOptionCollectionObj) block:NULL delegate:NULL selector:NULL error:error]); +} + +- (NSString *)JSONStringWithOptions:(JKSerializeOptionFlags)serializeOptions serializeUnsupportedClassesUsingDelegate:(id)delegate selector:(SEL)selector error:(NSError **)error +{ + return([JKSerializer serializeObject:self options:serializeOptions encodeOption:(JKEncodeOptionAsString | JKEncodeOptionCollectionObj) block:NULL delegate:delegate selector:selector error:error]); +} + +@end + + +#ifdef __BLOCKS__ + +@implementation NSArray (JSONKitSerializingBlockAdditions) + +- (NSData *)JSONDataWithOptions:(JKSerializeOptionFlags)serializeOptions serializeUnsupportedClassesUsingBlock:(id(^)(id object))block error:(NSError **)error +{ + return([JKSerializer serializeObject:self options:serializeOptions encodeOption:(JKEncodeOptionAsData | JKEncodeOptionCollectionObj) block:block delegate:NULL selector:NULL error:error]); +} + +- (NSString *)JSONStringWithOptions:(JKSerializeOptionFlags)serializeOptions serializeUnsupportedClassesUsingBlock:(id(^)(id object))block error:(NSError **)error +{ + return([JKSerializer serializeObject:self options:serializeOptions encodeOption:(JKEncodeOptionAsString | JKEncodeOptionCollectionObj) block:block delegate:NULL selector:NULL error:error]); +} + +@end + +@implementation NSDictionary (JSONKitSerializingBlockAdditions) + +- (NSData *)JSONDataWithOptions:(JKSerializeOptionFlags)serializeOptions serializeUnsupportedClassesUsingBlock:(id(^)(id object))block error:(NSError **)error +{ + return([JKSerializer serializeObject:self options:serializeOptions encodeOption:(JKEncodeOptionAsData | JKEncodeOptionCollectionObj) block:block delegate:NULL selector:NULL error:error]); +} + +- (NSString *)JSONStringWithOptions:(JKSerializeOptionFlags)serializeOptions serializeUnsupportedClassesUsingBlock:(id(^)(id object))block error:(NSError **)error +{ + return([JKSerializer serializeObject:self options:serializeOptions encodeOption:(JKEncodeOptionAsString | JKEncodeOptionCollectionObj) block:block delegate:NULL selector:NULL error:error]); +} + +@end + +#endif // __BLOCKS__ + diff --git a/JQQY/ThirdParty/AFNetworking/Reachability.h b/JQQY/ThirdParty/AFNetworking/Reachability.h new file mode 100755 index 0000000000000000000000000000000000000000..ca943b6568e7b93d962884bf3d0582b4d6ba5a0b --- /dev/null +++ b/JQQY/ThirdParty/AFNetworking/Reachability.h @@ -0,0 +1,102 @@ +/* + Copyright (c) 2011, Tony Million. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + */ + +#import +#import + +//! Project version number for MacOSReachability. +FOUNDATION_EXPORT double ReachabilityVersionNumber; + +//! Project version string for MacOSReachability. +FOUNDATION_EXPORT const unsigned char ReachabilityVersionString[]; + +/** + * Create NS_ENUM macro if it does not exist on the targeted version of iOS or OS X. + * + * @see http://nshipster.com/ns_enum-ns_options/ + **/ +#ifndef NS_ENUM +#define NS_ENUM(_type, _name) enum _name : _type _name; enum _name : _type +#endif + +extern NSString *const kReachabilityChangedNotification; + +typedef NS_ENUM(NSInteger, NetworkStatus) { + // Apple NetworkStatus Compatible Names. + NotReachable = 0, + ReachableViaWiFi = 2, + ReachableViaWWAN = 1 +}; + +@class Reachability; + +typedef void (^NetworkReachable)(Reachability * reachability); +typedef void (^NetworkUnreachable)(Reachability * reachability); +typedef void (^NetworkReachability)(Reachability * reachability, SCNetworkConnectionFlags flags); + + +@interface Reachability : NSObject + +@property (nonatomic, copy) NetworkReachable reachableBlock; +@property (nonatomic, copy) NetworkUnreachable unreachableBlock; +@property (nonatomic, copy) NetworkReachability reachabilityBlock; + +@property (nonatomic, assign) BOOL reachableOnWWAN; + + ++(instancetype)reachabilityWithHostname:(NSString*)hostname; +// This is identical to the function above, but is here to maintain +//compatibility with Apples original code. (see .m) ++(instancetype)reachabilityWithHostName:(NSString*)hostname; ++(instancetype)reachabilityForInternetConnection; ++(instancetype)reachabilityWithAddress:(void *)hostAddress; ++(instancetype)reachabilityForLocalWiFi; + +-(instancetype)initWithReachabilityRef:(SCNetworkReachabilityRef)ref; + +-(BOOL)startNotifier; +-(void)stopNotifier; + +-(BOOL)isReachable; +-(BOOL)isReachableViaWWAN; +-(BOOL)isReachableViaWiFi; + +// WWAN may be available, but not active until a connection has been established. +// WiFi may require a connection for VPN on Demand. +-(BOOL)isConnectionRequired; // Identical DDG variant. +-(BOOL)connectionRequired; // Apple's routine. +// Dynamic, on demand connection? +-(BOOL)isConnectionOnDemand; +// Is user intervention required? +-(BOOL)isInterventionRequired; + +-(NetworkStatus)currentReachabilityStatus; +-(SCNetworkReachabilityFlags)reachabilityFlags; +-(NSString*)currentReachabilityString; +-(NSString*)currentReachabilityFlags; + +@end diff --git a/JQQY/ThirdParty/AFNetworking/Reachability.m b/JQQY/ThirdParty/AFNetworking/Reachability.m new file mode 100755 index 0000000000000000000000000000000000000000..4c1c94aea3446bf706c765f09a18f28ba9c5329f --- /dev/null +++ b/JQQY/ThirdParty/AFNetworking/Reachability.m @@ -0,0 +1,475 @@ +/* + Copyright (c) 2011, Tony Million. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + */ + +#import "Reachability.h" + +#import +#import +#import +#import +#import +#import + + +NSString *const kReachabilityChangedNotification = @"kReachabilityChangedNotification"; + + +@interface Reachability () + +@property (nonatomic, assign) SCNetworkReachabilityRef reachabilityRef; +@property (nonatomic, strong) dispatch_queue_t reachabilitySerialQueue; +@property (nonatomic, strong) id reachabilityObject; + +-(void)reachabilityChanged:(SCNetworkReachabilityFlags)flags; +-(BOOL)isReachableWithFlags:(SCNetworkReachabilityFlags)flags; + +@end + + +static NSString *reachabilityFlags(SCNetworkReachabilityFlags flags) +{ + return [NSString stringWithFormat:@"%c%c %c%c%c%c%c%c%c", +#if TARGET_OS_IPHONE + (flags & kSCNetworkReachabilityFlagsIsWWAN) ? 'W' : '-', +#else + 'X', +#endif + (flags & kSCNetworkReachabilityFlagsReachable) ? 'R' : '-', + (flags & kSCNetworkReachabilityFlagsConnectionRequired) ? 'c' : '-', + (flags & kSCNetworkReachabilityFlagsTransientConnection) ? 't' : '-', + (flags & kSCNetworkReachabilityFlagsInterventionRequired) ? 'i' : '-', + (flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) ? 'C' : '-', + (flags & kSCNetworkReachabilityFlagsConnectionOnDemand) ? 'D' : '-', + (flags & kSCNetworkReachabilityFlagsIsLocalAddress) ? 'l' : '-', + (flags & kSCNetworkReachabilityFlagsIsDirect) ? 'd' : '-']; +} + +// Start listening for reachability notifications on the current run loop +static void TMReachabilityCallback(SCNetworkReachabilityRef target, SCNetworkReachabilityFlags flags, void* info) +{ +#pragma unused (target) + + Reachability *reachability = ((__bridge Reachability*)info); + + // We probably don't need an autoreleasepool here, as GCD docs state each queue has its own autorelease pool, + // but what the heck eh? + @autoreleasepool + { + [reachability reachabilityChanged:flags]; + } +} + + +@implementation Reachability + +#pragma mark - Class Constructor Methods + ++(instancetype)reachabilityWithHostName:(NSString*)hostname +{ + return [Reachability reachabilityWithHostname:hostname]; +} + ++(instancetype)reachabilityWithHostname:(NSString*)hostname +{ + SCNetworkReachabilityRef ref = SCNetworkReachabilityCreateWithName(NULL, [hostname UTF8String]); + if (ref) + { + id reachability = [[self alloc] initWithReachabilityRef:ref]; + + return reachability; + } + + return nil; +} + ++(instancetype)reachabilityWithAddress:(void *)hostAddress +{ + SCNetworkReachabilityRef ref = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, (const struct sockaddr*)hostAddress); + if (ref) + { + id reachability = [[self alloc] initWithReachabilityRef:ref]; + + return reachability; + } + + return nil; +} + ++(instancetype)reachabilityForInternetConnection +{ + struct sockaddr_in zeroAddress; + bzero(&zeroAddress, sizeof(zeroAddress)); + zeroAddress.sin_len = sizeof(zeroAddress); + zeroAddress.sin_family = AF_INET; + + return [self reachabilityWithAddress:&zeroAddress]; +} + ++(instancetype)reachabilityForLocalWiFi +{ + struct sockaddr_in localWifiAddress; + bzero(&localWifiAddress, sizeof(localWifiAddress)); + localWifiAddress.sin_len = sizeof(localWifiAddress); + localWifiAddress.sin_family = AF_INET; + // IN_LINKLOCALNETNUM is defined in as 169.254.0.0 + localWifiAddress.sin_addr.s_addr = htonl(IN_LINKLOCALNETNUM); + + return [self reachabilityWithAddress:&localWifiAddress]; +} + + +// Initialization methods + +-(instancetype)initWithReachabilityRef:(SCNetworkReachabilityRef)ref +{ + self = [super init]; + if (self != nil) + { + self.reachableOnWWAN = YES; + self.reachabilityRef = ref; + + // We need to create a serial queue. + // We allocate this once for the lifetime of the notifier. + + self.reachabilitySerialQueue = dispatch_queue_create("com.tonymillion.reachability", NULL); + } + + return self; +} + +-(void)dealloc +{ + [self stopNotifier]; + + if(self.reachabilityRef) + { + CFRelease(self.reachabilityRef); + self.reachabilityRef = nil; + } + + self.reachableBlock = nil; + self.unreachableBlock = nil; + self.reachabilityBlock = nil; + self.reachabilitySerialQueue = nil; +} + +#pragma mark - Notifier Methods + +// Notifier +// NOTE: This uses GCD to trigger the blocks - they *WILL NOT* be called on THE MAIN THREAD +// - In other words DO NOT DO ANY UI UPDATES IN THE BLOCKS. +// INSTEAD USE dispatch_async(dispatch_get_main_queue(), ^{UISTUFF}) (or dispatch_sync if you want) + +-(BOOL)startNotifier +{ + // allow start notifier to be called multiple times + if(self.reachabilityObject && (self.reachabilityObject == self)) + { + return YES; + } + + + SCNetworkReachabilityContext context = { 0, NULL, NULL, NULL, NULL }; + context.info = (__bridge void *)self; + + if(SCNetworkReachabilitySetCallback(self.reachabilityRef, TMReachabilityCallback, &context)) + { + // Set it as our reachability queue, which will retain the queue + if(SCNetworkReachabilitySetDispatchQueue(self.reachabilityRef, self.reachabilitySerialQueue)) + { + // this should do a retain on ourself, so as long as we're in notifier mode we shouldn't disappear out from under ourselves + // woah + self.reachabilityObject = self; + return YES; + } + else + { +#ifdef DEBUG + NSLog(@"SCNetworkReachabilitySetDispatchQueue() failed: %s", SCErrorString(SCError())); +#endif + + // UH OH - FAILURE - stop any callbacks! + SCNetworkReachabilitySetCallback(self.reachabilityRef, NULL, NULL); + } + } + else + { +#ifdef DEBUG + NSLog(@"SCNetworkReachabilitySetCallback() failed: %s", SCErrorString(SCError())); +#endif + } + + // if we get here we fail at the internet + self.reachabilityObject = nil; + return NO; +} + +-(void)stopNotifier +{ + // First stop, any callbacks! + SCNetworkReachabilitySetCallback(self.reachabilityRef, NULL, NULL); + + // Unregister target from the GCD serial dispatch queue. + SCNetworkReachabilitySetDispatchQueue(self.reachabilityRef, NULL); + + self.reachabilityObject = nil; +} + +#pragma mark - reachability tests + +// This is for the case where you flick the airplane mode; +// you end up getting something like this: +//Reachability: WR ct----- +//Reachability: -- ------- +//Reachability: WR ct----- +//Reachability: -- ------- +// We treat this as 4 UNREACHABLE triggers - really apple should do better than this + +#define testcase (kSCNetworkReachabilityFlagsConnectionRequired | kSCNetworkReachabilityFlagsTransientConnection) + +-(BOOL)isReachableWithFlags:(SCNetworkReachabilityFlags)flags +{ + BOOL connectionUP = YES; + + if(!(flags & kSCNetworkReachabilityFlagsReachable)) + connectionUP = NO; + + if( (flags & testcase) == testcase ) + connectionUP = NO; + +#if TARGET_OS_IPHONE + if(flags & kSCNetworkReachabilityFlagsIsWWAN) + { + // We're on 3G. + if(!self.reachableOnWWAN) + { + // We don't want to connect when on 3G. + connectionUP = NO; + } + } +#endif + + return connectionUP; +} + +-(BOOL)isReachable +{ + SCNetworkReachabilityFlags flags; + + if(!SCNetworkReachabilityGetFlags(self.reachabilityRef, &flags)) + return NO; + + return [self isReachableWithFlags:flags]; +} + +-(BOOL)isReachableViaWWAN +{ +#if TARGET_OS_IPHONE + + SCNetworkReachabilityFlags flags = 0; + + if(SCNetworkReachabilityGetFlags(self.reachabilityRef, &flags)) + { + // Check we're REACHABLE + if(flags & kSCNetworkReachabilityFlagsReachable) + { + // Now, check we're on WWAN + if(flags & kSCNetworkReachabilityFlagsIsWWAN) + { + return YES; + } + } + } +#endif + + return NO; +} + +-(BOOL)isReachableViaWiFi +{ + SCNetworkReachabilityFlags flags = 0; + + if(SCNetworkReachabilityGetFlags(self.reachabilityRef, &flags)) + { + // Check we're reachable + if((flags & kSCNetworkReachabilityFlagsReachable)) + { +#if TARGET_OS_IPHONE + // Check we're NOT on WWAN + if((flags & kSCNetworkReachabilityFlagsIsWWAN)) + { + return NO; + } +#endif + return YES; + } + } + + return NO; +} + + +// WWAN may be available, but not active until a connection has been established. +// WiFi may require a connection for VPN on Demand. +-(BOOL)isConnectionRequired +{ + return [self connectionRequired]; +} + +-(BOOL)connectionRequired +{ + SCNetworkReachabilityFlags flags; + + if(SCNetworkReachabilityGetFlags(self.reachabilityRef, &flags)) + { + return (flags & kSCNetworkReachabilityFlagsConnectionRequired); + } + + return NO; +} + +// Dynamic, on demand connection? +-(BOOL)isConnectionOnDemand +{ + SCNetworkReachabilityFlags flags; + + if (SCNetworkReachabilityGetFlags(self.reachabilityRef, &flags)) + { + return ((flags & kSCNetworkReachabilityFlagsConnectionRequired) && + (flags & (kSCNetworkReachabilityFlagsConnectionOnTraffic | kSCNetworkReachabilityFlagsConnectionOnDemand))); + } + + return NO; +} + +// Is user intervention required? +-(BOOL)isInterventionRequired +{ + SCNetworkReachabilityFlags flags; + + if (SCNetworkReachabilityGetFlags(self.reachabilityRef, &flags)) + { + return ((flags & kSCNetworkReachabilityFlagsConnectionRequired) && + (flags & kSCNetworkReachabilityFlagsInterventionRequired)); + } + + return NO; +} + + +#pragma mark - reachability status stuff + +-(NetworkStatus)currentReachabilityStatus +{ + if([self isReachable]) + { + if([self isReachableViaWiFi]) + return ReachableViaWiFi; + +#if TARGET_OS_IPHONE + return ReachableViaWWAN; +#endif + } + + return NotReachable; +} + +-(SCNetworkReachabilityFlags)reachabilityFlags +{ + SCNetworkReachabilityFlags flags = 0; + + if(SCNetworkReachabilityGetFlags(self.reachabilityRef, &flags)) + { + return flags; + } + + return 0; +} + +-(NSString*)currentReachabilityString +{ + NetworkStatus temp = [self currentReachabilityStatus]; + + if(temp == ReachableViaWWAN) + { + // Updated for the fact that we have CDMA phones now! + return NSLocalizedString(@"Cellular", @""); + } + if (temp == ReachableViaWiFi) + { + return NSLocalizedString(@"WiFi", @""); + } + + return NSLocalizedString(@"No Connection", @""); +} + +-(NSString*)currentReachabilityFlags +{ + return reachabilityFlags([self reachabilityFlags]); +} + +#pragma mark - Callback function calls this method + +-(void)reachabilityChanged:(SCNetworkReachabilityFlags)flags +{ + if([self isReachableWithFlags:flags]) + { + if(self.reachableBlock) + { + self.reachableBlock(self); + } + } + else + { + if(self.unreachableBlock) + { + self.unreachableBlock(self); + } + } + + if(self.reachabilityBlock) + { + self.reachabilityBlock(self, flags); + } + + // this makes sure the change notification happens on the MAIN THREAD + dispatch_async(dispatch_get_main_queue(), ^{ + [[NSNotificationCenter defaultCenter] postNotificationName:kReachabilityChangedNotification + object:self]; + }); +} + +#pragma mark - Debug Description + +- (NSString *) description +{ + NSString *description = [NSString stringWithFormat:@"<%@: %#x (%@)>", + NSStringFromClass([self class]), (unsigned int) self, [self currentReachabilityFlags]]; + return description; +} + +@end diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/.DS_Store b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..153289aad36dd33925033184f44b56df8339e8fb Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/.DS_Store differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Base.framework/BaiduMapAPI_Base b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Base.framework/BaiduMapAPI_Base new file mode 100644 index 0000000000000000000000000000000000000000..a3b75d2cae7104577f1fead6eba180cccdf2c1cf Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Base.framework/BaiduMapAPI_Base differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Base.framework/Headers/BMKBaseComponent.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Base.framework/Headers/BMKBaseComponent.h new file mode 100644 index 0000000000000000000000000000000000000000..25abeeffac316d1ec9d9b881648beabfae9a83d7 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Base.framework/Headers/BMKBaseComponent.h @@ -0,0 +1,13 @@ +// +// 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Base.framework/Headers/BMKGeneralDelegate.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Base.framework/Headers/BMKGeneralDelegate.h new file mode 100644 index 0000000000000000000000000000000000000000..b56dde11376da4c87c15fe04923f921765eb3d19 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Base.framework/Headers/BMKGeneralDelegate.h @@ -0,0 +1,24 @@ +// +// 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Base.framework/Headers/BMKMapManager.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Base.framework/Headers/BMKMapManager.h new file mode 100644 index 0000000000000000000000000000000000000000..3cb45149852710dc101eacbc5b65f91aa6aa9c25 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Base.framework/Headers/BMKMapManager.h @@ -0,0 +1,76 @@ +/* + * 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Base.framework/Headers/BMKTypes.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Base.framework/Headers/BMKTypes.h new file mode 100644 index 0000000000000000000000000000000000000000..09f1f1762ccd5ab1ebf9062fa46c0c7430ad6bca --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Base.framework/Headers/BMKTypes.h @@ -0,0 +1,186 @@ +// +// 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Base.framework/Headers/BMKVersion.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Base.framework/Headers/BMKVersion.h new file mode 100644 index 0000000000000000000000000000000000000000..db0e2d7db42d9383e0e7fa6a1373442bf6a13c62 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Base.framework/Headers/BMKVersion.h @@ -0,0 +1,1150 @@ +// +// 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引入的问题)。 + 未下载全国离线基础包时,离线状态下全国(球)地图显示异常。 + + -------------------- + v3.3.1 + + 【 新 版 提 示 】 + 【 注 意 】 + 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 + + 【 新 增 】 + [ 检 索 ] + 逆地理编码返回结果新增2个属性:cityCode(城市编码) 和adCode(行政区域编码) + + 【 优 化 】 + 1.增加重试机制,优化鉴权时长 + 2.解决Xcode8.3编译时出现大量warning的问题 + 3.swift Demo:swift语言升级为 swift v3.1,优化升级swift Demo。 + + -------------------- + v3.3.2 + + + 【 新 版 提 示 】 + 【 注 意 】 + 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 + + 【 新 增 】 + 【 优 化 】 + 1.修复个性化地图在部分使用场景下,不显示的问题。(受影响版本v3.3.0、v3.3.1) + + + -------------------- + v3.3.4 + + + 【 新 版 提 示 】 + 【 注 意 】 + 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 + + 【 新 增 】 + 1.BMKLocationViewDisplayParam类中增加 canShowCallOut 属性,用于设定用户点击定位图标时,是否弹出paopaoView。 + 2.BMKLocationViewDisplayParam类中增加 locationViewHierarchy 属性,用于设定locationView始终处于视图层级的最下层或最上层。 + + 【 优 化 】 + 1.修复添加Annotation时,Overlay偶尔绘制不完整的BUG。 + 2.修复Swift调用SDK时,cityCode countryCode等字段类型不兼容的问题。 + 3.保证新添加的Annotation会在mapView的视图层级的上层。 + 4.DEMO中绘制路径规划结果时,修复计算显示区域的BUG。 + + -------------------- + v3.4.0 + + + + 【 新 版 提 示 】 + 【 注 意 】 + 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 + + 【 新 增 】 + 【基 础 地 图】 + 1.新增当双击手势放大地图时,可以设置地图中心点是否移动至点击处的属性 + BMKMapView新增: + ///双击手势放大地图时, 设置为YES, 地图中心点移动至点击处; 设置为NO,地图中心点不变;默认为YES; + @property(nonatomic, getter=isChangeCenterWithDoubleTouchPointEnabled) BOOL ChangeCenterWithDoubleTouchPointEnabled; + + 2.支持标注锁定在屏幕固定位置 + BMKPointAnnotation新增: + ///Annotation固定在指定屏幕位置, 必须与screenPointToLock一起使用。 注意:拖动Annotation isLockedToScreen会被设置为false。 + ///若isLockedToScreen为true,拖动地图时annotaion不会跟随移动; + ///若isLockedToScreen为false,拖动地图时annotation会跟随移动。 + @property (nonatomic, assign) BOOL isLockedToScreen; + + ///标注在屏幕中锁定的位置,注意:地图初始化后才能设置screenPointToLock。可以在地图加载完成的回调方法:mapViewDidFinishLoading中使用此属性。 + @property (nonatomic, assign) CGPoint screenPointToLock; + + 3.新增接口:设定地理范围在屏幕中的显示区域 + BMKMapView新增: + ///根据当前mapView的窗口大小,预留insets指定的边界区域后,将mapRect指定的地理范围显示在剩余的区域内,并尽量充满 + ///@param mapRect 要显示的地图范围,用直角坐标系表示 + ///@param insets 屏幕四周预留的最小边界(mapRect的内容不会显示在该边界范围内) + ///@param animate 是否采用动画效果 +- (void)fitVisibleMapRect:(BMKMapRect)mapRect edgePadding:(UIEdgeInsets)insets withAnimated:(BOOL)animate; + +【 优 化 】 +1.解决反复创建和销毁mapView时内存泄漏的问题 +2.对拖动标注时的弹跳动画效果进行优化 +3.修复mapView调用selectAnnotation方法时,回调didSelectAnnotationView不调用的问题。 +4.修复行政区域检索福建和浙江区域没有返回数据的问题 +5.修复部分使用场景下,设置mapPadding时,overlay位置偏移的问题 +6.修复部分使用场景下,加载mapView闪黑屏的问题 + + -------------------- + v3.4.2 + + + 【 新 版 提 示 】 + 【 注 意 】 + 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 + + 【修复】 + 1.修复多页面多地图场景下,切换页面导致的crash问题。 + 2.修复检索对象对delegate的强引用问题。 + 3.修复在一些罕见场景下,Bugly报告的crash问题。 + 4.修复第一次通过setBuildingsEnabled接口设置不显示3D楼块效果失效的BUG。 + + 【优化】 + 1.删除annotation后,不再删除其对应的annotationView的subView。开发者dequeue出可重用的annotationView后,为了避免内容堆叠问题,可以自行去避免,如remove subview或者使用不同的reuseIdentifier等。 + 2.每个reuseIdentifier可缓存多个annotationView,当开发者removeAnnotation时,SDK会将对应的annotationView加入缓存队列。 + + + *********************/ +/** + *获取当前地图API的版本号 + *return 返回当前API的版本号 + */ +UIKIT_STATIC_INLINE NSString* BMKGetMapApiVersion() +{ + return @"3.4.2"; +} + +/** + *获取当前地图API base组件 的版本号 + *当前base组件版本 : 3.4.2 + *return 返回当前API base组件 的版本号 + */ +UIKIT_EXTERN NSString* BMKGetMapApiBaseComponentVersion(); + diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Base.framework/readme.txt b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Base.framework/readme.txt new file mode 100644 index 0000000000000000000000000000000000000000..812b7db830baf70059d8de606fed7f557520a980 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Base.framework/readme.txt @@ -0,0 +1,57 @@ + + + + +-------------------------------------------------------------------------------------- + +iOS 地图 SDK v3.4.2是适用于iOS系统移动设备的矢量地图开发包 + +-------------------------------------------------------------------------------------- + +地图SDK功能介绍(全功能开发包): + +地图:提供地图展示和地图操作功能; + +POI检索:支持周边检索、区域检索和城市内兴趣点检索; + +地理编码:提供经纬度和地址信息相互转化的功能接口; + +线路规划:支持公交、驾车、步行三种方式的线路规划; + +覆盖物图层:支持在地图上添加覆盖物(标注、几何图形、热力图、地形图图层等),展示更丰富的LBS信息; + +定位:获取当前位置信息,并在地图上展示(支持普通、跟随、罗盘三种模式); + +离线地图:使用离线地图可节省用户流量,提供更好的地图展示效果; + +调启百度地图:利用SDK接口,直接在本地打开百度地图客户端或WebApp,实现地图功能; + +周边雷达:利用周边雷达功能,开发者可在App内低成本、快速实现查找周边使用相同App的用户位置的功能; + +LBS云检索:支持查询存储在LBS云内的自有数据; + +特色功能:提供短串分享、Place详情检索、热力图等特色功能,帮助开发者搭建功能更加强大的应用; + + +-------------------------------------------------------------------------------------- + + + 【 新 版 提 示 】 + 【 注 意 】 + 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 + + 【修复】 + 1.修复多页面多地图场景下,切换页面导致的crash问题。 + 2.修复检索对象对delegate的强引用问题。 + 3.修复在一些罕见场景下,Bugly报告的crash问题。 + 4.修复第一次通过setBuildingsEnabled接口设置不显示3D楼块效果失效的BUG。 + + 【优化】 + 1.删除annotation后,不再删除其对应的annotationView的subView。开发者dequeue出可重用的annotationView后,为了避免内容堆叠问题,可以自行去避免,如remove subview或者使用不同的reuseIdentifier等。 + 2.每个reuseIdentifier可缓存多个annotationView,当开发者removeAnnotation时,SDK会将对应的annotationView加入缓存队列。 + \ No newline at end of file diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Location.framework/BaiduMapAPI_Location b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Location.framework/BaiduMapAPI_Location new file mode 100644 index 0000000000000000000000000000000000000000..8f88113f9517b389fade1fa2e6111aae6c1bdc28 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Location.framework/BaiduMapAPI_Location differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Location.framework/Headers/BMKLocationComponent.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Location.framework/Headers/BMKLocationComponent.h new file mode 100644 index 0000000000000000000000000000000000000000..ad5f1de6a67fb017c176acc40689630119359278 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Location.framework/Headers/BMKLocationComponent.h @@ -0,0 +1,10 @@ +// +// 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Location.framework/Headers/BMKLocationService.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Location.framework/Headers/BMKLocationService.h new file mode 100644 index 0000000000000000000000000000000000000000..899acd0c2af4ae22eb49d53129d1461d4897a75f --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Location.framework/Headers/BMKLocationService.h @@ -0,0 +1,110 @@ +// +// 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Location.framework/Headers/BMKLocationVersion.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Location.framework/Headers/BMKLocationVersion.h new file mode 100644 index 0000000000000000000000000000000000000000..c62b00b6174adabfc76dcf96a27b611da788c4a2 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Location.framework/Headers/BMKLocationVersion.h @@ -0,0 +1,32 @@ +// +// 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.4.2 + *return 返回当前API location组件 的版本号 + */ +UIKIT_EXTERN NSString* BMKGetMapApiLocationComponentVersion(); + +/** + *检查location组件的版本号是否和base组件的版本号一致 + *return 版本号一致返回YES + */ +UIKIT_EXTERN BOOL BMKCheckLocationComponentIsLegal(); + +#endif /* BMKLocationVersion_h */ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Location.framework/readme.txt b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Location.framework/readme.txt new file mode 100644 index 0000000000000000000000000000000000000000..637f1c2f092536b97c5f97352ace2708ff103792 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Location.framework/readme.txt @@ -0,0 +1,58 @@ +定位功能:获取当前位置信息; + + + + +-------------------------------------------------------------------------------------- + +iOS 地图 SDK v3.4.2是适用于iOS系统移动设备的矢量地图开发包 + +-------------------------------------------------------------------------------------- + +地图SDK功能介绍(全功能开发包): + +地图:提供地图展示和地图操作功能; + +POI检索:支持周边检索、区域检索和城市内兴趣点检索; + +地理编码:提供经纬度和地址信息相互转化的功能接口; + +线路规划:支持公交、驾车、步行三种方式的线路规划; + +覆盖物图层:支持在地图上添加覆盖物(标注、几何图形、热力图、地形图图层等),展示更丰富的LBS信息; + +定位:获取当前位置信息,并在地图上展示(支持普通、跟随、罗盘三种模式); + +离线地图:使用离线地图可节省用户流量,提供更好的地图展示效果; + +调启百度地图:利用SDK接口,直接在本地打开百度地图客户端或WebApp,实现地图功能; + +周边雷达:利用周边雷达功能,开发者可在App内低成本、快速实现查找周边使用相同App的用户位置的功能; + +LBS云检索:支持查询存储在LBS云内的自有数据; + +特色功能:提供短串分享、Place详情检索、热力图等特色功能,帮助开发者搭建功能更加强大的应用; + + +-------------------------------------------------------------------------------------- + + + 【 新 版 提 示 】 + 【 注 意 】 + 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 + + 【修复】 + 1.修复多页面多地图场景下,切换页面导致的crash问题。 + 2.修复检索对象对delegate的强引用问题。 + 3.修复在一些罕见场景下,Bugly报告的crash问题。 + 4.修复第一次通过setBuildingsEnabled接口设置不显示3D楼块效果失效的BUG。 + + 【优化】 + 1.删除annotation后,不再删除其对应的annotationView的subView。开发者dequeue出可重用的annotationView后,为了避免内容堆叠问题,可以自行去避免,如remove subview或者使用不同的reuseIdentifier等。 + 2.每个reuseIdentifier可缓存多个annotationView,当开发者removeAnnotation时,SDK会将对应的annotationView加入缓存队列。 + \ No newline at end of file diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/BaiduMapAPI_Map b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/BaiduMapAPI_Map new file mode 100644 index 0000000000000000000000000000000000000000..559daffaae12c0495f07e544f0ee41d409012b8d Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/BaiduMapAPI_Map differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKActionPaopaoView.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKActionPaopaoView.h new file mode 100644 index 0000000000000000000000000000000000000000..0bb27f76a22a4270dc0cc47a992a3a365303752d --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKActionPaopaoView.h @@ -0,0 +1,21 @@ +/* + * 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKAnnotation.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKAnnotation.h new file mode 100644 index 0000000000000000000000000000000000000000..4106f5ba56aca92f5fbc8a92c5cd66ae9d6380d8 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKAnnotation.h @@ -0,0 +1,38 @@ +// +// 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKAnnotationView.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKAnnotationView.h new file mode 100644 index 0000000000000000000000000000000000000000..1c169c028995e2dcb87f4b5ae7f0f7c1b7a9922b --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKAnnotationView.h @@ -0,0 +1,110 @@ +/* + * 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKArcline.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKArcline.h new file mode 100644 index 0000000000000000000000000000000000000000..3ee231734c2e0ad325eb21b543ea4bc3d37598e1 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKArcline.h @@ -0,0 +1,47 @@ +/* + * 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个点) + *@return 是否设置成功 + */ +- (BOOL)setArclineWithCoordinates:(CLLocationCoordinate2D *)coords; + +@end diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKArclineView.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKArclineView.h new file mode 100644 index 0000000000000000000000000000000000000000..980bac11236aaaf594efd9c64136668c8dac6c2f --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKArclineView.h @@ -0,0 +1,27 @@ +/* + * 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKBaseIndoorMapInfo.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKBaseIndoorMapInfo.h new file mode 100644 index 0000000000000000000000000000000000000000..a7f11c2ae786986fcdc990adf5bd7b37661db912 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKBaseIndoorMapInfo.h @@ -0,0 +1,28 @@ +// +// 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKCircle.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKCircle.h new file mode 100644 index 0000000000000000000000000000000000000000..4371db9d7acfb9803b622322500c60df00e4a707 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKCircle.h @@ -0,0 +1,61 @@ +/* + * 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKCircleView.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKCircleView.h new file mode 100644 index 0000000000000000000000000000000000000000..0fdcd2e17771b188595bbb7cccf888e149d2136a --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKCircleView.h @@ -0,0 +1,27 @@ +/* + * 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKGradient.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKGradient.h new file mode 100644 index 0000000000000000000000000000000000000000..0a043824b0c0b023aa26f1a237cbdce1cb056b83 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKGradient.h @@ -0,0 +1,26 @@ +/* + * 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKGroundOverlay.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKGroundOverlay.h new file mode 100644 index 0000000000000000000000000000000000000000..bc6e05832b0384902e7200e8619170996c095276 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKGroundOverlay.h @@ -0,0 +1,65 @@ +/* + * 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKGroundOverlayView.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKGroundOverlayView.h new file mode 100644 index 0000000000000000000000000000000000000000..ef9ba97ed7419c62a8f23f98547f6729bc39eaf9 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKGroundOverlayView.h @@ -0,0 +1,28 @@ +/* + * 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKHeatMap.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKHeatMap.h new file mode 100644 index 0000000000000000000000000000000000000000..8c434efa74e87a00e3032b94d36c81b285b9d9d3 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKHeatMap.h @@ -0,0 +1,48 @@ +/* + * 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKLocationViewDisplayParam.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKLocationViewDisplayParam.h new file mode 100644 index 0000000000000000000000000000000000000000..0cfc599f609a5cfcead9e6a934d87b28ae7a5fc8 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKLocationViewDisplayParam.h @@ -0,0 +1,48 @@ +/* + * BMKLocationViewDisplayParam.h + * BMapKit + * + * Copyright 2013 Baidu Inc. All rights reserved. + * + */ +#import +#import + + +/** + LocationView在mapview上显示的层级 + + - LOCATION_VIEW_HIERARCHY_TOP: locationView在最上层 + - LOCATION_VIEW_HIERARCHY_BOTTOM: locationView在最下层 + */ +typedef NS_ENUM(NSUInteger, LocationViewHierarchy) { + LOCATION_VIEW_HIERARCHY_TOP, + LOCATION_VIEW_HIERARCHY_BOTTOM, +}; + +///此类表示定位图层自定义样式参数 +@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; +///是否显示气泡,默认YES +@property (nonatomic, assign) BOOL canShowCallOut; +///locationView在mapview上的层级 默认值为LOCATION_VIEW_HIERARCHY_BOTTOM +@property (nonatomic, assign) LocationViewHierarchy locationViewHierarchy; + +@end + + + diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKMapComponent.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKMapComponent.h new file mode 100644 index 0000000000000000000000000000000000000000..5d2b2dcde94d337273317168c5750a3ad9ff8736 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKMapComponent.h @@ -0,0 +1,39 @@ +/* + * 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKMapStatus.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKMapStatus.h new file mode 100644 index 0000000000000000000000000000000000000000..16338b0e79dda2e659b1625189d3216a08012aa1 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKMapStatus.h @@ -0,0 +1,40 @@ +/* + * 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKMapVersion.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKMapVersion.h new file mode 100644 index 0000000000000000000000000000000000000000..f986f315d36538ac3ef0ff395444ec6c6fd6a3bc --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKMapVersion.h @@ -0,0 +1,32 @@ +// +// 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.4.2 + *return 返回当前API map组件 的版本号 + */ +UIKIT_EXTERN NSString* BMKGetMapApiMapComponentVersion(); + +/** + *检查map组件的版本号是否和base组件的版本号一致 + *return 版本号一致返回YES + */ +UIKIT_EXTERN BOOL BMKCheckMapComponentIsLegal(); + +#endif /* BMKMapVersion_h */ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKMapView.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKMapView.h new file mode 100644 index 0000000000000000000000000000000000000000..0b1f206e2e857e1d642d4109b541ac82c36d537d --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKMapView.h @@ -0,0 +1,737 @@ +/* + * 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; + +///双击手势放大地图时, 设置为YES, 地图中心点移动至点击处; 设置为NO,地图中心点不变;默认为YES; +@property(nonatomic, getter=isChangeCenterWithDoubleTouchPointEnabled) BOOL ChangeCenterWithDoubleTouchPointEnabled; + +/** + *设置自定义地图样式 + *注:必须在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; + +/** + *根据当前mapView的窗口大小,预留insets指定的边界区域后,将mapRect指定的地理范围显示在剩余的区域内,并尽量充满 + *@param mapRect 要显示的地图范围,用直角坐标系表示 + *@param insets 屏幕四周预留的边界大小(mapRect的内容不会显示在该边界范围内) + *@param animate 是否采用动画效果 + */ +- (void)fitVisibleMapRect:(BMKMapRect)mapRect edgePadding:(UIEdgeInsets)insets withAnimated:(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 annotations 要移除的标注数组 + */ +- (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 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 view 选中的annotation views + */ +- (void)mapView:(BMKMapView *)mapView didSelectAnnotationView:(BMKAnnotationView *)view; + +/** + *当取消选中一个annotation views时,调用此接口 + *@param mapView 地图View + *@param view 取消选中的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 diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKMultiPoint.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKMultiPoint.h new file mode 100644 index 0000000000000000000000000000000000000000..ec277358dd39112c057e434aebdccf80460af58e --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKMultiPoint.h @@ -0,0 +1,35 @@ +/* + * 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKOfflineMap.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKOfflineMap.h new file mode 100644 index 0000000000000000000000000000000000000000..ba89c9389b55f44207ffd8b359713a83ea42f7c1 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKOfflineMap.h @@ -0,0 +1,114 @@ +/* + * 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKOfflineMapType.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKOfflineMapType.h new file mode 100644 index 0000000000000000000000000000000000000000..2ce1b0c9782ef671d0df4c02ca49ec6db70fd8c1 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKOfflineMapType.h @@ -0,0 +1,66 @@ +/* + * 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKOverlay.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKOverlay.h new file mode 100644 index 0000000000000000000000000000000000000000..588b9b09383a4465520c5b8bfe262d469068d5d7 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKOverlay.h @@ -0,0 +1,32 @@ +/* + * 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKOverlayGLBasicView.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKOverlayGLBasicView.h new file mode 100644 index 0000000000000000000000000000000000000000..359aec2f38fd368785be1fa4a3451416afc91a6a --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKOverlayGLBasicView.h @@ -0,0 +1,34 @@ +/* +* 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKOverlayPathView.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKOverlayPathView.h new file mode 100644 index 0000000000000000000000000000000000000000..3a6cf07641e9e25cfa59cb422cb1abafc2bd1a16 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKOverlayPathView.h @@ -0,0 +1,88 @@ +/* +* 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKOverlayView.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKOverlayView.h new file mode 100644 index 0000000000000000000000000000000000000000..c0c71d52fc3b30da563ecb6b0068dbac62cb26ce --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKOverlayView.h @@ -0,0 +1,207 @@ +/* + * 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKPinAnnotationView.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKPinAnnotationView.h new file mode 100644 index 0000000000000000000000000000000000000000..153190cb8ad287d3b663683c3384ad759199559e --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKPinAnnotationView.h @@ -0,0 +1,31 @@ +/* + * 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKPointAnnotation.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKPointAnnotation.h new file mode 100644 index 0000000000000000000000000000000000000000..f20b81239b2098bd43c0f1951d83f0abb8c919bd --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKPointAnnotation.h @@ -0,0 +1,32 @@ +/* + * BMKPointAnnotation.h + * BMapKit + * + * Copyright 2011 Baidu Inc. All rights reserved. + * + */ + + +#import +#import "BMKShape.h" +#import + +///表示一个点的annotation +@interface BMKPointAnnotation : BMKShape { + @package + CLLocationCoordinate2D _coordinate; + BOOL _lockedToScreen; + CGPoint _lockedScreenPoint; +} +///该点的坐标 +@property (nonatomic, assign) CLLocationCoordinate2D coordinate; + +///标注固定在指定屏幕位置, 必须与screenPointToLock一起使用。 注意:拖动Annotation isLockedToScreen会被设置为false。 +///若isLockedToScreen为true,拖动地图时annotaion不会跟随移动; +///若isLockedToScreen为false,拖动地图时annotation会跟随移动。 +@property (nonatomic, assign) BOOL isLockedToScreen; + +///标注锁定在屏幕上的位置,注意:地图初始化后才能设置screenPointToLock。可以在地图加载完成的回调方法:mapViewDidFinishLoading中使用此属性。 +@property (nonatomic, assign) CGPoint screenPointToLock; + +@end diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKPolygon.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKPolygon.h new file mode 100644 index 0000000000000000000000000000000000000000..93d840b35a91d9ea9e1d94c2314baac9c7e97260 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKPolygon.h @@ -0,0 +1,48 @@ +/* + * 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKPolygonView.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKPolygonView.h new file mode 100644 index 0000000000000000000000000000000000000000..0151d91cfb56464efdb7d4d97324d21d2dae1a96 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKPolygonView.h @@ -0,0 +1,27 @@ +/* + * 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKPolyline.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKPolyline.h new file mode 100644 index 0000000000000000000000000000000000000000..1c57e5586be053c8300a54e68d2061a209faa00f --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKPolyline.h @@ -0,0 +1,97 @@ +/* + * 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKPolylineView.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKPolylineView.h new file mode 100644 index 0000000000000000000000000000000000000000..cc898fbd22fbc07743436a8d74c19aa72c0e0d8b --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKPolylineView.h @@ -0,0 +1,33 @@ +/* + * 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKShape.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKShape.h new file mode 100644 index 0000000000000000000000000000000000000000..3e0b8add29a19cd6835586cb432d487607deab1a --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKShape.h @@ -0,0 +1,21 @@ +/* + * BMKShape.h + * BMapKit + * + * Copyright 2011 Baidu Inc. All rights reserved. + * + */ + +#import +#import"BMKAnnotation.h" + +/// 该类为一个抽象类,定义了基于BMKAnnotation的BMKShape类的基本属性和行为,不能直接使用,必须子类化之后才能使用 +@interface BMKShape : NSObject { +} + +/// 要显示的标题;注意:如果不设置title,无法点击annotation,也无法使用回调函数; +@property (copy) NSString *title; +/// 要显示的副标题 +@property (copy) NSString *subtitle; + +@end diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKTileLayer.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKTileLayer.h new file mode 100644 index 0000000000000000000000000000000000000000..0b134762461eef15e00b02391e5ca95d90acf0d3 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKTileLayer.h @@ -0,0 +1,84 @@ +// +// 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKTileLayerView.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKTileLayerView.h new file mode 100644 index 0000000000000000000000000000000000000000..b4a8992a86a3996eba843aedd9a796b7aff344da --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Headers/BMKTileLayerView.h @@ -0,0 +1,30 @@ +// +// 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/CustomIndex b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/CustomIndex new file mode 100644 index 0000000000000000000000000000000000000000..d3840bace8c3cefc83edfe676fac86ebb3597281 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/CustomIndex @@ -0,0 +1 @@ +{"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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/DVDirectory.cfg b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/DVDirectory.cfg new file mode 100644 index 0000000000000000000000000000000000000000..de8385c748475129f076b13c4f60007fdbcb8cf3 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/DVDirectory.cfg @@ -0,0 +1 @@ +{"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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/DVHotMap.cfg b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/DVHotMap.cfg new file mode 100644 index 0000000000000000000000000000000000000000..c0323054cf10daadc6658f8af29ae99dd03de59d --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/DVHotMap.cfg @@ -0,0 +1,106 @@ +{ +"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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/DVHotcity.cfg b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/DVHotcity.cfg new file mode 100644 index 0000000000000000000000000000000000000000..94e687fac394d2c9bc4ab6629f2f42e6ef59a870 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/DVHotcity.cfg @@ -0,0 +1 @@ +{"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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/DVSDirectory.cfg b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/DVSDirectory.cfg new file mode 100644 index 0000000000000000000000000000000000000000..f676ae2b9ecd15283f6979cc11726a510a18b087 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/DVSDirectory.cfg @@ -0,0 +1 @@ +{"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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/DVStreet.cfg b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/DVStreet.cfg new file mode 100644 index 0000000000000000000000000000000000000000..507e5edabed91fee6862c109ca93670e6793272f --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/DVStreet.cfg @@ -0,0 +1 @@ +{"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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/DVVersion.cfg b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/DVVersion.cfg new file mode 100644 index 0000000000000000000000000000000000000000..378890c4bf1de80c65213894f28c5162f1bea304 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/DVVersion.cfg @@ -0,0 +1 @@ +{"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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_1/bus.sty b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_1/bus.sty new file mode 100644 index 0000000000000000000000000000000000000000..19f1d25234d96e6be85501cce81b786084db0be9 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_1/bus.sty differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_1/car.sty b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_1/car.sty new file mode 100644 index 0000000000000000000000000000000000000000..b9cd121ccaa9139e1ca5048d9480d980aae707df Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_1/car.sty differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_1/cycle.sty b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_1/cycle.sty new file mode 100644 index 0000000000000000000000000000000000000000..f5b3adda8a034810c2b8c7dc919b20b26de0fb3a Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_1/cycle.sty differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_1/map.rs b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_1/map.rs new file mode 100644 index 0000000000000000000000000000000000000000..210bb2b3e765c94eeaff48f2416b89c923bdd419 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_1/map.rs differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_1/map.sty b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_1/map.sty new file mode 100644 index 0000000000000000000000000000000000000000..abd7c5715b46affc8324438dc95b3dcf15a0ecab Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_1/map.sty differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_1/reduct.rs b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_1/reduct.rs new file mode 100644 index 0000000000000000000000000000000000000000..0810b1251b8ce39c63503e276f29c91d1d169718 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_1/reduct.rs differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_1/reduct.sty b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_1/reduct.sty new file mode 100644 index 0000000000000000000000000000000000000000..6cca3a86cb35c2f0752c4a08ecb4c860c21ee9a2 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_1/reduct.sty differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_1/traffic.rs b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_1/traffic.rs new file mode 100644 index 0000000000000000000000000000000000000000..cf1e317b7a911347796186ca96c597b69cca9508 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_1/traffic.rs differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_1/traffic.sty b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_1/traffic.sty new file mode 100644 index 0000000000000000000000000000000000000000..3550f56e87bd521a1e91899248425c6164fa6beb Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_1/traffic.sty differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_2/map.sty b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_2/map.sty new file mode 100644 index 0000000000000000000000000000000000000000..277d93126446b2b6ff57273dbb8e1c5d71fff4c7 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_2/map.sty differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_4/map.rs b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_4/map.rs new file mode 100644 index 0000000000000000000000000000000000000000..940b9aa07e49971580a929751f99d6fa64457790 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_4/map.rs differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_4/map.sty b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_4/map.sty new file mode 100644 index 0000000000000000000000000000000000000000..12c1f79f86cecad2ebd684fb5d8390bfbbfa300a Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/mode_4/map.sty differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/street.sty b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/street.sty new file mode 100644 index 0000000000000000000000000000000000000000..d821187d825ce4e5d995845efa1d411d9131c7ae Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/a/street.sty differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/idrres/DVIndoor.cfg b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/idrres/DVIndoor.cfg new file mode 100644 index 0000000000000000000000000000000000000000..d237b8bd28ebf652192f3a7f5edf574e8a3d3dad --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/idrres/DVIndoor.cfg @@ -0,0 +1,157 @@ +{"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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/idrres/ResPackIndoorMap.rs b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/idrres/ResPackIndoorMap.rs new file mode 100644 index 0000000000000000000000000000000000000000..15e53ef5d450049e2c8baf9b8e40aaf77756de60 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/idrres/ResPackIndoorMap.rs differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/idrres/baseindoormap.sty b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/idrres/baseindoormap.sty new file mode 100644 index 0000000000000000000000000000000000000000..a5916a6d2b98b1faabf7d28eba571fb77de67217 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/files/cfg/idrres/baseindoormap.sty differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/baidumap_logo.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/baidumap_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..94858b8751b8dcb381df6d98ebdbd2cde617c29a Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/baidumap_logo.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/baidumap_logo@2x.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/baidumap_logo@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..26cba9ad7d5b5cd7573f00db158e9e431ee15a45 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/baidumap_logo@2x.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/bnavi_icon_location_fixed.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/bnavi_icon_location_fixed.png new file mode 100644 index 0000000000000000000000000000000000000000..a1acd6c1f5828f50814696b2ea91451d7ef581de Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/bnavi_icon_location_fixed.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/bnavi_icon_location_fixed@2x.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/bnavi_icon_location_fixed@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..5a1d85d702e8f786ced888aa38fb8f2ab5dc4c76 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/bnavi_icon_location_fixed@2x.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/direction_wheel.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/direction_wheel.png new file mode 100644 index 0000000000000000000000000000000000000000..4a24f95dd6691c349e5136e23e2fdcb2bf74062e Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/direction_wheel.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/direction_wheel@2x.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/direction_wheel@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a7046ead5c914c434441295a907ff9ac7800e3ad Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/direction_wheel@2x.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_action_paopao_middle_left.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_action_paopao_middle_left.png new file mode 100644 index 0000000000000000000000000000000000000000..b716dfff4d20191ae5a2f39f970eb669941b7927 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_action_paopao_middle_left.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_action_paopao_middle_left@2x.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_action_paopao_middle_left@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..8c906f95014002a0cc3a724e8df066640661982e Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_action_paopao_middle_left@2x.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_action_paopao_middle_left_highlighted.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_action_paopao_middle_left_highlighted.png new file mode 100644 index 0000000000000000000000000000000000000000..eda5fafb221bb31402ca9d65ac1b1fcd6ca951b8 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_action_paopao_middle_left_highlighted.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_action_paopao_middle_left_highlighted@2x.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_action_paopao_middle_left_highlighted@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..57e092e5218b4d04d3870147def1456b2d80085e Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_action_paopao_middle_left_highlighted@2x.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_action_paopao_middle_right.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_action_paopao_middle_right.png new file mode 100644 index 0000000000000000000000000000000000000000..360d2aa8b24cc9636b523237edf180656026373d Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_action_paopao_middle_right.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_action_paopao_middle_right@2x.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_action_paopao_middle_right@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0a65e7d4c5335ad97d9f0f348543f3c0213fd8c8 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_action_paopao_middle_right@2x.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_action_paopao_middle_right_highlighted.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_action_paopao_middle_right_highlighted.png new file mode 100644 index 0000000000000000000000000000000000000000..053b474309717832577df503d057f98c477ebb71 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_action_paopao_middle_right_highlighted.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_action_paopao_middle_right_highlighted@2x.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_action_paopao_middle_right_highlighted@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..47eb8819bb3931c34cec4e0a1bb21d49b7e497de Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_action_paopao_middle_right_highlighted@2x.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_cellphone.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_cellphone.png new file mode 100644 index 0000000000000000000000000000000000000000..d17a4d023be3651aa745f47b3fcb956037a5b343 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_cellphone.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_cellphone2.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_cellphone2.png new file mode 100644 index 0000000000000000000000000000000000000000..60bb66d36bb79ac2592090048c969ba0c2942f44 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_cellphone2.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_cellphone2@2x.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_cellphone2@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9421d2f6d68677dd748ac3f46e95accc9085aa28 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_cellphone2@2x.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_cellphone@2x.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_cellphone@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..dfdd588885268c1552e6f71627d556af64e7c171 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_cellphone@2x.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_center_point.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_center_point.png new file mode 100644 index 0000000000000000000000000000000000000000..6fdcf66e12861d086da0175354c7210ed8f04f0a Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_center_point.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_center_point@2x.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_center_point@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..67e631aed79042ddc653a072094c8ad33098a11b Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_center_point@2x.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_compass.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_compass.png new file mode 100644 index 0000000000000000000000000000000000000000..196ff22d341d25ec4bf50a6dede216454638fd73 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_compass.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_compass@2x.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_compass@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..cbd9d493f0953dbcf61a4077ccb63c335f4c07cb Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_compass@2x.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_compass_background.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_compass_background.png new file mode 100644 index 0000000000000000000000000000000000000000..7676a11de83b4304cef699661f293da6ecb0b8db Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_compass_background.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_compass_background@2x.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_compass_background@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..93c171a12dece5feea1cd3547ff15e0b7f835c1a Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_compass_background@2x.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_direction.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_direction.png new file mode 100644 index 0000000000000000000000000000000000000000..8dc5319aceb8717b11ab090ad3cbb51e707d0afe Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_direction.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_direction@2x.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_direction@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..acbb02d745cbd3e95bd6b5a8f2fcff0fbf6c3696 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_direction@2x.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_line_nofocus.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_line_nofocus.png new file mode 100644 index 0000000000000000000000000000000000000000..910f495d73530c6ce34893ee85d8d80fd6e3e7c6 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_line_nofocus.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_bus.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_bus.png new file mode 100644 index 0000000000000000000000000000000000000000..faba2fb48b342e167a967a2d367aba03e8c21731 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_bus.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_bus@2x.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_bus@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..7294c560053b0e4eac7c7a1165d30c4805c9b59e Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_bus@2x.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_end.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_end.png new file mode 100644 index 0000000000000000000000000000000000000000..6da923a6d5f96809fc764c5389a5909c393d5f26 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_end.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_end@2x.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_end@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..6ecd89010e6b8de1b0a82c28347c3b019c5f27c6 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_end@2x.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_rail.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_rail.png new file mode 100644 index 0000000000000000000000000000000000000000..71f441e3f44a4fc7a638adee4c775cf447e41bf3 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_rail.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_rail@2x.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_rail@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a19c875c24c1208aa9951ac73d8b96a49645c807 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_rail@2x.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_start.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_start.png new file mode 100644 index 0000000000000000000000000000000000000000..3c7c1ae7d86464925dea6b79fb27e96b6c2e68e6 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_start.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_start@2x.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_start@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..2ca97b50fe86ad6e643fe2ebdb681c5884ee8120 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_start@2x.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_waypoint.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_waypoint.png new file mode 100644 index 0000000000000000000000000000000000000000..7f61cd08ab62ce40e0bdf251378948aa98963cce Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_waypoint.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_waypoint@2x.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_waypoint@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f7fc472426e2517775d41c2d821d7adb55445209 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_nav_waypoint@2x.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_paopao_middle_left.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_paopao_middle_left.png new file mode 100644 index 0000000000000000000000000000000000000000..a1bdd282c1eaf192f6c13570a5f23fcf30d0db02 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_paopao_middle_left.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_paopao_middle_left@2x.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_paopao_middle_left@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..e491f8d914a5b26916c61ae792fa38234fcedb50 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_paopao_middle_left@2x.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_paopao_middle_left_highlighted.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_paopao_middle_left_highlighted.png new file mode 100644 index 0000000000000000000000000000000000000000..b61b64723c6d20acdaf99eb9b390b0a016fce273 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_paopao_middle_left_highlighted.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_paopao_middle_left_highlighted@2x.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_paopao_middle_left_highlighted@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..db276e26fccfac81e85bf0de7bc3c5202462b6b5 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_paopao_middle_left_highlighted@2x.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_paopao_middle_right.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_paopao_middle_right.png new file mode 100644 index 0000000000000000000000000000000000000000..fbf8979185bb81e5a229540fed4008c22a2967b2 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_paopao_middle_right.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_paopao_middle_right@2x.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_paopao_middle_right@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..7bacc2ec1f4cfd0415f884b129686c77518b11e5 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_paopao_middle_right@2x.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_paopao_middle_right_highlighted.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_paopao_middle_right_highlighted.png new file mode 100644 index 0000000000000000000000000000000000000000..a3d9d9aa46f766b509044d963ffb7a38f8cdf95c Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_paopao_middle_right_highlighted.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_paopao_middle_right_highlighted@2x.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_paopao_middle_right_highlighted@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..4133666134fe2dee311ad8f067e33f08fbd22b61 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/icon_paopao_middle_right_highlighted@2x.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/lineDashTexture.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/lineDashTexture.png new file mode 100644 index 0000000000000000000000000000000000000000..ec2166ab955c977bec6f159559bc21e2eb05e2fb Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/lineDashTexture.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/line_texture.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/line_texture.png new file mode 100755 index 0000000000000000000000000000000000000000..e43156a4e0f35e37bc71a2dc58090936d385ca78 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/line_texture.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/pin_green.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/pin_green.png new file mode 100644 index 0000000000000000000000000000000000000000..48e8d8338cb299b5241b68d9237c93fc8dc1cdc8 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/pin_green.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/pin_green@2x.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/pin_green@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9ca313aff7b2bb821569570a09dcbdf80ee0f8a5 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/pin_green@2x.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/pin_purple.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/pin_purple.png new file mode 100644 index 0000000000000000000000000000000000000000..9145ccd3dcf07368f8c48385b2d78d095ce4a1f3 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/pin_purple.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/pin_purple@2x.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/pin_purple@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..6657c6fded2eded65c1e1900be16bed7e0d4f141 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/pin_purple@2x.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/pin_red.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/pin_red.png new file mode 100644 index 0000000000000000000000000000000000000000..0584407da3d8aa148a45cf337a6a32a44cb2c52f Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/pin_red.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/pin_red@2x.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/pin_red@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..caeb353184e9be333eea4effb1c52039b7960d46 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/Resources/mapapi.bundle/images/pin_red@2x.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/readme.txt b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/readme.txt new file mode 100644 index 0000000000000000000000000000000000000000..902cfd50540d1a7d7b807218d6a2c5da74928749 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Map.framework/readme.txt @@ -0,0 +1,58 @@ +基础地图:包括基本矢量地图、卫星图、实时路况图和各种地图覆盖物,此外还包括各种与地图相关的操作和事件监听; + + + + +-------------------------------------------------------------------------------------- + +iOS 地图 SDK v3.4.2是适用于iOS系统移动设备的矢量地图开发包 + +-------------------------------------------------------------------------------------- + +地图SDK功能介绍(全功能开发包): + +地图:提供地图展示和地图操作功能; + +POI检索:支持周边检索、区域检索和城市内兴趣点检索; + +地理编码:提供经纬度和地址信息相互转化的功能接口; + +线路规划:支持公交、驾车、步行三种方式的线路规划; + +覆盖物图层:支持在地图上添加覆盖物(标注、几何图形、热力图、地形图图层等),展示更丰富的LBS信息; + +定位:获取当前位置信息,并在地图上展示(支持普通、跟随、罗盘三种模式); + +离线地图:使用离线地图可节省用户流量,提供更好的地图展示效果; + +调启百度地图:利用SDK接口,直接在本地打开百度地图客户端或WebApp,实现地图功能; + +周边雷达:利用周边雷达功能,开发者可在App内低成本、快速实现查找周边使用相同App的用户位置的功能; + +LBS云检索:支持查询存储在LBS云内的自有数据; + +特色功能:提供短串分享、Place详情检索、热力图等特色功能,帮助开发者搭建功能更加强大的应用; + + +-------------------------------------------------------------------------------------- + + + 【 新 版 提 示 】 + 【 注 意 】 + 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 + + 【修复】 + 1.修复多页面多地图场景下,切换页面导致的crash问题。 + 2.修复检索对象对delegate的强引用问题。 + 3.修复在一些罕见场景下,Bugly报告的crash问题。 + 4.修复第一次通过setBuildingsEnabled接口设置不显示3D楼块效果失效的BUG。 + + 【优化】 + 1.删除annotation后,不再删除其对应的annotationView的subView。开发者dequeue出可重用的annotationView后,为了避免内容堆叠问题,可以自行去避免,如remove subview或者使用不同的reuseIdentifier等。 + 2.每个reuseIdentifier可缓存多个annotationView,当开发者removeAnnotation时,SDK会将对应的annotationView加入缓存队列。 + \ No newline at end of file diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/BaiduMapAPI_Search b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/BaiduMapAPI_Search new file mode 100644 index 0000000000000000000000000000000000000000..2f9008dcc4f77f386749ce032286de15f171e891 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/BaiduMapAPI_Search differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/Headers/BMKBusLineSearch.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/Headers/BMKBusLineSearch.h new file mode 100644 index 0000000000000000000000000000000000000000..f72ed891653d72631dc9b61fe35f48adace1e8ad --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/Headers/BMKBusLineSearch.h @@ -0,0 +1,48 @@ +/* + * 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/Headers/BMKBusLineSearchOption.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/Headers/BMKBusLineSearchOption.h new file mode 100644 index 0000000000000000000000000000000000000000..55f0f9b1525761196f57e5175f57d881380c4f0a --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/Headers/BMKBusLineSearchOption.h @@ -0,0 +1,22 @@ +/* + * 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/Headers/BMKDistrictSearch.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/Headers/BMKDistrictSearch.h new file mode 100644 index 0000000000000000000000000000000000000000..f92d0dde75bf0e2df80b61231b153cf463038de5 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/Headers/BMKDistrictSearch.h @@ -0,0 +1,74 @@ +// +// 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/Headers/BMKGeocodeSearch.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/Headers/BMKGeocodeSearch.h new file mode 100644 index 0000000000000000000000000000000000000000..1197fdfa4297d6145374da3c19c1c971d8846397 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/Headers/BMKGeocodeSearch.h @@ -0,0 +1,60 @@ +/* + * 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/Headers/BMKGeocodeSearchOption.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/Headers/BMKGeocodeSearchOption.h new file mode 100644 index 0000000000000000000000000000000000000000..233ca1717efd5d0f2f58ccb93bb3519b69b7a802 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/Headers/BMKGeocodeSearchOption.h @@ -0,0 +1,31 @@ +/* + * 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/Headers/BMKGeocodeType.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/Headers/BMKGeocodeType.h new file mode 100644 index 0000000000000000000000000000000000000000..6c313c486f3b20acaba91072f2fcb6a92de935b5 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/Headers/BMKGeocodeType.h @@ -0,0 +1,50 @@ +/* + * 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, strong) NSString* cityCode; +///地址坐标 +@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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/Headers/BMKPoiSearch.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/Headers/BMKPoiSearch.h new file mode 100644 index 0000000000000000000000000000000000000000..210cbb12dc57af4eee7feff44cac365b0a023554 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/Headers/BMKPoiSearch.h @@ -0,0 +1,86 @@ +/* + * 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/Headers/BMKPoiSearchOption.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/Headers/BMKPoiSearchOption.h new file mode 100644 index 0000000000000000000000000000000000000000..dff4a782b1b44a6c886a57e01ed6e99ffc1a7cf0 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/Headers/BMKPoiSearchOption.h @@ -0,0 +1,84 @@ +/* + * 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/Headers/BMKPoiSearchType.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/Headers/BMKPoiSearchType.h new file mode 100644 index 0000000000000000000000000000000000000000..24a7dce25db95ae6a6422eda6150710055204d5d --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/Headers/BMKPoiSearchType.h @@ -0,0 +1,239 @@ +/* + * 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/Headers/BMKRouteSearchOption.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/Headers/BMKRouteSearchOption.h new file mode 100644 index 0000000000000000000000000000000000000000..6de08f84c683392b93483197bc2434283462e2a1 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/Headers/BMKRouteSearchOption.h @@ -0,0 +1,84 @@ +/* + * 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/Headers/BMKRouteSearchType.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/Headers/BMKRouteSearchType.h new file mode 100644 index 0000000000000000000000000000000000000000..e055471f6e2ec20a8e759ec139f2a67ae97768bf --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/Headers/BMKRouteSearchType.h @@ -0,0 +1,598 @@ +/* + * 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/Headers/BMKSearchBase.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/Headers/BMKSearchBase.h new file mode 100644 index 0000000000000000000000000000000000000000..c6d42f54d56009fc0f6a507827e9fe8f56555168 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/Headers/BMKSearchBase.h @@ -0,0 +1,18 @@ +// +// 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/Headers/BMKSearchComponent.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/Headers/BMKSearchComponent.h new file mode 100644 index 0000000000000000000000000000000000000000..8cff2ed54a38aba1d4e0fa3cd8244ba33acad1a6 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/Headers/BMKSearchComponent.h @@ -0,0 +1,25 @@ +// +// 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/Headers/BMKSearchVersion.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/Headers/BMKSearchVersion.h new file mode 100644 index 0000000000000000000000000000000000000000..d0a85d58af1503dc95a41151f1e832312b8e6002 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/Headers/BMKSearchVersion.h @@ -0,0 +1,32 @@ +// +// 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.4.2 + *return 返回当前API search组件 的版本号 + */ +UIKIT_EXTERN NSString* BMKGetMapApiSearchComponentVersion(); + +/** + *检查search组件的版本号是否和base组件的版本号一致 + *return 版本号一致返回YES + */ +UIKIT_EXTERN BOOL BMKCheckSearchComponentIsLegal(); + +#endif /* BMKSearchVersion_h */ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/Headers/BMKShareURLSearch.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/Headers/BMKShareURLSearch.h new file mode 100644 index 0000000000000000000000000000000000000000..c746fe11e6c99d6cc128df976277077769f68f0c --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/Headers/BMKShareURLSearch.h @@ -0,0 +1,82 @@ +/* + * 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/Headers/BMKShareUrlSearchOption.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/Headers/BMKShareUrlSearchOption.h new file mode 100644 index 0000000000000000000000000000000000000000..bc67806fbc83e95b808b749ebd7a6bfc551f4428 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/Headers/BMKShareUrlSearchOption.h @@ -0,0 +1,57 @@ +/* + * 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/Headers/BMKSuggestionSearch.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/Headers/BMKSuggestionSearch.h new file mode 100644 index 0000000000000000000000000000000000000000..441c7a69e295df50b7e2817e55ee97e84f013320 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/Headers/BMKSuggestionSearch.h @@ -0,0 +1,65 @@ +/* + * 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/Headers/BMKSuggestionSearchOption.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/Headers/BMKSuggestionSearchOption.h new file mode 100644 index 0000000000000000000000000000000000000000..ff2cfc5b29e31a89f60b76ce907be3e860fbd00b --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/Headers/BMKSuggestionSearchOption.h @@ -0,0 +1,26 @@ +/* + * 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/readme.txt b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/readme.txt new file mode 100644 index 0000000000000000000000000000000000000000..b0f7d5a90531d42d81009244440260a7a3be4e27 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Search.framework/readme.txt @@ -0,0 +1,58 @@ +检索功能:包括POI检索,公交信息查询,路线规划,地理编码/反地理编码,在线建议查询,短串分享等; + + + + +-------------------------------------------------------------------------------------- + +iOS 地图 SDK v3.4.2是适用于iOS系统移动设备的矢量地图开发包 + +-------------------------------------------------------------------------------------- + +地图SDK功能介绍(全功能开发包): + +地图:提供地图展示和地图操作功能; + +POI检索:支持周边检索、区域检索和城市内兴趣点检索; + +地理编码:提供经纬度和地址信息相互转化的功能接口; + +线路规划:支持公交、驾车、步行三种方式的线路规划; + +覆盖物图层:支持在地图上添加覆盖物(标注、几何图形、热力图、地形图图层等),展示更丰富的LBS信息; + +定位:获取当前位置信息,并在地图上展示(支持普通、跟随、罗盘三种模式); + +离线地图:使用离线地图可节省用户流量,提供更好的地图展示效果; + +调启百度地图:利用SDK接口,直接在本地打开百度地图客户端或WebApp,实现地图功能; + +周边雷达:利用周边雷达功能,开发者可在App内低成本、快速实现查找周边使用相同App的用户位置的功能; + +LBS云检索:支持查询存储在LBS云内的自有数据; + +特色功能:提供短串分享、Place详情检索、热力图等特色功能,帮助开发者搭建功能更加强大的应用; + + +-------------------------------------------------------------------------------------- + + + 【 新 版 提 示 】 + 【 注 意 】 + 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 + + 【修复】 + 1.修复多页面多地图场景下,切换页面导致的crash问题。 + 2.修复检索对象对delegate的强引用问题。 + 3.修复在一些罕见场景下,Bugly报告的crash问题。 + 4.修复第一次通过setBuildingsEnabled接口设置不显示3D楼块效果失效的BUG。 + + 【优化】 + 1.删除annotation后,不再删除其对应的annotationView的subView。开发者dequeue出可重用的annotationView后,为了避免内容堆叠问题,可以自行去避免,如remove subview或者使用不同的reuseIdentifier等。 + 2.每个reuseIdentifier可缓存多个annotationView,当开发者removeAnnotation时,SDK会将对应的annotationView加入缓存队列。 + \ No newline at end of file diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Utils.framework/BaiduMapAPI_Utils b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Utils.framework/BaiduMapAPI_Utils new file mode 100644 index 0000000000000000000000000000000000000000..70e925f5d0c6c2755acb58362c4865cccf72b224 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Utils.framework/BaiduMapAPI_Utils differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Utils.framework/Headers/BMKFavPoiInfo.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Utils.framework/Headers/BMKFavPoiInfo.h new file mode 100644 index 0000000000000000000000000000000000000000..7f662ca8a06e9414186538b63a678fea0e3ab242 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Utils.framework/Headers/BMKFavPoiInfo.h @@ -0,0 +1,36 @@ +// +// 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Utils.framework/Headers/BMKFavPoiManager.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Utils.framework/Headers/BMKFavPoiManager.h new file mode 100644 index 0000000000000000000000000000000000000000..ee1a620574537cf352ad0e4c84f710827daf238a --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Utils.framework/Headers/BMKFavPoiManager.h @@ -0,0 +1,60 @@ +// +// 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Utils.framework/Headers/BMKGeometry.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Utils.framework/Headers/BMKGeometry.h new file mode 100644 index 0000000000000000000000000000000000000000..d9be561c7cc7d5615aff23fc71b91b39e12dad89 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Utils.framework/Headers/BMKGeometry.h @@ -0,0 +1,420 @@ +/* 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Utils.framework/Headers/BMKNavigation.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Utils.framework/Headers/BMKNavigation.h new file mode 100644 index 0000000000000000000000000000000000000000..3353a0625a424239105f4ccc40c46e8e885717bc --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Utils.framework/Headers/BMKNavigation.h @@ -0,0 +1,67 @@ +/* + * 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; + +@end + + diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Utils.framework/Headers/BMKOpenOption.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Utils.framework/Headers/BMKOpenOption.h new file mode 100644 index 0000000000000000000000000000000000000000..d1bc05f55dca07da0f59088de352ade287931d9b --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Utils.framework/Headers/BMKOpenOption.h @@ -0,0 +1,23 @@ +// +// 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Utils.framework/Headers/BMKOpenPoi.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Utils.framework/Headers/BMKOpenPoi.h new file mode 100644 index 0000000000000000000000000000000000000000..ea9c67f1e151923e61d3b0605f58879e437f3b5a --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Utils.framework/Headers/BMKOpenPoi.h @@ -0,0 +1,37 @@ +// +// 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Utils.framework/Headers/BMKOpenPoiOption.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Utils.framework/Headers/BMKOpenPoiOption.h new file mode 100644 index 0000000000000000000000000000000000000000..179e9ed723361e0de8c903c031d49ea2b59f4fdb --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Utils.framework/Headers/BMKOpenPoiOption.h @@ -0,0 +1,39 @@ +// +// 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Utils.framework/Headers/BMKOpenRoute.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Utils.framework/Headers/BMKOpenRoute.h new file mode 100644 index 0000000000000000000000000000000000000000..ea80b588e6c6d55488d2891a12ebafae1cbc6953 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Utils.framework/Headers/BMKOpenRoute.h @@ -0,0 +1,45 @@ +// +// 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Utils.framework/Headers/BMKOpenRouteOption.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Utils.framework/Headers/BMKOpenRouteOption.h new file mode 100644 index 0000000000000000000000000000000000000000..05298add98121dd793100e2df177287f15e4d865 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Utils.framework/Headers/BMKOpenRouteOption.h @@ -0,0 +1,54 @@ +// +// 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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Utils.framework/Headers/BMKUtilsComponent.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Utils.framework/Headers/BMKUtilsComponent.h new file mode 100644 index 0000000000000000000000000000000000000000..946e17553f38306429a062315d69f3fc8f539197 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Utils.framework/Headers/BMKUtilsComponent.h @@ -0,0 +1,17 @@ +// +// 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" diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Utils.framework/Headers/BMKUtilsVersion.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Utils.framework/Headers/BMKUtilsVersion.h new file mode 100644 index 0000000000000000000000000000000000000000..2633bea63b84dcc67b5099d432f838dfbe325aa3 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Utils.framework/Headers/BMKUtilsVersion.h @@ -0,0 +1,33 @@ +// +// 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组件版本 : 2.10.0 + *return 返回当前API utils组件 的版本号 + */ +UIKIT_EXTERN NSString* BMKGetMapApiUtilsComponentVersion(); + +/** + *检查utils组件的版本号是否和base组件的版本号一致 + *return 版本号一致返回YES + */ +UIKIT_EXTERN BOOL BMKCheckUtilsComponentIsLegal(); + + +#endif /* BMKUtilsVersion_h */ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Utils.framework/readme.txt b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Utils.framework/readme.txt new file mode 100644 index 0000000000000000000000000000000000000000..5daa857650bb4e6dd53df7f76e616c36d956be5c --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/BaiduMapAPI_Utils.framework/readme.txt @@ -0,0 +1,59 @@ +计算工具:包括测距(两点之间距离)、坐标转换、调起百度地图等功能; + + + + +-------------------------------------------------------------------------------------- + +iOS 地图 SDK v2.10.0是适用于iOS系统移动设备的矢量地图开发包 + +-------------------------------------------------------------------------------------- + +地图SDK功能介绍(全功能开发包): + +地图:提供地图展示和地图操作功能; + +POI检索:支持周边检索、区域检索和城市内兴趣点检索; + +地理编码:提供经纬度和地址信息相互转化的功能接口; + +线路规划:支持公交、驾车、步行三种方式的线路规划; + +覆盖物图层:支持在地图上添加覆盖物(标注、几何图形、热力图、地形图图层等),展示更丰富的LBS信息; + +定位:获取当前位置信息,并在地图上展示(支持普通、跟随、罗盘三种模式); + +离线地图:使用离线地图可节省用户流量,提供更好的地图展示效果; + +调启百度地图:利用SDK接口,直接在本地打开百度地图客户端或WebApp,实现地图功能; + +周边雷达:利用周边雷达功能,开发者可在App内低成本、快速实现查找周边使用相同App的用户位置的功能; + +LBS云检索:支持查询存储在LBS云内的自有数据; + +特色功能:提供短串分享、Place详情检索、热力图等特色功能,帮助开发者搭建功能更加强大的应用; + + +-------------------------------------------------------------------------------------- + +注意:百度地图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使用新的矢量地图样式,地图显示更加清新,和百度地图客户端保持一致。 + +较之v2.9.1,升级功能: + 【 新  增  / 废  弃 】 +    基础地图  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中地铁和公交未做区分的问题 \ No newline at end of file diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/Cluster/BMKClusterAlgorithm.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/Cluster/BMKClusterAlgorithm.h new file mode 100644 index 0000000000000000000000000000000000000000..a23b26a1880b4b79228ae6e61721e2a5b389b5da --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/Cluster/BMKClusterAlgorithm.h @@ -0,0 +1,39 @@ +// +// BMKClusterAlgorithm.h +// IphoneMapSdkDemo +// +// Created by wzy on 15/9/15. +// Copyright © 2015年 Baidu. All rights reserved. +// + +#ifndef BMKClusterAlgorithm_h +#define BMKClusterAlgorithm_h + +#import +#import "BMKClusterQuadtree.h" + +/** + * 点聚合算法 + */ +@interface BMKClusterAlgorithm : NSObject + +///所有的BMKQuadItem +@property (nonatomic, readonly) NSMutableArray *quadItems; +@property (nonatomic, readonly) BMKClusterQuadtree *quadtree; + +///添加item +- (void)addItem:(BMKClusterItem*)clusterItem; + +///清除items +- (void)clearItems; + +/** + * cluster算法核心 + * @param zoom map的级别 + * @return BMKCluster数组 + */ +- (NSArray*)getClusters:(CGFloat) zoomLevel; + +@end + +#endif /* BMKClusterAlgorithm_h */ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/Cluster/BMKClusterAlgorithm.m b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/Cluster/BMKClusterAlgorithm.m new file mode 100644 index 0000000000000000000000000000000000000000..1d96b0ed53a74e9707c0fe80d8ffc2812c000b7f --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/Cluster/BMKClusterAlgorithm.m @@ -0,0 +1,116 @@ +// +// BMKClusterAlgorithm.m +// IphoneMapSdkDemo +// +// Created by wzy on 15/9/15. +// Copyright © 2015年 Baidu. All rights reserved. +// + +#import "BMKClusterAlgorithm.h" +//原来是200 +#define MAX_DISTANCE_IN_DP 300 //300dp + +@implementation BMKClusterAlgorithm + +@synthesize quadItems = _quadItems; +@synthesize quadtree = _quadtree; + +- (id)init { + self = [super init]; + if (self) { + _quadtree = [[BMKClusterQuadtree alloc] initWithRect:CGRectMake(0, 0, 1, 1)]; + _quadItems = [[NSMutableArray alloc] init]; + } + return self; +} + +///添加item +- (void)addItem:(BMKClusterItem*)clusterItem { + BMKQuadItem *quadItem = [[BMKQuadItem alloc] init]; + quadItem.clusterItem = clusterItem; + @synchronized(_quadtree) { + [_quadItems addObject:quadItem]; + [_quadtree addItem:quadItem]; +// NSLog(@"%@", _quadtree.quadItems); + } +} + +///清除items +- (void)clearItems { + @synchronized(_quadtree) { + [_quadItems removeAllObjects]; + [_quadtree clearItems]; + } + +} + +/** + * cluster算法核心 + * @param zoom map的级别 + * @return BMKCluster数组 + */ +- (NSArray*)getClusters:(CGFloat) zoomLevel { + if (zoomLevel < 3 || zoomLevel > 22) { + return nil; + } + NSMutableArray *results = [NSMutableArray array]; + + NSUInteger zoom = (NSUInteger)zoomLevel; + CGFloat zoomSpecificSpan = MAX_DISTANCE_IN_DP / pow(2, zoom) / 256; + NSMutableSet *visitedCandidates = [NSMutableSet set]; + NSMutableDictionary *distanceToCluster = [NSMutableDictionary dictionary]; + NSMutableDictionary *itemToCluster = [NSMutableDictionary dictionary]; + + @synchronized(_quadtree) { + for (BMKQuadItem *candidate in _quadItems) { + //candidate已经添加到另一cluster中 + if ([visitedCandidates containsObject:candidate]) { + continue; + } + BMKCluster *cluster = [[BMKCluster alloc] init]; + cluster.coordinate = candidate.clusterItem.coor; + //cluster.model = candidate.clusterItem.model; +// cluster.imageUrl = candidate.clusterItem.imageUrl; + + CGRect searchRect = [self getRectWithPt:candidate.pt Span:zoomSpecificSpan]; + NSMutableArray *items = (NSMutableArray*)[_quadtree searchInRect:searchRect]; + if (items.count == 1) { + [cluster.clusterItems addObject:candidate.clusterItem]; + [results addObject:cluster]; + [visitedCandidates addObject:candidate]; + [distanceToCluster setObject:[NSNumber numberWithDouble:0] forKey:[NSNumber numberWithLongLong:candidate.hash]]; + continue; + } + + for (BMKQuadItem *quadItem in items) { + NSNumber *existDistache = [distanceToCluster objectForKey:[NSNumber numberWithLongLong:quadItem.hash]]; + CGFloat distance = [self getDistanceSquared:candidate.pt point:quadItem.pt]; + if (existDistache != nil) { + if (existDistache.doubleValue < distance) { + continue; + } + BMKCluster *existCluster = [itemToCluster objectForKey:[NSNumber numberWithLongLong:quadItem.hash]]; + [existCluster.clusterItems removeObject:quadItem.clusterItem]; + } + [distanceToCluster setObject:[NSNumber numberWithDouble:distance] forKey:[NSNumber numberWithLongLong:quadItem.hash]]; + [cluster.clusterItems addObject:quadItem.clusterItem]; + [itemToCluster setObject:cluster forKey:[NSNumber numberWithLongLong:quadItem.hash]]; + } + + [visitedCandidates addObjectsFromArray:items]; + [results addObject:cluster]; + } + } + return results; +} + +- (CGRect)getRectWithPt:(CGPoint) pt Span:(CGFloat) span { + CGFloat half = span / 2.f; + return CGRectMake(pt.x - half, pt.y - half, span, span); +} + +- (CGFloat)getDistanceSquared:(CGPoint) pt1 point:(CGPoint) pt2 { + return (pt1.x - pt2.x) * (pt1.x - pt2.x) + (pt1.y - pt2.y) * (pt1.y - pt2.y); +} + +@end diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/Cluster/BMKClusterItem.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/Cluster/BMKClusterItem.h new file mode 100644 index 0000000000000000000000000000000000000000..f84f0ca85af642e8d0463f65b39a5a2b2f717737 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/Cluster/BMKClusterItem.h @@ -0,0 +1,45 @@ +// +// BMKClusterItem.h +// IphoneMapSdkDemo +// +// Created by wzy on 15/9/15. +// Copyright © 2015年 Baidu. All rights reserved. +// + +#ifndef BMKClusterItem_h +#define BMKClusterItem_h + +#import +#import +@class QYCluster; + +/** + * 表示一个标注 + */ +@interface BMKClusterItem : NSObject + +///经纬度,初始化后,不可修改 +@property (nonatomic, assign) CLLocationCoordinate2D coor; +@property (nonatomic, copy)NSString *title; +@property (nonatomic, strong)QYCluster *cluster; + +@end + +/** + * 聚合后的标注 + */ +@interface BMKCluster : NSObject + +///经纬度 +@property (nonatomic, assign) CLLocationCoordinate2D coordinate; +///所包含BMKClusterItem +@property (nonatomic, strong) NSMutableArray *clusterItems; +///包含BMKClusterItem个数 +@property (nonatomic, readonly) NSUInteger size; + +@property (nonatomic, copy)NSString *title; +@property (nonatomic, strong)QYCluster *cluster; + +@end + +#endif /* BMKClusterItem_h */ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/Cluster/BMKClusterItem.m b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/Cluster/BMKClusterItem.m new file mode 100644 index 0000000000000000000000000000000000000000..8635c06bc8c1e22b5da549c39626b28d6cd382a6 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/Cluster/BMKClusterItem.m @@ -0,0 +1,37 @@ +// +// BMKClusterItem.m +// IphoneMapSdkDemo +// +// Created by wzy on 15/9/15. +// Copyright © 2015年 Baidu. All rights reserved. +// + +#import "BMKClusterItem.h" +#import "QYCluster.h" +@implementation BMKClusterItem + +@synthesize coor = _coor; + +@end + +@implementation BMKCluster + +@synthesize coordinate = _coordinate; +@synthesize clusterItems = _clusterItems; + +- (id)init { + self = [super init]; + if (self) { + _clusterItems = [[NSMutableArray alloc] init]; + } + return self; +} + + + +- (NSUInteger)size { + return _clusterItems.count; +} + + +@end diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/Cluster/BMKClusterManager.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/Cluster/BMKClusterManager.h new file mode 100644 index 0000000000000000000000000000000000000000..bdc0ff4a59b5fd8609404b4cab5fcdac18e0b595 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/Cluster/BMKClusterManager.h @@ -0,0 +1,35 @@ +// +// BMKClusterManager.h +// IphoneMapSdkDemo +// +// Created by wzy on 15/9/15. +// Copyright © 2015年 Baidu. All rights reserved. +// + +#ifndef BMKClusterManager_h +#define BMKClusterManager_h + +#import +#import "BMKClusterAlgorithm.h" + +/** + * 点聚合管理类 + */ +@interface BMKClusterManager : NSObject + +///添加item +- (void)addClusterItem:(BMKClusterItem*)clusterItem; + +///清除items +- (void)clearClusterItems; + +/** + * 获取聚合后的标注 + * @param zoomLevel map的级别 + * @return BMKCluster数组 + */ +- (NSArray*)getClusters:(CGFloat) zoomLevel; + +@end + +#endif /* BMKClusterManager_h */ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/Cluster/BMKClusterManager.m b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/Cluster/BMKClusterManager.m new file mode 100644 index 0000000000000000000000000000000000000000..8b95f67f99001a1e6b99898aef747d22da193eb1 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/Cluster/BMKClusterManager.m @@ -0,0 +1,50 @@ +// +// BMKClusterManager.m +// IphoneMapSdkDemo +// +// Created by wzy on 15/9/15. +// Copyright © 2015年 Baidu. All rights reserved. +// + +#import "BMKClusterManager.h" + +@interface BMKClusterManager () { + BMKClusterAlgorithm *_algorithm; +} + +@end + +@implementation BMKClusterManager + +- (id)init { + self = [super init]; + if (self) { + _algorithm = [[BMKClusterAlgorithm alloc] init]; + } + return self; +} + +///添加item +- (void)addClusterItem:(BMKClusterItem*)clusterItem { + @synchronized(_algorithm) { + [_algorithm addItem:clusterItem]; + } +} + +///清除items +- (void)clearClusterItems { + @synchronized(_algorithm) { + [_algorithm clearItems]; + } +} + +/** + * 获取聚合后的标注 + * @param zoomLevel map的级别 + * @return BMKCluster数组 + */ +- (NSArray*)getClusters:(CGFloat) zoomLevel { + return [_algorithm getClusters:zoomLevel]; +} + +@end \ No newline at end of file diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/Cluster/BMKClusterQuadtree.h b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/Cluster/BMKClusterQuadtree.h new file mode 100644 index 0000000000000000000000000000000000000000..da6eede8b261caac07cc154df789f6a1924fd5d3 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/Cluster/BMKClusterQuadtree.h @@ -0,0 +1,43 @@ +// +// BMKClusterQuadtree.h +// IphoneMapSdkDemo +// +// Created by wzy on 15/9/15. +// Copyright © 2015年 Baidu. All rights reserved. +// + +#ifndef BMKClusterQuadtree_h +#define BMKClusterQuadtree_h + +#import +#import +#import "BMKClusterItem.h" + +@interface BMKQuadItem : NSObject + +@property (nonatomic, readonly) CGPoint pt; +@property (nonatomic, strong) BMKClusterItem *clusterItem; + +@end + +@interface BMKClusterQuadtree : NSObject + +///四叉树区域 +@property (nonatomic, assign) CGRect rect; +///所包含BMKQuadItem +@property(nonatomic, readonly) NSMutableArray *quadItems; + +- (id)initWithRect:(CGRect) rect; + +///添加item +- (void)addItem:(BMKQuadItem*) quadItem; + +///清除items +- (void)clearItems; + +///获取rect范围内的BMKQuadItem +- (NSArray*)searchInRect:(CGRect) searchRect; + +@end + +#endif /* BMKClusterQuadtree_h */ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/Cluster/BMKClusterQuadtree.m b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/Cluster/BMKClusterQuadtree.m new file mode 100644 index 0000000000000000000000000000000000000000..97d74993c0a74b2dff7c0649bede12f2ac3959d2 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/Cluster/BMKClusterQuadtree.m @@ -0,0 +1,164 @@ +// +// BMKClusterQuadtree.m +// IphoneMapSdkDemo +// +// Created by wzy on 15/9/15. +// Copyright © 2015年 Baidu. All rights reserved. +// + +#import "BMKClusterQuadtree.h" + + +#define MAX_POINTS_PER_NODE 40 + +@implementation BMKQuadItem + +@synthesize pt = _pt; +@synthesize clusterItem = _clusterItem; + +- (void)setClusterItem:(BMKClusterItem *)clusterItem { + _clusterItem = clusterItem; + _pt = [self convertCoordinateToPoint:clusterItem.coor]; +} + +- (CGPoint)convertCoordinateToPoint:(CLLocationCoordinate2D) coor { + /* + final double x = latLng.longitude / 360 + .5; + final double siny = Math.sin(Math.toRadians(latLng.latitude)); + final double y = 0.5 * Math.log((1 + siny) / (1 - siny)) / -(2 * Math.PI) + .5; + + return new Point(x * mWorldWidth, y * mWorldWidth); + */ + CGFloat x = coor.longitude / 360.f + 0.5; + CGFloat siny = sin(coor.latitude * M_PI / 180.f); + CGFloat y = 0.5 * log((1 + siny) / (1 - siny)) / -(2 * M_PI) + 0.5; + return CGPointMake(x, y); +} + +@end + +@interface BMKClusterQuadtree () { + NSMutableArray *_childrens; +} + +@end + +@implementation BMKClusterQuadtree + +@synthesize rect = _rect; + +- (id)init { + self = [super init]; + if (self){ + _quadItems = [[NSMutableArray alloc] initWithCapacity:MAX_POINTS_PER_NODE]; + } + return self; +} + +- (id)initWithRect:(CGRect) rect { + self = [super init]; + if (self) { + _quadItems = [[NSMutableArray alloc] initWithCapacity:MAX_POINTS_PER_NODE]; + _rect = rect; + } + return self; +} + +//四叉树拆分 +- (void)subdivide { + _childrens = [[NSMutableArray alloc] initWithCapacity:4]; + CGFloat x = _rect.origin.x; + CGFloat y = _rect.origin.y; + CGFloat w = _rect.size.width / 2.f; + CGFloat h = _rect.size.height / 2.f; + [_childrens addObject:[[BMKClusterQuadtree alloc] initWithRect:CGRectMake(x, y, w, h)]]; + [_childrens addObject:[[BMKClusterQuadtree alloc] initWithRect:CGRectMake(x + w, y, w, h)]]; + [_childrens addObject:[[BMKClusterQuadtree alloc] initWithRect:CGRectMake(x, y + h, w, h)]]; + [_childrens addObject:[[BMKClusterQuadtree alloc] initWithRect:CGRectMake(x + w, y + h, w, h)]]; +} + +//数据插入 +- (void)addItem:(BMKQuadItem *)quadItem { + if (quadItem == nil) { + return ; + } + if ([self rect:_rect containsPt:quadItem.pt] == NO) { + return; + } + + if(_quadItems.count < MAX_POINTS_PER_NODE) { + [_quadItems addObject:quadItem]; + return ; + } + + if(_childrens == nil || _childrens.count == 0) { + [self subdivide]; + } + for (BMKClusterQuadtree *children in _childrens) { + [children addItem:quadItem]; + } +} + +- (void)clearItems { + _childrens = nil; + if (_quadItems) { + [_quadItems removeAllObjects]; + } +} + +///获取rect范围内的BMKQuadItem +- (NSArray*)searchInRect:(CGRect) searchRect { + //searchrect和四叉树区域rect无交集 + if ([self isRect:searchRect intersectsWith:_rect] == NO) { + return [NSArray array]; + } + + NSMutableArray *array = [NSMutableArray array]; + + //searchrect包含四叉树区域 + if ([self rect:searchRect containsRect:_rect]) { + [array addObjectsFromArray:_quadItems]; + } else { + for (BMKQuadItem *item in _quadItems) { + if ([self rect:searchRect containsPt:item.pt]) { + [array addObject:item]; + } + } + } + + if(_childrens != nil && _childrens.count == 4) { + for (BMKClusterQuadtree *children in _childrens) { + [array addObjectsFromArray:[children searchInRect:searchRect]]; + } + } + + return array; +} + +//rect是否包含pt +- (BOOL)rect:(CGRect) rect containsPt:(CGPoint) pt { + return rect.origin.x <= pt.x && pt.x <= (rect.size.width + rect.origin.x) && rect.origin.y <= pt.y && pt.y <= (rect.size.height + rect.origin.y); +} + + +//rect是否相交 +- (BOOL)isRect:(CGRect) rect1 intersectsWith:(CGRect) rect2 { + CGFloat maxx = MAX(rect1.origin.x, rect2.origin.x); + CGFloat minx = MIN(rect1.origin.x + rect1.size.width, rect2.origin.x + rect2.size.width); + if (maxx - minx > 0) { + return NO; + } + CGFloat maxy = MAX(rect1.origin.y, rect2.origin.y); + CGFloat miny = MIN(rect1.origin.y + rect1.size.height, rect2.origin.y + rect2.size.height); + if (maxy - miny > 0) { + return NO; + } + return YES; +} + +//是否第一个矩形包含了第二个矩形 +- (BOOL)rect:(CGRect) r1 containsRect:(CGRect) r2 { + return r1.origin.x <= r2.origin.x && r1.size.width >= r2.size.width && r1.origin.y <= r2.origin.y && r1.size.height >= r2.size.height; +} + +@end \ No newline at end of file diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/CustomIndex b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/CustomIndex new file mode 100644 index 0000000000000000000000000000000000000000..d3840bace8c3cefc83edfe676fac86ebb3597281 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/CustomIndex @@ -0,0 +1 @@ +{"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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/DVDirectory.cfg b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/DVDirectory.cfg new file mode 100644 index 0000000000000000000000000000000000000000..de8385c748475129f076b13c4f60007fdbcb8cf3 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/DVDirectory.cfg @@ -0,0 +1 @@ +{"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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/DVHotMap.cfg b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/DVHotMap.cfg new file mode 100644 index 0000000000000000000000000000000000000000..c0323054cf10daadc6658f8af29ae99dd03de59d --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/DVHotMap.cfg @@ -0,0 +1,106 @@ +{ +"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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/DVHotcity.cfg b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/DVHotcity.cfg new file mode 100644 index 0000000000000000000000000000000000000000..94e687fac394d2c9bc4ab6629f2f42e6ef59a870 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/DVHotcity.cfg @@ -0,0 +1 @@ +{"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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/DVSDirectory.cfg b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/DVSDirectory.cfg new file mode 100644 index 0000000000000000000000000000000000000000..f676ae2b9ecd15283f6979cc11726a510a18b087 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/DVSDirectory.cfg @@ -0,0 +1 @@ +{"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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/DVStreet.cfg b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/DVStreet.cfg new file mode 100644 index 0000000000000000000000000000000000000000..507e5edabed91fee6862c109ca93670e6793272f --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/DVStreet.cfg @@ -0,0 +1 @@ +{"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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/DVVersion.cfg b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/DVVersion.cfg new file mode 100644 index 0000000000000000000000000000000000000000..378890c4bf1de80c65213894f28c5162f1bea304 --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/DVVersion.cfg @@ -0,0 +1 @@ +{"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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/mode_1/bus.sty b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/mode_1/bus.sty new file mode 100644 index 0000000000000000000000000000000000000000..19f1d25234d96e6be85501cce81b786084db0be9 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/mode_1/bus.sty differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/mode_1/car.sty b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/mode_1/car.sty new file mode 100644 index 0000000000000000000000000000000000000000..b9cd121ccaa9139e1ca5048d9480d980aae707df Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/mode_1/car.sty differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/mode_1/cycle.sty b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/mode_1/cycle.sty new file mode 100644 index 0000000000000000000000000000000000000000..f5b3adda8a034810c2b8c7dc919b20b26de0fb3a Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/mode_1/cycle.sty differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/mode_1/map.rs b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/mode_1/map.rs new file mode 100644 index 0000000000000000000000000000000000000000..210bb2b3e765c94eeaff48f2416b89c923bdd419 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/mode_1/map.rs differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/mode_1/map.sty b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/mode_1/map.sty new file mode 100644 index 0000000000000000000000000000000000000000..abd7c5715b46affc8324438dc95b3dcf15a0ecab Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/mode_1/map.sty differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/mode_1/reduct.rs b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/mode_1/reduct.rs new file mode 100644 index 0000000000000000000000000000000000000000..0810b1251b8ce39c63503e276f29c91d1d169718 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/mode_1/reduct.rs differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/mode_1/reduct.sty b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/mode_1/reduct.sty new file mode 100644 index 0000000000000000000000000000000000000000..6cca3a86cb35c2f0752c4a08ecb4c860c21ee9a2 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/mode_1/reduct.sty differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/mode_1/traffic.rs b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/mode_1/traffic.rs new file mode 100644 index 0000000000000000000000000000000000000000..cf1e317b7a911347796186ca96c597b69cca9508 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/mode_1/traffic.rs differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/mode_1/traffic.sty b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/mode_1/traffic.sty new file mode 100644 index 0000000000000000000000000000000000000000..3550f56e87bd521a1e91899248425c6164fa6beb Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/mode_1/traffic.sty differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/mode_2/map.sty b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/mode_2/map.sty new file mode 100644 index 0000000000000000000000000000000000000000..277d93126446b2b6ff57273dbb8e1c5d71fff4c7 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/mode_2/map.sty differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/mode_4/map.rs b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/mode_4/map.rs new file mode 100644 index 0000000000000000000000000000000000000000..940b9aa07e49971580a929751f99d6fa64457790 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/mode_4/map.rs differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/mode_4/map.sty b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/mode_4/map.sty new file mode 100644 index 0000000000000000000000000000000000000000..12c1f79f86cecad2ebd684fb5d8390bfbbfa300a Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/mode_4/map.sty differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/street.sty b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/street.sty new file mode 100644 index 0000000000000000000000000000000000000000..d821187d825ce4e5d995845efa1d411d9131c7ae Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/a/street.sty differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/idrres/DVIndoor.cfg b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/idrres/DVIndoor.cfg new file mode 100644 index 0000000000000000000000000000000000000000..d237b8bd28ebf652192f3a7f5edf574e8a3d3dad --- /dev/null +++ b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/idrres/DVIndoor.cfg @@ -0,0 +1,157 @@ +{"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/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/idrres/ResPackIndoorMap.rs b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/idrres/ResPackIndoorMap.rs new file mode 100644 index 0000000000000000000000000000000000000000..15e53ef5d450049e2c8baf9b8e40aaf77756de60 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/idrres/ResPackIndoorMap.rs differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/idrres/baseindoormap.sty b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/idrres/baseindoormap.sty new file mode 100644 index 0000000000000000000000000000000000000000..a5916a6d2b98b1faabf7d28eba571fb77de67217 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/files/cfg/idrres/baseindoormap.sty differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/baidumap_logo.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/baidumap_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..94858b8751b8dcb381df6d98ebdbd2cde617c29a Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/baidumap_logo.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/baidumap_logo@2x.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/baidumap_logo@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..26cba9ad7d5b5cd7573f00db158e9e431ee15a45 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/baidumap_logo@2x.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/bnavi_icon_location_fixed.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/bnavi_icon_location_fixed.png new file mode 100644 index 0000000000000000000000000000000000000000..a1acd6c1f5828f50814696b2ea91451d7ef581de Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/bnavi_icon_location_fixed.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/bnavi_icon_location_fixed@2x.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/bnavi_icon_location_fixed@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..5a1d85d702e8f786ced888aa38fb8f2ab5dc4c76 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/bnavi_icon_location_fixed@2x.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/direction_wheel.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/direction_wheel.png new file mode 100644 index 0000000000000000000000000000000000000000..4a24f95dd6691c349e5136e23e2fdcb2bf74062e Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/direction_wheel.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/direction_wheel@2x.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/direction_wheel@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a7046ead5c914c434441295a907ff9ac7800e3ad Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/direction_wheel@2x.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_action_paopao_middle_left.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_action_paopao_middle_left.png new file mode 100644 index 0000000000000000000000000000000000000000..b716dfff4d20191ae5a2f39f970eb669941b7927 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_action_paopao_middle_left.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_action_paopao_middle_left@2x.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_action_paopao_middle_left@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..8c906f95014002a0cc3a724e8df066640661982e Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_action_paopao_middle_left@2x.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_action_paopao_middle_left_highlighted.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_action_paopao_middle_left_highlighted.png new file mode 100644 index 0000000000000000000000000000000000000000..eda5fafb221bb31402ca9d65ac1b1fcd6ca951b8 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_action_paopao_middle_left_highlighted.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_action_paopao_middle_left_highlighted@2x.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_action_paopao_middle_left_highlighted@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..57e092e5218b4d04d3870147def1456b2d80085e Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_action_paopao_middle_left_highlighted@2x.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_action_paopao_middle_right.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_action_paopao_middle_right.png new file mode 100644 index 0000000000000000000000000000000000000000..360d2aa8b24cc9636b523237edf180656026373d Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_action_paopao_middle_right.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_action_paopao_middle_right@2x.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_action_paopao_middle_right@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0a65e7d4c5335ad97d9f0f348543f3c0213fd8c8 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_action_paopao_middle_right@2x.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_action_paopao_middle_right_highlighted.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_action_paopao_middle_right_highlighted.png new file mode 100644 index 0000000000000000000000000000000000000000..053b474309717832577df503d057f98c477ebb71 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_action_paopao_middle_right_highlighted.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_action_paopao_middle_right_highlighted@2x.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_action_paopao_middle_right_highlighted@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..47eb8819bb3931c34cec4e0a1bb21d49b7e497de Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_action_paopao_middle_right_highlighted@2x.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_cellphone.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_cellphone.png new file mode 100644 index 0000000000000000000000000000000000000000..d17a4d023be3651aa745f47b3fcb956037a5b343 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_cellphone.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_cellphone2.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_cellphone2.png new file mode 100644 index 0000000000000000000000000000000000000000..60bb66d36bb79ac2592090048c969ba0c2942f44 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_cellphone2.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_cellphone2@2x.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_cellphone2@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9421d2f6d68677dd748ac3f46e95accc9085aa28 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_cellphone2@2x.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_cellphone@2x.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_cellphone@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..dfdd588885268c1552e6f71627d556af64e7c171 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_cellphone@2x.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_center_point.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_center_point.png new file mode 100644 index 0000000000000000000000000000000000000000..6fdcf66e12861d086da0175354c7210ed8f04f0a Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_center_point.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_center_point@2x.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_center_point@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..67e631aed79042ddc653a072094c8ad33098a11b Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_center_point@2x.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_compass.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_compass.png new file mode 100644 index 0000000000000000000000000000000000000000..196ff22d341d25ec4bf50a6dede216454638fd73 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_compass.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_compass@2x.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_compass@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..cbd9d493f0953dbcf61a4077ccb63c335f4c07cb Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_compass@2x.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_compass_background.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_compass_background.png new file mode 100644 index 0000000000000000000000000000000000000000..7676a11de83b4304cef699661f293da6ecb0b8db Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_compass_background.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_compass_background@2x.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_compass_background@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..93c171a12dece5feea1cd3547ff15e0b7f835c1a Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_compass_background@2x.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_direction.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_direction.png new file mode 100644 index 0000000000000000000000000000000000000000..8dc5319aceb8717b11ab090ad3cbb51e707d0afe Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_direction.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_direction@2x.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_direction@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..acbb02d745cbd3e95bd6b5a8f2fcff0fbf6c3696 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_direction@2x.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_line_nofocus.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_line_nofocus.png new file mode 100644 index 0000000000000000000000000000000000000000..910f495d73530c6ce34893ee85d8d80fd6e3e7c6 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_line_nofocus.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_nav_bus.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_nav_bus.png new file mode 100644 index 0000000000000000000000000000000000000000..faba2fb48b342e167a967a2d367aba03e8c21731 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_nav_bus.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_nav_bus@2x.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_nav_bus@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..7294c560053b0e4eac7c7a1165d30c4805c9b59e Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_nav_bus@2x.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_nav_end.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_nav_end.png new file mode 100644 index 0000000000000000000000000000000000000000..6da923a6d5f96809fc764c5389a5909c393d5f26 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_nav_end.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_nav_end@2x.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_nav_end@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..6ecd89010e6b8de1b0a82c28347c3b019c5f27c6 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_nav_end@2x.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_nav_rail.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_nav_rail.png new file mode 100644 index 0000000000000000000000000000000000000000..71f441e3f44a4fc7a638adee4c775cf447e41bf3 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_nav_rail.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_nav_rail@2x.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_nav_rail@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a19c875c24c1208aa9951ac73d8b96a49645c807 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_nav_rail@2x.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_nav_start.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_nav_start.png new file mode 100644 index 0000000000000000000000000000000000000000..3c7c1ae7d86464925dea6b79fb27e96b6c2e68e6 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_nav_start.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_nav_start@2x.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_nav_start@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..2ca97b50fe86ad6e643fe2ebdb681c5884ee8120 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_nav_start@2x.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_nav_waypoint.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_nav_waypoint.png new file mode 100644 index 0000000000000000000000000000000000000000..7f61cd08ab62ce40e0bdf251378948aa98963cce Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_nav_waypoint.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_nav_waypoint@2x.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_nav_waypoint@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f7fc472426e2517775d41c2d821d7adb55445209 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_nav_waypoint@2x.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_paopao_middle_left.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_paopao_middle_left.png new file mode 100644 index 0000000000000000000000000000000000000000..a1bdd282c1eaf192f6c13570a5f23fcf30d0db02 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_paopao_middle_left.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_paopao_middle_left@2x.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_paopao_middle_left@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..e491f8d914a5b26916c61ae792fa38234fcedb50 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_paopao_middle_left@2x.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_paopao_middle_left_highlighted.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_paopao_middle_left_highlighted.png new file mode 100644 index 0000000000000000000000000000000000000000..b61b64723c6d20acdaf99eb9b390b0a016fce273 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_paopao_middle_left_highlighted.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_paopao_middle_left_highlighted@2x.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_paopao_middle_left_highlighted@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..db276e26fccfac81e85bf0de7bc3c5202462b6b5 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_paopao_middle_left_highlighted@2x.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_paopao_middle_right.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_paopao_middle_right.png new file mode 100644 index 0000000000000000000000000000000000000000..fbf8979185bb81e5a229540fed4008c22a2967b2 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_paopao_middle_right.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_paopao_middle_right@2x.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_paopao_middle_right@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..7bacc2ec1f4cfd0415f884b129686c77518b11e5 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_paopao_middle_right@2x.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_paopao_middle_right_highlighted.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_paopao_middle_right_highlighted.png new file mode 100644 index 0000000000000000000000000000000000000000..a3d9d9aa46f766b509044d963ffb7a38f8cdf95c Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_paopao_middle_right_highlighted.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_paopao_middle_right_highlighted@2x.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_paopao_middle_right_highlighted@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..4133666134fe2dee311ad8f067e33f08fbd22b61 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/icon_paopao_middle_right_highlighted@2x.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/lineDashTexture.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/lineDashTexture.png new file mode 100644 index 0000000000000000000000000000000000000000..ec2166ab955c977bec6f159559bc21e2eb05e2fb Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/lineDashTexture.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/line_texture.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/line_texture.png new file mode 100755 index 0000000000000000000000000000000000000000..e43156a4e0f35e37bc71a2dc58090936d385ca78 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/line_texture.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/pin_green.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/pin_green.png new file mode 100644 index 0000000000000000000000000000000000000000..48e8d8338cb299b5241b68d9237c93fc8dc1cdc8 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/pin_green.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/pin_green@2x.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/pin_green@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9ca313aff7b2bb821569570a09dcbdf80ee0f8a5 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/pin_green@2x.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/pin_purple.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/pin_purple.png new file mode 100644 index 0000000000000000000000000000000000000000..9145ccd3dcf07368f8c48385b2d78d095ce4a1f3 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/pin_purple.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/pin_purple@2x.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/pin_purple@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..6657c6fded2eded65c1e1900be16bed7e0d4f141 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/pin_purple@2x.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/pin_red.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/pin_red.png new file mode 100644 index 0000000000000000000000000000000000000000..0584407da3d8aa148a45cf337a6a32a44cb2c52f Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/pin_red.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/pin_red@2x.png b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/pin_red@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..caeb353184e9be333eea4effb1c52039b7960d46 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/mapapi.bundle/images/pin_red@2x.png differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/thirdlibs/.DS_Store b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/thirdlibs/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..beff8b571da8280cf2ceb50ec1112cb3ad811a23 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/thirdlibs/.DS_Store differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/thirdlibs/libcrypto.a b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/thirdlibs/libcrypto.a new file mode 100644 index 0000000000000000000000000000000000000000..481302af802eb05b6908d8248df4d964b8aa1ce6 Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/thirdlibs/libcrypto.a differ diff --git a/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/thirdlibs/libssl.a b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/thirdlibs/libssl.a new file mode 100644 index 0000000000000000000000000000000000000000..8a0b78d2cb57083dea2f9fcf3d5e0f1e3ab28d9e Binary files /dev/null and b/JQQY/ThirdParty/BaiduMap_IOSSDK_v3/thirdlibs/libssl.a differ diff --git a/JQQY/ThirdParty/MBProgressHUD/MBProgressHUD+Add.h b/JQQY/ThirdParty/MBProgressHUD/MBProgressHUD+Add.h new file mode 100644 index 0000000000000000000000000000000000000000..f76f76afdde103117b5f9b33c799fcf7375f4b15 --- /dev/null +++ b/JQQY/ThirdParty/MBProgressHUD/MBProgressHUD+Add.h @@ -0,0 +1,15 @@ +// +// MBProgressHUD+Add.h +// +// Created by mj on 13-4-18. +// Copyright (c) 2013 itcast. All rights reserved. +// + +#import "MBProgressHUD.h" + +@interface MBProgressHUD (Add) ++ (void)showError:(NSString *)error toView:(UIView *)view; ++ (void)showSuccess:(NSString *)success toView:(UIView *)view; + ++ (MBProgressHUD *)showMessag:(NSString *)message toView:(UIView *)view; +@end diff --git a/JQQY/ThirdParty/MBProgressHUD/MBProgressHUD+Add.m b/JQQY/ThirdParty/MBProgressHUD/MBProgressHUD+Add.m new file mode 100644 index 0000000000000000000000000000000000000000..cf0ae4f6d1ad6e3ed5e2ea311fc5817d34e029b3 --- /dev/null +++ b/JQQY/ThirdParty/MBProgressHUD/MBProgressHUD+Add.m @@ -0,0 +1,43 @@ +// +// MBProgressHUD+Add.m +// +// Created by mj on 13-4-18. +// Copyright (c) 2013年 itcast. All rights reserved. +// + +#import "MBProgressHUD+Add.h" + +@implementation MBProgressHUD (Add) + ++ (void)show:(NSString *)text icon:(NSString *)icon view:(UIView *)view +{ + if (view == nil) view = [UIApplication sharedApplication].keyWindow; + + MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:view animated:YES]; + hud.labelText = text; + hud.customView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:[NSString stringWithFormat:@"MBProgressHUD.bundle/%@", icon]]]; + hud.mode = MBProgressHUDModeCustomView; + + hud.removeFromSuperViewOnHide = YES; + + [hud hide:YES afterDelay:0.7]; +} + ++ (void)showError:(NSString *)error toView:(UIView *)view{ + [self show:error icon:@"error.png" view:view]; +} + ++ (void)showSuccess:(NSString *)success toView:(UIView *)view +{ + [self show:success icon:@"success.png" view:view]; +} + ++ (MBProgressHUD *)showMessag:(NSString *)message toView:(UIView *)view { + if (view == nil) view = [UIApplication sharedApplication].keyWindow; + MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:view animated:YES]; + hud.labelText = message; + hud.removeFromSuperViewOnHide = YES; + hud.dimBackground = YES; + return hud; +} +@end diff --git a/JQQY/ThirdParty/MBProgressHUD/MBProgressHUD.h b/JQQY/ThirdParty/MBProgressHUD/MBProgressHUD.h new file mode 100755 index 0000000000000000000000000000000000000000..20aaa0a47079c508bc11b87062a9ef5ecdfba8ae --- /dev/null +++ b/JQQY/ThirdParty/MBProgressHUD/MBProgressHUD.h @@ -0,0 +1,484 @@ +// +// MBProgressHUD.h +// Version 0.8 +// Created by Matej Bukovinski on 2.4.09. +// + +// This code is distributed under the terms and conditions of the MIT license. + +// Copyright (c) 2013 Matej Bukovinski +// +// 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 + +@protocol MBProgressHUDDelegate; + + +typedef enum { + /** Progress is shown using an UIActivityIndicatorView. This is the default. */ + MBProgressHUDModeIndeterminate, + /** Progress is shown using a round, pie-chart like, progress view. */ + MBProgressHUDModeDeterminate, + /** Progress is shown using a horizontal progress bar */ + MBProgressHUDModeDeterminateHorizontalBar, + /** Progress is shown using a ring-shaped progress view. */ + MBProgressHUDModeAnnularDeterminate, + /** Shows a custom view */ + MBProgressHUDModeCustomView, + /** Shows only labels */ + MBProgressHUDModeText +} MBProgressHUDMode; + +typedef enum { + /** Opacity animation */ + MBProgressHUDAnimationFade, + /** Opacity + scale animation */ + MBProgressHUDAnimationZoom, + MBProgressHUDAnimationZoomOut = MBProgressHUDAnimationZoom, + MBProgressHUDAnimationZoomIn +} MBProgressHUDAnimation; + + +#ifndef MB_INSTANCETYPE +#if __has_feature(objc_instancetype) +#define MB_INSTANCETYPE instancetype +#else +#define MB_INSTANCETYPE id +#endif +#endif + +#ifndef MB_STRONG +#if __has_feature(objc_arc) +#define MB_STRONG strong +#else +#define MB_STRONG retain +#endif +#endif + +#ifndef MB_WEAK +#if __has_feature(objc_arc_weak) +#define MB_WEAK weak +#elif __has_feature(objc_arc) +#define MB_WEAK unsafe_unretained +#else +#define MB_WEAK assign +#endif +#endif + +#if NS_BLOCKS_AVAILABLE +typedef void (^MBProgressHUDCompletionBlock)(); +#endif + + +/** + * Displays a simple HUD window containing a progress indicator and two optional labels for short messages. + * + * This is a simple drop-in class for displaying a progress HUD view similar to Apple's private UIProgressHUD class. + * The MBProgressHUD window spans over the entire space given to it by the initWithFrame constructor and catches all + * user input on this region, thereby preventing the user operations on components below the view. The HUD itself is + * drawn centered as a rounded semi-transparent view which resizes depending on the user specified content. + * + * This view supports four modes of operation: + * - MBProgressHUDModeIndeterminate - shows a UIActivityIndicatorView + * - MBProgressHUDModeDeterminate - shows a custom round progress indicator + * - MBProgressHUDModeAnnularDeterminate - shows a custom annular progress indicator + * - MBProgressHUDModeCustomView - shows an arbitrary, user specified view (@see customView) + * + * All three modes can have optional labels assigned: + * - If the labelText property is set and non-empty then a label containing the provided content is placed below the + * indicator view. + * - If also the detailsLabelText property is set then another label is placed below the first label. + */ +@interface MBProgressHUD : UIView + +/** + * Creates a new HUD, adds it to provided view and shows it. The counterpart to this method is hideHUDForView:animated:. + * + * @param view The view that the HUD will be added to + * @param animated If set to YES the HUD will appear using the current animationType. If set to NO the HUD will not use + * animations while appearing. + * @return A reference to the created HUD. + * + * @see hideHUDForView:animated: + * @see animationType + */ ++ (MB_INSTANCETYPE)showHUDAddedTo:(UIView *)view animated:(BOOL)animated; + +/** + * Finds the top-most HUD subview and hides it. The counterpart to this method is showHUDAddedTo:animated:. + * + * @param view The view that is going to be searched for a HUD subview. + * @param animated If set to YES the HUD will disappear using the current animationType. If set to NO the HUD will not use + * animations while disappearing. + * @return YES if a HUD was found and removed, NO otherwise. + * + * @see showHUDAddedTo:animated: + * @see animationType + */ ++ (BOOL)hideHUDForView:(UIView *)view animated:(BOOL)animated; + +/** + * Finds all the HUD subviews and hides them. + * + * @param view The view that is going to be searched for HUD subviews. + * @param animated If set to YES the HUDs will disappear using the current animationType. If set to NO the HUDs will not use + * animations while disappearing. + * @return the number of HUDs found and removed. + * + * @see hideHUDForView:animated: + * @see animationType + */ ++ (NSUInteger)hideAllHUDsForView:(UIView *)view animated:(BOOL)animated; + +/** + * Finds the top-most HUD subview and returns it. + * + * @param view The view that is going to be searched. + * @return A reference to the last HUD subview discovered. + */ ++ (MB_INSTANCETYPE)HUDForView:(UIView *)view; + +/** + * Finds all HUD subviews and returns them. + * + * @param view The view that is going to be searched. + * @return All found HUD views (array of MBProgressHUD objects). + */ ++ (NSArray *)allHUDsForView:(UIView *)view; + +/** + * A convenience constructor that initializes the HUD with the window's bounds. Calls the designated constructor with + * window.bounds as the parameter. + * + * @param window The window instance that will provide the bounds for the HUD. Should be the same instance as + * the HUD's superview (i.e., the window that the HUD will be added to). + */ +- (id)initWithWindow:(UIWindow *)window; + +/** + * A convenience constructor that initializes the HUD with the view's bounds. Calls the designated constructor with + * view.bounds as the parameter + * + * @param view The view instance that will provide the bounds for the HUD. Should be the same instance as + * the HUD's superview (i.e., the view that the HUD will be added to). + */ +- (id)initWithView:(UIView *)view; + +/** + * Display the HUD. You need to make sure that the main thread completes its run loop soon after this method call so + * the user interface can be updated. Call this method when your task is already set-up to be executed in a new thread + * (e.g., when using something like NSOperation or calling an asynchronous call like NSURLRequest). + * + * @param animated If set to YES the HUD will appear using the current animationType. If set to NO the HUD will not use + * animations while appearing. + * + * @see animationType + */ +- (void)show:(BOOL)animated; + +/** + * Hide the HUD. This still calls the hudWasHidden: delegate. This is the counterpart of the show: method. Use it to + * hide the HUD when your task completes. + * + * @param animated If set to YES the HUD will disappear using the current animationType. If set to NO the HUD will not use + * animations while disappearing. + * + * @see animationType + */ +- (void)hide:(BOOL)animated; + +/** + * Hide the HUD after a delay. This still calls the hudWasHidden: delegate. This is the counterpart of the show: method. Use it to + * hide the HUD when your task completes. + * + * @param animated If set to YES the HUD will disappear using the current animationType. If set to NO the HUD will not use + * animations while disappearing. + * @param delay Delay in seconds until the HUD is hidden. + * + * @see animationType + */ +- (void)hide:(BOOL)animated afterDelay:(NSTimeInterval)delay; + +/** + * Shows the HUD while a background task is executing in a new thread, then hides the HUD. + * + * This method also takes care of autorelease pools so your method does not have to be concerned with setting up a + * pool. + * + * @param method The method to be executed while the HUD is shown. This method will be executed in a new thread. + * @param target The object that the target method belongs to. + * @param object An optional object to be passed to the method. + * @param animated If set to YES the HUD will (dis)appear using the current animationType. If set to NO the HUD will not use + * animations while (dis)appearing. + */ +- (void)showWhileExecuting:(SEL)method onTarget:(id)target withObject:(id)object animated:(BOOL)animated; + +#if NS_BLOCKS_AVAILABLE + +/** + * Shows the HUD while a block is executing on a background queue, then hides the HUD. + * + * @see showAnimated:whileExecutingBlock:onQueue:completionBlock: + */ +- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block; + +/** + * Shows the HUD while a block is executing on a background queue, then hides the HUD. + * + * @see showAnimated:whileExecutingBlock:onQueue:completionBlock: + */ +- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block completionBlock:(MBProgressHUDCompletionBlock)completion; + +/** + * Shows the HUD while a block is executing on the specified dispatch queue, then hides the HUD. + * + * @see showAnimated:whileExecutingBlock:onQueue:completionBlock: + */ +- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block onQueue:(dispatch_queue_t)queue; + +/** + * Shows the HUD while a block is executing on the specified dispatch queue, executes completion block on the main queue, and then hides the HUD. + * + * @param animated If set to YES the HUD will (dis)appear using the current animationType. If set to NO the HUD will + * not use animations while (dis)appearing. + * @param block The block to be executed while the HUD is shown. + * @param queue The dispatch queue on which the block should be executed. + * @param completion The block to be executed on completion. + * + * @see completionBlock + */ +- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block onQueue:(dispatch_queue_t)queue + completionBlock:(MBProgressHUDCompletionBlock)completion; + +/** + * A block that gets called after the HUD was completely hidden. + */ +@property (copy) MBProgressHUDCompletionBlock completionBlock; + +#endif + +/** + * MBProgressHUD operation mode. The default is MBProgressHUDModeIndeterminate. + * + * @see MBProgressHUDMode + */ +@property (assign) MBProgressHUDMode mode; + +/** + * The animation type that should be used when the HUD is shown and hidden. + * + * @see MBProgressHUDAnimation + */ +@property (assign) MBProgressHUDAnimation animationType; + +/** + * The UIView (e.g., a UIImageView) to be shown when the HUD is in MBProgressHUDModeCustomView. + * For best results use a 37 by 37 pixel view (so the bounds match the built in indicator bounds). + */ +@property (MB_STRONG) UIView *customView; + +/** + * The HUD delegate object. + * + * @see MBProgressHUDDelegate + */ +@property (MB_WEAK) id delegate; + +/** + * An optional short message to be displayed below the activity indicator. The HUD is automatically resized to fit + * the entire text. If the text is too long it will get clipped by displaying "..." at the end. If left unchanged or + * set to @"", then no message is displayed. + */ +@property (copy) NSString *labelText; + +/** + * An optional details message displayed below the labelText message. This message is displayed only if the labelText + * property is also set and is different from an empty string (@""). The details text can span multiple lines. + */ +@property (copy) NSString *detailsLabelText; + +/** + * The opacity of the HUD window. Defaults to 0.8 (80% opacity). + */ +@property (assign) float opacity; + +/** + * The color of the HUD window. Defaults to black. If this property is set, color is set using + * this UIColor and the opacity property is not used. using retain because performing copy on + * UIColor base colors (like [UIColor greenColor]) cause problems with the copyZone. + */ +@property (MB_STRONG) UIColor *color; + +/** + * The x-axis offset of the HUD relative to the centre of the superview. + */ +@property (assign) float xOffset; + +/** + * The y-axis offset of the HUD relative to the centre of the superview. + */ +@property (assign) float yOffset; + +/** + * The amount of space between the HUD edge and the HUD elements (labels, indicators or custom views). + * Defaults to 20.0 + */ +@property (assign) float margin; + +/** + * Cover the HUD background view with a radial gradient. + */ +@property (assign) BOOL dimBackground; + +/* + * Grace period is the time (in seconds) that the invoked method may be run without + * showing the HUD. If the task finishes before the grace time runs out, the HUD will + * not be shown at all. + * This may be used to prevent HUD display for very short tasks. + * Defaults to 0 (no grace time). + * Grace time functionality is only supported when the task status is known! + * @see taskInProgress + */ +@property (assign) float graceTime; + +/** + * The minimum time (in seconds) that the HUD is shown. + * This avoids the problem of the HUD being shown and than instantly hidden. + * Defaults to 0 (no minimum show time). + */ +@property (assign) float minShowTime; + +/** + * Indicates that the executed operation is in progress. Needed for correct graceTime operation. + * If you don't set a graceTime (different than 0.0) this does nothing. + * This property is automatically set when using showWhileExecuting:onTarget:withObject:animated:. + * When threading is done outside of the HUD (i.e., when the show: and hide: methods are used directly), + * you need to set this property when your task starts and completes in order to have normal graceTime + * functionality. + */ +@property (assign) BOOL taskInProgress; + +/** + * Removes the HUD from its parent view when hidden. + * Defaults to NO. + */ +@property (assign) BOOL removeFromSuperViewOnHide; + +/** + * Font to be used for the main label. Set this property if the default is not adequate. + */ +@property (MB_STRONG) UIFont* labelFont; + +/** + * Font to be used for the details label. Set this property if the default is not adequate. + */ +@property (MB_STRONG) UIFont* detailsLabelFont; + +/** + * The progress of the progress indicator, from 0.0 to 1.0. Defaults to 0.0. + */ +@property (assign) float progress; + +/** + * The minimum size of the HUD bezel. Defaults to CGSizeZero (no minimum size). + */ +@property (assign) CGSize minSize; + +/** + * Force the HUD dimensions to be equal if possible. + */ +@property (assign, getter = isSquare) BOOL square; + +@end + + +@protocol MBProgressHUDDelegate + +@optional + +/** + * Called after the HUD was fully hidden from the screen. + */ +- (void)hudWasHidden:(MBProgressHUD *)hud; + +@end + + +/** + * A progress view for showing definite progress by filling up a circle (pie chart). + */ +@interface MBRoundProgressView : UIView + +/** + * Progress (0.0 to 1.0) + */ +@property (nonatomic, assign) float progress; + +/** + * Indicator progress color. + * Defaults to white [UIColor whiteColor] + */ +@property (nonatomic, MB_STRONG) UIColor *progressTintColor; + +/** + * Indicator background (non-progress) color. + * Defaults to translucent white (alpha 0.1) + */ +@property (nonatomic, MB_STRONG) UIColor *backgroundTintColor; + +/* + * Display mode - NO = round or YES = annular. Defaults to round. + */ +@property (nonatomic, assign, getter = isAnnular) BOOL annular; + +@end + + +/** + * A flat bar progress view. + */ +@interface MBBarProgressView : UIView + +/** + * Progress (0.0 to 1.0) + */ +@property (nonatomic, assign) float progress; + +/** + * Bar border line color. + * Defaults to white [UIColor whiteColor]. + */ +@property (nonatomic, MB_STRONG) UIColor *lineColor; + +/** + * Bar background color. + * Defaults to clear [UIColor clearColor]; + */ +@property (nonatomic, MB_STRONG) UIColor *progressRemainingColor; + +/** + * Bar progress color. + * Defaults to white [UIColor whiteColor]. + */ +@property (nonatomic, MB_STRONG) UIColor *progressColor; + +@end diff --git a/JQQY/ThirdParty/MBProgressHUD/MBProgressHUD.m b/JQQY/ThirdParty/MBProgressHUD/MBProgressHUD.m new file mode 100755 index 0000000000000000000000000000000000000000..7c55376cd497c84210007d5ffe505db9a7b04e64 --- /dev/null +++ b/JQQY/ThirdParty/MBProgressHUD/MBProgressHUD.m @@ -0,0 +1,1008 @@ +// +// MBProgressHUD.m +// Version 0.8 +// Created by Matej Bukovinski on 2.4.09. +// + +#import "MBProgressHUD.h" + + +#if __has_feature(objc_arc) +#define MB_AUTORELEASE(exp) exp +#define MB_RELEASE(exp) exp +#define MB_RETAIN(exp) exp +#else +#define MB_AUTORELEASE(exp) [exp autorelease] +#define MB_RELEASE(exp) [exp release] +#define MB_RETAIN(exp) [exp retain] +#endif + +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 60000 +#define MBLabelAlignmentCenter NSTextAlignmentCenter +#else +#define MBLabelAlignmentCenter UITextAlignmentCenter +#endif + +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 +#define MB_TEXTSIZE(text, font) [text length] > 0 ? [text \ +sizeWithAttributes:@{NSFontAttributeName:font}] : CGSizeZero; +#else +#define MB_TEXTSIZE(text, font) [text length] > 0 ? [text sizeWithFont:font] : CGSizeZero; +#endif + +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 +#define MB_MULTILINE_TEXTSIZE(text, font, maxSize, mode) [text length] > 0 ? [text \ +boundingRectWithSize:maxSize options:(NSStringDrawingUsesLineFragmentOrigin) \ +attributes:@{NSFontAttributeName:font} context:nil].size : CGSizeZero; +#else +#define MB_MULTILINE_TEXTSIZE(text, font, maxSize, mode) [text length] > 0 ? [text \ +sizeWithFont:font constrainedToSize:maxSize lineBreakMode:mode] : CGSizeZero; +#endif + + +static const CGFloat kPadding = 4.f; +static const CGFloat kLabelFontSize = 16.f; +static const CGFloat kDetailsLabelFontSize = 12.f; + + +@interface MBProgressHUD () + +- (void)setupLabels; +- (void)registerForKVO; +- (void)unregisterFromKVO; +- (NSArray *)observableKeypaths; +- (void)registerForNotifications; +- (void)unregisterFromNotifications; +- (void)updateUIForKeypath:(NSString *)keyPath; +- (void)hideUsingAnimation:(BOOL)animated; +- (void)showUsingAnimation:(BOOL)animated; +- (void)done; +- (void)updateIndicators; +- (void)handleGraceTimer:(NSTimer *)theTimer; +- (void)handleMinShowTimer:(NSTimer *)theTimer; +- (void)setTransformForCurrentOrientation:(BOOL)animated; +- (void)cleanUp; +- (void)launchExecution; +- (void)deviceOrientationDidChange:(NSNotification *)notification; +- (void)hideDelayed:(NSNumber *)animated; + +@property (atomic, MB_STRONG) UIView *indicator; +@property (atomic, MB_STRONG) NSTimer *graceTimer; +@property (atomic, MB_STRONG) NSTimer *minShowTimer; +@property (atomic, MB_STRONG) NSDate *showStarted; +@property (atomic, assign) CGSize size; + +@end + + +@implementation MBProgressHUD { + BOOL useAnimation; + SEL methodForExecution; + id targetForExecution; + id objectForExecution; + UILabel *label; + UILabel *detailsLabel; + BOOL isFinished; + CGAffineTransform rotationTransform; +} + +#pragma mark - Properties + +@synthesize animationType; +@synthesize delegate; +@synthesize opacity; +@synthesize color; +@synthesize labelFont; +@synthesize detailsLabelFont; +@synthesize indicator; +@synthesize xOffset; +@synthesize yOffset; +@synthesize minSize; +@synthesize square; +@synthesize margin; +@synthesize dimBackground; +@synthesize graceTime; +@synthesize minShowTime; +@synthesize graceTimer; +@synthesize minShowTimer; +@synthesize taskInProgress; +@synthesize removeFromSuperViewOnHide; +@synthesize customView; +@synthesize showStarted; +@synthesize mode; +@synthesize labelText; +@synthesize detailsLabelText; +@synthesize progress; +@synthesize size; +#if NS_BLOCKS_AVAILABLE +@synthesize completionBlock; +#endif + +#pragma mark - Class methods + ++ (MB_INSTANCETYPE)showHUDAddedTo:(UIView *)view animated:(BOOL)animated { + MBProgressHUD *hud = [[self alloc] initWithView:view]; + [view addSubview:hud]; + [hud show:animated]; + return MB_AUTORELEASE(hud); +} + ++ (BOOL)hideHUDForView:(UIView *)view animated:(BOOL)animated { + MBProgressHUD *hud = [self HUDForView:view]; + if (hud != nil) { + hud.removeFromSuperViewOnHide = YES; + [hud hide:animated]; + return YES; + } + return NO; +} + ++ (NSUInteger)hideAllHUDsForView:(UIView *)view animated:(BOOL)animated { + NSArray *huds = [MBProgressHUD allHUDsForView:view]; + for (MBProgressHUD *hud in huds) { + hud.removeFromSuperViewOnHide = YES; + [hud hide:animated]; + } + return [huds count]; +} + ++ (MB_INSTANCETYPE)HUDForView:(UIView *)view { + NSEnumerator *subviewsEnum = [view.subviews reverseObjectEnumerator]; + for (UIView *subview in subviewsEnum) { + if ([subview isKindOfClass:self]) { + return (MBProgressHUD *)subview; + } + } + return nil; +} + ++ (NSArray *)allHUDsForView:(UIView *)view { + NSMutableArray *huds = [NSMutableArray array]; + NSArray *subviews = view.subviews; + for (UIView *aView in subviews) { + if ([aView isKindOfClass:self]) { + [huds addObject:aView]; + } + } + return [NSArray arrayWithArray:huds]; +} + +#pragma mark - Lifecycle + +- (id)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + // Set default values for properties + self.animationType = MBProgressHUDAnimationFade; + self.mode = MBProgressHUDModeIndeterminate; + self.labelText = nil; + self.detailsLabelText = nil; + self.opacity = 0.8f; + self.color = nil; + self.labelFont = [UIFont boldSystemFontOfSize:kLabelFontSize]; + self.detailsLabelFont = [UIFont boldSystemFontOfSize:kDetailsLabelFontSize]; + self.xOffset = 0.0f; + self.yOffset = 0.0f; + self.dimBackground = NO; + self.margin = 20.0f; + self.graceTime = 0.0f; + self.minShowTime = 0.0f; + self.removeFromSuperViewOnHide = NO; + self.minSize = CGSizeZero; + self.square = NO; + self.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin + | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin; + + // Transparent background + self.opaque = NO; + self.backgroundColor = [UIColor clearColor]; + // Make it invisible for now + self.alpha = 0.0f; + + taskInProgress = NO; + rotationTransform = CGAffineTransformIdentity; + + [self setupLabels]; + [self updateIndicators]; + [self registerForKVO]; + [self registerForNotifications]; + } + return self; +} + +- (id)initWithView:(UIView *)view { +// NSAssert(view, @"View must not be nil."); + return [self initWithFrame:view.bounds]; +} + +- (id)initWithWindow:(UIWindow *)window { + return [self initWithView:window]; +} + +- (void)dealloc { + [self unregisterFromNotifications]; + [self unregisterFromKVO]; +#if !__has_feature(objc_arc) + [color release]; + [indicator release]; + [label release]; + [detailsLabel release]; + [labelText release]; + [detailsLabelText release]; + [graceTimer release]; + [minShowTimer release]; + [showStarted release]; + [customView release]; +#if NS_BLOCKS_AVAILABLE + [completionBlock release]; +#endif + [super dealloc]; +#endif +} + +#pragma mark - Show & hide + +- (void)show:(BOOL)animated { + useAnimation = animated; + // If the grace time is set postpone the HUD display + if (self.graceTime > 0.0) { + self.graceTimer = [NSTimer scheduledTimerWithTimeInterval:self.graceTime target:self + selector:@selector(handleGraceTimer:) userInfo:nil repeats:NO]; + } + // ... otherwise show the HUD imediately + else { + [self setNeedsDisplay]; + [self showUsingAnimation:useAnimation]; + } +} + +- (void)hide:(BOOL)animated { + useAnimation = animated; + // If the minShow time is set, calculate how long the hud was shown, + // and pospone the hiding operation if necessary + if (self.minShowTime > 0.0 && showStarted) { + NSTimeInterval interv = [[NSDate date] timeIntervalSinceDate:showStarted]; + if (interv < self.minShowTime) { + self.minShowTimer = [NSTimer scheduledTimerWithTimeInterval:(self.minShowTime - interv) target:self + selector:@selector(handleMinShowTimer:) userInfo:nil repeats:NO]; + return; + } + } + // ... otherwise hide the HUD immediately + [self hideUsingAnimation:useAnimation]; +} + +- (void)hide:(BOOL)animated afterDelay:(NSTimeInterval)delay { + [self performSelector:@selector(hideDelayed:) withObject:[NSNumber numberWithBool:animated] afterDelay:delay]; +} + +- (void)hideDelayed:(NSNumber *)animated { + [self hide:[animated boolValue]]; +} + +#pragma mark - Timer callbacks + +- (void)handleGraceTimer:(NSTimer *)theTimer { + // Show the HUD only if the task is still running + if (taskInProgress) { + [self setNeedsDisplay]; + [self showUsingAnimation:useAnimation]; + } +} + +- (void)handleMinShowTimer:(NSTimer *)theTimer { + [self hideUsingAnimation:useAnimation]; +} + +#pragma mark - View Hierrarchy + +- (void)didMoveToSuperview { + // We need to take care of rotation ourselfs if we're adding the HUD to a window + if ([self.superview isKindOfClass:[UIWindow class]]) { + [self setTransformForCurrentOrientation:NO]; + } +} + +#pragma mark - Internal show & hide operations + +- (void)showUsingAnimation:(BOOL)animated { + if (animated && animationType == MBProgressHUDAnimationZoomIn) { + self.transform = CGAffineTransformConcat(rotationTransform, CGAffineTransformMakeScale(0.5f, 0.5f)); + } else if (animated && animationType == MBProgressHUDAnimationZoomOut) { + self.transform = CGAffineTransformConcat(rotationTransform, CGAffineTransformMakeScale(1.5f, 1.5f)); + } + self.showStarted = [NSDate date]; + // Fade in + if (animated) { + [UIView beginAnimations:nil context:NULL]; + [UIView setAnimationDuration:0.30]; + self.alpha = 1.0f; + if (animationType == MBProgressHUDAnimationZoomIn || animationType == MBProgressHUDAnimationZoomOut) { + self.transform = rotationTransform; + } + [UIView commitAnimations]; + } + else { + self.alpha = 1.0f; + } +} + +- (void)hideUsingAnimation:(BOOL)animated { + // Fade out + if (animated && showStarted) { + [UIView beginAnimations:nil context:NULL]; + [UIView setAnimationDuration:0.30]; + [UIView setAnimationDelegate:self]; + [UIView setAnimationDidStopSelector:@selector(animationFinished:finished:context:)]; + // 0.02 prevents the hud from passing through touches during the animation the hud will get completely hidden + // in the done method + if (animationType == MBProgressHUDAnimationZoomIn) { + self.transform = CGAffineTransformConcat(rotationTransform, CGAffineTransformMakeScale(1.5f, 1.5f)); + } else if (animationType == MBProgressHUDAnimationZoomOut) { + self.transform = CGAffineTransformConcat(rotationTransform, CGAffineTransformMakeScale(0.5f, 0.5f)); + } + + self.alpha = 0.02f; + [UIView commitAnimations]; + } + else { + self.alpha = 0.0f; + [self done]; + } + self.showStarted = nil; +} + +- (void)animationFinished:(NSString *)animationID finished:(BOOL)finished context:(void*)context { + [self done]; +} + +- (void)done { + isFinished = YES; + self.alpha = 0.0f; + if (removeFromSuperViewOnHide) { + [self removeFromSuperview]; + } +#if NS_BLOCKS_AVAILABLE + if (self.completionBlock) { + self.completionBlock(); + self.completionBlock = NULL; + } +#endif + if ([delegate respondsToSelector:@selector(hudWasHidden:)]) { + [delegate performSelector:@selector(hudWasHidden:) withObject:self]; + } +} + +#pragma mark - Threading + +- (void)showWhileExecuting:(SEL)method onTarget:(id)target withObject:(id)object animated:(BOOL)animated { + methodForExecution = method; + targetForExecution = MB_RETAIN(target); + objectForExecution = MB_RETAIN(object); + // Launch execution in new thread + self.taskInProgress = YES; + [NSThread detachNewThreadSelector:@selector(launchExecution) toTarget:self withObject:nil]; + // Show HUD view + [self show:animated]; +} + +#if NS_BLOCKS_AVAILABLE + +- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block { + dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); + [self showAnimated:animated whileExecutingBlock:block onQueue:queue completionBlock:NULL]; +} + +- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block completionBlock:(void (^)())completion { + dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); + [self showAnimated:animated whileExecutingBlock:block onQueue:queue completionBlock:completion]; +} + +- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block onQueue:(dispatch_queue_t)queue { + [self showAnimated:animated whileExecutingBlock:block onQueue:queue completionBlock:NULL]; +} + +- (void)showAnimated:(BOOL)animated whileExecutingBlock:(dispatch_block_t)block onQueue:(dispatch_queue_t)queue + completionBlock:(MBProgressHUDCompletionBlock)completion { + self.taskInProgress = YES; + self.completionBlock = completion; + dispatch_async(queue, ^(void) { + block(); + dispatch_async(dispatch_get_main_queue(), ^(void) { + [self cleanUp]; + }); + }); + [self show:animated]; +} + +#endif + +- (void)launchExecution { + @autoreleasepool { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Warc-performSelector-leaks" + // Start executing the requested task + [targetForExecution performSelector:methodForExecution withObject:objectForExecution]; +#pragma clang diagnostic pop + // Task completed, update view in main thread (note: view operations should + // be done only in the main thread) + [self performSelectorOnMainThread:@selector(cleanUp) withObject:nil waitUntilDone:NO]; + } +} + +- (void)cleanUp { + taskInProgress = NO; +#if !__has_feature(objc_arc) + [targetForExecution release]; + [objectForExecution release]; +#else + targetForExecution = nil; + objectForExecution = nil; +#endif + [self hide:useAnimation]; +} + +#pragma mark - UI + +- (void)setupLabels { + label = [[UILabel alloc] initWithFrame:self.bounds]; + label.adjustsFontSizeToFitWidth = NO; + label.textAlignment = MBLabelAlignmentCenter; + label.opaque = NO; + label.backgroundColor = [UIColor clearColor]; + label.textColor = [UIColor whiteColor]; + label.font = self.labelFont; + label.text = self.labelText; + [self addSubview:label]; + + detailsLabel = [[UILabel alloc] initWithFrame:self.bounds]; + detailsLabel.font = self.detailsLabelFont; + detailsLabel.adjustsFontSizeToFitWidth = NO; + detailsLabel.textAlignment = MBLabelAlignmentCenter; + detailsLabel.opaque = NO; + detailsLabel.backgroundColor = [UIColor clearColor]; + detailsLabel.textColor = [UIColor whiteColor]; + detailsLabel.numberOfLines = 0; + detailsLabel.font = self.detailsLabelFont; + detailsLabel.text = self.detailsLabelText; + [self addSubview:detailsLabel]; +} + +- (void)updateIndicators { + + BOOL isActivityIndicator = [indicator isKindOfClass:[UIActivityIndicatorView class]]; + BOOL isRoundIndicator = [indicator isKindOfClass:[MBRoundProgressView class]]; + + if (mode == MBProgressHUDModeIndeterminate && !isActivityIndicator) { + // Update to indeterminate indicator + [indicator removeFromSuperview]; + self.indicator = MB_AUTORELEASE([[UIActivityIndicatorView alloc] + initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]); + [(UIActivityIndicatorView *)indicator startAnimating]; + [self addSubview:indicator]; + } + else if (mode == MBProgressHUDModeDeterminateHorizontalBar) { + // Update to bar determinate indicator + [indicator removeFromSuperview]; + self.indicator = MB_AUTORELEASE([[MBBarProgressView alloc] init]); + [self addSubview:indicator]; + } + else if (mode == MBProgressHUDModeDeterminate || mode == MBProgressHUDModeAnnularDeterminate) { + if (!isRoundIndicator) { + // Update to determinante indicator + [indicator removeFromSuperview]; + self.indicator = MB_AUTORELEASE([[MBRoundProgressView alloc] init]); + [self addSubview:indicator]; + } + if (mode == MBProgressHUDModeAnnularDeterminate) { + [(MBRoundProgressView *)indicator setAnnular:YES]; + } + } + else if (mode == MBProgressHUDModeCustomView && customView != indicator) { + // Update custom view indicator + [indicator removeFromSuperview]; + self.indicator = customView; + [self addSubview:indicator]; + } else if (mode == MBProgressHUDModeText) { + [indicator removeFromSuperview]; + self.indicator = nil; + } +} + +#pragma mark - Layout + +- (void)layoutSubviews { + + // Entirely cover the parent view + UIView *parent = self.superview; + if (parent) { + self.frame = parent.bounds; + } + CGRect bounds = self.bounds; + + // Determine the total widt and height needed + CGFloat maxWidth = bounds.size.width - 4 * margin; + CGSize totalSize = CGSizeZero; + + CGRect indicatorF = indicator.bounds; + indicatorF.size.width = MIN(indicatorF.size.width, maxWidth); + totalSize.width = MAX(totalSize.width, indicatorF.size.width); + totalSize.height += indicatorF.size.height; + + CGSize labelSize = MB_TEXTSIZE(label.text, label.font); + labelSize.width = MIN(labelSize.width, maxWidth); + totalSize.width = MAX(totalSize.width, labelSize.width); + totalSize.height += labelSize.height; + if (labelSize.height > 0.f && indicatorF.size.height > 0.f) { + totalSize.height += kPadding; + } + + CGFloat remainingHeight = bounds.size.height - totalSize.height - kPadding - 4 * margin; + CGSize maxSize = CGSizeMake(maxWidth, remainingHeight); + CGSize detailsLabelSize = MB_MULTILINE_TEXTSIZE(detailsLabel.text, detailsLabel.font, maxSize, detailsLabel.lineBreakMode); + totalSize.width = MAX(totalSize.width, detailsLabelSize.width); + totalSize.height += detailsLabelSize.height; + if (detailsLabelSize.height > 0.f && (indicatorF.size.height > 0.f || labelSize.height > 0.f)) { + totalSize.height += kPadding; + } + + totalSize.width += 2 * margin; + totalSize.height += 2 * margin; + + // Position elements + CGFloat yPos = roundf(((bounds.size.height - totalSize.height) / 2)) + margin + yOffset; + CGFloat xPos = xOffset; + indicatorF.origin.y = yPos; + indicatorF.origin.x = roundf((bounds.size.width - indicatorF.size.width) / 2) + xPos; + indicator.frame = indicatorF; + yPos += indicatorF.size.height; + + if (labelSize.height > 0.f && indicatorF.size.height > 0.f) { + yPos += kPadding; + } + CGRect labelF; + labelF.origin.y = yPos; + labelF.origin.x = roundf((bounds.size.width - labelSize.width) / 2) + xPos; + labelF.size = labelSize; + label.frame = labelF; + yPos += labelF.size.height; + + if (detailsLabelSize.height > 0.f && (indicatorF.size.height > 0.f || labelSize.height > 0.f)) { + yPos += kPadding; + } + CGRect detailsLabelF; + detailsLabelF.origin.y = yPos; + detailsLabelF.origin.x = roundf((bounds.size.width - detailsLabelSize.width) / 2) + xPos; + detailsLabelF.size = detailsLabelSize; + detailsLabel.frame = detailsLabelF; + + // Enforce minsize and quare rules + if (square) { + CGFloat max = MAX(totalSize.width, totalSize.height); + if (max <= bounds.size.width - 2 * margin) { + totalSize.width = max; + } + if (max <= bounds.size.height - 2 * margin) { + totalSize.height = max; + } + } + if (totalSize.width < minSize.width) { + totalSize.width = minSize.width; + } + if (totalSize.height < minSize.height) { + totalSize.height = minSize.height; + } + + self.size = totalSize; +} + +#pragma mark BG Drawing + +- (void)drawRect:(CGRect)rect { + + CGContextRef context = UIGraphicsGetCurrentContext(); + UIGraphicsPushContext(context); + + if (self.dimBackground) { + //Gradient colours + size_t gradLocationsNum = 2; + CGFloat gradLocations[2] = {0.0f, 1.0f}; + CGFloat gradColors[8] = {0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f}; + CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); + CGGradientRef gradient = CGGradientCreateWithColorComponents(colorSpace, gradColors, gradLocations, gradLocationsNum); + CGColorSpaceRelease(colorSpace); + //Gradient center + CGPoint gradCenter= CGPointMake(self.bounds.size.width/2, self.bounds.size.height/2); + //Gradient radius + float gradRadius = MIN(self.bounds.size.width , self.bounds.size.height) ; + //Gradient draw + CGContextDrawRadialGradient (context, gradient, gradCenter, + 0, gradCenter, gradRadius, + kCGGradientDrawsAfterEndLocation); + CGGradientRelease(gradient); + } + + // Set background rect color + if (self.color) { + CGContextSetFillColorWithColor(context, self.color.CGColor); + } else { + CGContextSetGrayFillColor(context, 0.0f, self.opacity); + } + + + // Center HUD + CGRect allRect = self.bounds; + // Draw rounded HUD backgroud rect + CGRect boxRect = CGRectMake(roundf((allRect.size.width - size.width) / 2) + self.xOffset, + roundf((allRect.size.height - size.height) / 2) + self.yOffset, size.width, size.height); + float radius = 10.0f; + CGContextBeginPath(context); + CGContextMoveToPoint(context, CGRectGetMinX(boxRect) + radius, CGRectGetMinY(boxRect)); + CGContextAddArc(context, CGRectGetMaxX(boxRect) - radius, CGRectGetMinY(boxRect) + radius, radius, 3 * (float)M_PI / 2, 0, 0); + CGContextAddArc(context, CGRectGetMaxX(boxRect) - radius, CGRectGetMaxY(boxRect) - radius, radius, 0, (float)M_PI / 2, 0); + CGContextAddArc(context, CGRectGetMinX(boxRect) + radius, CGRectGetMaxY(boxRect) - radius, radius, (float)M_PI / 2, (float)M_PI, 0); + CGContextAddArc(context, CGRectGetMinX(boxRect) + radius, CGRectGetMinY(boxRect) + radius, radius, (float)M_PI, 3 * (float)M_PI / 2, 0); + CGContextClosePath(context); + CGContextFillPath(context); + + UIGraphicsPopContext(); +} + +#pragma mark - KVO + +- (void)registerForKVO { + for (NSString *keyPath in [self observableKeypaths]) { + [self addObserver:self forKeyPath:keyPath options:NSKeyValueObservingOptionNew context:NULL]; + } +} + +- (void)unregisterFromKVO { + for (NSString *keyPath in [self observableKeypaths]) { + [self removeObserver:self forKeyPath:keyPath]; + } +} + +- (NSArray *)observableKeypaths { + return [NSArray arrayWithObjects:@"mode", @"customView", @"labelText", @"labelFont", + @"detailsLabelText", @"detailsLabelFont", @"progress", nil]; +} + +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { + if (![NSThread isMainThread]) { + [self performSelectorOnMainThread:@selector(updateUIForKeypath:) withObject:keyPath waitUntilDone:NO]; + } else { + [self updateUIForKeypath:keyPath]; + } +} + +- (void)updateUIForKeypath:(NSString *)keyPath { + if ([keyPath isEqualToString:@"mode"] || [keyPath isEqualToString:@"customView"]) { + [self updateIndicators]; + } else if ([keyPath isEqualToString:@"labelText"]) { + label.text = self.labelText; + } else if ([keyPath isEqualToString:@"labelFont"]) { + label.font = self.labelFont; + } else if ([keyPath isEqualToString:@"detailsLabelText"]) { + detailsLabel.text = self.detailsLabelText; + } else if ([keyPath isEqualToString:@"detailsLabelFont"]) { + detailsLabel.font = self.detailsLabelFont; + } else if ([keyPath isEqualToString:@"progress"]) { + if ([indicator respondsToSelector:@selector(setProgress:)]) { + [(id)indicator setProgress:progress]; + } + return; + } + [self setNeedsLayout]; + [self setNeedsDisplay]; +} + +#pragma mark - Notifications + +- (void)registerForNotifications { + NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; + [nc addObserver:self selector:@selector(deviceOrientationDidChange:) + name:UIDeviceOrientationDidChangeNotification object:nil]; +} + +- (void)unregisterFromNotifications { + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + +- (void)deviceOrientationDidChange:(NSNotification *)notification { + UIView *superview = self.superview; + if (!superview) { + return; + } else if ([superview isKindOfClass:[UIWindow class]]) { + [self setTransformForCurrentOrientation:YES]; + } else { + self.bounds = self.superview.bounds; + [self setNeedsDisplay]; + } +} + +- (void)setTransformForCurrentOrientation:(BOOL)animated { + // Stay in sync with the superview + if (self.superview) { + self.bounds = self.superview.bounds; + [self setNeedsDisplay]; + } + + UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation; + CGFloat radians = 0; + if (UIInterfaceOrientationIsLandscape(orientation)) { + if (orientation == UIInterfaceOrientationLandscapeLeft) { radians = -(CGFloat)M_PI_2; } + else { radians = (CGFloat)M_PI_2; } + // Window coordinates differ! + self.bounds = CGRectMake(0, 0, self.bounds.size.height, self.bounds.size.width); + } else { + if (orientation == UIInterfaceOrientationPortraitUpsideDown) { radians = (CGFloat)M_PI; } + else { radians = 0; } + } + rotationTransform = CGAffineTransformMakeRotation(radians); + + if (animated) { + [UIView beginAnimations:nil context:nil]; + } + [self setTransform:rotationTransform]; + if (animated) { + [UIView commitAnimations]; + } +} + +@end + + +@implementation MBRoundProgressView + +#pragma mark - Lifecycle + +- (id)init { + return [self initWithFrame:CGRectMake(0.f, 0.f, 37.f, 37.f)]; +} + +- (id)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + self.backgroundColor = [UIColor clearColor]; + self.opaque = NO; + _progress = 0.f; + _annular = NO; + _progressTintColor = [[UIColor alloc] initWithWhite:1.f alpha:1.f]; + _backgroundTintColor = [[UIColor alloc] initWithWhite:1.f alpha:.1f]; + [self registerForKVO]; + } + return self; +} + +- (void)dealloc { + [self unregisterFromKVO]; +#if !__has_feature(objc_arc) + [_progressTintColor release]; + [_backgroundTintColor release]; + [super dealloc]; +#endif +} + +#pragma mark - Drawing + +- (void)drawRect:(CGRect)rect { + + CGRect allRect = self.bounds; + CGRect circleRect = CGRectInset(allRect, 2.0f, 2.0f); + CGContextRef context = UIGraphicsGetCurrentContext(); + + if (_annular) { + // Draw background + CGFloat lineWidth = 5.f; + UIBezierPath *processBackgroundPath = [UIBezierPath bezierPath]; + processBackgroundPath.lineWidth = lineWidth; + processBackgroundPath.lineCapStyle = kCGLineCapRound; + CGPoint center = CGPointMake(self.bounds.size.width/2, self.bounds.size.height/2); + CGFloat radius = (self.bounds.size.width - lineWidth)/2; + CGFloat startAngle = - ((float)M_PI / 2); // 90 degrees + CGFloat endAngle = (2 * (float)M_PI) + startAngle; + [processBackgroundPath addArcWithCenter:center radius:radius startAngle:startAngle endAngle:endAngle clockwise:YES]; + [_backgroundTintColor set]; + [processBackgroundPath stroke]; + // Draw progress + UIBezierPath *processPath = [UIBezierPath bezierPath]; + processPath.lineCapStyle = kCGLineCapRound; + processPath.lineWidth = lineWidth; + endAngle = (self.progress * 2 * (float)M_PI) + startAngle; + [processPath addArcWithCenter:center radius:radius startAngle:startAngle endAngle:endAngle clockwise:YES]; + [_progressTintColor set]; + [processPath stroke]; + } else { + // Draw background + [_progressTintColor setStroke]; + [_backgroundTintColor setFill]; + CGContextSetLineWidth(context, 2.0f); + CGContextFillEllipseInRect(context, circleRect); + CGContextStrokeEllipseInRect(context, circleRect); + // Draw progress + CGPoint center = CGPointMake(allRect.size.width / 2, allRect.size.height / 2); + CGFloat radius = (allRect.size.width - 4) / 2; + CGFloat startAngle = - ((float)M_PI / 2); // 90 degrees + CGFloat endAngle = (self.progress * 2 * (float)M_PI) + startAngle; + CGContextSetRGBFillColor(context, 1.0f, 1.0f, 1.0f, 1.0f); // white + CGContextMoveToPoint(context, center.x, center.y); + CGContextAddArc(context, center.x, center.y, radius, startAngle, endAngle, 0); + CGContextClosePath(context); + CGContextFillPath(context); + } +} + +#pragma mark - KVO + +- (void)registerForKVO { + for (NSString *keyPath in [self observableKeypaths]) { + [self addObserver:self forKeyPath:keyPath options:NSKeyValueObservingOptionNew context:NULL]; + } +} + +- (void)unregisterFromKVO { + for (NSString *keyPath in [self observableKeypaths]) { + [self removeObserver:self forKeyPath:keyPath]; + } +} + +- (NSArray *)observableKeypaths { + return [NSArray arrayWithObjects:@"progressTintColor", @"backgroundTintColor", @"progress", @"annular", nil]; +} + +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { + [self setNeedsDisplay]; +} + +@end + + +@implementation MBBarProgressView + +#pragma mark - Lifecycle + +- (id)init { + return [self initWithFrame:CGRectMake(.0f, .0f, 120.0f, 20.0f)]; +} + +- (id)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + _progress = 0.f; + _lineColor = [UIColor whiteColor]; + _progressColor = [UIColor whiteColor]; + _progressRemainingColor = [UIColor clearColor]; + self.backgroundColor = [UIColor clearColor]; + self.opaque = NO; + [self registerForKVO]; + } + return self; +} + +- (void)dealloc { + [self unregisterFromKVO]; +#if !__has_feature(objc_arc) + [_lineColor release]; + [_progressColor release]; + [_progressRemainingColor release]; + [super dealloc]; +#endif +} + +#pragma mark - Drawing + +- (void)drawRect:(CGRect)rect { + CGContextRef context = UIGraphicsGetCurrentContext(); + + // setup properties + CGContextSetLineWidth(context, 2); + CGContextSetStrokeColorWithColor(context,[_lineColor CGColor]); + CGContextSetFillColorWithColor(context, [_progressRemainingColor CGColor]); + + // draw line border + float radius = (rect.size.height / 2) - 2; + CGContextMoveToPoint(context, 2, rect.size.height/2); + CGContextAddArcToPoint(context, 2, 2, radius + 2, 2, radius); + CGContextAddLineToPoint(context, rect.size.width - radius - 2, 2); + CGContextAddArcToPoint(context, rect.size.width - 2, 2, rect.size.width - 2, rect.size.height / 2, radius); + CGContextAddArcToPoint(context, rect.size.width - 2, rect.size.height - 2, rect.size.width - radius - 2, rect.size.height - 2, radius); + CGContextAddLineToPoint(context, radius + 2, rect.size.height - 2); + CGContextAddArcToPoint(context, 2, rect.size.height - 2, 2, rect.size.height/2, radius); + CGContextFillPath(context); + + // draw progress background + CGContextMoveToPoint(context, 2, rect.size.height/2); + CGContextAddArcToPoint(context, 2, 2, radius + 2, 2, radius); + CGContextAddLineToPoint(context, rect.size.width - radius - 2, 2); + CGContextAddArcToPoint(context, rect.size.width - 2, 2, rect.size.width - 2, rect.size.height / 2, radius); + CGContextAddArcToPoint(context, rect.size.width - 2, rect.size.height - 2, rect.size.width - radius - 2, rect.size.height - 2, radius); + CGContextAddLineToPoint(context, radius + 2, rect.size.height - 2); + CGContextAddArcToPoint(context, 2, rect.size.height - 2, 2, rect.size.height/2, radius); + CGContextStrokePath(context); + + // setup to draw progress color + CGContextSetFillColorWithColor(context, [_progressColor CGColor]); + radius = radius - 2; + float amount = self.progress * rect.size.width; + + // if progress is in the middle area + if (amount >= radius + 4 && amount <= (rect.size.width - radius - 4)) { + // top + CGContextMoveToPoint(context, 4, rect.size.height/2); + CGContextAddArcToPoint(context, 4, 4, radius + 4, 4, radius); + CGContextAddLineToPoint(context, amount, 4); + CGContextAddLineToPoint(context, amount, radius + 4); + + // bottom + CGContextMoveToPoint(context, 4, rect.size.height/2); + CGContextAddArcToPoint(context, 4, rect.size.height - 4, radius + 4, rect.size.height - 4, radius); + CGContextAddLineToPoint(context, amount, rect.size.height - 4); + CGContextAddLineToPoint(context, amount, radius + 4); + + CGContextFillPath(context); + } + + // progress is in the right arc + else if (amount > radius + 4) { + float x = amount - (rect.size.width - radius - 4); + + // top + CGContextMoveToPoint(context, 4, rect.size.height/2); + CGContextAddArcToPoint(context, 4, 4, radius + 4, 4, radius); + CGContextAddLineToPoint(context, rect.size.width - radius - 4, 4); + float angle = -acos(x/radius); + if (isnan(angle)) angle = 0; + CGContextAddArc(context, rect.size.width - radius - 4, rect.size.height/2, radius, M_PI, angle, 0); + CGContextAddLineToPoint(context, amount, rect.size.height/2); + + // bottom + CGContextMoveToPoint(context, 4, rect.size.height/2); + CGContextAddArcToPoint(context, 4, rect.size.height - 4, radius + 4, rect.size.height - 4, radius); + CGContextAddLineToPoint(context, rect.size.width - radius - 4, rect.size.height - 4); + angle = acos(x/radius); + if (isnan(angle)) angle = 0; + CGContextAddArc(context, rect.size.width - radius - 4, rect.size.height/2, radius, -M_PI, angle, 1); + CGContextAddLineToPoint(context, amount, rect.size.height/2); + + CGContextFillPath(context); + } + + // progress is in the left arc + else if (amount < radius + 4 && amount > 0) { + // top + CGContextMoveToPoint(context, 4, rect.size.height/2); + CGContextAddArcToPoint(context, 4, 4, radius + 4, 4, radius); + CGContextAddLineToPoint(context, radius + 4, rect.size.height/2); + + // bottom + CGContextMoveToPoint(context, 4, rect.size.height/2); + CGContextAddArcToPoint(context, 4, rect.size.height - 4, radius + 4, rect.size.height - 4, radius); + CGContextAddLineToPoint(context, radius + 4, rect.size.height/2); + + CGContextFillPath(context); + } +} + +#pragma mark - KVO + +- (void)registerForKVO { + for (NSString *keyPath in [self observableKeypaths]) { + [self addObserver:self forKeyPath:keyPath options:NSKeyValueObservingOptionNew context:NULL]; + } +} + +- (void)unregisterFromKVO { + for (NSString *keyPath in [self observableKeypaths]) { + [self removeObserver:self forKeyPath:keyPath]; + } +} + +- (NSArray *)observableKeypaths { + return [NSArray arrayWithObjects:@"lineColor", @"progressRemainingColor", @"progressColor", @"progress", nil]; +} + +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { + [self setNeedsDisplay]; +} + +@end diff --git a/JQQY/ThirdParty/MJPhotoBrowser/MJPhoto.h b/JQQY/ThirdParty/MJPhotoBrowser/MJPhoto.h new file mode 100755 index 0000000000000000000000000000000000000000..bdcab73cc9468c5ef8700fe8af69f47b6fa5e4af --- /dev/null +++ b/JQQY/ThirdParty/MJPhotoBrowser/MJPhoto.h @@ -0,0 +1,24 @@ +// +// MJPhoto.h +// +// Created by mj on 13-3-4. +// Copyright (c) 2013年 itcast. All rights reserved. + +#import +#import + + +@interface MJPhoto : NSObject +@property (nonatomic, strong) NSURL *url; +@property (nonatomic, strong) UIImage *image; // 完整的图片 + +@property (nonatomic, strong) UIImageView *srcImageView; // 来源view +@property (nonatomic, strong, readonly) UIImage *placeholder; +@property (nonatomic, strong, readonly) UIImage *capture; + +@property (nonatomic, assign) BOOL firstShow; + +// 是否已经保存到相册 +@property (nonatomic, assign) BOOL save; +@property (nonatomic, assign) int index; // 索引 +@end \ No newline at end of file diff --git a/JQQY/ThirdParty/MJPhotoBrowser/MJPhoto.m b/JQQY/ThirdParty/MJPhotoBrowser/MJPhoto.m new file mode 100755 index 0000000000000000000000000000000000000000..d9542a5fd35a07884c8f1e5d947700f317e03499 --- /dev/null +++ b/JQQY/ThirdParty/MJPhotoBrowser/MJPhoto.m @@ -0,0 +1,31 @@ +// +// MJPhoto.m +// +// Created by mj on 13-3-4. +// Copyright (c) 2013年 itcast. All rights reserved. + +#import +#import "MJPhoto.h" + +@implementation MJPhoto + +#pragma mark 截图 +- (UIImage *)capture:(UIView *)view +{ + UIGraphicsBeginImageContextWithOptions(view.bounds.size, YES, 0.0); + [view.layer renderInContext:UIGraphicsGetCurrentContext()]; + UIImage *img = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); + return img; +} + +- (void)setSrcImageView:(UIImageView *)srcImageView +{ + _srcImageView = srcImageView; + _placeholder = srcImageView.image; + if (srcImageView.clipsToBounds) { + _capture = [self capture:srcImageView]; + } +} + +@end \ No newline at end of file diff --git a/JQQY/ThirdParty/MJPhotoBrowser/MJPhotoBrowser.bundle/save_icon.png b/JQQY/ThirdParty/MJPhotoBrowser/MJPhotoBrowser.bundle/save_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e1eb76c09b4ffcd5f814cd965e5875c4bb056947 Binary files /dev/null and b/JQQY/ThirdParty/MJPhotoBrowser/MJPhotoBrowser.bundle/save_icon.png differ diff --git a/JQQY/ThirdParty/MJPhotoBrowser/MJPhotoBrowser.bundle/save_icon@2x.png b/JQQY/ThirdParty/MJPhotoBrowser/MJPhotoBrowser.bundle/save_icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b49a330323c0115e5b980e4646d2c9bce7e02af7 Binary files /dev/null and b/JQQY/ThirdParty/MJPhotoBrowser/MJPhotoBrowser.bundle/save_icon@2x.png differ diff --git a/JQQY/ThirdParty/MJPhotoBrowser/MJPhotoBrowser.bundle/save_icon_highlighted.png b/JQQY/ThirdParty/MJPhotoBrowser/MJPhotoBrowser.bundle/save_icon_highlighted.png new file mode 100644 index 0000000000000000000000000000000000000000..6b31c0977fb4fb60e018ec9e72bce23c37afdaa6 Binary files /dev/null and b/JQQY/ThirdParty/MJPhotoBrowser/MJPhotoBrowser.bundle/save_icon_highlighted.png differ diff --git a/JQQY/ThirdParty/MJPhotoBrowser/MJPhotoBrowser.bundle/save_icon_highlighted@2x.png b/JQQY/ThirdParty/MJPhotoBrowser/MJPhotoBrowser.bundle/save_icon_highlighted@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d2503fb823144564c5d0b89d9f10f027d51f60db Binary files /dev/null and b/JQQY/ThirdParty/MJPhotoBrowser/MJPhotoBrowser.bundle/save_icon_highlighted@2x.png differ diff --git a/JQQY/ThirdParty/MJPhotoBrowser/MJPhotoBrowser.h b/JQQY/ThirdParty/MJPhotoBrowser/MJPhotoBrowser.h new file mode 100755 index 0000000000000000000000000000000000000000..7380989b4b523c3cac537a8d4e4f36bfe7bdf265 --- /dev/null +++ b/JQQY/ThirdParty/MJPhotoBrowser/MJPhotoBrowser.h @@ -0,0 +1,26 @@ +// +// MJPhotoBrowser.h +// +// Created by mj on 13-3-4. +// Copyright (c) 2013年 itcast. All rights reserved. + +#import + +@protocol MJPhotoBrowserDelegate; +@interface MJPhotoBrowser : UIViewController +// 代理 +@property (nonatomic, weak) id delegate; +// 所有的图片对象 +@property (nonatomic, strong) NSArray *photos; +// 当前展示的图片索引 +@property (nonatomic, assign) NSUInteger currentPhotoIndex; + +// 显示 +- (void)show; +@end + +@protocol MJPhotoBrowserDelegate +@optional +// 切换到某一页图片 +- (void)photoBrowser:(MJPhotoBrowser *)photoBrowser didChangedToPageAtIndex:(NSUInteger)index; +@end \ No newline at end of file diff --git a/JQQY/ThirdParty/MJPhotoBrowser/MJPhotoBrowser.m b/JQQY/ThirdParty/MJPhotoBrowser/MJPhotoBrowser.m new file mode 100755 index 0000000000000000000000000000000000000000..454e81ba60cfcd97e5aac81b0393548084d34d2c --- /dev/null +++ b/JQQY/ThirdParty/MJPhotoBrowser/MJPhotoBrowser.m @@ -0,0 +1,267 @@ +// +// MJPhotoBrowser.m +// +// Created by mj on 13-3-4. +// Copyright (c) 2013年 itcast. All rights reserved. + +#import +#import "MJPhotoBrowser.h" +#import "MJPhoto.h" +#import "SDWebImageManager+MJ.h" +#import "MJPhotoView.h" +#import "MJPhotoToolbar.h" + +#define kPadding 10 +#define kPhotoViewTagOffset 1000 +#define kPhotoViewIndex(photoView) ([photoView tag] - kPhotoViewTagOffset) + +@interface MJPhotoBrowser () +{ + // 滚动的view + UIScrollView *_photoScrollView; + // 所有的图片view + NSMutableSet *_visiblePhotoViews; + NSMutableSet *_reusablePhotoViews; + // 工具条 + MJPhotoToolbar *_toolbar; + + // 一开始的状态栏 + BOOL _statusBarHiddenInited; +} +@end + +@implementation MJPhotoBrowser + +#pragma mark - Lifecycle +- (void)loadView +{ + _statusBarHiddenInited = [UIApplication sharedApplication].isStatusBarHidden; + // 隐藏状态栏 + [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade]; + self.view = [[UIView alloc] init]; + self.view.frame = [UIScreen mainScreen].bounds; + self.view.backgroundColor = [UIColor blackColor]; + +} + +- (void)viewDidLoad +{ + [super viewDidLoad]; + + // 1.创建UIScrollView + [self createScrollView]; + + // 2.创建工具条 + [self createToolbar]; +} + +- (void)show +{ + UIWindow *window = [UIApplication sharedApplication].keyWindow; + [window addSubview:self.view]; + [window.rootViewController addChildViewController:self]; + if (_currentPhotoIndex == 0) { + [self showPhotos]; + } +} + +#pragma mark - 私有方法 +#pragma mark 创建工具条 +- (void)createToolbar +{ + CGFloat barHeight = 44; + CGFloat barY = self.view.frame.size.height - barHeight; + _toolbar = [[MJPhotoToolbar alloc] init]; + _toolbar.frame = CGRectMake(0, barY, self.view.frame.size.width, barHeight); + _toolbar.autoresizingMask = UIViewAutoresizingFlexibleTopMargin; + _toolbar.photos = _photos; + [self.view addSubview:_toolbar]; + + [self updateTollbarState]; +} + +#pragma mark 创建UIScrollView +- (void)createScrollView +{ + CGRect frame = self.view.bounds; + frame.origin.x -= kPadding; + frame.size.width += (2 * kPadding); + _photoScrollView = [[UIScrollView alloc] initWithFrame:frame]; + _photoScrollView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; + _photoScrollView.pagingEnabled = YES; + _photoScrollView.delegate = self; + _photoScrollView.showsHorizontalScrollIndicator = NO; + _photoScrollView.showsVerticalScrollIndicator = NO; + _photoScrollView.backgroundColor = [UIColor clearColor]; + _photoScrollView.contentSize = CGSizeMake(frame.size.width * _photos.count, 0); + [self.view addSubview:_photoScrollView]; + _photoScrollView.contentOffset = CGPointMake(_currentPhotoIndex * frame.size.width, 0); +} + +- (void)setPhotos:(NSArray *)photos +{ + _photos = photos; + + if (photos.count > 1) { + _visiblePhotoViews = [NSMutableSet set]; + _reusablePhotoViews = [NSMutableSet set]; + } + + for (int i = 0; i<_photos.count; i++) { + MJPhoto *photo = _photos[i]; + photo.index = i; + photo.firstShow = i == _currentPhotoIndex; + } +} + +#pragma mark 设置选中的图片 +- (void)setCurrentPhotoIndex:(NSUInteger)currentPhotoIndex +{ + _currentPhotoIndex = currentPhotoIndex; + + for (int i = 0; i<_photos.count; i++) { + MJPhoto *photo = _photos[i]; + photo.firstShow = i == currentPhotoIndex; + } + + if ([self isViewLoaded]) { + _photoScrollView.contentOffset = CGPointMake(_currentPhotoIndex * _photoScrollView.frame.size.width, 0); + + // 显示所有的相片 + [self showPhotos]; + } +} + +#pragma mark - MJPhotoView代理 +- (void)photoViewSingleTap:(MJPhotoView *)photoView +{ + [UIApplication sharedApplication].statusBarHidden = _statusBarHiddenInited; + self.view.backgroundColor = [UIColor clearColor]; + + // 移除工具条 + [_toolbar removeFromSuperview]; +} + +- (void)photoViewDidEndZoom:(MJPhotoView *)photoView +{ + [self.view removeFromSuperview]; + [self removeFromParentViewController]; +} + +- (void)photoViewImageFinishLoad:(MJPhotoView *)photoView +{ + _toolbar.currentPhotoIndex = _currentPhotoIndex; +} + +#pragma mark 显示照片 +- (void)showPhotos +{ + // 只有一张图片 + if (_photos.count == 1) { + [self showPhotoViewAtIndex:0]; + return; + } + + CGRect visibleBounds = _photoScrollView.bounds; + int firstIndex = (int)floorf((CGRectGetMinX(visibleBounds)+kPadding*2) / CGRectGetWidth(visibleBounds)); + int lastIndex = (int)floorf((CGRectGetMaxX(visibleBounds)-kPadding*2-1) / CGRectGetWidth(visibleBounds)); + if (firstIndex < 0) firstIndex = 0; + if (firstIndex >= _photos.count) firstIndex = _photos.count - 1; + if (lastIndex < 0) lastIndex = 0; + if (lastIndex >= _photos.count) lastIndex = _photos.count - 1; + + // 回收不再显示的ImageView + NSInteger photoViewIndex; + for (MJPhotoView *photoView in _visiblePhotoViews) { + photoViewIndex = kPhotoViewIndex(photoView); + if (photoViewIndex < firstIndex || photoViewIndex > lastIndex) { + [_reusablePhotoViews addObject:photoView]; + [photoView removeFromSuperview]; + } + } + + [_visiblePhotoViews minusSet:_reusablePhotoViews]; + while (_reusablePhotoViews.count > 2) { + [_reusablePhotoViews removeObject:[_reusablePhotoViews anyObject]]; + } + + for (NSUInteger index = firstIndex; index <= lastIndex; index++) { + if (![self isShowingPhotoViewAtIndex:index]) { + [self showPhotoViewAtIndex:index]; + } + } +} + +#pragma mark 显示一个图片view +- (void)showPhotoViewAtIndex:(int)index +{ + MJPhotoView *photoView = [self dequeueReusablePhotoView]; + if (!photoView) { // 添加新的图片view + photoView = [[MJPhotoView alloc] init]; + photoView.photoViewDelegate = self; + } + + // 调整当期页的frame + CGRect bounds = _photoScrollView.bounds; + CGRect photoViewFrame = bounds; + photoViewFrame.size.width -= (2 * kPadding); + photoViewFrame.origin.x = (bounds.size.width * index) + kPadding; + photoView.tag = kPhotoViewTagOffset + index; + + MJPhoto *photo = _photos[index]; + photoView.frame = photoViewFrame; + photoView.photo = photo; + + [_visiblePhotoViews addObject:photoView]; + [_photoScrollView addSubview:photoView]; + + [self loadImageNearIndex:index]; +} + +#pragma mark 加载index附近的图片 +- (void)loadImageNearIndex:(int)index +{ + if (index > 0) { + MJPhoto *photo = _photos[index - 1]; + [SDWebImageManager downloadWithURL:photo.url]; + } + + if (index < _photos.count - 1) { + MJPhoto *photo = _photos[index + 1]; + [SDWebImageManager downloadWithURL:photo.url]; + } +} + +#pragma mark index这页是否正在显示 +- (BOOL)isShowingPhotoViewAtIndex:(NSUInteger)index { + for (MJPhotoView *photoView in _visiblePhotoViews) { + if (kPhotoViewIndex(photoView) == index) { + return YES; + } + } + return NO; +} + +#pragma mark 循环利用某个view +- (MJPhotoView *)dequeueReusablePhotoView +{ + MJPhotoView *photoView = [_reusablePhotoViews anyObject]; + if (photoView) { + [_reusablePhotoViews removeObject:photoView]; + } + return photoView; +} + +#pragma mark 更新toolbar状态 +- (void)updateTollbarState +{ + _currentPhotoIndex = _photoScrollView.contentOffset.x / _photoScrollView.frame.size.width; + _toolbar.currentPhotoIndex = _currentPhotoIndex; +} + +#pragma mark - UIScrollView Delegate +- (void)scrollViewDidScroll:(UIScrollView *)scrollView { + [self showPhotos]; + [self updateTollbarState]; +} +@end \ No newline at end of file diff --git a/JQQY/ThirdParty/MJPhotoBrowser/MJPhotoLoadingView.h b/JQQY/ThirdParty/MJPhotoBrowser/MJPhotoLoadingView.h new file mode 100755 index 0000000000000000000000000000000000000000..561ec27f51d0e8f5841e84a25d2d2b7cc1a72470 --- /dev/null +++ b/JQQY/ThirdParty/MJPhotoBrowser/MJPhotoLoadingView.h @@ -0,0 +1,20 @@ +// +// MJPhotoLoadingView.h +// +// Created by mj on 13-3-4. +// Copyright (c) 2013年 itcast. All rights reserved. +// + +#import + +#define kMinProgress 0.0001 + +@class MJPhotoBrowser; +@class MJPhoto; + +@interface MJPhotoLoadingView : UIView +@property (nonatomic) float progress; + +- (void)showLoading; +- (void)showFailure; +@end \ No newline at end of file diff --git a/JQQY/ThirdParty/MJPhotoBrowser/MJPhotoLoadingView.m b/JQQY/ThirdParty/MJPhotoBrowser/MJPhotoLoadingView.m new file mode 100755 index 0000000000000000000000000000000000000000..18a6e7ff406b2a517a61bf8a24752d73e6265c53 --- /dev/null +++ b/JQQY/ThirdParty/MJPhotoBrowser/MJPhotoLoadingView.m @@ -0,0 +1,68 @@ +// +// MJPhotoLoadingView.m +// +// Created by mj on 13-3-4. +// Copyright (c) 2013年 itcast. All rights reserved. +// + +#import "MJPhotoLoadingView.h" +#import "MJPhotoBrowser.h" +#import +#import "MJPhotoProgressView.h" + +@interface MJPhotoLoadingView () +{ + UILabel *_failureLabel; + MJPhotoProgressView *_progressView; +} + +@end + +@implementation MJPhotoLoadingView + +- (void)setFrame:(CGRect)frame +{ + [super setFrame:[UIScreen mainScreen].bounds]; +} + +- (void)showFailure +{ + [_progressView removeFromSuperview]; + + if (_failureLabel == nil) { + _failureLabel = [[UILabel alloc] init]; + _failureLabel.bounds = CGRectMake(0, 0, self.bounds.size.width, 44); + _failureLabel.textAlignment = NSTextAlignmentCenter; + _failureLabel.center = self.center; + _failureLabel.text = @"网络不给力,图片下载失败"; + _failureLabel.font = [UIFont boldSystemFontOfSize:20]; + _failureLabel.textColor = [UIColor whiteColor]; + _failureLabel.backgroundColor = [UIColor clearColor]; + _failureLabel.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin; + } + [self addSubview:_failureLabel]; +} + +- (void)showLoading +{ + [_failureLabel removeFromSuperview]; + + if (_progressView == nil) { + _progressView = [[MJPhotoProgressView alloc] init]; + _progressView.bounds = CGRectMake( 0, 0, 60, 60); + _progressView.center = self.center; + } + _progressView.progress = kMinProgress; + [self addSubview:_progressView]; +} + +#pragma mark - customlize method +- (void)setProgress:(float)progress +{ + _progress = progress; + _progressView.progress = progress; + if (progress >= 1.0) { + [_progressView removeFromSuperview]; + } +} +@end diff --git a/JQQY/ThirdParty/MJPhotoBrowser/MJPhotoProgressView.h b/JQQY/ThirdParty/MJPhotoBrowser/MJPhotoProgressView.h new file mode 100755 index 0000000000000000000000000000000000000000..e5da6ded7d6d870913a8daa8f01c8283f6dc98e2 --- /dev/null +++ b/JQQY/ThirdParty/MJPhotoBrowser/MJPhotoProgressView.h @@ -0,0 +1,16 @@ +// +// MJPhotoProgressView.h +// +// Created by mj on 13-3-4. +// Copyright (c) 2013年 itcast. All rights reserved. +// + +#import + +@interface MJPhotoProgressView : UIView + +@property(nonatomic, strong) UIColor *trackTintColor; +@property(nonatomic, strong) UIColor *progressTintColor; +@property (nonatomic) float progress; + +@end diff --git a/JQQY/ThirdParty/MJPhotoBrowser/MJPhotoProgressView.m b/JQQY/ThirdParty/MJPhotoBrowser/MJPhotoProgressView.m new file mode 100755 index 0000000000000000000000000000000000000000..b99a1a9b984e3d1788172e7070163f0c6880ba07 --- /dev/null +++ b/JQQY/ThirdParty/MJPhotoBrowser/MJPhotoProgressView.m @@ -0,0 +1,93 @@ +// +// MJPhotoProgressView.m +// +// Created by mj on 13-3-4. +// Copyright (c) 2013年 itcast. All rights reserved. +// + +#import "MJPhotoProgressView.h" + +#define kDegreeToRadian(x) (M_PI/180.0 * (x)) + +@implementation MJPhotoProgressView + +- (id)initWithFrame:(CGRect)frame +{ + if (self = [super initWithFrame:frame]) { + self.backgroundColor = [UIColor clearColor]; + } + return self; +} + +- (void)drawRect:(CGRect)rect +{ + CGPoint centerPoint = CGPointMake(rect.size.height / 2, rect.size.width / 2); + CGFloat radius = MIN(rect.size.height, rect.size.width) / 2; + + CGFloat pathWidth = radius * 0.3f; + + CGFloat radians = kDegreeToRadian((_progress*359.9)-90); + CGFloat xOffset = radius*(1 + 0.85*cosf(radians)); + CGFloat yOffset = radius*(1 + 0.85*sinf(radians)); + CGPoint endPoint = CGPointMake(xOffset, yOffset); + + CGContextRef context = UIGraphicsGetCurrentContext(); + + [self.trackTintColor setFill]; + CGMutablePathRef trackPath = CGPathCreateMutable(); + CGPathMoveToPoint(trackPath, NULL, centerPoint.x, centerPoint.y); + CGPathAddArc(trackPath, NULL, centerPoint.x, centerPoint.y, radius, kDegreeToRadian(270), kDegreeToRadian(-90), NO); + CGPathCloseSubpath(trackPath); + CGContextAddPath(context, trackPath); + CGContextFillPath(context); + CGPathRelease(trackPath); + + [self.progressTintColor setFill]; + CGMutablePathRef progressPath = CGPathCreateMutable(); + CGPathMoveToPoint(progressPath, NULL, centerPoint.x, centerPoint.y); + CGPathAddArc(progressPath, NULL, centerPoint.x, centerPoint.y, radius, kDegreeToRadian(270), radians, NO); + CGPathCloseSubpath(progressPath); + CGContextAddPath(context, progressPath); + CGContextFillPath(context); + CGPathRelease(progressPath); + + CGContextAddEllipseInRect(context, CGRectMake(centerPoint.x - pathWidth/2, 0, pathWidth, pathWidth)); + CGContextFillPath(context); + + CGContextAddEllipseInRect(context, CGRectMake(endPoint.x - pathWidth/2, endPoint.y - pathWidth/2, pathWidth, pathWidth)); + CGContextFillPath(context); + + CGContextSetBlendMode(context, kCGBlendModeClear);; + CGFloat innerRadius = radius * 0.7; + CGPoint newCenterPoint = CGPointMake(centerPoint.x - innerRadius, centerPoint.y - innerRadius); + CGContextAddEllipseInRect(context, CGRectMake(newCenterPoint.x, newCenterPoint.y, innerRadius*2, innerRadius*2)); + CGContextFillPath(context); +} + +#pragma mark - Property Methods + +- (UIColor *)trackTintColor +{ + if (!_trackTintColor) + { + _trackTintColor = [UIColor colorWithRed:0.0f green:0.0f blue:0.0f alpha:0.7f]; + } + return _trackTintColor; +} + +- (UIColor *)progressTintColor +{ + if (!_progressTintColor) + { + _progressTintColor = [UIColor whiteColor]; + } + return _progressTintColor; +} + +- (void)setProgress:(float)progress +{ + _progress = progress; + [self setNeedsDisplay]; +} + +@end diff --git a/JQQY/ThirdParty/MJPhotoBrowser/MJPhotoToolbar.h b/JQQY/ThirdParty/MJPhotoBrowser/MJPhotoToolbar.h new file mode 100644 index 0000000000000000000000000000000000000000..874a4af0e82d84a65bc5d68729b8c213cc0e3838 --- /dev/null +++ b/JQQY/ThirdParty/MJPhotoBrowser/MJPhotoToolbar.h @@ -0,0 +1,16 @@ +// +// MJPhotoToolbar.h +// FingerNews +// +// Created by mj on 13-9-24. +// Copyright (c) 2013年 itcast. All rights reserved. +// + +#import + +@interface MJPhotoToolbar : UIView +// 所有的图片对象 +@property (nonatomic, strong) NSArray *photos; +// 当前展示的图片索引 +@property (nonatomic, assign) NSUInteger currentPhotoIndex; +@end diff --git a/JQQY/ThirdParty/MJPhotoBrowser/MJPhotoToolbar.m b/JQQY/ThirdParty/MJPhotoBrowser/MJPhotoToolbar.m new file mode 100644 index 0000000000000000000000000000000000000000..9e12f266b77228262f68570b1ebbfb824fad6e1a --- /dev/null +++ b/JQQY/ThirdParty/MJPhotoBrowser/MJPhotoToolbar.m @@ -0,0 +1,90 @@ +// +// MJPhotoToolbar.m +// FingerNews +// +// Created by mj on 13-9-24. +// Copyright (c) 2013年 itcast. All rights reserved. +// + +#import "MJPhotoToolbar.h" +#import "MJPhoto.h" + + +@interface MJPhotoToolbar() +{ + // 显示页码 + UILabel *_indexLabel; + UIButton *_saveImageBtn; +} +@end + +@implementation MJPhotoToolbar + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + // Initialization code + } + return self; +} + +- (void)setPhotos:(NSArray *)photos +{ + _photos = photos; + + if (_photos.count > 1) { + _indexLabel = [[UILabel alloc] init]; + _indexLabel.font = [UIFont boldSystemFontOfSize:20]; + _indexLabel.frame = self.bounds; + _indexLabel.backgroundColor = [UIColor clearColor]; + _indexLabel.textColor = [UIColor whiteColor]; + _indexLabel.textAlignment = NSTextAlignmentCenter; + _indexLabel.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; + [self addSubview:_indexLabel]; + } + + // 保存图片按钮 + CGFloat btnWidth = self.bounds.size.height; + _saveImageBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _saveImageBtn.frame = CGRectMake(20, 0, btnWidth, btnWidth); + _saveImageBtn.autoresizingMask = UIViewAutoresizingFlexibleHeight; + [_saveImageBtn setImage:[UIImage imageNamed:@"MJPhotoBrowser.bundle/save_icon.png"] forState:UIControlStateNormal]; + [_saveImageBtn setImage:[UIImage imageNamed:@"MJPhotoBrowser.bundle/save_icon_highlighted.png"] forState:UIControlStateHighlighted]; + [_saveImageBtn addTarget:self action:@selector(saveImage) forControlEvents:UIControlEventTouchUpInside]; + //[self addSubview:_saveImageBtn]; +} + +- (void)saveImage +{ + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + MJPhoto *photo = _photos[_currentPhotoIndex]; + UIImageWriteToSavedPhotosAlbum(photo.image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil); + }); +} + +- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo +{ + if (error) { + [MBProgressHUD showSuccess:@"保存失败" toView:nil]; + } else { + MJPhoto *photo = _photos[_currentPhotoIndex]; + photo.save = YES; + _saveImageBtn.enabled = NO; + [MBProgressHUD showSuccess:@"成功保存到相册" toView:nil]; + } +} + +- (void)setCurrentPhotoIndex:(NSUInteger)currentPhotoIndex +{ + _currentPhotoIndex = currentPhotoIndex; + + // 更新页码 + _indexLabel.text = [NSString stringWithFormat:@"%d / %d", _currentPhotoIndex + 1, _photos.count]; + + MJPhoto *photo = _photos[_currentPhotoIndex]; + // 按钮 + _saveImageBtn.enabled = photo.image != nil && !photo.save; +} + +@end diff --git a/JQQY/ThirdParty/MJPhotoBrowser/MJPhotoView.h b/JQQY/ThirdParty/MJPhotoBrowser/MJPhotoView.h new file mode 100755 index 0000000000000000000000000000000000000000..ab350509876ae1a0046961f7e440e54515ff6e4f --- /dev/null +++ b/JQQY/ThirdParty/MJPhotoBrowser/MJPhotoView.h @@ -0,0 +1,23 @@ +// +// MJZoomingScrollView.h +// +// Created by mj on 13-3-4. +// Copyright (c) 2013年 itcast. All rights reserved. +// + +#import + +@class MJPhotoBrowser, MJPhoto, MJPhotoView; + +@protocol MJPhotoViewDelegate +- (void)photoViewImageFinishLoad:(MJPhotoView *)photoView; +- (void)photoViewSingleTap:(MJPhotoView *)photoView; +- (void)photoViewDidEndZoom:(MJPhotoView *)photoView; +@end + +@interface MJPhotoView : UIScrollView +// 图片 +@property (nonatomic, strong) MJPhoto *photo; +// 代理 +@property (nonatomic, weak) id photoViewDelegate; +@end \ No newline at end of file diff --git a/JQQY/ThirdParty/MJPhotoBrowser/MJPhotoView.m b/JQQY/ThirdParty/MJPhotoBrowser/MJPhotoView.m new file mode 100755 index 0000000000000000000000000000000000000000..69a53d914369c90130af85d02a5f2a19e56ad43e --- /dev/null +++ b/JQQY/ThirdParty/MJPhotoBrowser/MJPhotoView.m @@ -0,0 +1,257 @@ +// +// MJZoomingScrollView.m +// +// Created by mj on 13-3-4. +// Copyright (c) 2013年 itcast. All rights reserved. +// + +#import "MJPhotoView.h" +#import "MJPhoto.h" +#import "MJPhotoLoadingView.h" +#import "UIImageView+WebCache.h" +#import + +@interface MJPhotoView () +{ + BOOL _doubleTap; + UIImageView *_imageView; + MJPhotoLoadingView *_photoLoadingView; +} +@end + +@implementation MJPhotoView + +- (id)initWithFrame:(CGRect)frame +{ + if ((self = [super initWithFrame:frame])) { + self.clipsToBounds = YES; + // 图片 + _imageView = [[UIImageView alloc] init]; + + _imageView.contentMode = UIViewContentModeScaleAspectFit; + [self addSubview:_imageView]; + + // 进度条 + _photoLoadingView = [[MJPhotoLoadingView alloc] init]; + + // 属性 + self.backgroundColor = [UIColor clearColor]; + self.delegate = self; + self.showsHorizontalScrollIndicator = NO; + self.showsVerticalScrollIndicator = NO; + self.decelerationRate = UIScrollViewDecelerationRateFast; + self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; + + // 监听点击 + UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)]; + singleTap.delaysTouchesBegan = YES; + singleTap.numberOfTapsRequired = 1; + [self addGestureRecognizer:singleTap]; + + UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDoubleTap:)]; + doubleTap.numberOfTapsRequired = 2; + [self addGestureRecognizer:doubleTap]; + } + return self; +} + +#pragma mark - photoSetter +- (void)setPhoto:(MJPhoto *)photo { + _photo = photo; + + [self showImage]; +} + +#pragma mark 显示图片 +- (void)showImage +{ + if (_photo.firstShow) { // 首次显示 + _imageView.image = _photo.placeholder; // 占位图片 + _photo.srcImageView.image = nil; + + // 不是gif,就马上开始下载 + if (![_photo.url.absoluteString hasSuffix:@"gif"]) { + __unsafe_unretained MJPhotoView *photoView = self; + __unsafe_unretained MJPhoto *photo = _photo; + [_imageView setImageWithURL:_photo.url placeholderImage:_photo.placeholder options:SDWebImageRetryFailed|SDWebImageLowPriority completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType) { + photo.image = image; + + // 调整frame参数 + [photoView adjustFrame]; + }]; + } + } else { + [self photoStartLoad]; + } + + // 调整frame参数 + [self adjustFrame]; +} + +#pragma mark 开始加载图片 +- (void)photoStartLoad +{ + if (_photo.image) { + self.scrollEnabled = YES; + _imageView.image = _photo.image; + } else { + self.scrollEnabled = NO; + // 直接显示进度条 + [_photoLoadingView showLoading]; + [self addSubview:_photoLoadingView]; + + __unsafe_unretained MJPhotoView *photoView = self; + __unsafe_unretained MJPhotoLoadingView *loading = _photoLoadingView; + [_imageView sd_setImageWithURL:_photo.url placeholderImage:_photo.srcImageView.image options:SDWebImageRetryFailed|SDWebImageLowPriority progress:^(NSInteger receivedSize, NSInteger expectedSize) { + if (receivedSize > kMinProgress) { + _photoLoadingView.progress = (float)receivedSize/expectedSize; + } + } completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { + [photoView photoDidFinishLoadWithImage:image]; + }]; } +} + +#pragma mark 加载完毕 +- (void)photoDidFinishLoadWithImage:(UIImage *)image +{ + if (image) { + self.scrollEnabled = YES; + _photo.image = image; + [_photoLoadingView removeFromSuperview]; + + if ([self.photoViewDelegate respondsToSelector:@selector(photoViewImageFinishLoad:)]) { + [self.photoViewDelegate photoViewImageFinishLoad:self]; + } + } else { + [self addSubview:_photoLoadingView]; + [_photoLoadingView showFailure]; + } + + // 设置缩放比例 + [self adjustFrame]; +} +#pragma mark 调整frame +- (void)adjustFrame +{ + if (_imageView.image == nil) return; + + // 基本尺寸参数 + CGSize boundsSize = self.bounds.size; + CGFloat boundsWidth = boundsSize.width; + CGFloat boundsHeight = boundsSize.height; + + CGSize imageSize = _imageView.image.size; + CGFloat imageWidth = imageSize.width; + CGFloat imageHeight = imageSize.height; + + // 设置伸缩比例 + CGFloat minScale = boundsWidth / imageWidth; + if (minScale > 1) { + minScale = 1.0; + } + CGFloat maxScale = 2.0; + if ([UIScreen instancesRespondToSelector:@selector(scale)]) { + maxScale = maxScale / [[UIScreen mainScreen] scale]; + } + self.maximumZoomScale = maxScale; + self.minimumZoomScale = minScale; + self.zoomScale = minScale; + + CGRect imageFrame = CGRectMake(0, 0, boundsWidth, imageHeight * boundsWidth / imageWidth); + // 内容尺寸 + self.contentSize = CGSizeMake(0, imageFrame.size.height); + + // y值 + if (imageFrame.size.height < boundsHeight) { + imageFrame.origin.y = floorf((boundsHeight - imageFrame.size.height) / 2.0); + } else { + imageFrame.origin.y = 0; + } + + if (_photo.firstShow) { // 第一次显示的图片 + _photo.firstShow = NO; // 已经显示过了 + _imageView.frame = [_photo.srcImageView convertRect:_photo.srcImageView.bounds toView:nil]; + + [UIView animateWithDuration:0.3 animations:^{ + _imageView.frame = imageFrame; + } completion:^(BOOL finished) { + // 设置底部的小图片 + _photo.srcImageView.image = _photo.placeholder; + [self photoStartLoad]; + }]; + } else { + _imageView.frame = imageFrame; + } +} + +#pragma mark - UIScrollViewDelegate +- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { + return _imageView; +} + +#pragma mark - 手势处理 +- (void)handleSingleTap:(UITapGestureRecognizer *)tap { + _doubleTap = NO; + [self performSelector:@selector(hide) withObject:nil afterDelay:0.2]; +} +- (void)hide +{ + if (_doubleTap) return; + + // 移除进度条 + [_photoLoadingView removeFromSuperview]; + self.contentOffset = CGPointZero; + + // 清空底部的小图 + _photo.srcImageView.image = nil; + CGFloat duration = 0.15; + if (_photo.srcImageView.clipsToBounds) { + [self performSelector:@selector(reset) withObject:nil afterDelay:duration]; + } + + [UIView animateWithDuration:duration + 0.1 animations:^{ + _imageView.frame = [_photo.srcImageView convertRect:_photo.srcImageView.bounds toView:nil]; + + // gif图片仅显示第0张 + if (_imageView.image.images) { + _imageView.image = _imageView.image.images[0]; + } + + // 通知代理 + if ([self.photoViewDelegate respondsToSelector:@selector(photoViewSingleTap:)]) { + [self.photoViewDelegate photoViewSingleTap:self]; + } + } completion:^(BOOL finished) { + // 设置底部的小图片 + _photo.srcImageView.image = _photo.placeholder; + + // 通知代理 + if ([self.photoViewDelegate respondsToSelector:@selector(photoViewDidEndZoom:)]) { + [self.photoViewDelegate photoViewDidEndZoom:self]; + } + }]; +} + +- (void)reset +{ + _imageView.image = _photo.capture; + _imageView.contentMode = UIViewContentModeScaleToFill; +} + +- (void)handleDoubleTap:(UITapGestureRecognizer *)tap { + _doubleTap = YES; + + CGPoint touchPoint = [tap locationInView:self]; + if (self.zoomScale == self.maximumZoomScale) { + [self setZoomScale:self.minimumZoomScale animated:YES]; + } else { + [self zoomToRect:CGRectMake(touchPoint.x, touchPoint.y, 1, 1) animated:YES]; + } +} + +- (void)dealloc +{ + // 取消请求 + [_imageView setImageWithURL:[NSURL URLWithString:@"file:///abc"]]; +} +@end \ No newline at end of file diff --git a/JQQY/ThirdParty/MJPhotoBrowser/SDWebImageManager+MJ.h b/JQQY/ThirdParty/MJPhotoBrowser/SDWebImageManager+MJ.h new file mode 100755 index 0000000000000000000000000000000000000000..15bba2ada4ef87ced7f0a185dde68e4d625eb51e --- /dev/null +++ b/JQQY/ThirdParty/MJPhotoBrowser/SDWebImageManager+MJ.h @@ -0,0 +1,13 @@ +// +// SDWebImageManager+MJ.h +// FingerNews +// +// Created by mj on 13-9-23. +// Copyright (c) 2013年 itcast. All rights reserved. +// + +#import "SDWebImageManager.h" + +@interface SDWebImageManager (MJ) ++ (void)downloadWithURL:(NSURL *)url; +@end diff --git a/JQQY/ThirdParty/MJPhotoBrowser/SDWebImageManager+MJ.m b/JQQY/ThirdParty/MJPhotoBrowser/SDWebImageManager+MJ.m new file mode 100755 index 0000000000000000000000000000000000000000..0421c29ed439b75aaedf710787fb41093488e2aa --- /dev/null +++ b/JQQY/ThirdParty/MJPhotoBrowser/SDWebImageManager+MJ.m @@ -0,0 +1,22 @@ +// +// SDWebImageManager+MJ.m +// FingerNews +// +// Created by mj on 13-9-23. +// Copyright (c) 2013年 itcast. All rights reserved. +// + +#import "SDWebImageManager+MJ.h" + +@implementation SDWebImageManager (MJ) ++ (void)downloadWithURL:(NSURL *)url +{ + // cmp不能为空 +// [[self sharedManager] downloadWithURL:url options:SDWebImageLowPriority|SDWebImageRetryFailed progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished) { +// +// }]; + [[self sharedManager] downloadImageWithURL:url options:SDWebImageLowPriority|SDWebImageRetryFailed progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { + + }]; +} +@end diff --git a/JQQY/ThirdParty/MJPhotoBrowser/UIImageView+MJWebCache.h b/JQQY/ThirdParty/MJPhotoBrowser/UIImageView+MJWebCache.h new file mode 100755 index 0000000000000000000000000000000000000000..eb9e787679aab635c30a09a16294e6c93b6def83 --- /dev/null +++ b/JQQY/ThirdParty/MJPhotoBrowser/UIImageView+MJWebCache.h @@ -0,0 +1,14 @@ +// +// UIImageView+MJWebCache.h +// FingerNews +// +// Created by mj on 13-10-2. +// Copyright (c) 2013年 itcast. All rights reserved. +// + +#import "UIImageView+WebCache.h" + +@interface UIImageView (MJWebCache) +- (void)setImageURL:(NSURL *)url placeholder:(UIImage *)placeholder; +- (void)setImageURLStr:(NSString *)urlStr placeholder:(UIImage *)placeholder; +@end \ No newline at end of file diff --git a/JQQY/ThirdParty/MJPhotoBrowser/UIImageView+MJWebCache.m b/JQQY/ThirdParty/MJPhotoBrowser/UIImageView+MJWebCache.m new file mode 100755 index 0000000000000000000000000000000000000000..031cd903c5681e2f7c265175c841742fcd9d15c1 --- /dev/null +++ b/JQQY/ThirdParty/MJPhotoBrowser/UIImageView+MJWebCache.m @@ -0,0 +1,22 @@ +// +// UIImageView+MJWebCache.m +// FingerNews +// +// Created by mj on 13-10-2. +// Copyright (c) 2013年 itcast. All rights reserved. +// + +#import "UIImageView+MJWebCache.h" + +@implementation UIImageView (MJWebCache) +- (void)setImageURL:(NSURL *)url placeholder:(UIImage *)placeholder +{ +// [self setImageWithURL:url placeholderImage:placeholder options:SDWebImageRetryFailed | SDWebImageLowPriority]; + [self sd_setImageWithURL:url placeholderImage:placeholder options:SDWebImageRetryFailed | SDWebImageLowPriority]; +} + +- (void)setImageURLStr:(NSString *)urlStr placeholder:(UIImage *)placeholder +{ + [self setImageURL:[NSURL URLWithString:urlStr] placeholder:placeholder]; +} +@end diff --git a/JQQY/ThirdParty/MJRefresh/Base/MJRefreshAutoFooter.h b/JQQY/ThirdParty/MJRefresh/Base/MJRefreshAutoFooter.h new file mode 100755 index 0000000000000000000000000000000000000000..82a02497a648fb373d0ebb9a8411bc2e5aaa49d8 --- /dev/null +++ b/JQQY/ThirdParty/MJRefresh/Base/MJRefreshAutoFooter.h @@ -0,0 +1,20 @@ +// +// MJRefreshAutoFooter.h +// MJRefreshExample +// +// Created by MJ Lee on 15/4/24. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "MJRefreshFooter.h" + +@interface MJRefreshAutoFooter : MJRefreshFooter +/** 是否自动刷新(默认为YES) */ +@property (assign, nonatomic, getter=isAutomaticallyRefresh) BOOL automaticallyRefresh; + +/** 当底部控件出现多少时就自动刷新(默认为1.0,也就是底部控件完全出现时,才会自动刷新) */ +@property (assign, nonatomic) CGFloat appearencePercentTriggerAutoRefresh MJRefreshDeprecated("请使用triggerAutomaticallyRefreshPercent属性"); + +/** 当底部控件出现多少时就自动刷新(默认为1.0,也就是底部控件完全出现时,才会自动刷新) */ +@property (assign, nonatomic) CGFloat triggerAutomaticallyRefreshPercent; +@end diff --git a/JQQY/ThirdParty/MJRefresh/Base/MJRefreshAutoFooter.m b/JQQY/ThirdParty/MJRefresh/Base/MJRefreshAutoFooter.m new file mode 100755 index 0000000000000000000000000000000000000000..7327096b39c21a8993a1aef0d9acec8ca882f4df --- /dev/null +++ b/JQQY/ThirdParty/MJRefresh/Base/MJRefreshAutoFooter.m @@ -0,0 +1,139 @@ +// +// MJRefreshAutoFooter.m +// MJRefreshExample +// +// Created by MJ Lee on 15/4/24. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "MJRefreshAutoFooter.h" + +@interface MJRefreshAutoFooter() +@end + +@implementation MJRefreshAutoFooter + +#pragma mark - 初始化 +- (void)willMoveToSuperview:(UIView *)newSuperview +{ + [super willMoveToSuperview:newSuperview]; + + if (newSuperview) { // 新的父控件 + if (self.hidden == NO) { + self.scrollView.mj_insetB += self.mj_h; + } + + // 设置位置 + self.mj_y = _scrollView.mj_contentH; + } else { // 被移除了 + if (self.hidden == NO) { + self.scrollView.mj_insetB -= self.mj_h; + } + } +} + +#pragma mark - 过期方法 +- (void)setAppearencePercentTriggerAutoRefresh:(CGFloat)appearencePercentTriggerAutoRefresh +{ + self.triggerAutomaticallyRefreshPercent = appearencePercentTriggerAutoRefresh; +} + +- (CGFloat)appearencePercentTriggerAutoRefresh +{ + return self.triggerAutomaticallyRefreshPercent; +} + +#pragma mark - 实现父类的方法 +- (void)prepare +{ + [super prepare]; + + // 默认底部控件100%出现时才会自动刷新 + self.triggerAutomaticallyRefreshPercent = 1.0; + + // 设置为默认状态 + self.automaticallyRefresh = YES; +} + +- (void)scrollViewContentSizeDidChange:(NSDictionary *)change +{ + [super scrollViewContentSizeDidChange:change]; + + // 设置位置 + self.mj_y = self.scrollView.mj_contentH; +} + +- (void)scrollViewContentOffsetDidChange:(NSDictionary *)change +{ + [super scrollViewContentOffsetDidChange:change]; + + if (self.state != MJRefreshStateIdle || !self.automaticallyRefresh || self.mj_y == 0) return; + + if (_scrollView.mj_insetT + _scrollView.mj_contentH > _scrollView.mj_h) { // 内容超过一个屏幕 + // 这里的_scrollView.mj_contentH替换掉self.mj_y更为合理 + if (_scrollView.mj_offsetY >= _scrollView.mj_contentH - _scrollView.mj_h + self.mj_h * self.triggerAutomaticallyRefreshPercent + _scrollView.mj_insetB - self.mj_h) { + // 防止手松开时连续调用 + CGPoint old = [change[@"old"] CGPointValue]; + CGPoint new = [change[@"new"] CGPointValue]; + if (new.y <= old.y) return; + + // 当底部刷新控件完全出现时,才刷新 + [self beginRefreshing]; + } + } +} + +- (void)scrollViewPanStateDidChange:(NSDictionary *)change +{ + [super scrollViewPanStateDidChange:change]; + + if (self.state != MJRefreshStateIdle) return; + + if (_scrollView.panGestureRecognizer.state == UIGestureRecognizerStateEnded) {// 手松开 + if (_scrollView.mj_insetT + _scrollView.mj_contentH <= _scrollView.mj_h) { // 不够一个屏幕 + if (_scrollView.mj_offsetY >= - _scrollView.mj_insetT) { // 向上拽 + [self beginRefreshing]; + } + } else { // 超出一个屏幕 + if (_scrollView.mj_offsetY >= _scrollView.mj_contentH + _scrollView.mj_insetB - _scrollView.mj_h) { + [self beginRefreshing]; + } + } + } +} + +- (void)setState:(MJRefreshState)state +{ + MJRefreshCheckState + + if (state == MJRefreshStateRefreshing) { + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [self executeRefreshingCallback]; + }); + } else if (state == MJRefreshStateNoMoreData || state == MJRefreshStateIdle) { + if (MJRefreshStateRefreshing == oldState) { + if (self.endRefreshingCompletionBlock) { + self.endRefreshingCompletionBlock(); + } + } + } +} + +- (void)setHidden:(BOOL)hidden +{ + BOOL lastHidden = self.isHidden; + + [super setHidden:hidden]; + + if (!lastHidden && hidden) { + self.state = MJRefreshStateIdle; + + self.scrollView.mj_insetB -= self.mj_h; + } else if (lastHidden && !hidden) { + self.scrollView.mj_insetB += self.mj_h; + + // 设置位置 + self.mj_y = _scrollView.mj_contentH; + } +} +@end diff --git a/JQQY/ThirdParty/MJRefresh/Base/MJRefreshBackFooter.h b/JQQY/ThirdParty/MJRefresh/Base/MJRefreshBackFooter.h new file mode 100755 index 0000000000000000000000000000000000000000..347083cf246a267b08d2b7268a8d7fdc3a200c83 --- /dev/null +++ b/JQQY/ThirdParty/MJRefresh/Base/MJRefreshBackFooter.h @@ -0,0 +1,13 @@ +// +// MJRefreshBackFooter.h +// MJRefreshExample +// +// Created by MJ Lee on 15/4/24. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "MJRefreshFooter.h" + +@interface MJRefreshBackFooter : MJRefreshFooter + +@end diff --git a/JQQY/ThirdParty/MJRefresh/Base/MJRefreshBackFooter.m b/JQQY/ThirdParty/MJRefresh/Base/MJRefreshBackFooter.m new file mode 100755 index 0000000000000000000000000000000000000000..71b95795028cd9eda0349788b26c71dab22788fe --- /dev/null +++ b/JQQY/ThirdParty/MJRefresh/Base/MJRefreshBackFooter.m @@ -0,0 +1,146 @@ +// +// MJRefreshBackFooter.m +// MJRefreshExample +// +// Created by MJ Lee on 15/4/24. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "MJRefreshBackFooter.h" + +@interface MJRefreshBackFooter() +@property (assign, nonatomic) NSInteger lastRefreshCount; +@property (assign, nonatomic) CGFloat lastBottomDelta; +@end + +@implementation MJRefreshBackFooter + +#pragma mark - 初始化 +- (void)willMoveToSuperview:(UIView *)newSuperview +{ + [super willMoveToSuperview:newSuperview]; + + [self scrollViewContentSizeDidChange:nil]; +} + +#pragma mark - 实现父类的方法 +- (void)scrollViewContentOffsetDidChange:(NSDictionary *)change +{ + [super scrollViewContentOffsetDidChange:change]; + + // 如果正在刷新,直接返回 + if (self.state == MJRefreshStateRefreshing) return; + + _scrollViewOriginalInset = self.scrollView.mj_inset; + + // 当前的contentOffset + CGFloat currentOffsetY = self.scrollView.mj_offsetY; + // 尾部控件刚好出现的offsetY + CGFloat happenOffsetY = [self happenOffsetY]; + // 如果是向下滚动到看不见尾部控件,直接返回 + if (currentOffsetY <= happenOffsetY) return; + + CGFloat pullingPercent = (currentOffsetY - happenOffsetY) / self.mj_h; + + // 如果已全部加载,仅设置pullingPercent,然后返回 + if (self.state == MJRefreshStateNoMoreData) { + self.pullingPercent = pullingPercent; + return; + } + + if (self.scrollView.isDragging) { + self.pullingPercent = pullingPercent; + // 普通 和 即将刷新 的临界点 + CGFloat normal2pullingOffsetY = happenOffsetY + self.mj_h; + + if (self.state == MJRefreshStateIdle && currentOffsetY > normal2pullingOffsetY) { + // 转为即将刷新状态 + self.state = MJRefreshStatePulling; + } else if (self.state == MJRefreshStatePulling && currentOffsetY <= normal2pullingOffsetY) { + // 转为普通状态 + self.state = MJRefreshStateIdle; + } + } else if (self.state == MJRefreshStatePulling) {// 即将刷新 && 手松开 + // 开始刷新 + [self beginRefreshing]; + } else if (pullingPercent < 1) { + self.pullingPercent = pullingPercent; + } +} + +- (void)scrollViewContentSizeDidChange:(NSDictionary *)change +{ + [super scrollViewContentSizeDidChange:change]; + + // 内容的高度 + CGFloat contentHeight = self.scrollView.mj_contentH + self.ignoredScrollViewContentInsetBottom; + // 表格的高度 + CGFloat scrollHeight = self.scrollView.mj_h - self.scrollViewOriginalInset.top - self.scrollViewOriginalInset.bottom + self.ignoredScrollViewContentInsetBottom; + // 设置位置和尺寸 + self.mj_y = MAX(contentHeight, scrollHeight); +} + +- (void)setState:(MJRefreshState)state +{ + MJRefreshCheckState + + // 根据状态来设置属性 + if (state == MJRefreshStateNoMoreData || state == MJRefreshStateIdle) { + // 刷新完毕 + if (MJRefreshStateRefreshing == oldState) { + [UIView animateWithDuration:MJRefreshSlowAnimationDuration animations:^{ + self.scrollView.mj_insetB -= self.lastBottomDelta; + + // 自动调整透明度 + if (self.isAutomaticallyChangeAlpha) self.alpha = 0.0; + } completion:^(BOOL finished) { + self.pullingPercent = 0.0; + + if (self.endRefreshingCompletionBlock) { + self.endRefreshingCompletionBlock(); + } + }]; + } + + CGFloat deltaH = [self heightForContentBreakView]; + // 刚刷新完毕 + if (MJRefreshStateRefreshing == oldState && deltaH > 0 && self.scrollView.mj_totalDataCount != self.lastRefreshCount) { + self.scrollView.mj_offsetY = self.scrollView.mj_offsetY; + } + } else if (state == MJRefreshStateRefreshing) { + // 记录刷新前的数量 + self.lastRefreshCount = self.scrollView.mj_totalDataCount; + + [UIView animateWithDuration:MJRefreshFastAnimationDuration animations:^{ + CGFloat bottom = self.mj_h + self.scrollViewOriginalInset.bottom; + CGFloat deltaH = [self heightForContentBreakView]; + if (deltaH < 0) { // 如果内容高度小于view的高度 + bottom -= deltaH; + } + self.lastBottomDelta = bottom - self.scrollView.mj_insetB; + self.scrollView.mj_insetB = bottom; + self.scrollView.mj_offsetY = [self happenOffsetY] + self.mj_h; + } completion:^(BOOL finished) { + [self executeRefreshingCallback]; + }]; + } +} +#pragma mark - 私有方法 +#pragma mark 获得scrollView的内容 超出 view 的高度 +- (CGFloat)heightForContentBreakView +{ + CGFloat h = self.scrollView.frame.size.height - self.scrollViewOriginalInset.bottom - self.scrollViewOriginalInset.top; + return self.scrollView.contentSize.height - h; +} + +#pragma mark 刚好看到上拉刷新控件时的contentOffset.y +- (CGFloat)happenOffsetY +{ + CGFloat deltaH = [self heightForContentBreakView]; + if (deltaH > 0) { + return deltaH - self.scrollViewOriginalInset.top; + } else { + return - self.scrollViewOriginalInset.top; + } +} +@end diff --git a/JQQY/ThirdParty/MJRefresh/Base/MJRefreshComponent.h b/JQQY/ThirdParty/MJRefresh/Base/MJRefreshComponent.h new file mode 100755 index 0000000000000000000000000000000000000000..46e1068437c477daed82fca6d83a483d986c5242 --- /dev/null +++ b/JQQY/ThirdParty/MJRefresh/Base/MJRefreshComponent.h @@ -0,0 +1,107 @@ +// 代码地址: https://github.com/CoderMJLee/MJRefresh +// 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000 +// MJRefreshComponent.h +// MJRefreshExample +// +// Created by MJ Lee on 15/3/4. +// Copyright (c) 2015年 小码哥. All rights reserved. +// 刷新控件的基类 + +#import +#import "MJRefreshConst.h" +#import "UIView+MJExtension.h" +#import "UIScrollView+MJExtension.h" +#import "UIScrollView+MJRefresh.h" +#import "NSBundle+MJRefresh.h" + +/** 刷新控件的状态 */ +typedef NS_ENUM(NSInteger, MJRefreshState) { + /** 普通闲置状态 */ + MJRefreshStateIdle = 1, + /** 松开就可以进行刷新的状态 */ + MJRefreshStatePulling, + /** 正在刷新中的状态 */ + MJRefreshStateRefreshing, + /** 即将刷新的状态 */ + MJRefreshStateWillRefresh, + /** 所有数据加载完毕,没有更多的数据了 */ + MJRefreshStateNoMoreData +}; + +/** 进入刷新状态的回调 */ +typedef void (^MJRefreshComponentRefreshingBlock)(void); +/** 开始刷新后的回调(进入刷新状态后的回调) */ +typedef void (^MJRefreshComponentbeginRefreshingCompletionBlock)(void); +/** 结束刷新后的回调 */ +typedef void (^MJRefreshComponentEndRefreshingCompletionBlock)(void); + +/** 刷新控件的基类 */ +@interface MJRefreshComponent : UIView +{ + /** 记录scrollView刚开始的inset */ + UIEdgeInsets _scrollViewOriginalInset; + /** 父控件 */ + __weak UIScrollView *_scrollView; +} +#pragma mark - 刷新回调 +/** 正在刷新的回调 */ +@property (copy, nonatomic) MJRefreshComponentRefreshingBlock refreshingBlock; +/** 设置回调对象和回调方法 */ +- (void)setRefreshingTarget:(id)target refreshingAction:(SEL)action; + +/** 回调对象 */ +@property (weak, nonatomic) id refreshingTarget; +/** 回调方法 */ +@property (assign, nonatomic) SEL refreshingAction; +/** 触发回调(交给子类去调用) */ +- (void)executeRefreshingCallback; + +#pragma mark - 刷新状态控制 +/** 进入刷新状态 */ +- (void)beginRefreshing; +- (void)beginRefreshingWithCompletionBlock:(void (^)(void))completionBlock; +/** 开始刷新后的回调(进入刷新状态后的回调) */ +@property (copy, nonatomic) MJRefreshComponentbeginRefreshingCompletionBlock beginRefreshingCompletionBlock; +/** 结束刷新的回调 */ +@property (copy, nonatomic) MJRefreshComponentEndRefreshingCompletionBlock endRefreshingCompletionBlock; +/** 结束刷新状态 */ +- (void)endRefreshing; +- (void)endRefreshingWithCompletionBlock:(void (^)(void))completionBlock; +/** 是否正在刷新 */ +@property (assign, nonatomic, readonly, getter=isRefreshing) BOOL refreshing; +//- (BOOL)isRefreshing; +/** 刷新状态 一般交给子类内部实现 */ +@property (assign, nonatomic) MJRefreshState state; + +#pragma mark - 交给子类去访问 +/** 记录scrollView刚开始的inset */ +@property (assign, nonatomic, readonly) UIEdgeInsets scrollViewOriginalInset; +/** 父控件 */ +@property (weak, nonatomic, readonly) UIScrollView *scrollView; + +#pragma mark - 交给子类们去实现 +/** 初始化 */ +- (void)prepare NS_REQUIRES_SUPER; +/** 摆放子控件frame */ +- (void)placeSubviews NS_REQUIRES_SUPER; +/** 当scrollView的contentOffset发生改变的时候调用 */ +- (void)scrollViewContentOffsetDidChange:(NSDictionary *)change NS_REQUIRES_SUPER; +/** 当scrollView的contentSize发生改变的时候调用 */ +- (void)scrollViewContentSizeDidChange:(NSDictionary *)change NS_REQUIRES_SUPER; +/** 当scrollView的拖拽状态发生改变的时候调用 */ +- (void)scrollViewPanStateDidChange:(NSDictionary *)change NS_REQUIRES_SUPER; + + +#pragma mark - 其他 +/** 拉拽的百分比(交给子类重写) */ +@property (assign, nonatomic) CGFloat pullingPercent; +/** 根据拖拽比例自动切换透明度 */ +@property (assign, nonatomic, getter=isAutoChangeAlpha) BOOL autoChangeAlpha MJRefreshDeprecated("请使用automaticallyChangeAlpha属性"); +/** 根据拖拽比例自动切换透明度 */ +@property (assign, nonatomic, getter=isAutomaticallyChangeAlpha) BOOL automaticallyChangeAlpha; +@end + +@interface UILabel(MJRefresh) ++ (instancetype)mj_label; +- (CGFloat)mj_textWith; +@end diff --git a/JQQY/ThirdParty/MJRefresh/Base/MJRefreshComponent.m b/JQQY/ThirdParty/MJRefresh/Base/MJRefreshComponent.m new file mode 100755 index 0000000000000000000000000000000000000000..6661ba60d6a8b17f50b0c6673e3bf3d58e6c4000 --- /dev/null +++ b/JQQY/ThirdParty/MJRefresh/Base/MJRefreshComponent.m @@ -0,0 +1,276 @@ +// 代码地址: https://github.com/CoderMJLee/MJRefresh +// 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000 +// MJRefreshComponent.m +// MJRefreshExample +// +// Created by MJ Lee on 15/3/4. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "MJRefreshComponent.h" +#import "MJRefreshConst.h" + +@interface MJRefreshComponent() +@property (strong, nonatomic) UIPanGestureRecognizer *pan; +@end + +@implementation MJRefreshComponent +#pragma mark - 初始化 +- (instancetype)initWithFrame:(CGRect)frame +{ + if (self = [super initWithFrame:frame]) { + // 准备工作 + [self prepare]; + + // 默认是普通状态 + self.state = MJRefreshStateIdle; + } + return self; +} + +- (void)prepare +{ + // 基本属性 + self.autoresizingMask = UIViewAutoresizingFlexibleWidth; + self.backgroundColor = [UIColor clearColor]; +} + +- (void)layoutSubviews +{ + [self placeSubviews]; + + [super layoutSubviews]; +} + +- (void)placeSubviews{} + +- (void)willMoveToSuperview:(UIView *)newSuperview +{ + [super willMoveToSuperview:newSuperview]; + + // 如果不是UIScrollView,不做任何事情 + if (newSuperview && ![newSuperview isKindOfClass:[UIScrollView class]]) return; + + // 旧的父控件移除监听 + [self removeObservers]; + + if (newSuperview) { // 新的父控件 + // 设置宽度 + self.mj_w = newSuperview.mj_w; + // 设置位置 + self.mj_x = -_scrollView.mj_insetL; + + // 记录UIScrollView + _scrollView = (UIScrollView *)newSuperview; + // 设置永远支持垂直弹簧效果 + _scrollView.alwaysBounceVertical = YES; + // 记录UIScrollView最开始的contentInset + _scrollViewOriginalInset = _scrollView.mj_inset; + + // 添加监听 + [self addObservers]; + } +} + +- (void)drawRect:(CGRect)rect +{ + [super drawRect:rect]; + + if (self.state == MJRefreshStateWillRefresh) { + // 预防view还没显示出来就调用了beginRefreshing + self.state = MJRefreshStateRefreshing; + } +} + +#pragma mark - KVO监听 +- (void)addObservers +{ + NSKeyValueObservingOptions options = NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld; + [self.scrollView addObserver:self forKeyPath:MJRefreshKeyPathContentOffset options:options context:nil]; + [self.scrollView addObserver:self forKeyPath:MJRefreshKeyPathContentSize options:options context:nil]; + self.pan = self.scrollView.panGestureRecognizer; + [self.pan addObserver:self forKeyPath:MJRefreshKeyPathPanState options:options context:nil]; +} + +- (void)removeObservers +{ + [self.superview removeObserver:self forKeyPath:MJRefreshKeyPathContentOffset]; + [self.superview removeObserver:self forKeyPath:MJRefreshKeyPathContentSize]; + [self.pan removeObserver:self forKeyPath:MJRefreshKeyPathPanState]; + self.pan = nil; +} + +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context +{ + // 遇到这些情况就直接返回 + if (!self.userInteractionEnabled) return; + + // 这个就算看不见也需要处理 + if ([keyPath isEqualToString:MJRefreshKeyPathContentSize]) { + [self scrollViewContentSizeDidChange:change]; + } + + // 看不见 + if (self.hidden) return; + if ([keyPath isEqualToString:MJRefreshKeyPathContentOffset]) { + [self scrollViewContentOffsetDidChange:change]; + } else if ([keyPath isEqualToString:MJRefreshKeyPathPanState]) { + [self scrollViewPanStateDidChange:change]; + } +} + +- (void)scrollViewContentOffsetDidChange:(NSDictionary *)change{} +- (void)scrollViewContentSizeDidChange:(NSDictionary *)change{} +- (void)scrollViewPanStateDidChange:(NSDictionary *)change{} + +#pragma mark - 公共方法 +#pragma mark 设置回调对象和回调方法 +- (void)setRefreshingTarget:(id)target refreshingAction:(SEL)action +{ + self.refreshingTarget = target; + self.refreshingAction = action; +} + +- (void)setState:(MJRefreshState)state +{ + _state = state; + + // 加入主队列的目的是等setState:方法调用完毕、设置完文字后再去布局子控件 + dispatch_async(dispatch_get_main_queue(), ^{ + [self setNeedsLayout]; + }); +} + +#pragma mark 进入刷新状态 +- (void)beginRefreshing +{ + [UIView animateWithDuration:MJRefreshFastAnimationDuration animations:^{ + self.alpha = 1.0; + }]; + self.pullingPercent = 1.0; + // 只要正在刷新,就完全显示 + if (self.window) { + self.state = MJRefreshStateRefreshing; + } else { + // 预防正在刷新中时,调用本方法使得header inset回置失败 + if (self.state != MJRefreshStateRefreshing) { + self.state = MJRefreshStateWillRefresh; + // 刷新(预防从另一个控制器回到这个控制器的情况,回来要重新刷新一下) + [self setNeedsDisplay]; + } + } +} + +- (void)beginRefreshingWithCompletionBlock:(void (^)(void))completionBlock +{ + self.beginRefreshingCompletionBlock = completionBlock; + + [self beginRefreshing]; +} + +#pragma mark 结束刷新状态 +- (void)endRefreshing +{ + dispatch_async(dispatch_get_main_queue(), ^{ + self.state = MJRefreshStateIdle; + }); +} + +- (void)endRefreshingWithCompletionBlock:(void (^)(void))completionBlock +{ + self.endRefreshingCompletionBlock = completionBlock; + + [self endRefreshing]; +} + +#pragma mark 是否正在刷新 +- (BOOL)isRefreshing +{ + return self.state == MJRefreshStateRefreshing || self.state == MJRefreshStateWillRefresh; +} + +#pragma mark 自动切换透明度 +- (void)setAutoChangeAlpha:(BOOL)autoChangeAlpha +{ + self.automaticallyChangeAlpha = autoChangeAlpha; +} + +- (BOOL)isAutoChangeAlpha +{ + return self.isAutomaticallyChangeAlpha; +} + +- (void)setAutomaticallyChangeAlpha:(BOOL)automaticallyChangeAlpha +{ + _automaticallyChangeAlpha = automaticallyChangeAlpha; + + if (self.isRefreshing) return; + + if (automaticallyChangeAlpha) { + self.alpha = self.pullingPercent; + } else { + self.alpha = 1.0; + } +} + +#pragma mark 根据拖拽进度设置透明度 +- (void)setPullingPercent:(CGFloat)pullingPercent +{ + _pullingPercent = pullingPercent; + + if (self.isRefreshing) return; + + if (self.isAutomaticallyChangeAlpha) { + self.alpha = pullingPercent; + } +} + +#pragma mark - 内部方法 +- (void)executeRefreshingCallback +{ + dispatch_async(dispatch_get_main_queue(), ^{ + if (self.refreshingBlock) { + self.refreshingBlock(); + } + if ([self.refreshingTarget respondsToSelector:self.refreshingAction]) { + MJRefreshMsgSend(MJRefreshMsgTarget(self.refreshingTarget), self.refreshingAction, self); + } + if (self.beginRefreshingCompletionBlock) { + self.beginRefreshingCompletionBlock(); + } + }); +} +@end + +@implementation UILabel(MJRefresh) ++ (instancetype)mj_label +{ + UILabel *label = [[self alloc] init]; + label.font = MJRefreshLabelFont; + label.textColor = MJRefreshLabelTextColor; + label.autoresizingMask = UIViewAutoresizingFlexibleWidth; + label.textAlignment = NSTextAlignmentCenter; + label.backgroundColor = [UIColor clearColor]; + return label; +} + +- (CGFloat)mj_textWith { + CGFloat stringWidth = 0; + CGSize size = CGSizeMake(MAXFLOAT, MAXFLOAT); + if (self.text.length > 0) { +#if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 + stringWidth =[self.text + boundingRectWithSize:size + options:NSStringDrawingUsesLineFragmentOrigin + attributes:@{NSFontAttributeName:self.font} + context:nil].size.width; +#else + + stringWidth = [self.text sizeWithFont:self.font + constrainedToSize:size + lineBreakMode:NSLineBreakByCharWrapping].width; +#endif + } + return stringWidth; +} +@end diff --git a/JQQY/ThirdParty/MJRefresh/Base/MJRefreshFooter.h b/JQQY/ThirdParty/MJRefresh/Base/MJRefreshFooter.h new file mode 100755 index 0000000000000000000000000000000000000000..22d23e52f86adce53873c81ccacbb73f240cb03e --- /dev/null +++ b/JQQY/ThirdParty/MJRefresh/Base/MJRefreshFooter.h @@ -0,0 +1,30 @@ +// 代码地址: https://github.com/CoderMJLee/MJRefresh +// 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000 +// MJRefreshFooter.h +// MJRefreshExample +// +// Created by MJ Lee on 15/3/5. +// Copyright (c) 2015年 小码哥. All rights reserved. +// 上拉刷新控件 + +#import "MJRefreshComponent.h" + +@interface MJRefreshFooter : MJRefreshComponent +/** 创建footer */ ++ (instancetype)footerWithRefreshingBlock:(MJRefreshComponentRefreshingBlock)refreshingBlock; +/** 创建footer */ ++ (instancetype)footerWithRefreshingTarget:(id)target refreshingAction:(SEL)action; + +/** 提示没有更多的数据 */ +- (void)endRefreshingWithNoMoreData; +- (void)noticeNoMoreData MJRefreshDeprecated("使用endRefreshingWithNoMoreData"); + +/** 重置没有更多的数据(消除没有更多数据的状态) */ +- (void)resetNoMoreData; + +/** 忽略多少scrollView的contentInset的bottom */ +@property (assign, nonatomic) CGFloat ignoredScrollViewContentInsetBottom; + +/** 自动根据有无数据来显示和隐藏(有数据就显示,没有数据隐藏。默认是NO) */ +@property (assign, nonatomic, getter=isAutomaticallyHidden) BOOL automaticallyHidden; +@end diff --git a/JQQY/ThirdParty/MJRefresh/Base/MJRefreshFooter.m b/JQQY/ThirdParty/MJRefresh/Base/MJRefreshFooter.m new file mode 100755 index 0000000000000000000000000000000000000000..75ba9aaa3b15db09ca178281dcd3001bdf18de92 --- /dev/null +++ b/JQQY/ThirdParty/MJRefresh/Base/MJRefreshFooter.m @@ -0,0 +1,78 @@ +// 代码地址: https://github.com/CoderMJLee/MJRefresh +// 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000 +// MJRefreshFooter.m +// MJRefreshExample +// +// Created by MJ Lee on 15/3/5. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "MJRefreshFooter.h" + +@interface MJRefreshFooter() + +@end + +@implementation MJRefreshFooter +#pragma mark - 构造方法 ++ (instancetype)footerWithRefreshingBlock:(MJRefreshComponentRefreshingBlock)refreshingBlock +{ + MJRefreshFooter *cmp = [[self alloc] init]; + cmp.refreshingBlock = refreshingBlock; + return cmp; +} ++ (instancetype)footerWithRefreshingTarget:(id)target refreshingAction:(SEL)action +{ + MJRefreshFooter *cmp = [[self alloc] init]; + [cmp setRefreshingTarget:target refreshingAction:action]; + return cmp; +} + +#pragma mark - 重写父类的方法 +- (void)prepare +{ + [super prepare]; + + // 设置自己的高度 + self.mj_h = MJRefreshFooterHeight; + + // 默认不会自动隐藏 + self.automaticallyHidden = NO; +} + +- (void)willMoveToSuperview:(UIView *)newSuperview +{ + [super willMoveToSuperview:newSuperview]; + + if (newSuperview) { + // 监听scrollView数据的变化 + if ([self.scrollView isKindOfClass:[UITableView class]] || [self.scrollView isKindOfClass:[UICollectionView class]]) { + [self.scrollView setMj_reloadDataBlock:^(NSInteger totalDataCount) { + if (self.isAutomaticallyHidden) { + self.hidden = (totalDataCount == 0); + } + }]; + } + } +} + +#pragma mark - 公共方法 +- (void)endRefreshingWithNoMoreData +{ + dispatch_async(dispatch_get_main_queue(), ^{ + self.state = MJRefreshStateNoMoreData; + }); +} + +- (void)noticeNoMoreData +{ + [self endRefreshingWithNoMoreData]; +} + +- (void)resetNoMoreData +{ + dispatch_async(dispatch_get_main_queue(), ^{ + self.state = MJRefreshStateIdle; + }); +} +@end diff --git a/JQQY/ThirdParty/MJRefresh/Base/MJRefreshHeader.h b/JQQY/ThirdParty/MJRefresh/Base/MJRefreshHeader.h new file mode 100755 index 0000000000000000000000000000000000000000..0816024594a0cbdde6f9dedce103360a02853776 --- /dev/null +++ b/JQQY/ThirdParty/MJRefresh/Base/MJRefreshHeader.h @@ -0,0 +1,25 @@ +// 代码地址: https://github.com/CoderMJLee/MJRefresh +// 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000 +// MJRefreshHeader.h +// MJRefreshExample +// +// Created by MJ Lee on 15/3/4. +// Copyright (c) 2015年 小码哥. All rights reserved. +// 下拉刷新控件:负责监控用户下拉的状态 + +#import "MJRefreshComponent.h" + +@interface MJRefreshHeader : MJRefreshComponent +/** 创建header */ ++ (instancetype)headerWithRefreshingBlock:(MJRefreshComponentRefreshingBlock)refreshingBlock; +/** 创建header */ ++ (instancetype)headerWithRefreshingTarget:(id)target refreshingAction:(SEL)action; + +/** 这个key用来存储上一次下拉刷新成功的时间 */ +@property (copy, nonatomic) NSString *lastUpdatedTimeKey; +/** 上一次下拉刷新成功的时间 */ +@property (strong, nonatomic, readonly) NSDate *lastUpdatedTime; + +/** 忽略多少scrollView的contentInset的top */ +@property (assign, nonatomic) CGFloat ignoredScrollViewContentInsetTop; +@end diff --git a/JQQY/ThirdParty/MJRefresh/Base/MJRefreshHeader.m b/JQQY/ThirdParty/MJRefresh/Base/MJRefreshHeader.m new file mode 100755 index 0000000000000000000000000000000000000000..3769f4168fe812e897855c3709ec41c8686179df --- /dev/null +++ b/JQQY/ThirdParty/MJRefresh/Base/MJRefreshHeader.m @@ -0,0 +1,148 @@ +// 代码地址: https://github.com/CoderMJLee/MJRefresh +// 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000 +// MJRefreshHeader.m +// MJRefreshExample +// +// Created by MJ Lee on 15/3/4. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "MJRefreshHeader.h" + +@interface MJRefreshHeader() +@property (assign, nonatomic) CGFloat insetTDelta; +@end + +@implementation MJRefreshHeader +#pragma mark - 构造方法 ++ (instancetype)headerWithRefreshingBlock:(MJRefreshComponentRefreshingBlock)refreshingBlock +{ + MJRefreshHeader *cmp = [[self alloc] init]; + cmp.refreshingBlock = refreshingBlock; + return cmp; +} ++ (instancetype)headerWithRefreshingTarget:(id)target refreshingAction:(SEL)action +{ + MJRefreshHeader *cmp = [[self alloc] init]; + [cmp setRefreshingTarget:target refreshingAction:action]; + return cmp; +} + +#pragma mark - 覆盖父类的方法 +- (void)prepare +{ + [super prepare]; + + // 设置key + self.lastUpdatedTimeKey = MJRefreshHeaderLastUpdatedTimeKey; + + // 设置高度 + self.mj_h = MJRefreshHeaderHeight; +} + +- (void)placeSubviews +{ + [super placeSubviews]; + + // 设置y值(当自己的高度发生改变了,肯定要重新调整Y值,所以放到placeSubviews方法中设置y值) + self.mj_y = - self.mj_h - self.ignoredScrollViewContentInsetTop; +} + +- (void)scrollViewContentOffsetDidChange:(NSDictionary *)change +{ + [super scrollViewContentOffsetDidChange:change]; + + // 在刷新的refreshing状态 + if (self.state == MJRefreshStateRefreshing) { + if (self.window == nil) return; + + // sectionheader停留解决 + CGFloat insetT = - self.scrollView.mj_offsetY > _scrollViewOriginalInset.top ? - self.scrollView.mj_offsetY : _scrollViewOriginalInset.top; + insetT = insetT > self.mj_h + _scrollViewOriginalInset.top ? self.mj_h + _scrollViewOriginalInset.top : insetT; + self.scrollView.mj_insetT = insetT; + + self.insetTDelta = _scrollViewOriginalInset.top - insetT; + return; + } + + // 跳转到下一个控制器时,contentInset可能会变 + _scrollViewOriginalInset = self.scrollView.mj_inset; + + // 当前的contentOffset + CGFloat offsetY = self.scrollView.mj_offsetY; + // 头部控件刚好出现的offsetY + CGFloat happenOffsetY = - self.scrollViewOriginalInset.top; + + // 如果是向上滚动到看不见头部控件,直接返回 + // >= -> > + if (offsetY > happenOffsetY) return; + + // 普通 和 即将刷新 的临界点 + CGFloat normal2pullingOffsetY = happenOffsetY - self.mj_h; + CGFloat pullingPercent = (happenOffsetY - offsetY) / self.mj_h; + + if (self.scrollView.isDragging) { // 如果正在拖拽 + self.pullingPercent = pullingPercent; + if (self.state == MJRefreshStateIdle && offsetY < normal2pullingOffsetY) { + // 转为即将刷新状态 + self.state = MJRefreshStatePulling; + } else if (self.state == MJRefreshStatePulling && offsetY >= normal2pullingOffsetY) { + // 转为普通状态 + self.state = MJRefreshStateIdle; + } + } else if (self.state == MJRefreshStatePulling) {// 即将刷新 && 手松开 + // 开始刷新 + [self beginRefreshing]; + } else if (pullingPercent < 1) { + self.pullingPercent = pullingPercent; + } +} + +- (void)setState:(MJRefreshState)state +{ + MJRefreshCheckState + + // 根据状态做事情 + if (state == MJRefreshStateIdle) { + if (oldState != MJRefreshStateRefreshing) return; + + // 保存刷新时间 + [[NSUserDefaults standardUserDefaults] setObject:[NSDate date] forKey:self.lastUpdatedTimeKey]; + [[NSUserDefaults standardUserDefaults] synchronize]; + + // 恢复inset和offset + [UIView animateWithDuration:MJRefreshSlowAnimationDuration animations:^{ + self.scrollView.mj_insetT += self.insetTDelta; + + // 自动调整透明度 + if (self.isAutomaticallyChangeAlpha) self.alpha = 0.0; + } completion:^(BOOL finished) { + self.pullingPercent = 0.0; + + if (self.endRefreshingCompletionBlock) { + self.endRefreshingCompletionBlock(); + } + }]; + } else if (state == MJRefreshStateRefreshing) { + dispatch_async(dispatch_get_main_queue(), ^{ + [UIView animateWithDuration:MJRefreshFastAnimationDuration animations:^{ + CGFloat top = self.scrollViewOriginalInset.top + self.mj_h; + // 增加滚动区域top + self.scrollView.mj_insetT = top; + // 设置滚动位置 + CGPoint offset = self.scrollView.contentOffset; + offset.y = -top; + [self.scrollView setContentOffset:offset animated:NO]; + } completion:^(BOOL finished) { + [self executeRefreshingCallback]; + }]; + }); + } +} + +#pragma mark - 公共方法 +- (NSDate *)lastUpdatedTime +{ + return [[NSUserDefaults standardUserDefaults] objectForKey:self.lastUpdatedTimeKey]; +} +@end diff --git a/JQQY/ThirdParty/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h b/JQQY/ThirdParty/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h new file mode 100755 index 0000000000000000000000000000000000000000..6a127e6cb35d6e08ef298bc1ed4faa7c2dcff12f --- /dev/null +++ b/JQQY/ThirdParty/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h @@ -0,0 +1,17 @@ +// +// MJRefreshAutoGifFooter.h +// MJRefreshExample +// +// Created by MJ Lee on 15/4/24. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "MJRefreshAutoStateFooter.h" + +@interface MJRefreshAutoGifFooter : MJRefreshAutoStateFooter +@property (weak, nonatomic, readonly) UIImageView *gifView; + +/** 设置state状态下的动画图片images 动画持续时间duration*/ +- (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state; +- (void)setImages:(NSArray *)images forState:(MJRefreshState)state; +@end diff --git a/JQQY/ThirdParty/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.m b/JQQY/ThirdParty/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.m new file mode 100755 index 0000000000000000000000000000000000000000..25071381e774e72ec2cbbf1a2987880f4a74d41b --- /dev/null +++ b/JQQY/ThirdParty/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.m @@ -0,0 +1,116 @@ +// +// MJRefreshAutoGifFooter.m +// MJRefreshExample +// +// Created by MJ Lee on 15/4/24. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "MJRefreshAutoGifFooter.h" + +@interface MJRefreshAutoGifFooter() +{ + __unsafe_unretained UIImageView *_gifView; +} +/** 所有状态对应的动画图片 */ +@property (strong, nonatomic) NSMutableDictionary *stateImages; +/** 所有状态对应的动画时间 */ +@property (strong, nonatomic) NSMutableDictionary *stateDurations; +@end + +@implementation MJRefreshAutoGifFooter +#pragma mark - 懒加载 +- (UIImageView *)gifView +{ + if (!_gifView) { + UIImageView *gifView = [[UIImageView alloc] init]; + [self addSubview:_gifView = gifView]; + } + return _gifView; +} + +- (NSMutableDictionary *)stateImages +{ + if (!_stateImages) { + self.stateImages = [NSMutableDictionary dictionary]; + } + return _stateImages; +} + +- (NSMutableDictionary *)stateDurations +{ + if (!_stateDurations) { + self.stateDurations = [NSMutableDictionary dictionary]; + } + return _stateDurations; +} + +#pragma mark - 公共方法 +- (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state +{ + if (images == nil) return; + + self.stateImages[@(state)] = images; + self.stateDurations[@(state)] = @(duration); + + /* 根据图片设置控件的高度 */ + UIImage *image = [images firstObject]; + if (image.size.height > self.mj_h) { + self.mj_h = image.size.height; + } +} + +- (void)setImages:(NSArray *)images forState:(MJRefreshState)state +{ + [self setImages:images duration:images.count * 0.1 forState:state]; +} + +#pragma mark - 实现父类的方法 +- (void)prepare +{ + [super prepare]; + + // 初始化间距 + self.labelLeftInset = 20; +} + +- (void)placeSubviews +{ + [super placeSubviews]; + + if (self.gifView.constraints.count) return; + + self.gifView.frame = self.bounds; + if (self.isRefreshingTitleHidden) { + self.gifView.contentMode = UIViewContentModeCenter; + } else { + self.gifView.contentMode = UIViewContentModeRight; + self.gifView.mj_w = self.mj_w * 0.5 - self.labelLeftInset - self.stateLabel.mj_textWith * 0.5; + } +} + +- (void)setState:(MJRefreshState)state +{ + MJRefreshCheckState + + // 根据状态做事情 + if (state == MJRefreshStateRefreshing) { + NSArray *images = self.stateImages[@(state)]; + if (images.count == 0) return; + [self.gifView stopAnimating]; + + self.gifView.hidden = NO; + if (images.count == 1) { // 单张图片 + self.gifView.image = [images lastObject]; + } else { // 多张图片 + self.gifView.animationImages = images; + self.gifView.animationDuration = [self.stateDurations[@(state)] doubleValue]; + [self.gifView startAnimating]; + } + } else if (state == MJRefreshStateNoMoreData || state == MJRefreshStateIdle) { + [self.gifView stopAnimating]; + self.gifView.hidden = YES; + } +} +@end + diff --git a/JQQY/ThirdParty/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.h b/JQQY/ThirdParty/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.h new file mode 100755 index 0000000000000000000000000000000000000000..5549cff5b8335f79102abf9251aab27962ee21ba --- /dev/null +++ b/JQQY/ThirdParty/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.h @@ -0,0 +1,14 @@ +// +// MJRefreshAutoNormalFooter.h +// MJRefreshExample +// +// Created by MJ Lee on 15/4/24. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "MJRefreshAutoStateFooter.h" + +@interface MJRefreshAutoNormalFooter : MJRefreshAutoStateFooter +/** 菊花的样式 */ +@property (assign, nonatomic) UIActivityIndicatorViewStyle activityIndicatorViewStyle; +@end diff --git a/JQQY/ThirdParty/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.m b/JQQY/ThirdParty/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.m new file mode 100755 index 0000000000000000000000000000000000000000..dae9060626e3754541008126d48dc461ccc2356b --- /dev/null +++ b/JQQY/ThirdParty/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.m @@ -0,0 +1,69 @@ +// +// MJRefreshAutoNormalFooter.m +// MJRefreshExample +// +// Created by MJ Lee on 15/4/24. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "MJRefreshAutoNormalFooter.h" + +@interface MJRefreshAutoNormalFooter() +@property (weak, nonatomic) UIActivityIndicatorView *loadingView; +@end + +@implementation MJRefreshAutoNormalFooter +#pragma mark - 懒加载子控件 +- (UIActivityIndicatorView *)loadingView +{ + if (!_loadingView) { + UIActivityIndicatorView *loadingView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:self.activityIndicatorViewStyle]; + loadingView.hidesWhenStopped = YES; + [self addSubview:_loadingView = loadingView]; + } + return _loadingView; +} + +- (void)setActivityIndicatorViewStyle:(UIActivityIndicatorViewStyle)activityIndicatorViewStyle +{ + _activityIndicatorViewStyle = activityIndicatorViewStyle; + + self.loadingView = nil; + [self setNeedsLayout]; +} +#pragma mark - 重写父类的方法 +- (void)prepare +{ + [super prepare]; + + self.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray; +} + +- (void)placeSubviews +{ + [super placeSubviews]; + + if (self.loadingView.constraints.count) return; + + // 圈圈 + CGFloat loadingCenterX = self.mj_w * 0.5; + if (!self.isRefreshingTitleHidden) { + loadingCenterX -= self.stateLabel.mj_textWith * 0.5 + self.labelLeftInset; + } + CGFloat loadingCenterY = self.mj_h * 0.5; + self.loadingView.center = CGPointMake(loadingCenterX, loadingCenterY); +} + +- (void)setState:(MJRefreshState)state +{ + MJRefreshCheckState + + // 根据状态做事情 + if (state == MJRefreshStateNoMoreData || state == MJRefreshStateIdle) { + [self.loadingView stopAnimating]; + } else if (state == MJRefreshStateRefreshing) { + [self.loadingView startAnimating]; + } +} + +@end diff --git a/JQQY/ThirdParty/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h b/JQQY/ThirdParty/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h new file mode 100755 index 0000000000000000000000000000000000000000..9fe7915b8dd64fe323f45b933ae02770943477d5 --- /dev/null +++ b/JQQY/ThirdParty/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h @@ -0,0 +1,22 @@ +// +// MJRefreshAutoStateFooter.h +// MJRefreshExample +// +// Created by MJ Lee on 15/6/13. +// Copyright © 2015年 小码哥. All rights reserved. +// + +#import "MJRefreshAutoFooter.h" + +@interface MJRefreshAutoStateFooter : MJRefreshAutoFooter +/** 文字距离圈圈、箭头的距离 */ +@property (assign, nonatomic) CGFloat labelLeftInset; +/** 显示刷新状态的label */ +@property (weak, nonatomic, readonly) UILabel *stateLabel; + +/** 设置state状态下的文字 */ +- (void)setTitle:(NSString *)title forState:(MJRefreshState)state; + +/** 隐藏刷新状态的文字 */ +@property (assign, nonatomic, getter=isRefreshingTitleHidden) BOOL refreshingTitleHidden; +@end diff --git a/JQQY/ThirdParty/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.m b/JQQY/ThirdParty/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.m new file mode 100755 index 0000000000000000000000000000000000000000..d16547de80261a4575c78bb1c055608dc5df1858 --- /dev/null +++ b/JQQY/ThirdParty/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.m @@ -0,0 +1,92 @@ +// +// MJRefreshAutoStateFooter.m +// MJRefreshExample +// +// Created by MJ Lee on 15/6/13. +// Copyright © 2015年 小码哥. All rights reserved. +// + +#import "MJRefreshAutoStateFooter.h" + +@interface MJRefreshAutoStateFooter() +{ + /** 显示刷新状态的label */ + __unsafe_unretained UILabel *_stateLabel; +} +/** 所有状态对应的文字 */ +@property (strong, nonatomic) NSMutableDictionary *stateTitles; +@end + +@implementation MJRefreshAutoStateFooter +#pragma mark - 懒加载 +- (NSMutableDictionary *)stateTitles +{ + if (!_stateTitles) { + self.stateTitles = [NSMutableDictionary dictionary]; + } + return _stateTitles; +} + +- (UILabel *)stateLabel +{ + if (!_stateLabel) { + [self addSubview:_stateLabel = [UILabel mj_label]]; + } + return _stateLabel; +} + +#pragma mark - 公共方法 +- (void)setTitle:(NSString *)title forState:(MJRefreshState)state +{ + if (title == nil) return; + self.stateTitles[@(state)] = title; + self.stateLabel.text = self.stateTitles[@(self.state)]; +} + +#pragma mark - 私有方法 +- (void)stateLabelClick +{ + if (self.state == MJRefreshStateIdle) { + [self beginRefreshing]; + } +} + +#pragma mark - 重写父类的方法 +- (void)prepare +{ + [super prepare]; + + // 初始化间距 + self.labelLeftInset = MJRefreshLabelLeftInset; + + // 初始化文字 + [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshAutoFooterIdleText] forState:MJRefreshStateIdle]; + [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshAutoFooterRefreshingText] forState:MJRefreshStateRefreshing]; + [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshAutoFooterNoMoreDataText] forState:MJRefreshStateNoMoreData]; + + // 监听label + self.stateLabel.userInteractionEnabled = YES; + [self.stateLabel addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(stateLabelClick)]]; +} + +- (void)placeSubviews +{ + [super placeSubviews]; + + if (self.stateLabel.constraints.count) return; + + // 状态标签 + self.stateLabel.frame = self.bounds; +} + +- (void)setState:(MJRefreshState)state +{ + MJRefreshCheckState + + if (self.isRefreshingTitleHidden && state == MJRefreshStateRefreshing) { + self.stateLabel.text = nil; + } else { + self.stateLabel.text = self.stateTitles[@(state)]; + } +} +@end \ No newline at end of file diff --git a/JQQY/ThirdParty/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h b/JQQY/ThirdParty/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h new file mode 100755 index 0000000000000000000000000000000000000000..b29af8691e1a5299d2956cd643eaea521f313a52 --- /dev/null +++ b/JQQY/ThirdParty/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h @@ -0,0 +1,17 @@ +// +// MJRefreshBackGifFooter.h +// MJRefreshExample +// +// Created by MJ Lee on 15/4/24. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "MJRefreshBackStateFooter.h" + +@interface MJRefreshBackGifFooter : MJRefreshBackStateFooter +@property (weak, nonatomic, readonly) UIImageView *gifView; + +/** 设置state状态下的动画图片images 动画持续时间duration*/ +- (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state; +- (void)setImages:(NSArray *)images forState:(MJRefreshState)state; +@end diff --git a/JQQY/ThirdParty/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.m b/JQQY/ThirdParty/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.m new file mode 100755 index 0000000000000000000000000000000000000000..fa97c72c62d535c74679237608f9736684d31b16 --- /dev/null +++ b/JQQY/ThirdParty/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.m @@ -0,0 +1,127 @@ +// +// MJRefreshBackGifFooter.m +// MJRefreshExample +// +// Created by MJ Lee on 15/4/24. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "MJRefreshBackGifFooter.h" + +@interface MJRefreshBackGifFooter() +{ + __unsafe_unretained UIImageView *_gifView; +} +/** 所有状态对应的动画图片 */ +@property (strong, nonatomic) NSMutableDictionary *stateImages; +/** 所有状态对应的动画时间 */ +@property (strong, nonatomic) NSMutableDictionary *stateDurations; +@end + +@implementation MJRefreshBackGifFooter +#pragma mark - 懒加载 +- (UIImageView *)gifView +{ + if (!_gifView) { + UIImageView *gifView = [[UIImageView alloc] init]; + [self addSubview:_gifView = gifView]; + } + return _gifView; +} + +- (NSMutableDictionary *)stateImages +{ + if (!_stateImages) { + self.stateImages = [NSMutableDictionary dictionary]; + } + return _stateImages; +} + +- (NSMutableDictionary *)stateDurations +{ + if (!_stateDurations) { + self.stateDurations = [NSMutableDictionary dictionary]; + } + return _stateDurations; +} + +#pragma mark - 公共方法 +- (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state +{ + if (images == nil) return; + + self.stateImages[@(state)] = images; + self.stateDurations[@(state)] = @(duration); + + /* 根据图片设置控件的高度 */ + UIImage *image = [images firstObject]; + if (image.size.height > self.mj_h) { + self.mj_h = image.size.height; + } +} + +- (void)setImages:(NSArray *)images forState:(MJRefreshState)state +{ + [self setImages:images duration:images.count * 0.1 forState:state]; +} + +#pragma mark - 实现父类的方法 +- (void)prepare +{ + [super prepare]; + + // 初始化间距 + self.labelLeftInset = 20; +} + +- (void)setPullingPercent:(CGFloat)pullingPercent +{ + [super setPullingPercent:pullingPercent]; + NSArray *images = self.stateImages[@(MJRefreshStateIdle)]; + if (self.state != MJRefreshStateIdle || images.count == 0) return; + [self.gifView stopAnimating]; + NSUInteger index = images.count * pullingPercent; + if (index >= images.count) index = images.count - 1; + self.gifView.image = images[index]; +} + +- (void)placeSubviews +{ + [super placeSubviews]; + + if (self.gifView.constraints.count) return; + + self.gifView.frame = self.bounds; + if (self.stateLabel.hidden) { + self.gifView.contentMode = UIViewContentModeCenter; + } else { + self.gifView.contentMode = UIViewContentModeRight; + self.gifView.mj_w = self.mj_w * 0.5 - self.labelLeftInset - self.stateLabel.mj_textWith * 0.5; + } +} + +- (void)setState:(MJRefreshState)state +{ + MJRefreshCheckState + + // 根据状态做事情 + if (state == MJRefreshStatePulling || state == MJRefreshStateRefreshing) { + NSArray *images = self.stateImages[@(state)]; + if (images.count == 0) return; + + self.gifView.hidden = NO; + [self.gifView stopAnimating]; + if (images.count == 1) { // 单张图片 + self.gifView.image = [images lastObject]; + } else { // 多张图片 + self.gifView.animationImages = images; + self.gifView.animationDuration = [self.stateDurations[@(state)] doubleValue]; + [self.gifView startAnimating]; + } + } else if (state == MJRefreshStateIdle) { + self.gifView.hidden = NO; + } else if (state == MJRefreshStateNoMoreData) { + self.gifView.hidden = YES; + } +} +@end diff --git a/JQQY/ThirdParty/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.h b/JQQY/ThirdParty/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.h new file mode 100755 index 0000000000000000000000000000000000000000..90e8b7760f67048fbc90f487cf5f87ba5726ce61 --- /dev/null +++ b/JQQY/ThirdParty/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.h @@ -0,0 +1,15 @@ +// +// MJRefreshBackNormalFooter.h +// MJRefreshExample +// +// Created by MJ Lee on 15/4/24. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "MJRefreshBackStateFooter.h" + +@interface MJRefreshBackNormalFooter : MJRefreshBackStateFooter +@property (weak, nonatomic, readonly) UIImageView *arrowView; +/** 菊花的样式 */ +@property (assign, nonatomic) UIActivityIndicatorViewStyle activityIndicatorViewStyle; +@end diff --git a/JQQY/ThirdParty/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.m b/JQQY/ThirdParty/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.m new file mode 100755 index 0000000000000000000000000000000000000000..30e5ecf74994555d2fcb031e00fec72ce016e779 --- /dev/null +++ b/JQQY/ThirdParty/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.m @@ -0,0 +1,120 @@ +// +// MJRefreshBackNormalFooter.m +// MJRefreshExample +// +// Created by MJ Lee on 15/4/24. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "MJRefreshBackNormalFooter.h" +#import "NSBundle+MJRefresh.h" + +@interface MJRefreshBackNormalFooter() +{ + __unsafe_unretained UIImageView *_arrowView; +} +@property (weak, nonatomic) UIActivityIndicatorView *loadingView; +@end + +@implementation MJRefreshBackNormalFooter +#pragma mark - 懒加载子控件 +- (UIImageView *)arrowView +{ + if (!_arrowView) { + UIImageView *arrowView = [[UIImageView alloc] initWithImage:[NSBundle mj_arrowImage]]; + [self addSubview:_arrowView = arrowView]; + } + return _arrowView; +} + + +- (UIActivityIndicatorView *)loadingView +{ + if (!_loadingView) { + UIActivityIndicatorView *loadingView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:self.activityIndicatorViewStyle]; + loadingView.hidesWhenStopped = YES; + [self addSubview:_loadingView = loadingView]; + } + return _loadingView; +} + +- (void)setActivityIndicatorViewStyle:(UIActivityIndicatorViewStyle)activityIndicatorViewStyle +{ + _activityIndicatorViewStyle = activityIndicatorViewStyle; + + self.loadingView = nil; + [self setNeedsLayout]; +} +#pragma mark - 重写父类的方法 +- (void)prepare +{ + [super prepare]; + + self.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray; +} + +- (void)placeSubviews +{ + [super placeSubviews]; + + // 箭头的中心点 + CGFloat arrowCenterX = self.mj_w * 0.5; + if (!self.stateLabel.hidden) { + arrowCenterX -= self.labelLeftInset + self.stateLabel.mj_textWith * 0.5; + } + CGFloat arrowCenterY = self.mj_h * 0.5; + CGPoint arrowCenter = CGPointMake(arrowCenterX, arrowCenterY); + + // 箭头 + if (self.arrowView.constraints.count == 0) { + self.arrowView.mj_size = self.arrowView.image.size; + self.arrowView.center = arrowCenter; + } + + // 圈圈 + if (self.loadingView.constraints.count == 0) { + self.loadingView.center = arrowCenter; + } + + self.arrowView.tintColor = self.stateLabel.textColor; +} + +- (void)setState:(MJRefreshState)state +{ + MJRefreshCheckState + + // 根据状态做事情 + if (state == MJRefreshStateIdle) { + if (oldState == MJRefreshStateRefreshing) { + self.arrowView.transform = CGAffineTransformMakeRotation(0.000001 - M_PI); + [UIView animateWithDuration:MJRefreshSlowAnimationDuration animations:^{ + self.loadingView.alpha = 0.0; + } completion:^(BOOL finished) { + self.loadingView.alpha = 1.0; + [self.loadingView stopAnimating]; + + self.arrowView.hidden = NO; + }]; + } else { + self.arrowView.hidden = NO; + [self.loadingView stopAnimating]; + [UIView animateWithDuration:MJRefreshFastAnimationDuration animations:^{ + self.arrowView.transform = CGAffineTransformMakeRotation(0.000001 - M_PI); + }]; + } + } else if (state == MJRefreshStatePulling) { + self.arrowView.hidden = NO; + [self.loadingView stopAnimating]; + [UIView animateWithDuration:MJRefreshFastAnimationDuration animations:^{ + self.arrowView.transform = CGAffineTransformIdentity; + }]; + } else if (state == MJRefreshStateRefreshing) { + self.arrowView.hidden = YES; + [self.loadingView startAnimating]; + } else if (state == MJRefreshStateNoMoreData) { + self.arrowView.hidden = YES; + [self.loadingView stopAnimating]; + } +} + +@end diff --git a/JQQY/ThirdParty/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h b/JQQY/ThirdParty/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h new file mode 100755 index 0000000000000000000000000000000000000000..99b1483d16f5f5d197d0561e86966a05e5eaee0a --- /dev/null +++ b/JQQY/ThirdParty/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h @@ -0,0 +1,21 @@ +// +// MJRefreshBackStateFooter.h +// MJRefreshExample +// +// Created by MJ Lee on 15/6/13. +// Copyright © 2015年 小码哥. All rights reserved. +// + +#import "MJRefreshBackFooter.h" + +@interface MJRefreshBackStateFooter : MJRefreshBackFooter +/** 文字距离圈圈、箭头的距离 */ +@property (assign, nonatomic) CGFloat labelLeftInset; +/** 显示刷新状态的label */ +@property (weak, nonatomic, readonly) UILabel *stateLabel; +/** 设置state状态下的文字 */ +- (void)setTitle:(NSString *)title forState:(MJRefreshState)state; + +/** 获取state状态下的title */ +- (NSString *)titleForState:(MJRefreshState)state; +@end diff --git a/JQQY/ThirdParty/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.m b/JQQY/ThirdParty/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.m new file mode 100755 index 0000000000000000000000000000000000000000..cc784d00f8ab5bc4c9895c381a9e991617e70b88 --- /dev/null +++ b/JQQY/ThirdParty/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.m @@ -0,0 +1,82 @@ +// +// MJRefreshBackStateFooter.m +// MJRefreshExample +// +// Created by MJ Lee on 15/6/13. +// Copyright © 2015年 小码哥. All rights reserved. +// + +#import "MJRefreshBackStateFooter.h" + +@interface MJRefreshBackStateFooter() +{ + /** 显示刷新状态的label */ + __unsafe_unretained UILabel *_stateLabel; +} +/** 所有状态对应的文字 */ +@property (strong, nonatomic) NSMutableDictionary *stateTitles; +@end + +@implementation MJRefreshBackStateFooter +#pragma mark - 懒加载 +- (NSMutableDictionary *)stateTitles +{ + if (!_stateTitles) { + self.stateTitles = [NSMutableDictionary dictionary]; + } + return _stateTitles; +} + +- (UILabel *)stateLabel +{ + if (!_stateLabel) { + [self addSubview:_stateLabel = [UILabel mj_label]]; + } + return _stateLabel; +} + +#pragma mark - 公共方法 +- (void)setTitle:(NSString *)title forState:(MJRefreshState)state +{ + if (title == nil) return; + self.stateTitles[@(state)] = title; + self.stateLabel.text = self.stateTitles[@(self.state)]; +} + +- (NSString *)titleForState:(MJRefreshState)state { + return self.stateTitles[@(state)]; +} + +#pragma mark - 重写父类的方法 +- (void)prepare +{ + [super prepare]; + + // 初始化间距 + self.labelLeftInset = MJRefreshLabelLeftInset; + + // 初始化文字 + [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshBackFooterIdleText] forState:MJRefreshStateIdle]; + [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshBackFooterPullingText] forState:MJRefreshStatePulling]; + [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshBackFooterRefreshingText] forState:MJRefreshStateRefreshing]; + [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshBackFooterNoMoreDataText] forState:MJRefreshStateNoMoreData]; +} + +- (void)placeSubviews +{ + [super placeSubviews]; + + if (self.stateLabel.constraints.count) return; + + // 状态标签 + self.stateLabel.frame = self.bounds; +} + +- (void)setState:(MJRefreshState)state +{ + MJRefreshCheckState + + // 设置状态文字 + self.stateLabel.text = self.stateTitles[@(state)]; +} +@end diff --git a/JQQY/ThirdParty/MJRefresh/Custom/Header/MJRefreshGifHeader.h b/JQQY/ThirdParty/MJRefresh/Custom/Header/MJRefreshGifHeader.h new file mode 100755 index 0000000000000000000000000000000000000000..ce3ed42820c49c31ba39f37d6674a9c6882e0a12 --- /dev/null +++ b/JQQY/ThirdParty/MJRefresh/Custom/Header/MJRefreshGifHeader.h @@ -0,0 +1,17 @@ +// +// MJRefreshGifHeader.h +// MJRefreshExample +// +// Created by MJ Lee on 15/4/24. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "MJRefreshStateHeader.h" + +@interface MJRefreshGifHeader : MJRefreshStateHeader +@property (weak, nonatomic, readonly) UIImageView *gifView; + +/** 设置state状态下的动画图片images 动画持续时间duration*/ +- (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state; +- (void)setImages:(NSArray *)images forState:(MJRefreshState)state; +@end diff --git a/JQQY/ThirdParty/MJRefresh/Custom/Header/MJRefreshGifHeader.m b/JQQY/ThirdParty/MJRefresh/Custom/Header/MJRefreshGifHeader.m new file mode 100755 index 0000000000000000000000000000000000000000..f8bcc9ba8ebbb73065c5b8c10fa1c047ae6f9273 --- /dev/null +++ b/JQQY/ThirdParty/MJRefresh/Custom/Header/MJRefreshGifHeader.m @@ -0,0 +1,133 @@ +// +// MJRefreshGifHeader.m +// MJRefreshExample +// +// Created by MJ Lee on 15/4/24. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "MJRefreshGifHeader.h" + +@interface MJRefreshGifHeader() +{ + __unsafe_unretained UIImageView *_gifView; +} +/** 所有状态对应的动画图片 */ +@property (strong, nonatomic) NSMutableDictionary *stateImages; +/** 所有状态对应的动画时间 */ +@property (strong, nonatomic) NSMutableDictionary *stateDurations; +@end + +@implementation MJRefreshGifHeader +#pragma mark - 懒加载 +- (UIImageView *)gifView +{ + if (!_gifView) { + UIImageView *gifView = [[UIImageView alloc] init]; + [self addSubview:_gifView = gifView]; + } + return _gifView; +} + +- (NSMutableDictionary *)stateImages +{ + if (!_stateImages) { + self.stateImages = [NSMutableDictionary dictionary]; + } + return _stateImages; +} + +- (NSMutableDictionary *)stateDurations +{ + if (!_stateDurations) { + self.stateDurations = [NSMutableDictionary dictionary]; + } + return _stateDurations; +} + +#pragma mark - 公共方法 +- (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state +{ + if (images == nil) return; + + self.stateImages[@(state)] = images; + self.stateDurations[@(state)] = @(duration); + + /* 根据图片设置控件的高度 */ + UIImage *image = [images firstObject]; + if (image.size.height > self.mj_h) { + self.mj_h = image.size.height; + } +} + +- (void)setImages:(NSArray *)images forState:(MJRefreshState)state +{ + [self setImages:images duration:images.count * 0.1 forState:state]; +} + +#pragma mark - 实现父类的方法 +- (void)prepare +{ + [super prepare]; + + // 初始化间距 + self.labelLeftInset = 20; +} + +- (void)setPullingPercent:(CGFloat)pullingPercent +{ + [super setPullingPercent:pullingPercent]; + NSArray *images = self.stateImages[@(MJRefreshStateIdle)]; + if (self.state != MJRefreshStateIdle || images.count == 0) return; + // 停止动画 + [self.gifView stopAnimating]; + // 设置当前需要显示的图片 + NSUInteger index = images.count * pullingPercent; + if (index >= images.count) index = images.count - 1; + self.gifView.image = images[index]; +} + +- (void)placeSubviews +{ + [super placeSubviews]; + + if (self.gifView.constraints.count) return; + + self.gifView.frame = self.bounds; + if (self.stateLabel.hidden && self.lastUpdatedTimeLabel.hidden) { + self.gifView.contentMode = UIViewContentModeCenter; + } else { + self.gifView.contentMode = UIViewContentModeRight; + + CGFloat stateWidth = self.stateLabel.mj_textWith; + CGFloat timeWidth = 0.0; + if (!self.lastUpdatedTimeLabel.hidden) { + timeWidth = self.lastUpdatedTimeLabel.mj_textWith; + } + CGFloat textWidth = MAX(stateWidth, timeWidth); + self.gifView.mj_w = self.mj_w * 0.5 - textWidth * 0.5 - self.labelLeftInset; + } +} + +- (void)setState:(MJRefreshState)state +{ + MJRefreshCheckState + + // 根据状态做事情 + if (state == MJRefreshStatePulling || state == MJRefreshStateRefreshing) { + NSArray *images = self.stateImages[@(state)]; + if (images.count == 0) return; + + [self.gifView stopAnimating]; + if (images.count == 1) { // 单张图片 + self.gifView.image = [images lastObject]; + } else { // 多张图片 + self.gifView.animationImages = images; + self.gifView.animationDuration = [self.stateDurations[@(state)] doubleValue]; + [self.gifView startAnimating]; + } + } else if (state == MJRefreshStateIdle) { + [self.gifView stopAnimating]; + } +} +@end diff --git a/JQQY/ThirdParty/MJRefresh/Custom/Header/MJRefreshNormalHeader.h b/JQQY/ThirdParty/MJRefresh/Custom/Header/MJRefreshNormalHeader.h new file mode 100755 index 0000000000000000000000000000000000000000..547d05e7b1e6c6694d23d829ac848d0c01e8b6dd --- /dev/null +++ b/JQQY/ThirdParty/MJRefresh/Custom/Header/MJRefreshNormalHeader.h @@ -0,0 +1,15 @@ +// +// MJRefreshNormalHeader.h +// MJRefreshExample +// +// Created by MJ Lee on 15/4/24. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "MJRefreshStateHeader.h" + +@interface MJRefreshNormalHeader : MJRefreshStateHeader +@property (weak, nonatomic, readonly) UIImageView *arrowView; +/** 菊花的样式 */ +@property (assign, nonatomic) UIActivityIndicatorViewStyle activityIndicatorViewStyle; +@end diff --git a/JQQY/ThirdParty/MJRefresh/Custom/Header/MJRefreshNormalHeader.m b/JQQY/ThirdParty/MJRefresh/Custom/Header/MJRefreshNormalHeader.m new file mode 100755 index 0000000000000000000000000000000000000000..32d8de70f163ccf320fb1d02c83188df02cbf70d --- /dev/null +++ b/JQQY/ThirdParty/MJRefresh/Custom/Header/MJRefreshNormalHeader.m @@ -0,0 +1,127 @@ +// +// MJRefreshNormalHeader.m +// MJRefreshExample +// +// Created by MJ Lee on 15/4/24. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "MJRefreshNormalHeader.h" +#import "NSBundle+MJRefresh.h" + +@interface MJRefreshNormalHeader() +{ + __unsafe_unretained UIImageView *_arrowView; +} +@property (weak, nonatomic) UIActivityIndicatorView *loadingView; +@end + +@implementation MJRefreshNormalHeader +#pragma mark - 懒加载子控件 +- (UIImageView *)arrowView +{ + if (!_arrowView) { + UIImageView *arrowView = [[UIImageView alloc] initWithImage:[NSBundle mj_arrowImage]]; + [self addSubview:_arrowView = arrowView]; + } + return _arrowView; +} + +- (UIActivityIndicatorView *)loadingView +{ + if (!_loadingView) { + UIActivityIndicatorView *loadingView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:self.activityIndicatorViewStyle]; + loadingView.hidesWhenStopped = YES; + [self addSubview:_loadingView = loadingView]; + } + return _loadingView; +} + +#pragma mark - 公共方法 +- (void)setActivityIndicatorViewStyle:(UIActivityIndicatorViewStyle)activityIndicatorViewStyle +{ + _activityIndicatorViewStyle = activityIndicatorViewStyle; + + self.loadingView = nil; + [self setNeedsLayout]; +} + +#pragma mark - 重写父类的方法 +- (void)prepare +{ + [super prepare]; + + self.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray; +} + +- (void)placeSubviews +{ + [super placeSubviews]; + + // 箭头的中心点 + CGFloat arrowCenterX = self.mj_w * 0.5; + if (!self.stateLabel.hidden) { + CGFloat stateWidth = self.stateLabel.mj_textWith; + CGFloat timeWidth = 0.0; + if (!self.lastUpdatedTimeLabel.hidden) { + timeWidth = self.lastUpdatedTimeLabel.mj_textWith; + } + CGFloat textWidth = MAX(stateWidth, timeWidth); + arrowCenterX -= textWidth / 2 + self.labelLeftInset; + } + CGFloat arrowCenterY = self.mj_h * 0.5; + CGPoint arrowCenter = CGPointMake(arrowCenterX, arrowCenterY); + + // 箭头 + if (self.arrowView.constraints.count == 0) { + self.arrowView.mj_size = self.arrowView.image.size; + self.arrowView.center = arrowCenter; + } + + // 圈圈 + if (self.loadingView.constraints.count == 0) { + self.loadingView.center = arrowCenter; + } + + self.arrowView.tintColor = self.stateLabel.textColor; +} + +- (void)setState:(MJRefreshState)state +{ + MJRefreshCheckState + + // 根据状态做事情 + if (state == MJRefreshStateIdle) { + if (oldState == MJRefreshStateRefreshing) { + self.arrowView.transform = CGAffineTransformIdentity; + + [UIView animateWithDuration:MJRefreshSlowAnimationDuration animations:^{ + self.loadingView.alpha = 0.0; + } completion:^(BOOL finished) { + // 如果执行完动画发现不是idle状态,就直接返回,进入其他状态 + if (self.state != MJRefreshStateIdle) return; + + self.loadingView.alpha = 1.0; + [self.loadingView stopAnimating]; + self.arrowView.hidden = NO; + }]; + } else { + [self.loadingView stopAnimating]; + self.arrowView.hidden = NO; + [UIView animateWithDuration:MJRefreshFastAnimationDuration animations:^{ + self.arrowView.transform = CGAffineTransformIdentity; + }]; + } + } else if (state == MJRefreshStatePulling) { + [self.loadingView stopAnimating]; + self.arrowView.hidden = NO; + [UIView animateWithDuration:MJRefreshFastAnimationDuration animations:^{ + self.arrowView.transform = CGAffineTransformMakeRotation(0.000001 - M_PI); + }]; + } else if (state == MJRefreshStateRefreshing) { + self.loadingView.alpha = 1.0; // 防止refreshing -> idle的动画完毕动作没有被执行 + [self.loadingView startAnimating]; + self.arrowView.hidden = YES; + } +} +@end diff --git a/JQQY/ThirdParty/MJRefresh/Custom/Header/MJRefreshStateHeader.h b/JQQY/ThirdParty/MJRefresh/Custom/Header/MJRefreshStateHeader.h new file mode 100755 index 0000000000000000000000000000000000000000..1f3dbc4067be21004100b035675d5a286d303791 --- /dev/null +++ b/JQQY/ThirdParty/MJRefresh/Custom/Header/MJRefreshStateHeader.h @@ -0,0 +1,25 @@ +// +// MJRefreshStateHeader.h +// MJRefreshExample +// +// Created by MJ Lee on 15/4/24. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "MJRefreshHeader.h" + +@interface MJRefreshStateHeader : MJRefreshHeader +#pragma mark - 刷新时间相关 +/** 利用这个block来决定显示的更新时间文字 */ +@property (copy, nonatomic) NSString *(^lastUpdatedTimeText)(NSDate *lastUpdatedTime); +/** 显示上一次刷新时间的label */ +@property (weak, nonatomic, readonly) UILabel *lastUpdatedTimeLabel; + +#pragma mark - 状态相关 +/** 文字距离圈圈、箭头的距离 */ +@property (assign, nonatomic) CGFloat labelLeftInset; +/** 显示刷新状态的label */ +@property (weak, nonatomic, readonly) UILabel *stateLabel; +/** 设置state状态下的文字 */ +- (void)setTitle:(NSString *)title forState:(MJRefreshState)state; +@end diff --git a/JQQY/ThirdParty/MJRefresh/Custom/Header/MJRefreshStateHeader.m b/JQQY/ThirdParty/MJRefresh/Custom/Header/MJRefreshStateHeader.m new file mode 100755 index 0000000000000000000000000000000000000000..ca78b5269f4ad20c27b2481d357764fc8dc5a4f7 --- /dev/null +++ b/JQQY/ThirdParty/MJRefresh/Custom/Header/MJRefreshStateHeader.m @@ -0,0 +1,167 @@ +// +// MJRefreshStateHeader.m +// MJRefreshExample +// +// Created by MJ Lee on 15/4/24. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "MJRefreshStateHeader.h" + +@interface MJRefreshStateHeader() +{ + /** 显示上一次刷新时间的label */ + __unsafe_unretained UILabel *_lastUpdatedTimeLabel; + /** 显示刷新状态的label */ + __unsafe_unretained UILabel *_stateLabel; +} +/** 所有状态对应的文字 */ +@property (strong, nonatomic) NSMutableDictionary *stateTitles; +@end + +@implementation MJRefreshStateHeader +#pragma mark - 懒加载 +- (NSMutableDictionary *)stateTitles +{ + if (!_stateTitles) { + self.stateTitles = [NSMutableDictionary dictionary]; + } + return _stateTitles; +} + +- (UILabel *)stateLabel +{ + if (!_stateLabel) { + [self addSubview:_stateLabel = [UILabel mj_label]]; + } + return _stateLabel; +} + +- (UILabel *)lastUpdatedTimeLabel +{ + if (!_lastUpdatedTimeLabel) { + [self addSubview:_lastUpdatedTimeLabel = [UILabel mj_label]]; + } + return _lastUpdatedTimeLabel; +} + +#pragma mark - 公共方法 +- (void)setTitle:(NSString *)title forState:(MJRefreshState)state +{ + if (title == nil) return; + self.stateTitles[@(state)] = title; + self.stateLabel.text = self.stateTitles[@(self.state)]; +} + +#pragma mark - 日历获取在9.x之后的系统使用currentCalendar会出异常。在8.0之后使用系统新API。 +- (NSCalendar *)currentCalendar { + if ([NSCalendar respondsToSelector:@selector(calendarWithIdentifier:)]) { + return [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian]; + } + return [NSCalendar currentCalendar]; +} + +#pragma mark key的处理 +- (void)setLastUpdatedTimeKey:(NSString *)lastUpdatedTimeKey +{ + [super setLastUpdatedTimeKey:lastUpdatedTimeKey]; + + // 如果label隐藏了,就不用再处理 + if (self.lastUpdatedTimeLabel.hidden) return; + + NSDate *lastUpdatedTime = [[NSUserDefaults standardUserDefaults] objectForKey:lastUpdatedTimeKey]; + + // 如果有block + if (self.lastUpdatedTimeText) { + self.lastUpdatedTimeLabel.text = self.lastUpdatedTimeText(lastUpdatedTime); + return; + } + + if (lastUpdatedTime) { + // 1.获得年月日 + NSCalendar *calendar = [self currentCalendar]; + NSUInteger unitFlags = NSCalendarUnitYear| NSCalendarUnitMonth | NSCalendarUnitDay |NSCalendarUnitHour |NSCalendarUnitMinute; + NSDateComponents *cmp1 = [calendar components:unitFlags fromDate:lastUpdatedTime]; + NSDateComponents *cmp2 = [calendar components:unitFlags fromDate:[NSDate date]]; + + // 2.格式化日期 + NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; + BOOL isToday = NO; + if ([cmp1 day] == [cmp2 day]) { // 今天 + formatter.dateFormat = @" HH:mm"; + isToday = YES; + } else if ([cmp1 year] == [cmp2 year]) { // 今年 + formatter.dateFormat = @"MM-dd HH:mm"; + } else { + formatter.dateFormat = @"yyyy-MM-dd HH:mm"; + } + NSString *time = [formatter stringFromDate:lastUpdatedTime]; + + // 3.显示日期 + self.lastUpdatedTimeLabel.text = [NSString stringWithFormat:@"%@%@%@", + [NSBundle mj_localizedStringForKey:MJRefreshHeaderLastTimeText], + isToday ? [NSBundle mj_localizedStringForKey:MJRefreshHeaderDateTodayText] : @"", + time]; + } else { + self.lastUpdatedTimeLabel.text = [NSString stringWithFormat:@"%@%@", + [NSBundle mj_localizedStringForKey:MJRefreshHeaderLastTimeText], + [NSBundle mj_localizedStringForKey:MJRefreshHeaderNoneLastDateText]]; + } +} + +#pragma mark - 覆盖父类的方法 +- (void)prepare +{ + [super prepare]; + + // 初始化间距 + self.labelLeftInset = MJRefreshLabelLeftInset; + + // 初始化文字 + [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshHeaderIdleText] forState:MJRefreshStateIdle]; + [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshHeaderPullingText] forState:MJRefreshStatePulling]; + [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshHeaderRefreshingText] forState:MJRefreshStateRefreshing]; +} + +- (void)placeSubviews +{ + [super placeSubviews]; + + if (self.stateLabel.hidden) return; + + BOOL noConstrainsOnStatusLabel = self.stateLabel.constraints.count == 0; + + if (self.lastUpdatedTimeLabel.hidden) { + // 状态 + if (noConstrainsOnStatusLabel) self.stateLabel.frame = self.bounds; + } else { + CGFloat stateLabelH = self.mj_h * 0.5; + // 状态 + if (noConstrainsOnStatusLabel) { + self.stateLabel.mj_x = 0; + self.stateLabel.mj_y = 0; + self.stateLabel.mj_w = self.mj_w; + self.stateLabel.mj_h = stateLabelH; + } + + // 更新时间 + if (self.lastUpdatedTimeLabel.constraints.count == 0) { + self.lastUpdatedTimeLabel.mj_x = 0; + self.lastUpdatedTimeLabel.mj_y = stateLabelH; + self.lastUpdatedTimeLabel.mj_w = self.mj_w; + self.lastUpdatedTimeLabel.mj_h = self.mj_h - self.lastUpdatedTimeLabel.mj_y; + } + } +} + +- (void)setState:(MJRefreshState)state +{ + MJRefreshCheckState + + // 设置状态文字 + self.stateLabel.text = self.stateTitles[@(state)]; + + // 重新设置key(重新显示时间) + self.lastUpdatedTimeKey = self.lastUpdatedTimeKey; +} +@end diff --git a/JQQY/ThirdParty/MJRefresh/MJRefresh.bundle/arrow@2x.png b/JQQY/ThirdParty/MJRefresh/MJRefresh.bundle/arrow@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..b1078de8653b1c7167cb0c0663b595b0b42cfede Binary files /dev/null and b/JQQY/ThirdParty/MJRefresh/MJRefresh.bundle/arrow@2x.png differ diff --git a/JQQY/ThirdParty/MJRefresh/MJRefresh.bundle/en.lproj/Localizable.strings b/JQQY/ThirdParty/MJRefresh/MJRefresh.bundle/en.lproj/Localizable.strings new file mode 100755 index 0000000000000000000000000000000000000000..a75f6b187ad35411091aa61b2aa45f906edb4be9 Binary files /dev/null and b/JQQY/ThirdParty/MJRefresh/MJRefresh.bundle/en.lproj/Localizable.strings differ diff --git a/JQQY/ThirdParty/MJRefresh/MJRefresh.bundle/zh-Hans.lproj/Localizable.strings b/JQQY/ThirdParty/MJRefresh/MJRefresh.bundle/zh-Hans.lproj/Localizable.strings new file mode 100755 index 0000000000000000000000000000000000000000..0a36d7e1e7cb16abcc8301358607a1d9fe6a6523 Binary files /dev/null and b/JQQY/ThirdParty/MJRefresh/MJRefresh.bundle/zh-Hans.lproj/Localizable.strings differ diff --git a/JQQY/ThirdParty/MJRefresh/MJRefresh.bundle/zh-Hant.lproj/Localizable.strings b/JQQY/ThirdParty/MJRefresh/MJRefresh.bundle/zh-Hant.lproj/Localizable.strings new file mode 100755 index 0000000000000000000000000000000000000000..7924bba776eab941b15043550306d7b8e0397b09 --- /dev/null +++ b/JQQY/ThirdParty/MJRefresh/MJRefresh.bundle/zh-Hant.lproj/Localizable.strings @@ -0,0 +1,16 @@ +"MJRefreshHeaderIdleText" = "下拉可以刷新"; +"MJRefreshHeaderPullingText" = "鬆開立即刷新"; +"MJRefreshHeaderRefreshingText" = "正在刷新數據中..."; + +"MJRefreshAutoFooterIdleText" = "點擊或上拉加載更多"; +"MJRefreshAutoFooterRefreshingText" = "正在加載更多的數據..."; +"MJRefreshAutoFooterNoMoreDataText" = "已經全部加載完畢"; + +"MJRefreshBackFooterIdleText" = "上拉可以加載更多"; +"MJRefreshBackFooterPullingText" = "鬆開立即加載更多"; +"MJRefreshBackFooterRefreshingText" = "正在加載更多的數據..."; +"MJRefreshBackFooterNoMoreDataText" = "已經全部加載完畢"; + +"MJRefreshHeaderLastTimeText" = "最後更新:"; +"MJRefreshHeaderDateTodayText" = "今天"; +"MJRefreshHeaderNoneLastDateText" = "無記錄"; diff --git a/JQQY/ThirdParty/MJRefresh/MJRefresh.h b/JQQY/ThirdParty/MJRefresh/MJRefresh.h new file mode 100755 index 0000000000000000000000000000000000000000..196e6ecb0c597831b168350c0ce837c2129733de --- /dev/null +++ b/JQQY/ThirdParty/MJRefresh/MJRefresh.h @@ -0,0 +1,14 @@ +// 代码地址: https://github.com/CoderMJLee/MJRefresh +// 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000 + +#import "UIScrollView+MJRefresh.h" +#import "UIScrollView+MJExtension.h" +#import "UIView+MJExtension.h" + +#import "MJRefreshNormalHeader.h" +#import "MJRefreshGifHeader.h" + +#import "MJRefreshBackNormalFooter.h" +#import "MJRefreshBackGifFooter.h" +#import "MJRefreshAutoNormalFooter.h" +#import "MJRefreshAutoGifFooter.h" \ No newline at end of file diff --git a/JQQY/ThirdParty/MJRefresh/MJRefreshConst.h b/JQQY/ThirdParty/MJRefresh/MJRefreshConst.h new file mode 100755 index 0000000000000000000000000000000000000000..4a720212b5bf489c956bbc5a555ab8d5011b0cb3 --- /dev/null +++ b/JQQY/ThirdParty/MJRefresh/MJRefreshConst.h @@ -0,0 +1,67 @@ +// 代码地址: https://github.com/CoderMJLee/MJRefresh +// 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000 +#import +#import + +// 弱引用 +#define MJWeakSelf __weak typeof(self) weakSelf = self; + +// 日志输出 +#ifdef DEBUG +#define MJRefreshLog(...) NSLog(__VA_ARGS__) +#else +#define MJRefreshLog(...) +#endif + +// 过期提醒 +#define MJRefreshDeprecated(instead) NS_DEPRECATED(2_0, 2_0, 2_0, 2_0, instead) + +// 运行时objc_msgSend +#define MJRefreshMsgSend(...) ((void (*)(void *, SEL, UIView *))objc_msgSend)(__VA_ARGS__) +#define MJRefreshMsgTarget(target) (__bridge void *)(target) + +// RGB颜色 +#define MJRefreshColor(r, g, b) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:1.0] + +// 文字颜色 +#define MJRefreshLabelTextColor MJRefreshColor(90, 90, 90) + +// 字体大小 +#define MJRefreshLabelFont [UIFont boldSystemFontOfSize:14] + +// 常量 +UIKIT_EXTERN const CGFloat MJRefreshLabelLeftInset; +UIKIT_EXTERN const CGFloat MJRefreshHeaderHeight; +UIKIT_EXTERN const CGFloat MJRefreshFooterHeight; +UIKIT_EXTERN const CGFloat MJRefreshFastAnimationDuration; +UIKIT_EXTERN const CGFloat MJRefreshSlowAnimationDuration; + +UIKIT_EXTERN NSString *const MJRefreshKeyPathContentOffset; +UIKIT_EXTERN NSString *const MJRefreshKeyPathContentSize; +UIKIT_EXTERN NSString *const MJRefreshKeyPathContentInset; +UIKIT_EXTERN NSString *const MJRefreshKeyPathPanState; + +UIKIT_EXTERN NSString *const MJRefreshHeaderLastUpdatedTimeKey; + +UIKIT_EXTERN NSString *const MJRefreshHeaderIdleText; +UIKIT_EXTERN NSString *const MJRefreshHeaderPullingText; +UIKIT_EXTERN NSString *const MJRefreshHeaderRefreshingText; + +UIKIT_EXTERN NSString *const MJRefreshAutoFooterIdleText; +UIKIT_EXTERN NSString *const MJRefreshAutoFooterRefreshingText; +UIKIT_EXTERN NSString *const MJRefreshAutoFooterNoMoreDataText; + +UIKIT_EXTERN NSString *const MJRefreshBackFooterIdleText; +UIKIT_EXTERN NSString *const MJRefreshBackFooterPullingText; +UIKIT_EXTERN NSString *const MJRefreshBackFooterRefreshingText; +UIKIT_EXTERN NSString *const MJRefreshBackFooterNoMoreDataText; + +UIKIT_EXTERN NSString *const MJRefreshHeaderLastTimeText; +UIKIT_EXTERN NSString *const MJRefreshHeaderDateTodayText; +UIKIT_EXTERN NSString *const MJRefreshHeaderNoneLastDateText; + +// 状态检查 +#define MJRefreshCheckState \ +MJRefreshState oldState = self.state; \ +if (state == oldState) return; \ +[super setState:state]; diff --git a/JQQY/ThirdParty/MJRefresh/MJRefreshConst.m b/JQQY/ThirdParty/MJRefresh/MJRefreshConst.m new file mode 100755 index 0000000000000000000000000000000000000000..7c0733eee848b43c561bc5b2ce07f7a3d30b4b30 --- /dev/null +++ b/JQQY/ThirdParty/MJRefresh/MJRefreshConst.m @@ -0,0 +1,33 @@ +// 代码地址: https://github.com/CoderMJLee/MJRefresh +// 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000 +#import + +const CGFloat MJRefreshLabelLeftInset = 25; +const CGFloat MJRefreshHeaderHeight = 54.0; +const CGFloat MJRefreshFooterHeight = 44.0; +const CGFloat MJRefreshFastAnimationDuration = 0.25; +const CGFloat MJRefreshSlowAnimationDuration = 0.4; + +NSString *const MJRefreshKeyPathContentOffset = @"contentOffset"; +NSString *const MJRefreshKeyPathContentInset = @"contentInset"; +NSString *const MJRefreshKeyPathContentSize = @"contentSize"; +NSString *const MJRefreshKeyPathPanState = @"state"; + +NSString *const MJRefreshHeaderLastUpdatedTimeKey = @"MJRefreshHeaderLastUpdatedTimeKey"; + +NSString *const MJRefreshHeaderIdleText = @"MJRefreshHeaderIdleText"; +NSString *const MJRefreshHeaderPullingText = @"MJRefreshHeaderPullingText"; +NSString *const MJRefreshHeaderRefreshingText = @"MJRefreshHeaderRefreshingText"; + +NSString *const MJRefreshAutoFooterIdleText = @"MJRefreshAutoFooterIdleText"; +NSString *const MJRefreshAutoFooterRefreshingText = @"MJRefreshAutoFooterRefreshingText"; +NSString *const MJRefreshAutoFooterNoMoreDataText = @"MJRefreshAutoFooterNoMoreDataText"; + +NSString *const MJRefreshBackFooterIdleText = @"MJRefreshBackFooterIdleText"; +NSString *const MJRefreshBackFooterPullingText = @"MJRefreshBackFooterPullingText"; +NSString *const MJRefreshBackFooterRefreshingText = @"MJRefreshBackFooterRefreshingText"; +NSString *const MJRefreshBackFooterNoMoreDataText = @"MJRefreshBackFooterNoMoreDataText"; + +NSString *const MJRefreshHeaderLastTimeText = @"MJRefreshHeaderLastTimeText"; +NSString *const MJRefreshHeaderDateTodayText = @"MJRefreshHeaderDateTodayText"; +NSString *const MJRefreshHeaderNoneLastDateText = @"MJRefreshHeaderNoneLastDateText"; \ No newline at end of file diff --git a/JQQY/ThirdParty/MJRefresh/NSBundle+MJRefresh.h b/JQQY/ThirdParty/MJRefresh/NSBundle+MJRefresh.h new file mode 100755 index 0000000000000000000000000000000000000000..01df06c6abaaa4af9e67397a5680a5fc89c09574 --- /dev/null +++ b/JQQY/ThirdParty/MJRefresh/NSBundle+MJRefresh.h @@ -0,0 +1,16 @@ +// +// NSBundle+MJRefresh.h +// MJRefreshExample +// +// Created by MJ Lee on 16/6/13. +// Copyright © 2016年 小码哥. All rights reserved. +// + +#import + +@interface NSBundle (MJRefresh) ++ (instancetype)mj_refreshBundle; ++ (UIImage *)mj_arrowImage; ++ (NSString *)mj_localizedStringForKey:(NSString *)key value:(NSString *)value; ++ (NSString *)mj_localizedStringForKey:(NSString *)key; +@end diff --git a/JQQY/ThirdParty/MJRefresh/NSBundle+MJRefresh.m b/JQQY/ThirdParty/MJRefresh/NSBundle+MJRefresh.m new file mode 100755 index 0000000000000000000000000000000000000000..c155ad496166d06ff77d538b065838b20d9547d6 --- /dev/null +++ b/JQQY/ThirdParty/MJRefresh/NSBundle+MJRefresh.m @@ -0,0 +1,61 @@ +// +// NSBundle+MJRefresh.m +// MJRefreshExample +// +// Created by MJ Lee on 16/6/13. +// Copyright © 2016年 小码哥. All rights reserved. +// + +#import "NSBundle+MJRefresh.h" +#import "MJRefreshComponent.h" + +@implementation NSBundle (MJRefresh) ++ (instancetype)mj_refreshBundle +{ + static NSBundle *refreshBundle = nil; + if (refreshBundle == nil) { + // 这里不使用mainBundle是为了适配pod 1.x和0.x + refreshBundle = [NSBundle bundleWithPath:[[NSBundle bundleForClass:[MJRefreshComponent class]] pathForResource:@"MJRefresh" ofType:@"bundle"]]; + } + return refreshBundle; +} + ++ (UIImage *)mj_arrowImage +{ + static UIImage *arrowImage = nil; + if (arrowImage == nil) { + arrowImage = [[UIImage imageWithContentsOfFile:[[self mj_refreshBundle] pathForResource:@"arrow@2x" ofType:@"png"]] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; + } + return arrowImage; +} + ++ (NSString *)mj_localizedStringForKey:(NSString *)key +{ + return [self mj_localizedStringForKey:key value:nil]; +} + ++ (NSString *)mj_localizedStringForKey:(NSString *)key value:(NSString *)value +{ + static NSBundle *bundle = nil; + if (bundle == nil) { + // (iOS获取的语言字符串比较不稳定)目前框架只处理en、zh-Hans、zh-Hant三种情况,其他按照系统默认处理 + NSString *language = [NSLocale preferredLanguages].firstObject; + if ([language hasPrefix:@"en"]) { + language = @"en"; + } else if ([language hasPrefix:@"zh"]) { + if ([language rangeOfString:@"Hans"].location != NSNotFound) { + language = @"zh-Hans"; // 简体中文 + } else { // zh-Hant\zh-HK\zh-TW + language = @"zh-Hant"; // 繁體中文 + } + } else { + language = @"en"; + } + + // 从MJRefresh.bundle中查找资源 + bundle = [NSBundle bundleWithPath:[[NSBundle mj_refreshBundle] pathForResource:language ofType:@"lproj"]]; + } + value = [bundle localizedStringForKey:key value:value table:nil]; + return [[NSBundle mainBundle] localizedStringForKey:key value:value table:nil]; +} +@end diff --git a/JQQY/ThirdParty/MJRefresh/UIScrollView+MJExtension.h b/JQQY/ThirdParty/MJRefresh/UIScrollView+MJExtension.h new file mode 100755 index 0000000000000000000000000000000000000000..dd70d088846068bf3878cb2925b3f3c884cb3a73 --- /dev/null +++ b/JQQY/ThirdParty/MJRefresh/UIScrollView+MJExtension.h @@ -0,0 +1,25 @@ +// 代码地址: https://github.com/CoderMJLee/MJRefresh +// 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000 +// UIScrollView+Extension.h +// MJRefreshExample +// +// Created by MJ Lee on 14-5-28. +// Copyright (c) 2014年 小码哥. All rights reserved. +// + +#import + +@interface UIScrollView (MJExtension) +@property (readonly, nonatomic) UIEdgeInsets mj_inset; + +@property (assign, nonatomic) CGFloat mj_insetT; +@property (assign, nonatomic) CGFloat mj_insetB; +@property (assign, nonatomic) CGFloat mj_insetL; +@property (assign, nonatomic) CGFloat mj_insetR; + +@property (assign, nonatomic) CGFloat mj_offsetX; +@property (assign, nonatomic) CGFloat mj_offsetY; + +@property (assign, nonatomic) CGFloat mj_contentW; +@property (assign, nonatomic) CGFloat mj_contentH; +@end diff --git a/JQQY/ThirdParty/MJRefresh/UIScrollView+MJExtension.m b/JQQY/ThirdParty/MJRefresh/UIScrollView+MJExtension.m new file mode 100755 index 0000000000000000000000000000000000000000..c1fd9cc80519717231360d60daf0ec7fd9eecc45 --- /dev/null +++ b/JQQY/ThirdParty/MJRefresh/UIScrollView+MJExtension.m @@ -0,0 +1,146 @@ +// 代码地址: https://github.com/CoderMJLee/MJRefresh +// 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000 +// UIScrollView+Extension.m +// MJRefreshExample +// +// Created by MJ Lee on 14-5-28. +// Copyright (c) 2014年 小码哥. All rights reserved. +// + +#import "UIScrollView+MJExtension.h" +#import + +#define SYSTEM_VERSION_GREATER_NOT_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending) + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunguarded-availability-new" + +@implementation UIScrollView (MJExtension) + +- (UIEdgeInsets)mj_inset +{ +#ifdef __IPHONE_11_0 + if (SYSTEM_VERSION_GREATER_NOT_LESS_THAN(@"11.0")) { + return self.adjustedContentInset; + } +#endif + return self.contentInset; +} + +- (void)setMj_insetT:(CGFloat)mj_insetT +{ + UIEdgeInsets inset = self.contentInset; + inset.top = mj_insetT; +#ifdef __IPHONE_11_0 + if (SYSTEM_VERSION_GREATER_NOT_LESS_THAN(@"11.0")) { + inset.top -= (self.adjustedContentInset.top - self.contentInset.top); + } +#endif + self.contentInset = inset; +} + +- (CGFloat)mj_insetT +{ + return self.mj_inset.top; +} + +- (void)setMj_insetB:(CGFloat)mj_insetB +{ + UIEdgeInsets inset = self.contentInset; + inset.bottom = mj_insetB; +#ifdef __IPHONE_11_0 + if (SYSTEM_VERSION_GREATER_NOT_LESS_THAN(@"11.0")) { + inset.bottom -= (self.adjustedContentInset.bottom - self.contentInset.bottom); + } +#endif + self.contentInset = inset; +} + +- (CGFloat)mj_insetB +{ + return self.mj_inset.bottom; +} + +- (void)setMj_insetL:(CGFloat)mj_insetL +{ + UIEdgeInsets inset = self.contentInset; + inset.left = mj_insetL; +#ifdef __IPHONE_11_0 + if (SYSTEM_VERSION_GREATER_NOT_LESS_THAN(@"11.0")) { + inset.left -= (self.adjustedContentInset.left - self.contentInset.left); + } +#endif + self.contentInset = inset; +} + +- (CGFloat)mj_insetL +{ + return self.mj_inset.left; +} + +- (void)setMj_insetR:(CGFloat)mj_insetR +{ + UIEdgeInsets inset = self.contentInset; + inset.right = mj_insetR; +#ifdef __IPHONE_11_0 + if (SYSTEM_VERSION_GREATER_NOT_LESS_THAN(@"11.0")) { + inset.right -= (self.adjustedContentInset.right - self.contentInset.right); + } +#endif + self.contentInset = inset; +} + +- (CGFloat)mj_insetR +{ + return self.mj_inset.right; +} + +- (void)setMj_offsetX:(CGFloat)mj_offsetX +{ + CGPoint offset = self.contentOffset; + offset.x = mj_offsetX; + self.contentOffset = offset; +} + +- (CGFloat)mj_offsetX +{ + return self.contentOffset.x; +} + +- (void)setMj_offsetY:(CGFloat)mj_offsetY +{ + CGPoint offset = self.contentOffset; + offset.y = mj_offsetY; + self.contentOffset = offset; +} + +- (CGFloat)mj_offsetY +{ + return self.contentOffset.y; +} + +- (void)setMj_contentW:(CGFloat)mj_contentW +{ + CGSize size = self.contentSize; + size.width = mj_contentW; + self.contentSize = size; +} + +- (CGFloat)mj_contentW +{ + return self.contentSize.width; +} + +- (void)setMj_contentH:(CGFloat)mj_contentH +{ + CGSize size = self.contentSize; + size.height = mj_contentH; + self.contentSize = size; +} + +- (CGFloat)mj_contentH +{ + return self.contentSize.height; +} +@end +#pragma clang diagnostic pop diff --git a/JQQY/ThirdParty/MJRefresh/UIScrollView+MJRefresh.h b/JQQY/ThirdParty/MJRefresh/UIScrollView+MJRefresh.h new file mode 100755 index 0000000000000000000000000000000000000000..17d4715382122a89c49b07978dbb023997944695 --- /dev/null +++ b/JQQY/ThirdParty/MJRefresh/UIScrollView+MJRefresh.h @@ -0,0 +1,26 @@ +// 代码地址: https://github.com/CoderMJLee/MJRefresh +// 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000 +// UIScrollView+MJRefresh.h +// MJRefreshExample +// +// Created by MJ Lee on 15/3/4. +// Copyright (c) 2015年 小码哥. All rights reserved. +// 给ScrollView增加下拉刷新、上拉刷新的功能 + +#import +#import "MJRefreshConst.h" + +@class MJRefreshHeader, MJRefreshFooter; + +@interface UIScrollView (MJRefresh) +/** 下拉刷新控件 */ +@property (strong, nonatomic) MJRefreshHeader *mj_header; +@property (strong, nonatomic) MJRefreshHeader *header MJRefreshDeprecated("使用mj_header"); +/** 上拉刷新控件 */ +@property (strong, nonatomic) MJRefreshFooter *mj_footer; +@property (strong, nonatomic) MJRefreshFooter *footer MJRefreshDeprecated("使用mj_footer"); + +#pragma mark - other +- (NSInteger)mj_totalDataCount; +@property (copy, nonatomic) void (^mj_reloadDataBlock)(NSInteger totalDataCount); +@end diff --git a/JQQY/ThirdParty/MJRefresh/UIScrollView+MJRefresh.m b/JQQY/ThirdParty/MJRefresh/UIScrollView+MJRefresh.m new file mode 100755 index 0000000000000000000000000000000000000000..b1b99426f394cbc8c2675658e42bfafb8891ba26 --- /dev/null +++ b/JQQY/ThirdParty/MJRefresh/UIScrollView+MJRefresh.m @@ -0,0 +1,163 @@ +// 代码地址: https://github.com/CoderMJLee/MJRefresh +// 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000 +// UIScrollView+MJRefresh.m +// MJRefreshExample +// +// Created by MJ Lee on 15/3/4. +// Copyright (c) 2015年 小码哥. All rights reserved. +// + +#import "UIScrollView+MJRefresh.h" +#import "MJRefreshHeader.h" +#import "MJRefreshFooter.h" +#import + +@implementation NSObject (MJRefresh) + ++ (void)exchangeInstanceMethod1:(SEL)method1 method2:(SEL)method2 +{ + method_exchangeImplementations(class_getInstanceMethod(self, method1), class_getInstanceMethod(self, method2)); +} + ++ (void)exchangeClassMethod1:(SEL)method1 method2:(SEL)method2 +{ + method_exchangeImplementations(class_getClassMethod(self, method1), class_getClassMethod(self, method2)); +} + +@end + +@implementation UIScrollView (MJRefresh) + +#pragma mark - header +static const char MJRefreshHeaderKey = '\0'; +- (void)setMj_header:(MJRefreshHeader *)mj_header +{ + if (mj_header != self.mj_header) { + // 删除旧的,添加新的 + [self.mj_header removeFromSuperview]; + [self insertSubview:mj_header atIndex:0]; + + // 存储新的 + [self willChangeValueForKey:@"mj_header"]; // KVO + objc_setAssociatedObject(self, &MJRefreshHeaderKey, + mj_header, OBJC_ASSOCIATION_ASSIGN); + [self didChangeValueForKey:@"mj_header"]; // KVO + } +} + +- (MJRefreshHeader *)mj_header +{ + return objc_getAssociatedObject(self, &MJRefreshHeaderKey); +} + +#pragma mark - footer +static const char MJRefreshFooterKey = '\0'; +- (void)setMj_footer:(MJRefreshFooter *)mj_footer +{ + if (mj_footer != self.mj_footer) { + // 删除旧的,添加新的 + [self.mj_footer removeFromSuperview]; + [self insertSubview:mj_footer atIndex:0]; + + // 存储新的 + [self willChangeValueForKey:@"mj_footer"]; // KVO + objc_setAssociatedObject(self, &MJRefreshFooterKey, + mj_footer, OBJC_ASSOCIATION_ASSIGN); + [self didChangeValueForKey:@"mj_footer"]; // KVO + } +} + +- (MJRefreshFooter *)mj_footer +{ + return objc_getAssociatedObject(self, &MJRefreshFooterKey); +} + +#pragma mark - 过期 +- (void)setFooter:(MJRefreshFooter *)footer +{ + self.mj_footer = footer; +} + +- (MJRefreshFooter *)footer +{ + return self.mj_footer; +} + +- (void)setHeader:(MJRefreshHeader *)header +{ + self.mj_header = header; +} + +- (MJRefreshHeader *)header +{ + return self.mj_header; +} + +#pragma mark - other +- (NSInteger)mj_totalDataCount +{ + NSInteger totalCount = 0; + if ([self isKindOfClass:[UITableView class]]) { + UITableView *tableView = (UITableView *)self; + + for (NSInteger section = 0; section + +@interface UIView (MJExtension) +@property (assign, nonatomic) CGFloat mj_x; +@property (assign, nonatomic) CGFloat mj_y; +@property (assign, nonatomic) CGFloat mj_w; +@property (assign, nonatomic) CGFloat mj_h; +@property (assign, nonatomic) CGSize mj_size; +@property (assign, nonatomic) CGPoint mj_origin; +@end diff --git a/JQQY/ThirdParty/MJRefresh/UIView+MJExtension.m b/JQQY/ThirdParty/MJRefresh/UIView+MJExtension.m new file mode 100755 index 0000000000000000000000000000000000000000..7e8eda2d03f9a1437ed6e04955138e809cafdc13 --- /dev/null +++ b/JQQY/ThirdParty/MJRefresh/UIView+MJExtension.m @@ -0,0 +1,84 @@ +// 代码地址: https://github.com/CoderMJLee/MJRefresh +// 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000 +// UIView+Extension.m +// MJRefreshExample +// +// Created by MJ Lee on 14-5-28. +// Copyright (c) 2014年 小码哥. All rights reserved. +// + +#import "UIView+MJExtension.h" + +@implementation UIView (MJExtension) +- (void)setMj_x:(CGFloat)mj_x +{ + CGRect frame = self.frame; + frame.origin.x = mj_x; + self.frame = frame; +} + +- (CGFloat)mj_x +{ + return self.frame.origin.x; +} + +- (void)setMj_y:(CGFloat)mj_y +{ + CGRect frame = self.frame; + frame.origin.y = mj_y; + self.frame = frame; +} + +- (CGFloat)mj_y +{ + return self.frame.origin.y; +} + +- (void)setMj_w:(CGFloat)mj_w +{ + CGRect frame = self.frame; + frame.size.width = mj_w; + self.frame = frame; +} + +- (CGFloat)mj_w +{ + return self.frame.size.width; +} + +- (void)setMj_h:(CGFloat)mj_h +{ + CGRect frame = self.frame; + frame.size.height = mj_h; + self.frame = frame; +} + +- (CGFloat)mj_h +{ + return self.frame.size.height; +} + +- (void)setMj_size:(CGSize)mj_size +{ + CGRect frame = self.frame; + frame.size = mj_size; + self.frame = frame; +} + +- (CGSize)mj_size +{ + return self.frame.size; +} + +- (void)setMj_origin:(CGPoint)mj_origin +{ + CGRect frame = self.frame; + frame.origin = mj_origin; + self.frame = frame; +} + +- (CGPoint)mj_origin +{ + return self.frame.origin; +} +@end diff --git a/JQQY/ThirdParty/NewsAgent/.DS_Store b/JQQY/ThirdParty/NewsAgent/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..a5fea035c202cad49b9065d698eed743b66e01f2 Binary files /dev/null and b/JQQY/ThirdParty/NewsAgent/.DS_Store differ diff --git a/JQQY/ThirdParty/NewsAgent/Adagent.a b/JQQY/ThirdParty/NewsAgent/Adagent.a new file mode 100644 index 0000000000000000000000000000000000000000..8c201fb308bdcd1797477abda636564b1c777809 Binary files /dev/null and b/JQQY/ThirdParty/NewsAgent/Adagent.a differ diff --git a/JQQY/ThirdParty/NewsAgent/NACommentsView.xib b/JQQY/ThirdParty/NewsAgent/NACommentsView.xib new file mode 100644 index 0000000000000000000000000000000000000000..4b64e04f03f1d1c6a492ba7ae8e1e2e66c9bd214 --- /dev/null +++ b/JQQY/ThirdParty/NewsAgent/NACommentsView.xib @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/JQQY/ThirdParty/NewsAgent/NewsAgent.a b/JQQY/ThirdParty/NewsAgent/NewsAgent.a new file mode 100644 index 0000000000000000000000000000000000000000..79b3250a892468cba3ae48794816166786651ef5 Binary files /dev/null and b/JQQY/ThirdParty/NewsAgent/NewsAgent.a differ diff --git a/JQQY/ThirdParty/NewsAgent/NewsAgent.bundle/.DS_Store b/JQQY/ThirdParty/NewsAgent/NewsAgent.bundle/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..42f0f467d1b0fa2155301a1876670780545ec096 Binary files /dev/null and b/JQQY/ThirdParty/NewsAgent/NewsAgent.bundle/.DS_Store differ diff --git a/JQQY/ThirdParty/NewsAgent/NewsAgent.bundle/1.0.1/item/comments.html b/JQQY/ThirdParty/NewsAgent/NewsAgent.bundle/1.0.1/item/comments.html new file mode 100755 index 0000000000000000000000000000000000000000..b1df7d1b8b53c38728b0273dc92f59c4d87665a8 --- /dev/null +++ b/JQQY/ThirdParty/NewsAgent/NewsAgent.bundle/1.0.1/item/comments.html @@ -0,0 +1,29 @@ + + + + + + 查看评论 + + + + + + + + + + + +
+
+
    +
    抢沙发
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/JQQY/ThirdParty/NewsAgent/NewsAgent.bundle/1.0.1/item/default.html b/JQQY/ThirdParty/NewsAgent/NewsAgent.bundle/1.0.1/item/default.html new file mode 100755 index 0000000000000000000000000000000000000000..b756cd0b17908260b681d2a6aba732a8f0e49282 --- /dev/null +++ b/JQQY/ThirdParty/NewsAgent/NewsAgent.bundle/1.0.1/item/default.html @@ -0,0 +1,688 @@ + + + + + + + 详情 + + + + +
    +
    +
    +

    +
    + + + + + + + + +
    +
    + 内容加载中... +
    +
    + + +
    +
    + +
    +
    + + + + \ No newline at end of file diff --git a/JQQY/ThirdParty/NewsAgent/NewsAgent.bundle/1.0.1/item/img/default.jpg b/JQQY/ThirdParty/NewsAgent/NewsAgent.bundle/1.0.1/item/img/default.jpg new file mode 100755 index 0000000000000000000000000000000000000000..3dbd85113211a42567c8a2dd7adabe90d6cc93c1 Binary files /dev/null and b/JQQY/ThirdParty/NewsAgent/NewsAgent.bundle/1.0.1/item/img/default.jpg differ diff --git a/JQQY/ThirdParty/NewsAgent/NewsAgent.bundle/1.0.1/item/img/icon.png b/JQQY/ThirdParty/NewsAgent/NewsAgent.bundle/1.0.1/item/img/icon.png new file mode 100755 index 0000000000000000000000000000000000000000..ffd6a3c6e2110dd5467128712a8de81e7f78dca3 Binary files /dev/null and b/JQQY/ThirdParty/NewsAgent/NewsAgent.bundle/1.0.1/item/img/icon.png differ diff --git a/JQQY/ThirdParty/NewsAgent/NewsAgent.bundle/1.0.1/item/img/more.png b/JQQY/ThirdParty/NewsAgent/NewsAgent.bundle/1.0.1/item/img/more.png new file mode 100755 index 0000000000000000000000000000000000000000..bbe1fa9919015c4e3becb03b4463d0e20aa162a4 Binary files /dev/null and b/JQQY/ThirdParty/NewsAgent/NewsAgent.bundle/1.0.1/item/img/more.png differ diff --git a/JQQY/ThirdParty/NewsAgent/NewsAgent.bundle/1.0.1/item/img/tx/1.png b/JQQY/ThirdParty/NewsAgent/NewsAgent.bundle/1.0.1/item/img/tx/1.png new file mode 100755 index 0000000000000000000000000000000000000000..282990611a5bfc49ab695fae1f915177e3e95b0a Binary files /dev/null and b/JQQY/ThirdParty/NewsAgent/NewsAgent.bundle/1.0.1/item/img/tx/1.png differ diff --git a/JQQY/ThirdParty/NewsAgent/NewsAgent.bundle/1.0.1/item/img/tx/2.png b/JQQY/ThirdParty/NewsAgent/NewsAgent.bundle/1.0.1/item/img/tx/2.png new file mode 100755 index 0000000000000000000000000000000000000000..43577a662ac0ae91ed3ce3c0afe3c6a7e1864c7d Binary files /dev/null and b/JQQY/ThirdParty/NewsAgent/NewsAgent.bundle/1.0.1/item/img/tx/2.png differ diff --git a/JQQY/ThirdParty/NewsAgent/NewsAgent.bundle/1.0.1/item/img/tx/3.png b/JQQY/ThirdParty/NewsAgent/NewsAgent.bundle/1.0.1/item/img/tx/3.png new file mode 100755 index 0000000000000000000000000000000000000000..f10b933b60001b947d63017af9eb10f46a44fd0a Binary files /dev/null and b/JQQY/ThirdParty/NewsAgent/NewsAgent.bundle/1.0.1/item/img/tx/3.png differ diff --git a/JQQY/ThirdParty/NewsAgent/NewsAgent.bundle/1.0.1/item/img/tx/4.png b/JQQY/ThirdParty/NewsAgent/NewsAgent.bundle/1.0.1/item/img/tx/4.png new file mode 100755 index 0000000000000000000000000000000000000000..23171c1b02412be809a6b2840a87b775019f6798 Binary files /dev/null and b/JQQY/ThirdParty/NewsAgent/NewsAgent.bundle/1.0.1/item/img/tx/4.png differ diff --git a/JQQY/ThirdParty/NewsAgent/NewsAgent.bundle/1.0.1/item/img/tx/5.png b/JQQY/ThirdParty/NewsAgent/NewsAgent.bundle/1.0.1/item/img/tx/5.png new file mode 100755 index 0000000000000000000000000000000000000000..3f6d96e48531073fe3503b1836544d0dfacd35d0 Binary files /dev/null and b/JQQY/ThirdParty/NewsAgent/NewsAgent.bundle/1.0.1/item/img/tx/5.png differ diff --git a/JQQY/ThirdParty/NewsAgent/NewsAgent.bundle/1.0.1/item/img/tx/6.png b/JQQY/ThirdParty/NewsAgent/NewsAgent.bundle/1.0.1/item/img/tx/6.png new file mode 100755 index 0000000000000000000000000000000000000000..7c8616d53891cb88b9d90abf65171ff3a3feef4b Binary files /dev/null and b/JQQY/ThirdParty/NewsAgent/NewsAgent.bundle/1.0.1/item/img/tx/6.png differ diff --git a/JQQY/ThirdParty/NewsAgent/NewsAgent.bundle/1.0.1/item/img/tx/7.png b/JQQY/ThirdParty/NewsAgent/NewsAgent.bundle/1.0.1/item/img/tx/7.png new file mode 100755 index 0000000000000000000000000000000000000000..ca76405e982d8fa365c4ac1f8f2af20ec4d5ec22 Binary files /dev/null and b/JQQY/ThirdParty/NewsAgent/NewsAgent.bundle/1.0.1/item/img/tx/7.png differ diff --git a/JQQY/ThirdParty/NewsAgent/NewsAgent.bundle/1.0.1/item/img/tx/8.png b/JQQY/ThirdParty/NewsAgent/NewsAgent.bundle/1.0.1/item/img/tx/8.png new file mode 100755 index 0000000000000000000000000000000000000000..83428cf57057f2a1ee82f176da7f323e5aa9ffd8 Binary files /dev/null and b/JQQY/ThirdParty/NewsAgent/NewsAgent.bundle/1.0.1/item/img/tx/8.png differ diff --git a/JQQY/ThirdParty/NewsAgent/NewsAgent.bundle/1.0.1/item/img/zan-active.png b/JQQY/ThirdParty/NewsAgent/NewsAgent.bundle/1.0.1/item/img/zan-active.png new file mode 100755 index 0000000000000000000000000000000000000000..5f07e08b043b34f7a4223a5069154d5abf519087 Binary files /dev/null and b/JQQY/ThirdParty/NewsAgent/NewsAgent.bundle/1.0.1/item/img/zan-active.png differ diff --git a/JQQY/ThirdParty/NewsAgent/NewsAgent.bundle/1.0.1/item/img/zan.png b/JQQY/ThirdParty/NewsAgent/NewsAgent.bundle/1.0.1/item/img/zan.png new file mode 100755 index 0000000000000000000000000000000000000000..aba620e9d38c4529ee27a50492110839278bbc45 Binary files /dev/null and b/JQQY/ThirdParty/NewsAgent/NewsAgent.bundle/1.0.1/item/img/zan.png differ diff --git a/JQQY/ThirdParty/NewsAgent/NewsAgent.bundle/1.0.1/item/libs/jquery.min.js b/JQQY/ThirdParty/NewsAgent/NewsAgent.bundle/1.0.1/item/libs/jquery.min.js new file mode 100755 index 0000000000000000000000000000000000000000..95ef5d83f5973e89da9e9b94a35a396ac4ee2c7d --- /dev/null +++ b/JQQY/ThirdParty/NewsAgent/NewsAgent.bundle/1.0.1/item/libs/jquery.min.js @@ -0,0 +1,5 @@ +/*! jQuery v1.10.2 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license +*/ +(function(e,t){var n,r,i=typeof t,o=e.location,a=e.document,s=a.documentElement,l=e.jQuery,u=e.$,c={},p=[],f="1.10.2",d=p.concat,h=p.push,g=p.slice,m=p.indexOf,y=c.toString,v=c.hasOwnProperty,b=f.trim,x=function(e,t){return new x.fn.init(e,t,r)},w=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=/\S+/g,C=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,k=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,E=/^[\],:{}\s]*$/,S=/(?:^|:|,)(?:\s*\[)+/g,A=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,j=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,D=/^-ms-/,L=/-([\da-z])/gi,H=function(e,t){return t.toUpperCase()},q=function(e){(a.addEventListener||"load"===e.type||"complete"===a.readyState)&&(_(),x.ready())},_=function(){a.addEventListener?(a.removeEventListener("DOMContentLoaded",q,!1),e.removeEventListener("load",q,!1)):(a.detachEvent("onreadystatechange",q),e.detachEvent("onload",q))};x.fn=x.prototype={jquery:f,constructor:x,init:function(e,n,r){var i,o;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof x?n[0]:n,x.merge(this,x.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:a,!0)),k.test(i[1])&&x.isPlainObject(n))for(i in n)x.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(o=a.getElementById(i[2]),o&&o.parentNode){if(o.id!==i[2])return r.find(e);this.length=1,this[0]=o}return this.context=a,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:"",length:0,toArray:function(){return g.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(g.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},l=1,u=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},l=2),"object"==typeof s||x.isFunction(s)||(s={}),u===l&&(s=this,--l);u>l;l++)if(null!=(o=arguments[l]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(x.isPlainObject(r)||(n=x.isArray(r)))?(n?(n=!1,a=e&&x.isArray(e)?e:[]):a=e&&x.isPlainObject(e)?e:{},s[i]=x.extend(c,a,r)):r!==t&&(s[i]=r));return s},x.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=l),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){if(e===!0?!--x.readyWait:!x.isReady){if(!a.body)return setTimeout(x.ready);x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(a,[x]),x.fn.trigger&&x(a).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===x.type(e)},isArray:Array.isArray||function(e){return"array"===x.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?c[y.call(e)]||"object":typeof e},isPlainObject:function(e){var n;if(!e||"object"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!v.call(e,"constructor")&&!v.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(r){return!1}if(x.support.ownLast)for(n in e)return v.call(e,n);for(n in e);return n===t||v.call(e,n)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||a;var r=k.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=x.trim(n),n&&E.test(n.replace(A,"@").replace(j,"]").replace(S,"")))?Function("return "+n)():(x.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||x.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&x.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(D,"ms-").replace(L,H)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:b&&!b.call("\ufeff\u00a0")?function(e){return null==e?"":b.call(e)}:function(e){return null==e?"":(e+"").replace(C,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?x.merge(n,"string"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(m)return m.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return d.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),x.isFunction(e)?(r=g.call(arguments,2),i=function(){return e.apply(n||this,r.concat(g.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):t},access:function(e,n,r,i,o,a,s){var l=0,u=e.length,c=null==r;if("object"===x.type(r)){o=!0;for(l in r)x.access(e,n,l,r[l],!0,a,s)}else if(i!==t&&(o=!0,x.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(x(e),n)})),n))for(;u>l;l++)n(e[l],r,s?i:i.call(e[l],l,n(e[l],r)));return o?e:c?n.call(e):u?n(e[0],r):a},now:function(){return(new Date).getTime()},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),x.ready.promise=function(t){if(!n)if(n=x.Deferred(),"complete"===a.readyState)setTimeout(x.ready);else if(a.addEventListener)a.addEventListener("DOMContentLoaded",q,!1),e.addEventListener("load",q,!1);else{a.attachEvent("onreadystatechange",q),e.attachEvent("onload",q);var r=!1;try{r=null==e.frameElement&&a.documentElement}catch(i){}r&&r.doScroll&&function o(){if(!x.isReady){try{r.doScroll("left")}catch(e){return setTimeout(o,50)}_(),x.ready()}}()}return n.promise(t)},x.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){c["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=x(a),function(e,t){var n,r,i,o,a,s,l,u,c,p,f,d,h,g,m,y,v,b="sizzle"+-new Date,w=e.document,T=0,C=0,N=st(),k=st(),E=st(),S=!1,A=function(e,t){return e===t?(S=!0,0):0},j=typeof t,D=1<<31,L={}.hasOwnProperty,H=[],q=H.pop,_=H.push,M=H.push,O=H.slice,F=H.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},B="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",P="[\\x20\\t\\r\\n\\f]",R="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",W=R.replace("w","w#"),$="\\["+P+"*("+R+")"+P+"*(?:([*^$|!~]?=)"+P+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+W+")|)|)"+P+"*\\]",I=":("+R+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+$.replace(3,8)+")*)|.*)\\)|)",z=RegExp("^"+P+"+|((?:^|[^\\\\])(?:\\\\.)*)"+P+"+$","g"),X=RegExp("^"+P+"*,"+P+"*"),U=RegExp("^"+P+"*([>+~]|"+P+")"+P+"*"),V=RegExp(P+"*[+~]"),Y=RegExp("="+P+"*([^\\]'\"]*)"+P+"*\\]","g"),J=RegExp(I),G=RegExp("^"+W+"$"),Q={ID:RegExp("^#("+R+")"),CLASS:RegExp("^\\.("+R+")"),TAG:RegExp("^("+R.replace("w","w*")+")"),ATTR:RegExp("^"+$),PSEUDO:RegExp("^"+I),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+P+"*(even|odd|(([+-]|)(\\d*)n|)"+P+"*(?:([+-]|)"+P+"*(\\d+)|))"+P+"*\\)|)","i"),bool:RegExp("^(?:"+B+")$","i"),needsContext:RegExp("^"+P+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+P+"*((?:-\\d)?\\d*)"+P+"*\\)|)(?=[^-]|$)","i")},K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,et=/^(?:input|select|textarea|button)$/i,tt=/^h\d$/i,nt=/'|\\/g,rt=RegExp("\\\\([\\da-f]{1,6}"+P+"?|("+P+")|.)","ig"),it=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(55296|r>>10,56320|1023&r)};try{M.apply(H=O.call(w.childNodes),w.childNodes),H[w.childNodes.length].nodeType}catch(ot){M={apply:H.length?function(e,t){_.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function at(e,t,n,i){var o,a,s,l,u,c,d,m,y,x;if((t?t.ownerDocument||t:w)!==f&&p(t),t=t||f,n=n||[],!e||"string"!=typeof e)return n;if(1!==(l=t.nodeType)&&9!==l)return[];if(h&&!i){if(o=Z.exec(e))if(s=o[1]){if(9===l){if(a=t.getElementById(s),!a||!a.parentNode)return n;if(a.id===s)return n.push(a),n}else if(t.ownerDocument&&(a=t.ownerDocument.getElementById(s))&&v(t,a)&&a.id===s)return n.push(a),n}else{if(o[2])return M.apply(n,t.getElementsByTagName(e)),n;if((s=o[3])&&r.getElementsByClassName&&t.getElementsByClassName)return M.apply(n,t.getElementsByClassName(s)),n}if(r.qsa&&(!g||!g.test(e))){if(m=d=b,y=t,x=9===l&&e,1===l&&"object"!==t.nodeName.toLowerCase()){c=mt(e),(d=t.getAttribute("id"))?m=d.replace(nt,"\\$&"):t.setAttribute("id",m),m="[id='"+m+"'] ",u=c.length;while(u--)c[u]=m+yt(c[u]);y=V.test(e)&&t.parentNode||t,x=c.join(",")}if(x)try{return M.apply(n,y.querySelectorAll(x)),n}catch(T){}finally{d||t.removeAttribute("id")}}}return kt(e.replace(z,"$1"),t,n,i)}function st(){var e=[];function t(n,r){return e.push(n+=" ")>o.cacheLength&&delete t[e.shift()],t[n]=r}return t}function lt(e){return e[b]=!0,e}function ut(e){var t=f.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function ct(e,t){var n=e.split("|"),r=e.length;while(r--)o.attrHandle[n[r]]=t}function pt(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function ft(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function dt(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function ht(e){return lt(function(t){return t=+t,lt(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}s=at.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},r=at.support={},p=at.setDocument=function(e){var n=e?e.ownerDocument||e:w,i=n.defaultView;return n!==f&&9===n.nodeType&&n.documentElement?(f=n,d=n.documentElement,h=!s(n),i&&i.attachEvent&&i!==i.top&&i.attachEvent("onbeforeunload",function(){p()}),r.attributes=ut(function(e){return e.className="i",!e.getAttribute("className")}),r.getElementsByTagName=ut(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),r.getElementsByClassName=ut(function(e){return e.innerHTML="
    ",e.firstChild.className="i",2===e.getElementsByClassName("i").length}),r.getById=ut(function(e){return d.appendChild(e).id=b,!n.getElementsByName||!n.getElementsByName(b).length}),r.getById?(o.find.ID=function(e,t){if(typeof t.getElementById!==j&&h){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){return e.getAttribute("id")===t}}):(delete o.find.ID,o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode("id");return n&&n.value===t}}),o.find.TAG=r.getElementsByTagName?function(e,n){return typeof n.getElementsByTagName!==j?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},o.find.CLASS=r.getElementsByClassName&&function(e,n){return typeof n.getElementsByClassName!==j&&h?n.getElementsByClassName(e):t},m=[],g=[],(r.qsa=K.test(n.querySelectorAll))&&(ut(function(e){e.innerHTML="",e.querySelectorAll("[selected]").length||g.push("\\["+P+"*(?:value|"+B+")"),e.querySelectorAll(":checked").length||g.push(":checked")}),ut(function(e){var t=n.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("t",""),e.querySelectorAll("[t^='']").length&&g.push("[*^$]="+P+"*(?:''|\"\")"),e.querySelectorAll(":enabled").length||g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")})),(r.matchesSelector=K.test(y=d.webkitMatchesSelector||d.mozMatchesSelector||d.oMatchesSelector||d.msMatchesSelector))&&ut(function(e){r.disconnectedMatch=y.call(e,"div"),y.call(e,"[s!='']:x"),m.push("!=",I)}),g=g.length&&RegExp(g.join("|")),m=m.length&&RegExp(m.join("|")),v=K.test(d.contains)||d.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},A=d.compareDocumentPosition?function(e,t){if(e===t)return S=!0,0;var i=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t);return i?1&i||!r.sortDetached&&t.compareDocumentPosition(e)===i?e===n||v(w,e)?-1:t===n||v(w,t)?1:c?F.call(c,e)-F.call(c,t):0:4&i?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return S=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:c?F.call(c,e)-F.call(c,t):0;if(o===a)return pt(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?pt(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},n):f},at.matches=function(e,t){return at(e,null,null,t)},at.matchesSelector=function(e,t){if((e.ownerDocument||e)!==f&&p(e),t=t.replace(Y,"='$1']"),!(!r.matchesSelector||!h||m&&m.test(t)||g&&g.test(t)))try{var n=y.call(e,t);if(n||r.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(i){}return at(t,f,null,[e]).length>0},at.contains=function(e,t){return(e.ownerDocument||e)!==f&&p(e),v(e,t)},at.attr=function(e,n){(e.ownerDocument||e)!==f&&p(e);var i=o.attrHandle[n.toLowerCase()],a=i&&L.call(o.attrHandle,n.toLowerCase())?i(e,n,!h):t;return a===t?r.attributes||!h?e.getAttribute(n):(a=e.getAttributeNode(n))&&a.specified?a.value:null:a},at.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},at.uniqueSort=function(e){var t,n=[],i=0,o=0;if(S=!r.detectDuplicates,c=!r.sortStable&&e.slice(0),e.sort(A),S){while(t=e[o++])t===e[o]&&(i=n.push(o));while(i--)e.splice(n[i],1)}return e},a=at.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=a(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=a(t);return n},o=at.selectors={cacheLength:50,createPseudo:lt,match:Q,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(rt,it),e[3]=(e[4]||e[5]||"").replace(rt,it),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||at.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&at.error(e[0]),e},PSEUDO:function(e){var n,r=!e[5]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]&&e[4]!==t?e[2]=e[4]:r&&J.test(r)&&(n=mt(r,!0))&&(n=r.indexOf(")",r.length-n)-r.length)&&(e[0]=e[0].slice(0,n),e[2]=r.slice(0,n)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(rt,it).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=N[e+" "];return t||(t=RegExp("(^|"+P+")"+e+"("+P+"|$)"))&&N(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=at.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var u,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!l&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[b]||(m[b]={}),u=c[e]||[],d=u[0]===T&&u[1],f=u[0]===T&&u[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[T,d,f];break}}else if(v&&(u=(t[b]||(t[b]={}))[e])&&u[0]===T)f=u[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[b]||(p[b]={}))[e]=[T,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=o.pseudos[e]||o.setFilters[e.toLowerCase()]||at.error("unsupported pseudo: "+e);return r[b]?r(t):r.length>1?(n=[e,e,"",t],o.setFilters.hasOwnProperty(e.toLowerCase())?lt(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=F.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:lt(function(e){var t=[],n=[],r=l(e.replace(z,"$1"));return r[b]?lt(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:lt(function(e){return function(t){return at(e,t).length>0}}),contains:lt(function(e){return function(t){return(t.textContent||t.innerText||a(t)).indexOf(e)>-1}}),lang:lt(function(e){return G.test(e||"")||at.error("unsupported lang: "+e),e=e.replace(rt,it).toLowerCase(),function(t){var n;do if(n=h?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===d},focus:function(e){return e===f.activeElement&&(!f.hasFocus||f.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!o.pseudos.empty(e)},header:function(e){return tt.test(e.nodeName)},input:function(e){return et.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:ht(function(){return[0]}),last:ht(function(e,t){return[t-1]}),eq:ht(function(e,t,n){return[0>n?n+t:n]}),even:ht(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:ht(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:ht(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:ht(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}},o.pseudos.nth=o.pseudos.eq;for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})o.pseudos[n]=ft(n);for(n in{submit:!0,reset:!0})o.pseudos[n]=dt(n);function gt(){}gt.prototype=o.filters=o.pseudos,o.setFilters=new gt;function mt(e,t){var n,r,i,a,s,l,u,c=k[e+" "];if(c)return t?0:c.slice(0);s=e,l=[],u=o.preFilter;while(s){(!n||(r=X.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),l.push(i=[])),n=!1,(r=U.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(z," ")}),s=s.slice(n.length));for(a in o.filter)!(r=Q[a].exec(s))||u[a]&&!(r=u[a](r))||(n=r.shift(),i.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?at.error(e):k(e,l).slice(0)}function yt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function vt(e,t,n){var r=t.dir,o=n&&"parentNode"===r,a=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||o)return e(t,n,i)}:function(t,n,s){var l,u,c,p=T+" "+a;if(s){while(t=t[r])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[r])if(1===t.nodeType||o)if(c=t[b]||(t[b]={}),(u=c[r])&&u[0]===p){if((l=u[1])===!0||l===i)return l===!0}else if(u=c[r]=[p],u[1]=e(t,n,s)||i,u[1]===!0)return!0}}function bt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function xt(e,t,n,r,i){var o,a=[],s=0,l=e.length,u=null!=t;for(;l>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),u&&t.push(s));return a}function wt(e,t,n,r,i,o){return r&&!r[b]&&(r=wt(r)),i&&!i[b]&&(i=wt(i,o)),lt(function(o,a,s,l){var u,c,p,f=[],d=[],h=a.length,g=o||Nt(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:xt(g,f,e,s,l),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,l),r){u=xt(y,d),r(u,[],s,l),c=u.length;while(c--)(p=u[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){u=[],c=y.length;while(c--)(p=y[c])&&u.push(m[c]=p);i(null,y=[],u,l)}c=y.length;while(c--)(p=y[c])&&(u=i?F.call(o,p):f[c])>-1&&(o[u]=!(a[u]=p))}}else y=xt(y===a?y.splice(h,y.length):y),i?i(null,a,y,l):M.apply(a,y)})}function Tt(e){var t,n,r,i=e.length,a=o.relative[e[0].type],s=a||o.relative[" "],l=a?1:0,c=vt(function(e){return e===t},s,!0),p=vt(function(e){return F.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;i>l;l++)if(n=o.relative[e[l].type])f=[vt(bt(f),n)];else{if(n=o.filter[e[l].type].apply(null,e[l].matches),n[b]){for(r=++l;i>r;r++)if(o.relative[e[r].type])break;return wt(l>1&&bt(f),l>1&&yt(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(z,"$1"),n,r>l&&Tt(e.slice(l,r)),i>r&&Tt(e=e.slice(r)),i>r&&yt(e))}f.push(n)}return bt(f)}function Ct(e,t){var n=0,r=t.length>0,a=e.length>0,s=function(s,l,c,p,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,C=u,N=s||a&&o.find.TAG("*",d&&l.parentNode||l),k=T+=null==C?1:Math.random()||.1;for(w&&(u=l!==f&&l,i=n);null!=(h=N[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,l,c)){p.push(h);break}w&&(T=k,i=++n)}r&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,r&&b!==v){g=0;while(m=t[g++])m(x,y,l,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=q.call(p));y=xt(y)}M.apply(p,y),w&&!s&&y.length>0&&v+t.length>1&&at.uniqueSort(p)}return w&&(T=k,u=C),x};return r?lt(s):s}l=at.compile=function(e,t){var n,r=[],i=[],o=E[e+" "];if(!o){t||(t=mt(e)),n=t.length;while(n--)o=Tt(t[n]),o[b]?r.push(o):i.push(o);o=E(e,Ct(i,r))}return o};function Nt(e,t,n){var r=0,i=t.length;for(;i>r;r++)at(e,t[r],n);return n}function kt(e,t,n,i){var a,s,u,c,p,f=mt(e);if(!i&&1===f.length){if(s=f[0]=f[0].slice(0),s.length>2&&"ID"===(u=s[0]).type&&r.getById&&9===t.nodeType&&h&&o.relative[s[1].type]){if(t=(o.find.ID(u.matches[0].replace(rt,it),t)||[])[0],!t)return n;e=e.slice(s.shift().value.length)}a=Q.needsContext.test(e)?0:s.length;while(a--){if(u=s[a],o.relative[c=u.type])break;if((p=o.find[c])&&(i=p(u.matches[0].replace(rt,it),V.test(s[0].type)&&t.parentNode||t))){if(s.splice(a,1),e=i.length&&yt(s),!e)return M.apply(n,i),n;break}}}return l(e,f)(i,t,!h,n,V.test(e)),n}r.sortStable=b.split("").sort(A).join("")===b,r.detectDuplicates=S,p(),r.sortDetached=ut(function(e){return 1&e.compareDocumentPosition(f.createElement("div"))}),ut(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||ct("type|href|height|width",function(e,n,r){return r?t:e.getAttribute(n,"type"===n.toLowerCase()?1:2)}),r.attributes&&ut(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||ct("value",function(e,n,r){return r||"input"!==e.nodeName.toLowerCase()?t:e.defaultValue}),ut(function(e){return null==e.getAttribute("disabled")})||ct(B,function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&i.specified?i.value:e[n]===!0?n.toLowerCase():null}),x.find=at,x.expr=at.selectors,x.expr[":"]=x.expr.pseudos,x.unique=at.uniqueSort,x.text=at.getText,x.isXMLDoc=at.isXML,x.contains=at.contains}(e);var O={};function F(e){var t=O[e]={};return x.each(e.match(T)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e="string"==typeof e?O[e]||F(e):x.extend({},e);var n,r,i,o,a,s,l=[],u=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=l.length,n=!0;l&&o>a;a++)if(l[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,l&&(u?u.length&&c(u.shift()):r?l=[]:p.disable())},p={add:function(){if(l){var t=l.length;(function i(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&p.has(n)||l.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=l.length:r&&(s=t,c(r))}return this},remove:function(){return l&&x.each(arguments,function(e,t){var r;while((r=x.inArray(t,l,r))>-1)l.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?x.inArray(e,l)>-1:!(!l||!l.length)},empty:function(){return l=[],o=0,this},disable:function(){return l=u=r=t,this},disabled:function(){return!l},lock:function(){return u=t,r||p.disable(),this},locked:function(){return!u},fireWith:function(e,t){return!l||i&&!u||(t=t||[],t=[e,t.slice?t.slice():t],n?u.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},x.extend({Deferred:function(e){var t=[["resolve","done",x.Callbacks("once memory"),"resolved"],["reject","fail",x.Callbacks("once memory"),"rejected"],["notify","progress",x.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var a=o[0],s=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=g.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?g.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,l,u;if(r>1)for(s=Array(r),l=Array(r),u=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(a(t,u,n)).fail(o.reject).progress(a(t,l,s)):--i;return i||o.resolveWith(u,n),o.promise()}}),x.support=function(t){var n,r,o,s,l,u,c,p,f,d=a.createElement("div");if(d.setAttribute("className","t"),d.innerHTML="
    a",n=d.getElementsByTagName("*")||[],r=d.getElementsByTagName("a")[0],!r||!r.style||!n.length)return t;s=a.createElement("select"),u=s.appendChild(a.createElement("option")),o=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t.getSetAttribute="t"!==d.className,t.leadingWhitespace=3===d.firstChild.nodeType,t.tbody=!d.getElementsByTagName("tbody").length,t.htmlSerialize=!!d.getElementsByTagName("link").length,t.style=/top/.test(r.getAttribute("style")),t.hrefNormalized="/a"===r.getAttribute("href"),t.opacity=/^0.5/.test(r.style.opacity),t.cssFloat=!!r.style.cssFloat,t.checkOn=!!o.value,t.optSelected=u.selected,t.enctype=!!a.createElement("form").enctype,t.html5Clone="<:nav>"!==a.createElement("nav").cloneNode(!0).outerHTML,t.inlineBlockNeedsLayout=!1,t.shrinkWrapBlocks=!1,t.pixelPosition=!1,t.deleteExpando=!0,t.noCloneEvent=!0,t.reliableMarginRight=!0,t.boxSizingReliable=!0,o.checked=!0,t.noCloneChecked=o.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!u.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}o=a.createElement("input"),o.setAttribute("value",""),t.input=""===o.getAttribute("value"),o.value="t",o.setAttribute("type","radio"),t.radioValue="t"===o.value,o.setAttribute("checked","t"),o.setAttribute("name","t"),l=a.createDocumentFragment(),l.appendChild(o),t.appendChecked=o.checked,t.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip;for(f in x(t))break;return t.ownLast="0"!==f,x(function(){var n,r,o,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",l=a.getElementsByTagName("body")[0];l&&(n=a.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",l.appendChild(n).appendChild(d),d.innerHTML="
    t
    ",o=d.getElementsByTagName("td"),o[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===o[0].offsetHeight,o[0].style.display="",o[1].style.display="none",t.reliableHiddenOffsets=p&&0===o[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",x.swap(l,null!=l.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===d.offsetWidth}),e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(a.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="
    ",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(l.style.zoom=1)),l.removeChild(n),n=d=o=r=null)}),n=s=l=u=r=o=null,t +}({});var B=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;function R(e,n,r,i){if(x.acceptData(e)){var o,a,s=x.expando,l=e.nodeType,u=l?x.cache:e,c=l?e[s]:e[s]&&s;if(c&&u[c]&&(i||u[c].data)||r!==t||"string"!=typeof n)return c||(c=l?e[s]=p.pop()||x.guid++:s),u[c]||(u[c]=l?{}:{toJSON:x.noop}),("object"==typeof n||"function"==typeof n)&&(i?u[c]=x.extend(u[c],n):u[c].data=x.extend(u[c].data,n)),a=u[c],i||(a.data||(a.data={}),a=a.data),r!==t&&(a[x.camelCase(n)]=r),"string"==typeof n?(o=a[n],null==o&&(o=a[x.camelCase(n)])):o=a,o}}function W(e,t,n){if(x.acceptData(e)){var r,i,o=e.nodeType,a=o?x.cache:e,s=o?e[x.expando]:x.expando;if(a[s]){if(t&&(r=n?a[s]:a[s].data)){x.isArray(t)?t=t.concat(x.map(t,x.camelCase)):t in r?t=[t]:(t=x.camelCase(t),t=t in r?[t]:t.split(" ")),i=t.length;while(i--)delete r[t[i]];if(n?!I(r):!x.isEmptyObject(r))return}(n||(delete a[s].data,I(a[s])))&&(o?x.cleanData([e],!0):x.support.deleteExpando||a!=a.window?delete a[s]:a[s]=null)}}}x.extend({cache:{},noData:{applet:!0,embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){return e=e.nodeType?x.cache[e[x.expando]]:e[x.expando],!!e&&!I(e)},data:function(e,t,n){return R(e,t,n)},removeData:function(e,t){return W(e,t)},_data:function(e,t,n){return R(e,t,n,!0)},_removeData:function(e,t){return W(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&x.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),x.fn.extend({data:function(e,n){var r,i,o=null,a=0,s=this[0];if(e===t){if(this.length&&(o=x.data(s),1===s.nodeType&&!x._data(s,"parsedAttrs"))){for(r=s.attributes;r.length>a;a++)i=r[a].name,0===i.indexOf("data-")&&(i=x.camelCase(i.slice(5)),$(s,i,o[i]));x._data(s,"parsedAttrs",!0)}return o}return"object"==typeof e?this.each(function(){x.data(this,e)}):arguments.length>1?this.each(function(){x.data(this,e,n)}):s?$(s,e,x.data(s,e)):null},removeData:function(e){return this.each(function(){x.removeData(this,e)})}});function $(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(P,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:B.test(r)?x.parseJSON(r):r}catch(o){}x.data(e,n,r)}else r=t}return r}function I(e){var t;for(t in e)if(("data"!==t||!x.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}x.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=x._data(e,n),r&&(!i||x.isArray(r)?i=x._data(e,n,x.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),a=function(){x.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return x._data(e,n)||x._data(e,n,{empty:x.Callbacks("once memory").add(function(){x._removeData(e,t+"queue"),x._removeData(e,n)})})}}),x.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?x.queue(this[0],e):n===t?this:this.each(function(){var t=x.queue(this,e,n);x._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=x.Deferred(),a=this,s=this.length,l=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=x._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(l));return l(),o.promise(n)}});var z,X,U=/[\t\r\n\f]/g,V=/\r/g,Y=/^(?:input|select|textarea|button|object)$/i,J=/^(?:a|area)$/i,G=/^(?:checked|selected)$/i,Q=x.support.getSetAttribute,K=x.support.input;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return e=x.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,l="string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,l=0===arguments.length||"string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?x.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var t,r=0,o=x(this),a=e.match(T)||[];while(t=a[r++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else(n===i||"boolean"===n)&&(this.className&&x._data(this,"__className__",this.className),this.className=this.className||e===!1?"":x._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(U," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=x.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=i?e.call(this,n,x(this).val()):e,null==o?o="":"number"==typeof o?o+="":x.isArray(o)&&(o=x.map(o,function(e){return null==e?"":e+""})),r=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=x.valHooks[o.type]||x.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(V,""):null==n?"":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=x.find.attr(e,"value");return null!=t?t:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,l=0>i?s:o?i:0;for(;s>l;l++)if(n=r[l],!(!n.selected&&l!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&x.nodeName(n.parentNode,"optgroup"))){if(t=x(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),a=i.length;while(a--)r=i[a],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,n,r){var o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===i?x.prop(e,n,r):(1===s&&x.isXMLDoc(e)||(n=n.toLowerCase(),o=x.attrHooks[n]||(x.expr.match.bool.test(n)?X:z)),r===t?o&&"get"in o&&null!==(a=o.get(e,n))?a:(a=x.find.attr(e,n),null==a?t:a):null!==r?o&&"set"in o&&(a=o.set(e,r,n))!==t?a:(e.setAttribute(n,r+""),r):(x.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(T);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)?K&&Q||!G.test(n)?e[r]=!1:e[x.camelCase("default-"+n)]=e[r]=!1:x.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&"radio"===t&&x.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{"for":"htmlFor","class":"className"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!x.isXMLDoc(e),a&&(n=x.propFix[n]||n,o=x.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var t=x.find.attr(e,"tabindex");return t?parseInt(t,10):Y.test(e.nodeName)||J.test(e.nodeName)&&e.href?0:-1}}}}),X={set:function(e,t,n){return t===!1?x.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&x.propFix[n]||n,n):e[x.camelCase("default-"+n)]=e[n]=!0,n}},x.each(x.expr.match.bool.source.match(/\w+/g),function(e,n){var r=x.expr.attrHandle[n]||x.find.attr;x.expr.attrHandle[n]=K&&Q||!G.test(n)?function(e,n,i){var o=x.expr.attrHandle[n],a=i?t:(x.expr.attrHandle[n]=t)!=r(e,n,i)?n.toLowerCase():null;return x.expr.attrHandle[n]=o,a}:function(e,n,r){return r?t:e[x.camelCase("default-"+n)]?n.toLowerCase():null}}),K&&Q||(x.attrHooks.value={set:function(e,n,r){return x.nodeName(e,"input")?(e.defaultValue=n,t):z&&z.set(e,n,r)}}),Q||(z={set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},x.expr.attrHandle.id=x.expr.attrHandle.name=x.expr.attrHandle.coords=function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&""!==i.value?i.value:null},x.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&r.specified?r.value:t},set:z.set},x.attrHooks.contenteditable={set:function(e,t,n){z.set(e,""===t?!1:t,n)}},x.each(["width","height"],function(e,n){x.attrHooks[n]={set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}}})),x.support.hrefNormalized||x.each(["href","src"],function(e,t){x.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}}),x.support.style||(x.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}}),x.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){x.propFix[this.toLowerCase()]=this}),x.support.enctype||(x.propFix.enctype="encoding"),x.each(["radio","checkbox"],function(){x.valHooks[this]={set:function(e,n){return x.isArray(n)?e.checked=x.inArray(x(e).val(),n)>=0:t}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}function at(){try{return a.activeElement}catch(e){}}x.event={global:{},add:function(e,n,r,o,a){var s,l,u,c,p,f,d,h,g,m,y,v=x._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=x.guid++),(l=v.events)||(l=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof x===i||e&&x.event.triggered===e.type?t:x.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(T)||[""],u=n.length;while(u--)s=rt.exec(n[u])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),g&&(p=x.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=x.event.special[g]||{},d=x.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&x.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=l[g])||(h=l[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),x.event.global[g]=!0);e=null}},remove:function(e,t,n,r,i){var o,a,s,l,u,c,p,f,d,h,g,m=x.hasData(e)&&x._data(e);if(m&&(c=m.events)){t=(t||"").match(T)||[""],u=t.length;while(u--)if(s=rt.exec(t[u])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=x.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),l=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));l&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||x.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)x.event.remove(e,d+t[u],n,r,!0);x.isEmptyObject(c)&&(delete m.handle,x._removeData(e,"events"))}},trigger:function(n,r,i,o){var s,l,u,c,p,f,d,h=[i||a],g=v.call(n,"type")?n.type:n,m=v.call(n,"namespace")?n.namespace.split("."):[];if(u=f=i=i||a,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+x.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),l=0>g.indexOf(":")&&"on"+g,n=n[x.expando]?n:new x.Event(g,"object"==typeof n&&n),n.isTrigger=o?2:3,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:x.makeArray(r,[n]),p=x.event.special[g]||{},o||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!o&&!p.noBubble&&!x.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(u=u.parentNode);u;u=u.parentNode)h.push(u),f=u;f===(i.ownerDocument||a)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((u=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(x._data(u,"events")||{})[n.type]&&x._data(u,"handle"),s&&s.apply(u,r),s=l&&u[l],s&&x.acceptData(u)&&s.apply&&s.apply(u,r)===!1&&n.preventDefault();if(n.type=g,!o&&!n.isDefaultPrevented()&&(!p._default||p._default.apply(h.pop(),r)===!1)&&x.acceptData(i)&&l&&i[g]&&!x.isWindow(i)){f=i[l],f&&(i[l]=null),x.event.triggered=g;try{i[g]()}catch(y){}x.event.triggered=t,f&&(i[l]=f)}return n.result}},dispatch:function(e){e=x.event.fix(e);var n,r,i,o,a,s=[],l=g.call(arguments),u=(x._data(this,"events")||{})[e.type]||[],c=x.event.special[e.type]||{};if(l[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((x.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,l),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],l=n.delegateCount,u=e.target;if(l&&u.nodeType&&(!e.button||"click"!==e.type))for(;u!=this;u=u.parentNode||this)if(1===u.nodeType&&(u.disabled!==!0||"click"!==e.type)){for(o=[],a=0;l>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?x(r,this).index(u)>=0:x.find(r,this,null,[u]).length),o[r]&&o.push(i);o.length&&s.push({elem:u,handlers:o})}return n.length>l&&s.push({elem:this,handlers:n.slice(l)}),s},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,o=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new x.Event(o),t=r.length;while(t--)n=r[t],e[n]=o[n];return e.target||(e.target=o.srcElement||a),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,o):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,o,s=n.button,l=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||a,o=i.documentElement,r=i.body,e.pageX=n.clientX+(o&&o.scrollLeft||r&&r.scrollLeft||0)-(o&&o.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(o&&o.scrollTop||r&&r.scrollTop||0)-(o&&o.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&l&&(e.relatedTarget=l===e.target?n.toElement:l),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==at()&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===at()&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},click:{trigger:function(){return x.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t},_default:function(e){return x.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=a.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},x.Event=function(e,n){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&x.extend(this,n),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,t):new x.Event(e,n)},x.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},x.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.submitBubbles||(x.event.special.submit={setup:function(){return x.nodeName(this,"form")?!1:(x.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=x.nodeName(n,"input")||x.nodeName(n,"button")?n.form:t;r&&!x._data(r,"submitBubbles")&&(x.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),x._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&x.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return x.nodeName(this,"form")?!1:(x.event.remove(this,"._submit"),t)}}),x.support.changeBubbles||(x.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(x.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),x.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),x.event.simulate("change",this,e,!0)})),!1):(x.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!x._data(t,"changeBubbles")&&(x.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||x.event.simulate("change",this.parentNode,e,!0)}),x._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return x.event.remove(this,"._change"),!Z.test(this.nodeName)}}),x.support.focusinBubbles||x.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&a.addEventListener(e,r,!0)},teardown:function(){0===--n&&a.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return x().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=x.guid++)),this.each(function(){x.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,x(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){x.event.remove(this,e,r,n)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?x.event.trigger(e,n,r,!0):t}});var st=/^.[^:#\[\.,]*$/,lt=/^(?:parents|prev(?:Until|All))/,ut=x.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if("string"!=typeof e)return this.pushStack(x(e).filter(function(){for(t=0;i>t;t++)if(x.contains(r[t],this))return!0}));for(t=0;i>t;t++)x.find(e,r[t],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},has:function(e){var t,n=x(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(x.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e||[],!0))},filter:function(e){return this.pushStack(ft(this,e||[],!1))},is:function(e){return!!ft(this,"string"==typeof e&&ut.test(e)?x(e):e||[],!1).length},closest:function(e,t){var n,r=0,i=this.length,o=[],a=ut.test(e)||"string"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(a?a.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?"string"==typeof e?x.inArray(this[0],x(e)):x.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,"parentNode")},parentsUntil:function(e,t,n){return x.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return x.dir(e,"nextSibling")},prevAll:function(e){return x.dir(e,"previousSibling")},nextUntil:function(e,t,n){return x.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return x.dir(e,"previousSibling",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return x.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=x.filter(r,i)),this.length>1&&(ct[e]||(i=x.unique(i)),lt.test(e)&&(i=i.reverse())),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!x(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(st.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return x.inArray(e,t)>=0!==n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/\s*$/g,At={option:[1,""],legend:[1,"
    ","
    "],area:[1,"",""],param:[1,"",""],thead:[1,"","
    "],tr:[2,"","
    "],col:[2,"","
    "],td:[3,"","
    "],_default:x.support.htmlSerialize?[0,"",""]:[1,"X
    ","
    "]},jt=dt(a),Dt=jt.appendChild(a.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===t?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||a).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(Ft(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&_t(Ft(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&x.cleanData(Ft(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&x.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!x.support.htmlSerialize&&mt.test(e)||!x.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(x.cleanData(Ft(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(r&&r.parentNode!==i&&(r=this.nextSibling),x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=d.apply([],e);var r,i,o,a,s,l,u=0,c=this.length,p=this,f=c-1,h=e[0],g=x.isFunction(h);if(g||!(1>=c||"string"!=typeof h||x.support.checkClone)&&Nt.test(h))return this.each(function(r){var i=p.eq(r);g&&(e[0]=h.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(l=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),r=l.firstChild,1===l.childNodes.length&&(l=r),r)){for(a=x.map(Ft(l,"script"),Ht),o=a.length;c>u;u++)i=l,u!==f&&(i=x.clone(i,!0,!0),o&&x.merge(a,Ft(i,"script"))),t.call(this[u],i,u);if(o)for(s=a[a.length-1].ownerDocument,x.map(a,qt),u=0;o>u;u++)i=a[u],kt.test(i.type||"")&&!x._data(i,"globalEval")&&x.contains(s,i)&&(i.src?x._evalUrl(i.src):x.globalEval((i.text||i.textContent||i.innerHTML||"").replace(St,"")));l=r=null}return this}});function Lt(e,t){return x.nodeName(e,"table")&&x.nodeName(1===t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function Ht(e){return e.type=(null!==x.find.attr(e,"type"))+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function _t(e,t){var n,r=0;for(;null!=(n=e[r]);r++)x._data(n,"globalEval",!t||x._data(t[r],"globalEval"))}function Mt(e,t){if(1===t.nodeType&&x.hasData(e)){var n,r,i,o=x._data(e),a=x._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)x.event.add(t,n,s[n][r])}a.data&&(a.data=x.extend({},a.data))}}function Ot(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!x.support.noCloneEvent&&t[x.expando]){i=x._data(t);for(r in i.events)x.removeEvent(t,r,i.handle);t.removeAttribute(x.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),x.support.html5Clone&&e.innerHTML&&!x.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Ct.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}x.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){x.fn[e]=function(e){var n,r=0,i=[],o=x(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),x(o[r])[t](n),h.apply(i,n.get());return this.pushStack(i)}});function Ft(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||x.nodeName(o,n)?s.push(o):x.merge(s,Ft(o,n));return n===t||n&&x.nodeName(e,n)?x.merge([e],s):s}function Bt(e){Ct.test(e.type)&&(e.defaultChecked=e.checked)}x.extend({clone:function(e,t,n){var r,i,o,a,s,l=x.contains(e.ownerDocument,e);if(x.support.html5Clone||x.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(x.support.noCloneEvent&&x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(r=Ft(o),s=Ft(e),a=0;null!=(i=s[a]);++a)r[a]&&Ot(i,r[a]);if(t)if(n)for(s=s||Ft(e),r=r||Ft(o),a=0;null!=(i=s[a]);a++)Mt(i,r[a]);else Mt(e,o);return r=Ft(o,"script"),r.length>0&&_t(r,!l&&Ft(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,l,u,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===x.type(o))x.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),l=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[l]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!x.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!x.support.tbody){o="table"!==l||xt.test(o)?""!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)x.nodeName(u=o.childNodes[i],"tbody")&&!u.childNodes.length&&o.removeChild(u)}x.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),x.support.appendChecked||x.grep(Ft(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===x.inArray(o,r))&&(a=x.contains(o.ownerDocument,o),s=Ft(f.appendChild(o),"script"),a&&_t(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,l=x.expando,u=x.cache,c=x.support.deleteExpando,f=x.event.special;for(;null!=(n=e[s]);s++)if((t||x.acceptData(n))&&(o=n[l],a=o&&u[o])){if(a.events)for(r in a.events)f[r]?x.event.remove(n,r):x.removeEvent(n,r,a.handle); +u[o]&&(delete u[o],c?delete n[l]:typeof n.removeAttribute!==i?n.removeAttribute(l):n[l]=null,p.push(o))}},_evalUrl:function(e){return x.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})}}),x.fn.extend({wrapAll:function(e){if(x.isFunction(e))return this.each(function(t){x(this).wrapAll(e.call(this,t))});if(this[0]){var t=x(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,"body")||x(this).replaceWith(this.childNodes)}).end()}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+w+")(.*)$","i"),Yt=RegExp("^("+w+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+w+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===x.css(e,"display")||!x.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=x._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=x._data(r,"olddisplay",ln(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&x._data(r,"olddisplay",i?n:x.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}x.fn.extend({css:function(e,n){return x.access(this,function(e,n,r){var i,o,a={},s=0;if(x.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=x.css(e,n[s],!1,o);return a}return r!==t?x.style(e,n,r):x.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){nn(this)?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":x.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,l=x.camelCase(n),u=e.style;if(n=x.cssProps[l]||(x.cssProps[l]=tn(u,l)),s=x.cssHooks[n]||x.cssHooks[l],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:u[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(x.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||x.cssNumber[l]||(r+="px"),x.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(u[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{u[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,l=x.camelCase(n);return n=x.cssProps[l]||(x.cssProps[l]=tn(e.style,l)),s=x.cssHooks[n]||x.cssHooks[l],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||x.isNumeric(o)?o||0:a):a}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s.getPropertyValue(n)||s[n]:t,u=e.style;return s&&(""!==l||x.contains(e.ownerDocument,e)||(l=x.style(e,n)),Yt.test(l)&&Ut.test(n)&&(i=u.width,o=u.minWidth,a=u.maxWidth,u.minWidth=u.maxWidth=u.width=l,l=s.width,u.width=i,u.minWidth=o,u.maxWidth=a)),l}):a.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s[n]:t,u=e.style;return null==l&&u&&u[n]&&(l=u[n]),Yt.test(l)&&!zt.test(n)&&(i=u.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),u.left="fontSize"===n?"1em":l,l=u.pixelLeft+"px",u.left=i,a&&(o.left=a)),""===l?"auto":l});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=x.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=x.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=x.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=x.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=x.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function ln(e){var t=a,n=Gt[e];return n||(n=un(e,t),"none"!==n&&n||(Pt=(Pt||x("