From 2bf77f53873a1b68a73d70bed54dd55e6c7f4d31 Mon Sep 17 00:00:00 2001 From: libo Date: Wed, 2 Sep 2015 20:23:55 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AC=AC=E4=B8=80=E6=AC=A1=E6=8F=90=E4=BA=A4?= =?UTF-8?q?=20=E6=9D=8E=E6=B3=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .DS_Store | Bin 0 -> 6148 bytes LBzhihu.xcodeproj/project.pbxproj | 521 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../UserInterfaceState.xcuserstate | Bin 0 -> 10838 bytes .../lb.xcuserdatad/xcschemes/LBzhihu.xcscheme | 112 ++++ .../xcschemes/xcschememanagement.plist | 27 + LBzhihu/AppDelegate.h | 17 + LBzhihu/AppDelegate.m | 51 ++ LBzhihu/Base.lproj/LaunchScreen.xib | 41 ++ LBzhihu/Base.lproj/Main.storyboard | 25 + LBzhihu/HomeHeadView.h | 20 + LBzhihu/HomeHeadView.m | 43 ++ LBzhihu/HomeViewController.h | 13 + LBzhihu/HomeViewController.m | 64 +++ LBzhihu/ImageAndTitleView.h | 18 + LBzhihu/ImageAndTitleView.m | 34 ++ .../AppIcon.appiconset/Contents.json | 68 +++ LBzhihu/Info.plist | 47 ++ LBzhihu/JsonModel.h | 15 + LBzhihu/JsonModel.m | 24 + LBzhihu/NetworkTool.h | 21 + LBzhihu/NetworkTool.m | 35 ++ LBzhihu/PubilcMember.m | 20 + LBzhihu/ThemeItm.h | 20 + LBzhihu/ThemeItm.m | 24 + LBzhihu/ThemeType.h | 17 + LBzhihu/ThemeType.m | 25 + LBzhihu/TopView.h | 16 + LBzhihu/TopView.m | 29 + LBzhihu/main.m | 16 + LBzhihuTests/Info.plist | 24 + LBzhihuTests/LBzhihuTests.m | 40 ++ 32 files changed, 1434 insertions(+) create mode 100644 .DS_Store create mode 100644 LBzhihu.xcodeproj/project.pbxproj create mode 100644 LBzhihu.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 LBzhihu.xcodeproj/project.xcworkspace/xcuserdata/lb.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 LBzhihu.xcodeproj/xcuserdata/lb.xcuserdatad/xcschemes/LBzhihu.xcscheme create mode 100644 LBzhihu.xcodeproj/xcuserdata/lb.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 LBzhihu/AppDelegate.h create mode 100644 LBzhihu/AppDelegate.m create mode 100644 LBzhihu/Base.lproj/LaunchScreen.xib create mode 100644 LBzhihu/Base.lproj/Main.storyboard create mode 100644 LBzhihu/HomeHeadView.h create mode 100644 LBzhihu/HomeHeadView.m create mode 100644 LBzhihu/HomeViewController.h create mode 100644 LBzhihu/HomeViewController.m create mode 100644 LBzhihu/ImageAndTitleView.h create mode 100644 LBzhihu/ImageAndTitleView.m create mode 100644 LBzhihu/Images.xcassets/AppIcon.appiconset/Contents.json create mode 100644 LBzhihu/Info.plist create mode 100644 LBzhihu/JsonModel.h create mode 100644 LBzhihu/JsonModel.m create mode 100644 LBzhihu/NetworkTool.h create mode 100644 LBzhihu/NetworkTool.m create mode 100644 LBzhihu/PubilcMember.m create mode 100644 LBzhihu/ThemeItm.h create mode 100644 LBzhihu/ThemeItm.m create mode 100644 LBzhihu/ThemeType.h create mode 100644 LBzhihu/ThemeType.m create mode 100644 LBzhihu/TopView.h create mode 100644 LBzhihu/TopView.m create mode 100644 LBzhihu/main.m create mode 100644 LBzhihuTests/Info.plist create mode 100644 LBzhihuTests/LBzhihuTests.m diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..2b56210208fcd2b52d368d67b4b311508cfac4c7 GIT binary patch literal 6148 zcmeHKO-lno41Ljp1wGW8$2ocu{0GZY1;La01Ej5>QdqGT#MAyj|I_;NVd?7L1QAIf zdFf1&nSIci2>_|ri&J0%U`$mMbp}L-2d8!-c$X+v;{o?rUo4yXY&lTqFAnM6_i%|C zZ`}LV{+k(Rl$LYqac4pgIP6E`1h1H*!2)-9!ZW=`XJAv|T`N$f>$Ct4zErqj<_a%Z z_4DM4vD+(Ka++iy8At|_fn?x^4DilY8Sgu$O$L&IWMIR9o)3kpSOvC@c688K3qTxk z*o3}5nl+~cR)MV}XDH&SL{F7yF~rk3ULvjvY#luv63vIi%Ad`P*y^lbEF4lfrcDNt zfj$G;`%)%)|DW+MGuY%?NSb6I8ThXZ$Y^>!t@(9vw|@Ihy=x2gma3w0tvVF?y+;6l h=s9v^lRjV6XIvH7I%*Xiw{&7Y1dNb0$-pl#@BtX&HMjr( literal 0 HcmV?d00001 diff --git a/LBzhihu.xcodeproj/project.pbxproj b/LBzhihu.xcodeproj/project.pbxproj new file mode 100644 index 0000000..2cc0c5e --- /dev/null +++ b/LBzhihu.xcodeproj/project.pbxproj @@ -0,0 +1,521 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 2B0336541B972112008A22A0 /* HomeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B0336531B972112008A22A0 /* HomeViewController.m */; }; + 2B03365C1B97212E008A22A0 /* JsonModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B0336571B97212E008A22A0 /* JsonModel.m */; }; + 2B03365D1B97212E008A22A0 /* ThemeType.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B0336591B97212E008A22A0 /* ThemeType.m */; }; + 2B03365E1B97212E008A22A0 /* ThemeItm.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B03365B1B97212E008A22A0 /* ThemeItm.m */; }; + 2B0336671B972151008A22A0 /* HomeHeadView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B0336621B972151008A22A0 /* HomeHeadView.m */; }; + 2B0336681B972151008A22A0 /* TopView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B0336641B972151008A22A0 /* TopView.m */; }; + 2B0336691B972151008A22A0 /* ImageAndTitleView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B0336661B972151008A22A0 /* ImageAndTitleView.m */; }; + 2B03366E1B97216C008A22A0 /* PubilcMember.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B03366B1B97216C008A22A0 /* PubilcMember.m */; }; + 2B03366F1B97216C008A22A0 /* NetworkTool.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B03366D1B97216C008A22A0 /* NetworkTool.m */; }; + 2BDAB2881B972088000ADE68 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 2BDAB2871B972088000ADE68 /* main.m */; }; + 2BDAB28B1B972088000ADE68 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 2BDAB28A1B972088000ADE68 /* AppDelegate.m */; }; + 2BDAB2911B972088000ADE68 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2BDAB28F1B972088000ADE68 /* Main.storyboard */; }; + 2BDAB2931B972088000ADE68 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2BDAB2921B972088000ADE68 /* Images.xcassets */; }; + 2BDAB2961B972088000ADE68 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2BDAB2941B972088000ADE68 /* LaunchScreen.xib */; }; + 2BDAB2A21B972088000ADE68 /* LBzhihuTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 2BDAB2A11B972088000ADE68 /* LBzhihuTests.m */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 2BDAB29C1B972088000ADE68 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 2BDAB27A1B972088000ADE68 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 2BDAB2811B972088000ADE68; + remoteInfo = LBzhihu; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 2B0336521B972112008A22A0 /* HomeViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HomeViewController.h; sourceTree = ""; }; + 2B0336531B972112008A22A0 /* HomeViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HomeViewController.m; sourceTree = ""; }; + 2B0336561B97212E008A22A0 /* JsonModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JsonModel.h; sourceTree = ""; }; + 2B0336571B97212E008A22A0 /* JsonModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JsonModel.m; sourceTree = ""; }; + 2B0336581B97212E008A22A0 /* ThemeType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ThemeType.h; sourceTree = ""; }; + 2B0336591B97212E008A22A0 /* ThemeType.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ThemeType.m; sourceTree = ""; }; + 2B03365A1B97212E008A22A0 /* ThemeItm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ThemeItm.h; sourceTree = ""; }; + 2B03365B1B97212E008A22A0 /* ThemeItm.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ThemeItm.m; sourceTree = ""; }; + 2B0336611B972151008A22A0 /* HomeHeadView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HomeHeadView.h; sourceTree = ""; }; + 2B0336621B972151008A22A0 /* HomeHeadView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HomeHeadView.m; sourceTree = ""; }; + 2B0336631B972151008A22A0 /* TopView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TopView.h; sourceTree = ""; }; + 2B0336641B972151008A22A0 /* TopView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TopView.m; sourceTree = ""; }; + 2B0336651B972151008A22A0 /* ImageAndTitleView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageAndTitleView.h; sourceTree = ""; }; + 2B0336661B972151008A22A0 /* ImageAndTitleView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ImageAndTitleView.m; sourceTree = ""; }; + 2B03366B1B97216C008A22A0 /* PubilcMember.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PubilcMember.m; sourceTree = ""; }; + 2B03366C1B97216C008A22A0 /* NetworkTool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetworkTool.h; sourceTree = ""; }; + 2B03366D1B97216C008A22A0 /* NetworkTool.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NetworkTool.m; sourceTree = ""; }; + 2BDAB2821B972088000ADE68 /* LBzhihu.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = LBzhihu.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 2BDAB2861B972088000ADE68 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 2BDAB2871B972088000ADE68 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + 2BDAB2891B972088000ADE68 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; + 2BDAB28A1B972088000ADE68 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; + 2BDAB2901B972088000ADE68 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 2BDAB2921B972088000ADE68 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; + 2BDAB2951B972088000ADE68 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; + 2BDAB29B1B972088000ADE68 /* LBzhihuTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = LBzhihuTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 2BDAB2A01B972088000ADE68 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 2BDAB2A11B972088000ADE68 /* LBzhihuTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LBzhihuTests.m; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 2BDAB27F1B972088000ADE68 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2BDAB2981B972088000ADE68 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 2B0336511B972105008A22A0 /* Controller */ = { + isa = PBXGroup; + children = ( + 2B03365F1B972133008A22A0 /* 话题 */, + 2B0336561B97212E008A22A0 /* JsonModel.h */, + 2B0336571B97212E008A22A0 /* JsonModel.m */, + 2B0336581B97212E008A22A0 /* ThemeType.h */, + 2B0336591B97212E008A22A0 /* ThemeType.m */, + 2B03365A1B97212E008A22A0 /* ThemeItm.h */, + 2B03365B1B97212E008A22A0 /* ThemeItm.m */, + 2B0336521B972112008A22A0 /* HomeViewController.h */, + 2B0336531B972112008A22A0 /* HomeViewController.m */, + ); + name = Controller; + sourceTree = ""; + }; + 2B0336551B972124008A22A0 /* Model */ = { + isa = PBXGroup; + children = ( + ); + name = Model; + sourceTree = ""; + }; + 2B03365F1B972133008A22A0 /* 话题 */ = { + isa = PBXGroup; + children = ( + ); + name = "话题"; + sourceTree = ""; + }; + 2B0336601B972142008A22A0 /* Views */ = { + isa = PBXGroup; + children = ( + 2B0336611B972151008A22A0 /* HomeHeadView.h */, + 2B0336621B972151008A22A0 /* HomeHeadView.m */, + 2B0336631B972151008A22A0 /* TopView.h */, + 2B0336641B972151008A22A0 /* TopView.m */, + 2B0336651B972151008A22A0 /* ImageAndTitleView.h */, + 2B0336661B972151008A22A0 /* ImageAndTitleView.m */, + ); + name = Views; + sourceTree = ""; + }; + 2B03366A1B972160008A22A0 /* Other */ = { + isa = PBXGroup; + children = ( + 2B03366B1B97216C008A22A0 /* PubilcMember.m */, + 2B03366C1B97216C008A22A0 /* NetworkTool.h */, + 2B03366D1B97216C008A22A0 /* NetworkTool.m */, + ); + name = Other; + sourceTree = ""; + }; + 2BDAB2791B972088000ADE68 = { + isa = PBXGroup; + children = ( + 2BDAB2841B972088000ADE68 /* LBzhihu */, + 2BDAB29E1B972088000ADE68 /* LBzhihuTests */, + 2BDAB2831B972088000ADE68 /* Products */, + ); + sourceTree = ""; + }; + 2BDAB2831B972088000ADE68 /* Products */ = { + isa = PBXGroup; + children = ( + 2BDAB2821B972088000ADE68 /* LBzhihu.app */, + 2BDAB29B1B972088000ADE68 /* LBzhihuTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 2BDAB2841B972088000ADE68 /* LBzhihu */ = { + isa = PBXGroup; + children = ( + 2B03366A1B972160008A22A0 /* Other */, + 2B0336601B972142008A22A0 /* Views */, + 2B0336551B972124008A22A0 /* Model */, + 2B0336511B972105008A22A0 /* Controller */, + 2BDAB2891B972088000ADE68 /* AppDelegate.h */, + 2BDAB28A1B972088000ADE68 /* AppDelegate.m */, + 2BDAB28F1B972088000ADE68 /* Main.storyboard */, + 2BDAB2921B972088000ADE68 /* Images.xcassets */, + 2BDAB2941B972088000ADE68 /* LaunchScreen.xib */, + 2BDAB2851B972088000ADE68 /* Supporting Files */, + ); + path = LBzhihu; + sourceTree = ""; + }; + 2BDAB2851B972088000ADE68 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 2BDAB2861B972088000ADE68 /* Info.plist */, + 2BDAB2871B972088000ADE68 /* main.m */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + 2BDAB29E1B972088000ADE68 /* LBzhihuTests */ = { + isa = PBXGroup; + children = ( + 2BDAB2A11B972088000ADE68 /* LBzhihuTests.m */, + 2BDAB29F1B972088000ADE68 /* Supporting Files */, + ); + path = LBzhihuTests; + sourceTree = ""; + }; + 2BDAB29F1B972088000ADE68 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 2BDAB2A01B972088000ADE68 /* Info.plist */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 2BDAB2811B972088000ADE68 /* LBzhihu */ = { + isa = PBXNativeTarget; + buildConfigurationList = 2BDAB2A51B972088000ADE68 /* Build configuration list for PBXNativeTarget "LBzhihu" */; + buildPhases = ( + 2BDAB27E1B972088000ADE68 /* Sources */, + 2BDAB27F1B972088000ADE68 /* Frameworks */, + 2BDAB2801B972088000ADE68 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = LBzhihu; + productName = LBzhihu; + productReference = 2BDAB2821B972088000ADE68 /* LBzhihu.app */; + productType = "com.apple.product-type.application"; + }; + 2BDAB29A1B972088000ADE68 /* LBzhihuTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 2BDAB2A81B972088000ADE68 /* Build configuration list for PBXNativeTarget "LBzhihuTests" */; + buildPhases = ( + 2BDAB2971B972088000ADE68 /* Sources */, + 2BDAB2981B972088000ADE68 /* Frameworks */, + 2BDAB2991B972088000ADE68 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 2BDAB29D1B972088000ADE68 /* PBXTargetDependency */, + ); + name = LBzhihuTests; + productName = LBzhihuTests; + productReference = 2BDAB29B1B972088000ADE68 /* LBzhihuTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 2BDAB27A1B972088000ADE68 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0640; + ORGANIZATIONNAME = "李波"; + TargetAttributes = { + 2BDAB2811B972088000ADE68 = { + CreatedOnToolsVersion = 6.4; + }; + 2BDAB29A1B972088000ADE68 = { + CreatedOnToolsVersion = 6.4; + TestTargetID = 2BDAB2811B972088000ADE68; + }; + }; + }; + buildConfigurationList = 2BDAB27D1B972088000ADE68 /* Build configuration list for PBXProject "LBzhihu" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 2BDAB2791B972088000ADE68; + productRefGroup = 2BDAB2831B972088000ADE68 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 2BDAB2811B972088000ADE68 /* LBzhihu */, + 2BDAB29A1B972088000ADE68 /* LBzhihuTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 2BDAB2801B972088000ADE68 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2BDAB2911B972088000ADE68 /* Main.storyboard in Resources */, + 2BDAB2961B972088000ADE68 /* LaunchScreen.xib in Resources */, + 2BDAB2931B972088000ADE68 /* Images.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2BDAB2991B972088000ADE68 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 2BDAB27E1B972088000ADE68 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2B03365E1B97212E008A22A0 /* ThemeItm.m in Sources */, + 2BDAB28B1B972088000ADE68 /* AppDelegate.m in Sources */, + 2B0336681B972151008A22A0 /* TopView.m in Sources */, + 2B0336691B972151008A22A0 /* ImageAndTitleView.m in Sources */, + 2B03365D1B97212E008A22A0 /* ThemeType.m in Sources */, + 2B03365C1B97212E008A22A0 /* JsonModel.m in Sources */, + 2B03366E1B97216C008A22A0 /* PubilcMember.m in Sources */, + 2B03366F1B97216C008A22A0 /* NetworkTool.m in Sources */, + 2B0336671B972151008A22A0 /* HomeHeadView.m in Sources */, + 2BDAB2881B972088000ADE68 /* main.m in Sources */, + 2B0336541B972112008A22A0 /* HomeViewController.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2BDAB2971B972088000ADE68 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2BDAB2A21B972088000ADE68 /* LBzhihuTests.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 2BDAB29D1B972088000ADE68 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 2BDAB2811B972088000ADE68 /* LBzhihu */; + targetProxy = 2BDAB29C1B972088000ADE68 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 2BDAB28F1B972088000ADE68 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 2BDAB2901B972088000ADE68 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 2BDAB2941B972088000ADE68 /* LaunchScreen.xib */ = { + isa = PBXVariantGroup; + children = ( + 2BDAB2951B972088000ADE68 /* Base */, + ); + name = LaunchScreen.xib; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 2BDAB2A31B972088000ADE68 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + 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 = 8.4; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 2BDAB2A41B972088000ADE68 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "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 = gnu99; + 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 = 8.4; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 2BDAB2A61B972088000ADE68 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + INFOPLIST_FILE = LBzhihu/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 2BDAB2A71B972088000ADE68 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + INFOPLIST_FILE = LBzhihu/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; + 2BDAB2A91B972088000ADE68 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + ); + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + INFOPLIST_FILE = LBzhihuTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/LBzhihu.app/LBzhihu"; + }; + name = Debug; + }; + 2BDAB2AA1B972088000ADE68 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + ); + INFOPLIST_FILE = LBzhihuTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/LBzhihu.app/LBzhihu"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 2BDAB27D1B972088000ADE68 /* Build configuration list for PBXProject "LBzhihu" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2BDAB2A31B972088000ADE68 /* Debug */, + 2BDAB2A41B972088000ADE68 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 2BDAB2A51B972088000ADE68 /* Build configuration list for PBXNativeTarget "LBzhihu" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2BDAB2A61B972088000ADE68 /* Debug */, + 2BDAB2A71B972088000ADE68 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 2BDAB2A81B972088000ADE68 /* Build configuration list for PBXNativeTarget "LBzhihuTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2BDAB2A91B972088000ADE68 /* Debug */, + 2BDAB2AA1B972088000ADE68 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 2BDAB27A1B972088000ADE68 /* Project object */; +} diff --git a/LBzhihu.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/LBzhihu.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/LBzhihu.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/LBzhihu.xcodeproj/project.xcworkspace/xcuserdata/lb.xcuserdatad/UserInterfaceState.xcuserstate b/LBzhihu.xcodeproj/project.xcworkspace/xcuserdata/lb.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..8d95ed3af01ca069be30c8d280234588a576448a GIT binary patch literal 10838 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 r(!1Jwhj*iQv-d9VF7Msmd%XL-k9(i-zSskui1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/LBzhihu.xcodeproj/xcuserdata/lb.xcuserdatad/xcschemes/xcschememanagement.plist b/LBzhihu.xcodeproj/xcuserdata/lb.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..2d7e7e3 --- /dev/null +++ b/LBzhihu.xcodeproj/xcuserdata/lb.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,27 @@ + + + + + SchemeUserState + + LBzhihu.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + 2BDAB2811B972088000ADE68 + + primary + + + 2BDAB29A1B972088000ADE68 + + primary + + + + + diff --git a/LBzhihu/AppDelegate.h b/LBzhihu/AppDelegate.h new file mode 100644 index 0000000..4b44950 --- /dev/null +++ b/LBzhihu/AppDelegate.h @@ -0,0 +1,17 @@ +// +// AppDelegate.h +// LBzhihu +// +// Created by lb on 15/9/2. +// Copyright (c) 2015年 李波. All rights reserved. +// + +#import + +@interface AppDelegate : UIResponder + +@property (strong, nonatomic) UIWindow *window; + + +@end + diff --git a/LBzhihu/AppDelegate.m b/LBzhihu/AppDelegate.m new file mode 100644 index 0000000..309d0ca --- /dev/null +++ b/LBzhihu/AppDelegate.m @@ -0,0 +1,51 @@ +// +// AppDelegate.m +// LBzhihu +// +// Created by lb on 15/9/2. +// Copyright (c) 2015年 李波. All rights reserved. +// + +#import "AppDelegate.h" +#import "HomeViewController.h" + +@interface AppDelegate () + +@end + +@implementation AppDelegate + + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + // Override point for customization after application launch. + HomeViewController *homeVC = [[HomeViewController alloc] init]; + + self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; + self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:homeVC]; + [self.window makeKeyAndVisible]; + return YES; +} + +- (void)applicationWillResignActive:(UIApplication *)application { + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. +} + +- (void)applicationDidEnterBackground:(UIApplication *)application { + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. +} + +- (void)applicationWillEnterForeground:(UIApplication *)application { + // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. +} + +- (void)applicationDidBecomeActive:(UIApplication *)application { + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. +} + +- (void)applicationWillTerminate:(UIApplication *)application { + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. +} + +@end diff --git a/LBzhihu/Base.lproj/LaunchScreen.xib b/LBzhihu/Base.lproj/LaunchScreen.xib new file mode 100644 index 0000000..ff302c6 --- /dev/null +++ b/LBzhihu/Base.lproj/LaunchScreen.xib @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/LBzhihu/Base.lproj/Main.storyboard b/LBzhihu/Base.lproj/Main.storyboard new file mode 100644 index 0000000..f56d2f3 --- /dev/null +++ b/LBzhihu/Base.lproj/Main.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/LBzhihu/HomeHeadView.h b/LBzhihu/HomeHeadView.h new file mode 100644 index 0000000..c416d6d --- /dev/null +++ b/LBzhihu/HomeHeadView.h @@ -0,0 +1,20 @@ +// +// HomeHeadView.h +// LBzhihu +// +// Created by lb on 15/9/2. +// Copyright (c) 2015年 李波. All rights reserved. +// + +#import +#import "PubilcMember.m" + +@interface HomeHeadView : UIView + +@property (nonatomic,strong) UIImageView *leftImageView; +@property (nonatomic,strong) UILabel *titleLabel; +@property (nonatomic,strong) UIButton *rightBtn; + +- (instancetype)initWithFrame:(CGRect)frame; + +@end diff --git a/LBzhihu/HomeHeadView.m b/LBzhihu/HomeHeadView.m new file mode 100644 index 0000000..e1afb55 --- /dev/null +++ b/LBzhihu/HomeHeadView.m @@ -0,0 +1,43 @@ +// +// HomeHeadView.m +// LBzhihu +// +// Created by lb on 15/9/2. +// Copyright (c) 2015年 李波. All rights reserved. +// + +#import "HomeHeadView.h" + +@implementation HomeHeadView + +- (instancetype)initWithFrame:(CGRect)frame{ + if ( self = [super initWithFrame:frame]) { + [self addUIWithFrame:frame]; + } + return self; +} + +- (void)addUIWithFrame:(CGRect)frame{ + self.backgroundColor = HOMEHEADBACKGROUNDCOLOR; + + CGFloat edge = 8; + CGFloat imageW = CGRectGetHeight(frame) - 2 * edge; + CGFloat titleLabelW = 100; + CGFloat rightBtnW = 60; + + self.leftImageView = [[UIImageView alloc] initWithFrame:CGRectMake(edge, edge, imageW, imageW)]; + + self.titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(CGRectGetMinX(self.leftImageView.frame) + edge, edge, titleLabelW, imageW)]; + self.titleLabel.textAlignment = NSTextAlignmentCenter; + [self.titleLabel setTextColor:[UIColor whiteColor]]; + + self.rightBtn = [[UIButton alloc] initWithFrame:CGRectMake(CGRectGetWidth(frame) - edge - rightBtnW , edge, rightBtnW, imageW)]; + self.rightBtn.backgroundColor = [UIColor clearColor]; + [self.rightBtn setTitleColor:[UIColor whiteColor] forState:(UIControlStateNormal)]; + + [self addSubview:self.leftImageView]; + [self addSubview:self.titleLabel]; + [self addSubview:self.rightBtn]; +} + +@end diff --git a/LBzhihu/HomeViewController.h b/LBzhihu/HomeViewController.h new file mode 100644 index 0000000..bab4ba7 --- /dev/null +++ b/LBzhihu/HomeViewController.h @@ -0,0 +1,13 @@ +// +// HomeViewController.h +// LBzhihu +// +// Created by lb on 15/9/2. +// Copyright (c) 2015年 李波. All rights reserved. +// + +#import + +@interface HomeViewController : UIViewController + +@end diff --git a/LBzhihu/HomeViewController.m b/LBzhihu/HomeViewController.m new file mode 100644 index 0000000..ab02173 --- /dev/null +++ b/LBzhihu/HomeViewController.m @@ -0,0 +1,64 @@ +// +// HomeViewController.m +// LBzhihu +// +// Created by lb on 15/9/2. +// Copyright (c) 2015年 李波. All rights reserved. +// + +#import "HomeViewController.h" +#import "HomeHeadView.h" +#import "NetworkTool.h" + +@interface HomeViewController () +{ + CGSize mainSize; +} +@end + +@implementation HomeViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + mainSize = [[UIScreen mainScreen] bounds].size; + + self.view.backgroundColor = [UIColor whiteColor]; + [self addUI]; + [[NetworkTool sharedNetworkTool] getThemeTypeWhensuccess:^(ThemeType *themeType) { + + } failure:^{ + + }]; +} + +- (void)addUI{ + HomeHeadView *headView = [[HomeHeadView alloc] initWithFrame:CGRectMake(0, 20, mainSize.width, 44)]; + headView.leftImageView.image = [UIImage imageNamed:@""]; + headView.titleLabel.text = @"首页"; + [headView.rightBtn setTitle:@"设置" forState:(UIControlStateNormal)]; + + [self.view addSubview:headView]; + +} + +- (void)viewWillAppear:(BOOL)animated{ + self.navigationController.navigationBarHidden = 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/LBzhihu/ImageAndTitleView.h b/LBzhihu/ImageAndTitleView.h new file mode 100644 index 0000000..e17f545 --- /dev/null +++ b/LBzhihu/ImageAndTitleView.h @@ -0,0 +1,18 @@ +// +// ImageAndTitleView.h +// LBzhihu +// +// Created by lb on 15/9/2. +// Copyright (c) 2015年 李波. All rights reserved. +// + +#import + +@interface ImageAndTitleView : UIView + +- (instancetype)initWithFrame:(CGRect)frame; + +@property (nonatomic,strong) UIImageView *imageView; +@property (nonatomic,strong) UILabel *titleLabel; + +@end diff --git a/LBzhihu/ImageAndTitleView.m b/LBzhihu/ImageAndTitleView.m new file mode 100644 index 0000000..186ddb2 --- /dev/null +++ b/LBzhihu/ImageAndTitleView.m @@ -0,0 +1,34 @@ +// +// ImageAndTitleView.m +// LBzhihu +// +// Created by lb on 15/9/2. +// Copyright (c) 2015年 李波. All rights reserved. +// + +#import "ImageAndTitleView.h" + +@implementation ImageAndTitleView + +- (instancetype)initWithFrame:(CGRect)frame{ + if ( self = [super initWithFrame:frame]) { + [self addUIWithFrame:frame]; + } + return self; +} + +- (void)addUIWithFrame:(CGRect)frame{ + + CGFloat edge = 8; + CGFloat LabelHigh = 60; + + self.imageView = [[UIImageView alloc] initWithFrame:frame]; + self.titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(edge, CGRectGetHeight(frame) - edge - LabelHigh, CGRectGetWidth(frame) - 2 * edge, LabelHigh)]; + self.titleLabel.textColor = [UIColor whiteColor]; + + [self.imageView addSubview:self.titleLabel]; + [self addSubview:self.imageView]; + +} + +@end diff --git a/LBzhihu/Images.xcassets/AppIcon.appiconset/Contents.json b/LBzhihu/Images.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..36d2c80 --- /dev/null +++ b/LBzhihu/Images.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "3x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/LBzhihu/Info.plist b/LBzhihu/Info.plist new file mode 100644 index 0000000..946ef7c --- /dev/null +++ b/LBzhihu/Info.plist @@ -0,0 +1,47 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + -2app.top.$(PRODUCT_NAME:rfc1034identifier) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/LBzhihu/JsonModel.h b/LBzhihu/JsonModel.h new file mode 100644 index 0000000..7a9db21 --- /dev/null +++ b/LBzhihu/JsonModel.h @@ -0,0 +1,15 @@ +// +// JsonModel.h +// LBzhihu +// +// Created by lb on 15/9/2. +// Copyright (c) 2015年 李波. All rights reserved. +// + +#import + +@interface JsonModel : NSObject + +- (instancetype)initWithDictionary:(NSDictionary *)dic; + +@end diff --git a/LBzhihu/JsonModel.m b/LBzhihu/JsonModel.m new file mode 100644 index 0000000..646b906 --- /dev/null +++ b/LBzhihu/JsonModel.m @@ -0,0 +1,24 @@ +// +// JsonModel.m +// LBzhihu +// +// Created by lb on 15/9/2. +// Copyright (c) 2015年 李波. All rights reserved. +// + +#import "JsonModel.h" + +@implementation JsonModel + +- (instancetype)initWithDictionary:(NSDictionary *)dic{ + if(self = [super init]){ + [super setValuesForKeysWithDictionary:dic]; + } + return self; +} + +- (void)setValue:(id)value forUndefinedKey:(NSString *)key{ + NSLog(@"%@没找到:key:%@ value:%@",[self class],key,value); +} + +@end diff --git a/LBzhihu/NetworkTool.h b/LBzhihu/NetworkTool.h new file mode 100644 index 0000000..3d20953 --- /dev/null +++ b/LBzhihu/NetworkTool.h @@ -0,0 +1,21 @@ +// +// NetToolbar.h +// LBzhihu +// +// Created by lb on 15/9/2. +// Copyright (c) 2015年 李波. All rights reserved. +// + +#import + + +#import "ThemeType.h" +#import "ThemeItm.h" + +@interface NetworkTool : NSObject + ++ (instancetype)sharedNetworkTool; + +- (void)getThemeTypeWhensuccess:(void (^)(ThemeType *themeType))success failure:(void (^)())failure; + +@end diff --git a/LBzhihu/NetworkTool.m b/LBzhihu/NetworkTool.m new file mode 100644 index 0000000..957c9cd --- /dev/null +++ b/LBzhihu/NetworkTool.m @@ -0,0 +1,35 @@ +// +// NetToolbar.m +// LBzhihu +// +// Created by lb on 15/9/2. +// Copyright (c) 2015年 李波. All rights reserved. +// + +#import "NetworkTool.h" + +@implementation NetworkTool + +static NetworkTool *tool; + ++ (instancetype)sharedNetworkTool{ + static dispatch_once_t once; + + dispatch_once(&once, ^{ + tool = [[self alloc] init]; + }); + return tool; +} + +- (void)getThemeTypeWhensuccess:(void (^)(ThemeType *))success failure:(void (^)())failure{ + NSString *urlStr = @"http://news-at.zhihu.com/api/4/themes"; + // AFHTTPSessionManager *manger = [AFHTTPSessionManager manager]; + +// AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; +// [manager GET:urlStr parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { +// NSLog(@"JSON: %@", responseObject); +// } failure:^(AFHTTPRequestOperation *operation, NSError *error) { +// NSLog(@"Error: %@", error); +// }];} +} +@end diff --git a/LBzhihu/PubilcMember.m b/LBzhihu/PubilcMember.m new file mode 100644 index 0000000..b6e685c --- /dev/null +++ b/LBzhihu/PubilcMember.m @@ -0,0 +1,20 @@ +// +// PubilcMember.m +// LBzhihu +// +// Created by lb on 15/9/2. +// Copyright (c) 2015年 李波. All rights reserved. +// + +#import + +#pragma mark colour + + +#define HOMEHEADBACKGROUNDCOLOR [UIColor colorWithRed:0/255.0 green:191/255.0 blue:255/255.0 alpha:1] + + +#pragma mark height + +#define HOMEHEADHEIGHT 44 +#define IMAGEANDTITLEVIEWHEIGHT 200 \ No newline at end of file diff --git a/LBzhihu/ThemeItm.h b/LBzhihu/ThemeItm.h new file mode 100644 index 0000000..104f57a --- /dev/null +++ b/LBzhihu/ThemeItm.h @@ -0,0 +1,20 @@ + +// +// ThemeItm.h +// LBzhihu +// +// Created by lb on 15/9/2. +// Copyright (c) 2015年 李波. All rights reserved. +// + +#import "JsonModel.h" + +@interface ThemeItm : JsonModel + +@property (nonatomic,strong) NSString *color; +@property (nonatomic,strong) NSString *thumbnail; +@property (nonatomic,strong) NSString *desc; +@property (nonatomic,strong) NSString *ThemeId; +@property (nonatomic,strong) NSString *name; + +@end diff --git a/LBzhihu/ThemeItm.m b/LBzhihu/ThemeItm.m new file mode 100644 index 0000000..77b0a2b --- /dev/null +++ b/LBzhihu/ThemeItm.m @@ -0,0 +1,24 @@ +// +// ThemeItm.m +// LBzhihu +// +// Created by lb on 15/9/2. +// Copyright (c) 2015年 李波. All rights reserved. +// + +#import "ThemeItm.h" + +@implementation ThemeItm + +- (void)setValue:(id)value forKey:(NSString *)key{ + if ([key isEqualToString:@"description"]) { + [super setValue:value forKey:@"desc"]; + }else if ([key isEqualToString:@"id"]){ + [super setValue:key forKey:@"ThemeId"]; + }else{ + [super setValue:value forKey:key]; + } + +} + +@end diff --git a/LBzhihu/ThemeType.h b/LBzhihu/ThemeType.h new file mode 100644 index 0000000..6a56117 --- /dev/null +++ b/LBzhihu/ThemeType.h @@ -0,0 +1,17 @@ +// +// ThemeType.h +// LBzhihu +// +// Created by lb on 15/9/2. +// Copyright (c) 2015年 李波. All rights reserved. +// + +#import "JsonModel.h" +#import "ThemeItm.h" + +@interface ThemeType : JsonModel + +@property (nonatomic,strong) NSString *limit; +@property (nonatomic,strong) NSArray *others; + +@end diff --git a/LBzhihu/ThemeType.m b/LBzhihu/ThemeType.m new file mode 100644 index 0000000..51c1aba --- /dev/null +++ b/LBzhihu/ThemeType.m @@ -0,0 +1,25 @@ +// +// ThemeType.m +// LBzhihu +// +// Created by lb on 15/9/2. +// Copyright (c) 2015年 李波. All rights reserved. +// + +#import "ThemeType.h" + +@implementation ThemeType + +- (void)setValue:(id)value forKey:(NSString *)key{ + if ([key isEqualToString:@"others"]) { + NSMutableArray *arr = [NSMutableArray new]; + for (NSDictionary *dic in value) { + [arr addObject:[[ThemeItm alloc] initWithDictionary:dic]]; + } + self.others = arr; + }else{ + [super setValue:value forKey:key]; + } +} + +@end diff --git a/LBzhihu/TopView.h b/LBzhihu/TopView.h new file mode 100644 index 0000000..0ac6966 --- /dev/null +++ b/LBzhihu/TopView.h @@ -0,0 +1,16 @@ +// +// TopView.h +// LBzhihu +// +// Created by lb on 15/9/2. +// Copyright (c) 2015年 李波. All rights reserved. +// + +#import +#import "ImageAndTitleView.h" + +@interface TopView : UIScrollView + +- (instancetype)initWithFrame:(CGRect)frame; + +@end diff --git a/LBzhihu/TopView.m b/LBzhihu/TopView.m new file mode 100644 index 0000000..f2e60aa --- /dev/null +++ b/LBzhihu/TopView.m @@ -0,0 +1,29 @@ +// +// TopView.m +// LBzhihu +// +// Created by lb on 15/9/2. +// Copyright (c) 2015年 李波. All rights reserved. +// + +#import "TopView.h" + + +@implementation TopView +- (instancetype)initWithFrame:(CGRect)frame{ + if ( self = [super initWithFrame:frame]) { + } + return self; +} + +- (void)addUIWithFrame:(CGRect)frame{ + UIPageControl *pageControl = [[UIPageControl alloc]init]; + pageControl.frame = CGRectMake( 100, 440, 120, 20); + pageControl.numberOfPages = 4; + pageControl.currentPage = 0; + pageControl.tag = 100; + [self addSubview:pageControl]; + +} + +@end diff --git a/LBzhihu/main.m b/LBzhihu/main.m new file mode 100644 index 0000000..fed123b --- /dev/null +++ b/LBzhihu/main.m @@ -0,0 +1,16 @@ +// +// main.m +// LBzhihu +// +// Created by lb on 15/9/2. +// Copyright (c) 2015年 李波. All rights reserved. +// + +#import +#import "AppDelegate.h" + +int main(int argc, char * argv[]) { + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); + } +} diff --git a/LBzhihuTests/Info.plist b/LBzhihuTests/Info.plist new file mode 100644 index 0000000..13e6b6e --- /dev/null +++ b/LBzhihuTests/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + -2app.top.$(PRODUCT_NAME:rfc1034identifier) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + + diff --git a/LBzhihuTests/LBzhihuTests.m b/LBzhihuTests/LBzhihuTests.m new file mode 100644 index 0000000..fb29dd1 --- /dev/null +++ b/LBzhihuTests/LBzhihuTests.m @@ -0,0 +1,40 @@ +// +// LBzhihuTests.m +// LBzhihuTests +// +// Created by lb on 15/9/2. +// Copyright (c) 2015年 李波. All rights reserved. +// + +#import +#import + +@interface LBzhihuTests : XCTestCase + +@end + +@implementation LBzhihuTests + +- (void)setUp { + [super setUp]; + // Put setup code here. This method is called before the invocation of each test method in the class. +} + +- (void)tearDown { + // Put teardown code here. This method is called after the invocation of each test method in the class. + [super tearDown]; +} + +- (void)testExample { + // This is an example of a functional test case. + XCTAssert(YES, @"Pass"); +} + +- (void)testPerformanceExample { + // This is an example of a performance test case. + [self measureBlock:^{ + // Put the code you want to measure the time of here. + }]; +} + +@end