diff --git a/AnnotatedSlider-Info.plist b/AnnotatedSlider-Info.plist new file mode 100644 index 0000000..f602de0 --- /dev/null +++ b/AnnotatedSlider-Info.plist @@ -0,0 +1,30 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleDisplayName + Slider + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIconFile + + CFBundleIdentifier + com.yourcompany.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + APPL + CFBundleSignature + ???? + CFBundleVersion + 1.0 + LSRequiresIPhoneOS + + NSMainNibFile + MainWindow + + diff --git a/AnnotatedSlider.xcodeproj/arepty.mode1v3 b/AnnotatedSlider.xcodeproj/arepty.mode1v3 new file mode 100644 index 0000000..e798f74 --- /dev/null +++ b/AnnotatedSlider.xcodeproj/arepty.mode1v3 @@ -0,0 +1,1423 @@ + + + + + ActivePerspectiveName + Project + AllowedModules + + + BundleLoadPath + + MaxInstances + n + Module + PBXSmartGroupTreeModule + Name + Groups and Files Outline View + + + BundleLoadPath + + MaxInstances + n + Module + PBXNavigatorGroup + Name + Editor + + + BundleLoadPath + + MaxInstances + n + Module + XCTaskListModule + Name + Task List + + + BundleLoadPath + + MaxInstances + n + Module + XCDetailModule + Name + File and Smart Group Detail Viewer + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXBuildResultsModule + Name + Detailed Build Results Viewer + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXProjectFindModule + Name + Project Batch Find Tool + + + BundleLoadPath + + MaxInstances + n + Module + XCProjectFormatConflictsModule + Name + Project Format Conflicts List + + + BundleLoadPath + + MaxInstances + n + Module + PBXBookmarksModule + Name + Bookmarks Tool + + + BundleLoadPath + + MaxInstances + n + Module + PBXClassBrowserModule + Name + Class Browser + + + BundleLoadPath + + MaxInstances + n + Module + PBXCVSModule + Name + Source Code Control Tool + + + BundleLoadPath + + MaxInstances + n + Module + PBXDebugBreakpointsModule + Name + Debug Breakpoints Tool + + + BundleLoadPath + + MaxInstances + n + Module + XCDockableInspector + Name + Inspector + + + BundleLoadPath + + MaxInstances + n + Module + PBXOpenQuicklyModule + Name + Open Quickly Tool + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXDebugSessionModule + Name + Debugger + + + BundleLoadPath + + MaxInstances + 1 + Module + PBXDebugCLIModule + Name + Debug Console + + + BundleLoadPath + + MaxInstances + n + Module + XCSnapshotModule + Name + Snapshots Tool + + + BundlePath + /Developer-Beta/Library/PrivateFrameworks/DevToolsInterface.framework/Resources + Description + DefaultDescriptionKey + DockingSystemVisible + + Extension + mode1v3 + FavBarConfig + + PBXProjectModuleGUID + B403E645124CA7A600FBB163 + XCBarModuleItemNames + + XCBarModuleItems + + + FirstTimeWindowDisplayed + + Identifier + com.apple.perspectives.project.mode1v3 + MajorVersion + 33 + MinorVersion + 0 + Name + Default + Notifications + + OpenEditors + + PerspectiveWidths + + -1 + -1 + + Perspectives + + + ChosenToolbarItems + + active-combo-popup + action + NSToolbarFlexibleSpaceItem + debugger-enable-breakpoints + build-and-go + com.apple.ide.PBXToolbarStopButton + get-info + NSToolbarFlexibleSpaceItem + com.apple.pbx.toolbar.searchfield + + ControllerClassBaseName + + IconName + WindowOfProjectWithEditor + Identifier + perspective.project + IsVertical + + Layout + + + ContentConfiguration + + PBXBottomSmartGroupGIDs + + 1C37FBAC04509CD000000102 + 1C37FAAC04509CD000000102 + 1C37FABC05509CD000000102 + 1C37FABC05539CD112110102 + E2644B35053B69B200211256 + 1C37FABC04509CD000100104 + 1CC0EA4004350EF90044410B + 1CC0EA4004350EF90041110B + + PBXProjectModuleGUID + 1CE0B1FE06471DED0097A5F4 + PBXProjectModuleLabel + Files + PBXProjectStructureProvided + yes + PBXSmartGroupTreeModuleColumnData + + PBXSmartGroupTreeModuleColumnWidthsKey + + 266 + + PBXSmartGroupTreeModuleColumnsKey_v4 + + MainColumn + + + PBXSmartGroupTreeModuleOutlineStateKey_v7 + + PBXSmartGroupTreeModuleOutlineStateExpansionKey + + 29B97314FDCFA39411CA2CEA + 080E96DDFE201D6D7F000001 + 29B97315FDCFA39411CA2CEA + 29B97317FDCFA39411CA2CEA + 1C37FABC05509CD000000102 + + PBXSmartGroupTreeModuleOutlineStateSelectionKey + + + 18 + 13 + 0 + + + PBXSmartGroupTreeModuleOutlineStateVisibleRectKey + {{0, 0}, {266, 953}} + + PBXTopSmartGroupGIDs + + XCIncludePerspectivesSwitch + + XCSharingToken + com.apple.Xcode.GFSharingToken + + GeometryConfiguration + + Frame + {{0, 0}, {283, 971}} + GroupTreeTableConfiguration + + MainColumn + 266 + + RubberWindowFrame + 1222 106 1264 1012 0 0 2560 1418 + + Module + PBXSmartGroupTreeModule + Proportion + 283pt + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1CE0B20306471E060097A5F4 + PBXProjectModuleLabel + AnnotatedSlider-Info.plist + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 1CE0B20406471E060097A5F4 + PBXProjectModuleLabel + AnnotatedSlider-Info.plist + _historyCapacity + 0 + bookmark + B4E24383124CBB2900BBC31C + history + + B403E661124CAC3C00FBB163 + B403E68C124CAD5100FBB163 + B403E68D124CAD5100FBB163 + B403E6DE124CB63F00FBB163 + B403E6DF124CB63F00FBB163 + B403E6EE124CB76900FBB163 + B4E24380124CBB2900BBC31C + B4E24381124CBB2900BBC31C + B4E24382124CBB2900BBC31C + + + SplitCount + 1 + + StatusBarVisibility + + + GeometryConfiguration + + Frame + {{0, 0}, {976, 966}} + RubberWindowFrame + 1222 106 1264 1012 0 0 2560 1418 + + Module + PBXNavigatorGroup + Proportion + 966pt + + + ContentConfiguration + + PBXProjectModuleGUID + 1CE0B20506471E060097A5F4 + PBXProjectModuleLabel + Detail + + GeometryConfiguration + + Frame + {{0, 971}, {976, 0}} + RubberWindowFrame + 1222 106 1264 1012 0 0 2560 1418 + + Module + XCDetailModule + Proportion + 0pt + + + Proportion + 976pt + + + Name + Project + ServiceClasses + + XCModuleDock + PBXSmartGroupTreeModule + XCModuleDock + PBXNavigatorGroup + XCDetailModule + + TableOfContents + + B4E24384124CBB2900BBC31C + 1CE0B1FE06471DED0097A5F4 + B4E24385124CBB2900BBC31C + 1CE0B20306471E060097A5F4 + 1CE0B20506471E060097A5F4 + + ToolbarConfigUserDefaultsMinorVersion + 2 + ToolbarConfiguration + xcode.toolbar.config.defaultV3 + + + ControllerClassBaseName + + IconName + WindowOfProject + Identifier + perspective.morph + IsVertical + 0 + Layout + + + BecomeActive + 1 + ContentConfiguration + + PBXBottomSmartGroupGIDs + + 1C37FBAC04509CD000000102 + 1C37FAAC04509CD000000102 + 1C08E77C0454961000C914BD + 1C37FABC05509CD000000102 + 1C37FABC05539CD112110102 + E2644B35053B69B200211256 + 1C37FABC04509CD000100104 + 1CC0EA4004350EF90044410B + 1CC0EA4004350EF90041110B + + PBXProjectModuleGUID + 11E0B1FE06471DED0097A5F4 + PBXProjectModuleLabel + Files + PBXProjectStructureProvided + yes + PBXSmartGroupTreeModuleColumnData + + PBXSmartGroupTreeModuleColumnWidthsKey + + 186 + + PBXSmartGroupTreeModuleColumnsKey_v4 + + MainColumn + + + PBXSmartGroupTreeModuleOutlineStateKey_v7 + + PBXSmartGroupTreeModuleOutlineStateExpansionKey + + 29B97314FDCFA39411CA2CEA + 1C37FABC05509CD000000102 + + PBXSmartGroupTreeModuleOutlineStateSelectionKey + + + 0 + + + PBXSmartGroupTreeModuleOutlineStateVisibleRectKey + {{0, 0}, {186, 337}} + + PBXTopSmartGroupGIDs + + XCIncludePerspectivesSwitch + 1 + XCSharingToken + com.apple.Xcode.GFSharingToken + + GeometryConfiguration + + Frame + {{0, 0}, {203, 355}} + GroupTreeTableConfiguration + + MainColumn + 186 + + RubberWindowFrame + 373 269 690 397 0 0 1440 878 + + Module + PBXSmartGroupTreeModule + Proportion + 100% + + + Name + Morph + PreferredWidth + 300 + ServiceClasses + + XCModuleDock + PBXSmartGroupTreeModule + + TableOfContents + + 11E0B1FE06471DED0097A5F4 + + ToolbarConfiguration + xcode.toolbar.config.default.shortV3 + + + PerspectivesBarVisible + + ShelfIsVisible + + SourceDescription + file at '/Developer-Beta/Library/PrivateFrameworks/DevToolsInterface.framework/Resources/XCPerspectivesSpecificationMode1.xcperspec' + StatusbarIsVisible + + TimeStamp + 0.0 + ToolbarConfigUserDefaultsMinorVersion + 2 + ToolbarDisplayMode + 1 + ToolbarIsVisible + + ToolbarSizeMode + 1 + Type + Perspectives + UpdateMessage + The Default Workspace in this version of Xcode now includes support to hide and show the detail view (what has been referred to as the "Metro-Morph" feature). You must discard your current Default Workspace settings and update to the latest Default Workspace in order to gain this feature. Do you wish to update to the latest Workspace defaults for project '%@'? + WindowJustification + 5 + WindowOrderList + + B4E2438E124CBB2900BBC31C + B4E2438F124CBB2900BBC31C + 1C78EAAD065D492600B07095 + 1CD10A99069EF8BA00B06720 + B403E646124CA7A600FBB163 + /Users/arepty/Documents/AnnotatedSlider/AnnotatedSlider.xcodeproj + + WindowString + 1222 106 1264 1012 0 0 2560 1418 + WindowToolsV3 + + + FirstTimeWindowDisplayed + + Identifier + windowTool.build + IsVertical + + Layout + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1CD0528F0623707200166675 + PBXProjectModuleLabel + + StatusBarVisibility + + + GeometryConfiguration + + Frame + {{0, 0}, {801, 491}} + RubberWindowFrame + 334 597 801 773 0 0 2560 1418 + + Module + PBXNavigatorGroup + Proportion + 491pt + + + ContentConfiguration + + PBXProjectModuleGUID + XCMainBuildResultsModuleGUID + PBXProjectModuleLabel + Build Results + XCBuildResultsTrigger_Collapse + 1021 + XCBuildResultsTrigger_Open + 1011 + + GeometryConfiguration + + Frame + {{0, 496}, {801, 236}} + RubberWindowFrame + 334 597 801 773 0 0 2560 1418 + + Module + PBXBuildResultsModule + Proportion + 236pt + + + Proportion + 732pt + + + Name + Build Results + ServiceClasses + + PBXBuildResultsModule + + StatusbarIsVisible + + TableOfContents + + B403E646124CA7A600FBB163 + B4E24386124CBB2900BBC31C + 1CD0528F0623707200166675 + XCMainBuildResultsModuleGUID + + ToolbarConfiguration + xcode.toolbar.config.buildV3 + WindowContentMinSize + 486 300 + WindowString + 334 597 801 773 0 0 2560 1418 + WindowToolGUID + B403E646124CA7A600FBB163 + WindowToolIsVisible + + + + FirstTimeWindowDisplayed + + Identifier + windowTool.debugger + IsVertical + + Layout + + + Dock + + + ContentConfiguration + + Debugger + + HorizontalSplitView + + _collapsingFrameDimension + 0.0 + _indexOfCollapsedView + 0 + _percentageOfCollapsedView + 0.0 + isCollapsed + yes + sizes + + {{0, 0}, {523, 436}} + {{523, 0}, {625, 436}} + + + VerticalSplitView + + _collapsingFrameDimension + 0.0 + _indexOfCollapsedView + 0 + _percentageOfCollapsedView + 0.0 + isCollapsed + yes + sizes + + {{0, 0}, {1148, 436}} + {{0, 436}, {1148, 404}} + + + + LauncherConfigVersion + 8 + PBXProjectModuleGUID + 1C162984064C10D400B95A72 + PBXProjectModuleLabel + Debug - GLUTExamples (Underwater) + + GeometryConfiguration + + DebugConsoleVisible + None + DebugConsoleWindowFrame + {{200, 200}, {500, 300}} + DebugSTDIOWindowFrame + {{200, 200}, {500, 300}} + Frame + {{0, 0}, {1148, 840}} + PBXDebugSessionStackFrameViewKey + + DebugVariablesTableConfiguration + + Name + 129 + Value + 85 + Summary + 386 + + Frame + {{523, 0}, {625, 436}} + RubberWindowFrame + 1169 486 1148 881 0 0 2560 1418 + + RubberWindowFrame + 1169 486 1148 881 0 0 2560 1418 + + Module + PBXDebugSessionModule + Proportion + 840pt + + + Proportion + 840pt + + + Name + Debugger + ServiceClasses + + PBXDebugSessionModule + + StatusbarIsVisible + + TableOfContents + + 1CD10A99069EF8BA00B06720 + B4E24387124CBB2900BBC31C + 1C162984064C10D400B95A72 + B4E24388124CBB2900BBC31C + B4E24389124CBB2900BBC31C + B4E2438A124CBB2900BBC31C + B4E2438B124CBB2900BBC31C + B4E2438C124CBB2900BBC31C + + ToolbarConfiguration + xcode.toolbar.config.debugV3 + WindowString + 1169 486 1148 881 0 0 2560 1418 + WindowToolGUID + 1CD10A99069EF8BA00B06720 + WindowToolIsVisible + + + + Identifier + windowTool.find + Layout + + + Dock + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1CDD528C0622207200134675 + PBXProjectModuleLabel + <No Editor> + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 1CD0528D0623707200166675 + + SplitCount + 1 + + StatusBarVisibility + 1 + + GeometryConfiguration + + Frame + {{0, 0}, {781, 167}} + RubberWindowFrame + 62 385 781 470 0 0 1440 878 + + Module + PBXNavigatorGroup + Proportion + 781pt + + + Proportion + 50% + + + BecomeActive + 1 + ContentConfiguration + + PBXProjectModuleGUID + 1CD0528E0623707200166675 + PBXProjectModuleLabel + Project Find + + GeometryConfiguration + + Frame + {{8, 0}, {773, 254}} + RubberWindowFrame + 62 385 781 470 0 0 1440 878 + + Module + PBXProjectFindModule + Proportion + 50% + + + Proportion + 428pt + + + Name + Project Find + ServiceClasses + + PBXProjectFindModule + + StatusbarIsVisible + 1 + TableOfContents + + 1C530D57069F1CE1000CFCEE + 1C530D58069F1CE1000CFCEE + 1C530D59069F1CE1000CFCEE + 1CDD528C0622207200134675 + 1C530D5A069F1CE1000CFCEE + 1CE0B1FE06471DED0097A5F4 + 1CD0528E0623707200166675 + + WindowString + 62 385 781 470 0 0 1440 878 + WindowToolGUID + 1C530D57069F1CE1000CFCEE + WindowToolIsVisible + 0 + + + Identifier + MENUSEPARATOR + + + FirstTimeWindowDisplayed + + Identifier + windowTool.debuggerConsole + IsVertical + + Layout + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1C78EAAC065D492600B07095 + PBXProjectModuleLabel + Debugger Console + + GeometryConfiguration + + Frame + {{0, 0}, {1314, 867}} + RubberWindowFrame + 701 233 1314 908 0 0 2560 1418 + + Module + PBXDebugCLIModule + Proportion + 867pt + + + Proportion + 867pt + + + Name + Debugger Console + ServiceClasses + + PBXDebugCLIModule + + StatusbarIsVisible + + TableOfContents + + 1C78EAAD065D492600B07095 + B4E2438D124CBB2900BBC31C + 1C78EAAC065D492600B07095 + + ToolbarConfiguration + xcode.toolbar.config.consoleV3 + WindowString + 701 233 1314 908 0 0 2560 1418 + WindowToolGUID + 1C78EAAD065D492600B07095 + WindowToolIsVisible + + + + Identifier + windowTool.snapshots + Layout + + + Dock + + + Module + XCSnapshotModule + Proportion + 100% + + + Proportion + 100% + + + Name + Snapshots + ServiceClasses + + XCSnapshotModule + + StatusbarIsVisible + Yes + ToolbarConfiguration + xcode.toolbar.config.snapshots + WindowString + 315 824 300 550 0 0 1440 878 + WindowToolIsVisible + Yes + + + Identifier + windowTool.scm + Layout + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + 1C78EAB2065D492600B07095 + PBXProjectModuleLabel + <No Editor> + PBXSplitModuleInNavigatorKey + + Split0 + + PBXProjectModuleGUID + 1C78EAB3065D492600B07095 + + SplitCount + 1 + + StatusBarVisibility + 1 + + GeometryConfiguration + + Frame + {{0, 0}, {452, 0}} + RubberWindowFrame + 743 379 452 308 0 0 1280 1002 + + Module + PBXNavigatorGroup + Proportion + 0pt + + + BecomeActive + 1 + ContentConfiguration + + PBXProjectModuleGUID + 1CD052920623707200166675 + PBXProjectModuleLabel + SCM + + GeometryConfiguration + + ConsoleFrame + {{0, 259}, {452, 0}} + Frame + {{0, 7}, {452, 259}} + RubberWindowFrame + 743 379 452 308 0 0 1280 1002 + TableConfiguration + + Status + 30 + FileName + 199 + Path + 197.0950012207031 + + TableFrame + {{0, 0}, {452, 250}} + + Module + PBXCVSModule + Proportion + 262pt + + + Proportion + 266pt + + + Name + SCM + ServiceClasses + + PBXCVSModule + + StatusbarIsVisible + 1 + TableOfContents + + 1C78EAB4065D492600B07095 + 1C78EAB5065D492600B07095 + 1C78EAB2065D492600B07095 + 1CD052920623707200166675 + + ToolbarConfiguration + xcode.toolbar.config.scm + WindowString + 743 379 452 308 0 0 1280 1002 + + + Identifier + windowTool.breakpoints + IsVertical + 0 + Layout + + + Dock + + + BecomeActive + 1 + ContentConfiguration + + PBXBottomSmartGroupGIDs + + 1C77FABC04509CD000000102 + + PBXProjectModuleGUID + 1CE0B1FE06471DED0097A5F4 + PBXProjectModuleLabel + Files + PBXProjectStructureProvided + no + PBXSmartGroupTreeModuleColumnData + + PBXSmartGroupTreeModuleColumnWidthsKey + + 168 + + PBXSmartGroupTreeModuleColumnsKey_v4 + + MainColumn + + + PBXSmartGroupTreeModuleOutlineStateKey_v7 + + PBXSmartGroupTreeModuleOutlineStateExpansionKey + + 1C77FABC04509CD000000102 + + PBXSmartGroupTreeModuleOutlineStateSelectionKey + + + 0 + + + PBXSmartGroupTreeModuleOutlineStateVisibleRectKey + {{0, 0}, {168, 350}} + + PBXTopSmartGroupGIDs + + XCIncludePerspectivesSwitch + 0 + + GeometryConfiguration + + Frame + {{0, 0}, {185, 368}} + GroupTreeTableConfiguration + + MainColumn + 168 + + RubberWindowFrame + 315 424 744 409 0 0 1440 878 + + Module + PBXSmartGroupTreeModule + Proportion + 185pt + + + ContentConfiguration + + PBXProjectModuleGUID + 1CA1AED706398EBD00589147 + PBXProjectModuleLabel + Detail + + GeometryConfiguration + + Frame + {{190, 0}, {554, 368}} + RubberWindowFrame + 315 424 744 409 0 0 1440 878 + + Module + XCDetailModule + Proportion + 554pt + + + Proportion + 368pt + + + MajorVersion + 3 + MinorVersion + 0 + Name + Breakpoints + ServiceClasses + + PBXSmartGroupTreeModule + XCDetailModule + + StatusbarIsVisible + 1 + TableOfContents + + 1CDDB66807F98D9800BB5817 + 1CDDB66907F98D9800BB5817 + 1CE0B1FE06471DED0097A5F4 + 1CA1AED706398EBD00589147 + + ToolbarConfiguration + xcode.toolbar.config.breakpointsV3 + WindowString + 315 424 744 409 0 0 1440 878 + WindowToolGUID + 1CDDB66807F98D9800BB5817 + WindowToolIsVisible + 1 + + + Identifier + windowTool.debugAnimator + Layout + + + Dock + + + Module + PBXNavigatorGroup + Proportion + 100% + + + Proportion + 100% + + + Name + Debug Visualizer + ServiceClasses + + PBXNavigatorGroup + + StatusbarIsVisible + 1 + ToolbarConfiguration + xcode.toolbar.config.debugAnimatorV3 + WindowString + 100 100 700 500 0 0 1280 1002 + + + Identifier + windowTool.bookmarks + Layout + + + Dock + + + Module + PBXBookmarksModule + Proportion + 100% + + + Proportion + 100% + + + Name + Bookmarks + ServiceClasses + + PBXBookmarksModule + + StatusbarIsVisible + 0 + WindowString + 538 42 401 187 0 0 1280 1002 + + + Identifier + windowTool.projectFormatConflicts + Layout + + + Dock + + + Module + XCProjectFormatConflictsModule + Proportion + 100% + + + Proportion + 100% + + + Name + Project Format Conflicts + ServiceClasses + + XCProjectFormatConflictsModule + + StatusbarIsVisible + 0 + WindowContentMinSize + 450 300 + WindowString + 50 850 472 307 0 0 1440 877 + + + Identifier + windowTool.classBrowser + Layout + + + Dock + + + BecomeActive + 1 + ContentConfiguration + + OptionsSetName + Hierarchy, all classes + PBXProjectModuleGUID + 1CA6456E063B45B4001379D8 + PBXProjectModuleLabel + Class Browser - NSObject + + GeometryConfiguration + + ClassesFrame + {{0, 0}, {374, 96}} + ClassesTreeTableConfiguration + + PBXClassNameColumnIdentifier + 208 + PBXClassBookColumnIdentifier + 22 + + Frame + {{0, 0}, {630, 331}} + MembersFrame + {{0, 105}, {374, 395}} + MembersTreeTableConfiguration + + PBXMemberTypeIconColumnIdentifier + 22 + PBXMemberNameColumnIdentifier + 216 + PBXMemberTypeColumnIdentifier + 97 + PBXMemberBookColumnIdentifier + 22 + + PBXModuleWindowStatusBarHidden2 + 1 + RubberWindowFrame + 385 179 630 352 0 0 1440 878 + + Module + PBXClassBrowserModule + Proportion + 332pt + + + Proportion + 332pt + + + Name + Class Browser + ServiceClasses + + PBXClassBrowserModule + + StatusbarIsVisible + 0 + TableOfContents + + 1C0AD2AF069F1E9B00FABCE6 + 1C0AD2B0069F1E9B00FABCE6 + 1CA6456E063B45B4001379D8 + + ToolbarConfiguration + xcode.toolbar.config.classbrowser + WindowString + 385 179 630 352 0 0 1440 878 + WindowToolGUID + 1C0AD2AF069F1E9B00FABCE6 + WindowToolIsVisible + 0 + + + FirstTimeWindowDisplayed + + Identifier + windowTool.refactoring + IncludeInToolsMenu + 0 + IsVertical + + Layout + + + Dock + + + ContentConfiguration + + PBXProjectModuleGUID + B403E65B124CAC3600FBB163 + + GeometryConfiguration + + Frame + {{0, 0}, {500, 315}} + RubberWindowFrame + 1224 739 500 356 0 0 2560 1418 + + Module + XCRefactoringModule + Proportion + 315pt + + + Proportion + 315pt + + + Name + Refactoring + ServiceClasses + + XCRefactoringModule + + StatusbarIsVisible + + TableOfContents + + B403E65C124CAC3600FBB163 + B403E65D124CAC3600FBB163 + B403E65B124CAC3600FBB163 + + WindowString + 1224 739 500 356 0 0 2560 1418 + WindowToolGUID + B403E65C124CAC3600FBB163 + WindowToolIsVisible + + + + + diff --git a/AnnotatedSlider.xcodeproj/arepty.pbxuser b/AnnotatedSlider.xcodeproj/arepty.pbxuser new file mode 100644 index 0000000..9c579d5 --- /dev/null +++ b/AnnotatedSlider.xcodeproj/arepty.pbxuser @@ -0,0 +1,241 @@ +// !$*UTF8*$! +{ + 1D6058900D05DD3D006BFB54 /* AnnotatedSlider */ = { + activeExec = 0; + executables = ( + B403E637124CA77100FBB163 /* AnnotatedSlider */, + ); + }; + 28D7ACF60DDB3853001CB0EB /* AnnotatedSliderViewController.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1087, 401}}"; + sepNavSelRange = "{623, 0}"; + sepNavVisRange = "{0, 630}"; + }; + }; + 28D7ACF70DDB3853001CB0EB /* AnnotatedSliderViewController.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {915, 1092}}"; + sepNavSelRange = "{1645, 0}"; + sepNavVisRange = "{0, 1917}"; + }; + }; + 29B97313FDCFA39411CA2CEA /* Project object */ = { + activeBuildConfigurationName = Debug; + activeExecutable = B403E637124CA77100FBB163 /* AnnotatedSlider */; + activeSDKPreference = iphoneos3.2; + activeTarget = 1D6058900D05DD3D006BFB54 /* AnnotatedSlider */; + addToTargets = ( + 1D6058900D05DD3D006BFB54 /* AnnotatedSlider */, + ); + breakpoints = ( + ); + codeSenseManager = B403E649124CA7A600FBB163 /* Code sense */; + executables = ( + B403E637124CA77100FBB163 /* AnnotatedSlider */, + ); + perUserDictionary = { + PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = { + PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; + PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; + PBXFileTableDataSourceColumnWidthsKey = ( + 20, + 737, + 20, + 48, + 43, + 43, + 20, + ); + PBXFileTableDataSourceColumnsKey = ( + PBXFileDataSource_FiletypeID, + PBXFileDataSource_Filename_ColumnID, + PBXFileDataSource_Built_ColumnID, + PBXFileDataSource_ObjectSize_ColumnID, + PBXFileDataSource_Errors_ColumnID, + PBXFileDataSource_Warnings_ColumnID, + PBXFileDataSource_Target_ColumnID, + ); + }; + PBXPerProjectTemplateStateSaveDate = 307018456; + PBXWorkspaceStateSaveDate = 307018456; + }; + perUserProjectItems = { + B403E661124CAC3C00FBB163 /* PBXTextBookmark */ = B403E661124CAC3C00FBB163 /* PBXTextBookmark */; + B403E68C124CAD5100FBB163 /* PBXTextBookmark */ = B403E68C124CAD5100FBB163 /* PBXTextBookmark */; + B403E68D124CAD5100FBB163 /* PBXTextBookmark */ = B403E68D124CAD5100FBB163 /* PBXTextBookmark */; + B403E6DE124CB63F00FBB163 /* PBXTextBookmark */ = B403E6DE124CB63F00FBB163 /* PBXTextBookmark */; + B403E6DF124CB63F00FBB163 /* PBXTextBookmark */ = B403E6DF124CB63F00FBB163 /* PBXTextBookmark */; + B403E6EE124CB76900FBB163 /* PBXBookmark */ = B403E6EE124CB76900FBB163 /* PBXBookmark */; + B4E24380124CBB2900BBC31C /* PBXTextBookmark */ = B4E24380124CBB2900BBC31C /* PBXTextBookmark */; + B4E24381124CBB2900BBC31C /* PBXBookmark */ = B4E24381124CBB2900BBC31C /* PBXBookmark */; + B4E24382124CBB2900BBC31C /* PBXBookmark */ = B4E24382124CBB2900BBC31C /* PBXBookmark */; + B4E24383124CBB2900BBC31C /* PlistBookmark */ = B4E24383124CBB2900BBC31C /* PlistBookmark */; + }; + sourceControlManager = B403E648124CA7A600FBB163 /* Source Control */; + userBuildSettings = { + }; + }; + B403E637124CA77100FBB163 /* AnnotatedSlider */ = { + isa = PBXExecutable; + activeArgIndices = ( + ); + argumentStrings = ( + ); + autoAttachOnCrash = 1; + breakpointsEnabled = 1; + configStateDict = { + }; + customDataFormattersEnabled = 1; + dataTipCustomDataFormattersEnabled = 1; + dataTipShowTypeColumn = 1; + dataTipSortType = 0; + debuggerPlugin = GDBDebugging; + disassemblyDisplayState = 0; + dylibVariantSuffix = ""; + enableDebugStr = 1; + environmentEntries = ( + ); + executableSystemSymbolLevel = 0; + executableUserSymbolLevel = 0; + libgmallocEnabled = 0; + name = AnnotatedSlider; + savedGlobals = { + }; + showTypeColumn = 0; + sourceDirectories = ( + ); + variableFormatDictionary = { + }; + }; + B403E648124CA7A600FBB163 /* Source Control */ = { + isa = PBXSourceControlManager; + fallbackIsa = XCSourceControlManager; + isSCMEnabled = 0; + scmConfiguration = { + repositoryNamesForRoots = { + "" = ""; + }; + }; + }; + B403E649124CA7A600FBB163 /* Code sense */ = { + isa = PBXCodeSenseManager; + indexTemplatePath = ""; + }; + B403E64A124CA84200FBB163 /* ARAnnotatedSliderView.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {915, 934}}"; + sepNavSelRange = "{295, 0}"; + sepNavVisRange = "{0, 1266}"; + }; + }; + B403E64B124CA84200FBB163 /* ARAnnotatedSliderView.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {1237, 2795}}"; + sepNavSelRange = "{3382, 0}"; + sepNavVisRange = "{3223, 974}"; + }; + }; + B403E64C124CA84200FBB163 /* ARAnnotatedSliderBubbleView.h */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {915, 911}}"; + sepNavSelRange = "{963, 0}"; + sepNavVisRange = "{0, 984}"; + }; + }; + B403E64D124CA84200FBB163 /* ARAnnotatedSliderBubbleView.m */ = { + uiCtxt = { + sepNavIntBoundsRect = "{{0, 0}, {915, 3458}}"; + sepNavSelRange = "{0, 0}"; + sepNavVisRange = "{0, 1758}"; + }; + }; + B403E661124CAC3C00FBB163 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B403E64A124CA84200FBB163 /* ARAnnotatedSliderView.h */; + name = "ARAnnotatedSliderView.h: 13"; + rLen = 0; + rLoc = 295; + rType = 0; + vrLen = 1266; + vrLoc = 0; + }; + B403E68C124CAD5100FBB163 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B403E64D124CA84200FBB163 /* ARAnnotatedSliderBubbleView.m */; + name = "ARAnnotatedSliderBubbleView.m: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1758; + vrLoc = 0; + }; + B403E68D124CAD5100FBB163 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B403E64C124CA84200FBB163 /* ARAnnotatedSliderBubbleView.h */; + name = "ARAnnotatedSliderBubbleView.h: 38"; + rLen = 0; + rLoc = 963; + rType = 0; + vrLen = 984; + vrLoc = 0; + }; + B403E6DE124CB63F00FBB163 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = B403E64B124CA84200FBB163 /* ARAnnotatedSliderView.m */; + name = "ARAnnotatedSliderView.m: 184"; + rLen = 0; + rLoc = 5161; + rType = 0; + vrLen = 2105; + vrLoc = 3803; + }; + B403E6DF124CB63F00FBB163 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF60DDB3853001CB0EB /* AnnotatedSliderViewController.h */; + name = "AnnotatedSliderViewController.h: 18"; + rLen = 0; + rLoc = 583; + rType = 0; + vrLen = 591; + vrLoc = 0; + }; + B403E6E7124CB74B00FBB163 /* FolioCaseIcon.png */ = { + uiCtxt = { + sepNavWindowFrame = "{{15, 527}, {1245, 886}}"; + }; + }; + B403E6EE124CB76900FBB163 /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = B403E6E7124CB74B00FBB163 /* FolioCaseIcon.png */; + }; + B4E24380124CBB2900BBC31C /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 28D7ACF70DDB3853001CB0EB /* AnnotatedSliderViewController.m */; + name = "AnnotatedSliderViewController.m: 61"; + rLen = 0; + rLoc = 1645; + rType = 0; + vrLen = 1917; + vrLoc = 0; + }; + B4E24381124CBB2900BBC31C /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = B403E6E8124CB74B00FBB163 /* FolioCaseIcon@2x.png */; + }; + B4E24382124CBB2900BBC31C /* PBXBookmark */ = { + isa = PBXBookmark; + fRef = 8D1107310486CEB800E47090 /* AnnotatedSlider-Info.plist */; + }; + B4E24383124CBB2900BBC31C /* PlistBookmark */ = { + isa = PlistBookmark; + fRef = 8D1107310486CEB800E47090 /* AnnotatedSlider-Info.plist */; + fallbackIsa = PBXBookmark; + isK = 0; + kPath = ( + ); + name = "/Users/arepty/Documents/AnnotatedSlider/AnnotatedSlider-Info.plist"; + rLen = 0; + rLoc = 9223372036854775807; + }; +} diff --git a/AnnotatedSlider.xcodeproj/project.pbxproj b/AnnotatedSlider.xcodeproj/project.pbxproj new file mode 100755 index 0000000..d1a8c29 --- /dev/null +++ b/AnnotatedSlider.xcodeproj/project.pbxproj @@ -0,0 +1,282 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 45; + objects = { + +/* Begin PBXBuildFile section */ + 1D3623260D0F684500981E51 /* AnnotatedSliderAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D3623250D0F684500981E51 /* AnnotatedSliderAppDelegate.m */; }; + 1D60589B0D05DD56006BFB54 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; }; + 1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; }; + 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */; }; + 288765A50DF7441C002DB57D /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 288765A40DF7441C002DB57D /* CoreGraphics.framework */; }; + 2899E5220DE3E06400AC0155 /* AnnotatedSliderViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2899E5210DE3E06400AC0155 /* AnnotatedSliderViewController.xib */; }; + 28AD733F0D9D9553002E5188 /* MainWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 28AD733E0D9D9553002E5188 /* MainWindow.xib */; }; + 28D7ACF80DDB3853001CB0EB /* AnnotatedSliderViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 28D7ACF70DDB3853001CB0EB /* AnnotatedSliderViewController.m */; }; + B403E64E124CA84200FBB163 /* ARAnnotatedSliderView.m in Sources */ = {isa = PBXBuildFile; fileRef = B403E64B124CA84200FBB163 /* ARAnnotatedSliderView.m */; }; + B403E64F124CA84200FBB163 /* ARAnnotatedSliderBubbleView.m in Sources */ = {isa = PBXBuildFile; fileRef = B403E64D124CA84200FBB163 /* ARAnnotatedSliderBubbleView.m */; }; + B403E6E9124CB74B00FBB163 /* FolioCaseIcon.png in Resources */ = {isa = PBXBuildFile; fileRef = B403E6E7124CB74B00FBB163 /* FolioCaseIcon.png */; }; + B403E6EA124CB74B00FBB163 /* FolioCaseIcon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B403E6E8124CB74B00FBB163 /* FolioCaseIcon@2x.png */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 1D30AB110D05D00D00671497 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + 1D3623240D0F684500981E51 /* AnnotatedSliderAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AnnotatedSliderAppDelegate.h; sourceTree = ""; }; + 1D3623250D0F684500981E51 /* AnnotatedSliderAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AnnotatedSliderAppDelegate.m; sourceTree = ""; }; + 1D6058910D05DD3D006BFB54 /* AnnotatedSlider.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AnnotatedSlider.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + 288765A40DF7441C002DB57D /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; + 2899E5210DE3E06400AC0155 /* AnnotatedSliderViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AnnotatedSliderViewController.xib; sourceTree = ""; }; + 28AD733E0D9D9553002E5188 /* MainWindow.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MainWindow.xib; sourceTree = ""; }; + 28D7ACF60DDB3853001CB0EB /* AnnotatedSliderViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AnnotatedSliderViewController.h; sourceTree = ""; }; + 28D7ACF70DDB3853001CB0EB /* AnnotatedSliderViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AnnotatedSliderViewController.m; sourceTree = ""; }; + 29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + 32CA4F630368D1EE00C91783 /* AnnotatedSlider_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AnnotatedSlider_Prefix.pch; sourceTree = ""; }; + 8D1107310486CEB800E47090 /* AnnotatedSlider-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "AnnotatedSlider-Info.plist"; plistStructureDefinitionIdentifier = "com.apple.xcode.plist.structure-definition.iphone.info-plist"; sourceTree = ""; }; + B403E64A124CA84200FBB163 /* ARAnnotatedSliderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ARAnnotatedSliderView.h; sourceTree = ""; }; + B403E64B124CA84200FBB163 /* ARAnnotatedSliderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ARAnnotatedSliderView.m; sourceTree = ""; }; + B403E64C124CA84200FBB163 /* ARAnnotatedSliderBubbleView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ARAnnotatedSliderBubbleView.h; sourceTree = ""; }; + B403E64D124CA84200FBB163 /* ARAnnotatedSliderBubbleView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ARAnnotatedSliderBubbleView.m; sourceTree = ""; }; + B403E6E7124CB74B00FBB163 /* FolioCaseIcon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = FolioCaseIcon.png; sourceTree = ""; }; + B403E6E8124CB74B00FBB163 /* FolioCaseIcon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "FolioCaseIcon@2x.png"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 1D60588F0D05DD3D006BFB54 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */, + 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */, + 288765A50DF7441C002DB57D /* CoreGraphics.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 080E96DDFE201D6D7F000001 /* Classes */ = { + isa = PBXGroup; + children = ( + B403E64A124CA84200FBB163 /* ARAnnotatedSliderView.h */, + B403E64B124CA84200FBB163 /* ARAnnotatedSliderView.m */, + B403E64C124CA84200FBB163 /* ARAnnotatedSliderBubbleView.h */, + B403E64D124CA84200FBB163 /* ARAnnotatedSliderBubbleView.m */, + 1D3623240D0F684500981E51 /* AnnotatedSliderAppDelegate.h */, + 1D3623250D0F684500981E51 /* AnnotatedSliderAppDelegate.m */, + 28D7ACF60DDB3853001CB0EB /* AnnotatedSliderViewController.h */, + 28D7ACF70DDB3853001CB0EB /* AnnotatedSliderViewController.m */, + ); + path = Classes; + sourceTree = ""; + }; + 19C28FACFE9D520D11CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + 1D6058910D05DD3D006BFB54 /* AnnotatedSlider.app */, + ); + name = Products; + sourceTree = ""; + }; + 29B97314FDCFA39411CA2CEA /* CustomTemplate */ = { + isa = PBXGroup; + children = ( + 080E96DDFE201D6D7F000001 /* Classes */, + 29B97315FDCFA39411CA2CEA /* Other Sources */, + 29B97317FDCFA39411CA2CEA /* Resources */, + 29B97323FDCFA39411CA2CEA /* Frameworks */, + 19C28FACFE9D520D11CA2CBB /* Products */, + ); + name = CustomTemplate; + sourceTree = ""; + }; + 29B97315FDCFA39411CA2CEA /* Other Sources */ = { + isa = PBXGroup; + children = ( + 32CA4F630368D1EE00C91783 /* AnnotatedSlider_Prefix.pch */, + 29B97316FDCFA39411CA2CEA /* main.m */, + ); + name = "Other Sources"; + sourceTree = ""; + }; + 29B97317FDCFA39411CA2CEA /* Resources */ = { + isa = PBXGroup; + children = ( + B403E6E7124CB74B00FBB163 /* FolioCaseIcon.png */, + B403E6E8124CB74B00FBB163 /* FolioCaseIcon@2x.png */, + 2899E5210DE3E06400AC0155 /* AnnotatedSliderViewController.xib */, + 28AD733E0D9D9553002E5188 /* MainWindow.xib */, + 8D1107310486CEB800E47090 /* AnnotatedSlider-Info.plist */, + ); + name = Resources; + sourceTree = ""; + }; + 29B97323FDCFA39411CA2CEA /* Frameworks */ = { + isa = PBXGroup; + children = ( + 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */, + 1D30AB110D05D00D00671497 /* Foundation.framework */, + 288765A40DF7441C002DB57D /* CoreGraphics.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 1D6058900D05DD3D006BFB54 /* AnnotatedSlider */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "AnnotatedSlider" */; + buildPhases = ( + 1D60588D0D05DD3D006BFB54 /* Resources */, + 1D60588E0D05DD3D006BFB54 /* Sources */, + 1D60588F0D05DD3D006BFB54 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = AnnotatedSlider; + productName = AnnotatedSlider; + productReference = 1D6058910D05DD3D006BFB54 /* AnnotatedSlider.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 29B97313FDCFA39411CA2CEA /* Project object */ = { + isa = PBXProject; + buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "AnnotatedSlider" */; + compatibilityVersion = "Xcode 3.1"; + developmentRegion = English; + hasScannedForEncodings = 1; + knownRegions = ( + English, + Japanese, + French, + German, + ); + mainGroup = 29B97314FDCFA39411CA2CEA /* CustomTemplate */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 1D6058900D05DD3D006BFB54 /* AnnotatedSlider */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 1D60588D0D05DD3D006BFB54 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 28AD733F0D9D9553002E5188 /* MainWindow.xib in Resources */, + 2899E5220DE3E06400AC0155 /* AnnotatedSliderViewController.xib in Resources */, + B403E6E9124CB74B00FBB163 /* FolioCaseIcon.png in Resources */, + B403E6EA124CB74B00FBB163 /* FolioCaseIcon@2x.png in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 1D60588E0D05DD3D006BFB54 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 1D60589B0D05DD56006BFB54 /* main.m in Sources */, + 1D3623260D0F684500981E51 /* AnnotatedSliderAppDelegate.m in Sources */, + 28D7ACF80DDB3853001CB0EB /* AnnotatedSliderViewController.m in Sources */, + B403E64E124CA84200FBB163 /* ARAnnotatedSliderView.m in Sources */, + B403E64F124CA84200FBB163 /* ARAnnotatedSliderBubbleView.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 1D6058940D05DD3E006BFB54 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = AnnotatedSlider_Prefix.pch; + INFOPLIST_FILE = "AnnotatedSlider-Info.plist"; + PRODUCT_NAME = AnnotatedSlider; + }; + name = Debug; + }; + 1D6058950D05DD3E006BFB54 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = YES; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = AnnotatedSlider_Prefix.pch; + INFOPLIST_FILE = "AnnotatedSlider-Info.plist"; + PRODUCT_NAME = AnnotatedSlider; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + C01FCF4F08A954540054247B /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_BIT)"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + GCC_C_LANGUAGE_STANDARD = c99; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + PREBINDING = NO; + RUN_CLANG_STATIC_ANALYZER = YES; + SDKROOT = iphoneos3.2; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + C01FCF5008A954540054247B /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_BIT)"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + GCC_C_LANGUAGE_STANDARD = c99; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; + PREBINDING = NO; + RUN_CLANG_STATIC_ANALYZER = YES; + SDKROOT = iphoneos3.2; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "AnnotatedSlider" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1D6058940D05DD3E006BFB54 /* Debug */, + 1D6058950D05DD3E006BFB54 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + C01FCF4E08A954540054247B /* Build configuration list for PBXProject "AnnotatedSlider" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C01FCF4F08A954540054247B /* Debug */, + C01FCF5008A954540054247B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 29B97313FDCFA39411CA2CEA /* Project object */; +} diff --git a/AnnotatedSliderViewController.xib b/AnnotatedSliderViewController.xib new file mode 100644 index 0000000..0a84376 --- /dev/null +++ b/AnnotatedSliderViewController.xib @@ -0,0 +1,683 @@ + + + + 1056 + 10F569 + 804 + 1038.29 + 461.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 131 + + + YES + + + + YES + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + YES + + YES + + + YES + + + + YES + + IBFilesOwner + IBCocoaTouchFramework + + + IBFirstResponder + IBCocoaTouchFramework + + + + 274 + + YES + + + 301 + {{20, 218}, {280, 44}} + + + 2 + MC42NjY2NjY2ODY1IDAuNjY2NjY2Njg2NSAwLjY2NjY2NjY4NjUgMAA + + NO + IBCocoaTouchFramework + + + + 293 + {{20, 20}, {280, 22}} + + NO + YES + 7 + NO + IBCocoaTouchFramework + Annotated Slider + + Helvetica-Bold + 17 + 16 + + + 1 + MSAxIDEAA + + + 3 + MQA + + + 2 + MC42NzQ1MDk4MjMzIDAuNjc4NDMxMzkxNyAwLjY4NjI3NDUyODUAA + + 1 + 10 + 1 + + + + 293 + {{20, 50}, {280, 160}} + + + 2 + MC42NjY2NjY2ODY1IDAuNjY2NjY2Njg2NSAwLjY2NjY2NjY4NjUgMAA + + NO + YES + YES + NO + IBCocoaTouchFramework + This example illustrates how to use annotations (i.e. a bubble) for UISliders. + + 3 + MC4yNQA + + 2 + + + + 2 + IBCocoaTouchFramework + + + + + 293 + {{20, 354}, {280, 21}} + + NO + YES + 7 + NO + IBCocoaTouchFramework + As seen in Folio Case + + + + 2 + MC42NzQ1MDk4MjMzIDAuNjc4NDMxMzkxNyAwLjY4NjI3NDUyODUAA + + 1 + 10 + 1 + + + + 293 + {{131, 383}, {57, 57}} + + NO + IBCocoaTouchFramework + 0 + 0 + + Helvetica-Bold + 15 + 16 + + 1 + + + 1 + MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA + + + 3 + MC41AA + + + NSImage + FolioCaseIcon.png + + + + {320, 460} + + + 3 + MC43NQA + + + NO + + IBCocoaTouchFramework + + + + + YES + + + view + + + + 7 + + + + dataSource + + + + 16 + + + + delegate + + + + 17 + + + + sliderView + + + + 18 + + + + didTapAppIcon: + + + 7 + + 22 + + + + + YES + + 0 + + + + + + -1 + + + File's Owner + + + -2 + + + + + 6 + + + YES + + + + + + + + + + 12 + + + + + 13 + + + + + 15 + + + + + 11 + + + + + 21 + + + + + + + YES + + YES + -1.CustomClassName + -2.CustomClassName + 11.CustomClassName + 11.IBPluginDependency + 11.IBViewBoundsToFrameTransform + 12.IBPluginDependency + 13.IBPluginDependency + 15.IBPluginDependency + 21.IBPluginDependency + 21.IBViewBoundsToFrameTransform + 6.IBEditorWindowLastContentRect + 6.IBPluginDependency + + + YES + AnnotatedSliderViewController + UIResponder + ARAnnotatedSliderView + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABCIAAAwlAAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABC+AAAw+UAAA + + {{358, 774}, {320, 480}} + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + + YES + + + YES + + + + + YES + + + YES + + + + 22 + + + + YES + + ARAnnotatedSliderView + UIView + + YES + + YES + dataSource + delegate + + + YES + id + id + + + + YES + + YES + dataSource + delegate + + + YES + + dataSource + id + + + delegate + id + + + + + IBProjectSource + Classes/ARAnnotatedSliderView.h + + + + ARAnnotatedSliderView + UIView + + IBUserSource + + + + + AnnotatedSliderViewController + UIViewController + + didTapAppIcon: + id + + + didTapAppIcon: + + didTapAppIcon: + id + + + + YES + + YES + folioCaseIconImageView + sliderView + + + YES + UIImageView + ARAnnotatedSliderView + + + + YES + + YES + folioCaseIconImageView + sliderView + + + YES + + folioCaseIconImageView + UIImageView + + + sliderView + ARAnnotatedSliderView + + + + + IBProjectSource + Classes/AnnotatedSliderViewController.h + + + + + YES + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSError.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSFileManager.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueCoding.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueObserving.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyedArchiver.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSObject.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSRunLoop.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSThread.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURL.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURLConnection.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIAccessibility.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UINibLoading.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIResponder.h + + + + UIButton + UIControl + + IBFrameworkSource + UIKit.framework/Headers/UIButton.h + + + + UIControl + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIControl.h + + + + UIImageView + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIImageView.h + + + + UILabel + UIView + + IBFrameworkSource + UIKit.framework/Headers/UILabel.h + + + + UIResponder + NSObject + + + + UIScrollView + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIScrollView.h + + + + UISearchBar + UIView + + IBFrameworkSource + UIKit.framework/Headers/UISearchBar.h + + + + UISearchDisplayController + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UISearchDisplayController.h + + + + UITextView + UIScrollView + + IBFrameworkSource + UIKit.framework/Headers/UITextView.h + + + + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIPrintFormatter.h + + + + UIView + + IBFrameworkSource + UIKit.framework/Headers/UITextField.h + + + + UIView + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIView.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UINavigationController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UIPopoverController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UISplitViewController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UITabBarController.h + + + + UIViewController + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIViewController.h + + + + + 0 + IBCocoaTouchFramework + + com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS + + + + com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 + + + YES + AnnotatedSlider.xcodeproj + 3 + + FolioCaseIcon.png + {57, 57} + + 131 + + diff --git a/AnnotatedSlider_Prefix.pch b/AnnotatedSlider_Prefix.pch new file mode 100644 index 0000000..5bb4f23 --- /dev/null +++ b/AnnotatedSlider_Prefix.pch @@ -0,0 +1,8 @@ +// +// Prefix header for all source files of the 'AnnotatedSlider' target in the 'AnnotatedSlider' project +// + +#ifdef __OBJC__ + #import + #import +#endif diff --git a/Classes/ARAnnotatedSliderBubbleView.h b/Classes/ARAnnotatedSliderBubbleView.h new file mode 100644 index 0000000..7955d57 --- /dev/null +++ b/Classes/ARAnnotatedSliderBubbleView.h @@ -0,0 +1,41 @@ +// +// ARPageScrubberBubbleView.h +// Folio Case +// +// Created by Alexander Repty on 05.06.10. +// Copyright 2010 Enough Software. All rights reserved. +// + +#import + +@interface ARAnnotatedSliderBubbleView : UIView { + UIColor *_tintColor; + UIColor *_strokeColor; + + CGFloat _cornerRadius; + CGFloat _shadowBlur; + CGFloat _arrowHeight; + CGFloat _borderWidth; + CGSize _shadowOffset; + + UILabel *_pageNumberLabel; + NSUInteger _pageNumber; +} + +@property(nonatomic,retain) UIColor *tintColor; +@property(nonatomic,retain) UIColor *strokeColor; + +@property(nonatomic,assign) CGFloat cornerRadius; +@property(nonatomic,assign) CGFloat shadowBlur; +@property(nonatomic,assign) CGFloat arrowHeight; +@property(nonatomic,assign) CGFloat borderWidth; +@property(nonatomic,assign) CGSize shadowOffset; + +@property(nonatomic,retain) UILabel *pageNumberLabel; +@property(nonatomic,assign) NSUInteger pageNumber; + +- (void)show:(BOOL)animated; +- (void)hide:(BOOL)animated; +- (void)hide; + +@end diff --git a/Classes/ARAnnotatedSliderBubbleView.m b/Classes/ARAnnotatedSliderBubbleView.m new file mode 100644 index 0000000..2f1c561 --- /dev/null +++ b/Classes/ARAnnotatedSliderBubbleView.m @@ -0,0 +1,259 @@ +// +// ARPageScrubberBubbleView.m +// Folio Case +// +// Created by Alexander Repty on 05.06.10. +// Copyright 2010 Enough Software. All rights reserved. +// + +#import "ARAnnotatedSliderBubbleView.h" + +CGFloat const kPageScrubberBubbleViewDefaultCornerRadius = 4.0f; +CGFloat const kPageScrubberBubbleViewDefaultShadowBlur = 2.0f; +CGFloat const kPageScrubberBubbleViewDefaultArrowHeight = 10.0f; +CGFloat const kPageScrubberBubbleViewDefaultBorderWidth = 1.0f; +CGFloat const kPageScrubberBubbleViewDefaultShadowOffsetWidth = 0.0f; +CGFloat const kPageScrubberBubbleViewDefaultShadowOffsetHeight = 0.0f; + +@interface ARAnnotatedSliderBubbleView (Private) + +- (void)_pageScrubberBubbleViewCommonInit; + +@end + +@implementation ARAnnotatedSliderBubbleView + +@synthesize tintColor = _tintColor; +@synthesize strokeColor = _strokeColor; + +@synthesize cornerRadius = _cornerRadius; +@synthesize shadowBlur = _shadowBlur; +@synthesize arrowHeight = _arrowHeight; +@synthesize borderWidth = _borderWidth; +@synthesize shadowOffset = _shadowOffset; + +@synthesize pageNumberLabel = _pageNumberLabel; +@synthesize pageNumber = _pageNumber; + +#pragma mark - +#pragma mark Construction & Destruction + +- (id)init { + if (self = [super init]) { + [self _pageScrubberBubbleViewCommonInit]; + } + return self; +} + +- (id)initWithCoder:(NSCoder *)aDecoder { + if (self = [super initWithCoder:aDecoder]) { + [self _pageScrubberBubbleViewCommonInit]; + } + return self; +} + +- (id)initWithFrame:(CGRect)frame { + if (self = [super initWithFrame:frame]) { + [self _pageScrubberBubbleViewCommonInit]; + } + return self; +} + +- (void)dealloc { + self.tintColor = nil; + self.strokeColor = nil; + self.pageNumberLabel = nil; + [super dealloc]; +} + +#pragma mark - +#pragma mark ARPageScrubberBubbleView private methods + +- (void)_pageScrubberBubbleViewCommonInit { + self.backgroundColor = [UIColor clearColor]; + self.tintColor = [UIColor blackColor]; + self.strokeColor = [UIColor darkGrayColor]; + self.cornerRadius = kPageScrubberBubbleViewDefaultCornerRadius; + self.shadowBlur = kPageScrubberBubbleViewDefaultShadowBlur; + self.arrowHeight = kPageScrubberBubbleViewDefaultArrowHeight; + self.borderWidth = kPageScrubberBubbleViewDefaultBorderWidth; + self.shadowOffset = CGSizeMake(kPageScrubberBubbleViewDefaultShadowOffsetWidth, kPageScrubberBubbleViewDefaultShadowOffsetHeight); + self.pageNumber = NSNotFound; + + UILabel *label = [[UILabel alloc] initWithFrame:CGRectZero]; + label.backgroundColor = [UIColor clearColor]; + label.textColor = [UIColor whiteColor]; + label.font = [UIFont boldSystemFontOfSize:[UIFont smallSystemFontSize]]; + label.textAlignment = UITextAlignmentCenter; + label.shadowOffset = CGSizeMake(0.0f, -1.0f); + label.contentMode = UIViewContentModeCenter; + self.pageNumberLabel = label; + [self addSubview:label]; + [label release]; label = nil; +} + +#pragma mark - +#pragma mark Dynamic properties + +- (void)setTintColor:(UIColor *)newTintColor { + if (newTintColor == _tintColor) { + return; + } + + [_tintColor release]; + _tintColor = [newTintColor retain]; + + [self setNeedsDisplay]; +} + +- (void)setStrokeColor:(UIColor *)newStrokeColor { + if (newStrokeColor == _strokeColor) { + return; + } + + [_strokeColor release]; + _strokeColor = [newStrokeColor retain]; + + [self setNeedsDisplay]; +} + +- (void)setCornerRadius:(CGFloat)newCornerRadius { + _cornerRadius = newCornerRadius; + + [self setNeedsDisplay]; +} + +- (void)setShadowBlur:(CGFloat)newShadowBlur { + _shadowBlur = newShadowBlur; + + [self setNeedsDisplay]; +} + +- (void)setArrowHeight:(CGFloat)newArrowHeight { + _arrowHeight = newArrowHeight; + + [self setNeedsDisplay]; +} + +- (void)setBorderWidth:(CGFloat)newBorderWidth { + _borderWidth = newBorderWidth; + + [self setNeedsDisplay]; +} + +- (void)setShadowOffset:(CGSize)newShadowOffset { + _shadowOffset = newShadowOffset; + + [self setNeedsDisplay]; +} + +- (void)setPageNumber:(NSUInteger)newPageNumber { + _pageNumber = newPageNumber; + self.pageNumberLabel.text = [NSString stringWithFormat:NSLocalizedString(@"Page %d", @"Page %d"), self.pageNumber]; +} + +#pragma mark - +#pragma mark UIView methods + +- (void)drawRect:(CGRect)rect { + CGContextRef context = UIGraphicsGetCurrentContext(); + CGContextClipToRect(context, rect); + CGContextSetFillColorWithColor(context, self.tintColor.CGColor); + CGContextSetStrokeColorWithColor(context, self.strokeColor.CGColor); + CGContextSetLineWidth(context, self.borderWidth); + CGContextSetShadow(context, self.shadowOffset, self.shadowBlur); + + CGFloat margin = self.shadowBlur + 1.0f; + CGRect bubbleRect = CGRectZero; + bubbleRect.origin.x = margin; + bubbleRect.origin.y = margin; + bubbleRect.size.width = self.bounds.size.width - 2 * margin; + bubbleRect.size.height = self.bounds.size.height - 2 * margin; + + CGFloat minX = CGRectGetMinX(bubbleRect); + CGFloat midX = CGRectGetMidX(bubbleRect); + CGFloat maxX = CGRectGetMaxX(bubbleRect); + CGFloat minY = CGRectGetMinY(bubbleRect); + CGFloat midY = CGRectGetMidY(bubbleRect); + CGFloat maxY = CGRectGetMaxY(bubbleRect); + + CGFloat arrowWidth = round(self.arrowHeight * 1.5f); + CGPoint arrowLeftPoint = CGPointMake(floor(midX - (arrowWidth / 2)), maxY - self.arrowHeight); + CGPoint arrowRightPoint = CGPointMake(ceil(midX + (arrowWidth / 2)), maxY - self.arrowHeight); + CGPoint arrowHeadPoint = CGPointMake(midX, maxY); + + CGContextMoveToPoint(context, minX, midY); + CGContextAddArcToPoint(context, minX, minY, midX, minY, self.cornerRadius); + CGContextAddArcToPoint(context, maxX, minY, maxX, midY, self.cornerRadius); + CGContextAddArcToPoint(context, maxX, maxY - self.arrowHeight, arrowRightPoint.x, arrowRightPoint.y, self.cornerRadius); + CGContextAddLineToPoint(context, arrowRightPoint.x, arrowRightPoint.y); + CGContextAddLineToPoint(context, arrowHeadPoint.x, arrowHeadPoint.y); + CGContextAddLineToPoint(context, arrowLeftPoint.x, arrowLeftPoint.y); + CGContextAddArcToPoint(context, minX, maxY - self.arrowHeight, minX, midY, self.cornerRadius); + + CGContextFillPath(context); + CGContextStrokePath(context); +} + +- (void)layoutSubviews { + [super layoutSubviews]; + + CGFloat margin = self.shadowBlur + self.borderWidth + 1.0f; + + CGRect pageNumberLabelRect = CGRectZero; + pageNumberLabelRect.origin.x = margin; + pageNumberLabelRect.origin.y = margin; + pageNumberLabelRect.size.width = self.bounds.size.width - 2 * margin; + pageNumberLabelRect.size.height = self.bounds.size.height - 2 * margin - self.arrowHeight; + self.pageNumberLabel.frame = pageNumberLabelRect; +} + +#pragma mark - +#pragma mark ARPageScrubberBubbleView methods + +- (void)show:(BOOL)animated { + self.alpha = 0.0f; + self.hidden = NO; + + if (animated) { + [UIView beginAnimations:nil context:nil]; + [UIView setAnimationDuration:0.4f]; + [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; + } + + self.alpha = 1.0f; + + if (animated) { + [UIView commitAnimations]; + } +} + +- (void)hide:(BOOL)animated { + self.alpha = 1.0f; + + if (animated) { + [UIView beginAnimations:nil context:nil]; + [UIView setAnimationDelegate:self]; + [UIView setAnimationDidStopSelector:@selector(hideAnimationDidStop)]; + [UIView setAnimationDuration:0.4f]; + [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; + } + + self.alpha = 0.0f; + + if (animated) { + [UIView commitAnimations]; + } else { + self.hidden = YES; + } +} + +- (void)hide { + [self hide:YES]; +} + +- (void)hideAnimationDidStop { + self.hidden = YES; +} + +@end diff --git a/Classes/ARAnnotatedSliderView.h b/Classes/ARAnnotatedSliderView.h new file mode 100755 index 0000000..21c1e31 --- /dev/null +++ b/Classes/ARAnnotatedSliderView.h @@ -0,0 +1,50 @@ +// +// ARPageScrubberView.h +// Folio Case +// +// Created by Alexander Repty on 02.06.10. +// Copyright 2010 Enough Software. All rights reserved. +// + +#import + +@class ARAnnotatedSliderBubbleView; +@protocol ARAnnotatedSliderViewDelegate; +@protocol ARAnnotatedSliderViewDataSource; + +@interface ARAnnotatedSliderView : UIView { + @package + id _delegate; + id _dataSource; + + UISlider *_slider; + + ARAnnotatedSliderBubbleView *_bubbleView; + NSTimer *_bubbleTimer; +} + +@property(nonatomic,assign) IBOutlet id delegate; +@property(nonatomic,assign) IBOutlet id dataSource; + +@property(nonatomic,assign) NSUInteger pageIndex; + +@property(nonatomic,retain) ARAnnotatedSliderBubbleView *bubbleView; + +- (void)reloadData; + +- (void)show:(BOOL)animated; +- (void)hide:(BOOL)animated; + +@end + +@protocol ARAnnotatedSliderViewDelegate + +- (void)pageScrubberView:(ARAnnotatedSliderView *)pageScrubberView didSelectPageAtIndex:(NSUInteger)pageIndex; + +@end + +@protocol ARAnnotatedSliderViewDataSource + +- (NSUInteger)numberOfPagesInPageScrubberView:(ARAnnotatedSliderView *)pageScrubberView; + +@end diff --git a/Classes/ARAnnotatedSliderView.m b/Classes/ARAnnotatedSliderView.m new file mode 100755 index 0000000..50d312e --- /dev/null +++ b/Classes/ARAnnotatedSliderView.m @@ -0,0 +1,219 @@ +// +// ARPageScrubberView.m +// Folio Case +// +// Created by Alexander Repty on 02.06.10. +// Copyright 2010 Enough Software. All rights reserved. +// + +#import "ARAnnotatedSliderView.h" +#import "ARAnnotatedSliderBubbleView.h" + +NSString *const kARPageScrubberViewKeypathFrame = @"frame"; +NSString *const kARPageScrubberViewKeypathTracking = @"tracking"; + +@interface ARAnnotatedSliderView (Private) + +- (void)_pageScrubberViewCommonInit; + +@end + +@implementation ARAnnotatedSliderView + +@synthesize delegate = _delegate; +@synthesize dataSource = _dataSource; + +@dynamic pageIndex; + +@synthesize bubbleView = _bubbleView; + +#pragma mark - +#pragma mark Construction & Destruction + +- (id)initWithCoder:(NSCoder *)aDecoder { + if (self = [super initWithCoder:aDecoder]) { + [self _pageScrubberViewCommonInit]; + } + return self; +} + +- (id)initWithFrame:(CGRect)frame { + if (self = [super initWithFrame:frame]) { + [self _pageScrubberViewCommonInit]; + } + return self; +} + +- (void)dealloc { + [_slider release]; _slider = nil; + self.bubbleView = nil; + [_bubbleTimer invalidate]; + [_bubbleTimer release]; _bubbleTimer = nil; + [super dealloc]; +} + +#pragma mark - +#pragma mark ARPageScrubberView private methods + +- (void)_pageScrubberViewCommonInit { + self.alpha = 0.0f; + self.hidden = YES; + + CGFloat sliderMargin = 10.0f; + CGRect sliderRect = self.bounds; + sliderRect.origin.x = sliderMargin; + sliderRect.size.width -= 2 * sliderMargin; + _slider = [[UISlider alloc] initWithFrame:sliderRect]; + _slider.minimumValue = 0.0f; + _slider.maximumValue = 0.0f; + _slider.continuous = NO; + [_slider addTarget:self action:@selector(_sliderDidChangeValue:) forControlEvents:UIControlEventValueChanged]; + _slider.autoresizingMask = UIViewAutoresizingFlexibleWidth; + _slider.contentMode = UIViewContentModeScaleAspectFit; + _slider.clipsToBounds = YES; + + [self addSubview:_slider]; + + sliderMargin += 15.0f; + sliderRect.origin.x = sliderMargin; + sliderRect.size.width = self.bounds.size.width - 2 * sliderMargin; + + CGRect bubbleFrame = CGRectZero; + bubbleFrame.size.width = 100.0f; + bubbleFrame.size.height = 44.0f; + + ARAnnotatedSliderBubbleView *bubbleView = [[ARAnnotatedSliderBubbleView alloc] initWithFrame:bubbleFrame]; + [self addSubview:bubbleView]; + [self bringSubviewToFront:bubbleView]; + self.bubbleView = bubbleView; + [bubbleView release]; bubbleView = nil; + + self.bubbleView.alpha = 0.0f; +} + +- (void)_sliderDidChangeValue:(id)sender { + [self.delegate pageScrubberView:self didSelectPageAtIndex:self.pageIndex]; +} + +#pragma mark - +#pragma mark Dynamic properties + +- (void)setDataSource:(id)aDataSource { + _dataSource = aDataSource; + [self reloadData]; +} + +- (NSUInteger)pageIndex { + return round(_slider.value); +} + +- (void)setPageIndex:(NSUInteger)value { + [_slider setValue:value animated:YES]; +} + +#pragma mark - +#pragma mark ARPageScrubberView methods + +- (void)reloadData { + _slider.maximumValue = [self.dataSource numberOfPagesInPageScrubberView:self] - 1; +} + +- (void)show:(BOOL)animated { + self.alpha = 0.0f; + self.hidden = NO; + + if (animated) { + [UIView beginAnimations:nil context:nil]; + } + + self.alpha = 1.0f; + + if (animated) { + [UIView commitAnimations]; + } + + if ([_slider.subviews count] < 3) { + return; + } + + UIImageView *thumbImageView = (UIImageView *)[_slider.subviews objectAtIndex:2]; + if (![thumbImageView isKindOfClass:[UIImageView class]]) { + return; + } + + [thumbImageView addObserver:self forKeyPath:kARPageScrubberViewKeypathFrame options:NSKeyValueChangeReplacement context:(void *)thumbImageView]; + [_slider addObserver:self forKeyPath:kARPageScrubberViewKeypathTracking options:NSKeyValueChangeReplacement context:(void *)thumbImageView]; +} + +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { + UIImageView *thumbImageView = (UIImageView *)context; + + if ([keyPath isEqualToString:kARPageScrubberViewKeypathFrame]) { + self.bubbleView.pageNumber = self.pageIndex + 1; + CGRect bubbleViewFrame = self.bubbleView.frame; + bubbleViewFrame.origin.x = thumbImageView.frame.origin.x - round(bubbleViewFrame.size.width / 2) + _slider.frame.origin.x + round(thumbImageView.frame.size.width / 2); + bubbleViewFrame.origin.y = thumbImageView.frame.origin.y - bubbleViewFrame.size.height; + self.bubbleView.frame = bubbleViewFrame; + if (self.bubbleView.hidden && _slider.tracking) { + [self.bubbleView show:YES]; + } + } else if ([keyPath isEqualToString:kARPageScrubberViewKeypathTracking]) { + if (_slider.tracking) { + if (self.bubbleView.hidden) { + [self.bubbleView show:YES]; + } + return; + } else { + [_slider setValue:self.pageIndex animated:YES]; + } + + if (nil != _bubbleTimer) { + [_bubbleTimer invalidate]; + [_bubbleTimer release]; _bubbleTimer = nil; + } + + _bubbleTimer = [[NSTimer alloc] initWithFireDate:[NSDate dateWithTimeIntervalSinceNow:0.25f] interval:0.0f target:self.bubbleView selector:@selector(hide) userInfo:nil repeats:NO]; + [[NSRunLoop currentRunLoop] addTimer:_bubbleTimer forMode:NSDefaultRunLoopMode]; + } +} + +- (void)hide:(BOOL)animated { + self.alpha = 1.0f; + + if (animated) { + [UIView beginAnimations:nil context:nil]; + [UIView setAnimationDelegate:self]; + [UIView setAnimationDidStopSelector:@selector(hideAnimationDidStop)]; + } + + self.alpha = 0.0f; + + if (animated) { + [UIView commitAnimations]; + } else { + self.hidden = YES; + } +} + +- (void)hideAnimationDidStop { + self.hidden = YES; + + if ([_slider.subviews count] < 3) { + return; + } + + UIImageView *thumbImageView = (UIImageView *)[_slider.subviews objectAtIndex:2]; + if (![thumbImageView isKindOfClass:[UIImageView class]]) { + return; + } + + @try { + [thumbImageView removeObserver:self forKeyPath:kARPageScrubberViewKeypathFrame]; + [_slider removeObserver:self forKeyPath:kARPageScrubberViewKeypathTracking]; + } + @catch (NSException * e) { + // ignore "cannot remove observer" exceptions + } +} + +@end diff --git a/Classes/AnnotatedSliderAppDelegate.h b/Classes/AnnotatedSliderAppDelegate.h new file mode 100644 index 0000000..ef624c7 --- /dev/null +++ b/Classes/AnnotatedSliderAppDelegate.h @@ -0,0 +1,22 @@ +// +// AnnotatedSliderAppDelegate.h +// AnnotatedSlider +// +// Created by Alexander Repty on 24.09.10. +// Copyright 2010 Enough Software. All rights reserved. +// + +#import + +@class AnnotatedSliderViewController; + +@interface AnnotatedSliderAppDelegate : NSObject { + UIWindow *window; + AnnotatedSliderViewController *viewController; +} + +@property (nonatomic, retain) IBOutlet UIWindow *window; +@property (nonatomic, retain) IBOutlet AnnotatedSliderViewController *viewController; + +@end + diff --git a/Classes/AnnotatedSliderAppDelegate.m b/Classes/AnnotatedSliderAppDelegate.m new file mode 100644 index 0000000..a05ff5c --- /dev/null +++ b/Classes/AnnotatedSliderAppDelegate.m @@ -0,0 +1,88 @@ +// +// AnnotatedSliderAppDelegate.m +// AnnotatedSlider +// +// Created by Alexander Repty on 24.09.10. +// Copyright 2010 Enough Software. All rights reserved. +// + +#import "AnnotatedSliderAppDelegate.h" +#import "AnnotatedSliderViewController.h" + +@implementation AnnotatedSliderAppDelegate + +@synthesize window; +@synthesize viewController; + + +#pragma mark - +#pragma mark Application lifecycle + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + + // Override point for customization after application launch. + + // Add the view controller's view to the window and display. + [window addSubview:viewController.view]; + [window makeKeyAndVisible]; + + return YES; +} + + +- (void)applicationWillResignActive:(UIApplication *)application { + /* + Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. + */ +} + + +- (void)applicationDidEnterBackground:(UIApplication *)application { + /* + Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + If your application supports background execution, called instead of applicationWillTerminate: when the user quits. + */ +} + + +- (void)applicationWillEnterForeground:(UIApplication *)application { + /* + Called as part of transition from the background to the inactive state: here you can undo many of the changes made on entering the background. + */ +} + + +- (void)applicationDidBecomeActive:(UIApplication *)application { + /* + Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. + */ +} + + +- (void)applicationWillTerminate:(UIApplication *)application { + /* + Called when the application is about to terminate. + See also applicationDidEnterBackground:. + */ +} + + +#pragma mark - +#pragma mark Memory management + +- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application { + /* + Free up as much memory as possible by purging cached data objects that can be recreated (or reloaded from disk) later. + */ +} + + +- (void)dealloc { + [viewController release]; + [window release]; + [super dealloc]; +} + + +@end diff --git a/Classes/AnnotatedSliderViewController.h b/Classes/AnnotatedSliderViewController.h new file mode 100644 index 0000000..84347fd --- /dev/null +++ b/Classes/AnnotatedSliderViewController.h @@ -0,0 +1,23 @@ +// +// AnnotatedSliderViewController.h +// AnnotatedSlider +// +// Created by Alexander Repty on 24.09.10. +// Copyright 2010 Enough Software. All rights reserved. +// + +#import +#import "ARAnnotatedSliderView.h" + +@interface AnnotatedSliderViewController : UIViewController { + ARAnnotatedSliderView *_sliderView; + UIImageView *_folioCaseIconImageView; +} + +@property(nonatomic,retain) IBOutlet ARAnnotatedSliderView *sliderView; +@property(nonatomic,retain) IBOutlet UIImageView *folioCaseIconImageView; + +- (IBAction)didTapAppIcon:(id)sender; + +@end + diff --git a/Classes/AnnotatedSliderViewController.m b/Classes/AnnotatedSliderViewController.m new file mode 100644 index 0000000..5546a65 --- /dev/null +++ b/Classes/AnnotatedSliderViewController.m @@ -0,0 +1,86 @@ +// +// AnnotatedSliderViewController.m +// AnnotatedSlider +// +// Created by Alexander Repty on 24.09.10. +// Copyright 2010 Enough Software. All rights reserved. +// + +#import "AnnotatedSliderViewController.h" + +@implementation AnnotatedSliderViewController + +@synthesize sliderView = _sliderView; +@synthesize folioCaseIconImageView = _folioCaseIconImageView; + +#pragma mark - +#pragma mark Construction & Destruction + +- (void)dealloc { + [super dealloc]; +} + +#pragma mark - +#pragma mark AnnotatedSliderViewController methods + +- (void)showSlider { + [self.sliderView show:YES]; +} + +- (IBAction)didTapAppIcon:(id)sender { + if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { + NSURL *appStoreURL = [NSURL URLWithString:@"http://bit.ly/getfoliocase"]; + [[UIApplication sharedApplication] openURL:appStoreURL]; + } else { + NSURL *websiteURL = [NSURL URLWithString:@"http://foliocaseapp.com/"]; + [[UIApplication sharedApplication] openURL:websiteURL]; + } +} + +#pragma mark - +#pragma mark UIViewController methods + +- (void)viewDidLoad { + [super viewDidLoad]; + + CGRect sliderRect = CGRectMake(20.0f, 218.0f, 280.0f, 44.0f); + if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { + sliderRect.origin.x = (self.view.frame.size.width - sliderRect.size.width) / 2.0f; + } + ARAnnotatedSliderView *sliderView = [[ARAnnotatedSliderView alloc] initWithFrame:sliderRect]; + sliderView.delegate = self; + sliderView.dataSource = self; + sliderView.backgroundColor = [UIColor clearColor]; + self.sliderView = sliderView; + [sliderView release], sliderView = nil; + + [self.view addSubview:self.sliderView]; + [self.sliderView hide:NO]; +} + +- (void)viewDidAppear:(BOOL)animated { + [self performSelector:@selector(showSlider) withObject:nil afterDelay:0.1f]; +} + +- (void)viewDidUnload { + self.sliderView = nil; + self.folioCaseIconImageView = nil; + [super viewDidUnload]; +} + +#pragma mark - +#pragma mark ARAnnotatedSliderViewDelegate methods + +- (void)pageScrubberView:(ARAnnotatedSliderView *)pageScrubberView didSelectPageAtIndex:(NSUInteger)pageIndex { + NSLog(@"%s: %d", __PRETTY_FUNCTION__, pageIndex); +} + +#pragma mark - +#pragma mark ARAnnotatedSliderViewDataSource methods + +- (NSUInteger)numberOfPagesInPageScrubberView:(ARAnnotatedSliderView *)pageScrubberView { + return 100; +} + + +@end diff --git a/FolioCaseIcon.png b/FolioCaseIcon.png new file mode 100755 index 0000000..c0498cf Binary files /dev/null and b/FolioCaseIcon.png differ diff --git a/FolioCaseIcon@2x.png b/FolioCaseIcon@2x.png new file mode 100644 index 0000000..36facfe Binary files /dev/null and b/FolioCaseIcon@2x.png differ diff --git a/MainWindow.xib b/MainWindow.xib new file mode 100644 index 0000000..4bd61c6 --- /dev/null +++ b/MainWindow.xib @@ -0,0 +1,444 @@ + + + + 1024 + 10D571 + 786 + 1038.29 + 460.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 112 + + + YES + + + + YES + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + YES + + YES + + + YES + + + + YES + + IBFilesOwner + IBCocoaTouchFramework + + + IBFirstResponder + IBCocoaTouchFramework + + + IBCocoaTouchFramework + + + AnnotatedSliderViewController + + + 1 + + IBCocoaTouchFramework + NO + + + + 292 + {320, 480} + + 1 + MSAxIDEAA + + NO + NO + + IBCocoaTouchFramework + YES + + + + + YES + + + delegate + + + + 4 + + + + viewController + + + + 11 + + + + window + + + + 14 + + + + + YES + + 0 + + + + + + -1 + + + File's Owner + + + 3 + + + AnnotatedSlider App Delegate + + + -2 + + + + + 10 + + + + + 12 + + + + + + + YES + + YES + -1.CustomClassName + -2.CustomClassName + 10.CustomClassName + 10.IBEditorWindowLastContentRect + 10.IBPluginDependency + 12.IBEditorWindowLastContentRect + 12.IBPluginDependency + 3.CustomClassName + 3.IBPluginDependency + + + YES + UIApplication + UIResponder + AnnotatedSliderViewController + {{234, 376}, {320, 480}} + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + {{525, 346}, {320, 480}} + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + AnnotatedSliderAppDelegate + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + + YES + + + YES + + + + + YES + + + YES + + + + 15 + + + + YES + + UIWindow + UIView + + IBUserSource + + + + + AnnotatedSliderAppDelegate + NSObject + + YES + + YES + viewController + window + + + YES + AnnotatedSliderViewController + UIWindow + + + + YES + + YES + viewController + window + + + YES + + viewController + AnnotatedSliderViewController + + + window + UIWindow + + + + + IBProjectSource + Classes/AnnotatedSliderAppDelegate.h + + + + AnnotatedSliderAppDelegate + NSObject + + IBUserSource + + + + + AnnotatedSliderViewController + UIViewController + + IBProjectSource + Classes/AnnotatedSliderViewController.h + + + + + YES + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSError.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSFileManager.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueCoding.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueObserving.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyedArchiver.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSObject.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSRunLoop.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSThread.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURL.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURLConnection.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIAccessibility.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UINibLoading.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIResponder.h + + + + UIApplication + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIApplication.h + + + + UIResponder + NSObject + + + + UISearchBar + UIView + + IBFrameworkSource + UIKit.framework/Headers/UISearchBar.h + + + + UISearchDisplayController + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UISearchDisplayController.h + + + + UIView + + IBFrameworkSource + UIKit.framework/Headers/UITextField.h + + + + UIView + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIView.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UINavigationController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UIPopoverController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UISplitViewController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UITabBarController.h + + + + UIViewController + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIViewController.h + + + + UIWindow + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIWindow.h + + + + + 0 + IBCocoaTouchFramework + + com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS + + + + com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 + + + YES + AnnotatedSlider.xcodeproj + 3 + 112 + + diff --git a/README b/README new file mode 100644 index 0000000..afa2bb4 --- /dev/null +++ b/README @@ -0,0 +1,2 @@ +This project demonstrates how to use KVO to observe and react to interface changes, such as a slider being tracked/moved. + diff --git a/main.m b/main.m new file mode 100644 index 0000000..070435f --- /dev/null +++ b/main.m @@ -0,0 +1,17 @@ +// +// main.m +// AnnotatedSlider +// +// Created by Alexander Repty on 24.09.10. +// Copyright 2010 Enough Software. All rights reserved. +// + +#import + +int main(int argc, char *argv[]) { + + NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; + int retVal = UIApplicationMain(argc, argv, nil, nil); + [pool release]; + return retVal; +}