├── .gitignore ├── LICENSE ├── README.md ├── StyledPageControlDemo ├── PageControlDemo.xcodeproj │ ├── honcheng.pbxuser │ ├── honcheng.perspectivev3 │ ├── project.pbxproj │ ├── project.xcworkspace │ │ └── contents.xcworkspacedata │ └── xcuserdata │ │ └── honcheng.xcuserdatad │ │ ├── xcdebugger │ │ └── Breakpoints.xcbkptlist │ │ └── xcschemes │ │ ├── PageControlDemo.xcscheme │ │ └── xcschememanagement.plist └── PageControlDemo │ ├── PageControlDemo-Info.plist │ ├── PageControlDemo-Prefix.pch │ ├── PageControlDemoAppDelegate.h │ ├── PageControlDemoAppDelegate.m │ ├── PageControlDemoListViewController.h │ ├── PageControlDemoListViewController.m │ ├── PageControlDemoTableViewCell.h │ ├── PageControlDemoTableViewCell.m │ ├── Resources │ ├── pagecontrol-thumb-normal.png │ ├── pagecontrol-thumb-normal@2x.png │ ├── pagecontrol-thumb-selected.png │ └── pagecontrol-thumb-selected@2x.png │ ├── StyledPageControl.h │ ├── StyledPageControl.m │ ├── en.lproj │ └── InfoPlist.strings │ ├── iPad │ ├── PageControlDemoAppDelegate_iPad.h │ ├── PageControlDemoAppDelegate_iPad.m │ └── en.lproj │ │ └── MainWindow_iPad.xib │ ├── iPhone │ ├── PageControlDemoAppDelegate_iPhone.h │ ├── PageControlDemoAppDelegate_iPhone.m │ └── en.lproj │ │ └── MainWindow_iPhone.xib │ └── main.m └── screenshot.png /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | StyledPageControlDemo/PageControlDemo.xcodeproj/project.xcworkspace/xcuserdata/honcheng.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2012 Muh Hon Cheng 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject 9 | to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT 15 | WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 16 | INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 17 | MERCHANTABILITY, FITNESS FOR A PARTICULAR 18 | PURPOSE AND NONINFRINGEMENT. IN NO EVENT 19 | SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 20 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 22 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR 23 | IN CONNECTION WITH THE SOFTWARE OR 24 | THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25 | 26 | @author Muh Hon Cheng 27 | @copyright 2012 Muh Hon Cheng -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Customizable PageControl for iOS 2 | ============= 3 | 4 | 5 | 6 | StyledPageControl is a customizable replacement for UIPageControl for iOS. 7 | 8 | Features 9 | -------- 10 | * 5 Styles 11 | * change colors 12 | * change diameter 13 | * change gap width 14 | * change stroke width 15 | * show current page number 16 | * use custom images 17 | 18 | Usage 19 | ----- 20 | 21 | 1) Drag StyledPageControl.h and StyledPageControl.m into your project. 22 | 23 | #import StyledPageControl.h 24 | 25 | 2) Create StyledPageControl just like a UIPageControl 26 | 27 | StyledPageControl *pageControl = [[StyledPageControl alloc] init]; 28 | [self addSubview:pageControl]; 29 | 30 | 3) Set page control style 31 | 32 | [pageControl setPageControlStyle:PageControlStyleDefault]; 33 | 34 | 4) Set number of pages 35 | 36 | [pageControl setNumberOfPages:10]; 37 | 38 | 5) Set current page 39 | 40 | [pageControl setCurrentPage:5]; 41 | 42 | 6) Change page control colors 43 | 44 | [pageControl setCoreNormalColor:[UIColor colorWithRed:0 green:0 blue:0 alpha:1]]; 45 | [pageControl setCoreSelectedColor:[UIColor colorWithRed:0.8 green:0.2 blue:0.2 alpha:1]]; 46 | 47 | 7) Change distance between dots 48 | 49 | [pageControl setGapWidth:5]; 50 | 51 | 8) Change dot's diameter 52 | 53 | [pageControl setDiameter:9]; 54 | 55 | 9) Use custom thumbnails 56 | 57 | [pageControl setPageControlStyle:PageControlStyleThumb]; 58 | [pageControl setThumbImage:[UIImage imageNamed:@"pagecontrol-thumb-normal.png"]]; 59 | [pageControl setSelectedThumbImage:[UIImage imageNamed:@"pagecontrol-thumb-selected.png"]]; 60 | 61 | 62 | Minimum Requirements 63 | -------------------- 64 | * ARC - this project uses ARC. If you are not using ARC in your project, add '-fobjc-arc' as a compiler flag for StyledPageControl.h and StyledPageControl.m 65 | * XCode 4.4 and newer (auto-synthesis required) 66 | 67 | Contact 68 | ------- 69 | 70 | [twitter.com/honcheng](http://twitter.com/honcheng) 71 | [honcheng.com](http://honcheng.com) 72 | 73 | ![](http://www.cocoacontrols.com/analytics/honcheng/ios-styledpagecontrol.png) -------------------------------------------------------------------------------- /StyledPageControlDemo/PageControlDemo.xcodeproj/honcheng.pbxuser: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | F879F912137EEA6B000F8DD1 /* PageControlDemo */ = { 4 | isa = PBXExecutable; 5 | activeArgIndices = ( 6 | ); 7 | argumentStrings = ( 8 | ); 9 | autoAttachOnCrash = 1; 10 | breakpointsEnabled = 0; 11 | configStateDict = { 12 | }; 13 | customDataFormattersEnabled = 1; 14 | dataTipCustomDataFormattersEnabled = 1; 15 | dataTipShowTypeColumn = 1; 16 | dataTipSortType = 0; 17 | debuggerPlugin = GDBDebugging; 18 | disassemblyDisplayState = 0; 19 | dylibVariantSuffix = ""; 20 | enableDebugStr = 1; 21 | environmentEntries = ( 22 | ); 23 | executableSystemSymbolLevel = 0; 24 | executableUserSymbolLevel = 0; 25 | libgmallocEnabled = 0; 26 | name = PageControlDemo; 27 | showTypeColumn = 0; 28 | sourceDirectories = ( 29 | ); 30 | }; 31 | F879F925137EEA83000F8DD1 /* Source Control */ = { 32 | isa = PBXSourceControlManager; 33 | fallbackIsa = XCSourceControlManager; 34 | isSCMEnabled = 0; 35 | scmConfiguration = { 36 | repositoryNamesForRoots = { 37 | "" = ""; 38 | }; 39 | }; 40 | }; 41 | F879F926137EEA83000F8DD1 /* Code sense */ = { 42 | isa = PBXCodeSenseManager; 43 | indexTemplatePath = ""; 44 | }; 45 | F879F92D137EEAC6000F8DD1 /* PBXTextBookmark */ = { 46 | isa = PBXTextBookmark; 47 | fRef = F8B2E75D137EDA8800338230 /* PageControlDemoTableViewCell.m */; 48 | name = "PageControlDemoTableViewCell.m: 21"; 49 | rLen = 0; 50 | rLoc = 538; 51 | rType = 0; 52 | vrLen = 648; 53 | vrLoc = 197; 54 | }; 55 | F879F92E137EEAC6000F8DD1 /* PBXTextBookmark */ = { 56 | isa = PBXTextBookmark; 57 | fRef = F8B2E75C137EDA8800338230 /* PageControlDemoTableViewCell.h */; 58 | name = "PageControlDemoTableViewCell.h: 16"; 59 | rLen = 0; 60 | rLoc = 357; 61 | rType = 0; 62 | vrLen = 378; 63 | vrLoc = 0; 64 | }; 65 | F879F92F137EEAC6000F8DD1 /* PBXTextBookmark */ = { 66 | isa = PBXTextBookmark; 67 | fRef = F8B2E756137ED42000338230 /* StyledPageControl.h */; 68 | name = "StyledPageControl.h: 46"; 69 | rLen = 0; 70 | rLoc = 1543; 71 | rType = 0; 72 | vrLen = 883; 73 | vrLoc = 1340; 74 | }; 75 | F879F930137EEAC6000F8DD1 /* PBXTextBookmark */ = { 76 | isa = PBXTextBookmark; 77 | fRef = F8B2E757137ED42000338230 /* StyledPageControl.m */; 78 | name = "StyledPageControl.m: 1"; 79 | rLen = 0; 80 | rLoc = 0; 81 | rType = 0; 82 | vrLen = 923; 83 | vrLoc = 0; 84 | }; 85 | F879F931137EEAC6000F8DD1 /* PBXTextBookmark */ = { 86 | isa = PBXTextBookmark; 87 | fRef = F8B2E757137ED42000338230 /* StyledPageControl.m */; 88 | name = "StyledPageControl.m: 39"; 89 | rLen = 0; 90 | rLoc = 1380; 91 | rType = 0; 92 | vrLen = 923; 93 | vrLoc = 0; 94 | }; 95 | F8B2E723137ED3C400338230 /* Project object */ = { 96 | activeBuildConfigurationName = Debug; 97 | activeExecutable = F879F912137EEA6B000F8DD1 /* PageControlDemo */; 98 | activeTarget = F8B2E72B137ED3C400338230 /* PageControlDemo */; 99 | codeSenseManager = F879F926137EEA83000F8DD1 /* Code sense */; 100 | executables = ( 101 | F879F912137EEA6B000F8DD1 /* PageControlDemo */, 102 | ); 103 | perUserDictionary = { 104 | PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = { 105 | PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; 106 | PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; 107 | PBXFileTableDataSourceColumnWidthsKey = ( 108 | 20, 109 | 269, 110 | 20, 111 | 48.16259765625, 112 | 43, 113 | 43, 114 | 20, 115 | ); 116 | PBXFileTableDataSourceColumnsKey = ( 117 | PBXFileDataSource_FiletypeID, 118 | PBXFileDataSource_Filename_ColumnID, 119 | PBXFileDataSource_Built_ColumnID, 120 | PBXFileDataSource_ObjectSize_ColumnID, 121 | PBXFileDataSource_Errors_ColumnID, 122 | PBXFileDataSource_Warnings_ColumnID, 123 | PBXFileDataSource_Target_ColumnID, 124 | ); 125 | }; 126 | PBXPerProjectTemplateStateSaveDate = 327084651; 127 | PBXWorkspaceStateSaveDate = 327084651; 128 | }; 129 | perUserProjectItems = { 130 | F879F92D137EEAC6000F8DD1 /* PBXTextBookmark */ = F879F92D137EEAC6000F8DD1 /* PBXTextBookmark */; 131 | F879F92E137EEAC6000F8DD1 /* PBXTextBookmark */ = F879F92E137EEAC6000F8DD1 /* PBXTextBookmark */; 132 | F879F92F137EEAC6000F8DD1 /* PBXTextBookmark */ = F879F92F137EEAC6000F8DD1 /* PBXTextBookmark */; 133 | F879F930137EEAC6000F8DD1 /* PBXTextBookmark */ = F879F930137EEAC6000F8DD1 /* PBXTextBookmark */; 134 | F879F931137EEAC6000F8DD1 /* PBXTextBookmark */ = F879F931137EEAC6000F8DD1 /* PBXTextBookmark */; 135 | }; 136 | sourceControlManager = F879F925137EEA83000F8DD1 /* Source Control */; 137 | userBuildSettings = { 138 | }; 139 | }; 140 | F8B2E72B137ED3C400338230 /* PageControlDemo */ = { 141 | activeExec = 0; 142 | executables = ( 143 | F879F912137EEA6B000F8DD1 /* PageControlDemo */, 144 | ); 145 | }; 146 | F8B2E756137ED42000338230 /* StyledPageControl.h */ = { 147 | uiCtxt = { 148 | sepNavIntBoundsRect = "{{0, 0}, {565, 897}}"; 149 | sepNavSelRange = "{1543, 0}"; 150 | sepNavVisRange = "{1340, 883}"; 151 | }; 152 | }; 153 | F8B2E757137ED42000338230 /* StyledPageControl.m */ = { 154 | uiCtxt = { 155 | sepNavIntBoundsRect = "{{0, 0}, {691, 3900}}"; 156 | sepNavSelRange = "{1380, 0}"; 157 | sepNavVisRange = "{0, 923}"; 158 | }; 159 | }; 160 | F8B2E75C137EDA8800338230 /* PageControlDemoTableViewCell.h */ = { 161 | uiCtxt = { 162 | sepNavIntBoundsRect = "{{0, 0}, {447, 293}}"; 163 | sepNavSelRange = "{357, 0}"; 164 | sepNavVisRange = "{0, 378}"; 165 | }; 166 | }; 167 | F8B2E75D137EDA8800338230 /* PageControlDemoTableViewCell.m */ = { 168 | uiCtxt = { 169 | sepNavIntBoundsRect = "{{0, 0}, {649, 611}}"; 170 | sepNavSelRange = "{538, 0}"; 171 | sepNavVisRange = "{197, 674}"; 172 | }; 173 | }; 174 | } 175 | -------------------------------------------------------------------------------- /StyledPageControlDemo/PageControlDemo.xcodeproj/honcheng.perspectivev3: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ActivePerspectiveName 6 | Project 7 | AllowedModules 8 | 9 | 10 | BundleLoadPath 11 | 12 | MaxInstances 13 | n 14 | Module 15 | PBXSmartGroupTreeModule 16 | Name 17 | Groups and Files Outline View 18 | 19 | 20 | BundleLoadPath 21 | 22 | MaxInstances 23 | n 24 | Module 25 | PBXNavigatorGroup 26 | Name 27 | Editor 28 | 29 | 30 | BundleLoadPath 31 | 32 | MaxInstances 33 | n 34 | Module 35 | XCTaskListModule 36 | Name 37 | Task List 38 | 39 | 40 | BundleLoadPath 41 | 42 | MaxInstances 43 | n 44 | Module 45 | XCDetailModule 46 | Name 47 | File and Smart Group Detail Viewer 48 | 49 | 50 | BundleLoadPath 51 | 52 | MaxInstances 53 | 1 54 | Module 55 | PBXBuildResultsModule 56 | Name 57 | Detailed Build Results Viewer 58 | 59 | 60 | BundleLoadPath 61 | 62 | MaxInstances 63 | 1 64 | Module 65 | PBXProjectFindModule 66 | Name 67 | Project Batch Find Tool 68 | 69 | 70 | BundleLoadPath 71 | 72 | MaxInstances 73 | n 74 | Module 75 | XCProjectFormatConflictsModule 76 | Name 77 | Project Format Conflicts List 78 | 79 | 80 | BundleLoadPath 81 | 82 | MaxInstances 83 | n 84 | Module 85 | PBXBookmarksModule 86 | Name 87 | Bookmarks Tool 88 | 89 | 90 | BundleLoadPath 91 | 92 | MaxInstances 93 | n 94 | Module 95 | PBXClassBrowserModule 96 | Name 97 | Class Browser 98 | 99 | 100 | BundleLoadPath 101 | 102 | MaxInstances 103 | n 104 | Module 105 | PBXCVSModule 106 | Name 107 | Source Code Control Tool 108 | 109 | 110 | BundleLoadPath 111 | 112 | MaxInstances 113 | n 114 | Module 115 | PBXDebugBreakpointsModule 116 | Name 117 | Debug Breakpoints Tool 118 | 119 | 120 | BundleLoadPath 121 | 122 | MaxInstances 123 | n 124 | Module 125 | XCDockableInspector 126 | Name 127 | Inspector 128 | 129 | 130 | BundleLoadPath 131 | 132 | MaxInstances 133 | n 134 | Module 135 | PBXOpenQuicklyModule 136 | Name 137 | Open Quickly Tool 138 | 139 | 140 | BundleLoadPath 141 | 142 | MaxInstances 143 | 1 144 | Module 145 | PBXDebugSessionModule 146 | Name 147 | Debugger 148 | 149 | 150 | BundleLoadPath 151 | 152 | MaxInstances 153 | 1 154 | Module 155 | PBXDebugCLIModule 156 | Name 157 | Debug Console 158 | 159 | 160 | BundleLoadPath 161 | 162 | MaxInstances 163 | n 164 | Module 165 | XCSnapshotModule 166 | Name 167 | Snapshots Tool 168 | 169 | 170 | BundlePath 171 | /DeveloperBeta/Library/PrivateFrameworks/DevToolsInterface.framework/Resources 172 | Description 173 | AIODescriptionKey 174 | DockingSystemVisible 175 | 176 | Extension 177 | perspectivev3 178 | FavBarConfig 179 | 180 | PBXProjectModuleGUID 181 | F879F93B137EEAC6000F8DD1 182 | XCBarModuleItemNames 183 | 184 | XCBarModuleItems 185 | 186 | 187 | FirstTimeWindowDisplayed 188 | 189 | Identifier 190 | com.apple.perspectives.project.defaultV3 191 | MajorVersion 192 | 34 193 | MinorVersion 194 | 0 195 | Name 196 | All-In-One 197 | Notifications 198 | 199 | OpenEditors 200 | 201 | PerspectiveWidths 202 | 203 | -1 204 | -1 205 | 206 | Perspectives 207 | 208 | 209 | ChosenToolbarItems 210 | 211 | XCToolbarPerspectiveControl 212 | NSToolbarSeparatorItem 213 | active-combo-popup 214 | action 215 | NSToolbarFlexibleSpaceItem 216 | debugger-enable-breakpoints 217 | buildOrClean 218 | build-and-go 219 | com.apple.ide.PBXToolbarStopButton 220 | get-info 221 | NSToolbarFlexibleSpaceItem 222 | com.apple.pbx.toolbar.searchfield 223 | 224 | ControllerClassBaseName 225 | 226 | IconName 227 | WindowOfProject 228 | Identifier 229 | perspective.project 230 | IsVertical 231 | 232 | Layout 233 | 234 | 235 | ContentConfiguration 236 | 237 | PBXBottomSmartGroupGIDs 238 | 239 | 1C37FBAC04509CD000000102 240 | 1C37FAAC04509CD000000102 241 | 1C37FABC05509CD000000102 242 | 1C37FABC05539CD112110102 243 | E2644B35053B69B200211256 244 | 1C37FABC04509CD000100104 245 | 1CC0EA4004350EF90044410B 246 | 1CC0EA4004350EF90041110B 247 | 1C77FABC04509CD000000102 248 | 249 | PBXProjectModuleGUID 250 | 1CA23ED40692098700951B8B 251 | PBXProjectModuleLabel 252 | Files 253 | PBXProjectStructureProvided 254 | yes 255 | PBXSmartGroupTreeModuleColumnData 256 | 257 | PBXSmartGroupTreeModuleColumnWidthsKey 258 | 259 | 280 260 | 261 | PBXSmartGroupTreeModuleColumnsKey_v4 262 | 263 | MainColumn 264 | 265 | 266 | PBXSmartGroupTreeModuleOutlineStateKey_v7 267 | 268 | PBXSmartGroupTreeModuleOutlineStateExpansionKey 269 | 270 | F8B2E721137ED3C400338230 271 | F8B2E736137ED3C500338230 272 | F8B2E755137ED40800338230 273 | 274 | PBXSmartGroupTreeModuleOutlineStateSelectionKey 275 | 276 | 277 | 10 278 | 8 279 | 1 280 | 0 281 | 282 | 283 | PBXSmartGroupTreeModuleOutlineStateVisibleRectKey 284 | {{0, 0}, {280, 428}} 285 | 286 | PBXTopSmartGroupGIDs 287 | 288 | XCIncludePerspectivesSwitch 289 | 290 | 291 | GeometryConfiguration 292 | 293 | Frame 294 | {{0, 0}, {297, 446}} 295 | GroupTreeTableConfiguration 296 | 297 | MainColumn 298 | 280 299 | 300 | RubberWindowFrame 301 | 225 221 810 487 0 0 1366 746 302 | 303 | Module 304 | PBXSmartGroupTreeModule 305 | Proportion 306 | 297pt 307 | 308 | 309 | Dock 310 | 311 | 312 | BecomeActive 313 | 314 | ContentConfiguration 315 | 316 | PBXProjectModuleGUID 317 | F879F92B137EEAC6000F8DD1 318 | PBXProjectModuleLabel 319 | StyledPageControl.m 320 | PBXSplitModuleInNavigatorKey 321 | 322 | Split0 323 | 324 | PBXProjectModuleGUID 325 | F879F92C137EEAC6000F8DD1 326 | PBXProjectModuleLabel 327 | StyledPageControl.m 328 | _historyCapacity 329 | 0 330 | bookmark 331 | F879F931137EEAC6000F8DD1 332 | history 333 | 334 | F879F92D137EEAC6000F8DD1 335 | F879F92E137EEAC6000F8DD1 336 | F879F92F137EEAC6000F8DD1 337 | F879F930137EEAC6000F8DD1 338 | 339 | 340 | SplitCount 341 | 1 342 | 343 | StatusBarVisibility 344 | 345 | XCSharingToken 346 | com.apple.Xcode.CommonNavigatorGroupSharingToken 347 | 348 | GeometryConfiguration 349 | 350 | Frame 351 | {{0, 0}, {508, 325}} 352 | RubberWindowFrame 353 | 225 221 810 487 0 0 1366 746 354 | 355 | Module 356 | PBXNavigatorGroup 357 | Proportion 358 | 325pt 359 | 360 | 361 | Proportion 362 | 116pt 363 | Tabs 364 | 365 | 366 | ContentConfiguration 367 | 368 | PBXProjectModuleGUID 369 | 1CA23EDF0692099D00951B8B 370 | PBXProjectModuleLabel 371 | Detail 372 | 373 | GeometryConfiguration 374 | 375 | Frame 376 | {{10, 27}, {508, 89}} 377 | RubberWindowFrame 378 | 225 221 810 487 0 0 1366 746 379 | 380 | Module 381 | XCDetailModule 382 | 383 | 384 | ContentConfiguration 385 | 386 | PBXProjectModuleGUID 387 | 1CA23EE00692099D00951B8B 388 | PBXProjectModuleLabel 389 | Project Find 390 | 391 | GeometryConfiguration 392 | 393 | Frame 394 | {{10, 31}, {603, 297}} 395 | 396 | Module 397 | PBXProjectFindModule 398 | 399 | 400 | ContentConfiguration 401 | 402 | PBXCVSModuleFilterTypeKey 403 | 1032 404 | PBXProjectModuleGUID 405 | 1CA23EE10692099D00951B8B 406 | PBXProjectModuleLabel 407 | SCM Results 408 | 409 | GeometryConfiguration 410 | 411 | Frame 412 | {{10, 31}, {603, 297}} 413 | 414 | Module 415 | PBXCVSModule 416 | 417 | 418 | ContentConfiguration 419 | 420 | PBXProjectModuleGUID 421 | XCMainBuildResultsModuleGUID 422 | PBXProjectModuleLabel 423 | Build Results 424 | XCBuildResultsTrigger_Collapse 425 | 1021 426 | XCBuildResultsTrigger_Open 427 | 1011 428 | 429 | GeometryConfiguration 430 | 431 | Frame 432 | {{10, 31}, {603, 297}} 433 | 434 | Module 435 | PBXBuildResultsModule 436 | 437 | 438 | 439 | 440 | Proportion 441 | 508pt 442 | 443 | 444 | Name 445 | Project 446 | ServiceClasses 447 | 448 | XCModuleDock 449 | PBXSmartGroupTreeModule 450 | XCModuleDock 451 | PBXNavigatorGroup 452 | XCDockableTabModule 453 | XCDetailModule 454 | PBXProjectFindModule 455 | PBXCVSModule 456 | PBXBuildResultsModule 457 | 458 | TableOfContents 459 | 460 | F879F932137EEAC6000F8DD1 461 | 1CA23ED40692098700951B8B 462 | F879F933137EEAC6000F8DD1 463 | F879F92B137EEAC6000F8DD1 464 | F879F934137EEAC6000F8DD1 465 | 1CA23EDF0692099D00951B8B 466 | 1CA23EE00692099D00951B8B 467 | 1CA23EE10692099D00951B8B 468 | XCMainBuildResultsModuleGUID 469 | 470 | ToolbarConfigUserDefaultsMinorVersion 471 | 2 472 | ToolbarConfiguration 473 | xcode.toolbar.config.defaultV3 474 | 475 | 476 | ChosenToolbarItems 477 | 478 | XCToolbarPerspectiveControl 479 | NSToolbarSeparatorItem 480 | active-combo-popup 481 | NSToolbarFlexibleSpaceItem 482 | debugger-enable-breakpoints 483 | build-and-go 484 | com.apple.ide.PBXToolbarStopButton 485 | debugger-restart-executable 486 | debugger-pause 487 | debugger-step-over 488 | debugger-step-into 489 | debugger-step-out 490 | NSToolbarFlexibleSpaceItem 491 | servicesModulebreakpoints 492 | debugger-show-console-window 493 | 494 | ControllerClassBaseName 495 | PBXDebugSessionModule 496 | IconName 497 | DebugTabIcon 498 | Identifier 499 | perspective.debug 500 | IsVertical 501 | 502 | Layout 503 | 504 | 505 | ContentConfiguration 506 | 507 | PBXProjectModuleGUID 508 | 1CCC7628064C1048000F2A68 509 | PBXProjectModuleLabel 510 | Debugger Console 511 | 512 | GeometryConfiguration 513 | 514 | Frame 515 | {{0, 0}, {424, 270}} 516 | 517 | Module 518 | PBXDebugCLIModule 519 | Proportion 520 | 270pt 521 | 522 | 523 | ContentConfiguration 524 | 525 | Debugger 526 | 527 | HorizontalSplitView 528 | 529 | _collapsingFrameDimension 530 | 0.0 531 | _indexOfCollapsedView 532 | 0 533 | _percentageOfCollapsedView 534 | 0.0 535 | isCollapsed 536 | yes 537 | sizes 538 | 539 | {{0, 0}, {395, 213}} 540 | {{395, 0}, {415, 213}} 541 | 542 | 543 | VerticalSplitView 544 | 545 | _collapsingFrameDimension 546 | 0.0 547 | _indexOfCollapsedView 548 | 0 549 | _percentageOfCollapsedView 550 | 0.0 551 | isCollapsed 552 | yes 553 | sizes 554 | 555 | {{0, 0}, {810, 213}} 556 | {{0, 213}, {810, 225}} 557 | 558 | 559 | 560 | LauncherConfigVersion 561 | 8 562 | PBXProjectModuleGUID 563 | 1CCC7629064C1048000F2A68 564 | PBXProjectModuleLabel 565 | Debug 566 | 567 | GeometryConfiguration 568 | 569 | DebugConsoleVisible 570 | None 571 | DebugConsoleWindowFrame 572 | {{200, 200}, {500, 300}} 573 | DebugSTDIOWindowFrame 574 | {{200, 200}, {500, 300}} 575 | Frame 576 | {{0, 7}, {810, 438}} 577 | PBXDebugSessionStackFrameViewKey 578 | 579 | DebugVariablesTableConfiguration 580 | 581 | Name 582 | 120 583 | Value 584 | 85 585 | Summary 586 | 185 587 | 588 | Frame 589 | {{395, 0}, {415, 213}} 590 | 591 | 592 | Module 593 | PBXDebugSessionModule 594 | Proportion 595 | 438pt 596 | 597 | 598 | Name 599 | Debug 600 | ServiceClasses 601 | 602 | XCModuleDock 603 | PBXDebugCLIModule 604 | PBXDebugSessionModule 605 | PBXDebugProcessAndThreadModule 606 | PBXDebugProcessViewModule 607 | PBXDebugThreadViewModule 608 | PBXDebugStackFrameViewModule 609 | PBXNavigatorGroup 610 | 611 | TableOfContents 612 | 613 | F879F935137EEAC6000F8DD1 614 | 1CCC7628064C1048000F2A68 615 | 1CCC7629064C1048000F2A68 616 | F879F936137EEAC6000F8DD1 617 | F879F937137EEAC6000F8DD1 618 | F879F938137EEAC6000F8DD1 619 | F879F939137EEAC6000F8DD1 620 | F879F93A137EEAC6000F8DD1 621 | 622 | ToolbarConfigUserDefaultsMinorVersion 623 | 2 624 | ToolbarConfiguration 625 | xcode.toolbar.config.debugV3 626 | 627 | 628 | PerspectivesBarVisible 629 | 630 | ShelfIsVisible 631 | 632 | SourceDescription 633 | file at '/DeveloperBeta/Library/PrivateFrameworks/DevToolsInterface.framework/Resources/XCPerspectivesSpecification.xcperspec' 634 | StatusbarIsVisible 635 | 636 | TimeStamp 637 | 0.0 638 | ToolbarConfigUserDefaultsMinorVersion 639 | 2 640 | ToolbarDisplayMode 641 | 1 642 | ToolbarIsVisible 643 | 644 | ToolbarSizeMode 645 | 1 646 | Type 647 | Perspectives 648 | UpdateMessage 649 | 650 | WindowJustification 651 | 5 652 | WindowOrderList 653 | 654 | /Users/honcheng/Dropbox/Open Source Projects/iOS-PageControl/PageControlDemo/PageControlDemo.xcodeproj 655 | 656 | WindowString 657 | 225 221 810 487 0 0 1366 746 658 | WindowToolsV3 659 | 660 | 661 | Identifier 662 | windowTool.debugger 663 | Layout 664 | 665 | 666 | Dock 667 | 668 | 669 | ContentConfiguration 670 | 671 | Debugger 672 | 673 | HorizontalSplitView 674 | 675 | _collapsingFrameDimension 676 | 0.0 677 | _indexOfCollapsedView 678 | 0 679 | _percentageOfCollapsedView 680 | 0.0 681 | isCollapsed 682 | yes 683 | sizes 684 | 685 | {{0, 0}, {317, 164}} 686 | {{317, 0}, {377, 164}} 687 | 688 | 689 | VerticalSplitView 690 | 691 | _collapsingFrameDimension 692 | 0.0 693 | _indexOfCollapsedView 694 | 0 695 | _percentageOfCollapsedView 696 | 0.0 697 | isCollapsed 698 | yes 699 | sizes 700 | 701 | {{0, 0}, {694, 164}} 702 | {{0, 164}, {694, 216}} 703 | 704 | 705 | 706 | LauncherConfigVersion 707 | 8 708 | PBXProjectModuleGUID 709 | 1C162984064C10D400B95A72 710 | PBXProjectModuleLabel 711 | Debug - GLUTExamples (Underwater) 712 | 713 | GeometryConfiguration 714 | 715 | DebugConsoleDrawerSize 716 | {100, 120} 717 | DebugConsoleVisible 718 | None 719 | DebugConsoleWindowFrame 720 | {{200, 200}, {500, 300}} 721 | DebugSTDIOWindowFrame 722 | {{200, 200}, {500, 300}} 723 | Frame 724 | {{0, 0}, {694, 380}} 725 | RubberWindowFrame 726 | 321 238 694 422 0 0 1440 878 727 | 728 | Module 729 | PBXDebugSessionModule 730 | Proportion 731 | 100% 732 | 733 | 734 | Proportion 735 | 100% 736 | 737 | 738 | Name 739 | Debugger 740 | ServiceClasses 741 | 742 | PBXDebugSessionModule 743 | 744 | StatusbarIsVisible 745 | 1 746 | TableOfContents 747 | 748 | 1CD10A99069EF8BA00B06720 749 | 1C0AD2AB069F1E9B00FABCE6 750 | 1C162984064C10D400B95A72 751 | 1C0AD2AC069F1E9B00FABCE6 752 | 753 | ToolbarConfiguration 754 | xcode.toolbar.config.debugV3 755 | WindowString 756 | 321 238 694 422 0 0 1440 878 757 | WindowToolGUID 758 | 1CD10A99069EF8BA00B06720 759 | WindowToolIsVisible 760 | 0 761 | 762 | 763 | Identifier 764 | windowTool.build 765 | Layout 766 | 767 | 768 | Dock 769 | 770 | 771 | ContentConfiguration 772 | 773 | PBXProjectModuleGUID 774 | 1CD0528F0623707200166675 775 | PBXProjectModuleLabel 776 | <No Editor> 777 | PBXSplitModuleInNavigatorKey 778 | 779 | Split0 780 | 781 | PBXProjectModuleGUID 782 | 1CD052900623707200166675 783 | 784 | SplitCount 785 | 1 786 | 787 | StatusBarVisibility 788 | 1 789 | 790 | GeometryConfiguration 791 | 792 | Frame 793 | {{0, 0}, {500, 215}} 794 | RubberWindowFrame 795 | 192 257 500 500 0 0 1280 1002 796 | 797 | Module 798 | PBXNavigatorGroup 799 | Proportion 800 | 218pt 801 | 802 | 803 | BecomeActive 804 | 1 805 | ContentConfiguration 806 | 807 | PBXProjectModuleGUID 808 | XCMainBuildResultsModuleGUID 809 | PBXProjectModuleLabel 810 | Build Results 811 | 812 | GeometryConfiguration 813 | 814 | Frame 815 | {{0, 222}, {500, 236}} 816 | RubberWindowFrame 817 | 192 257 500 500 0 0 1280 1002 818 | 819 | Module 820 | PBXBuildResultsModule 821 | Proportion 822 | 236pt 823 | 824 | 825 | Proportion 826 | 458pt 827 | 828 | 829 | Name 830 | Build Results 831 | ServiceClasses 832 | 833 | PBXBuildResultsModule 834 | 835 | StatusbarIsVisible 836 | 1 837 | TableOfContents 838 | 839 | 1C78EAA5065D492600B07095 840 | 1C78EAA6065D492600B07095 841 | 1CD0528F0623707200166675 842 | XCMainBuildResultsModuleGUID 843 | 844 | ToolbarConfiguration 845 | xcode.toolbar.config.buildV3 846 | WindowString 847 | 192 257 500 500 0 0 1280 1002 848 | 849 | 850 | Identifier 851 | windowTool.find 852 | Layout 853 | 854 | 855 | Dock 856 | 857 | 858 | Dock 859 | 860 | 861 | ContentConfiguration 862 | 863 | PBXProjectModuleGUID 864 | 1CDD528C0622207200134675 865 | PBXProjectModuleLabel 866 | <No Editor> 867 | PBXSplitModuleInNavigatorKey 868 | 869 | Split0 870 | 871 | PBXProjectModuleGUID 872 | 1CD0528D0623707200166675 873 | 874 | SplitCount 875 | 1 876 | 877 | StatusBarVisibility 878 | 1 879 | 880 | GeometryConfiguration 881 | 882 | Frame 883 | {{0, 0}, {781, 167}} 884 | RubberWindowFrame 885 | 62 385 781 470 0 0 1440 878 886 | 887 | Module 888 | PBXNavigatorGroup 889 | Proportion 890 | 781pt 891 | 892 | 893 | Proportion 894 | 50% 895 | 896 | 897 | BecomeActive 898 | 1 899 | ContentConfiguration 900 | 901 | PBXProjectModuleGUID 902 | 1CD0528E0623707200166675 903 | PBXProjectModuleLabel 904 | Project Find 905 | 906 | GeometryConfiguration 907 | 908 | Frame 909 | {{8, 0}, {773, 254}} 910 | RubberWindowFrame 911 | 62 385 781 470 0 0 1440 878 912 | 913 | Module 914 | PBXProjectFindModule 915 | Proportion 916 | 50% 917 | 918 | 919 | Proportion 920 | 428pt 921 | 922 | 923 | Name 924 | Project Find 925 | ServiceClasses 926 | 927 | PBXProjectFindModule 928 | 929 | StatusbarIsVisible 930 | 1 931 | TableOfContents 932 | 933 | 1C530D57069F1CE1000CFCEE 934 | 1C530D58069F1CE1000CFCEE 935 | 1C530D59069F1CE1000CFCEE 936 | 1CDD528C0622207200134675 937 | 1C530D5A069F1CE1000CFCEE 938 | 1CE0B1FE06471DED0097A5F4 939 | 1CD0528E0623707200166675 940 | 941 | WindowString 942 | 62 385 781 470 0 0 1440 878 943 | WindowToolGUID 944 | 1C530D57069F1CE1000CFCEE 945 | WindowToolIsVisible 946 | 0 947 | 948 | 949 | Identifier 950 | windowTool.snapshots 951 | Layout 952 | 953 | 954 | Dock 955 | 956 | 957 | Module 958 | XCSnapshotModule 959 | Proportion 960 | 100% 961 | 962 | 963 | Proportion 964 | 100% 965 | 966 | 967 | Name 968 | Snapshots 969 | ServiceClasses 970 | 971 | XCSnapshotModule 972 | 973 | StatusbarIsVisible 974 | Yes 975 | ToolbarConfiguration 976 | xcode.toolbar.config.snapshots 977 | WindowString 978 | 315 824 300 550 0 0 1440 878 979 | WindowToolIsVisible 980 | Yes 981 | 982 | 983 | Identifier 984 | windowTool.debuggerConsole 985 | Layout 986 | 987 | 988 | Dock 989 | 990 | 991 | BecomeActive 992 | 1 993 | ContentConfiguration 994 | 995 | PBXProjectModuleGUID 996 | 1C78EAAC065D492600B07095 997 | PBXProjectModuleLabel 998 | Debugger Console 999 | 1000 | GeometryConfiguration 1001 | 1002 | Frame 1003 | {{0, 0}, {700, 358}} 1004 | RubberWindowFrame 1005 | 149 87 700 400 0 0 1440 878 1006 | 1007 | Module 1008 | PBXDebugCLIModule 1009 | Proportion 1010 | 358pt 1011 | 1012 | 1013 | Proportion 1014 | 358pt 1015 | 1016 | 1017 | Name 1018 | Debugger Console 1019 | ServiceClasses 1020 | 1021 | PBXDebugCLIModule 1022 | 1023 | StatusbarIsVisible 1024 | 1 1025 | TableOfContents 1026 | 1027 | 1C530D5B069F1CE1000CFCEE 1028 | 1C530D5C069F1CE1000CFCEE 1029 | 1C78EAAC065D492600B07095 1030 | 1031 | ToolbarConfiguration 1032 | xcode.toolbar.config.consoleV3 1033 | WindowString 1034 | 149 87 440 400 0 0 1440 878 1035 | WindowToolGUID 1036 | 1C530D5B069F1CE1000CFCEE 1037 | WindowToolIsVisible 1038 | 0 1039 | 1040 | 1041 | Identifier 1042 | windowTool.scm 1043 | Layout 1044 | 1045 | 1046 | Dock 1047 | 1048 | 1049 | ContentConfiguration 1050 | 1051 | PBXProjectModuleGUID 1052 | 1C78EAB2065D492600B07095 1053 | PBXProjectModuleLabel 1054 | <No Editor> 1055 | PBXSplitModuleInNavigatorKey 1056 | 1057 | Split0 1058 | 1059 | PBXProjectModuleGUID 1060 | 1C78EAB3065D492600B07095 1061 | 1062 | SplitCount 1063 | 1 1064 | 1065 | StatusBarVisibility 1066 | 1 1067 | 1068 | GeometryConfiguration 1069 | 1070 | Frame 1071 | {{0, 0}, {452, 0}} 1072 | RubberWindowFrame 1073 | 743 379 452 308 0 0 1280 1002 1074 | 1075 | Module 1076 | PBXNavigatorGroup 1077 | Proportion 1078 | 0pt 1079 | 1080 | 1081 | BecomeActive 1082 | 1 1083 | ContentConfiguration 1084 | 1085 | PBXProjectModuleGUID 1086 | 1CD052920623707200166675 1087 | PBXProjectModuleLabel 1088 | SCM 1089 | 1090 | GeometryConfiguration 1091 | 1092 | ConsoleFrame 1093 | {{0, 259}, {452, 0}} 1094 | Frame 1095 | {{0, 7}, {452, 259}} 1096 | RubberWindowFrame 1097 | 743 379 452 308 0 0 1280 1002 1098 | TableConfiguration 1099 | 1100 | Status 1101 | 30 1102 | FileName 1103 | 199 1104 | Path 1105 | 197.09500122070312 1106 | 1107 | TableFrame 1108 | {{0, 0}, {452, 250}} 1109 | 1110 | Module 1111 | PBXCVSModule 1112 | Proportion 1113 | 262pt 1114 | 1115 | 1116 | Proportion 1117 | 266pt 1118 | 1119 | 1120 | Name 1121 | SCM 1122 | ServiceClasses 1123 | 1124 | PBXCVSModule 1125 | 1126 | StatusbarIsVisible 1127 | 1 1128 | TableOfContents 1129 | 1130 | 1C78EAB4065D492600B07095 1131 | 1C78EAB5065D492600B07095 1132 | 1C78EAB2065D492600B07095 1133 | 1CD052920623707200166675 1134 | 1135 | ToolbarConfiguration 1136 | xcode.toolbar.config.scmV3 1137 | WindowString 1138 | 743 379 452 308 0 0 1280 1002 1139 | 1140 | 1141 | Identifier 1142 | windowTool.breakpoints 1143 | IsVertical 1144 | 0 1145 | Layout 1146 | 1147 | 1148 | Dock 1149 | 1150 | 1151 | BecomeActive 1152 | 1 1153 | ContentConfiguration 1154 | 1155 | PBXBottomSmartGroupGIDs 1156 | 1157 | 1C77FABC04509CD000000102 1158 | 1159 | PBXProjectModuleGUID 1160 | 1CE0B1FE06471DED0097A5F4 1161 | PBXProjectModuleLabel 1162 | Files 1163 | PBXProjectStructureProvided 1164 | no 1165 | PBXSmartGroupTreeModuleColumnData 1166 | 1167 | PBXSmartGroupTreeModuleColumnWidthsKey 1168 | 1169 | 168 1170 | 1171 | PBXSmartGroupTreeModuleColumnsKey_v4 1172 | 1173 | MainColumn 1174 | 1175 | 1176 | PBXSmartGroupTreeModuleOutlineStateKey_v7 1177 | 1178 | PBXSmartGroupTreeModuleOutlineStateExpansionKey 1179 | 1180 | 1C77FABC04509CD000000102 1181 | 1182 | PBXSmartGroupTreeModuleOutlineStateSelectionKey 1183 | 1184 | 1185 | 0 1186 | 1187 | 1188 | PBXSmartGroupTreeModuleOutlineStateVisibleRectKey 1189 | {{0, 0}, {168, 350}} 1190 | 1191 | PBXTopSmartGroupGIDs 1192 | 1193 | XCIncludePerspectivesSwitch 1194 | 0 1195 | 1196 | GeometryConfiguration 1197 | 1198 | Frame 1199 | {{0, 0}, {185, 368}} 1200 | GroupTreeTableConfiguration 1201 | 1202 | MainColumn 1203 | 168 1204 | 1205 | RubberWindowFrame 1206 | 315 424 744 409 0 0 1440 878 1207 | 1208 | Module 1209 | PBXSmartGroupTreeModule 1210 | Proportion 1211 | 185pt 1212 | 1213 | 1214 | ContentConfiguration 1215 | 1216 | PBXProjectModuleGUID 1217 | 1CA1AED706398EBD00589147 1218 | PBXProjectModuleLabel 1219 | Detail 1220 | 1221 | GeometryConfiguration 1222 | 1223 | Frame 1224 | {{190, 0}, {554, 368}} 1225 | RubberWindowFrame 1226 | 315 424 744 409 0 0 1440 878 1227 | 1228 | Module 1229 | XCDetailModule 1230 | Proportion 1231 | 554pt 1232 | 1233 | 1234 | Proportion 1235 | 368pt 1236 | 1237 | 1238 | MajorVersion 1239 | 3 1240 | MinorVersion 1241 | 0 1242 | Name 1243 | Breakpoints 1244 | ServiceClasses 1245 | 1246 | PBXSmartGroupTreeModule 1247 | XCDetailModule 1248 | 1249 | StatusbarIsVisible 1250 | 1 1251 | TableOfContents 1252 | 1253 | 1CDDB66807F98D9800BB5817 1254 | 1CDDB66907F98D9800BB5817 1255 | 1CE0B1FE06471DED0097A5F4 1256 | 1CA1AED706398EBD00589147 1257 | 1258 | ToolbarConfiguration 1259 | xcode.toolbar.config.breakpointsV3 1260 | WindowString 1261 | 315 424 744 409 0 0 1440 878 1262 | WindowToolGUID 1263 | 1CDDB66807F98D9800BB5817 1264 | WindowToolIsVisible 1265 | 1 1266 | 1267 | 1268 | Identifier 1269 | windowTool.debugAnimator 1270 | Layout 1271 | 1272 | 1273 | Dock 1274 | 1275 | 1276 | Module 1277 | PBXNavigatorGroup 1278 | Proportion 1279 | 100% 1280 | 1281 | 1282 | Proportion 1283 | 100% 1284 | 1285 | 1286 | Name 1287 | Debug Visualizer 1288 | ServiceClasses 1289 | 1290 | PBXNavigatorGroup 1291 | 1292 | StatusbarIsVisible 1293 | 1 1294 | ToolbarConfiguration 1295 | xcode.toolbar.config.debugAnimatorV3 1296 | WindowString 1297 | 100 100 700 500 0 0 1280 1002 1298 | 1299 | 1300 | Identifier 1301 | windowTool.bookmarks 1302 | Layout 1303 | 1304 | 1305 | Dock 1306 | 1307 | 1308 | Module 1309 | PBXBookmarksModule 1310 | Proportion 1311 | 166pt 1312 | 1313 | 1314 | Proportion 1315 | 166pt 1316 | 1317 | 1318 | Name 1319 | Bookmarks 1320 | ServiceClasses 1321 | 1322 | PBXBookmarksModule 1323 | 1324 | StatusbarIsVisible 1325 | 0 1326 | WindowString 1327 | 538 42 401 187 0 0 1280 1002 1328 | 1329 | 1330 | Identifier 1331 | windowTool.projectFormatConflicts 1332 | Layout 1333 | 1334 | 1335 | Dock 1336 | 1337 | 1338 | Module 1339 | XCProjectFormatConflictsModule 1340 | Proportion 1341 | 100% 1342 | 1343 | 1344 | Proportion 1345 | 100% 1346 | 1347 | 1348 | Name 1349 | Project Format Conflicts 1350 | ServiceClasses 1351 | 1352 | XCProjectFormatConflictsModule 1353 | 1354 | StatusbarIsVisible 1355 | 0 1356 | WindowContentMinSize 1357 | 450 300 1358 | WindowString 1359 | 50 850 472 307 0 0 1440 877 1360 | 1361 | 1362 | Identifier 1363 | windowTool.classBrowser 1364 | Layout 1365 | 1366 | 1367 | Dock 1368 | 1369 | 1370 | BecomeActive 1371 | 1 1372 | ContentConfiguration 1373 | 1374 | OptionsSetName 1375 | Hierarchy, all classes 1376 | PBXProjectModuleGUID 1377 | 1CA6456E063B45B4001379D8 1378 | PBXProjectModuleLabel 1379 | Class Browser - NSObject 1380 | 1381 | GeometryConfiguration 1382 | 1383 | ClassesFrame 1384 | {{0, 0}, {369, 96}} 1385 | ClassesTreeTableConfiguration 1386 | 1387 | PBXClassNameColumnIdentifier 1388 | 208 1389 | PBXClassBookColumnIdentifier 1390 | 22 1391 | 1392 | Frame 1393 | {{0, 0}, {616, 353}} 1394 | MembersFrame 1395 | {{0, 105}, {369, 395}} 1396 | MembersTreeTableConfiguration 1397 | 1398 | PBXMemberTypeIconColumnIdentifier 1399 | 22 1400 | PBXMemberNameColumnIdentifier 1401 | 216 1402 | PBXMemberTypeColumnIdentifier 1403 | 94 1404 | PBXMemberBookColumnIdentifier 1405 | 22 1406 | 1407 | PBXModuleWindowStatusBarHidden2 1408 | 1 1409 | RubberWindowFrame 1410 | 597 125 616 374 0 0 1280 1002 1411 | 1412 | Module 1413 | PBXClassBrowserModule 1414 | Proportion 1415 | 354pt 1416 | 1417 | 1418 | Proportion 1419 | 354pt 1420 | 1421 | 1422 | Name 1423 | Class Browser 1424 | ServiceClasses 1425 | 1426 | PBXClassBrowserModule 1427 | 1428 | StatusbarIsVisible 1429 | 0 1430 | TableOfContents 1431 | 1432 | 1C78EABA065D492600B07095 1433 | 1C78EABB065D492600B07095 1434 | 1CA6456E063B45B4001379D8 1435 | 1436 | ToolbarConfiguration 1437 | xcode.toolbar.config.classbrowser 1438 | WindowString 1439 | 597 125 616 374 0 0 1280 1002 1440 | 1441 | 1442 | Identifier 1443 | windowTool.refactoring 1444 | IncludeInToolsMenu 1445 | 0 1446 | Layout 1447 | 1448 | 1449 | Dock 1450 | 1451 | 1452 | BecomeActive 1453 | 1 1454 | GeometryConfiguration 1455 | 1456 | Frame 1457 | {0, 0}, {500, 335} 1458 | RubberWindowFrame 1459 | {0, 0}, {500, 335} 1460 | 1461 | Module 1462 | XCRefactoringModule 1463 | Proportion 1464 | 100% 1465 | 1466 | 1467 | Proportion 1468 | 100% 1469 | 1470 | 1471 | Name 1472 | Refactoring 1473 | ServiceClasses 1474 | 1475 | XCRefactoringModule 1476 | 1477 | WindowString 1478 | 200 200 500 356 0 0 1920 1200 1479 | 1480 | 1481 | 1482 | 1483 | -------------------------------------------------------------------------------- /StyledPageControlDemo/PageControlDemo.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | F84A251214D6E6270057C3A5 /* pagecontrol-thumb-selected.png in Resources */ = {isa = PBXBuildFile; fileRef = F84A250E14D6E6270057C3A5 /* pagecontrol-thumb-selected.png */; }; 11 | F84A251314D6E6270057C3A5 /* pagecontrol-thumb-selected@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F84A250F14D6E6270057C3A5 /* pagecontrol-thumb-selected@2x.png */; }; 12 | F84A251414D6E6270057C3A5 /* pagecontrol-thumb-normal.png in Resources */ = {isa = PBXBuildFile; fileRef = F84A251014D6E6270057C3A5 /* pagecontrol-thumb-normal.png */; }; 13 | F84A251514D6E6270057C3A5 /* pagecontrol-thumb-normal@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F84A251114D6E6270057C3A5 /* pagecontrol-thumb-normal@2x.png */; }; 14 | F8B2E731137ED3C500338230 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8B2E730137ED3C500338230 /* UIKit.framework */; }; 15 | F8B2E733137ED3C500338230 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8B2E732137ED3C500338230 /* Foundation.framework */; }; 16 | F8B2E735137ED3C500338230 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8B2E734137ED3C500338230 /* CoreGraphics.framework */; }; 17 | F8B2E73B137ED3C500338230 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = F8B2E739137ED3C500338230 /* InfoPlist.strings */; }; 18 | F8B2E73E137ED3C500338230 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = F8B2E73D137ED3C500338230 /* main.m */; }; 19 | F8B2E741137ED3C500338230 /* PageControlDemoAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = F8B2E740137ED3C500338230 /* PageControlDemoAppDelegate.m */; }; 20 | F8B2E745137ED3C500338230 /* PageControlDemoAppDelegate_iPhone.m in Sources */ = {isa = PBXBuildFile; fileRef = F8B2E744137ED3C500338230 /* PageControlDemoAppDelegate_iPhone.m */; }; 21 | F8B2E748137ED3C500338230 /* MainWindow_iPhone.xib in Resources */ = {isa = PBXBuildFile; fileRef = F8B2E746137ED3C500338230 /* MainWindow_iPhone.xib */; }; 22 | F8B2E74C137ED3C500338230 /* PageControlDemoAppDelegate_iPad.m in Sources */ = {isa = PBXBuildFile; fileRef = F8B2E74B137ED3C500338230 /* PageControlDemoAppDelegate_iPad.m */; }; 23 | F8B2E74F137ED3C500338230 /* MainWindow_iPad.xib in Resources */ = {isa = PBXBuildFile; fileRef = F8B2E74D137ED3C500338230 /* MainWindow_iPad.xib */; }; 24 | F8B2E758137ED42000338230 /* StyledPageControl.m in Sources */ = {isa = PBXBuildFile; fileRef = F8B2E757137ED42000338230 /* StyledPageControl.m */; }; 25 | F8B2E75B137ED5EB00338230 /* PageControlDemoListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F8B2E75A137ED5EB00338230 /* PageControlDemoListViewController.m */; }; 26 | F8B2E75E137EDA8800338230 /* PageControlDemoTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = F8B2E75D137EDA8800338230 /* PageControlDemoTableViewCell.m */; }; 27 | /* End PBXBuildFile section */ 28 | 29 | /* Begin PBXFileReference section */ 30 | F84A250E14D6E6270057C3A5 /* pagecontrol-thumb-selected.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "pagecontrol-thumb-selected.png"; path = "Resources/pagecontrol-thumb-selected.png"; sourceTree = ""; }; 31 | F84A250F14D6E6270057C3A5 /* pagecontrol-thumb-selected@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "pagecontrol-thumb-selected@2x.png"; path = "Resources/pagecontrol-thumb-selected@2x.png"; sourceTree = ""; }; 32 | F84A251014D6E6270057C3A5 /* pagecontrol-thumb-normal.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "pagecontrol-thumb-normal.png"; path = "Resources/pagecontrol-thumb-normal.png"; sourceTree = ""; }; 33 | F84A251114D6E6270057C3A5 /* pagecontrol-thumb-normal@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "pagecontrol-thumb-normal@2x.png"; path = "Resources/pagecontrol-thumb-normal@2x.png"; sourceTree = ""; }; 34 | F8B2E72C137ED3C500338230 /* PageControlDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PageControlDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; 35 | F8B2E730137ED3C500338230 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 36 | F8B2E732137ED3C500338230 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 37 | F8B2E734137ED3C500338230 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 38 | F8B2E738137ED3C500338230 /* PageControlDemo-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "PageControlDemo-Info.plist"; sourceTree = ""; }; 39 | F8B2E73A137ED3C500338230 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 40 | F8B2E73C137ED3C500338230 /* PageControlDemo-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "PageControlDemo-Prefix.pch"; sourceTree = ""; }; 41 | F8B2E73D137ED3C500338230 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 42 | F8B2E73F137ED3C500338230 /* PageControlDemoAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PageControlDemoAppDelegate.h; sourceTree = ""; }; 43 | F8B2E740137ED3C500338230 /* PageControlDemoAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PageControlDemoAppDelegate.m; sourceTree = ""; }; 44 | F8B2E743137ED3C500338230 /* PageControlDemoAppDelegate_iPhone.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = PageControlDemoAppDelegate_iPhone.h; path = iPhone/PageControlDemoAppDelegate_iPhone.h; sourceTree = ""; }; 45 | F8B2E744137ED3C500338230 /* PageControlDemoAppDelegate_iPhone.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = PageControlDemoAppDelegate_iPhone.m; path = iPhone/PageControlDemoAppDelegate_iPhone.m; sourceTree = ""; }; 46 | F8B2E747137ED3C500338230 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = iPhone/en.lproj/MainWindow_iPhone.xib; sourceTree = ""; }; 47 | F8B2E74A137ED3C500338230 /* PageControlDemoAppDelegate_iPad.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = PageControlDemoAppDelegate_iPad.h; path = iPad/PageControlDemoAppDelegate_iPad.h; sourceTree = ""; }; 48 | F8B2E74B137ED3C500338230 /* PageControlDemoAppDelegate_iPad.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = PageControlDemoAppDelegate_iPad.m; path = iPad/PageControlDemoAppDelegate_iPad.m; sourceTree = ""; }; 49 | F8B2E74E137ED3C500338230 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = iPad/en.lproj/MainWindow_iPad.xib; sourceTree = ""; }; 50 | F8B2E756137ED42000338230 /* StyledPageControl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StyledPageControl.h; sourceTree = ""; }; 51 | F8B2E757137ED42000338230 /* StyledPageControl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = StyledPageControl.m; sourceTree = ""; }; 52 | F8B2E759137ED5EB00338230 /* PageControlDemoListViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PageControlDemoListViewController.h; sourceTree = ""; }; 53 | F8B2E75A137ED5EB00338230 /* PageControlDemoListViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PageControlDemoListViewController.m; sourceTree = ""; }; 54 | F8B2E75C137EDA8800338230 /* PageControlDemoTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PageControlDemoTableViewCell.h; sourceTree = ""; }; 55 | F8B2E75D137EDA8800338230 /* PageControlDemoTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PageControlDemoTableViewCell.m; sourceTree = ""; }; 56 | /* End PBXFileReference section */ 57 | 58 | /* Begin PBXFrameworksBuildPhase section */ 59 | F8B2E729137ED3C400338230 /* Frameworks */ = { 60 | isa = PBXFrameworksBuildPhase; 61 | buildActionMask = 2147483647; 62 | files = ( 63 | F8B2E731137ED3C500338230 /* UIKit.framework in Frameworks */, 64 | F8B2E733137ED3C500338230 /* Foundation.framework in Frameworks */, 65 | F8B2E735137ED3C500338230 /* CoreGraphics.framework in Frameworks */, 66 | ); 67 | runOnlyForDeploymentPostprocessing = 0; 68 | }; 69 | /* End PBXFrameworksBuildPhase section */ 70 | 71 | /* Begin PBXGroup section */ 72 | F8B2E721137ED3C400338230 = { 73 | isa = PBXGroup; 74 | children = ( 75 | F8B2E736137ED3C500338230 /* PageControlDemo */, 76 | F8B2E72F137ED3C500338230 /* Frameworks */, 77 | F8B2E72D137ED3C500338230 /* Products */, 78 | ); 79 | sourceTree = ""; 80 | }; 81 | F8B2E72D137ED3C500338230 /* Products */ = { 82 | isa = PBXGroup; 83 | children = ( 84 | F8B2E72C137ED3C500338230 /* PageControlDemo.app */, 85 | ); 86 | name = Products; 87 | sourceTree = ""; 88 | }; 89 | F8B2E72F137ED3C500338230 /* Frameworks */ = { 90 | isa = PBXGroup; 91 | children = ( 92 | F8B2E730137ED3C500338230 /* UIKit.framework */, 93 | F8B2E732137ED3C500338230 /* Foundation.framework */, 94 | F8B2E734137ED3C500338230 /* CoreGraphics.framework */, 95 | ); 96 | name = Frameworks; 97 | sourceTree = ""; 98 | }; 99 | F8B2E736137ED3C500338230 /* PageControlDemo */ = { 100 | isa = PBXGroup; 101 | children = ( 102 | F8B2E73F137ED3C500338230 /* PageControlDemoAppDelegate.h */, 103 | F8B2E740137ED3C500338230 /* PageControlDemoAppDelegate.m */, 104 | F8B2E759137ED5EB00338230 /* PageControlDemoListViewController.h */, 105 | F8B2E75A137ED5EB00338230 /* PageControlDemoListViewController.m */, 106 | F8B2E75C137EDA8800338230 /* PageControlDemoTableViewCell.h */, 107 | F8B2E75D137EDA8800338230 /* PageControlDemoTableViewCell.m */, 108 | F8B2E755137ED40800338230 /* PageControl */, 109 | F8B2E742137ED3C500338230 /* iPhone */, 110 | F8B2E749137ED3C500338230 /* iPad */, 111 | F8B2E737137ED3C500338230 /* Supporting Files */, 112 | ); 113 | path = PageControlDemo; 114 | sourceTree = ""; 115 | }; 116 | F8B2E737137ED3C500338230 /* Supporting Files */ = { 117 | isa = PBXGroup; 118 | children = ( 119 | F84A250E14D6E6270057C3A5 /* pagecontrol-thumb-selected.png */, 120 | F84A250F14D6E6270057C3A5 /* pagecontrol-thumb-selected@2x.png */, 121 | F84A251014D6E6270057C3A5 /* pagecontrol-thumb-normal.png */, 122 | F84A251114D6E6270057C3A5 /* pagecontrol-thumb-normal@2x.png */, 123 | F8B2E738137ED3C500338230 /* PageControlDemo-Info.plist */, 124 | F8B2E739137ED3C500338230 /* InfoPlist.strings */, 125 | F8B2E73C137ED3C500338230 /* PageControlDemo-Prefix.pch */, 126 | F8B2E73D137ED3C500338230 /* main.m */, 127 | ); 128 | name = "Supporting Files"; 129 | sourceTree = ""; 130 | }; 131 | F8B2E742137ED3C500338230 /* iPhone */ = { 132 | isa = PBXGroup; 133 | children = ( 134 | F8B2E743137ED3C500338230 /* PageControlDemoAppDelegate_iPhone.h */, 135 | F8B2E744137ED3C500338230 /* PageControlDemoAppDelegate_iPhone.m */, 136 | F8B2E746137ED3C500338230 /* MainWindow_iPhone.xib */, 137 | ); 138 | name = iPhone; 139 | sourceTree = ""; 140 | }; 141 | F8B2E749137ED3C500338230 /* iPad */ = { 142 | isa = PBXGroup; 143 | children = ( 144 | F8B2E74A137ED3C500338230 /* PageControlDemoAppDelegate_iPad.h */, 145 | F8B2E74B137ED3C500338230 /* PageControlDemoAppDelegate_iPad.m */, 146 | F8B2E74D137ED3C500338230 /* MainWindow_iPad.xib */, 147 | ); 148 | name = iPad; 149 | sourceTree = ""; 150 | }; 151 | F8B2E755137ED40800338230 /* PageControl */ = { 152 | isa = PBXGroup; 153 | children = ( 154 | F8B2E756137ED42000338230 /* StyledPageControl.h */, 155 | F8B2E757137ED42000338230 /* StyledPageControl.m */, 156 | ); 157 | name = PageControl; 158 | sourceTree = ""; 159 | }; 160 | /* End PBXGroup section */ 161 | 162 | /* Begin PBXNativeTarget section */ 163 | F8B2E72B137ED3C400338230 /* PageControlDemo */ = { 164 | isa = PBXNativeTarget; 165 | buildConfigurationList = F8B2E752137ED3C500338230 /* Build configuration list for PBXNativeTarget "PageControlDemo" */; 166 | buildPhases = ( 167 | F8B2E728137ED3C400338230 /* Sources */, 168 | F8B2E729137ED3C400338230 /* Frameworks */, 169 | F8B2E72A137ED3C400338230 /* Resources */, 170 | ); 171 | buildRules = ( 172 | ); 173 | dependencies = ( 174 | ); 175 | name = PageControlDemo; 176 | productName = PageControlDemo; 177 | productReference = F8B2E72C137ED3C500338230 /* PageControlDemo.app */; 178 | productType = "com.apple.product-type.application"; 179 | }; 180 | /* End PBXNativeTarget section */ 181 | 182 | /* Begin PBXProject section */ 183 | F8B2E723137ED3C400338230 /* Project object */ = { 184 | isa = PBXProject; 185 | attributes = { 186 | LastUpgradeCheck = 0440; 187 | ORGANIZATIONNAME = "BuUuK Pte Ltd"; 188 | }; 189 | buildConfigurationList = F8B2E726137ED3C400338230 /* Build configuration list for PBXProject "PageControlDemo" */; 190 | compatibilityVersion = "Xcode 3.2"; 191 | developmentRegion = English; 192 | hasScannedForEncodings = 0; 193 | knownRegions = ( 194 | en, 195 | ); 196 | mainGroup = F8B2E721137ED3C400338230; 197 | productRefGroup = F8B2E72D137ED3C500338230 /* Products */; 198 | projectDirPath = ""; 199 | projectRoot = ""; 200 | targets = ( 201 | F8B2E72B137ED3C400338230 /* PageControlDemo */, 202 | ); 203 | }; 204 | /* End PBXProject section */ 205 | 206 | /* Begin PBXResourcesBuildPhase section */ 207 | F8B2E72A137ED3C400338230 /* Resources */ = { 208 | isa = PBXResourcesBuildPhase; 209 | buildActionMask = 2147483647; 210 | files = ( 211 | F8B2E73B137ED3C500338230 /* InfoPlist.strings in Resources */, 212 | F8B2E748137ED3C500338230 /* MainWindow_iPhone.xib in Resources */, 213 | F8B2E74F137ED3C500338230 /* MainWindow_iPad.xib in Resources */, 214 | F84A251214D6E6270057C3A5 /* pagecontrol-thumb-selected.png in Resources */, 215 | F84A251314D6E6270057C3A5 /* pagecontrol-thumb-selected@2x.png in Resources */, 216 | F84A251414D6E6270057C3A5 /* pagecontrol-thumb-normal.png in Resources */, 217 | F84A251514D6E6270057C3A5 /* pagecontrol-thumb-normal@2x.png in Resources */, 218 | ); 219 | runOnlyForDeploymentPostprocessing = 0; 220 | }; 221 | /* End PBXResourcesBuildPhase section */ 222 | 223 | /* Begin PBXSourcesBuildPhase section */ 224 | F8B2E728137ED3C400338230 /* Sources */ = { 225 | isa = PBXSourcesBuildPhase; 226 | buildActionMask = 2147483647; 227 | files = ( 228 | F8B2E73E137ED3C500338230 /* main.m in Sources */, 229 | F8B2E741137ED3C500338230 /* PageControlDemoAppDelegate.m in Sources */, 230 | F8B2E745137ED3C500338230 /* PageControlDemoAppDelegate_iPhone.m in Sources */, 231 | F8B2E74C137ED3C500338230 /* PageControlDemoAppDelegate_iPad.m in Sources */, 232 | F8B2E758137ED42000338230 /* StyledPageControl.m in Sources */, 233 | F8B2E75B137ED5EB00338230 /* PageControlDemoListViewController.m in Sources */, 234 | F8B2E75E137EDA8800338230 /* PageControlDemoTableViewCell.m in Sources */, 235 | ); 236 | runOnlyForDeploymentPostprocessing = 0; 237 | }; 238 | /* End PBXSourcesBuildPhase section */ 239 | 240 | /* Begin PBXVariantGroup section */ 241 | F8B2E739137ED3C500338230 /* InfoPlist.strings */ = { 242 | isa = PBXVariantGroup; 243 | children = ( 244 | F8B2E73A137ED3C500338230 /* en */, 245 | ); 246 | name = InfoPlist.strings; 247 | sourceTree = ""; 248 | }; 249 | F8B2E746137ED3C500338230 /* MainWindow_iPhone.xib */ = { 250 | isa = PBXVariantGroup; 251 | children = ( 252 | F8B2E747137ED3C500338230 /* en */, 253 | ); 254 | name = MainWindow_iPhone.xib; 255 | sourceTree = ""; 256 | }; 257 | F8B2E74D137ED3C500338230 /* MainWindow_iPad.xib */ = { 258 | isa = PBXVariantGroup; 259 | children = ( 260 | F8B2E74E137ED3C500338230 /* en */, 261 | ); 262 | name = MainWindow_iPad.xib; 263 | sourceTree = ""; 264 | }; 265 | /* End PBXVariantGroup section */ 266 | 267 | /* Begin XCBuildConfiguration section */ 268 | F8B2E750137ED3C500338230 /* Debug */ = { 269 | isa = XCBuildConfiguration; 270 | buildSettings = { 271 | ARCHS = "$(ARCHS_STANDARD_32_BIT)"; 272 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 273 | GCC_C_LANGUAGE_STANDARD = gnu99; 274 | GCC_OPTIMIZATION_LEVEL = 0; 275 | GCC_PREPROCESSOR_DEFINITIONS = DEBUG; 276 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 277 | GCC_VERSION = com.apple.compilers.llvmgcc42; 278 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 279 | GCC_WARN_UNUSED_VARIABLE = YES; 280 | IPHONEOS_DEPLOYMENT_TARGET = 4.3; 281 | SDKROOT = iphoneos; 282 | TARGETED_DEVICE_FAMILY = "1,2"; 283 | }; 284 | name = Debug; 285 | }; 286 | F8B2E751137ED3C500338230 /* Release */ = { 287 | isa = XCBuildConfiguration; 288 | buildSettings = { 289 | ARCHS = "$(ARCHS_STANDARD_32_BIT)"; 290 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 291 | GCC_C_LANGUAGE_STANDARD = gnu99; 292 | GCC_VERSION = com.apple.compilers.llvmgcc42; 293 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 294 | GCC_WARN_UNUSED_VARIABLE = YES; 295 | IPHONEOS_DEPLOYMENT_TARGET = 4.3; 296 | OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; 297 | SDKROOT = iphoneos; 298 | TARGETED_DEVICE_FAMILY = "1,2"; 299 | }; 300 | name = Release; 301 | }; 302 | F8B2E753137ED3C500338230 /* Debug */ = { 303 | isa = XCBuildConfiguration; 304 | buildSettings = { 305 | ALWAYS_SEARCH_USER_PATHS = NO; 306 | CLANG_ENABLE_OBJC_ARC = YES; 307 | CLANG_WARN_OBJC_MISSING_PROPERTY_SYNTHESIS = NO; 308 | COPY_PHASE_STRIP = NO; 309 | GCC_DYNAMIC_NO_PIC = NO; 310 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 311 | GCC_PREFIX_HEADER = "PageControlDemo/PageControlDemo-Prefix.pch"; 312 | GCC_VERSION = com.apple.compilers.llvm.clang.1_0; 313 | INFOPLIST_FILE = "PageControlDemo/PageControlDemo-Info.plist"; 314 | PRODUCT_NAME = "$(TARGET_NAME)"; 315 | RUN_CLANG_STATIC_ANALYZER = YES; 316 | WRAPPER_EXTENSION = app; 317 | }; 318 | name = Debug; 319 | }; 320 | F8B2E754137ED3C500338230 /* Release */ = { 321 | isa = XCBuildConfiguration; 322 | buildSettings = { 323 | ALWAYS_SEARCH_USER_PATHS = NO; 324 | CLANG_ENABLE_OBJC_ARC = YES; 325 | CLANG_WARN_OBJC_MISSING_PROPERTY_SYNTHESIS = NO; 326 | COPY_PHASE_STRIP = YES; 327 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 328 | GCC_PREFIX_HEADER = "PageControlDemo/PageControlDemo-Prefix.pch"; 329 | GCC_VERSION = com.apple.compilers.llvm.clang.1_0; 330 | INFOPLIST_FILE = "PageControlDemo/PageControlDemo-Info.plist"; 331 | PRODUCT_NAME = "$(TARGET_NAME)"; 332 | RUN_CLANG_STATIC_ANALYZER = NO; 333 | VALIDATE_PRODUCT = YES; 334 | WRAPPER_EXTENSION = app; 335 | }; 336 | name = Release; 337 | }; 338 | /* End XCBuildConfiguration section */ 339 | 340 | /* Begin XCConfigurationList section */ 341 | F8B2E726137ED3C400338230 /* Build configuration list for PBXProject "PageControlDemo" */ = { 342 | isa = XCConfigurationList; 343 | buildConfigurations = ( 344 | F8B2E750137ED3C500338230 /* Debug */, 345 | F8B2E751137ED3C500338230 /* Release */, 346 | ); 347 | defaultConfigurationIsVisible = 0; 348 | defaultConfigurationName = Release; 349 | }; 350 | F8B2E752137ED3C500338230 /* Build configuration list for PBXNativeTarget "PageControlDemo" */ = { 351 | isa = XCConfigurationList; 352 | buildConfigurations = ( 353 | F8B2E753137ED3C500338230 /* Debug */, 354 | F8B2E754137ED3C500338230 /* Release */, 355 | ); 356 | defaultConfigurationIsVisible = 0; 357 | defaultConfigurationName = Release; 358 | }; 359 | /* End XCConfigurationList section */ 360 | }; 361 | rootObject = F8B2E723137ED3C400338230 /* Project object */; 362 | } 363 | -------------------------------------------------------------------------------- /StyledPageControlDemo/PageControlDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /StyledPageControlDemo/PageControlDemo.xcodeproj/xcuserdata/honcheng.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /StyledPageControlDemo/PageControlDemo.xcodeproj/xcuserdata/honcheng.xcuserdatad/xcschemes/PageControlDemo.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 44 | 45 | 51 | 52 | 53 | 54 | 58 | 59 | 60 | 61 | 62 | 63 | 71 | 72 | 78 | 79 | 80 | 81 | 83 | 84 | 87 | 88 | 89 | -------------------------------------------------------------------------------- /StyledPageControlDemo/PageControlDemo.xcodeproj/xcuserdata/honcheng.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | PageControlDemo.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | F8B2E72B137ED3C400338230 16 | 17 | primary 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /StyledPageControlDemo/PageControlDemo/PageControlDemo-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | ${PRODUCT_NAME} 9 | CFBundleExecutable 10 | ${EXECUTABLE_NAME} 11 | CFBundleIconFile 12 | 13 | CFBundleIdentifier 14 | com.honcheng.pagecontrol.${PRODUCT_NAME:rfc1034identifier} 15 | CFBundleInfoDictionaryVersion 16 | 6.0 17 | CFBundleName 18 | ${PRODUCT_NAME} 19 | CFBundlePackageType 20 | APPL 21 | CFBundleShortVersionString 22 | 1.0 23 | CFBundleSignature 24 | ???? 25 | CFBundleVersion 26 | 1.0 27 | LSRequiresIPhoneOS 28 | 29 | NSMainNibFile 30 | MainWindow_iPhone 31 | NSMainNibFile~ipad 32 | MainWindow_iPad 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | UISupportedInterfaceOrientations~ipad 40 | 41 | UIInterfaceOrientationPortrait 42 | UIInterfaceOrientationPortraitUpsideDown 43 | UIInterfaceOrientationLandscapeLeft 44 | UIInterfaceOrientationLandscapeRight 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /StyledPageControlDemo/PageControlDemo/PageControlDemo-Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header for all source files of the 'PageControlDemo' target in the 'PageControlDemo' project 3 | // 4 | 5 | #import 6 | 7 | #ifndef __IPHONE_3_0 8 | #warning "This project uses features only available in iPhone SDK 3.0 and later." 9 | #endif 10 | 11 | #ifdef __OBJC__ 12 | #import 13 | #import 14 | #endif 15 | -------------------------------------------------------------------------------- /StyledPageControlDemo/PageControlDemo/PageControlDemoAppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // PageControlDemoAppDelegate.h 3 | // PageControlDemo 4 | // 5 | // Created by honcheng on 5/14/11. 6 | // Copyright 2011 BuUuK Pte Ltd. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface PageControlDemoAppDelegate : NSObject 12 | @property (nonatomic) IBOutlet UIWindow *window; 13 | @end 14 | -------------------------------------------------------------------------------- /StyledPageControlDemo/PageControlDemo/PageControlDemoAppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // PageControlDemoAppDelegate.m 3 | // PageControlDemo 4 | // 5 | // Created by honcheng on 5/14/11. 6 | // Copyright 2011 BuUuK Pte Ltd. All rights reserved. 7 | // 8 | 9 | #import "PageControlDemoAppDelegate.h" 10 | #import "PageControlDemoListViewController.h" 11 | 12 | @implementation PageControlDemoAppDelegate 13 | 14 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 15 | { 16 | // Override point for customization after application launch. 17 | [self.window makeKeyAndVisible]; 18 | 19 | PageControlDemoListViewController *demoList = [[PageControlDemoListViewController alloc] init]; 20 | UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:demoList]; 21 | [_window setRootViewController:navController]; 22 | 23 | return YES; 24 | } 25 | 26 | - (void)applicationWillResignActive:(UIApplication *)application 27 | { 28 | /* 29 | 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. 30 | 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. 31 | */ 32 | } 33 | 34 | - (void)applicationDidEnterBackground:(UIApplication *)application 35 | { 36 | /* 37 | 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. 38 | If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 39 | */ 40 | } 41 | 42 | - (void)applicationWillEnterForeground:(UIApplication *)application 43 | { 44 | /* 45 | 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. 46 | */ 47 | } 48 | 49 | - (void)applicationDidBecomeActive:(UIApplication *)application 50 | { 51 | /* 52 | 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. 53 | */ 54 | } 55 | 56 | - (void)applicationWillTerminate:(UIApplication *)application 57 | { 58 | /* 59 | Called when the application is about to terminate. 60 | Save data if appropriate. 61 | See also applicationDidEnterBackground:. 62 | */ 63 | } 64 | 65 | 66 | @end 67 | -------------------------------------------------------------------------------- /StyledPageControlDemo/PageControlDemo/PageControlDemoListViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // PageControlDemoListViewController.h 3 | // PageControlDemo 4 | // 5 | // Created by honcheng on 5/14/11. 6 | // Copyright 2011 BuUuK Pte Ltd. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | 12 | @interface PageControlDemoListViewController : UITableViewController 13 | @end 14 | -------------------------------------------------------------------------------- /StyledPageControlDemo/PageControlDemo/PageControlDemoListViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // PageControlDemoListViewController.m 3 | // PageControlDemo 4 | // 5 | // Created by honcheng on 5/14/11. 6 | // Copyright 2011 BuUuK Pte Ltd. All rights reserved. 7 | // 8 | 9 | #import "PageControlDemoListViewController.h" 10 | #import "PageControlDemoTableViewCell.h" 11 | 12 | @implementation PageControlDemoListViewController 13 | 14 | - (id)initWithStyle:(UITableViewStyle)style 15 | { 16 | self = [super initWithStyle:style]; 17 | if (self) { 18 | // Custom initialization 19 | 20 | [self setTitle:@"PageControl Demo"]; 21 | } 22 | return self; 23 | } 24 | 25 | 26 | - (void)didReceiveMemoryWarning 27 | { 28 | // Releases the view if it doesn't have a superview. 29 | [super didReceiveMemoryWarning]; 30 | 31 | // Release any cached data, images, etc that aren't in use. 32 | } 33 | 34 | #pragma mark - View lifecycle 35 | 36 | - (void)viewDidLoad 37 | { 38 | [super viewDidLoad]; 39 | 40 | // Uncomment the following line to preserve selection between presentations. 41 | // self.clearsSelectionOnViewWillAppear = NO; 42 | 43 | // Uncomment the following line to display an Edit button in the navigation bar for this view controller. 44 | // self.navigationItem.rightBarButtonItem = self.editButtonItem; 45 | } 46 | 47 | - (void)viewDidUnload 48 | { 49 | [super viewDidUnload]; 50 | // Release any retained subviews of the main view. 51 | // e.g. self.myOutlet = nil; 52 | } 53 | 54 | - (void)viewWillAppear:(BOOL)animated 55 | { 56 | [super viewWillAppear:animated]; 57 | } 58 | 59 | - (void)viewDidAppear:(BOOL)animated 60 | { 61 | [super viewDidAppear:animated]; 62 | } 63 | 64 | - (void)viewWillDisappear:(BOOL)animated 65 | { 66 | [super viewWillDisappear:animated]; 67 | } 68 | 69 | - (void)viewDidDisappear:(BOOL)animated 70 | { 71 | [super viewDidDisappear:animated]; 72 | } 73 | 74 | - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 75 | { 76 | // Return YES for supported orientations 77 | return (interfaceOrientation == UIInterfaceOrientationPortrait); 78 | } 79 | 80 | #pragma mark - Table view data source 81 | 82 | - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 83 | { 84 | return 6; 85 | } 86 | 87 | - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 88 | { 89 | if (section==0) 90 | { 91 | return 3; 92 | } 93 | else if (section==1) 94 | { 95 | return 1; 96 | } 97 | else if (section==2) 98 | { 99 | return 1; 100 | } 101 | else if (section==3) 102 | { 103 | return 1; 104 | } 105 | else if (section==4) 106 | { 107 | return 1; 108 | } 109 | else if (section==5) 110 | { 111 | return 1; 112 | } 113 | else return 0; 114 | } 115 | 116 | - (NSString*)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section 117 | { 118 | if (section==0) 119 | { 120 | return @"PageControlStyleDefault"; 121 | } 122 | else if (section==1) 123 | { 124 | return @"PageControlStyleStrokedCircle"; 125 | } 126 | else if (section==2) 127 | { 128 | return @"PageControlStylePressed1"; 129 | } 130 | else if (section==3) 131 | { 132 | return @"PageControlStylePressed2"; 133 | } 134 | else if (section==4) 135 | { 136 | return @"PageControlStyleWithPageNumber"; 137 | } 138 | else if (section==5) 139 | { 140 | return @"PageControlStyleThumb"; 141 | } 142 | else return nil; 143 | } 144 | 145 | - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 146 | { 147 | return 34; 148 | } 149 | 150 | - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 151 | { 152 | static NSString *CellIdentifier = @"Cell"; 153 | 154 | PageControlDemoTableViewCell *cell = (PageControlDemoTableViewCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 155 | if (cell == nil) 156 | { 157 | cell = [[PageControlDemoTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 158 | } 159 | [cell.pageControl setNumberOfPages:10]; 160 | [cell.pageControl setCurrentPage:5]; 161 | 162 | if (indexPath.section==0) 163 | { 164 | [cell.pageControl setPageControlStyle:PageControlStyleDefault]; 165 | if (indexPath.row==0) 166 | { 167 | // default style without changes 168 | } 169 | else if (indexPath.row==1) 170 | { 171 | // change color 172 | [cell.pageControl setCoreNormalColor:[UIColor colorWithRed:0 green:0 blue:0 alpha:1]]; 173 | [cell.pageControl setCoreSelectedColor:[UIColor colorWithRed:0.8 green:0.2 blue:0.2 alpha:1]]; 174 | } 175 | else if (indexPath.row==2) 176 | { 177 | // change gap width 178 | [cell.pageControl setGapWidth:5]; 179 | // change diameter 180 | [cell.pageControl setDiameter:9]; 181 | } 182 | } 183 | else if (indexPath.section==1) 184 | { 185 | [cell.pageControl setPageControlStyle:PageControlStyleStrokedCircle]; 186 | } 187 | else if (indexPath.section==2) 188 | { 189 | [cell.pageControl setPageControlStyle:PageControlStylePressed1]; 190 | [cell.pageControl setBackgroundColor:[UIColor darkGrayColor]]; 191 | } 192 | else if (indexPath.section==3) 193 | { 194 | [cell.pageControl setPageControlStyle:PageControlStylePressed2]; 195 | [cell.pageControl setBackgroundColor:[UIColor darkGrayColor]]; 196 | } 197 | else if (indexPath.section==4) 198 | { 199 | [cell.pageControl setPageControlStyle:PageControlStyleWithPageNumber]; 200 | [cell.pageControl setNumberOfPages:14]; 201 | } 202 | else if (indexPath.section==5) 203 | { 204 | [cell.pageControl setPageControlStyle:PageControlStyleThumb]; 205 | [cell.pageControl setThumbImage:[UIImage imageNamed:@"pagecontrol-thumb-normal.png"]]; 206 | [cell.pageControl setSelectedThumbImage:[UIImage imageNamed:@"pagecontrol-thumb-selected.png"]]; 207 | [cell.pageControl setNumberOfPages:10]; 208 | } 209 | 210 | return cell; 211 | } 212 | 213 | /* 214 | // Override to support conditional editing of the table view. 215 | - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath 216 | { 217 | // Return NO if you do not want the specified item to be editable. 218 | return YES; 219 | } 220 | */ 221 | 222 | /* 223 | // Override to support editing the table view. 224 | - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 225 | { 226 | if (editingStyle == UITableViewCellEditingStyleDelete) { 227 | // Delete the row from the data source 228 | [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; 229 | } 230 | else if (editingStyle == UITableViewCellEditingStyleInsert) { 231 | // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view 232 | } 233 | } 234 | */ 235 | 236 | /* 237 | // Override to support rearranging the table view. 238 | - (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath 239 | { 240 | } 241 | */ 242 | 243 | /* 244 | // Override to support conditional rearranging of the table view. 245 | - (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath 246 | { 247 | // Return NO if you do not want the item to be re-orderable. 248 | return YES; 249 | } 250 | */ 251 | 252 | #pragma mark - Table view delegate 253 | 254 | - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 255 | { 256 | // Navigation logic may go here. Create and push another view controller. 257 | /* 258 | <#DetailViewController#> *detailViewController = [[<#DetailViewController#> alloc] initWithNibName:@"<#Nib name#>" bundle:nil]; 259 | // ... 260 | // Pass the selected object to the new view controller. 261 | [self.navigationController pushViewController:detailViewController animated:YES]; 262 | [detailViewController release]; 263 | */ 264 | } 265 | 266 | @end 267 | -------------------------------------------------------------------------------- /StyledPageControlDemo/PageControlDemo/PageControlDemoTableViewCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // PageControlDemoTableViewCell.h 3 | // PageControlDemo 4 | // 5 | // Created by honcheng on 5/14/11. 6 | // Copyright 2011 BuUuK Pte Ltd. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "StyledPageControl.h" 11 | 12 | @interface PageControlDemoTableViewCell : UITableViewCell 13 | @property (nonatomic) StyledPageControl *pageControl; 14 | @end 15 | -------------------------------------------------------------------------------- /StyledPageControlDemo/PageControlDemo/PageControlDemoTableViewCell.m: -------------------------------------------------------------------------------- 1 | // 2 | // PageControlDemoTableViewCell.m 3 | // PageControlDemo 4 | // 5 | // Created by honcheng on 5/14/11. 6 | // Copyright 2011 BuUuK Pte Ltd. All rights reserved. 7 | // 8 | 9 | #import "PageControlDemoTableViewCell.h" 10 | 11 | 12 | @implementation PageControlDemoTableViewCell 13 | 14 | - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 15 | { 16 | self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; 17 | if (self) { 18 | // Initialization code 19 | 20 | _pageControl = [[StyledPageControl alloc] initWithFrame:CGRectZero]; 21 | [_pageControl setAutoresizingMask:UIViewAutoresizingFlexibleWidth]; 22 | [self.contentView addSubview:_pageControl]; 23 | 24 | [self setSelectionStyle:UITableViewCellSelectionStyleNone]; 25 | } 26 | return self; 27 | } 28 | 29 | - (void)layoutSubviews 30 | { 31 | [super layoutSubviews]; 32 | [self.pageControl setFrame:CGRectMake(20,(self.frame.size.height-20)/2,self.frame.size.width-40,20)]; 33 | } 34 | 35 | - (void)setSelected:(BOOL)selected animated:(BOOL)animated 36 | { 37 | [super setSelected:selected animated:animated]; 38 | 39 | // Configure the view for the selected state 40 | } 41 | 42 | 43 | @end 44 | -------------------------------------------------------------------------------- /StyledPageControlDemo/PageControlDemo/Resources/pagecontrol-thumb-normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/honcheng/iOS-StyledPageControl/91d5176cab4093c27d6e9a6b8a6a35788a33b987/StyledPageControlDemo/PageControlDemo/Resources/pagecontrol-thumb-normal.png -------------------------------------------------------------------------------- /StyledPageControlDemo/PageControlDemo/Resources/pagecontrol-thumb-normal@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/honcheng/iOS-StyledPageControl/91d5176cab4093c27d6e9a6b8a6a35788a33b987/StyledPageControlDemo/PageControlDemo/Resources/pagecontrol-thumb-normal@2x.png -------------------------------------------------------------------------------- /StyledPageControlDemo/PageControlDemo/Resources/pagecontrol-thumb-selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/honcheng/iOS-StyledPageControl/91d5176cab4093c27d6e9a6b8a6a35788a33b987/StyledPageControlDemo/PageControlDemo/Resources/pagecontrol-thumb-selected.png -------------------------------------------------------------------------------- /StyledPageControlDemo/PageControlDemo/Resources/pagecontrol-thumb-selected@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/honcheng/iOS-StyledPageControl/91d5176cab4093c27d6e9a6b8a6a35788a33b987/StyledPageControlDemo/PageControlDemo/Resources/pagecontrol-thumb-selected@2x.png -------------------------------------------------------------------------------- /StyledPageControlDemo/PageControlDemo/StyledPageControl.h: -------------------------------------------------------------------------------- 1 | // 2 | // PageControl.h 3 | // PageControlDemo 4 | // 5 | /** 6 | * Created by honcheng on 5/14/11. 7 | * 8 | * Permission is hereby granted, free of charge, to any person obtaining 9 | * a copy of this software and associated documentation files (the 10 | * "Software"), to deal in the Software without restriction, including 11 | * without limitation the rights to use, copy, modify, merge, publish, 12 | * distribute, sublicense, and/or sell copies of the Software, and to 13 | * permit persons to whom the Software is furnished to do so, subject 14 | * to the following conditions: 15 | * 16 | * The above copyright notice and this permission notice shall be 17 | * included in all copies or substantial portions of the Software. 18 | * 19 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT 20 | * WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 21 | * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 22 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR 23 | * PURPOSE AND NONINFRINGEMENT. IN NO EVENT 24 | * SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 25 | * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 26 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 27 | * TORT OR OTHERWISE, ARISING FROM, OUT OF OR 28 | * IN CONNECTION WITH THE SOFTWARE OR 29 | * THE USE OR OTHER DEALINGS IN THE SOFTWARE. 30 | * 31 | * @author Muh Hon Cheng http://twitter.com/honcheng 32 | * @copyright 2011 Muh Hon Cheng 33 | * 34 | */ 35 | 36 | #import 37 | 38 | typedef enum 39 | { 40 | PageControlStyleDefault = 0, 41 | PageControlStyleStrokedCircle = 1, 42 | PageControlStylePressed1 = 2, 43 | PageControlStylePressed2 = 3, 44 | PageControlStyleWithPageNumber = 4, 45 | PageControlStyleThumb = 5, 46 | PageControlStyleStrokedSquare = 6, 47 | } PageControlStyle; 48 | 49 | @interface StyledPageControl : UIControl 50 | @property (nonatomic) UIColor *coreNormalColor, *coreSelectedColor; 51 | @property (nonatomic) UIColor *strokeNormalColor, *strokeSelectedColor; 52 | @property (nonatomic, assign) NSInteger currentPage, numberOfPages; 53 | @property (nonatomic, assign) BOOL hidesForSinglePage; 54 | @property (nonatomic, assign) PageControlStyle pageControlStyle; 55 | @property (nonatomic, assign) NSInteger strokeWidth, diameter, gapWidth; 56 | @property (nonatomic) UIImage *thumbImage, *selectedThumbImage; 57 | @property (nonatomic) NSMutableDictionary *thumbImageForIndex, *selectedThumbImageForIndex; 58 | 59 | - (void)setThumbImage:(UIImage *)aThumbImage forIndex:(NSInteger)index; 60 | - (UIImage *)thumbImageForIndex:(NSInteger)index; 61 | - (void)setSelectedThumbImage:(UIImage *)aSelectedThumbImage forIndex:(NSInteger)index; 62 | - (UIImage *)selectedThumbImageForIndex:(NSInteger)index; 63 | 64 | @end 65 | -------------------------------------------------------------------------------- /StyledPageControlDemo/PageControlDemo/StyledPageControl.m: -------------------------------------------------------------------------------- 1 | // 2 | // PageControl.m 3 | // PageControlDemo 4 | // 5 | /** 6 | * Created by honcheng on 5/14/11. 7 | * 8 | * Permission is hereby granted, free of charge, to any person obtaining 9 | * a copy of this software and associated documentation files (the 10 | * "Software"), to deal in the Software without restriction, including 11 | * without limitation the rights to use, copy, modify, merge, publish, 12 | * distribute, sublicense, and/or sell copies of the Software, and to 13 | * permit persons to whom the Software is furnished to do so, subject 14 | * to the following conditions: 15 | * 16 | * The above copyright notice and this permission notice shall be 17 | * included in all copies or substantial portions of the Software. 18 | * 19 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT 20 | * WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 21 | * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 22 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR 23 | * PURPOSE AND NONINFRINGEMENT. IN NO EVENT 24 | * SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 25 | * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 26 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 27 | * TORT OR OTHERWISE, ARISING FROM, OUT OF OR 28 | * IN CONNECTION WITH THE SOFTWARE OR 29 | * THE USE OR OTHER DEALINGS IN THE SOFTWARE. 30 | * 31 | * @author Muh Hon Cheng http://twitter.com/honcheng 32 | * @copyright 2011 Muh Hon Cheng 33 | * 34 | */ 35 | 36 | #import "StyledPageControl.h" 37 | 38 | 39 | @implementation StyledPageControl 40 | 41 | #define COLOR_GRAYISHBLUE [UIColor colorWithRed:128/255.0 green:130/255.0 blue:133/255.0 alpha:1] 42 | #define COLOR_GRAY [UIColor colorWithRed:0.2 green:0.2 blue:0.2 alpha:1] 43 | 44 | - (id)initWithFrame:(CGRect)frame 45 | { 46 | self = [super initWithFrame:frame]; 47 | if (self) { 48 | [self setup]; 49 | 50 | } 51 | return self; 52 | } 53 | -(id)initWithCoder:(NSCoder *)aDecoder{ 54 | self=[super initWithCoder:aDecoder]; 55 | if (self) { 56 | [self setup]; 57 | } 58 | return self; 59 | } 60 | 61 | -(void)setup{ 62 | [self setBackgroundColor:[UIColor clearColor]]; 63 | 64 | _strokeWidth = 2; 65 | _gapWidth = 10; 66 | _diameter = 12; 67 | _pageControlStyle = PageControlStyleDefault; 68 | 69 | UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onTapped:)]; 70 | [self addGestureRecognizer:tapGestureRecognizer]; 71 | } 72 | 73 | - (void)onTapped:(UITapGestureRecognizer*)gesture 74 | { 75 | CGPoint touchPoint = [gesture locationInView:[gesture view]]; 76 | 77 | if (touchPoint.x < self.frame.size.width/2) 78 | { 79 | // move left 80 | if (self.currentPage>0) 81 | { 82 | if (touchPoint.x <= 22) 83 | { 84 | self.currentPage = 0; 85 | } 86 | else 87 | { 88 | self.currentPage -= 1; 89 | } 90 | } 91 | 92 | } 93 | else 94 | { 95 | // move right 96 | if (self.currentPage= (CGRectGetWidth(self.bounds) - 22)) 99 | { 100 | self.currentPage = self.numberOfPages-1; 101 | } 102 | else 103 | { 104 | self.currentPage += 1; 105 | } 106 | } 107 | } 108 | [self setNeedsDisplay]; 109 | [self sendActionsForControlEvents:UIControlEventValueChanged]; 110 | } 111 | 112 | - (void)drawRect:(CGRect)rect 113 | { 114 | UIColor *coreNormalColor, *coreSelectedColor, *strokeNormalColor, *strokeSelectedColor; 115 | 116 | if (self.coreNormalColor) coreNormalColor = self.coreNormalColor; 117 | else coreNormalColor = COLOR_GRAYISHBLUE; 118 | 119 | if (self.coreSelectedColor) coreSelectedColor = self.coreSelectedColor; 120 | else 121 | { 122 | if (self.pageControlStyle==PageControlStyleStrokedSquare || self.pageControlStyle==PageControlStyleStrokedCircle || self.pageControlStyle==PageControlStyleWithPageNumber) 123 | { 124 | coreSelectedColor = COLOR_GRAYISHBLUE; 125 | } 126 | else 127 | { 128 | coreSelectedColor = COLOR_GRAY; 129 | } 130 | } 131 | 132 | if (self.strokeNormalColor) strokeNormalColor = self.strokeNormalColor; 133 | else 134 | { 135 | if (self.pageControlStyle==PageControlStyleDefault && self.coreNormalColor) 136 | { 137 | strokeNormalColor = self.coreNormalColor; 138 | } 139 | else 140 | { 141 | strokeNormalColor = COLOR_GRAYISHBLUE; 142 | } 143 | 144 | } 145 | 146 | if (self.strokeSelectedColor) strokeSelectedColor = self.strokeSelectedColor; 147 | else 148 | { 149 | if (self.pageControlStyle==PageControlStyleStrokedSquare || self.pageControlStyle==PageControlStyleStrokedCircle || self.pageControlStyle==PageControlStyleWithPageNumber) 150 | { 151 | strokeSelectedColor = COLOR_GRAYISHBLUE; 152 | } 153 | else if (self.pageControlStyle==PageControlStyleDefault && self.coreSelectedColor) 154 | { 155 | strokeSelectedColor = self.coreSelectedColor; 156 | } 157 | else 158 | { 159 | strokeSelectedColor = COLOR_GRAY; 160 | } 161 | } 162 | 163 | // Drawing code 164 | if (self.hidesForSinglePage && self.numberOfPages==1) 165 | { 166 | return; 167 | } 168 | 169 | CGContextRef myContext = UIGraphicsGetCurrentContext(); 170 | 171 | NSInteger gap = self.gapWidth; 172 | float diameter = self.diameter - 2*self.strokeWidth; 173 | 174 | if (self.pageControlStyle==PageControlStyleThumb) 175 | { 176 | if (self.thumbImage && self.selectedThumbImage) 177 | { 178 | diameter = self.thumbImage.size.width; 179 | } 180 | } 181 | 182 | NSInteger total_width = self.numberOfPages*diameter + (self.numberOfPages-1)*gap; 183 | 184 | if (total_width>self.frame.size.width) 185 | { 186 | while (total_width>self.frame.size.width) 187 | { 188 | diameter -= 2; 189 | gap = diameter + 2; 190 | while (total_width>self.frame.size.width) 191 | { 192 | gap -= 1; 193 | total_width = self.numberOfPages*diameter + (self.numberOfPages-1)*gap; 194 | 195 | if (gap==2) 196 | { 197 | break; 198 | total_width = self.numberOfPages*diameter + (self.numberOfPages-1)*gap; 199 | } 200 | } 201 | 202 | if (diameter==2) 203 | { 204 | break; 205 | total_width = self.numberOfPages*diameter + (self.numberOfPages-1)*gap; 206 | } 207 | } 208 | 209 | 210 | } 211 | 212 | int i; 213 | for (i=0; i 10 | #import "PageControlDemoAppDelegate.h" 11 | 12 | @interface PageControlDemoAppDelegate_iPad : PageControlDemoAppDelegate { 13 | 14 | } 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /StyledPageControlDemo/PageControlDemo/iPad/PageControlDemoAppDelegate_iPad.m: -------------------------------------------------------------------------------- 1 | // 2 | // PageControlDemoAppDelegate_iPad.m 3 | // PageControlDemo 4 | // 5 | // Created by honcheng on 5/14/11. 6 | // Copyright 2011 BuUuK Pte Ltd. All rights reserved. 7 | // 8 | 9 | #import "PageControlDemoAppDelegate_iPad.h" 10 | 11 | @implementation PageControlDemoAppDelegate_iPad 12 | 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /StyledPageControlDemo/PageControlDemo/iPad/en.lproj/MainWindow_iPad.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 1024 5 | 10D573 6 | 786 7 | 1038.29 8 | 460.00 9 | 10 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 11 | 112 12 | 13 | 14 | YES 15 | 16 | 17 | 18 | YES 19 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 20 | 21 | 22 | YES 23 | 24 | YES 25 | 26 | 27 | YES 28 | 29 | 30 | 31 | YES 32 | 33 | IBFilesOwner 34 | IBIPadFramework 35 | 36 | 37 | IBFirstResponder 38 | IBIPadFramework 39 | 40 | 41 | 42 | 292 43 | 44 | YES 45 | 46 | 47 | 301 48 | {{284, 501}, {200, 22}} 49 | 50 | NO 51 | YES 52 | 7 53 | NO 54 | IBIPadFramework 55 | My Universal App on iPad 56 | 57 | 1 58 | MCAwIDAAA 59 | 60 | 61 | 1 62 | 10 63 | 64 | 65 | {768, 1024} 66 | 67 | 68 | 1 69 | MSAxIDEAA 70 | 71 | NO 72 | NO 73 | 74 | 2 75 | 76 | IBIPadFramework 77 | YES 78 | 79 | 80 | IBIPadFramework 81 | 82 | 83 | 84 | 85 | YES 86 | 87 | 88 | window 89 | 90 | 91 | 92 | 7 93 | 94 | 95 | 96 | delegate 97 | 98 | 99 | 100 | 8 101 | 102 | 103 | 104 | 105 | YES 106 | 107 | 0 108 | 109 | 110 | 111 | 112 | 113 | -1 114 | 115 | 116 | File's Owner 117 | 118 | 119 | -2 120 | 121 | 122 | 123 | 124 | 2 125 | 126 | 127 | YES 128 | 129 | 130 | 131 | 132 | 133 | 6 134 | 135 | 136 | 137 | 138 | 11 139 | 140 | 141 | 142 | 143 | 144 | 145 | YES 146 | 147 | YES 148 | -1.CustomClassName 149 | -2.CustomClassName 150 | 11.IBPluginDependency 151 | 2.IBEditorWindowLastContentRect 152 | 2.IBPluginDependency 153 | 6.CustomClassName 154 | 6.IBPluginDependency 155 | 156 | 157 | YES 158 | UIApplication 159 | UIResponder 160 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 161 | {{202, 84}, {783, 772}} 162 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 163 | PageControlDemoAppDelegate_iPad 164 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 165 | 166 | 167 | 168 | YES 169 | 170 | 171 | YES 172 | 173 | 174 | 175 | 176 | YES 177 | 178 | 179 | YES 180 | 181 | 182 | 183 | 11 184 | 185 | 186 | 187 | YES 188 | 189 | PageControlDemoAppDelegate 190 | NSObject 191 | 192 | window 193 | UIWindow 194 | 195 | 196 | window 197 | 198 | window 199 | UIWindow 200 | 201 | 202 | 203 | IBProjectSource 204 | Shared/PageControlDemoAppDelegate.h 205 | 206 | 207 | 208 | PageControlDemoAppDelegate_iPad 209 | PageControlDemoAppDelegate 210 | 211 | IBProjectSource 212 | iPad/PageControlDemoAppDelegate_iPad.h 213 | 214 | 215 | 216 | 217 | YES 218 | 219 | NSObject 220 | 221 | IBFrameworkSource 222 | Foundation.framework/Headers/NSError.h 223 | 224 | 225 | 226 | NSObject 227 | 228 | IBFrameworkSource 229 | Foundation.framework/Headers/NSFileManager.h 230 | 231 | 232 | 233 | NSObject 234 | 235 | IBFrameworkSource 236 | Foundation.framework/Headers/NSKeyValueCoding.h 237 | 238 | 239 | 240 | NSObject 241 | 242 | IBFrameworkSource 243 | Foundation.framework/Headers/NSKeyValueObserving.h 244 | 245 | 246 | 247 | NSObject 248 | 249 | IBFrameworkSource 250 | Foundation.framework/Headers/NSKeyedArchiver.h 251 | 252 | 253 | 254 | NSObject 255 | 256 | IBFrameworkSource 257 | Foundation.framework/Headers/NSObject.h 258 | 259 | 260 | 261 | NSObject 262 | 263 | IBFrameworkSource 264 | Foundation.framework/Headers/NSRunLoop.h 265 | 266 | 267 | 268 | NSObject 269 | 270 | IBFrameworkSource 271 | Foundation.framework/Headers/NSThread.h 272 | 273 | 274 | 275 | NSObject 276 | 277 | IBFrameworkSource 278 | Foundation.framework/Headers/NSURL.h 279 | 280 | 281 | 282 | NSObject 283 | 284 | IBFrameworkSource 285 | Foundation.framework/Headers/NSURLConnection.h 286 | 287 | 288 | 289 | NSObject 290 | 291 | IBFrameworkSource 292 | UIKit.framework/Headers/UIAccessibility.h 293 | 294 | 295 | 296 | NSObject 297 | 298 | IBFrameworkSource 299 | UIKit.framework/Headers/UINibLoading.h 300 | 301 | 302 | 303 | NSObject 304 | 305 | IBFrameworkSource 306 | UIKit.framework/Headers/UIResponder.h 307 | 308 | 309 | 310 | UIApplication 311 | UIResponder 312 | 313 | IBFrameworkSource 314 | UIKit.framework/Headers/UIApplication.h 315 | 316 | 317 | 318 | UIResponder 319 | NSObject 320 | 321 | 322 | 323 | UIView 324 | 325 | IBFrameworkSource 326 | UIKit.framework/Headers/UITextField.h 327 | 328 | 329 | 330 | UIView 331 | UIResponder 332 | 333 | IBFrameworkSource 334 | UIKit.framework/Headers/UIView.h 335 | 336 | 337 | 338 | UIWindow 339 | UIView 340 | 341 | IBFrameworkSource 342 | UIKit.framework/Headers/UIWindow.h 343 | 344 | 345 | 346 | 347 | 0 348 | IBIPadFramework 349 | 350 | com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS 351 | 352 | 353 | 354 | com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 355 | 356 | 357 | YES 358 | ../PageControlDemo.xcodeproj 359 | 3 360 | 112 361 | 362 | 363 | -------------------------------------------------------------------------------- /StyledPageControlDemo/PageControlDemo/iPhone/PageControlDemoAppDelegate_iPhone.h: -------------------------------------------------------------------------------- 1 | // 2 | // PageControlDemoAppDelegate_iPhone.h 3 | // PageControlDemo 4 | // 5 | // Created by honcheng on 5/14/11. 6 | // Copyright 2011 BuUuK Pte Ltd. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "PageControlDemoAppDelegate.h" 11 | 12 | @interface PageControlDemoAppDelegate_iPhone : PageControlDemoAppDelegate { 13 | 14 | } 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /StyledPageControlDemo/PageControlDemo/iPhone/PageControlDemoAppDelegate_iPhone.m: -------------------------------------------------------------------------------- 1 | // 2 | // PageControlDemoAppDelegate_iPhone.m 3 | // PageControlDemo 4 | // 5 | // Created by honcheng on 5/14/11. 6 | // Copyright 2011 BuUuK Pte Ltd. All rights reserved. 7 | // 8 | 9 | #import "PageControlDemoAppDelegate_iPhone.h" 10 | 11 | @implementation PageControlDemoAppDelegate_iPhone 12 | 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /StyledPageControlDemo/PageControlDemo/iPhone/en.lproj/MainWindow_iPhone.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 1024 5 | 10D573 6 | 786 7 | 1038.29 8 | 460.00 9 | 10 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 11 | 112 12 | 13 | 14 | YES 15 | 16 | 17 | 18 | YES 19 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 20 | 21 | 22 | YES 23 | 24 | YES 25 | 26 | 27 | YES 28 | 29 | 30 | 31 | YES 32 | 33 | IBFilesOwner 34 | IBCocoaTouchFramework 35 | 36 | 37 | IBFirstResponder 38 | IBCocoaTouchFramework 39 | 40 | 41 | IBCocoaTouchFramework 42 | 43 | 44 | 45 | 1316 46 | 47 | YES 48 | 49 | 50 | 1325 51 | {{51, 229}, {218, 22}} 52 | 53 | NO 54 | YES 55 | 7 56 | NO 57 | IBCocoaTouchFramework 58 | My Universal App on iPhone 59 | 60 | 1 61 | MCAwIDAAA 62 | 63 | 64 | 1 65 | 10 66 | 67 | 68 | 69 | {320, 480} 70 | 71 | 72 | 1 73 | MSAxIDEAA 74 | 75 | NO 76 | NO 77 | 78 | IBCocoaTouchFramework 79 | YES 80 | 81 | 82 | 83 | 84 | YES 85 | 86 | 87 | delegate 88 | 89 | 90 | 91 | 5 92 | 93 | 94 | 95 | window 96 | 97 | 98 | 99 | 6 100 | 101 | 102 | 103 | 104 | YES 105 | 106 | 0 107 | 108 | 109 | 110 | 111 | 112 | 2 113 | 114 | 115 | YES 116 | 117 | 118 | 119 | 120 | 121 | -1 122 | 123 | 124 | File's Owner 125 | 126 | 127 | 4 128 | 129 | 130 | App Delegate 131 | 132 | 133 | -2 134 | 135 | 136 | 137 | 138 | 8 139 | 140 | 141 | 142 | 143 | 144 | 145 | YES 146 | 147 | YES 148 | -1.CustomClassName 149 | -2.CustomClassName 150 | 2.IBAttributePlaceholdersKey 151 | 2.IBEditorWindowLastContentRect 152 | 2.IBPluginDependency 153 | 2.UIWindow.visibleAtLaunch 154 | 4.CustomClassName 155 | 4.IBPluginDependency 156 | 8.IBPluginDependency 157 | 158 | 159 | YES 160 | UIApplication 161 | UIResponder 162 | 163 | YES 164 | 165 | 166 | YES 167 | 168 | 169 | {{520, 376}, {320, 480}} 170 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 171 | 172 | PageControlDemoAppDelegate_iPhone 173 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 174 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 175 | 176 | 177 | 178 | YES 179 | 180 | 181 | YES 182 | 183 | 184 | 185 | 186 | YES 187 | 188 | 189 | YES 190 | 191 | 192 | 193 | 8 194 | 195 | 196 | 197 | YES 198 | 199 | PageControlDemoAppDelegate 200 | NSObject 201 | 202 | window 203 | UIWindow 204 | 205 | 206 | window 207 | 208 | window 209 | UIWindow 210 | 211 | 212 | 213 | IBProjectSource 214 | Shared/PageControlDemoAppDelegate.h 215 | 216 | 217 | 218 | PageControlDemoAppDelegate_iPhone 219 | PageControlDemoAppDelegate 220 | 221 | IBProjectSource 222 | iPhone/PageControlDemoAppDelegate_iPhone.h 223 | 224 | 225 | 226 | 227 | YES 228 | 229 | NSObject 230 | 231 | IBFrameworkSource 232 | Foundation.framework/Headers/NSError.h 233 | 234 | 235 | 236 | NSObject 237 | 238 | IBFrameworkSource 239 | Foundation.framework/Headers/NSFileManager.h 240 | 241 | 242 | 243 | NSObject 244 | 245 | IBFrameworkSource 246 | Foundation.framework/Headers/NSKeyValueCoding.h 247 | 248 | 249 | 250 | NSObject 251 | 252 | IBFrameworkSource 253 | Foundation.framework/Headers/NSKeyValueObserving.h 254 | 255 | 256 | 257 | NSObject 258 | 259 | IBFrameworkSource 260 | Foundation.framework/Headers/NSKeyedArchiver.h 261 | 262 | 263 | 264 | NSObject 265 | 266 | IBFrameworkSource 267 | Foundation.framework/Headers/NSObject.h 268 | 269 | 270 | 271 | NSObject 272 | 273 | IBFrameworkSource 274 | Foundation.framework/Headers/NSRunLoop.h 275 | 276 | 277 | 278 | NSObject 279 | 280 | IBFrameworkSource 281 | Foundation.framework/Headers/NSThread.h 282 | 283 | 284 | 285 | NSObject 286 | 287 | IBFrameworkSource 288 | Foundation.framework/Headers/NSURL.h 289 | 290 | 291 | 292 | NSObject 293 | 294 | IBFrameworkSource 295 | Foundation.framework/Headers/NSURLConnection.h 296 | 297 | 298 | 299 | NSObject 300 | 301 | IBFrameworkSource 302 | UIKit.framework/Headers/UIAccessibility.h 303 | 304 | 305 | 306 | NSObject 307 | 308 | IBFrameworkSource 309 | UIKit.framework/Headers/UINibLoading.h 310 | 311 | 312 | 313 | NSObject 314 | 315 | IBFrameworkSource 316 | UIKit.framework/Headers/UIResponder.h 317 | 318 | 319 | 320 | UIApplication 321 | UIResponder 322 | 323 | IBFrameworkSource 324 | UIKit.framework/Headers/UIApplication.h 325 | 326 | 327 | 328 | UIResponder 329 | NSObject 330 | 331 | 332 | 333 | UIView 334 | 335 | IBFrameworkSource 336 | UIKit.framework/Headers/UITextField.h 337 | 338 | 339 | 340 | UIView 341 | UIResponder 342 | 343 | IBFrameworkSource 344 | UIKit.framework/Headers/UIView.h 345 | 346 | 347 | 348 | UIWindow 349 | UIView 350 | 351 | IBFrameworkSource 352 | UIKit.framework/Headers/UIWindow.h 353 | 354 | 355 | 356 | 357 | 0 358 | IBCocoaTouchFramework 359 | 360 | com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS 361 | 362 | 363 | 364 | com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 365 | 366 | 367 | YES 368 | ../PageControlDemo.xcodeproj 369 | 3 370 | 112 371 | 372 | 373 | -------------------------------------------------------------------------------- /StyledPageControlDemo/PageControlDemo/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // PageControlDemo 4 | // 5 | // Created by honcheng on 5/14/11. 6 | // Copyright 2011 BuUuK Pte Ltd. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | int main(int argc, char *argv[]) 12 | { 13 | @autoreleasepool { 14 | int retVal = UIApplicationMain(argc, argv, nil, nil); 15 | return retVal; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/honcheng/iOS-StyledPageControl/91d5176cab4093c27d6e9a6b8a6a35788a33b987/screenshot.png --------------------------------------------------------------------------------