├── LICENSE ├── README.md ├── RKSwipeBetweenViewControllers.h ├── RKSwipeBetweenViewControllers.m ├── RKSwipeBetweenViewControllers.podspec ├── RKSwipeBetweenViewControllers.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ ├── xcshareddata │ │ └── RKSwipeBetweenViewControllers.xccheckout │ └── xcuserdata │ │ └── cwrichardkim93.xcuserdatad │ │ └── UserInterfaceState.xcuserstate └── xcuserdata │ └── cwrichardkim93.xcuserdatad │ ├── xcdebugger │ └── Breakpoints_v2.xcbkptlist │ └── xcschemes │ ├── RKSwipeBetweenViewControllers.xcscheme │ └── xcschememanagement.plist ├── RKSwipeBetweenViewControllers ├── AppDelegate.h ├── AppDelegate.m ├── Base.lproj │ └── Main.storyboard ├── Images.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ ├── LaunchImage.launchimage │ │ └── Contents.json │ └── menu.imageset │ │ ├── Contents.json │ │ ├── menu27 2 + Rectangle 98-1.png │ │ └── menu27 2 + Rectangle 98.png ├── RKSwipeBetweenViewControllers-Info.plist ├── RKSwipeBetweenViewControllers-Prefix.pch ├── en.lproj │ └── InfoPlist.strings └── main.m └── RKSwipeBetweenViewControllersTests ├── RKSwipeBetweenViewControllersTests-Info.plist ├── RKSwipeBetweenViewControllersTests.m └── en.lproj └── InfoPlist.strings /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2014 Choong-Won Richard Kim 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | RKSwipeBetweenViewControllers 2 | =========================== 3 | 4 | UIPageViewController and custom UISegmentedControl synchronized and animated. Similar to Spotify's "My Music" section. 5 | 6 | __Please check the .h to see how to customize anything__ 7 | 8 | [Support](http://cwrichardkim.com) 9 | 10 | ## Pod 11 | You should not use the pod in most cases, as they don't allow for customizability. I would recommend dragging the .h and .m files manually into your project 12 | 13 | pod 'RKSwipeBetweenViewControllers' 14 | 15 | 16 | ## Updates, Questions, and Requests 17 | [twitter](https://twitter.com/cwRichardKim) <--- I am a very light twitterer, so I won't spam you 18 | 19 | ## Demo: 20 | (after five minutes of customization) 21 | 22 | ![demo](http://i.imgur.com/zlfWDa1.gif) 23 | 24 | Any number of any view controllers should technically work, though it doesn't look great with more than 4 25 | 26 | __Customizable!__ 27 | 28 | ![Customizable!](http://i.imgur.com/dl422EL.gif) 29 | 30 | (check the RKSwipeBetweenViewControllers.h for *actual* customizable features) 31 | 32 | ## how to use 33 | (check out the provided AppDelegate to see an example): 34 | 35 | __Programmatically__ (preferred) 36 | 37 | 1. Import RKSwipeBetweenViewControllers.h 38 | 39 | ```objc 40 | #import 41 | ``` 42 | 43 | 2. Initialize a UIPageViewController 44 | 45 | ```objc 46 | UIPageViewController *pageController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil]; 47 | ``` 48 | 3. Initialize a RKSwipeBetweenViewControllers 49 | 50 | ```objc 51 | RKSwipeBetweenViewControllers *navigationController = [[RKSwipeBetweenViewControllers alloc]initWithRootViewController:pageController]; 52 | ``` 53 | 4. Add all your ViewControllers (in order) to navigationController.viewControllerArray (try to keep it under 5) 54 | 55 | ```objc 56 | [navigationController.viewControllerArray addObjectsFromArray:@[viewController1, viewController2, viewController3]]; 57 | ``` 58 | 5. Use the custom class (or call it as the first controller from app delegate: see below) 59 | 60 | ```objc 61 | self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds]; 62 | self.window.rootViewController = navigationController; 63 | [self.window makeKeyAndVisible]; 64 | ``` 65 | 66 | __StoryBoard__ 67 | (do not use pods for this one) 68 | 69 | 1. Drop the file into your project and import RKSwipeBetweenViewControllers.h 70 | 71 | ```objc 72 | #import RKSwipeBetweenViewControllers.h 73 | ``` 74 | 75 | 2. Embed a UIPageViewController inside a UINavigationController. Change the class of the to UINavigationController the custom class (RKSwipeBetweenViewControllers) 76 | 3. change the transition style of the pageviewcontroller to scroll (click on the UIPageViewController in storyboard -> attributes inspector -> transition style -> scroll) 77 | 78 | 4. go to the RKSwipeBetweenViewControllers.m file and use it as your own class now. Add your view controllers to "viewControllerArray". See below for various options. 79 | 80 | *Programmatically, outside RKSwipeBetweenViewControllers.m* 81 | (if this navigation bar isn't the first screen that comes up, or if you want to call it from the delegate) 82 | 83 | ```objc 84 | [customNavController.viewControllerArray addObjectsFromArray:@[viewController1, viewController2, viewController3]]; 85 | ``` 86 | 87 | *Programmatically, inside RKSwipeBetweenViewControllers.m* 88 | (most cases if your view controllers are programmatically created) 89 | 90 | ```objc 91 | [viewControllerArray addObjectsFromArray:@[demo,demo2]]; 92 | ``` 93 | *storyboard, inside RKSwipeBetweenViewControllers.m* 94 | (if your viewcontrollers are on the storyboard, but make sure to give them storyboard IDs) 95 | 96 | ```objc 97 | UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 98 | UIViewController* theController = [storyboard instantiateViewControllerWithIdentifier:@"storyboardID"]; 99 | 100 | [viewControllerArray addObject:theController]; 101 | ``` 102 | *storyboard, outside RKSwipeBetweenViewControllers.m* 103 | (if your viewcontrollers are on the storyboard, but make sure to give them storyboard IDs) 104 | 105 | ```objc 106 | UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 107 | UIViewController* theController = [storyboard instantiateViewControllerWithIdentifier:@"storyboardID"]; 108 | 109 | [theCustomViewController.viewControllerArray addObject:theController]; 110 | ``` 111 | 112 | 113 | Any problems/questions? shoot me a pm 114 | 115 | ### Areas for Improvement / Involvement 116 | * Working with horizontal layout 117 | * Working with more than 5 pages 118 | * Handful of infrequent bugs 119 | * Better performance when loading pages 120 | * Changing layout away from UINavigationController to allow the bar to be at the bottom 121 | * Bug: adding a MKMapView to a UIViewController in storyboard causes strange visual bug. Adding programmatically is fine 122 | * Crash on load for UITabBarControllers (resolved): https://github.com/cwRichardKim/RKSwipeBetweenViewControllers/pull/15 123 | -------------------------------------------------------------------------------- /RKSwipeBetweenViewControllers.h: -------------------------------------------------------------------------------- 1 | // 2 | // RKSwipeBetweenViewControllers.h 3 | // RKSwipeBetweenViewControllers 4 | // 5 | // Created by Richard Kim on 7/24/14. 6 | // Copyright (c) 2014 Richard Kim. All rights reserved. 7 | // 8 | 9 | /* 10 | 11 | Copyright (c) 2014 Choong-Won Richard Kim 12 | 13 | Permission is hereby granted, free of charge, to any person obtaining a copy 14 | of this software and associated documentation files (the "Software"), to deal 15 | in the Software without restriction, including without limitation the rights 16 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 17 | copies of the Software, and to permit persons to whom the Software is furnished 18 | to do so, subject to the following conditions: 19 | 20 | The above copyright notice and this permission notice shall be included in all 21 | copies or substantial portions of the Software. 22 | 23 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 24 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 25 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 26 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 27 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 28 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 29 | THE SOFTWARE. 30 | 31 | */ 32 | 33 | 34 | /* 35 | TABLE OF CONTENTS 36 | If you want to customize something, look for what you want on the left and then search (cmd+shift+"f") for the term on the right. 37 | 38 | @cwRichardKim for regular updates / requests 39 | 40 | customizeable item Search Term 41 | - selector bar color sbcolor 42 | - selector bar alpha sbalpha 43 | - moving selector bar alpha msbalpha 44 | - selector bar animation speed ANIMATION_SPEED 45 | - selector bar further customization top of the .m (multiple attributes 46 | - button colors buttoncolors 47 | - button text buttontext 48 | - further button customization top of the .m (multiple attributes) 49 | - individual button customization customb 50 | - bar tint color bartint 51 | - speed up / prevent lag (see explanation in "how this works" below) 52 | - further customization see "how this works" below 53 | 54 | want anything anything else? Feel free to contact me at cwrichardkim@gmail.com 55 | 56 | */ 57 | 58 | 59 | /* HOW THIS WORKS 60 | In order to encourage customization, I'm going to try to describe exactly how it works 61 | 62 | - Design/Build 63 | RKSwipeBetweenViewControllers is a custom UINavigationController 64 | with UIButtons as tabs and a UIView as the slider that moves around 65 | 66 | The class builds a standard UIPageViewController with the 67 | controllers in "viewControllerArray" and dynamically adjusts the 68 | buttons according to how many objects there are. (i.e. if there are 69 | 2 controllers, there will be 2 tabs, and the slider will be 70 | width/2-buffer/2 wide) 71 | 72 | The buttons are automatically placed evenly across the navigation bar, 73 | but you can adjust placement and size with the x/y buffers or the 74 | height of the buttons 75 | 76 | 77 | - Swiping 78 | - Correct ViewController 79 | Swiping between pages calls the delegate functions: 80 | (UIViewController *)pageViewController:(UIPageViewController *)pageViewController 81 | viewControllerBeforeViewController:(UIViewController *)viewController 82 | 83 | and 84 | 85 | (UIViewController *)pageViewController:(UIPageViewController *)pageViewController 86 | viewControllerAfterViewController:(UIViewController *)viewController 87 | 88 | These are actually not as intuitive as you would think, because if you 89 | swipe once, it calls both functions so that it can build and maintain 90 | the pages (i think). This means it isn't a simple solution of "get me the 91 | next page", you have to check what page you are on and then return that 92 | page from the viewControllerArray 93 | 94 | So, this is possible by maintaining a "currentPageIndex". Whenever the 95 | user calls a swipe command, the delegate function 96 | 97 | (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating 98 | (BOOL)finished previousViewControllers:(NSArray *)previousViewControllers 99 | transitionCompleted:(BOOL)completed 100 | 101 | is called, and here I check to see if the action is completed 102 | (you can stop mid-swipe and swipe back), and then check the index 103 | of the page i'm on. 104 | 105 | - Moving the Selector / Slider 106 | In the function "syncScrollView", I grab the UIPageViewController's 107 | UIScrollView, and then I set the delegate to this custom class 108 | 109 | So, whenever you move the pages, 110 | (void)scrollViewDidScroll:(UIScrollView *)scrollView is called. 111 | Here I can measure how far you are moving the page with "xFromCenter" 112 | and then adjust the UIView for the slider accordingly 113 | 114 | 115 | - Tapping Tabs 116 | - Changing Pages 117 | I've set up the buttons so that they each have a tag number (left = 0). 118 | And I've attached the function "tapSegmentButtonAction" to each button 119 | So, when you tap a button, it checks the tag, and that's the index of 120 | the controller you want in the viewControllerArray. But, if it jumped 121 | straight to it, you wouldn't get an understanding of the pages in between 122 | and it wouldn't feel right. So, I've constructed a loop that shows every 123 | controller in viewControllerArray from where you are to where you have to 124 | go. 125 | 126 | - Moving the Slider 127 | When you click a tab, because it scrolls through the pages until it gets 128 | to the page you want, it calls "scrollViewDidScroll", which takes care of 129 | moving the slider. So, the formula for movement is i*c+x. i is 320/number 130 | of tabs (i.e. width of 1 tab), c is the current page index and x is change 131 | in the scrollView's x coordinates. For example, if I'm on the 2nd tab and 132 | I scroll to the 4th tab, the slider has to move from 80*1+0 to 80*3+0 133 | 134 | - Lag when you first swipe through your view controllers 135 | The reason this happens is because of the way UIPageViewController works. 136 | I actually implemented my own custom class, but realized it would get 137 | more confusing, and require people to spend more time learning how to use 138 | this, so I got rid of it. 139 | 140 | So, when you use a UIPageViewController and you swipe, it builds the 141 | entire controller and then shows it to you. That means if you have 142 | a UITableViewController, it has to build the first x number of cells. 143 | If you have photos or lots of data, this can take a while. 144 | 145 | The primary way to get around this is to run all of your custom setup 146 | in the background. There are tons of ways and tons of tutorials on this 147 | already, so I won't get into detail. 148 | */ 149 | 150 | #import 151 | 152 | @protocol RKSwipeBetweenViewControllersDelegate 153 | 154 | @end 155 | 156 | @interface RKSwipeBetweenViewControllers : UINavigationController 157 | 158 | @property (nonatomic, strong) NSMutableArray *viewControllerArray; 159 | @property (nonatomic, weak) id navDelegate; 160 | @property (nonatomic, strong) UIView *selectionBar; 161 | @property (nonatomic, strong)UIPageViewController *pageController; 162 | @property (nonatomic, strong)UIView *navigationView; 163 | @property (nonatomic, strong)NSArray *buttonText; 164 | 165 | @end 166 | -------------------------------------------------------------------------------- /RKSwipeBetweenViewControllers.m: -------------------------------------------------------------------------------- 1 | // 2 | // RKSwipeBetweenViewControllers.m 3 | // RKSwipeBetweenViewControllers 4 | // 5 | // Created by Richard Kim on 7/24/14. 6 | // Copyright (c) 2014 Richard Kim. All rights reserved. 7 | // 8 | // @cwRichardKim for regular updates 9 | 10 | #import "RKSwipeBetweenViewControllers.h" 11 | 12 | //%%% customizeable button attributes 13 | CGFloat X_BUFFER = 0.0; //%%% the number of pixels on either side of the segment 14 | CGFloat Y_BUFFER = 14.0; //%%% number of pixels on top of the segment 15 | CGFloat HEIGHT = 30.0; //%%% height of the segment 16 | 17 | //%%% customizeable selector bar attributes (the black bar under the buttons) 18 | CGFloat BOUNCE_BUFFER = 10.0; //%%% adds bounce to the selection bar when you scroll 19 | CGFloat ANIMATION_SPEED = 0.2; //%%% the number of seconds it takes to complete the animation 20 | CGFloat SELECTOR_Y_BUFFER = 40.0; //%%% the y-value of the bar that shows what page you are on (0 is the top) 21 | CGFloat SELECTOR_HEIGHT = 4.0; //%%% thickness of the selector bar 22 | 23 | CGFloat X_OFFSET = 8.0; //%%% for some reason there's a little bit of a glitchy offset. I'm going to look for a better workaround in the future 24 | 25 | @interface RKSwipeBetweenViewControllers () 26 | 27 | @property (nonatomic) UIScrollView *pageScrollView; 28 | @property (nonatomic) NSInteger currentPageIndex; 29 | @property (nonatomic) BOOL isPageScrollingFlag; //%%% prevents scrolling / segment tap crash 30 | @property (nonatomic) BOOL hasAppearedFlag; //%%% prevents reloading (maintains state) 31 | 32 | @end 33 | 34 | @implementation RKSwipeBetweenViewControllers 35 | @synthesize viewControllerArray; 36 | @synthesize selectionBar; 37 | @synthesize pageController; 38 | @synthesize navigationView; 39 | @synthesize buttonText; 40 | 41 | - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 42 | { 43 | self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 44 | if (self) { 45 | // Custom initialization 46 | } 47 | return self; 48 | } 49 | 50 | - (void)viewDidLoad 51 | { 52 | [super viewDidLoad]; 53 | 54 | self.navigationBar.barTintColor = [UIColor colorWithRed:0.01 green:0.05 blue:0.06 alpha:1]; //%%% bartint 55 | self.navigationBar.translucent = NO; 56 | viewControllerArray = [[NSMutableArray alloc]init]; 57 | self.currentPageIndex = 0; 58 | self.isPageScrollingFlag = NO; 59 | self.hasAppearedFlag = NO; 60 | } 61 | 62 | #pragma mark Customizables 63 | 64 | //%%% color of the status bar 65 | -(UIStatusBarStyle)preferredStatusBarStyle { 66 | return UIStatusBarStyleLightContent; 67 | // return UIStatusBarStyleDefault; 68 | } 69 | 70 | //%%% sets up the tabs using a loop. You can take apart the loop to customize individual buttons, but remember to tag the buttons. (button.tag=0 and the second button.tag=1, etc) 71 | -(void)setupSegmentButtons { 72 | navigationView = [[UIView alloc]initWithFrame:CGRectMake(0,0,self.view.frame.size.width,self.navigationBar.frame.size.height)]; 73 | 74 | NSInteger numControllers = [viewControllerArray count]; 75 | 76 | if (!buttonText) { 77 | buttonText = [[NSArray alloc]initWithObjects: @"first",@"second",@"third",@"fourth",@"etc",@"etc",@"etc",@"etc",nil]; //%%%buttontitle 78 | } 79 | 80 | for (int i = 0; i right or right -> left 184 | if (button.tag > tempIndex) { 185 | 186 | //%%% scroll through all the objects between the two points 187 | for (int i = (int)tempIndex+1; i<=button.tag; i++) { 188 | [pageController setViewControllers:@[[viewControllerArray objectAtIndex:i]] direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:^(BOOL complete){ 189 | 190 | //%%% if the action finishes scrolling (i.e. the user doesn't stop it in the middle), 191 | //then it updates the page that it's currently on 192 | if (complete) { 193 | [weakSelf updateCurrentPageIndex:i]; 194 | } 195 | }]; 196 | } 197 | } 198 | 199 | //%%% this is the same thing but for going right -> left 200 | else if (button.tag < tempIndex) { 201 | for (int i = (int)tempIndex-1; i >= button.tag; i--) { 202 | [pageController setViewControllers:@[[viewControllerArray objectAtIndex:i]] direction:UIPageViewControllerNavigationDirectionReverse animated:YES completion:^(BOOL complete){ 203 | if (complete) { 204 | [weakSelf updateCurrentPageIndex:i]; 205 | } 206 | }]; 207 | } 208 | } 209 | } 210 | } 211 | 212 | //%%% makes sure the nav bar is always aware of what page you're on 213 | //in reference to the array of view controllers you gave 214 | -(void)updateCurrentPageIndex:(int)newIndex { 215 | self.currentPageIndex = newIndex; 216 | } 217 | 218 | //%%% method is called when any of the pages moves. 219 | //It extracts the xcoordinate from the center point and instructs the selection bar to move accordingly 220 | -(void)scrollViewDidScroll:(UIScrollView *)scrollView { 221 | CGFloat xFromCenter = self.view.frame.size.width-scrollView.contentOffset.x; //%%% positive for right swipe, negative for left 222 | 223 | //%%% checks to see what page you are on and adjusts the xCoor accordingly. 224 | //i.e. if you're on the second page, it makes sure that the bar starts from the frame.origin.x of the 225 | //second tab instead of the beginning 226 | NSInteger xCoor = X_BUFFER+selectionBar.frame.size.width*self.currentPageIndex-X_OFFSET; 227 | 228 | selectionBar.frame = CGRectMake(xCoor-xFromCenter/[viewControllerArray count], selectionBar.frame.origin.y, selectionBar.frame.size.width, selectionBar.frame.size.height); 229 | } 230 | 231 | 232 | //%%% the delegate functions for UIPageViewController. 233 | //Pretty standard, but generally, don't touch this. 234 | #pragma mark UIPageViewController Delegate Functions 235 | 236 | - (void)didReceiveMemoryWarning { 237 | [super didReceiveMemoryWarning]; 238 | } 239 | 240 | 241 | #pragma mark - Page View Controller Data Source 242 | 243 | - (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController { 244 | NSInteger index = [viewControllerArray indexOfObject:viewController]; 245 | 246 | if ((index == NSNotFound) || (index == 0)) { 247 | return nil; 248 | } 249 | 250 | index--; 251 | return [viewControllerArray objectAtIndex:index]; 252 | } 253 | 254 | - (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController { 255 | NSInteger index = [viewControllerArray indexOfObject:viewController]; 256 | 257 | if (index == NSNotFound) { 258 | return nil; 259 | } 260 | index++; 261 | 262 | if (index == [viewControllerArray count]) { 263 | return nil; 264 | } 265 | return [viewControllerArray objectAtIndex:index]; 266 | } 267 | 268 | -(void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed { 269 | if (completed) { 270 | self.currentPageIndex = [viewControllerArray indexOfObject:[pageViewController.viewControllers lastObject]]; 271 | } 272 | } 273 | 274 | #pragma mark - Scroll View Delegate 275 | 276 | - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { 277 | self.isPageScrollingFlag = YES; 278 | } 279 | 280 | - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { 281 | self.isPageScrollingFlag = NO; 282 | } 283 | 284 | @end 285 | -------------------------------------------------------------------------------- /RKSwipeBetweenViewControllers.podspec: -------------------------------------------------------------------------------- 1 | # 2 | # Be sure to run `pod spec lint RKSwipeBetweenViewControllers.podspec' to ensure this is a 3 | # valid spec and to remove all comments including this before submitting the spec. 4 | # 5 | # To learn more about Podspec attributes see http://docs.cocoapods.org/specification.html 6 | # To see working Podspecs in the CocoaPods repo see https://github.com/CocoaPods/Specs/ 7 | # 8 | 9 | Pod::Spec.new do |s| 10 | 11 | # ――― Spec Metadata ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # 12 | # 13 | # These will help people to find your library, and whilst it 14 | # can feel like a chore to fill in it's definitely to your advantage. The 15 | # summary should be tweet-length, and the description more in depth. 16 | # 17 | 18 | s.name = "RKSwipeBetweenViewControllers" 19 | s.version = "0.1.4" 20 | s.summary = "Swipe between ViewControllers like in the Spotify or Twitter app with an interactive Segmented Control in the Navigation Bar" 21 | 22 | s.description = "Similar to Twitter and Spotify, swipe between view controllers and the tabs in the navigation bar changes. -twitter, -spotify, -swipe, -navigation bar, -navigationbar, -between, -view controllers, -viewcontroller, -tab, -objectivec, -ios, -iphone, -xcode" 23 | 24 | s.homepage = "https://github.com/cwRichardKim/RKSwipeBetweenViewControllers" 25 | s.screenshots = "http://i.imgur.com/zEsm542.gif" 26 | 27 | 28 | # ――― Spec License ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # 29 | # 30 | # Licensing your code is important. See http://choosealicense.com for more info. 31 | # CocoaPods will detect a license file if there is a named LICENSE* 32 | # Popular ones are 'MIT', 'BSD' and 'Apache License, Version 2.0'. 33 | # 34 | 35 | # s.license = "MIT (example)" 36 | s.license = { :type => "MIT", :file => "LICENSE" } 37 | 38 | 39 | # ――― Author Metadata ――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # 40 | # 41 | # Specify the authors of the library, with email addresses. Email addresses 42 | # of the authors are extracted from the SCM log. E.g. $ git log. CocoaPods also 43 | # accepts just a name if you'd rather not provide an email address. 44 | # 45 | # Specify a social_media_url where others can refer to, for example a twitter 46 | # profile URL. 47 | # 48 | 49 | s.author = "cwrichardkim" 50 | # s.authors = { "cwrichardkim93" => "cwrichardkim93@gmail.com" } 51 | s.social_media_url = "http://twitter.com/cwrichardkim" 52 | 53 | # ――― Platform Specifics ――――――――――――――――――――――――――――――――――――――――――――――――――――――― # 54 | # 55 | # If this Pod runs only on iOS or OS X, then specify the platform and 56 | # the deployment target. You can optionally include the target after the platform. 57 | # 58 | 59 | # s.platform = :ios 60 | s.platform = :ios, "7.0" 61 | 62 | # When using multiple platforms 63 | # s.ios.deployment_target = "5.0" 64 | # s.osx.deployment_target = "10.7" 65 | 66 | 67 | # ――― Source Location ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # 68 | # 69 | # Specify the location from where the source should be retrieved. 70 | # Supports git, hg, bzr, svn and HTTP. 71 | # 72 | 73 | s.source = { :git => "https://github.com/cwRichardKim/RKSwipeBetweenViewControllers.git", :tag => s.version.to_s } 74 | 75 | 76 | # ――― Source Code ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # 77 | # 78 | # CocoaPods is smart about how it includes source code. For source files 79 | # giving a folder will include any h, m, mm, c & cpp files. For header 80 | # files it will include any header in the folder. 81 | # Not including the public_header_files will make all headers public. 82 | # 83 | 84 | s.source_files = 'RKSwipeBetweenViewControllers.h', 'RKSwipeBetweenViewControllers.m' 85 | 86 | # s.public_header_files = "Classes/**/*.h" 87 | 88 | 89 | # ――― Resources ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # 90 | # 91 | # A list of resources included with the Pod. These are copied into the 92 | # target bundle with a build phase script. Anything else will be cleaned. 93 | # You can preserve files from being cleaned, please don't preserve 94 | # non-essential files like tests, examples and documentation. 95 | # 96 | 97 | # s.resource = "icon.png" 98 | # s.resources = "Resources/*.png" 99 | 100 | 101 | # ――― Project Linking ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # 102 | # 103 | # Link your library with frameworks, or libraries. Libraries do not include 104 | # the lib prefix of their name. 105 | # 106 | 107 | # s.framework = "SomeFramework" 108 | # s.frameworks = "SomeFramework", "AnotherFramework" 109 | 110 | # s.library = "iconv" 111 | # s.libraries = "iconv", "xml2" 112 | 113 | 114 | # ――― Project Settings ――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # 115 | # 116 | # If your library depends on compiler flags you can set them in the xcconfig hash 117 | # where they will only apply to your library. If you depend on other Podspecs 118 | # you can include multiple dependencies to ensure it works. 119 | 120 | s.requires_arc = true 121 | 122 | # s.xcconfig = { "HEADER_SEARCH_PATHS" => "$(SDKROOT)/usr/include/libxml2" } 123 | # s.dependency "JSONKit", "~> 1.4" 124 | 125 | end 126 | -------------------------------------------------------------------------------- /RKSwipeBetweenViewControllers.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 992F238C1985BD6300320CAA /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 992F238B1985BD6300320CAA /* Foundation.framework */; }; 11 | 992F238E1985BD6300320CAA /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 992F238D1985BD6300320CAA /* CoreGraphics.framework */; }; 12 | 992F23901985BD6300320CAA /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 992F238F1985BD6300320CAA /* UIKit.framework */; }; 13 | 992F23961985BD6300320CAA /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 992F23941985BD6300320CAA /* InfoPlist.strings */; }; 14 | 992F23981985BD6300320CAA /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 992F23971985BD6300320CAA /* main.m */; }; 15 | 992F239C1985BD6300320CAA /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 992F239B1985BD6300320CAA /* AppDelegate.m */; }; 16 | 992F239F1985BD6300320CAA /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 992F239D1985BD6300320CAA /* Main.storyboard */; }; 17 | 992F23A41985BD6300320CAA /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 992F23A31985BD6300320CAA /* Images.xcassets */; }; 18 | 992F23AB1985BD6300320CAA /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 992F23AA1985BD6300320CAA /* XCTest.framework */; }; 19 | 992F23AC1985BD6300320CAA /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 992F238B1985BD6300320CAA /* Foundation.framework */; }; 20 | 992F23AD1985BD6300320CAA /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 992F238F1985BD6300320CAA /* UIKit.framework */; }; 21 | 992F23B51985BD6400320CAA /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 992F23B31985BD6300320CAA /* InfoPlist.strings */; }; 22 | 992F23B71985BD6400320CAA /* RKSwipeBetweenViewControllersTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 992F23B61985BD6400320CAA /* RKSwipeBetweenViewControllersTests.m */; }; 23 | 992F23C21985BDD500320CAA /* RKSwipeBetweenViewControllers.m in Sources */ = {isa = PBXBuildFile; fileRef = 992F23C11985BDD500320CAA /* RKSwipeBetweenViewControllers.m */; }; 24 | /* End PBXBuildFile section */ 25 | 26 | /* Begin PBXContainerItemProxy section */ 27 | 992F23AE1985BD6300320CAA /* PBXContainerItemProxy */ = { 28 | isa = PBXContainerItemProxy; 29 | containerPortal = 992F23801985BD6300320CAA /* Project object */; 30 | proxyType = 1; 31 | remoteGlobalIDString = 992F23871985BD6300320CAA; 32 | remoteInfo = RKSwipeBetweenViewControllers; 33 | }; 34 | /* End PBXContainerItemProxy section */ 35 | 36 | /* Begin PBXFileReference section */ 37 | 992F23881985BD6300320CAA /* RKSwipeBetweenViewControllers.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = RKSwipeBetweenViewControllers.app; sourceTree = BUILT_PRODUCTS_DIR; }; 38 | 992F238B1985BD6300320CAA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 39 | 992F238D1985BD6300320CAA /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 40 | 992F238F1985BD6300320CAA /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 41 | 992F23931985BD6300320CAA /* RKSwipeBetweenViewControllers-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "RKSwipeBetweenViewControllers-Info.plist"; sourceTree = ""; }; 42 | 992F23951985BD6300320CAA /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 43 | 992F23971985BD6300320CAA /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 44 | 992F23991985BD6300320CAA /* RKSwipeBetweenViewControllers-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "RKSwipeBetweenViewControllers-Prefix.pch"; sourceTree = ""; }; 45 | 992F239A1985BD6300320CAA /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 46 | 992F239B1985BD6300320CAA /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 47 | 992F239E1985BD6300320CAA /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 48 | 992F23A31985BD6300320CAA /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 49 | 992F23A91985BD6300320CAA /* RKSwipeBetweenViewControllersTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RKSwipeBetweenViewControllersTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 50 | 992F23AA1985BD6300320CAA /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; 51 | 992F23B21985BD6300320CAA /* RKSwipeBetweenViewControllersTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "RKSwipeBetweenViewControllersTests-Info.plist"; sourceTree = ""; }; 52 | 992F23B41985BD6300320CAA /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 53 | 992F23B61985BD6400320CAA /* RKSwipeBetweenViewControllersTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RKSwipeBetweenViewControllersTests.m; sourceTree = ""; }; 54 | 992F23C01985BDD500320CAA /* RKSwipeBetweenViewControllers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RKSwipeBetweenViewControllers.h; sourceTree = SOURCE_ROOT; }; 55 | 992F23C11985BDD500320CAA /* RKSwipeBetweenViewControllers.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RKSwipeBetweenViewControllers.m; sourceTree = SOURCE_ROOT; }; 56 | /* End PBXFileReference section */ 57 | 58 | /* Begin PBXFrameworksBuildPhase section */ 59 | 992F23851985BD6300320CAA /* Frameworks */ = { 60 | isa = PBXFrameworksBuildPhase; 61 | buildActionMask = 2147483647; 62 | files = ( 63 | 992F238E1985BD6300320CAA /* CoreGraphics.framework in Frameworks */, 64 | 992F23901985BD6300320CAA /* UIKit.framework in Frameworks */, 65 | 992F238C1985BD6300320CAA /* Foundation.framework in Frameworks */, 66 | ); 67 | runOnlyForDeploymentPostprocessing = 0; 68 | }; 69 | 992F23A61985BD6300320CAA /* Frameworks */ = { 70 | isa = PBXFrameworksBuildPhase; 71 | buildActionMask = 2147483647; 72 | files = ( 73 | 992F23AB1985BD6300320CAA /* XCTest.framework in Frameworks */, 74 | 992F23AD1985BD6300320CAA /* UIKit.framework in Frameworks */, 75 | 992F23AC1985BD6300320CAA /* Foundation.framework in Frameworks */, 76 | ); 77 | runOnlyForDeploymentPostprocessing = 0; 78 | }; 79 | /* End PBXFrameworksBuildPhase section */ 80 | 81 | /* Begin PBXGroup section */ 82 | 992F237F1985BD6300320CAA = { 83 | isa = PBXGroup; 84 | children = ( 85 | 992F23911985BD6300320CAA /* RKSwipeBetweenViewControllers */, 86 | 992F23B01985BD6300320CAA /* RKSwipeBetweenViewControllersTests */, 87 | 992F238A1985BD6300320CAA /* Frameworks */, 88 | 992F23891985BD6300320CAA /* Products */, 89 | ); 90 | sourceTree = ""; 91 | }; 92 | 992F23891985BD6300320CAA /* Products */ = { 93 | isa = PBXGroup; 94 | children = ( 95 | 992F23881985BD6300320CAA /* RKSwipeBetweenViewControllers.app */, 96 | 992F23A91985BD6300320CAA /* RKSwipeBetweenViewControllersTests.xctest */, 97 | ); 98 | name = Products; 99 | sourceTree = ""; 100 | }; 101 | 992F238A1985BD6300320CAA /* Frameworks */ = { 102 | isa = PBXGroup; 103 | children = ( 104 | 992F238B1985BD6300320CAA /* Foundation.framework */, 105 | 992F238D1985BD6300320CAA /* CoreGraphics.framework */, 106 | 992F238F1985BD6300320CAA /* UIKit.framework */, 107 | 992F23AA1985BD6300320CAA /* XCTest.framework */, 108 | ); 109 | name = Frameworks; 110 | sourceTree = ""; 111 | }; 112 | 992F23911985BD6300320CAA /* RKSwipeBetweenViewControllers */ = { 113 | isa = PBXGroup; 114 | children = ( 115 | 992F239A1985BD6300320CAA /* AppDelegate.h */, 116 | 992F239B1985BD6300320CAA /* AppDelegate.m */, 117 | 992F239D1985BD6300320CAA /* Main.storyboard */, 118 | 992F23A31985BD6300320CAA /* Images.xcassets */, 119 | 992F23C01985BDD500320CAA /* RKSwipeBetweenViewControllers.h */, 120 | 992F23C11985BDD500320CAA /* RKSwipeBetweenViewControllers.m */, 121 | 992F23921985BD6300320CAA /* Supporting Files */, 122 | ); 123 | path = RKSwipeBetweenViewControllers; 124 | sourceTree = ""; 125 | }; 126 | 992F23921985BD6300320CAA /* Supporting Files */ = { 127 | isa = PBXGroup; 128 | children = ( 129 | 992F23931985BD6300320CAA /* RKSwipeBetweenViewControllers-Info.plist */, 130 | 992F23941985BD6300320CAA /* InfoPlist.strings */, 131 | 992F23971985BD6300320CAA /* main.m */, 132 | 992F23991985BD6300320CAA /* RKSwipeBetweenViewControllers-Prefix.pch */, 133 | ); 134 | name = "Supporting Files"; 135 | sourceTree = ""; 136 | }; 137 | 992F23B01985BD6300320CAA /* RKSwipeBetweenViewControllersTests */ = { 138 | isa = PBXGroup; 139 | children = ( 140 | 992F23B61985BD6400320CAA /* RKSwipeBetweenViewControllersTests.m */, 141 | 992F23B11985BD6300320CAA /* Supporting Files */, 142 | ); 143 | path = RKSwipeBetweenViewControllersTests; 144 | sourceTree = ""; 145 | }; 146 | 992F23B11985BD6300320CAA /* Supporting Files */ = { 147 | isa = PBXGroup; 148 | children = ( 149 | 992F23B21985BD6300320CAA /* RKSwipeBetweenViewControllersTests-Info.plist */, 150 | 992F23B31985BD6300320CAA /* InfoPlist.strings */, 151 | ); 152 | name = "Supporting Files"; 153 | sourceTree = ""; 154 | }; 155 | /* End PBXGroup section */ 156 | 157 | /* Begin PBXNativeTarget section */ 158 | 992F23871985BD6300320CAA /* RKSwipeBetweenViewControllers */ = { 159 | isa = PBXNativeTarget; 160 | buildConfigurationList = 992F23BA1985BD6400320CAA /* Build configuration list for PBXNativeTarget "RKSwipeBetweenViewControllers" */; 161 | buildPhases = ( 162 | 992F23841985BD6300320CAA /* Sources */, 163 | 992F23851985BD6300320CAA /* Frameworks */, 164 | 992F23861985BD6300320CAA /* Resources */, 165 | ); 166 | buildRules = ( 167 | ); 168 | dependencies = ( 169 | ); 170 | name = RKSwipeBetweenViewControllers; 171 | productName = RKSwipeBetweenViewControllers; 172 | productReference = 992F23881985BD6300320CAA /* RKSwipeBetweenViewControllers.app */; 173 | productType = "com.apple.product-type.application"; 174 | }; 175 | 992F23A81985BD6300320CAA /* RKSwipeBetweenViewControllersTests */ = { 176 | isa = PBXNativeTarget; 177 | buildConfigurationList = 992F23BD1985BD6400320CAA /* Build configuration list for PBXNativeTarget "RKSwipeBetweenViewControllersTests" */; 178 | buildPhases = ( 179 | 992F23A51985BD6300320CAA /* Sources */, 180 | 992F23A61985BD6300320CAA /* Frameworks */, 181 | 992F23A71985BD6300320CAA /* Resources */, 182 | ); 183 | buildRules = ( 184 | ); 185 | dependencies = ( 186 | 992F23AF1985BD6300320CAA /* PBXTargetDependency */, 187 | ); 188 | name = RKSwipeBetweenViewControllersTests; 189 | productName = RKSwipeBetweenViewControllersTests; 190 | productReference = 992F23A91985BD6300320CAA /* RKSwipeBetweenViewControllersTests.xctest */; 191 | productType = "com.apple.product-type.bundle.unit-test"; 192 | }; 193 | /* End PBXNativeTarget section */ 194 | 195 | /* Begin PBXProject section */ 196 | 992F23801985BD6300320CAA /* Project object */ = { 197 | isa = PBXProject; 198 | attributes = { 199 | LastUpgradeCheck = 0510; 200 | ORGANIZATIONNAME = "Richard Kim"; 201 | TargetAttributes = { 202 | 992F23871985BD6300320CAA = { 203 | DevelopmentTeam = CBME5RD7L2; 204 | }; 205 | 992F23A81985BD6300320CAA = { 206 | TestTargetID = 992F23871985BD6300320CAA; 207 | }; 208 | }; 209 | }; 210 | buildConfigurationList = 992F23831985BD6300320CAA /* Build configuration list for PBXProject "RKSwipeBetweenViewControllers" */; 211 | compatibilityVersion = "Xcode 3.2"; 212 | developmentRegion = English; 213 | hasScannedForEncodings = 0; 214 | knownRegions = ( 215 | en, 216 | Base, 217 | ); 218 | mainGroup = 992F237F1985BD6300320CAA; 219 | productRefGroup = 992F23891985BD6300320CAA /* Products */; 220 | projectDirPath = ""; 221 | projectRoot = ""; 222 | targets = ( 223 | 992F23871985BD6300320CAA /* RKSwipeBetweenViewControllers */, 224 | 992F23A81985BD6300320CAA /* RKSwipeBetweenViewControllersTests */, 225 | ); 226 | }; 227 | /* End PBXProject section */ 228 | 229 | /* Begin PBXResourcesBuildPhase section */ 230 | 992F23861985BD6300320CAA /* Resources */ = { 231 | isa = PBXResourcesBuildPhase; 232 | buildActionMask = 2147483647; 233 | files = ( 234 | 992F23A41985BD6300320CAA /* Images.xcassets in Resources */, 235 | 992F23961985BD6300320CAA /* InfoPlist.strings in Resources */, 236 | 992F239F1985BD6300320CAA /* Main.storyboard in Resources */, 237 | ); 238 | runOnlyForDeploymentPostprocessing = 0; 239 | }; 240 | 992F23A71985BD6300320CAA /* Resources */ = { 241 | isa = PBXResourcesBuildPhase; 242 | buildActionMask = 2147483647; 243 | files = ( 244 | 992F23B51985BD6400320CAA /* InfoPlist.strings in Resources */, 245 | ); 246 | runOnlyForDeploymentPostprocessing = 0; 247 | }; 248 | /* End PBXResourcesBuildPhase section */ 249 | 250 | /* Begin PBXSourcesBuildPhase section */ 251 | 992F23841985BD6300320CAA /* Sources */ = { 252 | isa = PBXSourcesBuildPhase; 253 | buildActionMask = 2147483647; 254 | files = ( 255 | 992F23C21985BDD500320CAA /* RKSwipeBetweenViewControllers.m in Sources */, 256 | 992F239C1985BD6300320CAA /* AppDelegate.m in Sources */, 257 | 992F23981985BD6300320CAA /* main.m in Sources */, 258 | ); 259 | runOnlyForDeploymentPostprocessing = 0; 260 | }; 261 | 992F23A51985BD6300320CAA /* Sources */ = { 262 | isa = PBXSourcesBuildPhase; 263 | buildActionMask = 2147483647; 264 | files = ( 265 | 992F23B71985BD6400320CAA /* RKSwipeBetweenViewControllersTests.m in Sources */, 266 | ); 267 | runOnlyForDeploymentPostprocessing = 0; 268 | }; 269 | /* End PBXSourcesBuildPhase section */ 270 | 271 | /* Begin PBXTargetDependency section */ 272 | 992F23AF1985BD6300320CAA /* PBXTargetDependency */ = { 273 | isa = PBXTargetDependency; 274 | target = 992F23871985BD6300320CAA /* RKSwipeBetweenViewControllers */; 275 | targetProxy = 992F23AE1985BD6300320CAA /* PBXContainerItemProxy */; 276 | }; 277 | /* End PBXTargetDependency section */ 278 | 279 | /* Begin PBXVariantGroup section */ 280 | 992F23941985BD6300320CAA /* InfoPlist.strings */ = { 281 | isa = PBXVariantGroup; 282 | children = ( 283 | 992F23951985BD6300320CAA /* en */, 284 | ); 285 | name = InfoPlist.strings; 286 | sourceTree = ""; 287 | }; 288 | 992F239D1985BD6300320CAA /* Main.storyboard */ = { 289 | isa = PBXVariantGroup; 290 | children = ( 291 | 992F239E1985BD6300320CAA /* Base */, 292 | ); 293 | name = Main.storyboard; 294 | sourceTree = ""; 295 | }; 296 | 992F23B31985BD6300320CAA /* InfoPlist.strings */ = { 297 | isa = PBXVariantGroup; 298 | children = ( 299 | 992F23B41985BD6300320CAA /* en */, 300 | ); 301 | name = InfoPlist.strings; 302 | sourceTree = ""; 303 | }; 304 | /* End PBXVariantGroup section */ 305 | 306 | /* Begin XCBuildConfiguration section */ 307 | 992F23B81985BD6400320CAA /* Debug */ = { 308 | isa = XCBuildConfiguration; 309 | buildSettings = { 310 | ALWAYS_SEARCH_USER_PATHS = NO; 311 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 312 | CLANG_CXX_LIBRARY = "libc++"; 313 | CLANG_ENABLE_MODULES = YES; 314 | CLANG_ENABLE_OBJC_ARC = YES; 315 | CLANG_WARN_BOOL_CONVERSION = YES; 316 | CLANG_WARN_CONSTANT_CONVERSION = YES; 317 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 318 | CLANG_WARN_EMPTY_BODY = YES; 319 | CLANG_WARN_ENUM_CONVERSION = YES; 320 | CLANG_WARN_INT_CONVERSION = YES; 321 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 322 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 323 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 324 | COPY_PHASE_STRIP = NO; 325 | GCC_C_LANGUAGE_STANDARD = gnu99; 326 | GCC_DYNAMIC_NO_PIC = NO; 327 | GCC_OPTIMIZATION_LEVEL = 0; 328 | GCC_PREPROCESSOR_DEFINITIONS = ( 329 | "DEBUG=1", 330 | "$(inherited)", 331 | ); 332 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 333 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 334 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 335 | GCC_WARN_UNDECLARED_SELECTOR = YES; 336 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 337 | GCC_WARN_UNUSED_FUNCTION = YES; 338 | GCC_WARN_UNUSED_VARIABLE = YES; 339 | IPHONEOS_DEPLOYMENT_TARGET = 7.1; 340 | ONLY_ACTIVE_ARCH = YES; 341 | SDKROOT = iphoneos; 342 | }; 343 | name = Debug; 344 | }; 345 | 992F23B91985BD6400320CAA /* Release */ = { 346 | isa = XCBuildConfiguration; 347 | buildSettings = { 348 | ALWAYS_SEARCH_USER_PATHS = NO; 349 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 350 | CLANG_CXX_LIBRARY = "libc++"; 351 | CLANG_ENABLE_MODULES = YES; 352 | CLANG_ENABLE_OBJC_ARC = YES; 353 | CLANG_WARN_BOOL_CONVERSION = YES; 354 | CLANG_WARN_CONSTANT_CONVERSION = YES; 355 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 356 | CLANG_WARN_EMPTY_BODY = YES; 357 | CLANG_WARN_ENUM_CONVERSION = YES; 358 | CLANG_WARN_INT_CONVERSION = YES; 359 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 360 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 361 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 362 | COPY_PHASE_STRIP = YES; 363 | ENABLE_NS_ASSERTIONS = NO; 364 | GCC_C_LANGUAGE_STANDARD = gnu99; 365 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 366 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 367 | GCC_WARN_UNDECLARED_SELECTOR = YES; 368 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 369 | GCC_WARN_UNUSED_FUNCTION = YES; 370 | GCC_WARN_UNUSED_VARIABLE = YES; 371 | IPHONEOS_DEPLOYMENT_TARGET = 7.1; 372 | SDKROOT = iphoneos; 373 | VALIDATE_PRODUCT = YES; 374 | }; 375 | name = Release; 376 | }; 377 | 992F23BB1985BD6400320CAA /* Debug */ = { 378 | isa = XCBuildConfiguration; 379 | buildSettings = { 380 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 381 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; 382 | CODE_SIGN_IDENTITY = "iPhone Developer"; 383 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 384 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 385 | GCC_PREFIX_HEADER = "RKSwipeBetweenViewControllers/RKSwipeBetweenViewControllers-Prefix.pch"; 386 | INFOPLIST_FILE = "RKSwipeBetweenViewControllers/RKSwipeBetweenViewControllers-Info.plist"; 387 | PRODUCT_NAME = "$(TARGET_NAME)"; 388 | PROVISIONING_PROFILE = ""; 389 | WRAPPER_EXTENSION = app; 390 | }; 391 | name = Debug; 392 | }; 393 | 992F23BC1985BD6400320CAA /* Release */ = { 394 | isa = XCBuildConfiguration; 395 | buildSettings = { 396 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 397 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; 398 | CODE_SIGN_IDENTITY = "iPhone Developer"; 399 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 400 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 401 | GCC_PREFIX_HEADER = "RKSwipeBetweenViewControllers/RKSwipeBetweenViewControllers-Prefix.pch"; 402 | INFOPLIST_FILE = "RKSwipeBetweenViewControllers/RKSwipeBetweenViewControllers-Info.plist"; 403 | PRODUCT_NAME = "$(TARGET_NAME)"; 404 | PROVISIONING_PROFILE = ""; 405 | WRAPPER_EXTENSION = app; 406 | }; 407 | name = Release; 408 | }; 409 | 992F23BE1985BD6400320CAA /* Debug */ = { 410 | isa = XCBuildConfiguration; 411 | buildSettings = { 412 | BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/RKSwipeBetweenViewControllers.app/RKSwipeBetweenViewControllers"; 413 | FRAMEWORK_SEARCH_PATHS = ( 414 | "$(SDKROOT)/Developer/Library/Frameworks", 415 | "$(inherited)", 416 | "$(DEVELOPER_FRAMEWORKS_DIR)", 417 | ); 418 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 419 | GCC_PREFIX_HEADER = "RKSwipeBetweenViewControllers/RKSwipeBetweenViewControllers-Prefix.pch"; 420 | GCC_PREPROCESSOR_DEFINITIONS = ( 421 | "DEBUG=1", 422 | "$(inherited)", 423 | ); 424 | INFOPLIST_FILE = "RKSwipeBetweenViewControllersTests/RKSwipeBetweenViewControllersTests-Info.plist"; 425 | PRODUCT_NAME = "$(TARGET_NAME)"; 426 | TEST_HOST = "$(BUNDLE_LOADER)"; 427 | WRAPPER_EXTENSION = xctest; 428 | }; 429 | name = Debug; 430 | }; 431 | 992F23BF1985BD6400320CAA /* Release */ = { 432 | isa = XCBuildConfiguration; 433 | buildSettings = { 434 | BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/RKSwipeBetweenViewControllers.app/RKSwipeBetweenViewControllers"; 435 | FRAMEWORK_SEARCH_PATHS = ( 436 | "$(SDKROOT)/Developer/Library/Frameworks", 437 | "$(inherited)", 438 | "$(DEVELOPER_FRAMEWORKS_DIR)", 439 | ); 440 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 441 | GCC_PREFIX_HEADER = "RKSwipeBetweenViewControllers/RKSwipeBetweenViewControllers-Prefix.pch"; 442 | INFOPLIST_FILE = "RKSwipeBetweenViewControllersTests/RKSwipeBetweenViewControllersTests-Info.plist"; 443 | PRODUCT_NAME = "$(TARGET_NAME)"; 444 | TEST_HOST = "$(BUNDLE_LOADER)"; 445 | WRAPPER_EXTENSION = xctest; 446 | }; 447 | name = Release; 448 | }; 449 | /* End XCBuildConfiguration section */ 450 | 451 | /* Begin XCConfigurationList section */ 452 | 992F23831985BD6300320CAA /* Build configuration list for PBXProject "RKSwipeBetweenViewControllers" */ = { 453 | isa = XCConfigurationList; 454 | buildConfigurations = ( 455 | 992F23B81985BD6400320CAA /* Debug */, 456 | 992F23B91985BD6400320CAA /* Release */, 457 | ); 458 | defaultConfigurationIsVisible = 0; 459 | defaultConfigurationName = Release; 460 | }; 461 | 992F23BA1985BD6400320CAA /* Build configuration list for PBXNativeTarget "RKSwipeBetweenViewControllers" */ = { 462 | isa = XCConfigurationList; 463 | buildConfigurations = ( 464 | 992F23BB1985BD6400320CAA /* Debug */, 465 | 992F23BC1985BD6400320CAA /* Release */, 466 | ); 467 | defaultConfigurationIsVisible = 0; 468 | defaultConfigurationName = Release; 469 | }; 470 | 992F23BD1985BD6400320CAA /* Build configuration list for PBXNativeTarget "RKSwipeBetweenViewControllersTests" */ = { 471 | isa = XCConfigurationList; 472 | buildConfigurations = ( 473 | 992F23BE1985BD6400320CAA /* Debug */, 474 | 992F23BF1985BD6400320CAA /* Release */, 475 | ); 476 | defaultConfigurationIsVisible = 0; 477 | defaultConfigurationName = Release; 478 | }; 479 | /* End XCConfigurationList section */ 480 | }; 481 | rootObject = 992F23801985BD6300320CAA /* Project object */; 482 | } 483 | -------------------------------------------------------------------------------- /RKSwipeBetweenViewControllers.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /RKSwipeBetweenViewControllers.xcodeproj/project.xcworkspace/xcshareddata/RKSwipeBetweenViewControllers.xccheckout: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDESourceControlProjectFavoriteDictionaryKey 6 | 7 | IDESourceControlProjectIdentifier 8 | 8CDE39A4-100E-47A8-AD0E-590D5CFA743F 9 | IDESourceControlProjectName 10 | RKSwipeBetweenViewControllers 11 | IDESourceControlProjectOriginsDictionary 12 | 13 | 4B0399F12BABABE784A39DABD0A3BD328254A059 14 | https://github.com/cwRichardKim/RKScrollingSegmentedControl.git 15 | 16 | IDESourceControlProjectPath 17 | RKSwipeBetweenViewControllers.xcodeproj 18 | IDESourceControlProjectRelativeInstallPathDictionary 19 | 20 | 4B0399F12BABABE784A39DABD0A3BD328254A059 21 | ../.. 22 | 23 | IDESourceControlProjectURL 24 | https://github.com/cwRichardKim/RKScrollingSegmentedControl.git 25 | IDESourceControlProjectVersion 26 | 111 27 | IDESourceControlProjectWCCIdentifier 28 | 4B0399F12BABABE784A39DABD0A3BD328254A059 29 | IDESourceControlProjectWCConfigurations 30 | 31 | 32 | IDESourceControlRepositoryExtensionIdentifierKey 33 | public.vcs.git 34 | IDESourceControlWCCIdentifierKey 35 | 4B0399F12BABABE784A39DABD0A3BD328254A059 36 | IDESourceControlWCCName 37 | RKSwipeBetweenViewControllers 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /RKSwipeBetweenViewControllers.xcodeproj/project.xcworkspace/xcuserdata/cwrichardkim93.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cwRichardKim/RKSwipeBetweenViewControllers/b989868122712dfa818f0740c5814076409b84c7/RKSwipeBetweenViewControllers.xcodeproj/project.xcworkspace/xcuserdata/cwrichardkim93.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /RKSwipeBetweenViewControllers.xcodeproj/xcuserdata/cwrichardkim93.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /RKSwipeBetweenViewControllers.xcodeproj/xcuserdata/cwrichardkim93.xcuserdatad/xcschemes/RKSwipeBetweenViewControllers.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 33 | 39 | 40 | 41 | 42 | 43 | 49 | 50 | 51 | 52 | 61 | 62 | 68 | 69 | 70 | 71 | 72 | 73 | 79 | 80 | 86 | 87 | 88 | 89 | 91 | 92 | 95 | 96 | 97 | -------------------------------------------------------------------------------- /RKSwipeBetweenViewControllers.xcodeproj/xcuserdata/cwrichardkim93.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | RKSwipeBetweenViewControllers.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | 992F23871985BD6300320CAA 16 | 17 | primary 18 | 19 | 20 | 992F23A81985BD6300320CAA 21 | 22 | primary 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /RKSwipeBetweenViewControllers/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // RKSwipeBetweenViewControllers 4 | // 5 | // Created by Richard Kim on 7/24/14. 6 | // Copyright (c) 2014 Richard Kim. All rights reserved. 7 | // 8 | 9 | /* 10 | scrolling too fast is a little janky 11 | 12 | */ 13 | 14 | 15 | #import 16 | 17 | @interface AppDelegate : UIResponder 18 | 19 | @property (strong, nonatomic) UIWindow *window; 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /RKSwipeBetweenViewControllers/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // RKSwipeBetweenViewControllers 4 | // 5 | // Created by Richard Kim on 7/24/14. 6 | // Copyright (c) 2014 Richard Kim. All rights reserved. 7 | // 8 | 9 | #import "AppDelegate.h" 10 | 11 | #import "RKSwipeBetweenViewControllers.h" 12 | 13 | @implementation AppDelegate 14 | 15 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 16 | { 17 | // Override point for customization after application launch. 18 | self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds]; 19 | 20 | UIPageViewController *pageController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil]; 21 | 22 | RKSwipeBetweenViewControllers *navigationController = [[RKSwipeBetweenViewControllers alloc]initWithRootViewController:pageController]; 23 | 24 | //%%% DEMO CONTROLLERS 25 | UIViewController *demo = [[UIViewController alloc]init]; 26 | UIViewController *demo2 = [[UIViewController alloc]init]; 27 | UIViewController *demo3 = [[UIViewController alloc]init]; 28 | UIViewController *demo4 = [[UIViewController alloc]init]; 29 | demo.view.backgroundColor = [UIColor redColor]; 30 | demo2.view.backgroundColor = [UIColor whiteColor]; 31 | demo3.view.backgroundColor = [UIColor grayColor]; 32 | demo4.view.backgroundColor = [UIColor orangeColor]; 33 | [navigationController.viewControllerArray addObjectsFromArray:@[demo,demo2,demo3,demo4]]; 34 | 35 | self.window.rootViewController = navigationController; 36 | [self.window makeKeyAndVisible]; 37 | return YES; 38 | } 39 | 40 | - (void)applicationWillResignActive:(UIApplication *)application 41 | { 42 | // 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. 43 | // 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. 44 | } 45 | 46 | - (void)applicationDidEnterBackground:(UIApplication *)application 47 | { 48 | // 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. 49 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 50 | } 51 | 52 | - (void)applicationWillEnterForeground:(UIApplication *)application 53 | { 54 | // 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. 55 | } 56 | 57 | - (void)applicationDidBecomeActive:(UIApplication *)application 58 | { 59 | // 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. 60 | } 61 | 62 | - (void)applicationWillTerminate:(UIApplication *)application 63 | { 64 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 65 | } 66 | 67 | @end 68 | -------------------------------------------------------------------------------- /RKSwipeBetweenViewControllers/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /RKSwipeBetweenViewControllers/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "40x40", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "60x60", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "60x60", 21 | "scale" : "3x" 22 | } 23 | ], 24 | "info" : { 25 | "version" : 1, 26 | "author" : "xcode" 27 | } 28 | } -------------------------------------------------------------------------------- /RKSwipeBetweenViewControllers/Images.xcassets/LaunchImage.launchimage/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "orientation" : "portrait", 5 | "idiom" : "iphone", 6 | "extent" : "full-screen", 7 | "minimum-system-version" : "7.0", 8 | "scale" : "2x" 9 | }, 10 | { 11 | "orientation" : "portrait", 12 | "idiom" : "iphone", 13 | "subtype" : "retina4", 14 | "extent" : "full-screen", 15 | "minimum-system-version" : "7.0", 16 | "scale" : "2x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /RKSwipeBetweenViewControllers/Images.xcassets/menu.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x", 6 | "filename" : "menu27 2 + Rectangle 98.png" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x", 11 | "filename" : "menu27 2 + Rectangle 98-1.png" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /RKSwipeBetweenViewControllers/Images.xcassets/menu.imageset/menu27 2 + Rectangle 98-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cwRichardKim/RKSwipeBetweenViewControllers/b989868122712dfa818f0740c5814076409b84c7/RKSwipeBetweenViewControllers/Images.xcassets/menu.imageset/menu27 2 + Rectangle 98-1.png -------------------------------------------------------------------------------- /RKSwipeBetweenViewControllers/Images.xcassets/menu.imageset/menu27 2 + Rectangle 98.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cwRichardKim/RKSwipeBetweenViewControllers/b989868122712dfa818f0740c5814076409b84c7/RKSwipeBetweenViewControllers/Images.xcassets/menu.imageset/menu27 2 + Rectangle 98.png -------------------------------------------------------------------------------- /RKSwipeBetweenViewControllers/RKSwipeBetweenViewControllers-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | ${PRODUCT_NAME} 9 | CFBundleExecutable 10 | ${EXECUTABLE_NAME} 11 | CFBundleIdentifier 12 | com.weparty-app.${PRODUCT_NAME:rfc1034identifier} 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | ${PRODUCT_NAME} 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 0.0.1 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1.0 25 | LSRequiresIPhoneOS 26 | 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /RKSwipeBetweenViewControllers/RKSwipeBetweenViewControllers-Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header 3 | // 4 | // The contents of this file are implicitly included at the beginning of every source file. 5 | // 6 | 7 | #import 8 | 9 | #ifndef __IPHONE_5_0 10 | #warning "This project uses features only available in iOS SDK 5.0 and later." 11 | #endif 12 | 13 | #ifdef __OBJC__ 14 | #import 15 | #import 16 | #endif 17 | -------------------------------------------------------------------------------- /RKSwipeBetweenViewControllers/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /RKSwipeBetweenViewControllers/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // RKSwipeBetweenViewControllers 4 | // 5 | // Created by Richard Kim on 7/28/14. 6 | // Copyright (c) 2014 Richard Kim. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #import "AppDelegate.h" 12 | 13 | int main(int argc, char * argv[]) 14 | { 15 | @autoreleasepool { 16 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /RKSwipeBetweenViewControllersTests/RKSwipeBetweenViewControllersTests-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | com.weparty-app.${PRODUCT_NAME:rfc1034identifier} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundlePackageType 14 | BNDL 15 | CFBundleShortVersionString 16 | 1.0 17 | CFBundleSignature 18 | ???? 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /RKSwipeBetweenViewControllersTests/RKSwipeBetweenViewControllersTests.m: -------------------------------------------------------------------------------- 1 | // 2 | // RKSwipeBetweenViewControllersTests.m 3 | // RKSwipeBetweenViewControllersTests 4 | // 5 | // Created by Richard Kim on 7/28/14. 6 | // Copyright (c) 2014 Richard Kim. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface RKSwipeBetweenViewControllersTests : XCTestCase 12 | 13 | @end 14 | 15 | @implementation RKSwipeBetweenViewControllersTests 16 | 17 | - (void)setUp 18 | { 19 | [super setUp]; 20 | // Put setup code here. This method is called before the invocation of each test method in the class. 21 | } 22 | 23 | - (void)tearDown 24 | { 25 | // Put teardown code here. This method is called after the invocation of each test method in the class. 26 | [super tearDown]; 27 | } 28 | 29 | - (void)testExample 30 | { 31 | XCTFail(@"No implementation for \"%s\"", __PRETTY_FUNCTION__); 32 | } 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /RKSwipeBetweenViewControllersTests/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | --------------------------------------------------------------------------------