├── .gitignore ├── QQZone.xcodeproj ├── project.pbxproj └── project.xcworkspace │ └── contents.xcworkspacedata ├── QQZone ├── AppDelegate.swift ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ ├── AppIcon29x29@2x~ipad.png │ │ ├── AppIcon29x29~ipad.png │ │ ├── AppIcon40x40@2x~ipad.png │ │ ├── AppIcon40x40~ipad.png │ │ ├── AppIcon50x50@2x~ipad.png │ │ ├── AppIcon50x50~ipad.png │ │ ├── AppIcon72x72@2x~ipad.png │ │ ├── AppIcon72x72~ipad.png │ │ ├── AppIcon76x76@2x~ipad.png │ │ ├── AppIcon76x76~ipad.png │ │ ├── AppIcon83.5x83.5@2x~ipad.png │ │ └── Contents.json │ ├── Brand Assets.launchimage │ │ ├── Contents.json │ │ ├── Default-Landscape.png │ │ ├── Default-Landscape@2x.png │ │ ├── Default-Portrait.png │ │ └── Default-Portrait@2x.png │ ├── Contents.json │ ├── Login │ │ ├── Contents.json │ │ ├── login_button_normal.imageset │ │ │ ├── Contents.json │ │ │ ├── login_button_normal.png │ │ │ └── login_button_normal@2x.png │ │ ├── login_button_pressed.imageset │ │ │ ├── Contents.json │ │ │ ├── login_button_pressed.png │ │ │ └── login_button_pressed@2x.png │ │ ├── login_checkbox_checked.imageset │ │ │ ├── Contents.json │ │ │ ├── login_checkbox_checked.png │ │ │ └── login_checkbox_checked@2x.png │ │ ├── login_checkbox_normal.imageset │ │ │ ├── Contents.json │ │ │ ├── login_checkbox_normal.png │ │ │ └── login_checkbox_normal@2x.png │ │ ├── login_default_avatar.imageset │ │ │ ├── Contents.json │ │ │ ├── login_default_avatar.png │ │ │ └── login_default_avatar@2x.png │ │ └── login_input_bg.imageset │ │ │ ├── Contents.json │ │ │ ├── login_input_bg.png │ │ │ └── login_input_bg@2x.png │ ├── TabBar │ │ ├── Contents.json │ │ ├── tab_bar_e_album_icon.imageset │ │ │ ├── Contents.json │ │ │ ├── tab_bar_e_album_icon.png │ │ │ └── tab_bar_e_album_icon@2x.png │ │ ├── tab_bar_e_more_icon.imageset │ │ │ ├── Contents.json │ │ │ ├── tab_bar_e_more_icon.png │ │ │ └── tab_bar_e_more_icon@2x.png │ │ ├── tab_bar_feed_icon.imageset │ │ │ ├── Contents.json │ │ │ ├── tab_bar_feed_icon.png │ │ │ └── tab_bar_feed_icon@2x.png │ │ ├── tab_bar_friend_icon.imageset │ │ │ ├── Contents.json │ │ │ ├── tab_bar_friend_icon.png │ │ │ └── tab_bar_friend_icon@2x.png │ │ ├── tab_bar_passive_feed_icon.imageset │ │ │ ├── Contents.json │ │ │ ├── tab_bar_passive_feed_icon.png │ │ │ └── tab_bar_passive_feed_icon@2x.png │ │ ├── tab_bar_pic_wall_icon.imageset │ │ │ ├── Contents.json │ │ │ ├── tab_bar_pic_wall_icon.png │ │ │ └── tab_bar_pic_wall_icon@2x.png │ │ ├── tabbar_blog.imageset │ │ │ ├── Contents.json │ │ │ ├── tabbar_blog.png │ │ │ └── tabbar_blog@2x.png │ │ ├── tabbar_mood.imageset │ │ │ ├── Contents.json │ │ │ ├── tabbar_mood.png │ │ │ └── tabbar_mood@2x.png │ │ ├── tabbar_photo.imageset │ │ │ ├── Contents.json │ │ │ ├── tabbar_photo.png │ │ │ └── tabbar_photo@2x.png │ │ └── tabbar_separate_selected_bg.imageset │ │ │ ├── Contents.json │ │ │ ├── tabbar_separate_selected_bg.png │ │ │ └── tabbar_separate_selected_bg@2x.png │ └── icon_image.imageset │ │ ├── Contents.json │ │ └── icon_image.jpg ├── BasicViewController.swift ├── DockView.swift ├── HomePageView.swift ├── HomeViewController.swift ├── IconButton.swift ├── Info.plist ├── MenuBar.swift ├── TabBar.swift ├── TabBarButton.swift └── const.swift └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 4 | 5 | ## Build generated 6 | build/ 7 | DerivedData/ 8 | 9 | ## Various settings 10 | *.pbxuser 11 | !default.pbxuser 12 | *.mode1v3 13 | !default.mode1v3 14 | *.mode2v3 15 | !default.mode2v3 16 | *.perspectivev3 17 | !default.perspectivev3 18 | xcuserdata/ 19 | 20 | ## Other 21 | *.moved-aside 22 | *.xcuserstate 23 | 24 | ## Obj-C/Swift specific 25 | *.hmap 26 | *.ipa 27 | 28 | ## Playgrounds 29 | timeline.xctimeline 30 | playground.xcworkspace 31 | 32 | # Swift Package Manager 33 | # 34 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. 35 | # Packages/ 36 | .build/ 37 | 38 | # CocoaPods 39 | # 40 | # We recommend against adding the Pods directory to your .gitignore. However 41 | # you should judge for yourself, the pros and cons are mentioned at: 42 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 43 | # 44 | # Pods/ 45 | 46 | # Carthage 47 | # 48 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 49 | # Carthage/Checkouts 50 | 51 | Carthage/Build 52 | 53 | # fastlane 54 | # 55 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 56 | # screenshots whenever they are needed. 57 | # For more information about the recommended setup visit: 58 | # https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md 59 | 60 | fastlane/report.xml 61 | fastlane/Preview.html 62 | fastlane/screenshots 63 | fastlane/test_output -------------------------------------------------------------------------------- /QQZone.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | EDA365E21CDB7D3C00F6866B /* IconButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDA365E11CDB7D3C00F6866B /* IconButton.swift */; }; 11 | EDF588CD1CD337DB00D4973B /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDF588CC1CD337DB00D4973B /* AppDelegate.swift */; }; 12 | EDF588D41CD337DB00D4973B /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = EDF588D31CD337DB00D4973B /* Assets.xcassets */; }; 13 | EDF588DF1CD397B600D4973B /* BasicViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDF588DE1CD397B600D4973B /* BasicViewController.swift */; }; 14 | EDF588E11CD3A12600D4973B /* HomeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDF588E01CD3A12600D4973B /* HomeViewController.swift */; }; 15 | EDF588E31CD3A28F00D4973B /* HomePageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDF588E21CD3A28F00D4973B /* HomePageView.swift */; }; 16 | EDF588E51CD3A6A500D4973B /* const.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDF588E41CD3A6A500D4973B /* const.swift */; }; 17 | EDF588E91CD3AA2E00D4973B /* DockView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDF588E81CD3AA2E00D4973B /* DockView.swift */; }; 18 | EDF588EB1CD3B91500D4973B /* MenuBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDF588EA1CD3B91500D4973B /* MenuBar.swift */; }; 19 | EDF588ED1CD43EF900D4973B /* TabBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDF588EC1CD43EF900D4973B /* TabBar.swift */; }; 20 | EDF588EF1CD45AC000D4973B /* TabBarButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDF588EE1CD45AC000D4973B /* TabBarButton.swift */; }; 21 | /* End PBXBuildFile section */ 22 | 23 | /* Begin PBXFileReference section */ 24 | EDA365E11CDB7D3C00F6866B /* IconButton.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IconButton.swift; sourceTree = ""; }; 25 | EDF588C91CD337DB00D4973B /* QQZone.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = QQZone.app; sourceTree = BUILT_PRODUCTS_DIR; }; 26 | EDF588CC1CD337DB00D4973B /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 27 | EDF588D31CD337DB00D4973B /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 28 | EDF588D81CD337DB00D4973B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 29 | EDF588DE1CD397B600D4973B /* BasicViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BasicViewController.swift; sourceTree = ""; }; 30 | EDF588E01CD3A12600D4973B /* HomeViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HomeViewController.swift; sourceTree = ""; }; 31 | EDF588E21CD3A28F00D4973B /* HomePageView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HomePageView.swift; sourceTree = ""; }; 32 | EDF588E41CD3A6A500D4973B /* const.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = const.swift; sourceTree = ""; }; 33 | EDF588E81CD3AA2E00D4973B /* DockView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DockView.swift; sourceTree = ""; }; 34 | EDF588EA1CD3B91500D4973B /* MenuBar.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MenuBar.swift; sourceTree = ""; }; 35 | EDF588EC1CD43EF900D4973B /* TabBar.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TabBar.swift; sourceTree = ""; }; 36 | EDF588EE1CD45AC000D4973B /* TabBarButton.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TabBarButton.swift; sourceTree = ""; }; 37 | /* End PBXFileReference section */ 38 | 39 | /* Begin PBXFrameworksBuildPhase section */ 40 | EDF588C61CD337DB00D4973B /* Frameworks */ = { 41 | isa = PBXFrameworksBuildPhase; 42 | buildActionMask = 2147483647; 43 | files = ( 44 | ); 45 | runOnlyForDeploymentPostprocessing = 0; 46 | }; 47 | /* End PBXFrameworksBuildPhase section */ 48 | 49 | /* Begin PBXGroup section */ 50 | EDA365E31CDB9B8A00F6866B /* Controller */ = { 51 | isa = PBXGroup; 52 | children = ( 53 | EDF588E01CD3A12600D4973B /* HomeViewController.swift */, 54 | EDF588DE1CD397B600D4973B /* BasicViewController.swift */, 55 | ); 56 | name = Controller; 57 | sourceTree = ""; 58 | }; 59 | EDA365E41CDB9B9C00F6866B /* View */ = { 60 | isa = PBXGroup; 61 | children = ( 62 | EDF588E21CD3A28F00D4973B /* HomePageView.swift */, 63 | EDF588E81CD3AA2E00D4973B /* DockView.swift */, 64 | EDA365E11CDB7D3C00F6866B /* IconButton.swift */, 65 | EDF588EC1CD43EF900D4973B /* TabBar.swift */, 66 | EDF588EE1CD45AC000D4973B /* TabBarButton.swift */, 67 | EDF588EA1CD3B91500D4973B /* MenuBar.swift */, 68 | ); 69 | name = View; 70 | sourceTree = ""; 71 | }; 72 | EDA365E51CDB9BA800F6866B /* Other */ = { 73 | isa = PBXGroup; 74 | children = ( 75 | EDF588E41CD3A6A500D4973B /* const.swift */, 76 | ); 77 | name = Other; 78 | sourceTree = ""; 79 | }; 80 | EDA365E61CDB9BC000F6866B /* Resource */ = { 81 | isa = PBXGroup; 82 | children = ( 83 | EDF588D81CD337DB00D4973B /* Info.plist */, 84 | EDF588D31CD337DB00D4973B /* Assets.xcassets */, 85 | ); 86 | name = Resource; 87 | sourceTree = ""; 88 | }; 89 | EDF588C01CD337DB00D4973B = { 90 | isa = PBXGroup; 91 | children = ( 92 | EDF588CB1CD337DB00D4973B /* QQZone */, 93 | EDF588CA1CD337DB00D4973B /* Products */, 94 | ); 95 | sourceTree = ""; 96 | }; 97 | EDF588CA1CD337DB00D4973B /* Products */ = { 98 | isa = PBXGroup; 99 | children = ( 100 | EDF588C91CD337DB00D4973B /* QQZone.app */, 101 | ); 102 | name = Products; 103 | sourceTree = ""; 104 | }; 105 | EDF588CB1CD337DB00D4973B /* QQZone */ = { 106 | isa = PBXGroup; 107 | children = ( 108 | EDF588CC1CD337DB00D4973B /* AppDelegate.swift */, 109 | EDA365E31CDB9B8A00F6866B /* Controller */, 110 | EDA365E41CDB9B9C00F6866B /* View */, 111 | EDA365E51CDB9BA800F6866B /* Other */, 112 | EDA365E61CDB9BC000F6866B /* Resource */, 113 | ); 114 | path = QQZone; 115 | sourceTree = ""; 116 | }; 117 | /* End PBXGroup section */ 118 | 119 | /* Begin PBXNativeTarget section */ 120 | EDF588C81CD337DB00D4973B /* QQZone */ = { 121 | isa = PBXNativeTarget; 122 | buildConfigurationList = EDF588DB1CD337DB00D4973B /* Build configuration list for PBXNativeTarget "QQZone" */; 123 | buildPhases = ( 124 | EDF588C51CD337DB00D4973B /* Sources */, 125 | EDF588C61CD337DB00D4973B /* Frameworks */, 126 | EDF588C71CD337DB00D4973B /* Resources */, 127 | ); 128 | buildRules = ( 129 | ); 130 | dependencies = ( 131 | ); 132 | name = QQZone; 133 | productName = QQZone; 134 | productReference = EDF588C91CD337DB00D4973B /* QQZone.app */; 135 | productType = "com.apple.product-type.application"; 136 | }; 137 | /* End PBXNativeTarget section */ 138 | 139 | /* Begin PBXProject section */ 140 | EDF588C11CD337DB00D4973B /* Project object */ = { 141 | isa = PBXProject; 142 | attributes = { 143 | LastSwiftUpdateCheck = 0730; 144 | LastUpgradeCheck = 0730; 145 | ORGANIZATIONNAME = Jack.Ma; 146 | TargetAttributes = { 147 | EDF588C81CD337DB00D4973B = { 148 | CreatedOnToolsVersion = 7.3; 149 | DevelopmentTeam = Q85YNDP8X4; 150 | }; 151 | }; 152 | }; 153 | buildConfigurationList = EDF588C41CD337DB00D4973B /* Build configuration list for PBXProject "QQZone" */; 154 | compatibilityVersion = "Xcode 3.2"; 155 | developmentRegion = English; 156 | hasScannedForEncodings = 0; 157 | knownRegions = ( 158 | en, 159 | Base, 160 | ); 161 | mainGroup = EDF588C01CD337DB00D4973B; 162 | productRefGroup = EDF588CA1CD337DB00D4973B /* Products */; 163 | projectDirPath = ""; 164 | projectRoot = ""; 165 | targets = ( 166 | EDF588C81CD337DB00D4973B /* QQZone */, 167 | ); 168 | }; 169 | /* End PBXProject section */ 170 | 171 | /* Begin PBXResourcesBuildPhase section */ 172 | EDF588C71CD337DB00D4973B /* Resources */ = { 173 | isa = PBXResourcesBuildPhase; 174 | buildActionMask = 2147483647; 175 | files = ( 176 | EDF588D41CD337DB00D4973B /* Assets.xcassets in Resources */, 177 | ); 178 | runOnlyForDeploymentPostprocessing = 0; 179 | }; 180 | /* End PBXResourcesBuildPhase section */ 181 | 182 | /* Begin PBXSourcesBuildPhase section */ 183 | EDF588C51CD337DB00D4973B /* Sources */ = { 184 | isa = PBXSourcesBuildPhase; 185 | buildActionMask = 2147483647; 186 | files = ( 187 | EDF588ED1CD43EF900D4973B /* TabBar.swift in Sources */, 188 | EDF588DF1CD397B600D4973B /* BasicViewController.swift in Sources */, 189 | EDF588EF1CD45AC000D4973B /* TabBarButton.swift in Sources */, 190 | EDF588EB1CD3B91500D4973B /* MenuBar.swift in Sources */, 191 | EDF588CD1CD337DB00D4973B /* AppDelegate.swift in Sources */, 192 | EDF588E51CD3A6A500D4973B /* const.swift in Sources */, 193 | EDF588E11CD3A12600D4973B /* HomeViewController.swift in Sources */, 194 | EDA365E21CDB7D3C00F6866B /* IconButton.swift in Sources */, 195 | EDF588E31CD3A28F00D4973B /* HomePageView.swift in Sources */, 196 | EDF588E91CD3AA2E00D4973B /* DockView.swift in Sources */, 197 | ); 198 | runOnlyForDeploymentPostprocessing = 0; 199 | }; 200 | /* End PBXSourcesBuildPhase section */ 201 | 202 | /* Begin XCBuildConfiguration section */ 203 | EDF588D91CD337DB00D4973B /* Debug */ = { 204 | isa = XCBuildConfiguration; 205 | buildSettings = { 206 | ALWAYS_SEARCH_USER_PATHS = NO; 207 | CLANG_ANALYZER_NONNULL = YES; 208 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 209 | CLANG_CXX_LIBRARY = "libc++"; 210 | CLANG_ENABLE_MODULES = YES; 211 | CLANG_ENABLE_OBJC_ARC = YES; 212 | CLANG_WARN_BOOL_CONVERSION = YES; 213 | CLANG_WARN_CONSTANT_CONVERSION = YES; 214 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 215 | CLANG_WARN_EMPTY_BODY = YES; 216 | CLANG_WARN_ENUM_CONVERSION = YES; 217 | CLANG_WARN_INT_CONVERSION = YES; 218 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 219 | CLANG_WARN_UNREACHABLE_CODE = YES; 220 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 221 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 222 | COPY_PHASE_STRIP = NO; 223 | DEBUG_INFORMATION_FORMAT = dwarf; 224 | ENABLE_STRICT_OBJC_MSGSEND = YES; 225 | ENABLE_TESTABILITY = YES; 226 | GCC_C_LANGUAGE_STANDARD = gnu99; 227 | GCC_DYNAMIC_NO_PIC = NO; 228 | GCC_NO_COMMON_BLOCKS = YES; 229 | GCC_OPTIMIZATION_LEVEL = 0; 230 | GCC_PREPROCESSOR_DEFINITIONS = ( 231 | "DEBUG=1", 232 | "$(inherited)", 233 | ); 234 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 235 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 236 | GCC_WARN_UNDECLARED_SELECTOR = YES; 237 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 238 | GCC_WARN_UNUSED_FUNCTION = YES; 239 | GCC_WARN_UNUSED_VARIABLE = YES; 240 | IPHONEOS_DEPLOYMENT_TARGET = 9.3; 241 | MTL_ENABLE_DEBUG_INFO = YES; 242 | ONLY_ACTIVE_ARCH = YES; 243 | SDKROOT = iphoneos; 244 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 245 | }; 246 | name = Debug; 247 | }; 248 | EDF588DA1CD337DB00D4973B /* Release */ = { 249 | isa = XCBuildConfiguration; 250 | buildSettings = { 251 | ALWAYS_SEARCH_USER_PATHS = NO; 252 | CLANG_ANALYZER_NONNULL = YES; 253 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 254 | CLANG_CXX_LIBRARY = "libc++"; 255 | CLANG_ENABLE_MODULES = YES; 256 | CLANG_ENABLE_OBJC_ARC = YES; 257 | CLANG_WARN_BOOL_CONVERSION = YES; 258 | CLANG_WARN_CONSTANT_CONVERSION = YES; 259 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 260 | CLANG_WARN_EMPTY_BODY = YES; 261 | CLANG_WARN_ENUM_CONVERSION = YES; 262 | CLANG_WARN_INT_CONVERSION = YES; 263 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 264 | CLANG_WARN_UNREACHABLE_CODE = YES; 265 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 266 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 267 | COPY_PHASE_STRIP = NO; 268 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 269 | ENABLE_NS_ASSERTIONS = NO; 270 | ENABLE_STRICT_OBJC_MSGSEND = YES; 271 | GCC_C_LANGUAGE_STANDARD = gnu99; 272 | GCC_NO_COMMON_BLOCKS = YES; 273 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 274 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 275 | GCC_WARN_UNDECLARED_SELECTOR = YES; 276 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 277 | GCC_WARN_UNUSED_FUNCTION = YES; 278 | GCC_WARN_UNUSED_VARIABLE = YES; 279 | IPHONEOS_DEPLOYMENT_TARGET = 9.3; 280 | MTL_ENABLE_DEBUG_INFO = NO; 281 | SDKROOT = iphoneos; 282 | VALIDATE_PRODUCT = YES; 283 | }; 284 | name = Release; 285 | }; 286 | EDF588DC1CD337DB00D4973B /* Debug */ = { 287 | isa = XCBuildConfiguration; 288 | buildSettings = { 289 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 290 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = "Brand Assets"; 291 | INFOPLIST_FILE = QQZone/Info.plist; 292 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 293 | PRODUCT_BUNDLE_IDENTIFIER = com.JackMa.QQZone; 294 | PRODUCT_NAME = "$(TARGET_NAME)"; 295 | TARGETED_DEVICE_FAMILY = 2; 296 | }; 297 | name = Debug; 298 | }; 299 | EDF588DD1CD337DB00D4973B /* Release */ = { 300 | isa = XCBuildConfiguration; 301 | buildSettings = { 302 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 303 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = "Brand Assets"; 304 | INFOPLIST_FILE = QQZone/Info.plist; 305 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 306 | PRODUCT_BUNDLE_IDENTIFIER = com.JackMa.QQZone; 307 | PRODUCT_NAME = "$(TARGET_NAME)"; 308 | TARGETED_DEVICE_FAMILY = 2; 309 | }; 310 | name = Release; 311 | }; 312 | /* End XCBuildConfiguration section */ 313 | 314 | /* Begin XCConfigurationList section */ 315 | EDF588C41CD337DB00D4973B /* Build configuration list for PBXProject "QQZone" */ = { 316 | isa = XCConfigurationList; 317 | buildConfigurations = ( 318 | EDF588D91CD337DB00D4973B /* Debug */, 319 | EDF588DA1CD337DB00D4973B /* Release */, 320 | ); 321 | defaultConfigurationIsVisible = 0; 322 | defaultConfigurationName = Release; 323 | }; 324 | EDF588DB1CD337DB00D4973B /* Build configuration list for PBXNativeTarget "QQZone" */ = { 325 | isa = XCConfigurationList; 326 | buildConfigurations = ( 327 | EDF588DC1CD337DB00D4973B /* Debug */, 328 | EDF588DD1CD337DB00D4973B /* Release */, 329 | ); 330 | defaultConfigurationIsVisible = 0; 331 | defaultConfigurationName = Release; 332 | }; 333 | /* End XCConfigurationList section */ 334 | }; 335 | rootObject = EDF588C11CD337DB00D4973B /* Project object */; 336 | } 337 | -------------------------------------------------------------------------------- /QQZone.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /QQZone/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // QQZone 4 | // 5 | // Created by Jack.Ma on 16/4/29. 6 | // Copyright © 2016年 Jack.Ma. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @UIApplicationMain 12 | class AppDelegate: UIResponder, UIApplicationDelegate { 13 | 14 | var window: UIWindow? 15 | 16 | 17 | func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 18 | // Override point for customization after application launch. 19 | let frame = UIScreen.mainScreen().bounds 20 | window = UIWindow(frame: frame) 21 | window?.rootViewController = HomeViewController() 22 | window?.makeKeyAndVisible() 23 | 24 | return true 25 | } 26 | 27 | func applicationWillResignActive(application: UIApplication) { 28 | // 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. 29 | // 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. 30 | } 31 | 32 | func applicationDidEnterBackground(application: UIApplication) { 33 | // 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. 34 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 35 | } 36 | 37 | func applicationWillEnterForeground(application: UIApplication) { 38 | // 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. 39 | } 40 | 41 | func applicationDidBecomeActive(application: UIApplication) { 42 | // 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. 43 | } 44 | 45 | func applicationWillTerminate(application: UIApplication) { 46 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 47 | } 48 | 49 | 50 | } 51 | 52 | -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/AppIcon.appiconset/AppIcon29x29@2x~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMStack/QQZone/a2a4604ac34797dfc463145a125150aeeb5ec969/QQZone/Assets.xcassets/AppIcon.appiconset/AppIcon29x29@2x~ipad.png -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/AppIcon.appiconset/AppIcon29x29~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMStack/QQZone/a2a4604ac34797dfc463145a125150aeeb5ec969/QQZone/Assets.xcassets/AppIcon.appiconset/AppIcon29x29~ipad.png -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/AppIcon.appiconset/AppIcon40x40@2x~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMStack/QQZone/a2a4604ac34797dfc463145a125150aeeb5ec969/QQZone/Assets.xcassets/AppIcon.appiconset/AppIcon40x40@2x~ipad.png -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/AppIcon.appiconset/AppIcon40x40~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMStack/QQZone/a2a4604ac34797dfc463145a125150aeeb5ec969/QQZone/Assets.xcassets/AppIcon.appiconset/AppIcon40x40~ipad.png -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/AppIcon.appiconset/AppIcon50x50@2x~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMStack/QQZone/a2a4604ac34797dfc463145a125150aeeb5ec969/QQZone/Assets.xcassets/AppIcon.appiconset/AppIcon50x50@2x~ipad.png -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/AppIcon.appiconset/AppIcon50x50~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMStack/QQZone/a2a4604ac34797dfc463145a125150aeeb5ec969/QQZone/Assets.xcassets/AppIcon.appiconset/AppIcon50x50~ipad.png -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/AppIcon.appiconset/AppIcon72x72@2x~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMStack/QQZone/a2a4604ac34797dfc463145a125150aeeb5ec969/QQZone/Assets.xcassets/AppIcon.appiconset/AppIcon72x72@2x~ipad.png -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/AppIcon.appiconset/AppIcon72x72~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMStack/QQZone/a2a4604ac34797dfc463145a125150aeeb5ec969/QQZone/Assets.xcassets/AppIcon.appiconset/AppIcon72x72~ipad.png -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/AppIcon.appiconset/AppIcon76x76@2x~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMStack/QQZone/a2a4604ac34797dfc463145a125150aeeb5ec969/QQZone/Assets.xcassets/AppIcon.appiconset/AppIcon76x76@2x~ipad.png -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/AppIcon.appiconset/AppIcon76x76~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMStack/QQZone/a2a4604ac34797dfc463145a125150aeeb5ec969/QQZone/Assets.xcassets/AppIcon.appiconset/AppIcon76x76~ipad.png -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/AppIcon.appiconset/AppIcon83.5x83.5@2x~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMStack/QQZone/a2a4604ac34797dfc463145a125150aeeb5ec969/QQZone/Assets.xcassets/AppIcon.appiconset/AppIcon83.5x83.5@2x~ipad.png -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "size" : "29x29", 35 | "idiom" : "ipad", 36 | "filename" : "AppIcon29x29~ipad.png", 37 | "scale" : "1x" 38 | }, 39 | { 40 | "idiom" : "ipad", 41 | "size" : "29x29", 42 | "scale" : "2x" 43 | }, 44 | { 45 | "size" : "40x40", 46 | "idiom" : "ipad", 47 | "filename" : "AppIcon40x40~ipad.png", 48 | "scale" : "1x" 49 | }, 50 | { 51 | "size" : "40x40", 52 | "idiom" : "ipad", 53 | "filename" : "AppIcon40x40@2x~ipad.png", 54 | "scale" : "2x" 55 | }, 56 | { 57 | "size" : "50x50", 58 | "idiom" : "ipad", 59 | "filename" : "AppIcon50x50~ipad.png", 60 | "scale" : "1x" 61 | }, 62 | { 63 | "size" : "50x50", 64 | "idiom" : "ipad", 65 | "filename" : "AppIcon50x50@2x~ipad.png", 66 | "scale" : "2x" 67 | }, 68 | { 69 | "idiom" : "ipad", 70 | "size" : "72x72", 71 | "scale" : "1x" 72 | }, 73 | { 74 | "size" : "72x72", 75 | "idiom" : "ipad", 76 | "filename" : "AppIcon72x72@2x~ipad.png", 77 | "scale" : "2x" 78 | }, 79 | { 80 | "size" : "76x76", 81 | "idiom" : "ipad", 82 | "filename" : "AppIcon76x76~ipad.png", 83 | "scale" : "1x" 84 | }, 85 | { 86 | "size" : "76x76", 87 | "idiom" : "ipad", 88 | "filename" : "AppIcon76x76@2x~ipad.png", 89 | "scale" : "2x" 90 | }, 91 | { 92 | "size" : "83.5x83.5", 93 | "idiom" : "ipad", 94 | "filename" : "AppIcon83.5x83.5@2x~ipad.png", 95 | "scale" : "2x" 96 | }, 97 | { 98 | "size" : "24x24", 99 | "idiom" : "watch", 100 | "scale" : "2x", 101 | "role" : "notificationCenter", 102 | "subtype" : "38mm" 103 | }, 104 | { 105 | "size" : "27.5x27.5", 106 | "idiom" : "watch", 107 | "scale" : "2x", 108 | "role" : "notificationCenter", 109 | "subtype" : "42mm" 110 | }, 111 | { 112 | "size" : "29x29", 113 | "idiom" : "watch", 114 | "filename" : "AppIcon29x29@2x~ipad.png", 115 | "role" : "companionSettings", 116 | "scale" : "2x" 117 | }, 118 | { 119 | "size" : "29x29", 120 | "idiom" : "watch", 121 | "role" : "companionSettings", 122 | "scale" : "3x" 123 | }, 124 | { 125 | "size" : "40x40", 126 | "idiom" : "watch", 127 | "scale" : "2x", 128 | "role" : "appLauncher", 129 | "subtype" : "38mm" 130 | }, 131 | { 132 | "size" : "86x86", 133 | "idiom" : "watch", 134 | "scale" : "2x", 135 | "role" : "quickLook", 136 | "subtype" : "38mm" 137 | }, 138 | { 139 | "size" : "98x98", 140 | "idiom" : "watch", 141 | "scale" : "2x", 142 | "role" : "quickLook", 143 | "subtype" : "42mm" 144 | } 145 | ], 146 | "info" : { 147 | "version" : 1, 148 | "author" : "xcode" 149 | } 150 | } -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/Brand Assets.launchimage/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "orientation" : "portrait", 5 | "idiom" : "ipad", 6 | "filename" : "Default-Portrait.png", 7 | "extent" : "full-screen", 8 | "minimum-system-version" : "7.0", 9 | "scale" : "1x" 10 | }, 11 | { 12 | "orientation" : "landscape", 13 | "idiom" : "ipad", 14 | "filename" : "Default-Landscape.png", 15 | "extent" : "full-screen", 16 | "minimum-system-version" : "7.0", 17 | "scale" : "1x" 18 | }, 19 | { 20 | "orientation" : "portrait", 21 | "idiom" : "ipad", 22 | "filename" : "Default-Portrait@2x.png", 23 | "extent" : "full-screen", 24 | "minimum-system-version" : "7.0", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "orientation" : "landscape", 29 | "idiom" : "ipad", 30 | "filename" : "Default-Landscape@2x.png", 31 | "extent" : "full-screen", 32 | "minimum-system-version" : "7.0", 33 | "scale" : "2x" 34 | }, 35 | { 36 | "orientation" : "portrait", 37 | "idiom" : "ipad", 38 | "extent" : "full-screen", 39 | "scale" : "1x" 40 | }, 41 | { 42 | "orientation" : "portrait", 43 | "idiom" : "ipad", 44 | "extent" : "full-screen", 45 | "scale" : "2x" 46 | } 47 | ], 48 | "info" : { 49 | "version" : 1, 50 | "author" : "xcode" 51 | } 52 | } -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/Brand Assets.launchimage/Default-Landscape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMStack/QQZone/a2a4604ac34797dfc463145a125150aeeb5ec969/QQZone/Assets.xcassets/Brand Assets.launchimage/Default-Landscape.png -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/Brand Assets.launchimage/Default-Landscape@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMStack/QQZone/a2a4604ac34797dfc463145a125150aeeb5ec969/QQZone/Assets.xcassets/Brand Assets.launchimage/Default-Landscape@2x.png -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/Brand Assets.launchimage/Default-Portrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMStack/QQZone/a2a4604ac34797dfc463145a125150aeeb5ec969/QQZone/Assets.xcassets/Brand Assets.launchimage/Default-Portrait.png -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/Brand Assets.launchimage/Default-Portrait@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMStack/QQZone/a2a4604ac34797dfc463145a125150aeeb5ec969/QQZone/Assets.xcassets/Brand Assets.launchimage/Default-Portrait@2x.png -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/Login/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/Login/login_button_normal.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "resizing" : { 5 | "mode" : "9-part", 6 | "center" : { 7 | "mode" : "tile", 8 | "width" : 1, 9 | "height" : 1 10 | }, 11 | "cap-insets" : { 12 | "bottom" : 5, 13 | "top" : 5, 14 | "right" : 10, 15 | "left" : 8 16 | } 17 | }, 18 | "idiom" : "universal", 19 | "filename" : "login_button_normal.png", 20 | "scale" : "1x" 21 | }, 22 | { 23 | "resizing" : { 24 | "mode" : "9-part", 25 | "center" : { 26 | "mode" : "tile", 27 | "width" : 1, 28 | "height" : 1 29 | }, 30 | "cap-insets" : { 31 | "bottom" : 10, 32 | "top" : 10, 33 | "right" : 20, 34 | "left" : 18 35 | } 36 | }, 37 | "idiom" : "universal", 38 | "filename" : "login_button_normal@2x.png", 39 | "scale" : "2x" 40 | }, 41 | { 42 | "idiom" : "universal", 43 | "scale" : "3x" 44 | } 45 | ], 46 | "info" : { 47 | "version" : 1, 48 | "author" : "xcode" 49 | } 50 | } -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/Login/login_button_normal.imageset/login_button_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMStack/QQZone/a2a4604ac34797dfc463145a125150aeeb5ec969/QQZone/Assets.xcassets/Login/login_button_normal.imageset/login_button_normal.png -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/Login/login_button_normal.imageset/login_button_normal@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMStack/QQZone/a2a4604ac34797dfc463145a125150aeeb5ec969/QQZone/Assets.xcassets/Login/login_button_normal.imageset/login_button_normal@2x.png -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/Login/login_button_pressed.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "resizing" : { 5 | "mode" : "9-part", 6 | "center" : { 7 | "mode" : "tile", 8 | "width" : 1, 9 | "height" : 1 10 | }, 11 | "cap-insets" : { 12 | "bottom" : 5, 13 | "top" : 5, 14 | "right" : 10, 15 | "left" : 8 16 | } 17 | }, 18 | "idiom" : "universal", 19 | "filename" : "login_button_pressed.png", 20 | "scale" : "1x" 21 | }, 22 | { 23 | "resizing" : { 24 | "mode" : "9-part", 25 | "center" : { 26 | "mode" : "tile", 27 | "width" : 1, 28 | "height" : 1 29 | }, 30 | "cap-insets" : { 31 | "bottom" : 10, 32 | "top" : 9, 33 | "right" : 20, 34 | "left" : 18 35 | } 36 | }, 37 | "idiom" : "universal", 38 | "filename" : "login_button_pressed@2x.png", 39 | "scale" : "2x" 40 | }, 41 | { 42 | "idiom" : "universal", 43 | "scale" : "3x" 44 | } 45 | ], 46 | "info" : { 47 | "version" : 1, 48 | "author" : "xcode" 49 | } 50 | } -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/Login/login_button_pressed.imageset/login_button_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMStack/QQZone/a2a4604ac34797dfc463145a125150aeeb5ec969/QQZone/Assets.xcassets/Login/login_button_pressed.imageset/login_button_pressed.png -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/Login/login_button_pressed.imageset/login_button_pressed@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMStack/QQZone/a2a4604ac34797dfc463145a125150aeeb5ec969/QQZone/Assets.xcassets/Login/login_button_pressed.imageset/login_button_pressed@2x.png -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/Login/login_checkbox_checked.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "login_checkbox_checked.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "login_checkbox_checked@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/Login/login_checkbox_checked.imageset/login_checkbox_checked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMStack/QQZone/a2a4604ac34797dfc463145a125150aeeb5ec969/QQZone/Assets.xcassets/Login/login_checkbox_checked.imageset/login_checkbox_checked.png -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/Login/login_checkbox_checked.imageset/login_checkbox_checked@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMStack/QQZone/a2a4604ac34797dfc463145a125150aeeb5ec969/QQZone/Assets.xcassets/Login/login_checkbox_checked.imageset/login_checkbox_checked@2x.png -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/Login/login_checkbox_normal.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "login_checkbox_normal.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "login_checkbox_normal@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/Login/login_checkbox_normal.imageset/login_checkbox_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMStack/QQZone/a2a4604ac34797dfc463145a125150aeeb5ec969/QQZone/Assets.xcassets/Login/login_checkbox_normal.imageset/login_checkbox_normal.png -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/Login/login_checkbox_normal.imageset/login_checkbox_normal@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMStack/QQZone/a2a4604ac34797dfc463145a125150aeeb5ec969/QQZone/Assets.xcassets/Login/login_checkbox_normal.imageset/login_checkbox_normal@2x.png -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/Login/login_default_avatar.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "login_default_avatar.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "login_default_avatar@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/Login/login_default_avatar.imageset/login_default_avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMStack/QQZone/a2a4604ac34797dfc463145a125150aeeb5ec969/QQZone/Assets.xcassets/Login/login_default_avatar.imageset/login_default_avatar.png -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/Login/login_default_avatar.imageset/login_default_avatar@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMStack/QQZone/a2a4604ac34797dfc463145a125150aeeb5ec969/QQZone/Assets.xcassets/Login/login_default_avatar.imageset/login_default_avatar@2x.png -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/Login/login_input_bg.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "resizing" : { 5 | "mode" : "9-part", 6 | "center" : { 7 | "mode" : "tile", 8 | "width" : 1, 9 | "height" : 1 10 | }, 11 | "cap-insets" : { 12 | "bottom" : 62, 13 | "top" : 5, 14 | "right" : 9, 15 | "left" : 8 16 | } 17 | }, 18 | "idiom" : "universal", 19 | "filename" : "login_input_bg.png", 20 | "scale" : "1x" 21 | }, 22 | { 23 | "resizing" : { 24 | "mode" : "9-part", 25 | "center" : { 26 | "mode" : "tile", 27 | "width" : 1, 28 | "height" : 1 29 | }, 30 | "cap-insets" : { 31 | "bottom" : 124, 32 | "top" : 10, 33 | "right" : 18, 34 | "left" : 17 35 | } 36 | }, 37 | "idiom" : "universal", 38 | "filename" : "login_input_bg@2x.png", 39 | "scale" : "2x" 40 | }, 41 | { 42 | "idiom" : "universal", 43 | "scale" : "3x" 44 | } 45 | ], 46 | "info" : { 47 | "version" : 1, 48 | "author" : "xcode" 49 | } 50 | } -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/Login/login_input_bg.imageset/login_input_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMStack/QQZone/a2a4604ac34797dfc463145a125150aeeb5ec969/QQZone/Assets.xcassets/Login/login_input_bg.imageset/login_input_bg.png -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/Login/login_input_bg.imageset/login_input_bg@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMStack/QQZone/a2a4604ac34797dfc463145a125150aeeb5ec969/QQZone/Assets.xcassets/Login/login_input_bg.imageset/login_input_bg@2x.png -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/TabBar/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/TabBar/tab_bar_e_album_icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "tab_bar_e_album_icon.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "tab_bar_e_album_icon@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/TabBar/tab_bar_e_album_icon.imageset/tab_bar_e_album_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMStack/QQZone/a2a4604ac34797dfc463145a125150aeeb5ec969/QQZone/Assets.xcassets/TabBar/tab_bar_e_album_icon.imageset/tab_bar_e_album_icon.png -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/TabBar/tab_bar_e_album_icon.imageset/tab_bar_e_album_icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMStack/QQZone/a2a4604ac34797dfc463145a125150aeeb5ec969/QQZone/Assets.xcassets/TabBar/tab_bar_e_album_icon.imageset/tab_bar_e_album_icon@2x.png -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/TabBar/tab_bar_e_more_icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "tab_bar_e_more_icon.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "tab_bar_e_more_icon@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/TabBar/tab_bar_e_more_icon.imageset/tab_bar_e_more_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMStack/QQZone/a2a4604ac34797dfc463145a125150aeeb5ec969/QQZone/Assets.xcassets/TabBar/tab_bar_e_more_icon.imageset/tab_bar_e_more_icon.png -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/TabBar/tab_bar_e_more_icon.imageset/tab_bar_e_more_icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMStack/QQZone/a2a4604ac34797dfc463145a125150aeeb5ec969/QQZone/Assets.xcassets/TabBar/tab_bar_e_more_icon.imageset/tab_bar_e_more_icon@2x.png -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/TabBar/tab_bar_feed_icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "tab_bar_feed_icon.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "tab_bar_feed_icon@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/TabBar/tab_bar_feed_icon.imageset/tab_bar_feed_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMStack/QQZone/a2a4604ac34797dfc463145a125150aeeb5ec969/QQZone/Assets.xcassets/TabBar/tab_bar_feed_icon.imageset/tab_bar_feed_icon.png -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/TabBar/tab_bar_feed_icon.imageset/tab_bar_feed_icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMStack/QQZone/a2a4604ac34797dfc463145a125150aeeb5ec969/QQZone/Assets.xcassets/TabBar/tab_bar_feed_icon.imageset/tab_bar_feed_icon@2x.png -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/TabBar/tab_bar_friend_icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "tab_bar_friend_icon.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "tab_bar_friend_icon@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/TabBar/tab_bar_friend_icon.imageset/tab_bar_friend_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMStack/QQZone/a2a4604ac34797dfc463145a125150aeeb5ec969/QQZone/Assets.xcassets/TabBar/tab_bar_friend_icon.imageset/tab_bar_friend_icon.png -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/TabBar/tab_bar_friend_icon.imageset/tab_bar_friend_icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMStack/QQZone/a2a4604ac34797dfc463145a125150aeeb5ec969/QQZone/Assets.xcassets/TabBar/tab_bar_friend_icon.imageset/tab_bar_friend_icon@2x.png -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/TabBar/tab_bar_passive_feed_icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "tab_bar_passive_feed_icon.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "tab_bar_passive_feed_icon@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/TabBar/tab_bar_passive_feed_icon.imageset/tab_bar_passive_feed_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMStack/QQZone/a2a4604ac34797dfc463145a125150aeeb5ec969/QQZone/Assets.xcassets/TabBar/tab_bar_passive_feed_icon.imageset/tab_bar_passive_feed_icon.png -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/TabBar/tab_bar_passive_feed_icon.imageset/tab_bar_passive_feed_icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMStack/QQZone/a2a4604ac34797dfc463145a125150aeeb5ec969/QQZone/Assets.xcassets/TabBar/tab_bar_passive_feed_icon.imageset/tab_bar_passive_feed_icon@2x.png -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/TabBar/tab_bar_pic_wall_icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "tab_bar_pic_wall_icon.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "tab_bar_pic_wall_icon@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/TabBar/tab_bar_pic_wall_icon.imageset/tab_bar_pic_wall_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMStack/QQZone/a2a4604ac34797dfc463145a125150aeeb5ec969/QQZone/Assets.xcassets/TabBar/tab_bar_pic_wall_icon.imageset/tab_bar_pic_wall_icon.png -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/TabBar/tab_bar_pic_wall_icon.imageset/tab_bar_pic_wall_icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMStack/QQZone/a2a4604ac34797dfc463145a125150aeeb5ec969/QQZone/Assets.xcassets/TabBar/tab_bar_pic_wall_icon.imageset/tab_bar_pic_wall_icon@2x.png -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/TabBar/tabbar_blog.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "tabbar_blog.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "tabbar_blog@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/TabBar/tabbar_blog.imageset/tabbar_blog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMStack/QQZone/a2a4604ac34797dfc463145a125150aeeb5ec969/QQZone/Assets.xcassets/TabBar/tabbar_blog.imageset/tabbar_blog.png -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/TabBar/tabbar_blog.imageset/tabbar_blog@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMStack/QQZone/a2a4604ac34797dfc463145a125150aeeb5ec969/QQZone/Assets.xcassets/TabBar/tabbar_blog.imageset/tabbar_blog@2x.png -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/TabBar/tabbar_mood.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "tabbar_mood.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "tabbar_mood@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/TabBar/tabbar_mood.imageset/tabbar_mood.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMStack/QQZone/a2a4604ac34797dfc463145a125150aeeb5ec969/QQZone/Assets.xcassets/TabBar/tabbar_mood.imageset/tabbar_mood.png -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/TabBar/tabbar_mood.imageset/tabbar_mood@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMStack/QQZone/a2a4604ac34797dfc463145a125150aeeb5ec969/QQZone/Assets.xcassets/TabBar/tabbar_mood.imageset/tabbar_mood@2x.png -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/TabBar/tabbar_photo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "tabbar_photo.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "tabbar_photo@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/TabBar/tabbar_photo.imageset/tabbar_photo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMStack/QQZone/a2a4604ac34797dfc463145a125150aeeb5ec969/QQZone/Assets.xcassets/TabBar/tabbar_photo.imageset/tabbar_photo.png -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/TabBar/tabbar_photo.imageset/tabbar_photo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMStack/QQZone/a2a4604ac34797dfc463145a125150aeeb5ec969/QQZone/Assets.xcassets/TabBar/tabbar_photo.imageset/tabbar_photo@2x.png -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/TabBar/tabbar_separate_selected_bg.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "tabbar_separate_selected_bg.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "tabbar_separate_selected_bg@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/TabBar/tabbar_separate_selected_bg.imageset/tabbar_separate_selected_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMStack/QQZone/a2a4604ac34797dfc463145a125150aeeb5ec969/QQZone/Assets.xcassets/TabBar/tabbar_separate_selected_bg.imageset/tabbar_separate_selected_bg.png -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/TabBar/tabbar_separate_selected_bg.imageset/tabbar_separate_selected_bg@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMStack/QQZone/a2a4604ac34797dfc463145a125150aeeb5ec969/QQZone/Assets.xcassets/TabBar/tabbar_separate_selected_bg.imageset/tabbar_separate_selected_bg@2x.png -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/icon_image.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_image.jpg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /QQZone/Assets.xcassets/icon_image.imageset/icon_image.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMStack/QQZone/a2a4604ac34797dfc463145a125150aeeb5ec969/QQZone/Assets.xcassets/icon_image.imageset/icon_image.jpg -------------------------------------------------------------------------------- /QQZone/BasicViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BasicViewController.swift 3 | // QQZone 4 | // 5 | // Created by Jack.Ma on 16/4/29. 6 | // Copyright © 2016年 Jack.Ma. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class BasicViewController: UIViewController { 12 | override func preferredStatusBarStyle() -> UIStatusBarStyle { 13 | return .LightContent 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /QQZone/DockView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DockView.swift 3 | // QQZone 4 | // 5 | // Created by Jack.Ma on 16/4/29. 6 | // Copyright © 2016年 Jack.Ma. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class DockView: UIView, UIViewisPortrait{ 12 | 13 | private lazy var customTabBar: TabBar = { 14 | let customTaBar = TabBar() 15 | self.addSubview(customTaBar) 16 | return customTaBar 17 | }() 18 | 19 | private lazy var customMenuBar: MenuBar = { 20 | let customMenuBar = MenuBar() 21 | self.addSubview(customMenuBar) 22 | return customMenuBar 23 | }() 24 | 25 | private lazy var customIcon: IconButton = { 26 | let customIcon = IconButton() 27 | self.addSubview(customIcon) 28 | customIcon.setImage(UIImage(named:"icon_image"), forState: .Normal) 29 | customIcon.setTitle("小黄人", forState: .Normal) 30 | return customIcon 31 | }() 32 | 33 | override init(frame: CGRect) { 34 | super.init(frame: frame) 35 | backgroundColor = globalBackgroudColor 36 | } 37 | 38 | required init?(coder aDecoder: NSCoder) { 39 | fatalError("init(coder:) has not been implemented") 40 | } 41 | 42 | func isPortrait() -> Bool { 43 | guard let superview = superview else { 44 | return true 45 | } 46 | return ((superview as? UIViewisPortrait)?.isPortrait())! 47 | } 48 | } 49 | 50 | 51 | // MARK: - layoutsubviews 52 | extension DockView { 53 | 54 | override func layoutSubviews() { 55 | super.layoutSubviews() 56 | 57 | var x, y, w, h:CGFloat 58 | w = frame.width 59 | x = 0 60 | if isPortrait() == true { 61 | h = 3 * kDockItemHeight 62 | y = frame.height - h 63 | customMenuBar.frame = CGRect(x: x, y: y, width: w, height: h) 64 | } else { 65 | h = kDockItemHeight 66 | y = frame.height - h 67 | customMenuBar.frame = CGRect(x: x, y: y, width: w, height: h) 68 | 69 | } 70 | 71 | if isPortrait() == true { 72 | h = 6 * kDockItemHeight 73 | y = frame.height - customMenuBar.frame.height - h 74 | customTabBar.frame = CGRect(x: x, y: y, width: w, height: h) 75 | } else { 76 | h = 6 * kDockItemHeight 77 | y = frame.height - customMenuBar.frame.height - h 78 | customTabBar.frame = CGRect(x: x, y: y, width: w, height: h) 79 | } 80 | 81 | y = kIconButtonY 82 | if isPortrait() == true { 83 | w = kIconButtonWH 84 | x = (frame.width - w) * 0.5 85 | customIcon.frame = CGRect(x: x, y: y, width: w, height: w) 86 | } else { 87 | w = kIconButtonLandscapeWidth 88 | h = kIconButtonLandscapeHeight 89 | x = (frame.width - w) * 0.5 90 | customIcon.frame = CGRect(x: x, y: y, width: w, height: h) 91 | } 92 | } 93 | 94 | } 95 | -------------------------------------------------------------------------------- /QQZone/HomePageView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // HomePageView.swift 3 | // QQZone 4 | // 5 | // Created by Jack.Ma on 16/4/29. 6 | // Copyright © 2016年 Jack.Ma. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | protocol UIViewisPortrait: NSObjectProtocol { 12 | func isPortrait() -> Bool 13 | } 14 | 15 | class HomePageView: UIView, UIViewisPortrait { 16 | private lazy var dockView:DockView = DockView() 17 | 18 | lazy var contentView: UIView = { 19 | let contentView = UIView() 20 | contentView.backgroundColor = UIColor.whiteColor() 21 | // 作为容器View,子控制器的view将添加到容器view上 22 | self.addSubview(contentView) 23 | return contentView 24 | }() 25 | 26 | func isPortrait() -> Bool { 27 | return frame.width < frame.height 28 | } 29 | 30 | override init(frame: CGRect) { 31 | super.init(frame: frame) 32 | addSubview(dockView) 33 | dockView.backgroundColor = globalBackgroudColor 34 | } 35 | 36 | required init?(coder aDecoder: NSCoder) { 37 | fatalError("init(coder:) has not been implemented") 38 | } 39 | 40 | override func layoutSubviews() { 41 | super.layoutSubviews() 42 | dockView.frame.size.height = frame.height 43 | dockView.frame.size.width = isPortrait() ? kDockProtraitWidth : kDockLandscapeWidth 44 | 45 | let x: CGFloat = dockView.frame.width 46 | let y: CGFloat = 20 47 | // 无论横竖屏,内容视图的宽都一样 48 | let w: CGFloat = min(frame.width, frame.height) - kDockProtraitWidth 49 | let h: CGFloat = frame.height - y 50 | 51 | contentView.frame = CGRectMake(x, y, w, h) 52 | } 53 | 54 | } 55 | -------------------------------------------------------------------------------- /QQZone/HomeViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // HomeViewController.swift 3 | // QQZone 4 | // 5 | // Created by Jack.Ma on 16/4/29. 6 | // Copyright © 2016年 Jack.Ma. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | // MARK: - controller view life circle 12 | class HomeViewController: BasicViewController { 13 | 14 | var contentView: UIView { 15 | get { // 子控制器的view添加到contentView上,不需要考虑横竖屏的适配 16 | return (view as! HomePageView).contentView 17 | } 18 | } 19 | 20 | override func loadView() { 21 | view = HomePageView() 22 | view.backgroundColor = globalBackgroudColor 23 | 24 | // 根控制器View上添加Switch用于测试 25 | let switchView = UISwitch() 26 | switchView.frame.origin = CGPoint(x: 100, y: 20) 27 | contentView.addSubview(switchView) 28 | } 29 | 30 | override func viewDidLoad() { 31 | super.viewDidLoad() 32 | // add your code ... 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /QQZone/IconButton.swift: -------------------------------------------------------------------------------- 1 | // 2 | // IconButton.swift 3 | // QQZone 4 | // 5 | // Created by Jack.Ma on 16/5/5. 6 | // Copyright © 2016年 Jack.Ma. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class IconButton: UIButton, UIViewisPortrait { 12 | func isPortrait() -> Bool { 13 | guard let superview = superview else { 14 | return true 15 | } 16 | return ((superview as? UIViewisPortrait)?.isPortrait())! 17 | } 18 | 19 | override init(frame: CGRect) { 20 | super.init(frame: frame) 21 | 22 | titleLabel?.textAlignment = .Center 23 | } 24 | 25 | required init?(coder aDecoder: NSCoder) { 26 | fatalError("init(coder:) has not been implemented") 27 | } 28 | 29 | override func imageRectForContentRect(contentRect: CGRect) -> CGRect { 30 | if isPortrait() == true { 31 | return super.imageRectForContentRect(contentRect) 32 | } else { 33 | let x: CGFloat = 0 34 | let y: CGFloat = 0 35 | let w: CGFloat = frame.width 36 | let h: CGFloat = frame.height * 0.7 37 | return CGRectMake(x, y, w, h) 38 | } 39 | } 40 | 41 | override func titleRectForContentRect(contentRect: CGRect) -> CGRect { 42 | if isPortrait() == true { 43 | return CGRectZero 44 | } else { 45 | let x: CGFloat = 0 46 | let y: CGFloat = frame.height * 0.7 47 | let w: CGFloat = frame.width 48 | let h: CGFloat = frame.height - y 49 | return CGRectMake(x, y, w, h) 50 | } 51 | } 52 | 53 | } 54 | -------------------------------------------------------------------------------- /QQZone/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UIMainStoryboardFile 26 | 27 | UIRequiredDeviceCapabilities 28 | 29 | armv7 30 | 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | UIInterfaceOrientationLandscapeLeft 35 | UIInterfaceOrientationLandscapeRight 36 | 37 | UISupportedInterfaceOrientations~ipad 38 | 39 | UIInterfaceOrientationLandscapeLeft 40 | UIInterfaceOrientationLandscapeRight 41 | UIInterfaceOrientationPortrait 42 | 43 | UIViewControllerBasedStatusBarAppearance 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /QQZone/MenuBar.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MenuBar.swift 3 | // QQZone 4 | // 5 | // Created by Jack.Ma on 16/4/29. 6 | // Copyright © 2016年 Jack.Ma. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class MenuBar: UIView, UIViewisPortrait { 12 | 13 | override init(frame: CGRect) { 14 | super.init(frame: frame) 15 | backgroundColor = globalBackgroudColor 16 | addOneButtonWithImage(UIImage(named:"tabbar_mood")) 17 | addOneButtonWithImage(UIImage(named: "tabbar_photo")) 18 | addOneButtonWithImage(UIImage(named: "tabbar_blog")) 19 | 20 | } 21 | 22 | required init?(coder aDecoder: NSCoder) { 23 | fatalError("init(coder:) has not been implemented") 24 | } 25 | 26 | func isPortrait() -> Bool { 27 | guard let superview = superview else { 28 | return true 29 | } 30 | return ((superview as? UIViewisPortrait)?.isPortrait())! 31 | } 32 | 33 | private func addOneButtonWithImage(image: UIImage?) { 34 | let button = UIButton(type: .Custom) 35 | button.setImage(image!, forState: .Normal) 36 | addSubview(button) 37 | } 38 | 39 | } 40 | 41 | // MARK: - loyout subviews 42 | extension MenuBar { 43 | override func layoutSubviews() { 44 | super.layoutSubviews() 45 | 46 | guard subviews.count > 0 else { 47 | return 48 | } 49 | 50 | var x, y, w, h:CGFloat 51 | for (index, view) in subviews.enumerate() { 52 | if isPortrait() == true { 53 | w = frame.width 54 | h = kDockItemHeight 55 | x = 0 56 | y = CGFloat(index) * h 57 | view.frame = CGRect(x: x, y: y, width: w, height: h) 58 | } else { 59 | w = frame.width / CGFloat(subviews.count) 60 | h = kDockItemHeight 61 | x = CGFloat(index) * w 62 | y = frame.height - h 63 | view.frame = CGRect(x: x, y: y, width: w, height: h) 64 | } 65 | } 66 | 67 | } 68 | 69 | } 70 | -------------------------------------------------------------------------------- /QQZone/TabBar.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TabBar.swift 3 | // QQZone 4 | // 5 | // Created by Jack.Ma on 16/4/30. 6 | // Copyright © 2016年 Jack.Ma. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class TabBar: UIView, UIViewisPortrait { 12 | 13 | override init(frame: CGRect) { 14 | super.init(frame: frame) 15 | backgroundColor = globalBackgroudColor 16 | addOneTabBarButtonWithImage(UIImage(named: "tab_bar_feed_icon"), title: "全部动态") 17 | addOneTabBarButtonWithImage(UIImage(named: "tab_bar_passive_feed_icon"), title: "与我相关") 18 | addOneTabBarButtonWithImage(UIImage(named: "tab_bar_pic_wall_icon"), title: "照片墙") 19 | addOneTabBarButtonWithImage(UIImage(named: "tab_bar_e_album_icon"), title: "电子相框") 20 | addOneTabBarButtonWithImage(UIImage(named: "tab_bar_friend_icon"), title: "好友") 21 | addOneTabBarButtonWithImage(UIImage(named: "tab_bar_e_more_icon"), title: "其它") 22 | } 23 | 24 | required init?(coder aDecoder: NSCoder) { 25 | fatalError("init(coder:) has not been implemented") 26 | } 27 | 28 | func isPortrait() -> Bool { 29 | guard let superview = superview else { 30 | return true 31 | } 32 | return ((superview as? UIViewisPortrait)?.isPortrait())! 33 | } 34 | 35 | private func addOneTabBarButtonWithImage(image: UIImage?, title: String) { 36 | guard let image = image else { 37 | return 38 | } 39 | 40 | let button = TabBarButton(type: .Custom) 41 | button.setImage(image, forState: .Normal) 42 | button.setTitle(title, forState: .Normal) 43 | addSubview(button) 44 | } 45 | } 46 | 47 | // MARK: - layout subviews 48 | extension TabBar { 49 | override func layoutSubviews() { 50 | super.layoutSubviews() 51 | var x,y,w,h: CGFloat 52 | 53 | w = frame.width 54 | h = kDockItemHeight 55 | x = 0 56 | for (index, view) in subviews.enumerate() { 57 | y = CGFloat(index) * h 58 | view.frame = CGRect(x: x, y: y, width: w, height: h) 59 | } 60 | } 61 | } 62 | 63 | -------------------------------------------------------------------------------- /QQZone/TabBarButton.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TabBarButton.swift 3 | // QQZone 4 | // 5 | // Created by Jack.Ma on 16/4/30. 6 | // Copyright © 2016年 Jack.Ma. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class TabBarButton: UIButton, UIViewisPortrait { 12 | 13 | override init(frame: CGRect) { 14 | super.init(frame: frame) 15 | titleLabel?.textAlignment = .Left 16 | } 17 | 18 | required init?(coder aDecoder: NSCoder) { 19 | fatalError("init(coder:) has not been implemented") 20 | } 21 | 22 | func isPortrait() -> Bool { 23 | guard let superview = superview else { 24 | return true 25 | } 26 | return ((superview as? UIViewisPortrait)?.isPortrait())! 27 | } 28 | 29 | override func imageRectForContentRect(contentRect: CGRect) -> CGRect { 30 | guard let image = currentImage else { 31 | return CGRectZero 32 | } 33 | if isPortrait() == true { 34 | let x: CGFloat = (contentRect.width - image.size.width) * 0.5 35 | let y: CGFloat = (contentRect.height - image.size.height) * 0.5 36 | return CGRectMake(x, y, image.size.width, image.size.height) 37 | } else { 38 | var frame = super.imageRectForContentRect(contentRect) 39 | frame.origin.x = self.frame.width * 0.2 40 | return frame 41 | } 42 | } 43 | 44 | override func titleRectForContentRect(contentRect: CGRect) -> CGRect { 45 | if isPortrait() == true { 46 | return CGRectZero 47 | } else { 48 | return super.titleRectForContentRect(contentRect) 49 | } 50 | } 51 | 52 | } 53 | -------------------------------------------------------------------------------- /QQZone/const.swift: -------------------------------------------------------------------------------- 1 | // 2 | // const.swift 3 | // QQZone 4 | // 5 | // Created by Jack.Ma on 16/4/29. 6 | // Copyright © 2016年 Jack.Ma. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | /// dock在横屏的宽度 11 | let kDockLandscapeWidth : CGFloat = 270 12 | 13 | /// dock在竖屏的宽度 14 | let kDockProtraitWidth : CGFloat = 70 15 | 16 | /// dockitem的高度 17 | let kDockItemHeight : CGFloat = 70 18 | 19 | /// iconButton的横屏宽度 20 | let kIconButtonLandscapeWidth : CGFloat = 90 21 | 22 | /// iconButton的横屏文字高度 23 | let kIconButtonLandscapeTitleH : CGFloat = 30 24 | 25 | /// iconButton的横屏高度 26 | let kIconButtonLandscapeHeight : CGFloat = kIconButtonLandscapeWidth + kIconButtonLandscapeTitleH 27 | 28 | /// iconButton的Y值 29 | let kIconButtonY : CGFloat = 40 30 | 31 | /// iconButton的竖屏的高度和宽度 32 | let kIconButtonWH : CGFloat = 60 33 | 34 | let globalBackgroudColor: UIColor = UIColor(red:0.278, green:0.278, blue:0.278, alpha:1) -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # QQZone 2 | QQZone for iPad Frame 3 | 这是一个用代码适配iPad横竖屏的Demo,Demo详细说明请访问这个[地址](http://jmstack.github.io) 4 | 5 | ![Demo预览慢速](http://o6jvfp7kw.bkt.clouddn.com/QQZone%E9%A2%84%E8%A7%88-Slow.gif) 6 | ![Demo预览正常](http://o6jvfp7kw.bkt.clouddn.com/QQZone%E9%A2%84%E8%A7%88.gif) 7 | --------------------------------------------------------------------------------